From fbc890a466d4f0d9c8fe74cee490cdde388c1e59 Mon Sep 17 00:00:00 2001 From: Anton Korzunov Date: Sat, 2 Nov 2019 18:07:54 +1100 Subject: [PATCH 1/4] fix: use logger.warn instead of console to report tail update, fixes #1386 --- src/hot.dev.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hot.dev.js b/src/hot.dev.js index 016b0f9fe..20aee2162 100644 --- a/src/hot.dev.js +++ b/src/hot.dev.js @@ -66,7 +66,7 @@ const makeHotExport = (sourceModule, moduleId) => { // we know that some components were updated, but not tracking which ones // even if their updates might be incorporated automatically (like lazy) // we dont know which one should be tracked, and which updates are important - console.warn( + logger.warn( 'React-Hot-Loader: some components were updated out-of-bound. Updating your app to reconcile the changes.', ); deepUpdate(); From 1072303e20ddf2f2830f5d60c116b35f60640e37 Mon Sep 17 00:00:00 2001 From: Anton Korzunov Date: Sat, 2 Nov 2019 18:09:41 +1100 Subject: [PATCH 2/4] fix: dont write to elementType if it is not defined, fixes #1357 --- src/internal/getReactStack.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/internal/getReactStack.js b/src/internal/getReactStack.js index d0736b123..71819a7ab 100644 --- a/src/internal/getReactStack.js +++ b/src/internal/getReactStack.js @@ -42,7 +42,10 @@ const markUpdate = ({ fiber }) => { if (fiber.alternate) { fiber.alternate.expirationTime = 1; fiber.alternate.type = fiber.type; - fiber.alternate.elementType = fiber.elementType; + // elementType might not exists in older react versions + if ('elementType' in fiber.alternate) { + fiber.alternate.elementType = fiber.elementType; + } } if (fiber.memoizedProps && typeof fiber.memoizedProps === 'object') { From af42c1a7a83683705af7293a14ac71410f53a601 Mon Sep 17 00:00:00 2001 From: Anton Korzunov Date: Sat, 2 Nov 2019 18:11:52 +1100 Subject: [PATCH 3/4] fix: more @types/react to dependencies, fixes #1359 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index d92c0fb06..65f6645c7 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,6 @@ ], "devDependencies": { "@hot-loader/react-dom": "^16.8.6", - "@types/react": "^16.9.1", "babel-cli": "^6.7.5", "babel-core": "^6.26.3", "babel-eslint": "^8.2.3", @@ -103,6 +102,7 @@ "react-dom": "^15.0.0 || ^16.0.0" }, "dependencies": { + "@types/react": "^15.0.0 || ^16.0.0", "fast-levenshtein": "^2.0.6", "global": "^4.3.0", "hoist-non-react-statics": "^3.3.0", diff --git a/yarn.lock b/yarn.lock index 59cec6bce..727fd6fb0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -164,10 +164,10 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.5.7.tgz#c6f1e0d0109ff358b132d98b7b4025c7a7b707c5" integrity sha512-a6WH0fXkgPNiGIuLjjdpf0n/GnmgWZ4vLuVIJJnDwhmRDPEaiRBcy5ofQPh+EJFua0S1QWmk1745+JqZQGnJ8Q== -"@types/react@^16.9.1": - version "16.9.1" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.1.tgz#862c83b4c9d5cd116e42fd9a4f3694843cd2c051" - integrity sha512-jGM2x8F7m7/r+81N/BOaUKVwbC5Cdw6ExlWEUpr77XPwVeNvAppnPEnMMLMfxRDYL8FPEX8MHjwtD2NQMJ0yyQ== +"@types/react@^16.9.11": + version "16.9.11" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.11.tgz#70e0b7ad79058a7842f25ccf2999807076ada120" + integrity sha512-UBT4GZ3PokTXSWmdgC/GeCGEJXE5ofWyibCcecRLUVN2ZBpXQGVgQGtG2foS7CrTKFKlQVVswLvf7Js6XA/CVQ== dependencies: "@types/prop-types" "*" csstype "^2.2.0" From 9561d662d70357afd75e472c29f98c618a644680 Mon Sep 17 00:00:00 2001 From: Anton Korzunov Date: Sat, 2 Nov 2019 18:21:32 +1100 Subject: [PATCH 4/4] fix: explain why RHL could not be activated, fixes #1362 --- index.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index 98dde5a8a..ab75c7e99 100644 --- a/index.js +++ b/index.js @@ -13,18 +13,28 @@ if (process.env.NODE_ENV === 'production') { module.exports.hot.shouldWrapWithAppContainer = true; } else { var evalAllowed = false; + var evalError = null; try { eval('evalAllowed = true'); } catch (e) { // eval not allowed due to CSP + evalError = e && e.message ? e.message : 'unknown reason'; } + // TODO: dont use eval to update methods. see #1273 // RHL needs setPrototypeOf to operate Component inheritance, and eval to patch methods var jsFeaturesPresent = !!Object.setPrototypeOf; if (!jsFeaturesPresent || !evalAllowed) { // we are not in prod mode, but RHL could not be activated - console.warn('React-Hot-Loader is not supported in this environment.'); + console.warn( + 'React-Hot-Loader is not supported in this environment:', + [ + !jsFeaturesPresent && "some JS features are missing", + !evalAllowed && "`eval` is not allowed(" + evalError + ")" + ].join(','), + '.' + ); module.exports = require('./dist/react-hot-loader.production.min.js'); } else { module.exports = window.reactHotLoaderGlobal = require('./dist/react-hot-loader.development.js');