Skip to content

Commit

Permalink
update webpack (#35867)
Browse files Browse the repository at this point in the history
  • Loading branch information
sokra committed Apr 7, 2022
1 parent f308826 commit 0164ac6
Show file tree
Hide file tree
Showing 7 changed files with 2,031 additions and 504 deletions.
Expand Up @@ -28,7 +28,8 @@ module.exports = function () {
var currentStatus = "idle";

// while downloading
var blockingPromises;
var blockingPromises = 0;
var blockingPromisesWaiting = [];

// The update info
var currentUpdateApplyHandlers;
Expand Down Expand Up @@ -218,29 +219,40 @@ module.exports = function () {
return Promise.all(results);
}

function unblock() {
if (--blockingPromises === 0) {
setStatus("ready").then(function () {
if (blockingPromises === 0) {
var list = blockingPromisesWaiting;
blockingPromisesWaiting = [];
for (var i = 0; i < list.length; i++) {
list[i]();
}
}
});
}
}

function trackBlockingPromise(promise) {
switch (currentStatus) {
case "ready":
setStatus("prepare");
blockingPromises.push(promise);
waitForBlockingPromises(function () {
return setStatus("ready");
});
return promise;
/* fallthrough */
case "prepare":
blockingPromises.push(promise);
blockingPromises++;
promise.then(unblock, unblock);
return promise;
default:
return promise;
}
}

function waitForBlockingPromises(fn) {
if (blockingPromises.length === 0) return fn();
var blocker = blockingPromises;
blockingPromises = [];
return Promise.all(blocker).then(function () {
return waitForBlockingPromises(fn);
if (blockingPromises === 0) return fn();
return new Promise(function (resolve) {
blockingPromisesWaiting.push(function () {
resolve(fn());
});
});
}

Expand All @@ -261,7 +273,6 @@ module.exports = function () {

return setStatus("prepare").then(function () {
var updatedModules = [];
blockingPromises = [];
currentUpdateApplyHandlers = [];

return Promise.all(
Expand Down Expand Up @@ -298,7 +309,11 @@ module.exports = function () {
function hotApply(options) {
if (currentStatus !== "ready") {
return Promise.resolve().then(function () {
throw new Error("apply() is only allowed in ready status");
throw new Error(
"apply() is only allowed in ready status (state: " +
currentStatus +
")"
);
});
}
return internalApply(options);
Expand Down
Expand Up @@ -443,15 +443,16 @@ module.exports = function () {
) {
promises.push($loadUpdateChunk$(chunkId, updatedModulesList));
currentUpdateChunks[chunkId] = true;
} else {
currentUpdateChunks[chunkId] = false;
}
});
if ($ensureChunkHandlers$) {
$ensureChunkHandlers$.$key$Hmr = function (chunkId, promises) {
if (
currentUpdateChunks &&
!$hasOwnProperty$(currentUpdateChunks, chunkId) &&
$hasOwnProperty$($installedChunks$, chunkId) &&
$installedChunks$[chunkId] !== undefined
$hasOwnProperty$(currentUpdateChunks, chunkId) &&
!currentUpdateChunks[chunkId]
) {
promises.push($loadUpdateChunk$(chunkId));
currentUpdateChunks[chunkId] = true;
Expand Down
43 changes: 29 additions & 14 deletions packages/next/compiled/webpack/HotModuleReplacement.runtime.js
Expand Up @@ -28,7 +28,8 @@ module.exports = function () {
var currentStatus = "idle";

// while downloading
var blockingPromises;
var blockingPromises = 0;
var blockingPromisesWaiting = [];

// The update info
var currentUpdateApplyHandlers;
Expand Down Expand Up @@ -218,29 +219,40 @@ module.exports = function () {
return Promise.all(results);
}

function unblock() {
if (--blockingPromises === 0) {
setStatus("ready").then(function () {
if (blockingPromises === 0) {
var list = blockingPromisesWaiting;
blockingPromisesWaiting = [];
for (var i = 0; i < list.length; i++) {
list[i]();
}
}
});
}
}

function trackBlockingPromise(promise) {
switch (currentStatus) {
case "ready":
setStatus("prepare");
blockingPromises.push(promise);
waitForBlockingPromises(function () {
return setStatus("ready");
});
return promise;
/* fallthrough */
case "prepare":
blockingPromises.push(promise);
blockingPromises++;
promise.then(unblock, unblock);
return promise;
default:
return promise;
}
}

function waitForBlockingPromises(fn) {
if (blockingPromises.length === 0) return fn();
var blocker = blockingPromises;
blockingPromises = [];
return Promise.all(blocker).then(function () {
return waitForBlockingPromises(fn);
if (blockingPromises === 0) return fn();
return new Promise(function (resolve) {
blockingPromisesWaiting.push(function () {
resolve(fn());
});
});
}

Expand All @@ -261,7 +273,6 @@ module.exports = function () {

return setStatus("prepare").then(function () {
var updatedModules = [];
blockingPromises = [];
currentUpdateApplyHandlers = [];

return Promise.all(
Expand Down Expand Up @@ -298,7 +309,11 @@ module.exports = function () {
function hotApply(options) {
if (currentStatus !== "ready") {
return Promise.resolve().then(function () {
throw new Error("apply() is only allowed in ready status");
throw new Error(
"apply() is only allowed in ready status (state: " +
currentStatus +
")"
);
});
}
return internalApply(options);
Expand Down
Expand Up @@ -443,15 +443,16 @@ module.exports = function () {
) {
promises.push($loadUpdateChunk$(chunkId, updatedModulesList));
currentUpdateChunks[chunkId] = true;
} else {
currentUpdateChunks[chunkId] = false;
}
});
if ($ensureChunkHandlers$) {
$ensureChunkHandlers$.$key$Hmr = function (chunkId, promises) {
if (
currentUpdateChunks &&
!$hasOwnProperty$(currentUpdateChunks, chunkId) &&
$hasOwnProperty$($installedChunks$, chunkId) &&
$installedChunks$[chunkId] !== undefined
$hasOwnProperty$(currentUpdateChunks, chunkId) &&
!currentUpdateChunks[chunkId]
) {
promises.push($loadUpdateChunk$(chunkId));
currentUpdateChunks[chunkId] = true;
Expand Down

0 comments on commit 0164ac6

Please sign in to comment.