From d851e7f74de01bac0427e1192a5f3a353989e5ed Mon Sep 17 00:00:00 2001 From: Jiachi Liu Date: Mon, 8 Apr 2024 14:59:45 +0200 Subject: [PATCH] add in the doc --- .../serverComponentsExternalPackages.mdx | 1 + .../packages/HotModuleReplacement.runtime.js | 795 +++++++++--------- 2 files changed, 399 insertions(+), 397 deletions(-) diff --git a/docs/02-app/02-api-reference/05-next-config-js/serverComponentsExternalPackages.mdx b/docs/02-app/02-api-reference/05-next-config-js/serverComponentsExternalPackages.mdx index c4953d16953aca..da52a4dbe55427 100644 --- a/docs/02-app/02-api-reference/05-next-config-js/serverComponentsExternalPackages.mdx +++ b/docs/02-app/02-api-reference/05-next-config-js/serverComponentsExternalPackages.mdx @@ -68,6 +68,7 @@ Next.js includes a [short list of popular packages](https://github.com/vercel/ne - `ts-node` - `typescript` - `vscode-oniguruma` +- `undici` - `webpack` - `websocket` - `zeromq` diff --git a/packages/next/src/bundles/webpack/packages/HotModuleReplacement.runtime.js b/packages/next/src/bundles/webpack/packages/HotModuleReplacement.runtime.js index a54aa0e628c9c7..1c1c039c20f9a6 100644 --- a/packages/next/src/bundles/webpack/packages/HotModuleReplacement.runtime.js +++ b/packages/next/src/bundles/webpack/packages/HotModuleReplacement.runtime.js @@ -3,405 +3,406 @@ Author Tobias Koppers @sokra */ -"use strict"; +'use strict' -var $interceptModuleExecution$ = undefined; -var $moduleCache$ = undefined; +var $interceptModuleExecution$ = undefined +var $moduleCache$ = undefined // eslint-disable-next-line no-unused-vars -var $hmrModuleData$ = undefined; +var $hmrModuleData$ = undefined /** @type {() => Promise} */ -var $hmrDownloadManifest$ = undefined; -var $hmrDownloadUpdateHandlers$ = undefined; -var $hmrInvalidateModuleHandlers$ = undefined; -var __webpack_require__ = undefined; +var $hmrDownloadManifest$ = undefined +var $hmrDownloadUpdateHandlers$ = undefined +var $hmrInvalidateModuleHandlers$ = undefined +var __webpack_require__ = undefined module.exports = function () { - var currentModuleData = {}; - var installedModules = $moduleCache$; - - // module and require creation - var currentChildModule; - var currentParents = []; - - // status - var registeredStatusHandlers = []; - var currentStatus = "idle"; - - // while downloading - var blockingPromises = 0; - var blockingPromisesWaiting = []; - - // The update info - var currentUpdateApplyHandlers; - var queuedInvalidatedModules; - - $hmrModuleData$ = currentModuleData; - - $interceptModuleExecution$.push(function (options) { - var module = options.module; - var require = createRequire(options.require, options.id); - module.hot = createModuleHotObject(options.id, module); - module.parents = currentParents; - module.children = []; - currentParents = []; - options.require = require; - }); - - $hmrDownloadUpdateHandlers$ = {}; - $hmrInvalidateModuleHandlers$ = {}; - - function createRequire(require, moduleId) { - var me = installedModules[moduleId]; - if (!me) return require; - var fn = function (request) { - if (me.hot.active) { - if (installedModules[request]) { - var parents = installedModules[request].parents; - if (parents.indexOf(moduleId) === -1) { - parents.push(moduleId); - } - } else { - currentParents = [moduleId]; - currentChildModule = request; - } - if (me.children.indexOf(request) === -1) { - me.children.push(request); - } - } else { - console.warn( - "[HMR] unexpected require(" + - request + - ") from disposed module " + - moduleId - ); - currentParents = []; - } - return require(request); - }; - var createPropertyDescriptor = function (name) { - return { - configurable: true, - enumerable: true, - get: function () { - return require[name]; - }, - set: function (value) { - require[name] = value; - } - }; - }; - for (var name in require) { - if (Object.prototype.hasOwnProperty.call(require, name) && name !== "e") { - Object.defineProperty(fn, name, createPropertyDescriptor(name)); - } - } - fn.e = function (chunkId, fetchPriority) { - return trackBlockingPromise(require.e(chunkId, fetchPriority)); - }; - return fn; - } - - function createModuleHotObject(moduleId, me) { - var _main = currentChildModule !== moduleId; - var hot = { - // private stuff - _acceptedDependencies: {}, - _acceptedErrorHandlers: {}, - _declinedDependencies: {}, - _selfAccepted: false, - _selfDeclined: false, - _selfInvalidated: false, - _disposeHandlers: [], - _main: _main, - _requireSelf: function () { - currentParents = me.parents.slice(); - currentChildModule = _main ? undefined : moduleId; - __webpack_require__(moduleId); - }, - - // Module API - active: true, - accept: function (dep, callback, errorHandler) { - if (dep === undefined) hot._selfAccepted = true; - else if (typeof dep === "function") hot._selfAccepted = dep; - else if (typeof dep === "object" && dep !== null) { - for (var i = 0; i < dep.length; i++) { - hot._acceptedDependencies[dep[i]] = callback || function () {}; - hot._acceptedErrorHandlers[dep[i]] = errorHandler; - } - } else { - hot._acceptedDependencies[dep] = callback || function () {}; - hot._acceptedErrorHandlers[dep] = errorHandler; - } - }, - decline: function (dep) { - if (dep === undefined) hot._selfDeclined = true; - else if (typeof dep === "object" && dep !== null) - for (var i = 0; i < dep.length; i++) - hot._declinedDependencies[dep[i]] = true; - else hot._declinedDependencies[dep] = true; - }, - dispose: function (callback) { - hot._disposeHandlers.push(callback); - }, - addDisposeHandler: function (callback) { - hot._disposeHandlers.push(callback); - }, - removeDisposeHandler: function (callback) { - var idx = hot._disposeHandlers.indexOf(callback); - if (idx >= 0) hot._disposeHandlers.splice(idx, 1); - }, - invalidate: function () { - this._selfInvalidated = true; - switch (currentStatus) { - case "idle": - currentUpdateApplyHandlers = []; - Object.keys($hmrInvalidateModuleHandlers$).forEach(function (key) { - $hmrInvalidateModuleHandlers$[key]( - moduleId, - currentUpdateApplyHandlers - ); - }); - setStatus("ready"); - break; - case "ready": - Object.keys($hmrInvalidateModuleHandlers$).forEach(function (key) { - $hmrInvalidateModuleHandlers$[key]( - moduleId, - currentUpdateApplyHandlers - ); - }); - break; - case "prepare": - case "check": - case "dispose": - case "apply": - (queuedInvalidatedModules = queuedInvalidatedModules || []).push( - moduleId - ); - break; - default: - // ignore requests in error states - break; - } - }, - - // Management API - check: hotCheck, - apply: hotApply, - status: function (l) { - if (!l) return currentStatus; - registeredStatusHandlers.push(l); - }, - addStatusHandler: function (l) { - registeredStatusHandlers.push(l); - }, - removeStatusHandler: function (l) { - var idx = registeredStatusHandlers.indexOf(l); - if (idx >= 0) registeredStatusHandlers.splice(idx, 1); - }, - - //inherit from previous dispose call - data: currentModuleData[moduleId] - }; - currentChildModule = undefined; - return hot; - } - - function setStatus(newStatus) { - currentStatus = newStatus; - var results = []; - - for (var i = 0; i < registeredStatusHandlers.length; i++) - results[i] = registeredStatusHandlers[i].call(null, newStatus); - - 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"); - /* fallthrough */ - case "prepare": - blockingPromises++; - promise.then(unblock, unblock); - return promise; - default: - return promise; - } - } - - function waitForBlockingPromises(fn) { - if (blockingPromises === 0) return fn(); - return new Promise(function (resolve) { - blockingPromisesWaiting.push(function () { - resolve(fn()); - }); - }); - } - - function hotCheck(applyOnUpdate) { - if (currentStatus !== "idle") { - throw new Error("check() is only allowed in idle status"); - } - return setStatus("check") - .then($hmrDownloadManifest$) - .then(function (update) { - if (!update) { - return setStatus(applyInvalidatedModules() ? "ready" : "idle").then( - function () { - return null; - } - ); - } - - return setStatus("prepare").then(function () { - var updatedModules = []; - currentUpdateApplyHandlers = []; - - return Promise.all( - Object.keys($hmrDownloadUpdateHandlers$).reduce(function ( - promises, - key - ) { - $hmrDownloadUpdateHandlers$[key]( - update.c, - update.r, - update.m, - promises, - currentUpdateApplyHandlers, - updatedModules - ); - return promises; - }, []) - ).then(function () { - return waitForBlockingPromises(function () { - if (applyOnUpdate) { - return internalApply(applyOnUpdate); - } else { - return setStatus("ready").then(function () { - return updatedModules; - }); - } - }); - }); - }); - }); - } - - function hotApply(options) { - if (currentStatus !== "ready") { - return Promise.resolve().then(function () { - throw new Error( - "apply() is only allowed in ready status (state: " + - currentStatus + - ")" - ); - }); - } - return internalApply(options); - } - - function internalApply(options) { - options = options || {}; - - applyInvalidatedModules(); - - var results = currentUpdateApplyHandlers.map(function (handler) { - return handler(options); - }); - currentUpdateApplyHandlers = undefined; - - var errors = results - .map(function (r) { - return r.error; - }) - .filter(Boolean); - - if (errors.length > 0) { - return setStatus("abort").then(function () { - throw errors[0]; - }); - } - - // Now in "dispose" phase - var disposePromise = setStatus("dispose"); - - results.forEach(function (result) { - if (result.dispose) result.dispose(); - }); - - // Now in "apply" phase - var applyPromise = setStatus("apply"); - - var error; - var reportError = function (err) { - if (!error) error = err; - }; - - var outdatedModules = []; - results.forEach(function (result) { - if (result.apply) { - var modules = result.apply(reportError); - if (modules) { - for (var i = 0; i < modules.length; i++) { - outdatedModules.push(modules[i]); - } - } - } - }); - - return Promise.all([disposePromise, applyPromise]).then(function () { - // handle errors in accept handlers and self accepted module load - if (error) { - return setStatus("fail").then(function () { - throw error; - }); - } - - if (queuedInvalidatedModules) { - return internalApply(options).then(function (list) { - outdatedModules.forEach(function (moduleId) { - if (list.indexOf(moduleId) < 0) list.push(moduleId); - }); - return list; - }); - } - - return setStatus("idle").then(function () { - return outdatedModules; - }); - }); - } - - function applyInvalidatedModules() { - if (queuedInvalidatedModules) { - if (!currentUpdateApplyHandlers) currentUpdateApplyHandlers = []; - Object.keys($hmrInvalidateModuleHandlers$).forEach(function (key) { - queuedInvalidatedModules.forEach(function (moduleId) { - $hmrInvalidateModuleHandlers$[key]( - moduleId, - currentUpdateApplyHandlers - ); - }); - }); - queuedInvalidatedModules = undefined; - return true; - } - } -}; + var currentModuleData = {} + var installedModules = $moduleCache$ + + // module and require creation + var currentChildModule + var currentParents = [] + + // status + var registeredStatusHandlers = [] + var currentStatus = 'idle' + + // while downloading + var blockingPromises = 0 + var blockingPromisesWaiting = [] + + // The update info + var currentUpdateApplyHandlers + var queuedInvalidatedModules + + $hmrModuleData$ = currentModuleData + + $interceptModuleExecution$.push(function (options) { + var module = options.module + var require = createRequire(options.require, options.id) + module.hot = createModuleHotObject(options.id, module) + module.parents = currentParents + module.children = [] + currentParents = [] + options.require = require + }) + + $hmrDownloadUpdateHandlers$ = {} + $hmrInvalidateModuleHandlers$ = {} + + function createRequire(require, moduleId) { + var me = installedModules[moduleId] + if (!me) return require + var fn = function (request) { + if (me.hot.active) { + if (installedModules[request]) { + var parents = installedModules[request].parents + if (parents.indexOf(moduleId) === -1) { + parents.push(moduleId) + } + } else { + currentParents = [moduleId] + currentChildModule = request + } + if (me.children.indexOf(request) === -1) { + me.children.push(request) + } + } else { + console.warn( + '[HMR] unexpected require(' + + request + + ') from disposed module ' + + moduleId + ) + currentParents = [] + } + return require(request) + } + var createPropertyDescriptor = function (name) { + return { + configurable: true, + enumerable: true, + get: function () { + return require[name] + }, + set: function (value) { + require[name] = value + }, + } + } + for (var name in require) { + if (Object.prototype.hasOwnProperty.call(require, name) && name !== 'e') { + Object.defineProperty(fn, name, createPropertyDescriptor(name)) + } + } + fn.e = function (chunkId, fetchPriority) { + return trackBlockingPromise(require.e(chunkId, fetchPriority)) + } + return fn + } + + function createModuleHotObject(moduleId, me) { + var _main = currentChildModule !== moduleId + var hot = { + // private stuff + _acceptedDependencies: {}, + _acceptedErrorHandlers: {}, + _declinedDependencies: {}, + _selfAccepted: false, + _selfDeclined: false, + _selfInvalidated: false, + _disposeHandlers: [], + _main: _main, + _requireSelf: function () { + currentParents = me.parents.slice() + currentChildModule = _main ? undefined : moduleId + __webpack_require__(moduleId) + }, + + // Module API + active: true, + accept: function (dep, callback, errorHandler) { + if (dep === undefined) hot._selfAccepted = true + else if (typeof dep === 'function') hot._selfAccepted = dep + else if (typeof dep === 'object' && dep !== null) { + for (var i = 0; i < dep.length; i++) { + hot._acceptedDependencies[dep[i]] = callback || function () {} + hot._acceptedErrorHandlers[dep[i]] = errorHandler + } + } else { + hot._acceptedDependencies[dep] = callback || function () {} + hot._acceptedErrorHandlers[dep] = errorHandler + } + }, + decline: function (dep) { + if (dep === undefined) hot._selfDeclined = true + else if (typeof dep === 'object' && dep !== null) + for (var i = 0; i < dep.length; i++) + hot._declinedDependencies[dep[i]] = true + else hot._declinedDependencies[dep] = true + }, + dispose: function (callback) { + hot._disposeHandlers.push(callback) + }, + addDisposeHandler: function (callback) { + hot._disposeHandlers.push(callback) + }, + removeDisposeHandler: function (callback) { + var idx = hot._disposeHandlers.indexOf(callback) + if (idx >= 0) hot._disposeHandlers.splice(idx, 1) + }, + invalidate: function () { + this._selfInvalidated = true + switch (currentStatus) { + case 'idle': + currentUpdateApplyHandlers = [] + Object.keys($hmrInvalidateModuleHandlers$).forEach(function (key) { + $hmrInvalidateModuleHandlers$[key]( + moduleId, + currentUpdateApplyHandlers + ) + }) + setStatus('ready') + break + case 'ready': + Object.keys($hmrInvalidateModuleHandlers$).forEach(function (key) { + $hmrInvalidateModuleHandlers$[key]( + moduleId, + currentUpdateApplyHandlers + ) + }) + break + case 'prepare': + case 'check': + case 'dispose': + case 'apply': + ;(queuedInvalidatedModules = queuedInvalidatedModules || []).push( + moduleId + ) + break + default: + // ignore requests in error states + break + } + }, + + // Management API + check: hotCheck, + apply: hotApply, + status: function (l) { + if (!l) return currentStatus + registeredStatusHandlers.push(l) + }, + addStatusHandler: function (l) { + registeredStatusHandlers.push(l) + }, + removeStatusHandler: function (l) { + var idx = registeredStatusHandlers.indexOf(l) + if (idx >= 0) registeredStatusHandlers.splice(idx, 1) + }, + + //inherit from previous dispose call + data: currentModuleData[moduleId], + } + currentChildModule = undefined + return hot + } + + function setStatus(newStatus) { + currentStatus = newStatus + var results = [] + + for (var i = 0; i < registeredStatusHandlers.length; i++) + results[i] = registeredStatusHandlers[i].call(null, newStatus) + + 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') + /* fallthrough */ + case 'prepare': + blockingPromises++ + promise.then(unblock, unblock) + return promise + default: + return promise + } + } + + function waitForBlockingPromises(fn) { + if (blockingPromises === 0) return fn() + return new Promise(function (resolve) { + blockingPromisesWaiting.push(function () { + resolve(fn()) + }) + }) + } + + function hotCheck(applyOnUpdate) { + if (currentStatus !== 'idle') { + throw new Error('check() is only allowed in idle status') + } + return setStatus('check') + .then($hmrDownloadManifest$) + .then(function (update) { + if (!update) { + return setStatus(applyInvalidatedModules() ? 'ready' : 'idle').then( + function () { + return null + } + ) + } + + return setStatus('prepare').then(function () { + var updatedModules = [] + currentUpdateApplyHandlers = [] + + return Promise.all( + Object.keys($hmrDownloadUpdateHandlers$).reduce(function ( + promises, + key + ) { + $hmrDownloadUpdateHandlers$[key]( + update.c, + update.r, + update.m, + promises, + currentUpdateApplyHandlers, + updatedModules + ) + return promises + }, + []) + ).then(function () { + return waitForBlockingPromises(function () { + if (applyOnUpdate) { + return internalApply(applyOnUpdate) + } else { + return setStatus('ready').then(function () { + return updatedModules + }) + } + }) + }) + }) + }) + } + + function hotApply(options) { + if (currentStatus !== 'ready') { + return Promise.resolve().then(function () { + throw new Error( + 'apply() is only allowed in ready status (state: ' + + currentStatus + + ')' + ) + }) + } + return internalApply(options) + } + + function internalApply(options) { + options = options || {} + + applyInvalidatedModules() + + var results = currentUpdateApplyHandlers.map(function (handler) { + return handler(options) + }) + currentUpdateApplyHandlers = undefined + + var errors = results + .map(function (r) { + return r.error + }) + .filter(Boolean) + + if (errors.length > 0) { + return setStatus('abort').then(function () { + throw errors[0] + }) + } + + // Now in "dispose" phase + var disposePromise = setStatus('dispose') + + results.forEach(function (result) { + if (result.dispose) result.dispose() + }) + + // Now in "apply" phase + var applyPromise = setStatus('apply') + + var error + var reportError = function (err) { + if (!error) error = err + } + + var outdatedModules = [] + results.forEach(function (result) { + if (result.apply) { + var modules = result.apply(reportError) + if (modules) { + for (var i = 0; i < modules.length; i++) { + outdatedModules.push(modules[i]) + } + } + } + }) + + return Promise.all([disposePromise, applyPromise]).then(function () { + // handle errors in accept handlers and self accepted module load + if (error) { + return setStatus('fail').then(function () { + throw error + }) + } + + if (queuedInvalidatedModules) { + return internalApply(options).then(function (list) { + outdatedModules.forEach(function (moduleId) { + if (list.indexOf(moduleId) < 0) list.push(moduleId) + }) + return list + }) + } + + return setStatus('idle').then(function () { + return outdatedModules + }) + }) + } + + function applyInvalidatedModules() { + if (queuedInvalidatedModules) { + if (!currentUpdateApplyHandlers) currentUpdateApplyHandlers = [] + Object.keys($hmrInvalidateModuleHandlers$).forEach(function (key) { + queuedInvalidatedModules.forEach(function (moduleId) { + $hmrInvalidateModuleHandlers$[key]( + moduleId, + currentUpdateApplyHandlers + ) + }) + }) + queuedInvalidatedModules = undefined + return true + } + } +}