diff --git a/.changeset/slick-wasps-raise.md b/.changeset/slick-wasps-raise.md new file mode 100644 index 0000000000..74e4d01540 --- /dev/null +++ b/.changeset/slick-wasps-raise.md @@ -0,0 +1,5 @@ +--- +"@lynx-js/css-extract-webpack-plugin": patch +--- + +Fix CSS HMR not working with nested entry name. diff --git a/packages/webpack/css-extract-webpack-plugin/src/CssExtractRspackPlugin.ts b/packages/webpack/css-extract-webpack-plugin/src/CssExtractRspackPlugin.ts index 91b3114983..33e1bebaac 100644 --- a/packages/webpack/css-extract-webpack-plugin/src/CssExtractRspackPlugin.ts +++ b/packages/webpack/css-extract-webpack-plugin/src/CssExtractRspackPlugin.ts @@ -5,7 +5,7 @@ import { createRequire } from 'node:module'; import type { - Compilation, + Chunk, Compiler, CssExtractRspackPluginOptions as ExternalCssExtractRspackPluginOptions, } from '@rspack/core'; @@ -136,10 +136,6 @@ class CssExtractRspackPlugin { export { CssExtractRspackPlugin }; export type { CssExtractRspackPluginOptions }; -type RuntimeModule = Parameters< - Compilation['hooks']['runtimeModule']['call'] ->[0]; - class CssExtractRspackPluginImpl { name = 'CssExtractRspackPlugin'; private hash: string | null = null; @@ -163,54 +159,82 @@ class CssExtractRspackPluginImpl { compiler.options.mode === 'development' || process.env['NODE_ENV'] === 'development' ) { - // We require publicPath to get css.hot-update.json - compilation.hooks.additionalTreeRuntimeRequirements.tap( - this.name, - (_, set) => { - set.add(compiler.webpack.RuntimeGlobals.publicPath); - }, - ); + const { RuntimeGlobals, RuntimeModule } = compiler.webpack; - compilation.hooks.runtimeModule.tap( - this.name, - (runtimeModule, chunk) => { - if (runtimeModule.name === 'require_chunk_loading') { - const asyncChunks = Array.from(chunk.getAllAsyncChunks()) - .map(c => { - const { path } = compilation.getAssetPathWithInfo( - options.chunkFilename ?? '.rspeedy/async/[name]/[name].css', - { chunk: c }, - ); - return [c.name!, path]; - }); + class CSSHotUpdateRuntimeModule extends RuntimeModule { + hash: string | null; - const { path } = compilation.getPathWithInfo( - options.filename ?? '[name].css', - // Rspack does not pass JsChunk to Rust. - // See: https://github.com/web-infra-dev/rspack/blob/73c31abcb78472eb5a3d93e4ece19d9f106727a6/crates/rspack_binding_values/src/path_data.rs#L62 - { filename: chunk.name! }, - ); + constructor(hash: string | null) { + super('lynx css hot update'); + this.hash = hash; + } - const initialChunk = [chunk.name!, path]; + override generate(): string { + const chunk = this.chunk!; - const cssHotUpdateList = [...asyncChunks, initialChunk].map(( - [chunkName, cssHotUpdatePath], - ) => [ - chunkName!, - cssHotUpdatePath!.replace( - '.css', - `${this.hash ? `.${this.hash}` : ''}.css.hot-update.json`, - ), - ]); + const asyncChunks = Array.from(chunk.getAllAsyncChunks()) + .map(c => { + const { path } = compilation.getAssetPathWithInfo( + options.chunkFilename ?? '.rspeedy/async/[name]/[name].css', + { chunk: c }, + ); + return [c.name!, path]; + }); - this.#overrideChunkLoadingRuntimeModule( - compiler, - runtimeModule, - cssHotUpdateList, - ); - } - }, - ); + const { path } = compilation.getPathWithInfo( + options.filename ?? '[name].css', + { chunk }, + ); + + const initialChunk = [chunk.name!, path]; + + const cssHotUpdateList = [...asyncChunks, initialChunk].map(( + [chunkName, cssHotUpdatePath], + ) => [ + chunkName!, + cssHotUpdatePath!.replace( + '.css', + `${this.hash ? `.${this.hash}` : ''}.css.hot-update.json`, + ), + ]); + + return ` +${RuntimeGlobals.require}.cssHotUpdateList = ${ + cssHotUpdateList ? JSON.stringify(cssHotUpdateList) : 'null' + }; +`; + } + } + + const onceForChunkSet = new WeakSet(); + const handler = (chunk: Chunk, runtimeRequirements: Set) => { + if (onceForChunkSet.has(chunk)) return; + onceForChunkSet.add(chunk); + runtimeRequirements.add(RuntimeGlobals.publicPath); + compilation.addRuntimeModule( + chunk, + new CSSHotUpdateRuntimeModule(this.hash), + ); + }; + + compilation.hooks.runtimeRequirementInTree + .for(RuntimeGlobals.ensureChunkHandlers) + .tap(this.name, handler); + compilation.hooks.runtimeRequirementInTree + .for(RuntimeGlobals.hmrDownloadUpdateHandlers) + .tap(this.name, handler); + compilation.hooks.runtimeRequirementInTree + .for(RuntimeGlobals.hmrDownloadManifest) + .tap(this.name, handler); + compilation.hooks.runtimeRequirementInTree + .for(RuntimeGlobals.baseURI) + .tap(this.name, handler); + compilation.hooks.runtimeRequirementInTree + .for(RuntimeGlobals.externalInstallChunk) + .tap(this.name, handler); + compilation.hooks.runtimeRequirementInTree + .for(RuntimeGlobals.onChunksLoaded) + .tap(this.name, handler); compilation.hooks.processAssets.tapPromise( { @@ -301,21 +325,4 @@ class CssExtractRspackPluginImpl { } }); } - - #overrideChunkLoadingRuntimeModule( - compiler: Compiler, - runtimeModule: RuntimeModule, - cssHotUpdateList: string[][], - ) { - const { RuntimeGlobals } = compiler.webpack; - runtimeModule.source!.source = Buffer.concat([ - Buffer.from(runtimeModule.source!.source as Buffer), - // cssHotUpdateList - Buffer.from(` - ${RuntimeGlobals.require}.cssHotUpdateList = ${ - cssHotUpdateList ? JSON.stringify(cssHotUpdateList) : 'null' - }; - `), - ]); - } } diff --git a/packages/webpack/css-extract-webpack-plugin/test/hotCases/css/basic/__snapshot__/rspack/1.snap.txt b/packages/webpack/css-extract-webpack-plugin/test/hotCases/css/basic/__snapshot__/rspack/1.snap.txt index 77768b0027..08af86692d 100644 --- a/packages/webpack/css-extract-webpack-plugin/test/hotCases/css/basic/__snapshot__/rspack/1.snap.txt +++ b/packages/webpack/css-extract-webpack-plugin/test/hotCases/css/basic/__snapshot__/rspack/1.snap.txt @@ -7,7 +7,7 @@ - Bundle: rspack-bundle.js - Manifest: main.LAST_HASH.css.hot-update.json, size: 774 - Manifest: main.LAST_HASH.hot-update.json, size: 28 -- Update: main.LAST_HASH.hot-update.js, size: 14638 +- Update: main.LAST_HASH.hot-update.js, size: 1251 ## Manifest @@ -36,7 +36,6 @@ #### Changed Runtime Modules - webpack/runtime/get_full_hash -- webpack/runtime/require_chunk_loading #### Changed Content ```js @@ -80,479 +79,11 @@ exports.runtime = function(__webpack_require__) { (() => { __webpack_require__.h = () => ("CURRENT_HASH") })(); -// webpack/runtime/require_chunk_loading +// webpack/runtime/lynx css hot update (() => { -var installedChunks = __webpack_require__.hmrS_require = __webpack_require__.hmrS_require || {"main": 1,}; -function loadUpdateChunk(chunkId, updatedModulesList) { - var update = require("./" + __webpack_require__.hu(chunkId)); - var updatedModules = update.modules; - var runtime = update.runtime; - for (var moduleId in updatedModules) { - if (__webpack_require__.o(updatedModules, moduleId)) { - currentUpdate[moduleId] = updatedModules[moduleId]; - if (updatedModulesList) updatedModulesList.push(moduleId); - } - } - if (runtime) currentUpdateRuntime.push(runtime); -}var currentUpdateChunks; -var currentUpdate; -var currentUpdateRemovedChunks; -var currentUpdateRuntime; -function applyHandler(options) { - if (__webpack_require__.f) delete __webpack_require__.f.requireHmr; - currentUpdateChunks = undefined; - function getAffectedModuleEffects(updateModuleId) { - var outdatedModules = [updateModuleId]; - var outdatedDependencies = {}; - var queue = outdatedModules.map(function (id) { - return { - chain: [id], - id: id - }; - }); - while (queue.length > 0) { - var queueItem = queue.pop(); - var moduleId = queueItem.id; - var chain = queueItem.chain; - var module = __webpack_require__.c[moduleId]; - if ( - !module || - (module.hot._selfAccepted && !module.hot._selfInvalidated) - ) { - continue; - } - if (module.hot._selfDeclined) { - return { - type: "self-declined", - chain: chain, - moduleId: moduleId - }; - } +__webpack_require__.cssHotUpdateList = [["main","main.LAST_HASH.css.hot-update.json"]]; - if (module.hot._main) { - return { - type: "unaccepted", - chain: chain, - moduleId: moduleId - }; - } - - for (var i = 0; i < module.parents.length; i++) { - var parentId = module.parents[i]; - var parent = __webpack_require__.c[parentId]; - if (!parent) { - continue; - } - if (parent.hot._declinedDependencies[moduleId]) { - return { - type: "declined", - chain: chain.concat([parentId]), - moduleId: moduleId, - parentId: parentId - }; - } - if (outdatedModules.indexOf(parentId) !== -1) { - continue; - } - if (parent.hot._acceptedDependencies[moduleId]) { - if (!outdatedDependencies[parentId]) { - outdatedDependencies[parentId] = []; - } - addAllToSet(outdatedDependencies[parentId], [moduleId]); - continue; - } - delete outdatedDependencies[parentId]; - outdatedModules.push(parentId); - queue.push({ - chain: chain.concat([parentId]), - id: parentId - }); - } - } - - return { - type: "accepted", - moduleId: updateModuleId, - outdatedModules: outdatedModules, - outdatedDependencies: outdatedDependencies - }; - } - - function addAllToSet(a, b) { - for (var i = 0; i < b.length; i++) { - var item = b[i]; - if (a.indexOf(item) === -1) a.push(item); - } - } - - var outdatedDependencies = {}; - var outdatedModules = []; - var appliedUpdate = {}; - - var warnUnexpectedRequire = function warnUnexpectedRequire(module) { - console.warn( - "[HMR] unexpected require(" + module.id + ") to disposed module" - ); - }; - - for (var moduleId in currentUpdate) { - if (__webpack_require__.o(currentUpdate, moduleId)) { - var newModuleFactory = currentUpdate[moduleId]; - var result = newModuleFactory ? getAffectedModuleEffects(moduleId) : { - type: "disposed", - moduleId: moduleId - }; - var abortError = false; - var doApply = false; - var doDispose = false; - var chainInfo = ""; - if (result.chain) { - chainInfo = "\nUpdate propagation: " + result.chain.join(" -> "); - } - switch (result.type) { - case "self-declined": - if (options.onDeclined) options.onDeclined(result); - if (!options.ignoreDeclined) - abortError = new Error( - "Aborted because of self decline: " + result.moduleId + chainInfo - ); - break; - case "declined": - if (options.onDeclined) options.onDeclined(result); - if (!options.ignoreDeclined) - abortError = new Error( - "Aborted because of declined dependency: " + - result.moduleId + - " in " + - result.parentId + - chainInfo - ); - break; - case "unaccepted": - if (options.onUnaccepted) options.onUnaccepted(result); - if (!options.ignoreUnaccepted) - abortError = new Error( - "Aborted because " + moduleId + " is not accepted" + chainInfo - ); - break; - case "accepted": - if (options.onAccepted) options.onAccepted(result); - doApply = true; - break; - case "disposed": - if (options.onDisposed) options.onDisposed(result); - doDispose = true; - break; - default: - throw new Error("Unexception type " + result.type); - } - if (abortError) { - return { - error: abortError - }; - } - if (doApply) { - appliedUpdate[moduleId] = newModuleFactory; - addAllToSet(outdatedModules, result.outdatedModules); - for (moduleId in result.outdatedDependencies) { - if (__webpack_require__.o(result.outdatedDependencies, moduleId)) { - if (!outdatedDependencies[moduleId]) - outdatedDependencies[moduleId] = []; - addAllToSet( - outdatedDependencies[moduleId], - result.outdatedDependencies[moduleId] - ); - } - } - } - if (doDispose) { - addAllToSet(outdatedModules, [result.moduleId]); - appliedUpdate[moduleId] = warnUnexpectedRequire; - } - } - } - currentUpdate = undefined; - - var outdatedSelfAcceptedModules = []; - for (var j = 0; j < outdatedModules.length; j++) { - var outdatedModuleId = outdatedModules[j]; - var module = __webpack_require__.c[outdatedModuleId]; - if ( - module && - (module.hot._selfAccepted || module.hot._main) && - // removed self-accepted modules should not be required - appliedUpdate[outdatedModuleId] !== warnUnexpectedRequire && - // when called invalidate self-accepting is not possible - !module.hot._selfInvalidated - ) { - outdatedSelfAcceptedModules.push({ - module: outdatedModuleId, - require: module.hot._requireSelf, - errorHandler: module.hot._selfAccepted - }); - } - } - self.__HMR_UPDATED_RUNTIME__.javascript.outdatedModules = outdatedModules; - self.__HMR_UPDATED_RUNTIME__.javascript.outdatedDependencies = outdatedDependencies; - - - var moduleOutdatedDependencies; - return { - dispose: function () { - currentUpdateRemovedChunks.forEach(function (chunkId) { - delete installedChunks[chunkId]; - }); - currentUpdateRemovedChunks = undefined; - - var idx; - var queue = outdatedModules.slice(); - while (queue.length > 0) { - var moduleId = queue.pop(); - var module = __webpack_require__.c[moduleId]; - if (!module) continue; - - var data = {}; - - // Call dispose handlers - var disposeHandlers = module.hot._disposeHandlers; - if (disposeHandlers.length > 0) { - self.__HMR_UPDATED_RUNTIME__.javascript.disposedModules.push(moduleId); - } - - for (j = 0; j < disposeHandlers.length; j++) { - disposeHandlers[j].call(null, data); - } - __webpack_require__.hmrD[moduleId] = data; - - module.hot.active = false; - - delete __webpack_require__.c[moduleId]; - - delete outdatedDependencies[moduleId]; - - for (j = 0; j < module.children.length; j++) { - var child = __webpack_require__.c[module.children[j]]; - if (!child) continue; - idx = child.parents.indexOf(moduleId); - if (idx >= 0) { - child.parents.splice(idx, 1); - } - } - } - - var dependency; - for (var outdatedModuleId in outdatedDependencies) { - if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { - module = __webpack_require__.c[outdatedModuleId]; - if (module) { - moduleOutdatedDependencies = outdatedDependencies[outdatedModuleId]; - for (j = 0; j < moduleOutdatedDependencies.length; j++) { - dependency = moduleOutdatedDependencies[j]; - idx = module.children.indexOf(dependency); - if (idx >= 0) module.children.splice(idx, 1); - } - } - } - } - }, - apply: function (reportError) { - // insert new code - for (var updateModuleId in appliedUpdate) { - if (__webpack_require__.o(appliedUpdate, updateModuleId)) { - __webpack_require__.m[updateModuleId] = appliedUpdate[updateModuleId]; - self.__HMR_UPDATED_RUNTIME__.javascript.updatedModules.push(updateModuleId); - - } - } - - // run new runtime modules - for (var i = 0; i < currentUpdateRuntime.length; i++) { - - currentUpdateRuntime[i](new Proxy(__webpack_require__, { - set(target, prop, value, receiver) { - self.__HMR_UPDATED_RUNTIME__.javascript.updatedRuntime.push(`__webpack_require__.${prop}`); - return Reflect.set(target, prop, value, receiver); - } - })); - - } - - // call accept handlers - for (var outdatedModuleId in outdatedDependencies) { - if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { - var module = __webpack_require__.c[outdatedModuleId]; - if (module) { - moduleOutdatedDependencies = outdatedDependencies[outdatedModuleId]; - var callbacks = []; - var errorHandlers = []; - var dependenciesForCallbacks = []; - for (var j = 0; j < moduleOutdatedDependencies.length; j++) { - var dependency = moduleOutdatedDependencies[j]; - var acceptCallback = module.hot._acceptedDependencies[dependency]; - var errorHandler = module.hot._acceptedErrorHandlers[dependency]; - if (acceptCallback) { - if (callbacks.indexOf(acceptCallback) !== -1) continue; - callbacks.push(acceptCallback); - errorHandlers.push(errorHandler); - self.__HMR_UPDATED_RUNTIME__.javascript.acceptedModules.push(dependency); - - dependenciesForCallbacks.push(dependency); - } - } - for (var k = 0; k < callbacks.length; k++) { - try { - callbacks[k].call(null, moduleOutdatedDependencies); - } catch (err) { - if (typeof errorHandlers[k] === "function") { - try { - errorHandlers[k](err, { - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k] - }); - } catch (err2) { - if (options.onErrored) { - options.onErrored({ - type: "accept-error-handler-errored", - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k], - error: err2, - originalError: err - }); - } - if (!options.ignoreErrored) { - reportError(err2); - reportError(err); - } - } - } else { - if (options.onErrored) { - options.onErrored({ - type: "accept-errored", - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k], - error: err - }); - } - if (!options.ignoreErrored) { - reportError(err); - } - } - } - } - } - } - } - - // Load self accepted modules - for (var o = 0; o < outdatedSelfAcceptedModules.length; o++) { - var item = outdatedSelfAcceptedModules[o]; - var moduleId = item.module; - try { - item.require(moduleId); - } catch (err) { - if (typeof item.errorHandler === "function") { - try { - item.errorHandler(err, { - moduleId: moduleId, - module: __webpack_require__.c[moduleId] - }); - } catch (err1) { - if (options.onErrored) { - options.onErrored({ - type: "self-accept-error-handler-errored", - moduleId: moduleId, - error: err1, - originalError: err - }); - } - if (!options.ignoreErrored) { - reportError(err1); - reportError(err); - } - } - } else { - if (options.onErrored) { - options.onErrored({ - type: "self-accept-errored", - moduleId: moduleId, - error: err - }); - } - if (!options.ignoreErrored) { - reportError(err); - } - } - } - } - - return outdatedModules; - } - }; -} - -__webpack_require__.hmrI.require = function (moduleId, applyHandlers) { - if (!currentUpdate) { - currentUpdate = {}; - currentUpdateRuntime = []; - currentUpdateRemovedChunks = []; - applyHandlers.push(applyHandler); - } - if (!__webpack_require__.o(currentUpdate, moduleId)) { - currentUpdate[moduleId] = __webpack_require__.m[moduleId]; - } -}; - -__webpack_require__.hmrC.require = function ( - chunkIds, - removedChunks, - removedModules, - promises, - applyHandlers, - updatedModulesList -) { - applyHandlers.push(applyHandler); - currentUpdateChunks = {}; - currentUpdateRemovedChunks = removedChunks; - currentUpdate = removedModules.reduce(function (obj, key) { - obj[key] = false; - return obj; - }, {}); - currentUpdateRuntime = []; - chunkIds.forEach(function (chunkId) { - if ( - __webpack_require__.o(installedChunks, chunkId) && - installedChunks[chunkId] !== undefined - ) { - promises.push(loadUpdateChunk(chunkId, updatedModulesList)); - currentUpdateChunks[chunkId] = true; - } else { - currentUpdateChunks[chunkId] = false; - } - }); - if (__webpack_require__.f) { - __webpack_require__.f.requireHmr = function (chunkId, promises) { - if ( - currentUpdateChunks && - __webpack_require__.o(currentUpdateChunks, chunkId) && - !currentUpdateChunks[chunkId] - ) { - promises.push(loadUpdateChunk(chunkId)); - currentUpdateChunks[chunkId] = true; - } - }; - } -}; -__webpack_require__.hmrM = () => { - return Promise.resolve() - .then(() => { - return require("./" + __webpack_require__.hmrF()); - })['catch']((err) => { - if (err.code !== 'MODULE_NOT_FOUND') throw err; - }); -}; - __webpack_require__.cssHotUpdateList = [["main","main.LAST_HASH.css.hot-update.json"]]; - })(); } diff --git a/packages/webpack/css-extract-webpack-plugin/test/hotCases/css/basic/__snapshot__/rspack/2.snap.txt b/packages/webpack/css-extract-webpack-plugin/test/hotCases/css/basic/__snapshot__/rspack/2.snap.txt index 371234a9eb..6abd79ef2e 100644 --- a/packages/webpack/css-extract-webpack-plugin/test/hotCases/css/basic/__snapshot__/rspack/2.snap.txt +++ b/packages/webpack/css-extract-webpack-plugin/test/hotCases/css/basic/__snapshot__/rspack/2.snap.txt @@ -7,7 +7,7 @@ - Bundle: rspack-bundle.js - Manifest: main.LAST_HASH.css.hot-update.json, size: 774 - Manifest: main.LAST_HASH.hot-update.json, size: 28 -- Update: main.LAST_HASH.hot-update.js, size: 14638 +- Update: main.LAST_HASH.hot-update.js, size: 1251 ## Manifest @@ -36,7 +36,6 @@ #### Changed Runtime Modules - webpack/runtime/get_full_hash -- webpack/runtime/require_chunk_loading #### Changed Content ```js @@ -80,479 +79,11 @@ exports.runtime = function(__webpack_require__) { (() => { __webpack_require__.h = () => ("CURRENT_HASH") })(); -// webpack/runtime/require_chunk_loading +// webpack/runtime/lynx css hot update (() => { -var installedChunks = __webpack_require__.hmrS_require = __webpack_require__.hmrS_require || {"main": 1,}; -function loadUpdateChunk(chunkId, updatedModulesList) { - var update = require("./" + __webpack_require__.hu(chunkId)); - var updatedModules = update.modules; - var runtime = update.runtime; - for (var moduleId in updatedModules) { - if (__webpack_require__.o(updatedModules, moduleId)) { - currentUpdate[moduleId] = updatedModules[moduleId]; - if (updatedModulesList) updatedModulesList.push(moduleId); - } - } - if (runtime) currentUpdateRuntime.push(runtime); -}var currentUpdateChunks; -var currentUpdate; -var currentUpdateRemovedChunks; -var currentUpdateRuntime; -function applyHandler(options) { - if (__webpack_require__.f) delete __webpack_require__.f.requireHmr; - currentUpdateChunks = undefined; - function getAffectedModuleEffects(updateModuleId) { - var outdatedModules = [updateModuleId]; - var outdatedDependencies = {}; - var queue = outdatedModules.map(function (id) { - return { - chain: [id], - id: id - }; - }); - while (queue.length > 0) { - var queueItem = queue.pop(); - var moduleId = queueItem.id; - var chain = queueItem.chain; - var module = __webpack_require__.c[moduleId]; - if ( - !module || - (module.hot._selfAccepted && !module.hot._selfInvalidated) - ) { - continue; - } - - if (module.hot._selfDeclined) { - return { - type: "self-declined", - chain: chain, - moduleId: moduleId - }; - } - - if (module.hot._main) { - return { - type: "unaccepted", - chain: chain, - moduleId: moduleId - }; - } - - for (var i = 0; i < module.parents.length; i++) { - var parentId = module.parents[i]; - var parent = __webpack_require__.c[parentId]; - if (!parent) { - continue; - } - if (parent.hot._declinedDependencies[moduleId]) { - return { - type: "declined", - chain: chain.concat([parentId]), - moduleId: moduleId, - parentId: parentId - }; - } - if (outdatedModules.indexOf(parentId) !== -1) { - continue; - } - if (parent.hot._acceptedDependencies[moduleId]) { - if (!outdatedDependencies[parentId]) { - outdatedDependencies[parentId] = []; - } - addAllToSet(outdatedDependencies[parentId], [moduleId]); - continue; - } - delete outdatedDependencies[parentId]; - outdatedModules.push(parentId); - queue.push({ - chain: chain.concat([parentId]), - id: parentId - }); - } - } - - return { - type: "accepted", - moduleId: updateModuleId, - outdatedModules: outdatedModules, - outdatedDependencies: outdatedDependencies - }; - } - - function addAllToSet(a, b) { - for (var i = 0; i < b.length; i++) { - var item = b[i]; - if (a.indexOf(item) === -1) a.push(item); - } - } - - var outdatedDependencies = {}; - var outdatedModules = []; - var appliedUpdate = {}; - - var warnUnexpectedRequire = function warnUnexpectedRequire(module) { - console.warn( - "[HMR] unexpected require(" + module.id + ") to disposed module" - ); - }; - - for (var moduleId in currentUpdate) { - if (__webpack_require__.o(currentUpdate, moduleId)) { - var newModuleFactory = currentUpdate[moduleId]; - var result = newModuleFactory ? getAffectedModuleEffects(moduleId) : { - type: "disposed", - moduleId: moduleId - }; - var abortError = false; - var doApply = false; - var doDispose = false; - var chainInfo = ""; - if (result.chain) { - chainInfo = "\nUpdate propagation: " + result.chain.join(" -> "); - } - switch (result.type) { - case "self-declined": - if (options.onDeclined) options.onDeclined(result); - if (!options.ignoreDeclined) - abortError = new Error( - "Aborted because of self decline: " + result.moduleId + chainInfo - ); - break; - case "declined": - if (options.onDeclined) options.onDeclined(result); - if (!options.ignoreDeclined) - abortError = new Error( - "Aborted because of declined dependency: " + - result.moduleId + - " in " + - result.parentId + - chainInfo - ); - break; - case "unaccepted": - if (options.onUnaccepted) options.onUnaccepted(result); - if (!options.ignoreUnaccepted) - abortError = new Error( - "Aborted because " + moduleId + " is not accepted" + chainInfo - ); - break; - case "accepted": - if (options.onAccepted) options.onAccepted(result); - doApply = true; - break; - case "disposed": - if (options.onDisposed) options.onDisposed(result); - doDispose = true; - break; - default: - throw new Error("Unexception type " + result.type); - } - if (abortError) { - return { - error: abortError - }; - } - if (doApply) { - appliedUpdate[moduleId] = newModuleFactory; - addAllToSet(outdatedModules, result.outdatedModules); - for (moduleId in result.outdatedDependencies) { - if (__webpack_require__.o(result.outdatedDependencies, moduleId)) { - if (!outdatedDependencies[moduleId]) - outdatedDependencies[moduleId] = []; - addAllToSet( - outdatedDependencies[moduleId], - result.outdatedDependencies[moduleId] - ); - } - } - } - if (doDispose) { - addAllToSet(outdatedModules, [result.moduleId]); - appliedUpdate[moduleId] = warnUnexpectedRequire; - } - } - } - currentUpdate = undefined; - - var outdatedSelfAcceptedModules = []; - for (var j = 0; j < outdatedModules.length; j++) { - var outdatedModuleId = outdatedModules[j]; - var module = __webpack_require__.c[outdatedModuleId]; - if ( - module && - (module.hot._selfAccepted || module.hot._main) && - // removed self-accepted modules should not be required - appliedUpdate[outdatedModuleId] !== warnUnexpectedRequire && - // when called invalidate self-accepting is not possible - !module.hot._selfInvalidated - ) { - outdatedSelfAcceptedModules.push({ - module: outdatedModuleId, - require: module.hot._requireSelf, - errorHandler: module.hot._selfAccepted - }); - } - } - self.__HMR_UPDATED_RUNTIME__.javascript.outdatedModules = outdatedModules; - self.__HMR_UPDATED_RUNTIME__.javascript.outdatedDependencies = outdatedDependencies; - - - var moduleOutdatedDependencies; - return { - dispose: function () { - currentUpdateRemovedChunks.forEach(function (chunkId) { - delete installedChunks[chunkId]; - }); - currentUpdateRemovedChunks = undefined; - - var idx; - var queue = outdatedModules.slice(); - while (queue.length > 0) { - var moduleId = queue.pop(); - var module = __webpack_require__.c[moduleId]; - if (!module) continue; - - var data = {}; - - // Call dispose handlers - var disposeHandlers = module.hot._disposeHandlers; - if (disposeHandlers.length > 0) { - self.__HMR_UPDATED_RUNTIME__.javascript.disposedModules.push(moduleId); - } - - for (j = 0; j < disposeHandlers.length; j++) { - disposeHandlers[j].call(null, data); - } - __webpack_require__.hmrD[moduleId] = data; - - module.hot.active = false; - - delete __webpack_require__.c[moduleId]; - - delete outdatedDependencies[moduleId]; - - for (j = 0; j < module.children.length; j++) { - var child = __webpack_require__.c[module.children[j]]; - if (!child) continue; - idx = child.parents.indexOf(moduleId); - if (idx >= 0) { - child.parents.splice(idx, 1); - } - } - } - - var dependency; - for (var outdatedModuleId in outdatedDependencies) { - if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { - module = __webpack_require__.c[outdatedModuleId]; - if (module) { - moduleOutdatedDependencies = outdatedDependencies[outdatedModuleId]; - for (j = 0; j < moduleOutdatedDependencies.length; j++) { - dependency = moduleOutdatedDependencies[j]; - idx = module.children.indexOf(dependency); - if (idx >= 0) module.children.splice(idx, 1); - } - } - } - } - }, - apply: function (reportError) { - // insert new code - for (var updateModuleId in appliedUpdate) { - if (__webpack_require__.o(appliedUpdate, updateModuleId)) { - __webpack_require__.m[updateModuleId] = appliedUpdate[updateModuleId]; - self.__HMR_UPDATED_RUNTIME__.javascript.updatedModules.push(updateModuleId); - - } - } - - // run new runtime modules - for (var i = 0; i < currentUpdateRuntime.length; i++) { - - currentUpdateRuntime[i](new Proxy(__webpack_require__, { - set(target, prop, value, receiver) { - self.__HMR_UPDATED_RUNTIME__.javascript.updatedRuntime.push(`__webpack_require__.${prop}`); - return Reflect.set(target, prop, value, receiver); - } - })); - - } - - // call accept handlers - for (var outdatedModuleId in outdatedDependencies) { - if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { - var module = __webpack_require__.c[outdatedModuleId]; - if (module) { - moduleOutdatedDependencies = outdatedDependencies[outdatedModuleId]; - var callbacks = []; - var errorHandlers = []; - var dependenciesForCallbacks = []; - for (var j = 0; j < moduleOutdatedDependencies.length; j++) { - var dependency = moduleOutdatedDependencies[j]; - var acceptCallback = module.hot._acceptedDependencies[dependency]; - var errorHandler = module.hot._acceptedErrorHandlers[dependency]; - if (acceptCallback) { - if (callbacks.indexOf(acceptCallback) !== -1) continue; - callbacks.push(acceptCallback); - errorHandlers.push(errorHandler); - self.__HMR_UPDATED_RUNTIME__.javascript.acceptedModules.push(dependency); - - dependenciesForCallbacks.push(dependency); - } - } - for (var k = 0; k < callbacks.length; k++) { - try { - callbacks[k].call(null, moduleOutdatedDependencies); - } catch (err) { - if (typeof errorHandlers[k] === "function") { - try { - errorHandlers[k](err, { - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k] - }); - } catch (err2) { - if (options.onErrored) { - options.onErrored({ - type: "accept-error-handler-errored", - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k], - error: err2, - originalError: err - }); - } - if (!options.ignoreErrored) { - reportError(err2); - reportError(err); - } - } - } else { - if (options.onErrored) { - options.onErrored({ - type: "accept-errored", - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k], - error: err - }); - } - if (!options.ignoreErrored) { - reportError(err); - } - } - } - } - } - } - } - - // Load self accepted modules - for (var o = 0; o < outdatedSelfAcceptedModules.length; o++) { - var item = outdatedSelfAcceptedModules[o]; - var moduleId = item.module; - try { - item.require(moduleId); - } catch (err) { - if (typeof item.errorHandler === "function") { - try { - item.errorHandler(err, { - moduleId: moduleId, - module: __webpack_require__.c[moduleId] - }); - } catch (err1) { - if (options.onErrored) { - options.onErrored({ - type: "self-accept-error-handler-errored", - moduleId: moduleId, - error: err1, - originalError: err - }); - } - if (!options.ignoreErrored) { - reportError(err1); - reportError(err); - } - } - } else { - if (options.onErrored) { - options.onErrored({ - type: "self-accept-errored", - moduleId: moduleId, - error: err - }); - } - if (!options.ignoreErrored) { - reportError(err); - } - } - } - } - - return outdatedModules; - } - }; -} -__webpack_require__.hmrI.require = function (moduleId, applyHandlers) { - if (!currentUpdate) { - currentUpdate = {}; - currentUpdateRuntime = []; - currentUpdateRemovedChunks = []; - applyHandlers.push(applyHandler); - } - if (!__webpack_require__.o(currentUpdate, moduleId)) { - currentUpdate[moduleId] = __webpack_require__.m[moduleId]; - } -}; +__webpack_require__.cssHotUpdateList = [["main","main.LAST_HASH.css.hot-update.json"]]; -__webpack_require__.hmrC.require = function ( - chunkIds, - removedChunks, - removedModules, - promises, - applyHandlers, - updatedModulesList -) { - applyHandlers.push(applyHandler); - currentUpdateChunks = {}; - currentUpdateRemovedChunks = removedChunks; - currentUpdate = removedModules.reduce(function (obj, key) { - obj[key] = false; - return obj; - }, {}); - currentUpdateRuntime = []; - chunkIds.forEach(function (chunkId) { - if ( - __webpack_require__.o(installedChunks, chunkId) && - installedChunks[chunkId] !== undefined - ) { - promises.push(loadUpdateChunk(chunkId, updatedModulesList)); - currentUpdateChunks[chunkId] = true; - } else { - currentUpdateChunks[chunkId] = false; - } - }); - if (__webpack_require__.f) { - __webpack_require__.f.requireHmr = function (chunkId, promises) { - if ( - currentUpdateChunks && - __webpack_require__.o(currentUpdateChunks, chunkId) && - !currentUpdateChunks[chunkId] - ) { - promises.push(loadUpdateChunk(chunkId)); - currentUpdateChunks[chunkId] = true; - } - }; - } -}; -__webpack_require__.hmrM = () => { - return Promise.resolve() - .then(() => { - return require("./" + __webpack_require__.hmrF()); - })['catch']((err) => { - if (err.code !== 'MODULE_NOT_FOUND') throw err; - }); -}; - __webpack_require__.cssHotUpdateList = [["main","main.LAST_HASH.css.hot-update.json"]]; - })(); } @@ -593,8 +124,6 @@ Updated Modules: Updated Runtime: - `__webpack_require__.cssHotUpdateList` - `__webpack_require__.h` -- `__webpack_require__.hmrM` -- `__webpack_require__.hmrS_require` #### Callback diff --git a/packages/webpack/css-extract-webpack-plugin/test/hotCases/css/enable-css-selector/__snapshot__/rspack/1.snap.txt b/packages/webpack/css-extract-webpack-plugin/test/hotCases/css/enable-css-selector/__snapshot__/rspack/1.snap.txt index c012c30cd7..f6387e0b6b 100644 --- a/packages/webpack/css-extract-webpack-plugin/test/hotCases/css/enable-css-selector/__snapshot__/rspack/1.snap.txt +++ b/packages/webpack/css-extract-webpack-plugin/test/hotCases/css/enable-css-selector/__snapshot__/rspack/1.snap.txt @@ -7,7 +7,7 @@ - Bundle: rspack-bundle.js - Manifest: main.LAST_HASH.css.hot-update.json, size: 774 - Manifest: main.LAST_HASH.hot-update.json, size: 28 -- Update: main.LAST_HASH.hot-update.js, size: 14694 +- Update: main.LAST_HASH.hot-update.js, size: 1307 ## Manifest @@ -36,7 +36,6 @@ #### Changed Runtime Modules - webpack/runtime/get_full_hash -- webpack/runtime/require_chunk_loading #### Changed Content ```js @@ -80,479 +79,11 @@ exports.runtime = function(__webpack_require__) { (() => { __webpack_require__.h = () => ("CURRENT_HASH") })(); -// webpack/runtime/require_chunk_loading +// webpack/runtime/lynx css hot update (() => { -var installedChunks = __webpack_require__.hmrS_require = __webpack_require__.hmrS_require || {"main": 1,}; -function loadUpdateChunk(chunkId, updatedModulesList) { - var update = require("./" + __webpack_require__.hu(chunkId)); - var updatedModules = update.modules; - var runtime = update.runtime; - for (var moduleId in updatedModules) { - if (__webpack_require__.o(updatedModules, moduleId)) { - currentUpdate[moduleId] = updatedModules[moduleId]; - if (updatedModulesList) updatedModulesList.push(moduleId); - } - } - if (runtime) currentUpdateRuntime.push(runtime); -}var currentUpdateChunks; -var currentUpdate; -var currentUpdateRemovedChunks; -var currentUpdateRuntime; -function applyHandler(options) { - if (__webpack_require__.f) delete __webpack_require__.f.requireHmr; - currentUpdateChunks = undefined; - function getAffectedModuleEffects(updateModuleId) { - var outdatedModules = [updateModuleId]; - var outdatedDependencies = {}; - var queue = outdatedModules.map(function (id) { - return { - chain: [id], - id: id - }; - }); - while (queue.length > 0) { - var queueItem = queue.pop(); - var moduleId = queueItem.id; - var chain = queueItem.chain; - var module = __webpack_require__.c[moduleId]; - if ( - !module || - (module.hot._selfAccepted && !module.hot._selfInvalidated) - ) { - continue; - } - if (module.hot._selfDeclined) { - return { - type: "self-declined", - chain: chain, - moduleId: moduleId - }; - } +__webpack_require__.cssHotUpdateList = [["main","main.LAST_HASH.css.hot-update.json"]]; - if (module.hot._main) { - return { - type: "unaccepted", - chain: chain, - moduleId: moduleId - }; - } - - for (var i = 0; i < module.parents.length; i++) { - var parentId = module.parents[i]; - var parent = __webpack_require__.c[parentId]; - if (!parent) { - continue; - } - if (parent.hot._declinedDependencies[moduleId]) { - return { - type: "declined", - chain: chain.concat([parentId]), - moduleId: moduleId, - parentId: parentId - }; - } - if (outdatedModules.indexOf(parentId) !== -1) { - continue; - } - if (parent.hot._acceptedDependencies[moduleId]) { - if (!outdatedDependencies[parentId]) { - outdatedDependencies[parentId] = []; - } - addAllToSet(outdatedDependencies[parentId], [moduleId]); - continue; - } - delete outdatedDependencies[parentId]; - outdatedModules.push(parentId); - queue.push({ - chain: chain.concat([parentId]), - id: parentId - }); - } - } - - return { - type: "accepted", - moduleId: updateModuleId, - outdatedModules: outdatedModules, - outdatedDependencies: outdatedDependencies - }; - } - - function addAllToSet(a, b) { - for (var i = 0; i < b.length; i++) { - var item = b[i]; - if (a.indexOf(item) === -1) a.push(item); - } - } - - var outdatedDependencies = {}; - var outdatedModules = []; - var appliedUpdate = {}; - - var warnUnexpectedRequire = function warnUnexpectedRequire(module) { - console.warn( - "[HMR] unexpected require(" + module.id + ") to disposed module" - ); - }; - - for (var moduleId in currentUpdate) { - if (__webpack_require__.o(currentUpdate, moduleId)) { - var newModuleFactory = currentUpdate[moduleId]; - var result = newModuleFactory ? getAffectedModuleEffects(moduleId) : { - type: "disposed", - moduleId: moduleId - }; - var abortError = false; - var doApply = false; - var doDispose = false; - var chainInfo = ""; - if (result.chain) { - chainInfo = "\nUpdate propagation: " + result.chain.join(" -> "); - } - switch (result.type) { - case "self-declined": - if (options.onDeclined) options.onDeclined(result); - if (!options.ignoreDeclined) - abortError = new Error( - "Aborted because of self decline: " + result.moduleId + chainInfo - ); - break; - case "declined": - if (options.onDeclined) options.onDeclined(result); - if (!options.ignoreDeclined) - abortError = new Error( - "Aborted because of declined dependency: " + - result.moduleId + - " in " + - result.parentId + - chainInfo - ); - break; - case "unaccepted": - if (options.onUnaccepted) options.onUnaccepted(result); - if (!options.ignoreUnaccepted) - abortError = new Error( - "Aborted because " + moduleId + " is not accepted" + chainInfo - ); - break; - case "accepted": - if (options.onAccepted) options.onAccepted(result); - doApply = true; - break; - case "disposed": - if (options.onDisposed) options.onDisposed(result); - doDispose = true; - break; - default: - throw new Error("Unexception type " + result.type); - } - if (abortError) { - return { - error: abortError - }; - } - if (doApply) { - appliedUpdate[moduleId] = newModuleFactory; - addAllToSet(outdatedModules, result.outdatedModules); - for (moduleId in result.outdatedDependencies) { - if (__webpack_require__.o(result.outdatedDependencies, moduleId)) { - if (!outdatedDependencies[moduleId]) - outdatedDependencies[moduleId] = []; - addAllToSet( - outdatedDependencies[moduleId], - result.outdatedDependencies[moduleId] - ); - } - } - } - if (doDispose) { - addAllToSet(outdatedModules, [result.moduleId]); - appliedUpdate[moduleId] = warnUnexpectedRequire; - } - } - } - currentUpdate = undefined; - - var outdatedSelfAcceptedModules = []; - for (var j = 0; j < outdatedModules.length; j++) { - var outdatedModuleId = outdatedModules[j]; - var module = __webpack_require__.c[outdatedModuleId]; - if ( - module && - (module.hot._selfAccepted || module.hot._main) && - // removed self-accepted modules should not be required - appliedUpdate[outdatedModuleId] !== warnUnexpectedRequire && - // when called invalidate self-accepting is not possible - !module.hot._selfInvalidated - ) { - outdatedSelfAcceptedModules.push({ - module: outdatedModuleId, - require: module.hot._requireSelf, - errorHandler: module.hot._selfAccepted - }); - } - } - self.__HMR_UPDATED_RUNTIME__.javascript.outdatedModules = outdatedModules; - self.__HMR_UPDATED_RUNTIME__.javascript.outdatedDependencies = outdatedDependencies; - - - var moduleOutdatedDependencies; - return { - dispose: function () { - currentUpdateRemovedChunks.forEach(function (chunkId) { - delete installedChunks[chunkId]; - }); - currentUpdateRemovedChunks = undefined; - - var idx; - var queue = outdatedModules.slice(); - while (queue.length > 0) { - var moduleId = queue.pop(); - var module = __webpack_require__.c[moduleId]; - if (!module) continue; - - var data = {}; - - // Call dispose handlers - var disposeHandlers = module.hot._disposeHandlers; - if (disposeHandlers.length > 0) { - self.__HMR_UPDATED_RUNTIME__.javascript.disposedModules.push(moduleId); - } - - for (j = 0; j < disposeHandlers.length; j++) { - disposeHandlers[j].call(null, data); - } - __webpack_require__.hmrD[moduleId] = data; - - module.hot.active = false; - - delete __webpack_require__.c[moduleId]; - - delete outdatedDependencies[moduleId]; - - for (j = 0; j < module.children.length; j++) { - var child = __webpack_require__.c[module.children[j]]; - if (!child) continue; - idx = child.parents.indexOf(moduleId); - if (idx >= 0) { - child.parents.splice(idx, 1); - } - } - } - - var dependency; - for (var outdatedModuleId in outdatedDependencies) { - if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { - module = __webpack_require__.c[outdatedModuleId]; - if (module) { - moduleOutdatedDependencies = outdatedDependencies[outdatedModuleId]; - for (j = 0; j < moduleOutdatedDependencies.length; j++) { - dependency = moduleOutdatedDependencies[j]; - idx = module.children.indexOf(dependency); - if (idx >= 0) module.children.splice(idx, 1); - } - } - } - } - }, - apply: function (reportError) { - // insert new code - for (var updateModuleId in appliedUpdate) { - if (__webpack_require__.o(appliedUpdate, updateModuleId)) { - __webpack_require__.m[updateModuleId] = appliedUpdate[updateModuleId]; - self.__HMR_UPDATED_RUNTIME__.javascript.updatedModules.push(updateModuleId); - - } - } - - // run new runtime modules - for (var i = 0; i < currentUpdateRuntime.length; i++) { - - currentUpdateRuntime[i](new Proxy(__webpack_require__, { - set(target, prop, value, receiver) { - self.__HMR_UPDATED_RUNTIME__.javascript.updatedRuntime.push(`__webpack_require__.${prop}`); - return Reflect.set(target, prop, value, receiver); - } - })); - - } - - // call accept handlers - for (var outdatedModuleId in outdatedDependencies) { - if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { - var module = __webpack_require__.c[outdatedModuleId]; - if (module) { - moduleOutdatedDependencies = outdatedDependencies[outdatedModuleId]; - var callbacks = []; - var errorHandlers = []; - var dependenciesForCallbacks = []; - for (var j = 0; j < moduleOutdatedDependencies.length; j++) { - var dependency = moduleOutdatedDependencies[j]; - var acceptCallback = module.hot._acceptedDependencies[dependency]; - var errorHandler = module.hot._acceptedErrorHandlers[dependency]; - if (acceptCallback) { - if (callbacks.indexOf(acceptCallback) !== -1) continue; - callbacks.push(acceptCallback); - errorHandlers.push(errorHandler); - self.__HMR_UPDATED_RUNTIME__.javascript.acceptedModules.push(dependency); - - dependenciesForCallbacks.push(dependency); - } - } - for (var k = 0; k < callbacks.length; k++) { - try { - callbacks[k].call(null, moduleOutdatedDependencies); - } catch (err) { - if (typeof errorHandlers[k] === "function") { - try { - errorHandlers[k](err, { - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k] - }); - } catch (err2) { - if (options.onErrored) { - options.onErrored({ - type: "accept-error-handler-errored", - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k], - error: err2, - originalError: err - }); - } - if (!options.ignoreErrored) { - reportError(err2); - reportError(err); - } - } - } else { - if (options.onErrored) { - options.onErrored({ - type: "accept-errored", - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k], - error: err - }); - } - if (!options.ignoreErrored) { - reportError(err); - } - } - } - } - } - } - } - - // Load self accepted modules - for (var o = 0; o < outdatedSelfAcceptedModules.length; o++) { - var item = outdatedSelfAcceptedModules[o]; - var moduleId = item.module; - try { - item.require(moduleId); - } catch (err) { - if (typeof item.errorHandler === "function") { - try { - item.errorHandler(err, { - moduleId: moduleId, - module: __webpack_require__.c[moduleId] - }); - } catch (err1) { - if (options.onErrored) { - options.onErrored({ - type: "self-accept-error-handler-errored", - moduleId: moduleId, - error: err1, - originalError: err - }); - } - if (!options.ignoreErrored) { - reportError(err1); - reportError(err); - } - } - } else { - if (options.onErrored) { - options.onErrored({ - type: "self-accept-errored", - moduleId: moduleId, - error: err - }); - } - if (!options.ignoreErrored) { - reportError(err); - } - } - } - } - - return outdatedModules; - } - }; -} - -__webpack_require__.hmrI.require = function (moduleId, applyHandlers) { - if (!currentUpdate) { - currentUpdate = {}; - currentUpdateRuntime = []; - currentUpdateRemovedChunks = []; - applyHandlers.push(applyHandler); - } - if (!__webpack_require__.o(currentUpdate, moduleId)) { - currentUpdate[moduleId] = __webpack_require__.m[moduleId]; - } -}; - -__webpack_require__.hmrC.require = function ( - chunkIds, - removedChunks, - removedModules, - promises, - applyHandlers, - updatedModulesList -) { - applyHandlers.push(applyHandler); - currentUpdateChunks = {}; - currentUpdateRemovedChunks = removedChunks; - currentUpdate = removedModules.reduce(function (obj, key) { - obj[key] = false; - return obj; - }, {}); - currentUpdateRuntime = []; - chunkIds.forEach(function (chunkId) { - if ( - __webpack_require__.o(installedChunks, chunkId) && - installedChunks[chunkId] !== undefined - ) { - promises.push(loadUpdateChunk(chunkId, updatedModulesList)); - currentUpdateChunks[chunkId] = true; - } else { - currentUpdateChunks[chunkId] = false; - } - }); - if (__webpack_require__.f) { - __webpack_require__.f.requireHmr = function (chunkId, promises) { - if ( - currentUpdateChunks && - __webpack_require__.o(currentUpdateChunks, chunkId) && - !currentUpdateChunks[chunkId] - ) { - promises.push(loadUpdateChunk(chunkId)); - currentUpdateChunks[chunkId] = true; - } - }; - } -}; -__webpack_require__.hmrM = () => { - return Promise.resolve() - .then(() => { - return require("./" + __webpack_require__.hmrF()); - })['catch']((err) => { - if (err.code !== 'MODULE_NOT_FOUND') throw err; - }); -}; - __webpack_require__.cssHotUpdateList = [["main","main.LAST_HASH.css.hot-update.json"]]; - })(); } diff --git a/packages/webpack/css-extract-webpack-plugin/test/hotCases/css/enable-css-selector/__snapshot__/rspack/2.snap.txt b/packages/webpack/css-extract-webpack-plugin/test/hotCases/css/enable-css-selector/__snapshot__/rspack/2.snap.txt index ce9b71f89c..211935603f 100644 --- a/packages/webpack/css-extract-webpack-plugin/test/hotCases/css/enable-css-selector/__snapshot__/rspack/2.snap.txt +++ b/packages/webpack/css-extract-webpack-plugin/test/hotCases/css/enable-css-selector/__snapshot__/rspack/2.snap.txt @@ -7,7 +7,7 @@ - Bundle: rspack-bundle.js - Manifest: main.LAST_HASH.css.hot-update.json, size: 1054 - Manifest: main.LAST_HASH.hot-update.json, size: 28 -- Update: main.LAST_HASH.hot-update.js, size: 14694 +- Update: main.LAST_HASH.hot-update.js, size: 1307 ## Manifest @@ -36,7 +36,6 @@ #### Changed Runtime Modules - webpack/runtime/get_full_hash -- webpack/runtime/require_chunk_loading #### Changed Content ```js @@ -80,479 +79,11 @@ exports.runtime = function(__webpack_require__) { (() => { __webpack_require__.h = () => ("CURRENT_HASH") })(); -// webpack/runtime/require_chunk_loading +// webpack/runtime/lynx css hot update (() => { -var installedChunks = __webpack_require__.hmrS_require = __webpack_require__.hmrS_require || {"main": 1,}; -function loadUpdateChunk(chunkId, updatedModulesList) { - var update = require("./" + __webpack_require__.hu(chunkId)); - var updatedModules = update.modules; - var runtime = update.runtime; - for (var moduleId in updatedModules) { - if (__webpack_require__.o(updatedModules, moduleId)) { - currentUpdate[moduleId] = updatedModules[moduleId]; - if (updatedModulesList) updatedModulesList.push(moduleId); - } - } - if (runtime) currentUpdateRuntime.push(runtime); -}var currentUpdateChunks; -var currentUpdate; -var currentUpdateRemovedChunks; -var currentUpdateRuntime; -function applyHandler(options) { - if (__webpack_require__.f) delete __webpack_require__.f.requireHmr; - currentUpdateChunks = undefined; - function getAffectedModuleEffects(updateModuleId) { - var outdatedModules = [updateModuleId]; - var outdatedDependencies = {}; - var queue = outdatedModules.map(function (id) { - return { - chain: [id], - id: id - }; - }); - while (queue.length > 0) { - var queueItem = queue.pop(); - var moduleId = queueItem.id; - var chain = queueItem.chain; - var module = __webpack_require__.c[moduleId]; - if ( - !module || - (module.hot._selfAccepted && !module.hot._selfInvalidated) - ) { - continue; - } - - if (module.hot._selfDeclined) { - return { - type: "self-declined", - chain: chain, - moduleId: moduleId - }; - } - - if (module.hot._main) { - return { - type: "unaccepted", - chain: chain, - moduleId: moduleId - }; - } - - for (var i = 0; i < module.parents.length; i++) { - var parentId = module.parents[i]; - var parent = __webpack_require__.c[parentId]; - if (!parent) { - continue; - } - if (parent.hot._declinedDependencies[moduleId]) { - return { - type: "declined", - chain: chain.concat([parentId]), - moduleId: moduleId, - parentId: parentId - }; - } - if (outdatedModules.indexOf(parentId) !== -1) { - continue; - } - if (parent.hot._acceptedDependencies[moduleId]) { - if (!outdatedDependencies[parentId]) { - outdatedDependencies[parentId] = []; - } - addAllToSet(outdatedDependencies[parentId], [moduleId]); - continue; - } - delete outdatedDependencies[parentId]; - outdatedModules.push(parentId); - queue.push({ - chain: chain.concat([parentId]), - id: parentId - }); - } - } - - return { - type: "accepted", - moduleId: updateModuleId, - outdatedModules: outdatedModules, - outdatedDependencies: outdatedDependencies - }; - } - - function addAllToSet(a, b) { - for (var i = 0; i < b.length; i++) { - var item = b[i]; - if (a.indexOf(item) === -1) a.push(item); - } - } - - var outdatedDependencies = {}; - var outdatedModules = []; - var appliedUpdate = {}; - - var warnUnexpectedRequire = function warnUnexpectedRequire(module) { - console.warn( - "[HMR] unexpected require(" + module.id + ") to disposed module" - ); - }; - - for (var moduleId in currentUpdate) { - if (__webpack_require__.o(currentUpdate, moduleId)) { - var newModuleFactory = currentUpdate[moduleId]; - var result = newModuleFactory ? getAffectedModuleEffects(moduleId) : { - type: "disposed", - moduleId: moduleId - }; - var abortError = false; - var doApply = false; - var doDispose = false; - var chainInfo = ""; - if (result.chain) { - chainInfo = "\nUpdate propagation: " + result.chain.join(" -> "); - } - switch (result.type) { - case "self-declined": - if (options.onDeclined) options.onDeclined(result); - if (!options.ignoreDeclined) - abortError = new Error( - "Aborted because of self decline: " + result.moduleId + chainInfo - ); - break; - case "declined": - if (options.onDeclined) options.onDeclined(result); - if (!options.ignoreDeclined) - abortError = new Error( - "Aborted because of declined dependency: " + - result.moduleId + - " in " + - result.parentId + - chainInfo - ); - break; - case "unaccepted": - if (options.onUnaccepted) options.onUnaccepted(result); - if (!options.ignoreUnaccepted) - abortError = new Error( - "Aborted because " + moduleId + " is not accepted" + chainInfo - ); - break; - case "accepted": - if (options.onAccepted) options.onAccepted(result); - doApply = true; - break; - case "disposed": - if (options.onDisposed) options.onDisposed(result); - doDispose = true; - break; - default: - throw new Error("Unexception type " + result.type); - } - if (abortError) { - return { - error: abortError - }; - } - if (doApply) { - appliedUpdate[moduleId] = newModuleFactory; - addAllToSet(outdatedModules, result.outdatedModules); - for (moduleId in result.outdatedDependencies) { - if (__webpack_require__.o(result.outdatedDependencies, moduleId)) { - if (!outdatedDependencies[moduleId]) - outdatedDependencies[moduleId] = []; - addAllToSet( - outdatedDependencies[moduleId], - result.outdatedDependencies[moduleId] - ); - } - } - } - if (doDispose) { - addAllToSet(outdatedModules, [result.moduleId]); - appliedUpdate[moduleId] = warnUnexpectedRequire; - } - } - } - currentUpdate = undefined; - - var outdatedSelfAcceptedModules = []; - for (var j = 0; j < outdatedModules.length; j++) { - var outdatedModuleId = outdatedModules[j]; - var module = __webpack_require__.c[outdatedModuleId]; - if ( - module && - (module.hot._selfAccepted || module.hot._main) && - // removed self-accepted modules should not be required - appliedUpdate[outdatedModuleId] !== warnUnexpectedRequire && - // when called invalidate self-accepting is not possible - !module.hot._selfInvalidated - ) { - outdatedSelfAcceptedModules.push({ - module: outdatedModuleId, - require: module.hot._requireSelf, - errorHandler: module.hot._selfAccepted - }); - } - } - self.__HMR_UPDATED_RUNTIME__.javascript.outdatedModules = outdatedModules; - self.__HMR_UPDATED_RUNTIME__.javascript.outdatedDependencies = outdatedDependencies; - - - var moduleOutdatedDependencies; - return { - dispose: function () { - currentUpdateRemovedChunks.forEach(function (chunkId) { - delete installedChunks[chunkId]; - }); - currentUpdateRemovedChunks = undefined; - - var idx; - var queue = outdatedModules.slice(); - while (queue.length > 0) { - var moduleId = queue.pop(); - var module = __webpack_require__.c[moduleId]; - if (!module) continue; - - var data = {}; - - // Call dispose handlers - var disposeHandlers = module.hot._disposeHandlers; - if (disposeHandlers.length > 0) { - self.__HMR_UPDATED_RUNTIME__.javascript.disposedModules.push(moduleId); - } - - for (j = 0; j < disposeHandlers.length; j++) { - disposeHandlers[j].call(null, data); - } - __webpack_require__.hmrD[moduleId] = data; - - module.hot.active = false; - - delete __webpack_require__.c[moduleId]; - - delete outdatedDependencies[moduleId]; - - for (j = 0; j < module.children.length; j++) { - var child = __webpack_require__.c[module.children[j]]; - if (!child) continue; - idx = child.parents.indexOf(moduleId); - if (idx >= 0) { - child.parents.splice(idx, 1); - } - } - } - - var dependency; - for (var outdatedModuleId in outdatedDependencies) { - if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { - module = __webpack_require__.c[outdatedModuleId]; - if (module) { - moduleOutdatedDependencies = outdatedDependencies[outdatedModuleId]; - for (j = 0; j < moduleOutdatedDependencies.length; j++) { - dependency = moduleOutdatedDependencies[j]; - idx = module.children.indexOf(dependency); - if (idx >= 0) module.children.splice(idx, 1); - } - } - } - } - }, - apply: function (reportError) { - // insert new code - for (var updateModuleId in appliedUpdate) { - if (__webpack_require__.o(appliedUpdate, updateModuleId)) { - __webpack_require__.m[updateModuleId] = appliedUpdate[updateModuleId]; - self.__HMR_UPDATED_RUNTIME__.javascript.updatedModules.push(updateModuleId); - - } - } - - // run new runtime modules - for (var i = 0; i < currentUpdateRuntime.length; i++) { - - currentUpdateRuntime[i](new Proxy(__webpack_require__, { - set(target, prop, value, receiver) { - self.__HMR_UPDATED_RUNTIME__.javascript.updatedRuntime.push(`__webpack_require__.${prop}`); - return Reflect.set(target, prop, value, receiver); - } - })); - - } - - // call accept handlers - for (var outdatedModuleId in outdatedDependencies) { - if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { - var module = __webpack_require__.c[outdatedModuleId]; - if (module) { - moduleOutdatedDependencies = outdatedDependencies[outdatedModuleId]; - var callbacks = []; - var errorHandlers = []; - var dependenciesForCallbacks = []; - for (var j = 0; j < moduleOutdatedDependencies.length; j++) { - var dependency = moduleOutdatedDependencies[j]; - var acceptCallback = module.hot._acceptedDependencies[dependency]; - var errorHandler = module.hot._acceptedErrorHandlers[dependency]; - if (acceptCallback) { - if (callbacks.indexOf(acceptCallback) !== -1) continue; - callbacks.push(acceptCallback); - errorHandlers.push(errorHandler); - self.__HMR_UPDATED_RUNTIME__.javascript.acceptedModules.push(dependency); - - dependenciesForCallbacks.push(dependency); - } - } - for (var k = 0; k < callbacks.length; k++) { - try { - callbacks[k].call(null, moduleOutdatedDependencies); - } catch (err) { - if (typeof errorHandlers[k] === "function") { - try { - errorHandlers[k](err, { - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k] - }); - } catch (err2) { - if (options.onErrored) { - options.onErrored({ - type: "accept-error-handler-errored", - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k], - error: err2, - originalError: err - }); - } - if (!options.ignoreErrored) { - reportError(err2); - reportError(err); - } - } - } else { - if (options.onErrored) { - options.onErrored({ - type: "accept-errored", - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k], - error: err - }); - } - if (!options.ignoreErrored) { - reportError(err); - } - } - } - } - } - } - } - - // Load self accepted modules - for (var o = 0; o < outdatedSelfAcceptedModules.length; o++) { - var item = outdatedSelfAcceptedModules[o]; - var moduleId = item.module; - try { - item.require(moduleId); - } catch (err) { - if (typeof item.errorHandler === "function") { - try { - item.errorHandler(err, { - moduleId: moduleId, - module: __webpack_require__.c[moduleId] - }); - } catch (err1) { - if (options.onErrored) { - options.onErrored({ - type: "self-accept-error-handler-errored", - moduleId: moduleId, - error: err1, - originalError: err - }); - } - if (!options.ignoreErrored) { - reportError(err1); - reportError(err); - } - } - } else { - if (options.onErrored) { - options.onErrored({ - type: "self-accept-errored", - moduleId: moduleId, - error: err - }); - } - if (!options.ignoreErrored) { - reportError(err); - } - } - } - } - - return outdatedModules; - } - }; -} -__webpack_require__.hmrI.require = function (moduleId, applyHandlers) { - if (!currentUpdate) { - currentUpdate = {}; - currentUpdateRuntime = []; - currentUpdateRemovedChunks = []; - applyHandlers.push(applyHandler); - } - if (!__webpack_require__.o(currentUpdate, moduleId)) { - currentUpdate[moduleId] = __webpack_require__.m[moduleId]; - } -}; +__webpack_require__.cssHotUpdateList = [["main","main.LAST_HASH.css.hot-update.json"]]; -__webpack_require__.hmrC.require = function ( - chunkIds, - removedChunks, - removedModules, - promises, - applyHandlers, - updatedModulesList -) { - applyHandlers.push(applyHandler); - currentUpdateChunks = {}; - currentUpdateRemovedChunks = removedChunks; - currentUpdate = removedModules.reduce(function (obj, key) { - obj[key] = false; - return obj; - }, {}); - currentUpdateRuntime = []; - chunkIds.forEach(function (chunkId) { - if ( - __webpack_require__.o(installedChunks, chunkId) && - installedChunks[chunkId] !== undefined - ) { - promises.push(loadUpdateChunk(chunkId, updatedModulesList)); - currentUpdateChunks[chunkId] = true; - } else { - currentUpdateChunks[chunkId] = false; - } - }); - if (__webpack_require__.f) { - __webpack_require__.f.requireHmr = function (chunkId, promises) { - if ( - currentUpdateChunks && - __webpack_require__.o(currentUpdateChunks, chunkId) && - !currentUpdateChunks[chunkId] - ) { - promises.push(loadUpdateChunk(chunkId)); - currentUpdateChunks[chunkId] = true; - } - }; - } -}; -__webpack_require__.hmrM = () => { - return Promise.resolve() - .then(() => { - return require("./" + __webpack_require__.hmrF()); - })['catch']((err) => { - if (err.code !== 'MODULE_NOT_FOUND') throw err; - }); -}; - __webpack_require__.cssHotUpdateList = [["main","main.LAST_HASH.css.hot-update.json"]]; - })(); } @@ -593,8 +124,6 @@ Updated Modules: Updated Runtime: - `__webpack_require__.cssHotUpdateList` - `__webpack_require__.h` -- `__webpack_require__.hmrM` -- `__webpack_require__.hmrS_require` #### Callback diff --git a/packages/webpack/css-extract-webpack-plugin/test/hotCases/css/scoped/__snapshot__/rspack/1.snap.txt b/packages/webpack/css-extract-webpack-plugin/test/hotCases/css/scoped/__snapshot__/rspack/1.snap.txt index d69f3aa1b2..1c3d8c6272 100644 --- a/packages/webpack/css-extract-webpack-plugin/test/hotCases/css/scoped/__snapshot__/rspack/1.snap.txt +++ b/packages/webpack/css-extract-webpack-plugin/test/hotCases/css/scoped/__snapshot__/rspack/1.snap.txt @@ -7,7 +7,7 @@ - Bundle: rspack-bundle.js - Manifest: main.LAST_HASH.css.hot-update.json, size: 989 - Manifest: main.LAST_HASH.hot-update.json, size: 28 -- Update: main.LAST_HASH.hot-update.js, size: 14685 +- Update: main.LAST_HASH.hot-update.js, size: 1298 ## Manifest @@ -36,7 +36,6 @@ #### Changed Runtime Modules - webpack/runtime/get_full_hash -- webpack/runtime/require_chunk_loading #### Changed Content ```js @@ -80,479 +79,11 @@ exports.runtime = function(__webpack_require__) { (() => { __webpack_require__.h = () => ("CURRENT_HASH") })(); -// webpack/runtime/require_chunk_loading +// webpack/runtime/lynx css hot update (() => { -var installedChunks = __webpack_require__.hmrS_require = __webpack_require__.hmrS_require || {"main": 1,}; -function loadUpdateChunk(chunkId, updatedModulesList) { - var update = require("./" + __webpack_require__.hu(chunkId)); - var updatedModules = update.modules; - var runtime = update.runtime; - for (var moduleId in updatedModules) { - if (__webpack_require__.o(updatedModules, moduleId)) { - currentUpdate[moduleId] = updatedModules[moduleId]; - if (updatedModulesList) updatedModulesList.push(moduleId); - } - } - if (runtime) currentUpdateRuntime.push(runtime); -}var currentUpdateChunks; -var currentUpdate; -var currentUpdateRemovedChunks; -var currentUpdateRuntime; -function applyHandler(options) { - if (__webpack_require__.f) delete __webpack_require__.f.requireHmr; - currentUpdateChunks = undefined; - function getAffectedModuleEffects(updateModuleId) { - var outdatedModules = [updateModuleId]; - var outdatedDependencies = {}; - var queue = outdatedModules.map(function (id) { - return { - chain: [id], - id: id - }; - }); - while (queue.length > 0) { - var queueItem = queue.pop(); - var moduleId = queueItem.id; - var chain = queueItem.chain; - var module = __webpack_require__.c[moduleId]; - if ( - !module || - (module.hot._selfAccepted && !module.hot._selfInvalidated) - ) { - continue; - } - if (module.hot._selfDeclined) { - return { - type: "self-declined", - chain: chain, - moduleId: moduleId - }; - } +__webpack_require__.cssHotUpdateList = [["main","main.LAST_HASH.css.hot-update.json"]]; - if (module.hot._main) { - return { - type: "unaccepted", - chain: chain, - moduleId: moduleId - }; - } - - for (var i = 0; i < module.parents.length; i++) { - var parentId = module.parents[i]; - var parent = __webpack_require__.c[parentId]; - if (!parent) { - continue; - } - if (parent.hot._declinedDependencies[moduleId]) { - return { - type: "declined", - chain: chain.concat([parentId]), - moduleId: moduleId, - parentId: parentId - }; - } - if (outdatedModules.indexOf(parentId) !== -1) { - continue; - } - if (parent.hot._acceptedDependencies[moduleId]) { - if (!outdatedDependencies[parentId]) { - outdatedDependencies[parentId] = []; - } - addAllToSet(outdatedDependencies[parentId], [moduleId]); - continue; - } - delete outdatedDependencies[parentId]; - outdatedModules.push(parentId); - queue.push({ - chain: chain.concat([parentId]), - id: parentId - }); - } - } - - return { - type: "accepted", - moduleId: updateModuleId, - outdatedModules: outdatedModules, - outdatedDependencies: outdatedDependencies - }; - } - - function addAllToSet(a, b) { - for (var i = 0; i < b.length; i++) { - var item = b[i]; - if (a.indexOf(item) === -1) a.push(item); - } - } - - var outdatedDependencies = {}; - var outdatedModules = []; - var appliedUpdate = {}; - - var warnUnexpectedRequire = function warnUnexpectedRequire(module) { - console.warn( - "[HMR] unexpected require(" + module.id + ") to disposed module" - ); - }; - - for (var moduleId in currentUpdate) { - if (__webpack_require__.o(currentUpdate, moduleId)) { - var newModuleFactory = currentUpdate[moduleId]; - var result = newModuleFactory ? getAffectedModuleEffects(moduleId) : { - type: "disposed", - moduleId: moduleId - }; - var abortError = false; - var doApply = false; - var doDispose = false; - var chainInfo = ""; - if (result.chain) { - chainInfo = "\nUpdate propagation: " + result.chain.join(" -> "); - } - switch (result.type) { - case "self-declined": - if (options.onDeclined) options.onDeclined(result); - if (!options.ignoreDeclined) - abortError = new Error( - "Aborted because of self decline: " + result.moduleId + chainInfo - ); - break; - case "declined": - if (options.onDeclined) options.onDeclined(result); - if (!options.ignoreDeclined) - abortError = new Error( - "Aborted because of declined dependency: " + - result.moduleId + - " in " + - result.parentId + - chainInfo - ); - break; - case "unaccepted": - if (options.onUnaccepted) options.onUnaccepted(result); - if (!options.ignoreUnaccepted) - abortError = new Error( - "Aborted because " + moduleId + " is not accepted" + chainInfo - ); - break; - case "accepted": - if (options.onAccepted) options.onAccepted(result); - doApply = true; - break; - case "disposed": - if (options.onDisposed) options.onDisposed(result); - doDispose = true; - break; - default: - throw new Error("Unexception type " + result.type); - } - if (abortError) { - return { - error: abortError - }; - } - if (doApply) { - appliedUpdate[moduleId] = newModuleFactory; - addAllToSet(outdatedModules, result.outdatedModules); - for (moduleId in result.outdatedDependencies) { - if (__webpack_require__.o(result.outdatedDependencies, moduleId)) { - if (!outdatedDependencies[moduleId]) - outdatedDependencies[moduleId] = []; - addAllToSet( - outdatedDependencies[moduleId], - result.outdatedDependencies[moduleId] - ); - } - } - } - if (doDispose) { - addAllToSet(outdatedModules, [result.moduleId]); - appliedUpdate[moduleId] = warnUnexpectedRequire; - } - } - } - currentUpdate = undefined; - - var outdatedSelfAcceptedModules = []; - for (var j = 0; j < outdatedModules.length; j++) { - var outdatedModuleId = outdatedModules[j]; - var module = __webpack_require__.c[outdatedModuleId]; - if ( - module && - (module.hot._selfAccepted || module.hot._main) && - // removed self-accepted modules should not be required - appliedUpdate[outdatedModuleId] !== warnUnexpectedRequire && - // when called invalidate self-accepting is not possible - !module.hot._selfInvalidated - ) { - outdatedSelfAcceptedModules.push({ - module: outdatedModuleId, - require: module.hot._requireSelf, - errorHandler: module.hot._selfAccepted - }); - } - } - self.__HMR_UPDATED_RUNTIME__.javascript.outdatedModules = outdatedModules; - self.__HMR_UPDATED_RUNTIME__.javascript.outdatedDependencies = outdatedDependencies; - - - var moduleOutdatedDependencies; - return { - dispose: function () { - currentUpdateRemovedChunks.forEach(function (chunkId) { - delete installedChunks[chunkId]; - }); - currentUpdateRemovedChunks = undefined; - - var idx; - var queue = outdatedModules.slice(); - while (queue.length > 0) { - var moduleId = queue.pop(); - var module = __webpack_require__.c[moduleId]; - if (!module) continue; - - var data = {}; - - // Call dispose handlers - var disposeHandlers = module.hot._disposeHandlers; - if (disposeHandlers.length > 0) { - self.__HMR_UPDATED_RUNTIME__.javascript.disposedModules.push(moduleId); - } - - for (j = 0; j < disposeHandlers.length; j++) { - disposeHandlers[j].call(null, data); - } - __webpack_require__.hmrD[moduleId] = data; - - module.hot.active = false; - - delete __webpack_require__.c[moduleId]; - - delete outdatedDependencies[moduleId]; - - for (j = 0; j < module.children.length; j++) { - var child = __webpack_require__.c[module.children[j]]; - if (!child) continue; - idx = child.parents.indexOf(moduleId); - if (idx >= 0) { - child.parents.splice(idx, 1); - } - } - } - - var dependency; - for (var outdatedModuleId in outdatedDependencies) { - if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { - module = __webpack_require__.c[outdatedModuleId]; - if (module) { - moduleOutdatedDependencies = outdatedDependencies[outdatedModuleId]; - for (j = 0; j < moduleOutdatedDependencies.length; j++) { - dependency = moduleOutdatedDependencies[j]; - idx = module.children.indexOf(dependency); - if (idx >= 0) module.children.splice(idx, 1); - } - } - } - } - }, - apply: function (reportError) { - // insert new code - for (var updateModuleId in appliedUpdate) { - if (__webpack_require__.o(appliedUpdate, updateModuleId)) { - __webpack_require__.m[updateModuleId] = appliedUpdate[updateModuleId]; - self.__HMR_UPDATED_RUNTIME__.javascript.updatedModules.push(updateModuleId); - - } - } - - // run new runtime modules - for (var i = 0; i < currentUpdateRuntime.length; i++) { - - currentUpdateRuntime[i](new Proxy(__webpack_require__, { - set(target, prop, value, receiver) { - self.__HMR_UPDATED_RUNTIME__.javascript.updatedRuntime.push(`__webpack_require__.${prop}`); - return Reflect.set(target, prop, value, receiver); - } - })); - - } - - // call accept handlers - for (var outdatedModuleId in outdatedDependencies) { - if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { - var module = __webpack_require__.c[outdatedModuleId]; - if (module) { - moduleOutdatedDependencies = outdatedDependencies[outdatedModuleId]; - var callbacks = []; - var errorHandlers = []; - var dependenciesForCallbacks = []; - for (var j = 0; j < moduleOutdatedDependencies.length; j++) { - var dependency = moduleOutdatedDependencies[j]; - var acceptCallback = module.hot._acceptedDependencies[dependency]; - var errorHandler = module.hot._acceptedErrorHandlers[dependency]; - if (acceptCallback) { - if (callbacks.indexOf(acceptCallback) !== -1) continue; - callbacks.push(acceptCallback); - errorHandlers.push(errorHandler); - self.__HMR_UPDATED_RUNTIME__.javascript.acceptedModules.push(dependency); - - dependenciesForCallbacks.push(dependency); - } - } - for (var k = 0; k < callbacks.length; k++) { - try { - callbacks[k].call(null, moduleOutdatedDependencies); - } catch (err) { - if (typeof errorHandlers[k] === "function") { - try { - errorHandlers[k](err, { - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k] - }); - } catch (err2) { - if (options.onErrored) { - options.onErrored({ - type: "accept-error-handler-errored", - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k], - error: err2, - originalError: err - }); - } - if (!options.ignoreErrored) { - reportError(err2); - reportError(err); - } - } - } else { - if (options.onErrored) { - options.onErrored({ - type: "accept-errored", - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k], - error: err - }); - } - if (!options.ignoreErrored) { - reportError(err); - } - } - } - } - } - } - } - - // Load self accepted modules - for (var o = 0; o < outdatedSelfAcceptedModules.length; o++) { - var item = outdatedSelfAcceptedModules[o]; - var moduleId = item.module; - try { - item.require(moduleId); - } catch (err) { - if (typeof item.errorHandler === "function") { - try { - item.errorHandler(err, { - moduleId: moduleId, - module: __webpack_require__.c[moduleId] - }); - } catch (err1) { - if (options.onErrored) { - options.onErrored({ - type: "self-accept-error-handler-errored", - moduleId: moduleId, - error: err1, - originalError: err - }); - } - if (!options.ignoreErrored) { - reportError(err1); - reportError(err); - } - } - } else { - if (options.onErrored) { - options.onErrored({ - type: "self-accept-errored", - moduleId: moduleId, - error: err - }); - } - if (!options.ignoreErrored) { - reportError(err); - } - } - } - } - - return outdatedModules; - } - }; -} - -__webpack_require__.hmrI.require = function (moduleId, applyHandlers) { - if (!currentUpdate) { - currentUpdate = {}; - currentUpdateRuntime = []; - currentUpdateRemovedChunks = []; - applyHandlers.push(applyHandler); - } - if (!__webpack_require__.o(currentUpdate, moduleId)) { - currentUpdate[moduleId] = __webpack_require__.m[moduleId]; - } -}; - -__webpack_require__.hmrC.require = function ( - chunkIds, - removedChunks, - removedModules, - promises, - applyHandlers, - updatedModulesList -) { - applyHandlers.push(applyHandler); - currentUpdateChunks = {}; - currentUpdateRemovedChunks = removedChunks; - currentUpdate = removedModules.reduce(function (obj, key) { - obj[key] = false; - return obj; - }, {}); - currentUpdateRuntime = []; - chunkIds.forEach(function (chunkId) { - if ( - __webpack_require__.o(installedChunks, chunkId) && - installedChunks[chunkId] !== undefined - ) { - promises.push(loadUpdateChunk(chunkId, updatedModulesList)); - currentUpdateChunks[chunkId] = true; - } else { - currentUpdateChunks[chunkId] = false; - } - }); - if (__webpack_require__.f) { - __webpack_require__.f.requireHmr = function (chunkId, promises) { - if ( - currentUpdateChunks && - __webpack_require__.o(currentUpdateChunks, chunkId) && - !currentUpdateChunks[chunkId] - ) { - promises.push(loadUpdateChunk(chunkId)); - currentUpdateChunks[chunkId] = true; - } - }; - } -}; -__webpack_require__.hmrM = () => { - return Promise.resolve() - .then(() => { - return require("./" + __webpack_require__.hmrF()); - })['catch']((err) => { - if (err.code !== 'MODULE_NOT_FOUND') throw err; - }); -}; - __webpack_require__.cssHotUpdateList = [["main","main.LAST_HASH.css.hot-update.json"]]; - })(); } diff --git a/packages/webpack/css-extract-webpack-plugin/test/hotCases/css/scoped/__snapshot__/rspack/2.snap.txt b/packages/webpack/css-extract-webpack-plugin/test/hotCases/css/scoped/__snapshot__/rspack/2.snap.txt index 9328197a9d..5680b4ac8c 100644 --- a/packages/webpack/css-extract-webpack-plugin/test/hotCases/css/scoped/__snapshot__/rspack/2.snap.txt +++ b/packages/webpack/css-extract-webpack-plugin/test/hotCases/css/scoped/__snapshot__/rspack/2.snap.txt @@ -7,7 +7,7 @@ - Bundle: rspack-bundle.js - Manifest: main.LAST_HASH.css.hot-update.json, size: 1305 - Manifest: main.LAST_HASH.hot-update.json, size: 28 -- Update: main.LAST_HASH.hot-update.js, size: 14685 +- Update: main.LAST_HASH.hot-update.js, size: 1298 ## Manifest @@ -36,7 +36,6 @@ #### Changed Runtime Modules - webpack/runtime/get_full_hash -- webpack/runtime/require_chunk_loading #### Changed Content ```js @@ -80,479 +79,11 @@ exports.runtime = function(__webpack_require__) { (() => { __webpack_require__.h = () => ("CURRENT_HASH") })(); -// webpack/runtime/require_chunk_loading +// webpack/runtime/lynx css hot update (() => { -var installedChunks = __webpack_require__.hmrS_require = __webpack_require__.hmrS_require || {"main": 1,}; -function loadUpdateChunk(chunkId, updatedModulesList) { - var update = require("./" + __webpack_require__.hu(chunkId)); - var updatedModules = update.modules; - var runtime = update.runtime; - for (var moduleId in updatedModules) { - if (__webpack_require__.o(updatedModules, moduleId)) { - currentUpdate[moduleId] = updatedModules[moduleId]; - if (updatedModulesList) updatedModulesList.push(moduleId); - } - } - if (runtime) currentUpdateRuntime.push(runtime); -}var currentUpdateChunks; -var currentUpdate; -var currentUpdateRemovedChunks; -var currentUpdateRuntime; -function applyHandler(options) { - if (__webpack_require__.f) delete __webpack_require__.f.requireHmr; - currentUpdateChunks = undefined; - function getAffectedModuleEffects(updateModuleId) { - var outdatedModules = [updateModuleId]; - var outdatedDependencies = {}; - var queue = outdatedModules.map(function (id) { - return { - chain: [id], - id: id - }; - }); - while (queue.length > 0) { - var queueItem = queue.pop(); - var moduleId = queueItem.id; - var chain = queueItem.chain; - var module = __webpack_require__.c[moduleId]; - if ( - !module || - (module.hot._selfAccepted && !module.hot._selfInvalidated) - ) { - continue; - } - - if (module.hot._selfDeclined) { - return { - type: "self-declined", - chain: chain, - moduleId: moduleId - }; - } - - if (module.hot._main) { - return { - type: "unaccepted", - chain: chain, - moduleId: moduleId - }; - } - - for (var i = 0; i < module.parents.length; i++) { - var parentId = module.parents[i]; - var parent = __webpack_require__.c[parentId]; - if (!parent) { - continue; - } - if (parent.hot._declinedDependencies[moduleId]) { - return { - type: "declined", - chain: chain.concat([parentId]), - moduleId: moduleId, - parentId: parentId - }; - } - if (outdatedModules.indexOf(parentId) !== -1) { - continue; - } - if (parent.hot._acceptedDependencies[moduleId]) { - if (!outdatedDependencies[parentId]) { - outdatedDependencies[parentId] = []; - } - addAllToSet(outdatedDependencies[parentId], [moduleId]); - continue; - } - delete outdatedDependencies[parentId]; - outdatedModules.push(parentId); - queue.push({ - chain: chain.concat([parentId]), - id: parentId - }); - } - } - - return { - type: "accepted", - moduleId: updateModuleId, - outdatedModules: outdatedModules, - outdatedDependencies: outdatedDependencies - }; - } - - function addAllToSet(a, b) { - for (var i = 0; i < b.length; i++) { - var item = b[i]; - if (a.indexOf(item) === -1) a.push(item); - } - } - - var outdatedDependencies = {}; - var outdatedModules = []; - var appliedUpdate = {}; - - var warnUnexpectedRequire = function warnUnexpectedRequire(module) { - console.warn( - "[HMR] unexpected require(" + module.id + ") to disposed module" - ); - }; - - for (var moduleId in currentUpdate) { - if (__webpack_require__.o(currentUpdate, moduleId)) { - var newModuleFactory = currentUpdate[moduleId]; - var result = newModuleFactory ? getAffectedModuleEffects(moduleId) : { - type: "disposed", - moduleId: moduleId - }; - var abortError = false; - var doApply = false; - var doDispose = false; - var chainInfo = ""; - if (result.chain) { - chainInfo = "\nUpdate propagation: " + result.chain.join(" -> "); - } - switch (result.type) { - case "self-declined": - if (options.onDeclined) options.onDeclined(result); - if (!options.ignoreDeclined) - abortError = new Error( - "Aborted because of self decline: " + result.moduleId + chainInfo - ); - break; - case "declined": - if (options.onDeclined) options.onDeclined(result); - if (!options.ignoreDeclined) - abortError = new Error( - "Aborted because of declined dependency: " + - result.moduleId + - " in " + - result.parentId + - chainInfo - ); - break; - case "unaccepted": - if (options.onUnaccepted) options.onUnaccepted(result); - if (!options.ignoreUnaccepted) - abortError = new Error( - "Aborted because " + moduleId + " is not accepted" + chainInfo - ); - break; - case "accepted": - if (options.onAccepted) options.onAccepted(result); - doApply = true; - break; - case "disposed": - if (options.onDisposed) options.onDisposed(result); - doDispose = true; - break; - default: - throw new Error("Unexception type " + result.type); - } - if (abortError) { - return { - error: abortError - }; - } - if (doApply) { - appliedUpdate[moduleId] = newModuleFactory; - addAllToSet(outdatedModules, result.outdatedModules); - for (moduleId in result.outdatedDependencies) { - if (__webpack_require__.o(result.outdatedDependencies, moduleId)) { - if (!outdatedDependencies[moduleId]) - outdatedDependencies[moduleId] = []; - addAllToSet( - outdatedDependencies[moduleId], - result.outdatedDependencies[moduleId] - ); - } - } - } - if (doDispose) { - addAllToSet(outdatedModules, [result.moduleId]); - appliedUpdate[moduleId] = warnUnexpectedRequire; - } - } - } - currentUpdate = undefined; - - var outdatedSelfAcceptedModules = []; - for (var j = 0; j < outdatedModules.length; j++) { - var outdatedModuleId = outdatedModules[j]; - var module = __webpack_require__.c[outdatedModuleId]; - if ( - module && - (module.hot._selfAccepted || module.hot._main) && - // removed self-accepted modules should not be required - appliedUpdate[outdatedModuleId] !== warnUnexpectedRequire && - // when called invalidate self-accepting is not possible - !module.hot._selfInvalidated - ) { - outdatedSelfAcceptedModules.push({ - module: outdatedModuleId, - require: module.hot._requireSelf, - errorHandler: module.hot._selfAccepted - }); - } - } - self.__HMR_UPDATED_RUNTIME__.javascript.outdatedModules = outdatedModules; - self.__HMR_UPDATED_RUNTIME__.javascript.outdatedDependencies = outdatedDependencies; - - - var moduleOutdatedDependencies; - return { - dispose: function () { - currentUpdateRemovedChunks.forEach(function (chunkId) { - delete installedChunks[chunkId]; - }); - currentUpdateRemovedChunks = undefined; - - var idx; - var queue = outdatedModules.slice(); - while (queue.length > 0) { - var moduleId = queue.pop(); - var module = __webpack_require__.c[moduleId]; - if (!module) continue; - - var data = {}; - - // Call dispose handlers - var disposeHandlers = module.hot._disposeHandlers; - if (disposeHandlers.length > 0) { - self.__HMR_UPDATED_RUNTIME__.javascript.disposedModules.push(moduleId); - } - - for (j = 0; j < disposeHandlers.length; j++) { - disposeHandlers[j].call(null, data); - } - __webpack_require__.hmrD[moduleId] = data; - - module.hot.active = false; - - delete __webpack_require__.c[moduleId]; - - delete outdatedDependencies[moduleId]; - - for (j = 0; j < module.children.length; j++) { - var child = __webpack_require__.c[module.children[j]]; - if (!child) continue; - idx = child.parents.indexOf(moduleId); - if (idx >= 0) { - child.parents.splice(idx, 1); - } - } - } - - var dependency; - for (var outdatedModuleId in outdatedDependencies) { - if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { - module = __webpack_require__.c[outdatedModuleId]; - if (module) { - moduleOutdatedDependencies = outdatedDependencies[outdatedModuleId]; - for (j = 0; j < moduleOutdatedDependencies.length; j++) { - dependency = moduleOutdatedDependencies[j]; - idx = module.children.indexOf(dependency); - if (idx >= 0) module.children.splice(idx, 1); - } - } - } - } - }, - apply: function (reportError) { - // insert new code - for (var updateModuleId in appliedUpdate) { - if (__webpack_require__.o(appliedUpdate, updateModuleId)) { - __webpack_require__.m[updateModuleId] = appliedUpdate[updateModuleId]; - self.__HMR_UPDATED_RUNTIME__.javascript.updatedModules.push(updateModuleId); - - } - } - - // run new runtime modules - for (var i = 0; i < currentUpdateRuntime.length; i++) { - - currentUpdateRuntime[i](new Proxy(__webpack_require__, { - set(target, prop, value, receiver) { - self.__HMR_UPDATED_RUNTIME__.javascript.updatedRuntime.push(`__webpack_require__.${prop}`); - return Reflect.set(target, prop, value, receiver); - } - })); - - } - - // call accept handlers - for (var outdatedModuleId in outdatedDependencies) { - if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { - var module = __webpack_require__.c[outdatedModuleId]; - if (module) { - moduleOutdatedDependencies = outdatedDependencies[outdatedModuleId]; - var callbacks = []; - var errorHandlers = []; - var dependenciesForCallbacks = []; - for (var j = 0; j < moduleOutdatedDependencies.length; j++) { - var dependency = moduleOutdatedDependencies[j]; - var acceptCallback = module.hot._acceptedDependencies[dependency]; - var errorHandler = module.hot._acceptedErrorHandlers[dependency]; - if (acceptCallback) { - if (callbacks.indexOf(acceptCallback) !== -1) continue; - callbacks.push(acceptCallback); - errorHandlers.push(errorHandler); - self.__HMR_UPDATED_RUNTIME__.javascript.acceptedModules.push(dependency); - - dependenciesForCallbacks.push(dependency); - } - } - for (var k = 0; k < callbacks.length; k++) { - try { - callbacks[k].call(null, moduleOutdatedDependencies); - } catch (err) { - if (typeof errorHandlers[k] === "function") { - try { - errorHandlers[k](err, { - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k] - }); - } catch (err2) { - if (options.onErrored) { - options.onErrored({ - type: "accept-error-handler-errored", - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k], - error: err2, - originalError: err - }); - } - if (!options.ignoreErrored) { - reportError(err2); - reportError(err); - } - } - } else { - if (options.onErrored) { - options.onErrored({ - type: "accept-errored", - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k], - error: err - }); - } - if (!options.ignoreErrored) { - reportError(err); - } - } - } - } - } - } - } - - // Load self accepted modules - for (var o = 0; o < outdatedSelfAcceptedModules.length; o++) { - var item = outdatedSelfAcceptedModules[o]; - var moduleId = item.module; - try { - item.require(moduleId); - } catch (err) { - if (typeof item.errorHandler === "function") { - try { - item.errorHandler(err, { - moduleId: moduleId, - module: __webpack_require__.c[moduleId] - }); - } catch (err1) { - if (options.onErrored) { - options.onErrored({ - type: "self-accept-error-handler-errored", - moduleId: moduleId, - error: err1, - originalError: err - }); - } - if (!options.ignoreErrored) { - reportError(err1); - reportError(err); - } - } - } else { - if (options.onErrored) { - options.onErrored({ - type: "self-accept-errored", - moduleId: moduleId, - error: err - }); - } - if (!options.ignoreErrored) { - reportError(err); - } - } - } - } - - return outdatedModules; - } - }; -} -__webpack_require__.hmrI.require = function (moduleId, applyHandlers) { - if (!currentUpdate) { - currentUpdate = {}; - currentUpdateRuntime = []; - currentUpdateRemovedChunks = []; - applyHandlers.push(applyHandler); - } - if (!__webpack_require__.o(currentUpdate, moduleId)) { - currentUpdate[moduleId] = __webpack_require__.m[moduleId]; - } -}; +__webpack_require__.cssHotUpdateList = [["main","main.LAST_HASH.css.hot-update.json"]]; -__webpack_require__.hmrC.require = function ( - chunkIds, - removedChunks, - removedModules, - promises, - applyHandlers, - updatedModulesList -) { - applyHandlers.push(applyHandler); - currentUpdateChunks = {}; - currentUpdateRemovedChunks = removedChunks; - currentUpdate = removedModules.reduce(function (obj, key) { - obj[key] = false; - return obj; - }, {}); - currentUpdateRuntime = []; - chunkIds.forEach(function (chunkId) { - if ( - __webpack_require__.o(installedChunks, chunkId) && - installedChunks[chunkId] !== undefined - ) { - promises.push(loadUpdateChunk(chunkId, updatedModulesList)); - currentUpdateChunks[chunkId] = true; - } else { - currentUpdateChunks[chunkId] = false; - } - }); - if (__webpack_require__.f) { - __webpack_require__.f.requireHmr = function (chunkId, promises) { - if ( - currentUpdateChunks && - __webpack_require__.o(currentUpdateChunks, chunkId) && - !currentUpdateChunks[chunkId] - ) { - promises.push(loadUpdateChunk(chunkId)); - currentUpdateChunks[chunkId] = true; - } - }; - } -}; -__webpack_require__.hmrM = () => { - return Promise.resolve() - .then(() => { - return require("./" + __webpack_require__.hmrF()); - })['catch']((err) => { - if (err.code !== 'MODULE_NOT_FOUND') throw err; - }); -}; - __webpack_require__.cssHotUpdateList = [["main","main.LAST_HASH.css.hot-update.json"]]; - })(); } @@ -593,8 +124,6 @@ Updated Modules: Updated Runtime: - `__webpack_require__.cssHotUpdateList` - `__webpack_require__.h` -- `__webpack_require__.hmrM` -- `__webpack_require__.hmrS_require` #### Callback diff --git a/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/default/__snapshot__/rspack/1.snap.txt b/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/default/__snapshot__/rspack/1.snap.txt index 1f1590a5f3..d27db30ff5 100644 --- a/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/default/__snapshot__/rspack/1.snap.txt +++ b/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/default/__snapshot__/rspack/1.snap.txt @@ -7,7 +7,7 @@ - Bundle: rspack-bundle.js - Manifest: main.LAST_HASH.css.hot-update.json, size: 1098 - Manifest: main.LAST_HASH.hot-update.json, size: 28 -- Update: main.LAST_HASH.hot-update.js, size: 14842 +- Update: main.LAST_HASH.hot-update.js, size: 1455 ## Manifest @@ -36,7 +36,6 @@ #### Changed Runtime Modules - webpack/runtime/get_full_hash -- webpack/runtime/require_chunk_loading #### Changed Content ```js @@ -85,479 +84,11 @@ exports.runtime = function(__webpack_require__) { (() => { __webpack_require__.h = () => ("CURRENT_HASH") })(); -// webpack/runtime/require_chunk_loading +// webpack/runtime/lynx css hot update (() => { -var installedChunks = __webpack_require__.hmrS_require = __webpack_require__.hmrS_require || {"main": 1,}; -function loadUpdateChunk(chunkId, updatedModulesList) { - var update = require("./" + __webpack_require__.hu(chunkId)); - var updatedModules = update.modules; - var runtime = update.runtime; - for (var moduleId in updatedModules) { - if (__webpack_require__.o(updatedModules, moduleId)) { - currentUpdate[moduleId] = updatedModules[moduleId]; - if (updatedModulesList) updatedModulesList.push(moduleId); - } - } - if (runtime) currentUpdateRuntime.push(runtime); -}var currentUpdateChunks; -var currentUpdate; -var currentUpdateRemovedChunks; -var currentUpdateRuntime; -function applyHandler(options) { - if (__webpack_require__.f) delete __webpack_require__.f.requireHmr; - currentUpdateChunks = undefined; - function getAffectedModuleEffects(updateModuleId) { - var outdatedModules = [updateModuleId]; - var outdatedDependencies = {}; - var queue = outdatedModules.map(function (id) { - return { - chain: [id], - id: id - }; - }); - while (queue.length > 0) { - var queueItem = queue.pop(); - var moduleId = queueItem.id; - var chain = queueItem.chain; - var module = __webpack_require__.c[moduleId]; - if ( - !module || - (module.hot._selfAccepted && !module.hot._selfInvalidated) - ) { - continue; - } - if (module.hot._selfDeclined) { - return { - type: "self-declined", - chain: chain, - moduleId: moduleId - }; - } +__webpack_require__.cssHotUpdateList = [["main","main.LAST_HASH.css.hot-update.json"]]; - if (module.hot._main) { - return { - type: "unaccepted", - chain: chain, - moduleId: moduleId - }; - } - - for (var i = 0; i < module.parents.length; i++) { - var parentId = module.parents[i]; - var parent = __webpack_require__.c[parentId]; - if (!parent) { - continue; - } - if (parent.hot._declinedDependencies[moduleId]) { - return { - type: "declined", - chain: chain.concat([parentId]), - moduleId: moduleId, - parentId: parentId - }; - } - if (outdatedModules.indexOf(parentId) !== -1) { - continue; - } - if (parent.hot._acceptedDependencies[moduleId]) { - if (!outdatedDependencies[parentId]) { - outdatedDependencies[parentId] = []; - } - addAllToSet(outdatedDependencies[parentId], [moduleId]); - continue; - } - delete outdatedDependencies[parentId]; - outdatedModules.push(parentId); - queue.push({ - chain: chain.concat([parentId]), - id: parentId - }); - } - } - - return { - type: "accepted", - moduleId: updateModuleId, - outdatedModules: outdatedModules, - outdatedDependencies: outdatedDependencies - }; - } - - function addAllToSet(a, b) { - for (var i = 0; i < b.length; i++) { - var item = b[i]; - if (a.indexOf(item) === -1) a.push(item); - } - } - - var outdatedDependencies = {}; - var outdatedModules = []; - var appliedUpdate = {}; - - var warnUnexpectedRequire = function warnUnexpectedRequire(module) { - console.warn( - "[HMR] unexpected require(" + module.id + ") to disposed module" - ); - }; - - for (var moduleId in currentUpdate) { - if (__webpack_require__.o(currentUpdate, moduleId)) { - var newModuleFactory = currentUpdate[moduleId]; - var result = newModuleFactory ? getAffectedModuleEffects(moduleId) : { - type: "disposed", - moduleId: moduleId - }; - var abortError = false; - var doApply = false; - var doDispose = false; - var chainInfo = ""; - if (result.chain) { - chainInfo = "\nUpdate propagation: " + result.chain.join(" -> "); - } - switch (result.type) { - case "self-declined": - if (options.onDeclined) options.onDeclined(result); - if (!options.ignoreDeclined) - abortError = new Error( - "Aborted because of self decline: " + result.moduleId + chainInfo - ); - break; - case "declined": - if (options.onDeclined) options.onDeclined(result); - if (!options.ignoreDeclined) - abortError = new Error( - "Aborted because of declined dependency: " + - result.moduleId + - " in " + - result.parentId + - chainInfo - ); - break; - case "unaccepted": - if (options.onUnaccepted) options.onUnaccepted(result); - if (!options.ignoreUnaccepted) - abortError = new Error( - "Aborted because " + moduleId + " is not accepted" + chainInfo - ); - break; - case "accepted": - if (options.onAccepted) options.onAccepted(result); - doApply = true; - break; - case "disposed": - if (options.onDisposed) options.onDisposed(result); - doDispose = true; - break; - default: - throw new Error("Unexception type " + result.type); - } - if (abortError) { - return { - error: abortError - }; - } - if (doApply) { - appliedUpdate[moduleId] = newModuleFactory; - addAllToSet(outdatedModules, result.outdatedModules); - for (moduleId in result.outdatedDependencies) { - if (__webpack_require__.o(result.outdatedDependencies, moduleId)) { - if (!outdatedDependencies[moduleId]) - outdatedDependencies[moduleId] = []; - addAllToSet( - outdatedDependencies[moduleId], - result.outdatedDependencies[moduleId] - ); - } - } - } - if (doDispose) { - addAllToSet(outdatedModules, [result.moduleId]); - appliedUpdate[moduleId] = warnUnexpectedRequire; - } - } - } - currentUpdate = undefined; - - var outdatedSelfAcceptedModules = []; - for (var j = 0; j < outdatedModules.length; j++) { - var outdatedModuleId = outdatedModules[j]; - var module = __webpack_require__.c[outdatedModuleId]; - if ( - module && - (module.hot._selfAccepted || module.hot._main) && - // removed self-accepted modules should not be required - appliedUpdate[outdatedModuleId] !== warnUnexpectedRequire && - // when called invalidate self-accepting is not possible - !module.hot._selfInvalidated - ) { - outdatedSelfAcceptedModules.push({ - module: outdatedModuleId, - require: module.hot._requireSelf, - errorHandler: module.hot._selfAccepted - }); - } - } - self.__HMR_UPDATED_RUNTIME__.javascript.outdatedModules = outdatedModules; - self.__HMR_UPDATED_RUNTIME__.javascript.outdatedDependencies = outdatedDependencies; - - - var moduleOutdatedDependencies; - return { - dispose: function () { - currentUpdateRemovedChunks.forEach(function (chunkId) { - delete installedChunks[chunkId]; - }); - currentUpdateRemovedChunks = undefined; - - var idx; - var queue = outdatedModules.slice(); - while (queue.length > 0) { - var moduleId = queue.pop(); - var module = __webpack_require__.c[moduleId]; - if (!module) continue; - - var data = {}; - - // Call dispose handlers - var disposeHandlers = module.hot._disposeHandlers; - if (disposeHandlers.length > 0) { - self.__HMR_UPDATED_RUNTIME__.javascript.disposedModules.push(moduleId); - } - - for (j = 0; j < disposeHandlers.length; j++) { - disposeHandlers[j].call(null, data); - } - __webpack_require__.hmrD[moduleId] = data; - - module.hot.active = false; - - delete __webpack_require__.c[moduleId]; - - delete outdatedDependencies[moduleId]; - - for (j = 0; j < module.children.length; j++) { - var child = __webpack_require__.c[module.children[j]]; - if (!child) continue; - idx = child.parents.indexOf(moduleId); - if (idx >= 0) { - child.parents.splice(idx, 1); - } - } - } - - var dependency; - for (var outdatedModuleId in outdatedDependencies) { - if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { - module = __webpack_require__.c[outdatedModuleId]; - if (module) { - moduleOutdatedDependencies = outdatedDependencies[outdatedModuleId]; - for (j = 0; j < moduleOutdatedDependencies.length; j++) { - dependency = moduleOutdatedDependencies[j]; - idx = module.children.indexOf(dependency); - if (idx >= 0) module.children.splice(idx, 1); - } - } - } - } - }, - apply: function (reportError) { - // insert new code - for (var updateModuleId in appliedUpdate) { - if (__webpack_require__.o(appliedUpdate, updateModuleId)) { - __webpack_require__.m[updateModuleId] = appliedUpdate[updateModuleId]; - self.__HMR_UPDATED_RUNTIME__.javascript.updatedModules.push(updateModuleId); - - } - } - - // run new runtime modules - for (var i = 0; i < currentUpdateRuntime.length; i++) { - - currentUpdateRuntime[i](new Proxy(__webpack_require__, { - set(target, prop, value, receiver) { - self.__HMR_UPDATED_RUNTIME__.javascript.updatedRuntime.push(`__webpack_require__.${prop}`); - return Reflect.set(target, prop, value, receiver); - } - })); - - } - - // call accept handlers - for (var outdatedModuleId in outdatedDependencies) { - if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { - var module = __webpack_require__.c[outdatedModuleId]; - if (module) { - moduleOutdatedDependencies = outdatedDependencies[outdatedModuleId]; - var callbacks = []; - var errorHandlers = []; - var dependenciesForCallbacks = []; - for (var j = 0; j < moduleOutdatedDependencies.length; j++) { - var dependency = moduleOutdatedDependencies[j]; - var acceptCallback = module.hot._acceptedDependencies[dependency]; - var errorHandler = module.hot._acceptedErrorHandlers[dependency]; - if (acceptCallback) { - if (callbacks.indexOf(acceptCallback) !== -1) continue; - callbacks.push(acceptCallback); - errorHandlers.push(errorHandler); - self.__HMR_UPDATED_RUNTIME__.javascript.acceptedModules.push(dependency); - - dependenciesForCallbacks.push(dependency); - } - } - for (var k = 0; k < callbacks.length; k++) { - try { - callbacks[k].call(null, moduleOutdatedDependencies); - } catch (err) { - if (typeof errorHandlers[k] === "function") { - try { - errorHandlers[k](err, { - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k] - }); - } catch (err2) { - if (options.onErrored) { - options.onErrored({ - type: "accept-error-handler-errored", - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k], - error: err2, - originalError: err - }); - } - if (!options.ignoreErrored) { - reportError(err2); - reportError(err); - } - } - } else { - if (options.onErrored) { - options.onErrored({ - type: "accept-errored", - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k], - error: err - }); - } - if (!options.ignoreErrored) { - reportError(err); - } - } - } - } - } - } - } - - // Load self accepted modules - for (var o = 0; o < outdatedSelfAcceptedModules.length; o++) { - var item = outdatedSelfAcceptedModules[o]; - var moduleId = item.module; - try { - item.require(moduleId); - } catch (err) { - if (typeof item.errorHandler === "function") { - try { - item.errorHandler(err, { - moduleId: moduleId, - module: __webpack_require__.c[moduleId] - }); - } catch (err1) { - if (options.onErrored) { - options.onErrored({ - type: "self-accept-error-handler-errored", - moduleId: moduleId, - error: err1, - originalError: err - }); - } - if (!options.ignoreErrored) { - reportError(err1); - reportError(err); - } - } - } else { - if (options.onErrored) { - options.onErrored({ - type: "self-accept-errored", - moduleId: moduleId, - error: err - }); - } - if (!options.ignoreErrored) { - reportError(err); - } - } - } - } - - return outdatedModules; - } - }; -} - -__webpack_require__.hmrI.require = function (moduleId, applyHandlers) { - if (!currentUpdate) { - currentUpdate = {}; - currentUpdateRuntime = []; - currentUpdateRemovedChunks = []; - applyHandlers.push(applyHandler); - } - if (!__webpack_require__.o(currentUpdate, moduleId)) { - currentUpdate[moduleId] = __webpack_require__.m[moduleId]; - } -}; - -__webpack_require__.hmrC.require = function ( - chunkIds, - removedChunks, - removedModules, - promises, - applyHandlers, - updatedModulesList -) { - applyHandlers.push(applyHandler); - currentUpdateChunks = {}; - currentUpdateRemovedChunks = removedChunks; - currentUpdate = removedModules.reduce(function (obj, key) { - obj[key] = false; - return obj; - }, {}); - currentUpdateRuntime = []; - chunkIds.forEach(function (chunkId) { - if ( - __webpack_require__.o(installedChunks, chunkId) && - installedChunks[chunkId] !== undefined - ) { - promises.push(loadUpdateChunk(chunkId, updatedModulesList)); - currentUpdateChunks[chunkId] = true; - } else { - currentUpdateChunks[chunkId] = false; - } - }); - if (__webpack_require__.f) { - __webpack_require__.f.requireHmr = function (chunkId, promises) { - if ( - currentUpdateChunks && - __webpack_require__.o(currentUpdateChunks, chunkId) && - !currentUpdateChunks[chunkId] - ) { - promises.push(loadUpdateChunk(chunkId)); - currentUpdateChunks[chunkId] = true; - } - }; - } -}; -__webpack_require__.hmrM = () => { - return Promise.resolve() - .then(() => { - return require("./" + __webpack_require__.hmrF()); - })['catch']((err) => { - if (err.code !== 'MODULE_NOT_FOUND') throw err; - }); -}; - __webpack_require__.cssHotUpdateList = [["main","main.LAST_HASH.css.hot-update.json"]]; - })(); } diff --git a/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/default/__snapshot__/rspack/2.snap.txt b/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/default/__snapshot__/rspack/2.snap.txt index 18bea5ce52..9e412d69f2 100644 --- a/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/default/__snapshot__/rspack/2.snap.txt +++ b/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/default/__snapshot__/rspack/2.snap.txt @@ -7,7 +7,7 @@ - Bundle: rspack-bundle.js - Manifest: main.LAST_HASH.css.hot-update.json, size: 1098 - Manifest: main.LAST_HASH.hot-update.json, size: 28 -- Update: main.LAST_HASH.hot-update.js, size: 14842 +- Update: main.LAST_HASH.hot-update.js, size: 1455 ## Manifest @@ -36,7 +36,6 @@ #### Changed Runtime Modules - webpack/runtime/get_full_hash -- webpack/runtime/require_chunk_loading #### Changed Content ```js @@ -85,479 +84,11 @@ exports.runtime = function(__webpack_require__) { (() => { __webpack_require__.h = () => ("CURRENT_HASH") })(); -// webpack/runtime/require_chunk_loading +// webpack/runtime/lynx css hot update (() => { -var installedChunks = __webpack_require__.hmrS_require = __webpack_require__.hmrS_require || {"main": 1,}; -function loadUpdateChunk(chunkId, updatedModulesList) { - var update = require("./" + __webpack_require__.hu(chunkId)); - var updatedModules = update.modules; - var runtime = update.runtime; - for (var moduleId in updatedModules) { - if (__webpack_require__.o(updatedModules, moduleId)) { - currentUpdate[moduleId] = updatedModules[moduleId]; - if (updatedModulesList) updatedModulesList.push(moduleId); - } - } - if (runtime) currentUpdateRuntime.push(runtime); -}var currentUpdateChunks; -var currentUpdate; -var currentUpdateRemovedChunks; -var currentUpdateRuntime; -function applyHandler(options) { - if (__webpack_require__.f) delete __webpack_require__.f.requireHmr; - currentUpdateChunks = undefined; - function getAffectedModuleEffects(updateModuleId) { - var outdatedModules = [updateModuleId]; - var outdatedDependencies = {}; - var queue = outdatedModules.map(function (id) { - return { - chain: [id], - id: id - }; - }); - while (queue.length > 0) { - var queueItem = queue.pop(); - var moduleId = queueItem.id; - var chain = queueItem.chain; - var module = __webpack_require__.c[moduleId]; - if ( - !module || - (module.hot._selfAccepted && !module.hot._selfInvalidated) - ) { - continue; - } - - if (module.hot._selfDeclined) { - return { - type: "self-declined", - chain: chain, - moduleId: moduleId - }; - } - - if (module.hot._main) { - return { - type: "unaccepted", - chain: chain, - moduleId: moduleId - }; - } - - for (var i = 0; i < module.parents.length; i++) { - var parentId = module.parents[i]; - var parent = __webpack_require__.c[parentId]; - if (!parent) { - continue; - } - if (parent.hot._declinedDependencies[moduleId]) { - return { - type: "declined", - chain: chain.concat([parentId]), - moduleId: moduleId, - parentId: parentId - }; - } - if (outdatedModules.indexOf(parentId) !== -1) { - continue; - } - if (parent.hot._acceptedDependencies[moduleId]) { - if (!outdatedDependencies[parentId]) { - outdatedDependencies[parentId] = []; - } - addAllToSet(outdatedDependencies[parentId], [moduleId]); - continue; - } - delete outdatedDependencies[parentId]; - outdatedModules.push(parentId); - queue.push({ - chain: chain.concat([parentId]), - id: parentId - }); - } - } - - return { - type: "accepted", - moduleId: updateModuleId, - outdatedModules: outdatedModules, - outdatedDependencies: outdatedDependencies - }; - } - - function addAllToSet(a, b) { - for (var i = 0; i < b.length; i++) { - var item = b[i]; - if (a.indexOf(item) === -1) a.push(item); - } - } - - var outdatedDependencies = {}; - var outdatedModules = []; - var appliedUpdate = {}; - - var warnUnexpectedRequire = function warnUnexpectedRequire(module) { - console.warn( - "[HMR] unexpected require(" + module.id + ") to disposed module" - ); - }; - - for (var moduleId in currentUpdate) { - if (__webpack_require__.o(currentUpdate, moduleId)) { - var newModuleFactory = currentUpdate[moduleId]; - var result = newModuleFactory ? getAffectedModuleEffects(moduleId) : { - type: "disposed", - moduleId: moduleId - }; - var abortError = false; - var doApply = false; - var doDispose = false; - var chainInfo = ""; - if (result.chain) { - chainInfo = "\nUpdate propagation: " + result.chain.join(" -> "); - } - switch (result.type) { - case "self-declined": - if (options.onDeclined) options.onDeclined(result); - if (!options.ignoreDeclined) - abortError = new Error( - "Aborted because of self decline: " + result.moduleId + chainInfo - ); - break; - case "declined": - if (options.onDeclined) options.onDeclined(result); - if (!options.ignoreDeclined) - abortError = new Error( - "Aborted because of declined dependency: " + - result.moduleId + - " in " + - result.parentId + - chainInfo - ); - break; - case "unaccepted": - if (options.onUnaccepted) options.onUnaccepted(result); - if (!options.ignoreUnaccepted) - abortError = new Error( - "Aborted because " + moduleId + " is not accepted" + chainInfo - ); - break; - case "accepted": - if (options.onAccepted) options.onAccepted(result); - doApply = true; - break; - case "disposed": - if (options.onDisposed) options.onDisposed(result); - doDispose = true; - break; - default: - throw new Error("Unexception type " + result.type); - } - if (abortError) { - return { - error: abortError - }; - } - if (doApply) { - appliedUpdate[moduleId] = newModuleFactory; - addAllToSet(outdatedModules, result.outdatedModules); - for (moduleId in result.outdatedDependencies) { - if (__webpack_require__.o(result.outdatedDependencies, moduleId)) { - if (!outdatedDependencies[moduleId]) - outdatedDependencies[moduleId] = []; - addAllToSet( - outdatedDependencies[moduleId], - result.outdatedDependencies[moduleId] - ); - } - } - } - if (doDispose) { - addAllToSet(outdatedModules, [result.moduleId]); - appliedUpdate[moduleId] = warnUnexpectedRequire; - } - } - } - currentUpdate = undefined; - - var outdatedSelfAcceptedModules = []; - for (var j = 0; j < outdatedModules.length; j++) { - var outdatedModuleId = outdatedModules[j]; - var module = __webpack_require__.c[outdatedModuleId]; - if ( - module && - (module.hot._selfAccepted || module.hot._main) && - // removed self-accepted modules should not be required - appliedUpdate[outdatedModuleId] !== warnUnexpectedRequire && - // when called invalidate self-accepting is not possible - !module.hot._selfInvalidated - ) { - outdatedSelfAcceptedModules.push({ - module: outdatedModuleId, - require: module.hot._requireSelf, - errorHandler: module.hot._selfAccepted - }); - } - } - self.__HMR_UPDATED_RUNTIME__.javascript.outdatedModules = outdatedModules; - self.__HMR_UPDATED_RUNTIME__.javascript.outdatedDependencies = outdatedDependencies; - - - var moduleOutdatedDependencies; - return { - dispose: function () { - currentUpdateRemovedChunks.forEach(function (chunkId) { - delete installedChunks[chunkId]; - }); - currentUpdateRemovedChunks = undefined; - - var idx; - var queue = outdatedModules.slice(); - while (queue.length > 0) { - var moduleId = queue.pop(); - var module = __webpack_require__.c[moduleId]; - if (!module) continue; - - var data = {}; - - // Call dispose handlers - var disposeHandlers = module.hot._disposeHandlers; - if (disposeHandlers.length > 0) { - self.__HMR_UPDATED_RUNTIME__.javascript.disposedModules.push(moduleId); - } - - for (j = 0; j < disposeHandlers.length; j++) { - disposeHandlers[j].call(null, data); - } - __webpack_require__.hmrD[moduleId] = data; - - module.hot.active = false; - - delete __webpack_require__.c[moduleId]; - - delete outdatedDependencies[moduleId]; - - for (j = 0; j < module.children.length; j++) { - var child = __webpack_require__.c[module.children[j]]; - if (!child) continue; - idx = child.parents.indexOf(moduleId); - if (idx >= 0) { - child.parents.splice(idx, 1); - } - } - } - - var dependency; - for (var outdatedModuleId in outdatedDependencies) { - if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { - module = __webpack_require__.c[outdatedModuleId]; - if (module) { - moduleOutdatedDependencies = outdatedDependencies[outdatedModuleId]; - for (j = 0; j < moduleOutdatedDependencies.length; j++) { - dependency = moduleOutdatedDependencies[j]; - idx = module.children.indexOf(dependency); - if (idx >= 0) module.children.splice(idx, 1); - } - } - } - } - }, - apply: function (reportError) { - // insert new code - for (var updateModuleId in appliedUpdate) { - if (__webpack_require__.o(appliedUpdate, updateModuleId)) { - __webpack_require__.m[updateModuleId] = appliedUpdate[updateModuleId]; - self.__HMR_UPDATED_RUNTIME__.javascript.updatedModules.push(updateModuleId); - - } - } - - // run new runtime modules - for (var i = 0; i < currentUpdateRuntime.length; i++) { - - currentUpdateRuntime[i](new Proxy(__webpack_require__, { - set(target, prop, value, receiver) { - self.__HMR_UPDATED_RUNTIME__.javascript.updatedRuntime.push(`__webpack_require__.${prop}`); - return Reflect.set(target, prop, value, receiver); - } - })); - - } - - // call accept handlers - for (var outdatedModuleId in outdatedDependencies) { - if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { - var module = __webpack_require__.c[outdatedModuleId]; - if (module) { - moduleOutdatedDependencies = outdatedDependencies[outdatedModuleId]; - var callbacks = []; - var errorHandlers = []; - var dependenciesForCallbacks = []; - for (var j = 0; j < moduleOutdatedDependencies.length; j++) { - var dependency = moduleOutdatedDependencies[j]; - var acceptCallback = module.hot._acceptedDependencies[dependency]; - var errorHandler = module.hot._acceptedErrorHandlers[dependency]; - if (acceptCallback) { - if (callbacks.indexOf(acceptCallback) !== -1) continue; - callbacks.push(acceptCallback); - errorHandlers.push(errorHandler); - self.__HMR_UPDATED_RUNTIME__.javascript.acceptedModules.push(dependency); - - dependenciesForCallbacks.push(dependency); - } - } - for (var k = 0; k < callbacks.length; k++) { - try { - callbacks[k].call(null, moduleOutdatedDependencies); - } catch (err) { - if (typeof errorHandlers[k] === "function") { - try { - errorHandlers[k](err, { - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k] - }); - } catch (err2) { - if (options.onErrored) { - options.onErrored({ - type: "accept-error-handler-errored", - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k], - error: err2, - originalError: err - }); - } - if (!options.ignoreErrored) { - reportError(err2); - reportError(err); - } - } - } else { - if (options.onErrored) { - options.onErrored({ - type: "accept-errored", - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k], - error: err - }); - } - if (!options.ignoreErrored) { - reportError(err); - } - } - } - } - } - } - } - - // Load self accepted modules - for (var o = 0; o < outdatedSelfAcceptedModules.length; o++) { - var item = outdatedSelfAcceptedModules[o]; - var moduleId = item.module; - try { - item.require(moduleId); - } catch (err) { - if (typeof item.errorHandler === "function") { - try { - item.errorHandler(err, { - moduleId: moduleId, - module: __webpack_require__.c[moduleId] - }); - } catch (err1) { - if (options.onErrored) { - options.onErrored({ - type: "self-accept-error-handler-errored", - moduleId: moduleId, - error: err1, - originalError: err - }); - } - if (!options.ignoreErrored) { - reportError(err1); - reportError(err); - } - } - } else { - if (options.onErrored) { - options.onErrored({ - type: "self-accept-errored", - moduleId: moduleId, - error: err - }); - } - if (!options.ignoreErrored) { - reportError(err); - } - } - } - } - - return outdatedModules; - } - }; -} -__webpack_require__.hmrI.require = function (moduleId, applyHandlers) { - if (!currentUpdate) { - currentUpdate = {}; - currentUpdateRuntime = []; - currentUpdateRemovedChunks = []; - applyHandlers.push(applyHandler); - } - if (!__webpack_require__.o(currentUpdate, moduleId)) { - currentUpdate[moduleId] = __webpack_require__.m[moduleId]; - } -}; +__webpack_require__.cssHotUpdateList = [["main","main.LAST_HASH.css.hot-update.json"]]; -__webpack_require__.hmrC.require = function ( - chunkIds, - removedChunks, - removedModules, - promises, - applyHandlers, - updatedModulesList -) { - applyHandlers.push(applyHandler); - currentUpdateChunks = {}; - currentUpdateRemovedChunks = removedChunks; - currentUpdate = removedModules.reduce(function (obj, key) { - obj[key] = false; - return obj; - }, {}); - currentUpdateRuntime = []; - chunkIds.forEach(function (chunkId) { - if ( - __webpack_require__.o(installedChunks, chunkId) && - installedChunks[chunkId] !== undefined - ) { - promises.push(loadUpdateChunk(chunkId, updatedModulesList)); - currentUpdateChunks[chunkId] = true; - } else { - currentUpdateChunks[chunkId] = false; - } - }); - if (__webpack_require__.f) { - __webpack_require__.f.requireHmr = function (chunkId, promises) { - if ( - currentUpdateChunks && - __webpack_require__.o(currentUpdateChunks, chunkId) && - !currentUpdateChunks[chunkId] - ) { - promises.push(loadUpdateChunk(chunkId)); - currentUpdateChunks[chunkId] = true; - } - }; - } -}; -__webpack_require__.hmrM = () => { - return Promise.resolve() - .then(() => { - return require("./" + __webpack_require__.hmrF()); - })['catch']((err) => { - if (err.code !== 'MODULE_NOT_FOUND') throw err; - }); -}; - __webpack_require__.cssHotUpdateList = [["main","main.LAST_HASH.css.hot-update.json"]]; - })(); } @@ -598,8 +129,6 @@ Updated Modules: Updated Runtime: - `__webpack_require__.cssHotUpdateList` - `__webpack_require__.h` -- `__webpack_require__.hmrM` -- `__webpack_require__.hmrS_require` #### Callback diff --git a/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/filename/__snapshot__/rspack/1.snap.txt b/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/filename/__snapshot__/rspack/1.snap.txt index 5e158cc348..693e3f5d3b 100644 --- a/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/filename/__snapshot__/rspack/1.snap.txt +++ b/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/filename/__snapshot__/rspack/1.snap.txt @@ -7,7 +7,7 @@ - Bundle: rspack-bundle.js - Manifest: main.LAST_HASH.hot-update.json, size: 28 - Manifest: main/main.LAST_HASH.css.hot-update.json, size: 1098 -- Update: main.LAST_HASH.hot-update.js, size: 14851 +- Update: main.LAST_HASH.hot-update.js, size: 1464 ## Manifest @@ -36,7 +36,6 @@ #### Changed Runtime Modules - webpack/runtime/get_full_hash -- webpack/runtime/require_chunk_loading #### Changed Content ```js @@ -85,479 +84,11 @@ exports.runtime = function(__webpack_require__) { (() => { __webpack_require__.h = () => ("CURRENT_HASH") })(); -// webpack/runtime/require_chunk_loading +// webpack/runtime/lynx css hot update (() => { -var installedChunks = __webpack_require__.hmrS_require = __webpack_require__.hmrS_require || {"main": 1,}; -function loadUpdateChunk(chunkId, updatedModulesList) { - var update = require("./" + __webpack_require__.hu(chunkId)); - var updatedModules = update.modules; - var runtime = update.runtime; - for (var moduleId in updatedModules) { - if (__webpack_require__.o(updatedModules, moduleId)) { - currentUpdate[moduleId] = updatedModules[moduleId]; - if (updatedModulesList) updatedModulesList.push(moduleId); - } - } - if (runtime) currentUpdateRuntime.push(runtime); -}var currentUpdateChunks; -var currentUpdate; -var currentUpdateRemovedChunks; -var currentUpdateRuntime; -function applyHandler(options) { - if (__webpack_require__.f) delete __webpack_require__.f.requireHmr; - currentUpdateChunks = undefined; - function getAffectedModuleEffects(updateModuleId) { - var outdatedModules = [updateModuleId]; - var outdatedDependencies = {}; - var queue = outdatedModules.map(function (id) { - return { - chain: [id], - id: id - }; - }); - while (queue.length > 0) { - var queueItem = queue.pop(); - var moduleId = queueItem.id; - var chain = queueItem.chain; - var module = __webpack_require__.c[moduleId]; - if ( - !module || - (module.hot._selfAccepted && !module.hot._selfInvalidated) - ) { - continue; - } - if (module.hot._selfDeclined) { - return { - type: "self-declined", - chain: chain, - moduleId: moduleId - }; - } +__webpack_require__.cssHotUpdateList = [["main","main/main.LAST_HASH.css.hot-update.json"]]; - if (module.hot._main) { - return { - type: "unaccepted", - chain: chain, - moduleId: moduleId - }; - } - - for (var i = 0; i < module.parents.length; i++) { - var parentId = module.parents[i]; - var parent = __webpack_require__.c[parentId]; - if (!parent) { - continue; - } - if (parent.hot._declinedDependencies[moduleId]) { - return { - type: "declined", - chain: chain.concat([parentId]), - moduleId: moduleId, - parentId: parentId - }; - } - if (outdatedModules.indexOf(parentId) !== -1) { - continue; - } - if (parent.hot._acceptedDependencies[moduleId]) { - if (!outdatedDependencies[parentId]) { - outdatedDependencies[parentId] = []; - } - addAllToSet(outdatedDependencies[parentId], [moduleId]); - continue; - } - delete outdatedDependencies[parentId]; - outdatedModules.push(parentId); - queue.push({ - chain: chain.concat([parentId]), - id: parentId - }); - } - } - - return { - type: "accepted", - moduleId: updateModuleId, - outdatedModules: outdatedModules, - outdatedDependencies: outdatedDependencies - }; - } - - function addAllToSet(a, b) { - for (var i = 0; i < b.length; i++) { - var item = b[i]; - if (a.indexOf(item) === -1) a.push(item); - } - } - - var outdatedDependencies = {}; - var outdatedModules = []; - var appliedUpdate = {}; - - var warnUnexpectedRequire = function warnUnexpectedRequire(module) { - console.warn( - "[HMR] unexpected require(" + module.id + ") to disposed module" - ); - }; - - for (var moduleId in currentUpdate) { - if (__webpack_require__.o(currentUpdate, moduleId)) { - var newModuleFactory = currentUpdate[moduleId]; - var result = newModuleFactory ? getAffectedModuleEffects(moduleId) : { - type: "disposed", - moduleId: moduleId - }; - var abortError = false; - var doApply = false; - var doDispose = false; - var chainInfo = ""; - if (result.chain) { - chainInfo = "\nUpdate propagation: " + result.chain.join(" -> "); - } - switch (result.type) { - case "self-declined": - if (options.onDeclined) options.onDeclined(result); - if (!options.ignoreDeclined) - abortError = new Error( - "Aborted because of self decline: " + result.moduleId + chainInfo - ); - break; - case "declined": - if (options.onDeclined) options.onDeclined(result); - if (!options.ignoreDeclined) - abortError = new Error( - "Aborted because of declined dependency: " + - result.moduleId + - " in " + - result.parentId + - chainInfo - ); - break; - case "unaccepted": - if (options.onUnaccepted) options.onUnaccepted(result); - if (!options.ignoreUnaccepted) - abortError = new Error( - "Aborted because " + moduleId + " is not accepted" + chainInfo - ); - break; - case "accepted": - if (options.onAccepted) options.onAccepted(result); - doApply = true; - break; - case "disposed": - if (options.onDisposed) options.onDisposed(result); - doDispose = true; - break; - default: - throw new Error("Unexception type " + result.type); - } - if (abortError) { - return { - error: abortError - }; - } - if (doApply) { - appliedUpdate[moduleId] = newModuleFactory; - addAllToSet(outdatedModules, result.outdatedModules); - for (moduleId in result.outdatedDependencies) { - if (__webpack_require__.o(result.outdatedDependencies, moduleId)) { - if (!outdatedDependencies[moduleId]) - outdatedDependencies[moduleId] = []; - addAllToSet( - outdatedDependencies[moduleId], - result.outdatedDependencies[moduleId] - ); - } - } - } - if (doDispose) { - addAllToSet(outdatedModules, [result.moduleId]); - appliedUpdate[moduleId] = warnUnexpectedRequire; - } - } - } - currentUpdate = undefined; - - var outdatedSelfAcceptedModules = []; - for (var j = 0; j < outdatedModules.length; j++) { - var outdatedModuleId = outdatedModules[j]; - var module = __webpack_require__.c[outdatedModuleId]; - if ( - module && - (module.hot._selfAccepted || module.hot._main) && - // removed self-accepted modules should not be required - appliedUpdate[outdatedModuleId] !== warnUnexpectedRequire && - // when called invalidate self-accepting is not possible - !module.hot._selfInvalidated - ) { - outdatedSelfAcceptedModules.push({ - module: outdatedModuleId, - require: module.hot._requireSelf, - errorHandler: module.hot._selfAccepted - }); - } - } - self.__HMR_UPDATED_RUNTIME__.javascript.outdatedModules = outdatedModules; - self.__HMR_UPDATED_RUNTIME__.javascript.outdatedDependencies = outdatedDependencies; - - - var moduleOutdatedDependencies; - return { - dispose: function () { - currentUpdateRemovedChunks.forEach(function (chunkId) { - delete installedChunks[chunkId]; - }); - currentUpdateRemovedChunks = undefined; - - var idx; - var queue = outdatedModules.slice(); - while (queue.length > 0) { - var moduleId = queue.pop(); - var module = __webpack_require__.c[moduleId]; - if (!module) continue; - - var data = {}; - - // Call dispose handlers - var disposeHandlers = module.hot._disposeHandlers; - if (disposeHandlers.length > 0) { - self.__HMR_UPDATED_RUNTIME__.javascript.disposedModules.push(moduleId); - } - - for (j = 0; j < disposeHandlers.length; j++) { - disposeHandlers[j].call(null, data); - } - __webpack_require__.hmrD[moduleId] = data; - - module.hot.active = false; - - delete __webpack_require__.c[moduleId]; - - delete outdatedDependencies[moduleId]; - - for (j = 0; j < module.children.length; j++) { - var child = __webpack_require__.c[module.children[j]]; - if (!child) continue; - idx = child.parents.indexOf(moduleId); - if (idx >= 0) { - child.parents.splice(idx, 1); - } - } - } - - var dependency; - for (var outdatedModuleId in outdatedDependencies) { - if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { - module = __webpack_require__.c[outdatedModuleId]; - if (module) { - moduleOutdatedDependencies = outdatedDependencies[outdatedModuleId]; - for (j = 0; j < moduleOutdatedDependencies.length; j++) { - dependency = moduleOutdatedDependencies[j]; - idx = module.children.indexOf(dependency); - if (idx >= 0) module.children.splice(idx, 1); - } - } - } - } - }, - apply: function (reportError) { - // insert new code - for (var updateModuleId in appliedUpdate) { - if (__webpack_require__.o(appliedUpdate, updateModuleId)) { - __webpack_require__.m[updateModuleId] = appliedUpdate[updateModuleId]; - self.__HMR_UPDATED_RUNTIME__.javascript.updatedModules.push(updateModuleId); - - } - } - - // run new runtime modules - for (var i = 0; i < currentUpdateRuntime.length; i++) { - - currentUpdateRuntime[i](new Proxy(__webpack_require__, { - set(target, prop, value, receiver) { - self.__HMR_UPDATED_RUNTIME__.javascript.updatedRuntime.push(`__webpack_require__.${prop}`); - return Reflect.set(target, prop, value, receiver); - } - })); - - } - - // call accept handlers - for (var outdatedModuleId in outdatedDependencies) { - if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { - var module = __webpack_require__.c[outdatedModuleId]; - if (module) { - moduleOutdatedDependencies = outdatedDependencies[outdatedModuleId]; - var callbacks = []; - var errorHandlers = []; - var dependenciesForCallbacks = []; - for (var j = 0; j < moduleOutdatedDependencies.length; j++) { - var dependency = moduleOutdatedDependencies[j]; - var acceptCallback = module.hot._acceptedDependencies[dependency]; - var errorHandler = module.hot._acceptedErrorHandlers[dependency]; - if (acceptCallback) { - if (callbacks.indexOf(acceptCallback) !== -1) continue; - callbacks.push(acceptCallback); - errorHandlers.push(errorHandler); - self.__HMR_UPDATED_RUNTIME__.javascript.acceptedModules.push(dependency); - - dependenciesForCallbacks.push(dependency); - } - } - for (var k = 0; k < callbacks.length; k++) { - try { - callbacks[k].call(null, moduleOutdatedDependencies); - } catch (err) { - if (typeof errorHandlers[k] === "function") { - try { - errorHandlers[k](err, { - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k] - }); - } catch (err2) { - if (options.onErrored) { - options.onErrored({ - type: "accept-error-handler-errored", - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k], - error: err2, - originalError: err - }); - } - if (!options.ignoreErrored) { - reportError(err2); - reportError(err); - } - } - } else { - if (options.onErrored) { - options.onErrored({ - type: "accept-errored", - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k], - error: err - }); - } - if (!options.ignoreErrored) { - reportError(err); - } - } - } - } - } - } - } - - // Load self accepted modules - for (var o = 0; o < outdatedSelfAcceptedModules.length; o++) { - var item = outdatedSelfAcceptedModules[o]; - var moduleId = item.module; - try { - item.require(moduleId); - } catch (err) { - if (typeof item.errorHandler === "function") { - try { - item.errorHandler(err, { - moduleId: moduleId, - module: __webpack_require__.c[moduleId] - }); - } catch (err1) { - if (options.onErrored) { - options.onErrored({ - type: "self-accept-error-handler-errored", - moduleId: moduleId, - error: err1, - originalError: err - }); - } - if (!options.ignoreErrored) { - reportError(err1); - reportError(err); - } - } - } else { - if (options.onErrored) { - options.onErrored({ - type: "self-accept-errored", - moduleId: moduleId, - error: err - }); - } - if (!options.ignoreErrored) { - reportError(err); - } - } - } - } - - return outdatedModules; - } - }; -} - -__webpack_require__.hmrI.require = function (moduleId, applyHandlers) { - if (!currentUpdate) { - currentUpdate = {}; - currentUpdateRuntime = []; - currentUpdateRemovedChunks = []; - applyHandlers.push(applyHandler); - } - if (!__webpack_require__.o(currentUpdate, moduleId)) { - currentUpdate[moduleId] = __webpack_require__.m[moduleId]; - } -}; - -__webpack_require__.hmrC.require = function ( - chunkIds, - removedChunks, - removedModules, - promises, - applyHandlers, - updatedModulesList -) { - applyHandlers.push(applyHandler); - currentUpdateChunks = {}; - currentUpdateRemovedChunks = removedChunks; - currentUpdate = removedModules.reduce(function (obj, key) { - obj[key] = false; - return obj; - }, {}); - currentUpdateRuntime = []; - chunkIds.forEach(function (chunkId) { - if ( - __webpack_require__.o(installedChunks, chunkId) && - installedChunks[chunkId] !== undefined - ) { - promises.push(loadUpdateChunk(chunkId, updatedModulesList)); - currentUpdateChunks[chunkId] = true; - } else { - currentUpdateChunks[chunkId] = false; - } - }); - if (__webpack_require__.f) { - __webpack_require__.f.requireHmr = function (chunkId, promises) { - if ( - currentUpdateChunks && - __webpack_require__.o(currentUpdateChunks, chunkId) && - !currentUpdateChunks[chunkId] - ) { - promises.push(loadUpdateChunk(chunkId)); - currentUpdateChunks[chunkId] = true; - } - }; - } -}; -__webpack_require__.hmrM = () => { - return Promise.resolve() - .then(() => { - return require("./" + __webpack_require__.hmrF()); - })['catch']((err) => { - if (err.code !== 'MODULE_NOT_FOUND') throw err; - }); -}; - __webpack_require__.cssHotUpdateList = [["main","main/main.LAST_HASH.css.hot-update.json"]]; - })(); } diff --git a/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/filename/__snapshot__/rspack/2.snap.txt b/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/filename/__snapshot__/rspack/2.snap.txt index 32ca3f744f..446269ec4b 100644 --- a/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/filename/__snapshot__/rspack/2.snap.txt +++ b/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/filename/__snapshot__/rspack/2.snap.txt @@ -7,7 +7,7 @@ - Bundle: rspack-bundle.js - Manifest: main.LAST_HASH.hot-update.json, size: 28 - Manifest: main/main.LAST_HASH.css.hot-update.json, size: 1098 -- Update: main.LAST_HASH.hot-update.js, size: 14851 +- Update: main.LAST_HASH.hot-update.js, size: 1464 ## Manifest @@ -36,7 +36,6 @@ #### Changed Runtime Modules - webpack/runtime/get_full_hash -- webpack/runtime/require_chunk_loading #### Changed Content ```js @@ -85,479 +84,11 @@ exports.runtime = function(__webpack_require__) { (() => { __webpack_require__.h = () => ("CURRENT_HASH") })(); -// webpack/runtime/require_chunk_loading +// webpack/runtime/lynx css hot update (() => { -var installedChunks = __webpack_require__.hmrS_require = __webpack_require__.hmrS_require || {"main": 1,}; -function loadUpdateChunk(chunkId, updatedModulesList) { - var update = require("./" + __webpack_require__.hu(chunkId)); - var updatedModules = update.modules; - var runtime = update.runtime; - for (var moduleId in updatedModules) { - if (__webpack_require__.o(updatedModules, moduleId)) { - currentUpdate[moduleId] = updatedModules[moduleId]; - if (updatedModulesList) updatedModulesList.push(moduleId); - } - } - if (runtime) currentUpdateRuntime.push(runtime); -}var currentUpdateChunks; -var currentUpdate; -var currentUpdateRemovedChunks; -var currentUpdateRuntime; -function applyHandler(options) { - if (__webpack_require__.f) delete __webpack_require__.f.requireHmr; - currentUpdateChunks = undefined; - function getAffectedModuleEffects(updateModuleId) { - var outdatedModules = [updateModuleId]; - var outdatedDependencies = {}; - var queue = outdatedModules.map(function (id) { - return { - chain: [id], - id: id - }; - }); - while (queue.length > 0) { - var queueItem = queue.pop(); - var moduleId = queueItem.id; - var chain = queueItem.chain; - var module = __webpack_require__.c[moduleId]; - if ( - !module || - (module.hot._selfAccepted && !module.hot._selfInvalidated) - ) { - continue; - } - - if (module.hot._selfDeclined) { - return { - type: "self-declined", - chain: chain, - moduleId: moduleId - }; - } - - if (module.hot._main) { - return { - type: "unaccepted", - chain: chain, - moduleId: moduleId - }; - } - - for (var i = 0; i < module.parents.length; i++) { - var parentId = module.parents[i]; - var parent = __webpack_require__.c[parentId]; - if (!parent) { - continue; - } - if (parent.hot._declinedDependencies[moduleId]) { - return { - type: "declined", - chain: chain.concat([parentId]), - moduleId: moduleId, - parentId: parentId - }; - } - if (outdatedModules.indexOf(parentId) !== -1) { - continue; - } - if (parent.hot._acceptedDependencies[moduleId]) { - if (!outdatedDependencies[parentId]) { - outdatedDependencies[parentId] = []; - } - addAllToSet(outdatedDependencies[parentId], [moduleId]); - continue; - } - delete outdatedDependencies[parentId]; - outdatedModules.push(parentId); - queue.push({ - chain: chain.concat([parentId]), - id: parentId - }); - } - } - - return { - type: "accepted", - moduleId: updateModuleId, - outdatedModules: outdatedModules, - outdatedDependencies: outdatedDependencies - }; - } - - function addAllToSet(a, b) { - for (var i = 0; i < b.length; i++) { - var item = b[i]; - if (a.indexOf(item) === -1) a.push(item); - } - } - - var outdatedDependencies = {}; - var outdatedModules = []; - var appliedUpdate = {}; - - var warnUnexpectedRequire = function warnUnexpectedRequire(module) { - console.warn( - "[HMR] unexpected require(" + module.id + ") to disposed module" - ); - }; - - for (var moduleId in currentUpdate) { - if (__webpack_require__.o(currentUpdate, moduleId)) { - var newModuleFactory = currentUpdate[moduleId]; - var result = newModuleFactory ? getAffectedModuleEffects(moduleId) : { - type: "disposed", - moduleId: moduleId - }; - var abortError = false; - var doApply = false; - var doDispose = false; - var chainInfo = ""; - if (result.chain) { - chainInfo = "\nUpdate propagation: " + result.chain.join(" -> "); - } - switch (result.type) { - case "self-declined": - if (options.onDeclined) options.onDeclined(result); - if (!options.ignoreDeclined) - abortError = new Error( - "Aborted because of self decline: " + result.moduleId + chainInfo - ); - break; - case "declined": - if (options.onDeclined) options.onDeclined(result); - if (!options.ignoreDeclined) - abortError = new Error( - "Aborted because of declined dependency: " + - result.moduleId + - " in " + - result.parentId + - chainInfo - ); - break; - case "unaccepted": - if (options.onUnaccepted) options.onUnaccepted(result); - if (!options.ignoreUnaccepted) - abortError = new Error( - "Aborted because " + moduleId + " is not accepted" + chainInfo - ); - break; - case "accepted": - if (options.onAccepted) options.onAccepted(result); - doApply = true; - break; - case "disposed": - if (options.onDisposed) options.onDisposed(result); - doDispose = true; - break; - default: - throw new Error("Unexception type " + result.type); - } - if (abortError) { - return { - error: abortError - }; - } - if (doApply) { - appliedUpdate[moduleId] = newModuleFactory; - addAllToSet(outdatedModules, result.outdatedModules); - for (moduleId in result.outdatedDependencies) { - if (__webpack_require__.o(result.outdatedDependencies, moduleId)) { - if (!outdatedDependencies[moduleId]) - outdatedDependencies[moduleId] = []; - addAllToSet( - outdatedDependencies[moduleId], - result.outdatedDependencies[moduleId] - ); - } - } - } - if (doDispose) { - addAllToSet(outdatedModules, [result.moduleId]); - appliedUpdate[moduleId] = warnUnexpectedRequire; - } - } - } - currentUpdate = undefined; - - var outdatedSelfAcceptedModules = []; - for (var j = 0; j < outdatedModules.length; j++) { - var outdatedModuleId = outdatedModules[j]; - var module = __webpack_require__.c[outdatedModuleId]; - if ( - module && - (module.hot._selfAccepted || module.hot._main) && - // removed self-accepted modules should not be required - appliedUpdate[outdatedModuleId] !== warnUnexpectedRequire && - // when called invalidate self-accepting is not possible - !module.hot._selfInvalidated - ) { - outdatedSelfAcceptedModules.push({ - module: outdatedModuleId, - require: module.hot._requireSelf, - errorHandler: module.hot._selfAccepted - }); - } - } - self.__HMR_UPDATED_RUNTIME__.javascript.outdatedModules = outdatedModules; - self.__HMR_UPDATED_RUNTIME__.javascript.outdatedDependencies = outdatedDependencies; - - - var moduleOutdatedDependencies; - return { - dispose: function () { - currentUpdateRemovedChunks.forEach(function (chunkId) { - delete installedChunks[chunkId]; - }); - currentUpdateRemovedChunks = undefined; - - var idx; - var queue = outdatedModules.slice(); - while (queue.length > 0) { - var moduleId = queue.pop(); - var module = __webpack_require__.c[moduleId]; - if (!module) continue; - - var data = {}; - - // Call dispose handlers - var disposeHandlers = module.hot._disposeHandlers; - if (disposeHandlers.length > 0) { - self.__HMR_UPDATED_RUNTIME__.javascript.disposedModules.push(moduleId); - } - - for (j = 0; j < disposeHandlers.length; j++) { - disposeHandlers[j].call(null, data); - } - __webpack_require__.hmrD[moduleId] = data; - - module.hot.active = false; - - delete __webpack_require__.c[moduleId]; - - delete outdatedDependencies[moduleId]; - - for (j = 0; j < module.children.length; j++) { - var child = __webpack_require__.c[module.children[j]]; - if (!child) continue; - idx = child.parents.indexOf(moduleId); - if (idx >= 0) { - child.parents.splice(idx, 1); - } - } - } - - var dependency; - for (var outdatedModuleId in outdatedDependencies) { - if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { - module = __webpack_require__.c[outdatedModuleId]; - if (module) { - moduleOutdatedDependencies = outdatedDependencies[outdatedModuleId]; - for (j = 0; j < moduleOutdatedDependencies.length; j++) { - dependency = moduleOutdatedDependencies[j]; - idx = module.children.indexOf(dependency); - if (idx >= 0) module.children.splice(idx, 1); - } - } - } - } - }, - apply: function (reportError) { - // insert new code - for (var updateModuleId in appliedUpdate) { - if (__webpack_require__.o(appliedUpdate, updateModuleId)) { - __webpack_require__.m[updateModuleId] = appliedUpdate[updateModuleId]; - self.__HMR_UPDATED_RUNTIME__.javascript.updatedModules.push(updateModuleId); - - } - } - - // run new runtime modules - for (var i = 0; i < currentUpdateRuntime.length; i++) { - - currentUpdateRuntime[i](new Proxy(__webpack_require__, { - set(target, prop, value, receiver) { - self.__HMR_UPDATED_RUNTIME__.javascript.updatedRuntime.push(`__webpack_require__.${prop}`); - return Reflect.set(target, prop, value, receiver); - } - })); - - } - - // call accept handlers - for (var outdatedModuleId in outdatedDependencies) { - if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { - var module = __webpack_require__.c[outdatedModuleId]; - if (module) { - moduleOutdatedDependencies = outdatedDependencies[outdatedModuleId]; - var callbacks = []; - var errorHandlers = []; - var dependenciesForCallbacks = []; - for (var j = 0; j < moduleOutdatedDependencies.length; j++) { - var dependency = moduleOutdatedDependencies[j]; - var acceptCallback = module.hot._acceptedDependencies[dependency]; - var errorHandler = module.hot._acceptedErrorHandlers[dependency]; - if (acceptCallback) { - if (callbacks.indexOf(acceptCallback) !== -1) continue; - callbacks.push(acceptCallback); - errorHandlers.push(errorHandler); - self.__HMR_UPDATED_RUNTIME__.javascript.acceptedModules.push(dependency); - - dependenciesForCallbacks.push(dependency); - } - } - for (var k = 0; k < callbacks.length; k++) { - try { - callbacks[k].call(null, moduleOutdatedDependencies); - } catch (err) { - if (typeof errorHandlers[k] === "function") { - try { - errorHandlers[k](err, { - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k] - }); - } catch (err2) { - if (options.onErrored) { - options.onErrored({ - type: "accept-error-handler-errored", - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k], - error: err2, - originalError: err - }); - } - if (!options.ignoreErrored) { - reportError(err2); - reportError(err); - } - } - } else { - if (options.onErrored) { - options.onErrored({ - type: "accept-errored", - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k], - error: err - }); - } - if (!options.ignoreErrored) { - reportError(err); - } - } - } - } - } - } - } - - // Load self accepted modules - for (var o = 0; o < outdatedSelfAcceptedModules.length; o++) { - var item = outdatedSelfAcceptedModules[o]; - var moduleId = item.module; - try { - item.require(moduleId); - } catch (err) { - if (typeof item.errorHandler === "function") { - try { - item.errorHandler(err, { - moduleId: moduleId, - module: __webpack_require__.c[moduleId] - }); - } catch (err1) { - if (options.onErrored) { - options.onErrored({ - type: "self-accept-error-handler-errored", - moduleId: moduleId, - error: err1, - originalError: err - }); - } - if (!options.ignoreErrored) { - reportError(err1); - reportError(err); - } - } - } else { - if (options.onErrored) { - options.onErrored({ - type: "self-accept-errored", - moduleId: moduleId, - error: err - }); - } - if (!options.ignoreErrored) { - reportError(err); - } - } - } - } - - return outdatedModules; - } - }; -} -__webpack_require__.hmrI.require = function (moduleId, applyHandlers) { - if (!currentUpdate) { - currentUpdate = {}; - currentUpdateRuntime = []; - currentUpdateRemovedChunks = []; - applyHandlers.push(applyHandler); - } - if (!__webpack_require__.o(currentUpdate, moduleId)) { - currentUpdate[moduleId] = __webpack_require__.m[moduleId]; - } -}; +__webpack_require__.cssHotUpdateList = [["main","main/main.LAST_HASH.css.hot-update.json"]]; -__webpack_require__.hmrC.require = function ( - chunkIds, - removedChunks, - removedModules, - promises, - applyHandlers, - updatedModulesList -) { - applyHandlers.push(applyHandler); - currentUpdateChunks = {}; - currentUpdateRemovedChunks = removedChunks; - currentUpdate = removedModules.reduce(function (obj, key) { - obj[key] = false; - return obj; - }, {}); - currentUpdateRuntime = []; - chunkIds.forEach(function (chunkId) { - if ( - __webpack_require__.o(installedChunks, chunkId) && - installedChunks[chunkId] !== undefined - ) { - promises.push(loadUpdateChunk(chunkId, updatedModulesList)); - currentUpdateChunks[chunkId] = true; - } else { - currentUpdateChunks[chunkId] = false; - } - }); - if (__webpack_require__.f) { - __webpack_require__.f.requireHmr = function (chunkId, promises) { - if ( - currentUpdateChunks && - __webpack_require__.o(currentUpdateChunks, chunkId) && - !currentUpdateChunks[chunkId] - ) { - promises.push(loadUpdateChunk(chunkId)); - currentUpdateChunks[chunkId] = true; - } - }; - } -}; -__webpack_require__.hmrM = () => { - return Promise.resolve() - .then(() => { - return require("./" + __webpack_require__.hmrF()); - })['catch']((err) => { - if (err.code !== 'MODULE_NOT_FOUND') throw err; - }); -}; - __webpack_require__.cssHotUpdateList = [["main","main/main.LAST_HASH.css.hot-update.json"]]; - })(); } @@ -598,8 +129,6 @@ Updated Modules: Updated Runtime: - `__webpack_require__.cssHotUpdateList` - `__webpack_require__.h` -- `__webpack_require__.hmrM` -- `__webpack_require__.hmrS_require` #### Callback diff --git a/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/nested/__snapshot__/rspack/0.snap.txt b/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/nested/__snapshot__/rspack/0.snap.txt new file mode 100644 index 0000000000..06063644ac --- /dev/null +++ b/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/nested/__snapshot__/rspack/0.snap.txt @@ -0,0 +1,19 @@ +# Case nested - rspack: Step 0 + +## Changed Files + + +## Asset Files +- Bundle: rspack-bundle.js +- Manifest: pages/main/pages/main.css.hot-update.json, size: 1098 + +## Manifest + +### pages/main/pages/main.css.hot-update.json + +```json +{"content":"eyJjb21waWxlck9wdGlvbnMiOnsiZW5hYmxlRmliZXJBcmNoIjp0cnVlLCJ1c2VMZXB1c05HIjp0cnVlLCJidW5kbGVNb2R1bGVNb2RlIjoiUmV0dXJuQnlGdW5jdGlvbiIsImVuYWJsZUNTU1NlbGVjdG9yIjp0cnVlLCJlbmFibGVDU1NJbnZhbGlkYXRpb24iOnRydWUsInRhcmdldFNka1ZlcnNpb24iOiIzLjIifSwic291cmNlQ29udGVudCI6eyJhcHBUeXBlIjoiY2FyZCIsImNvbmZpZyI6eyJsZXB1c1N0cmljdCI6dHJ1ZSwiZW5hYmxlUmVtb3ZlQ1NTU2NvcGUiOmZhbHNlfXXsImNzcyI6eyJjc3NNYXAiOnsiMCI6WXsidHlwZSI6IlN0eWxlUnVsZSIsInN0eWxlIjpbeyJuYW1lIjoiYXsb3IiLCJ2YWx1ZSI6IlwicmVkXCIiLCJrZXlMb2MiOnsibGluZSI6MywiYXsdW1uIjo0Mzl9LCJ2YWxMb2MiOnsibGluZSI6MywiYXsdW1uIjo0NDZ9fVXsInNlbGVjdG9yVGV4dCI6eyJ2YWx1ZSI6IiXsU0NaY0dvNFZTNDg0ajhCIiwibG9jIjp7ImxpbmUiOjMsImNvbHVtbiI6NDMzfXXsInZhcmlhYmxlcyI6e319LHsidHlwZSI6IlN0eWxlUnVsZSIsInN0eWxlIjpbeyJuYW1lIjoiYmFja2dyb3VuZC1jb2xvciIsInZhbHVlIjoiYmxhYXsiLCJrZXlMb2MiOnsibGluZSI6NSwiYXsdW1uIjo0NDl9LCJ2YWxMb2MiOnsibGluZSI6NSwiYXsdW1uIjo0NTZ9fVXsInNlbGVjdG9yVGV4dCI6eyJ2YWx1ZSI6Ii5FYUFHYkM4N0xBME5DSUlSIiwibG9jIjp7ImxpbmUiOjUsImNvbHVtbiI6NDMyfXXsInZhcmlhYmxlcyI6e319XXXsImNzc1NvdXJjZSI6eyIwIjoiL2Nzc0lkLzAuY3NzInXsImNvbnRlbnRNYXAiOnt9fX0=","deps":{"0":[]}} +``` + + +## Update \ No newline at end of file diff --git a/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/nested/__snapshot__/rspack/1.snap.txt b/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/nested/__snapshot__/rspack/1.snap.txt new file mode 100644 index 0000000000..4a571fcf0e --- /dev/null +++ b/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/nested/__snapshot__/rspack/1.snap.txt @@ -0,0 +1,97 @@ +# Case nested - rspack: Step 1 + +## Changed Files +- file.module.css + +## Asset Files +- Bundle: rspack-bundle.js +- Manifest: pages/main.LAST_HASH.hot-update.json, size: 34 +- Manifest: pages/main/pages/main.LAST_HASH.css.hot-update.json, size: 1098 +- Update: pages/main.LAST_HASH.hot-update.js, size: 1394 + +## Manifest + +### pages/main.LAST_HASH.hot-update.json + +```json +{"c":["pages/main"],"r":[],"m":[]} +``` + + + +### pages/main/pages/main.LAST_HASH.css.hot-update.json + +```json +{"content":"eyJjb21waWxlck9wdGlvbnMiOnsiZW5hYmxlRmliZXJBcmNoIjp0cnVlLCJ1c2VMZXB1c05HIjp0cnVlLCJidW5kbGVNb2R1bGVNb2RlIjoiUmV0dXJuQnlGdW5jdGlvbiIsImVuYWJsZUNTU1NlbGVjdG9yIjp0cnVlLCJlbmFibGVDU1NJbnZhbGlkYXRpb24iOnRydWUsInRhcmdldFNka1ZlcnNpb24iOiIzLjIifSwic291cmNlQ29udGVudCI6eyJhcHBUeXBlIjoiY2FyZCIsImNvbmZpZyI6eyJsZXB1c1N0cmljdCI6dHJ1ZSwiZW5hYmxlUmVtb3ZlQ1NTU2NvcGUiOmZhbHNlfXXsImNzcyI6eyJjc3NNYXAiOnsiMCI6WXsidHlwZSI6IlN0eWxlUnVsZSIsInN0eWxlIjpbeyJuYW1lIjoiYXsb3IiLCJ2YWx1ZSI6IlwiYmx1ZVwiIiwia2V5TG9jIjp7ImxpbmUiOjMsImNvbHVtbiI6NDM5fSwidmFsTG9jIjp7ImxpbmUiOjMsImNvbHVtbiI6NDQ3fX1dLCJzZWxlY3RvclRleHQiOnsidmFsdWUiOiIubFNDWmNHbzRWUzQ4NGo4QiIsImxvYyI6eyJsaW5lIjozLCJjb2x1bW4iOjQzM319LCJ2YXJpYWJsZXMiOnt9fSx7InR5cGUiOiJTdHlsZVJ1bGUiLCJzdHlsZSI6WXsibmFtZSI6ImJhY2tncm91bmQtYXsb3IiLCJ2YWx1ZSI6ImJsYWNrIiwia2V5TG9jIjp7ImxpbmUiOjUsImNvbHVtbiI6NDQ5fSwidmFsTG9jIjp7ImxpbmUiOjUsImNvbHVtbiI6NDU2fX1dLCJzZWxlY3RvclRleHQiOnsidmFsdWUiOiIuRWFBR2JDODdMQTBOQ0lJUiIsImxvYyI6eyJsaW5lIjo1LCJjb2x1bW4iOjQzMn19LCJ2YXJpYWJsZXMiOnt9fV19LCJjc3NTb3VyY2UiOnsiMCI6Ii9jc3NJZC8wLmNzcyJ9LCJjb250ZW50TWFwIjp7fX19","deps":{"0":[]}} +``` + + +## Update + + +### pages/main.LAST_HASH.hot-update.js + +#### Changed Modules +- ./file.module.css + +#### Changed Runtime Modules +- webpack/runtime/get_full_hash + +#### Changed Content +```js +"use strict"; +exports.ids = ['pages/main']; +exports.modules = { +"./file.module.css": +/*!*************************!*\ + !*** ./file.module.css ***! + \*************************/ +(function (module, __webpack_exports__, __webpack_require__) { +__webpack_require__.r(__webpack_exports__); +__webpack_require__.d(__webpack_exports__, { + foo: () => (_1) +}); +// extracted by mini-css-extract-plugin +var _1 = "lSCZcGo4VS484j8B"; + + + if (true) { + (function() { + var localsJsonString = "{\"foo\":\"lSCZcGo4VS484j8B\"}"; + var cssReload = __webpack_require__(/*! ../../../../runtime/hotModuleReplacement.cjs */ "../../../../runtime/hotModuleReplacement.cjs")(module.id, {}, ""); + // only invalidate when locals change + if ( + module.hot.data && + module.hot.data.value && + module.hot.data.value !== localsJsonString + ) { + module.hot.invalidate(); + } else { + module.hot.accept(); + } + module.hot.dispose(function(data) { + data.value = localsJsonString; + cssReload(); + }); + })(); + } + +}), + +}; +exports.runtime = function(__webpack_require__) { +// webpack/runtime/get_full_hash +(() => { +__webpack_require__.h = () => ("CURRENT_HASH") +})(); +// webpack/runtime/lynx css hot update +(() => { + +__webpack_require__.cssHotUpdateList = [["pages/main","pages/main/pages/main.LAST_HASH.css.hot-update.json"]]; + +})(); + +} +; +; +``` \ No newline at end of file diff --git a/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/nested/__snapshot__/rspack/2.snap.txt b/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/nested/__snapshot__/rspack/2.snap.txt new file mode 100644 index 0000000000..d6cd7b1c8f --- /dev/null +++ b/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/nested/__snapshot__/rspack/2.snap.txt @@ -0,0 +1,140 @@ +# Case nested - rspack: Step 2 + +## Changed Files +- file.module.css + +## Asset Files +- Bundle: rspack-bundle.js +- Manifest: pages/main.LAST_HASH.hot-update.json, size: 34 +- Manifest: pages/main/pages/main.LAST_HASH.css.hot-update.json, size: 1098 +- Update: pages/main.LAST_HASH.hot-update.js, size: 1394 + +## Manifest + +### pages/main.LAST_HASH.hot-update.json + +```json +{"c":["pages/main"],"r":[],"m":[]} +``` + + + +### pages/main/pages/main.LAST_HASH.css.hot-update.json + +```json +{"content":"eyJjb21waWxlck9wdGlvbnMiOnsiZW5hYmxlRmliZXJBcmNoIjp0cnVlLCJ1c2VMZXB1c05HIjp0cnVlLCJidW5kbGVNb2R1bGVNb2RlIjoiUmV0dXJuQnlGdW5jdGlvbiIsImVuYWJsZUNTU1NlbGVjdG9yIjp0cnVlLCJlbmFibGVDU1NJbnZhbGlkYXRpb24iOnRydWUsInRhcmdldFNka1ZlcnNpb24iOiIzLjIifSwic291cmNlQ29udGVudCI6eyJhcHBUeXBlIjoiY2FyZCIsImNvbmZpZyI6eyJsZXB1c1N0cmljdCI6dHJ1ZSwiZW5hYmxlUmVtb3ZlQ1NTU2NvcGUiOmZhbHNlfXXsImNzcyI6eyJjc3NNYXAiOnsiMCI6WXsidHlwZSI6IlN0eWxlUnVsZSIsInN0eWxlIjpbeyJuYW1lIjoiYXsb3IiLCJ2YWx1ZSI6IlwiYmx1ZVwiIiwia2V5TG9jIjp7ImxpbmUiOjMsImNvbHVtbiI6NDM5fSwidmFsTG9jIjp7ImxpbmUiOjMsImNvbHVtbiI6NDQ3fX1dLCJzZWxlY3RvclRleHQiOnsidmFsdWUiOiIudmprSEs4ZzlnTHk5MWN0RCIsImxvYyI6eyJsaW5lIjozLCJjb2x1bW4iOjQzM319LCJ2YXJpYWJsZXMiOnt9fSx7InR5cGUiOiJTdHlsZVJ1bGUiLCJzdHlsZSI6WXsibmFtZSI6ImJhY2tncm91bmQtYXsb3IiLCJ2YWx1ZSI6ImJsYWNrIiwia2V5TG9jIjp7ImxpbmUiOjUsImNvbHVtbiI6NDQ5fSwidmFsTG9jIjp7ImxpbmUiOjUsImNvbHVtbiI6NDU2fX1dLCJzZWxlY3RvclRleHQiOnsidmFsdWUiOiIuRWFBR2JDODdMQTBOQ0lJUiIsImxvYyI6eyJsaW5lIjo1LCJjb2x1bW4iOjQzMn19LCJ2YXJpYWJsZXMiOnt9fV19LCJjc3NTb3VyY2UiOnsiMCI6Ii9jc3NJZC8wLmNzcyJ9LCJjb250ZW50TWFwIjp7fX19","deps":{"0":[]}} +``` + + +## Update + + +### pages/main.LAST_HASH.hot-update.js + +#### Changed Modules +- ./file.module.css + +#### Changed Runtime Modules +- webpack/runtime/get_full_hash + +#### Changed Content +```js +"use strict"; +exports.ids = ['pages/main']; +exports.modules = { +"./file.module.css": +/*!*************************!*\ + !*** ./file.module.css ***! + \*************************/ +(function (module, __webpack_exports__, __webpack_require__) { +__webpack_require__.r(__webpack_exports__); +__webpack_require__.d(__webpack_exports__, { + bar: () => (_1) +}); +// extracted by mini-css-extract-plugin +var _1 = "vjkHK8g9gLy91ctD"; + + + if (true) { + (function() { + var localsJsonString = "{\"bar\":\"vjkHK8g9gLy91ctD\"}"; + var cssReload = __webpack_require__(/*! ../../../../runtime/hotModuleReplacement.cjs */ "../../../../runtime/hotModuleReplacement.cjs")(module.id, {}, ""); + // only invalidate when locals change + if ( + module.hot.data && + module.hot.data.value && + module.hot.data.value !== localsJsonString + ) { + module.hot.invalidate(); + } else { + module.hot.accept(); + } + module.hot.dispose(function(data) { + data.value = localsJsonString; + cssReload(); + }); + })(); + } + +}), + +}; +exports.runtime = function(__webpack_require__) { +// webpack/runtime/get_full_hash +(() => { +__webpack_require__.h = () => ("CURRENT_HASH") +})(); +// webpack/runtime/lynx css hot update +(() => { + +__webpack_require__.cssHotUpdateList = [["pages/main","pages/main/pages/main.LAST_HASH.css.hot-update.json"]]; + +})(); + +} +; +; +``` + + + + +## Runtime +### Status + +```txt +check => prepare => dispose => apply => idle +``` + + + +### JavaScript + +#### Outdated + +Outdated Modules: +- ./file.module.css + + +Outdated Dependencies: +```json +{} +``` + +#### Updated + +Updated Modules: +- ./file.module.css + +Updated Runtime: +- `__webpack_require__.cssHotUpdateList` +- `__webpack_require__.h` + + +#### Callback + +Accepted Callback: + + +Disposed Callback: +- ./file.module.css \ No newline at end of file diff --git a/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/nested/entry.js b/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/nested/entry.js new file mode 100644 index 0000000000..fddc3223d3 --- /dev/null +++ b/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/nested/entry.js @@ -0,0 +1,12 @@ +/* +// Copyright 2024 The Lynx Authors. All rights reserved. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. +*/ +import * as styles from './file.module.css' + +import './no-changed.css' + +import.meta.webpackHot.accept() + +export default styles diff --git a/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/nested/file.module.css b/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/nested/file.module.css new file mode 100644 index 0000000000..6782197e7f --- /dev/null +++ b/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/nested/file.module.css @@ -0,0 +1,16 @@ +/* +// Copyright 2024 The Lynx Authors. All rights reserved. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. +*/ +.foo { + color: 'red'; +} +--- +.foo { + color: 'blue'; +} +--- +.bar { + color: 'blue'; +} diff --git a/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/nested/index.js b/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/nested/index.js new file mode 100644 index 0000000000..657dc7ee8d --- /dev/null +++ b/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/nested/index.js @@ -0,0 +1,109 @@ +/* +// Copyright 2024 The Lynx Authors. All rights reserved. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. +*/ +/// +/* globals expect require vi NEXT DONE */ + +import fs from 'node:fs' +import path from 'node:path' + +import { update } from '@lynx-js/test-tools/update.js' + +import styles from './entry.js' +import { createStubLynx } from '../../../helper/stubLynx.js' + +const __FlushElementTree = vi.fn() +const replaceStyleSheetByIdWithBase64 = vi.fn() +const lynx = createStubLynx( + vi, + __non_webpack_require__, + replaceStyleSheetByIdWithBase64, +) + +vi.stubGlobal('lynx', lynx) +vi.stubGlobal('__FlushElementTree', __FlushElementTree) + +__non_webpack_require__(HMR_RUNTIME_LEPUS) + +expect.extend({ + toBeBase64EncodedMatching(receive, expected) { + if (typeof receive !== 'string') { + return { + pass: false, + message: () => `expected to be string, got ${typeof receive}`, + } + } + + const decoded = Buffer.from(receive, 'base64').toString('utf-8') + return { + pass: decoded.includes(expected), + message: () => `${receive} does not contains ${expected}`, + } + }, +}) + +it('should generate css.hot-update.json', () => + new Promise((resolve, reject) => { + expect(styles).toHaveProperty('foo') + expect(styles.foo).toStrictEqual(expect.any(String)) + + function done(error) { + if (error) { + reject(error) + } else { + resolve() + } + } + let prevHash = __webpack_hash__ + + NEXT( + update(done, true, async () => { + const { default: styles } = await import('./entry.js') + expect(styles).toHaveProperty('foo') + expect(styles.foo).toStrictEqual(expect.any(String)) + + expect(__webpack_require__.cssHotUpdateList).toContainEqual([ + 'pages/main', + `pages/main/pages/main.${prevHash}.css.hot-update.json`, + ]) + + const jsonPath = path.join(__dirname, 'pages/main', `pages/main.${prevHash}.css.hot-update.json`) + expect(fs.existsSync(jsonPath)).toBeTruthy() + const { content } = __non_webpack_require__(`./pages/main/pages/main.${prevHash}.css.hot-update.json`) + + expect(content).toBeBase64EncodedMatching(styles.foo) + expect(content).toBeBase64EncodedMatching( + '"enableRemoveCSSScope":false', + ) + expect(content).toBeBase64EncodedMatching('blue') + + prevHash = __webpack_hash__ + + NEXT( + update(done, true, async () => { + const { default: styles } = await import('./entry.js') + expect(styles).toHaveProperty('bar') + expect(styles['bar']).toStrictEqual(expect.any(String)) + + expect(__webpack_require__.cssHotUpdateList).toContainEqual([ + 'pages/main', + `pages/main/pages/main.${prevHash}.css.hot-update.json`, + ]) + + const jsonPath = path.join(__dirname, 'pages/main', `pages/main.${prevHash}.css.hot-update.json`) + expect(fs.existsSync(jsonPath)).toBeTruthy() + const { content } = __non_webpack_require__(`./pages/main/pages/main.${prevHash}.css.hot-update.json`) + + expect(content).toBeBase64EncodedMatching(styles.bar) + expect(content).toBeBase64EncodedMatching( + '"enableRemoveCSSScope":false', + ) + expect(content).toBeBase64EncodedMatching('blue') + done() + }), + ) + }), + ) + })) diff --git a/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/nested/no-changed.css b/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/nested/no-changed.css new file mode 100644 index 0000000000..60d47f2164 --- /dev/null +++ b/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/nested/no-changed.css @@ -0,0 +1,8 @@ +/* +// Copyright 2024 The Lynx Authors. All rights reserved. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. +*/ +.no-change { + background-color: black; +} diff --git a/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/nested/rspack.config.js b/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/nested/rspack.config.js new file mode 100644 index 0000000000..24484f0e39 --- /dev/null +++ b/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/nested/rspack.config.js @@ -0,0 +1,59 @@ +/* +// Copyright 2024 The Lynx Authors. All rights reserved. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. +*/ +import rspack from '@rspack/core' +import { CssExtractRspackPlugin } from '../../../../src/index' +import path from 'node:path' + +/** @type {import('webpack').Configuration} */ +export default { + context: __dirname, + entry: { + 'pages/main': './index.js', + }, + output: { + publicPath: './', + }, + module: { + parser: { + javascript: { + importExportsPresence: false, + }, + }, + rules: [ + { + test: /\.css$/, + use: [ + { + loader: CssExtractRspackPlugin.loader, + }, + { + loader: 'css-loader', + options: { + modules: true, + }, + }, + ], + }, + ], + }, + optimization: { + moduleIds: 'named', + }, + experiments: { + css: false, + }, + plugins: [ + new rspack.DefinePlugin({ + HMR_RUNTIME_LEPUS: JSON.stringify( + path.resolve( + __dirname, + '../../../../runtime/hotModuleReplacement.lepus.cjs', + ), + ), + }), + new CssExtractRspackPlugin({ filename: '[name]/[name].css' }), + ], +} diff --git a/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/nested/test.config.cjs b/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/nested/test.config.cjs new file mode 100644 index 0000000000..fc1cccded9 --- /dev/null +++ b/packages/webpack/css-extract-webpack-plugin/test/hotCases/hot-update-json/nested/test.config.cjs @@ -0,0 +1,6 @@ +/** @type {import("@lynx-js/test-tools").TConfigCaseConfig} */ +module.exports = { + bundlePath: [ + 'rspack-bundle.js', + ], +}; diff --git a/packages/webpack/css-extract-webpack-plugin/test/hotCases/modules/basic/__snapshot__/rspack/1.snap.txt b/packages/webpack/css-extract-webpack-plugin/test/hotCases/modules/basic/__snapshot__/rspack/1.snap.txt index 38857f69d1..38c98f7af9 100644 --- a/packages/webpack/css-extract-webpack-plugin/test/hotCases/modules/basic/__snapshot__/rspack/1.snap.txt +++ b/packages/webpack/css-extract-webpack-plugin/test/hotCases/modules/basic/__snapshot__/rspack/1.snap.txt @@ -7,7 +7,7 @@ - Bundle: rspack-bundle.js - Manifest: main.LAST_HASH.css.hot-update.json, size: 1098 - Manifest: main.LAST_HASH.hot-update.json, size: 28 -- Update: main.LAST_HASH.hot-update.js, size: 14802 +- Update: main.LAST_HASH.hot-update.js, size: 1415 ## Manifest @@ -36,7 +36,6 @@ #### Changed Runtime Modules - webpack/runtime/get_full_hash -- webpack/runtime/require_chunk_loading #### Changed Content ```js @@ -85,479 +84,11 @@ exports.runtime = function(__webpack_require__) { (() => { __webpack_require__.h = () => ("CURRENT_HASH") })(); -// webpack/runtime/require_chunk_loading +// webpack/runtime/lynx css hot update (() => { -var installedChunks = __webpack_require__.hmrS_require = __webpack_require__.hmrS_require || {"main": 1,}; -function loadUpdateChunk(chunkId, updatedModulesList) { - var update = require("./" + __webpack_require__.hu(chunkId)); - var updatedModules = update.modules; - var runtime = update.runtime; - for (var moduleId in updatedModules) { - if (__webpack_require__.o(updatedModules, moduleId)) { - currentUpdate[moduleId] = updatedModules[moduleId]; - if (updatedModulesList) updatedModulesList.push(moduleId); - } - } - if (runtime) currentUpdateRuntime.push(runtime); -}var currentUpdateChunks; -var currentUpdate; -var currentUpdateRemovedChunks; -var currentUpdateRuntime; -function applyHandler(options) { - if (__webpack_require__.f) delete __webpack_require__.f.requireHmr; - currentUpdateChunks = undefined; - function getAffectedModuleEffects(updateModuleId) { - var outdatedModules = [updateModuleId]; - var outdatedDependencies = {}; - var queue = outdatedModules.map(function (id) { - return { - chain: [id], - id: id - }; - }); - while (queue.length > 0) { - var queueItem = queue.pop(); - var moduleId = queueItem.id; - var chain = queueItem.chain; - var module = __webpack_require__.c[moduleId]; - if ( - !module || - (module.hot._selfAccepted && !module.hot._selfInvalidated) - ) { - continue; - } - if (module.hot._selfDeclined) { - return { - type: "self-declined", - chain: chain, - moduleId: moduleId - }; - } +__webpack_require__.cssHotUpdateList = [["main","main.LAST_HASH.css.hot-update.json"]]; - if (module.hot._main) { - return { - type: "unaccepted", - chain: chain, - moduleId: moduleId - }; - } - - for (var i = 0; i < module.parents.length; i++) { - var parentId = module.parents[i]; - var parent = __webpack_require__.c[parentId]; - if (!parent) { - continue; - } - if (parent.hot._declinedDependencies[moduleId]) { - return { - type: "declined", - chain: chain.concat([parentId]), - moduleId: moduleId, - parentId: parentId - }; - } - if (outdatedModules.indexOf(parentId) !== -1) { - continue; - } - if (parent.hot._acceptedDependencies[moduleId]) { - if (!outdatedDependencies[parentId]) { - outdatedDependencies[parentId] = []; - } - addAllToSet(outdatedDependencies[parentId], [moduleId]); - continue; - } - delete outdatedDependencies[parentId]; - outdatedModules.push(parentId); - queue.push({ - chain: chain.concat([parentId]), - id: parentId - }); - } - } - - return { - type: "accepted", - moduleId: updateModuleId, - outdatedModules: outdatedModules, - outdatedDependencies: outdatedDependencies - }; - } - - function addAllToSet(a, b) { - for (var i = 0; i < b.length; i++) { - var item = b[i]; - if (a.indexOf(item) === -1) a.push(item); - } - } - - var outdatedDependencies = {}; - var outdatedModules = []; - var appliedUpdate = {}; - - var warnUnexpectedRequire = function warnUnexpectedRequire(module) { - console.warn( - "[HMR] unexpected require(" + module.id + ") to disposed module" - ); - }; - - for (var moduleId in currentUpdate) { - if (__webpack_require__.o(currentUpdate, moduleId)) { - var newModuleFactory = currentUpdate[moduleId]; - var result = newModuleFactory ? getAffectedModuleEffects(moduleId) : { - type: "disposed", - moduleId: moduleId - }; - var abortError = false; - var doApply = false; - var doDispose = false; - var chainInfo = ""; - if (result.chain) { - chainInfo = "\nUpdate propagation: " + result.chain.join(" -> "); - } - switch (result.type) { - case "self-declined": - if (options.onDeclined) options.onDeclined(result); - if (!options.ignoreDeclined) - abortError = new Error( - "Aborted because of self decline: " + result.moduleId + chainInfo - ); - break; - case "declined": - if (options.onDeclined) options.onDeclined(result); - if (!options.ignoreDeclined) - abortError = new Error( - "Aborted because of declined dependency: " + - result.moduleId + - " in " + - result.parentId + - chainInfo - ); - break; - case "unaccepted": - if (options.onUnaccepted) options.onUnaccepted(result); - if (!options.ignoreUnaccepted) - abortError = new Error( - "Aborted because " + moduleId + " is not accepted" + chainInfo - ); - break; - case "accepted": - if (options.onAccepted) options.onAccepted(result); - doApply = true; - break; - case "disposed": - if (options.onDisposed) options.onDisposed(result); - doDispose = true; - break; - default: - throw new Error("Unexception type " + result.type); - } - if (abortError) { - return { - error: abortError - }; - } - if (doApply) { - appliedUpdate[moduleId] = newModuleFactory; - addAllToSet(outdatedModules, result.outdatedModules); - for (moduleId in result.outdatedDependencies) { - if (__webpack_require__.o(result.outdatedDependencies, moduleId)) { - if (!outdatedDependencies[moduleId]) - outdatedDependencies[moduleId] = []; - addAllToSet( - outdatedDependencies[moduleId], - result.outdatedDependencies[moduleId] - ); - } - } - } - if (doDispose) { - addAllToSet(outdatedModules, [result.moduleId]); - appliedUpdate[moduleId] = warnUnexpectedRequire; - } - } - } - currentUpdate = undefined; - - var outdatedSelfAcceptedModules = []; - for (var j = 0; j < outdatedModules.length; j++) { - var outdatedModuleId = outdatedModules[j]; - var module = __webpack_require__.c[outdatedModuleId]; - if ( - module && - (module.hot._selfAccepted || module.hot._main) && - // removed self-accepted modules should not be required - appliedUpdate[outdatedModuleId] !== warnUnexpectedRequire && - // when called invalidate self-accepting is not possible - !module.hot._selfInvalidated - ) { - outdatedSelfAcceptedModules.push({ - module: outdatedModuleId, - require: module.hot._requireSelf, - errorHandler: module.hot._selfAccepted - }); - } - } - self.__HMR_UPDATED_RUNTIME__.javascript.outdatedModules = outdatedModules; - self.__HMR_UPDATED_RUNTIME__.javascript.outdatedDependencies = outdatedDependencies; - - - var moduleOutdatedDependencies; - return { - dispose: function () { - currentUpdateRemovedChunks.forEach(function (chunkId) { - delete installedChunks[chunkId]; - }); - currentUpdateRemovedChunks = undefined; - - var idx; - var queue = outdatedModules.slice(); - while (queue.length > 0) { - var moduleId = queue.pop(); - var module = __webpack_require__.c[moduleId]; - if (!module) continue; - - var data = {}; - - // Call dispose handlers - var disposeHandlers = module.hot._disposeHandlers; - if (disposeHandlers.length > 0) { - self.__HMR_UPDATED_RUNTIME__.javascript.disposedModules.push(moduleId); - } - - for (j = 0; j < disposeHandlers.length; j++) { - disposeHandlers[j].call(null, data); - } - __webpack_require__.hmrD[moduleId] = data; - - module.hot.active = false; - - delete __webpack_require__.c[moduleId]; - - delete outdatedDependencies[moduleId]; - - for (j = 0; j < module.children.length; j++) { - var child = __webpack_require__.c[module.children[j]]; - if (!child) continue; - idx = child.parents.indexOf(moduleId); - if (idx >= 0) { - child.parents.splice(idx, 1); - } - } - } - - var dependency; - for (var outdatedModuleId in outdatedDependencies) { - if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { - module = __webpack_require__.c[outdatedModuleId]; - if (module) { - moduleOutdatedDependencies = outdatedDependencies[outdatedModuleId]; - for (j = 0; j < moduleOutdatedDependencies.length; j++) { - dependency = moduleOutdatedDependencies[j]; - idx = module.children.indexOf(dependency); - if (idx >= 0) module.children.splice(idx, 1); - } - } - } - } - }, - apply: function (reportError) { - // insert new code - for (var updateModuleId in appliedUpdate) { - if (__webpack_require__.o(appliedUpdate, updateModuleId)) { - __webpack_require__.m[updateModuleId] = appliedUpdate[updateModuleId]; - self.__HMR_UPDATED_RUNTIME__.javascript.updatedModules.push(updateModuleId); - - } - } - - // run new runtime modules - for (var i = 0; i < currentUpdateRuntime.length; i++) { - - currentUpdateRuntime[i](new Proxy(__webpack_require__, { - set(target, prop, value, receiver) { - self.__HMR_UPDATED_RUNTIME__.javascript.updatedRuntime.push(`__webpack_require__.${prop}`); - return Reflect.set(target, prop, value, receiver); - } - })); - - } - - // call accept handlers - for (var outdatedModuleId in outdatedDependencies) { - if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { - var module = __webpack_require__.c[outdatedModuleId]; - if (module) { - moduleOutdatedDependencies = outdatedDependencies[outdatedModuleId]; - var callbacks = []; - var errorHandlers = []; - var dependenciesForCallbacks = []; - for (var j = 0; j < moduleOutdatedDependencies.length; j++) { - var dependency = moduleOutdatedDependencies[j]; - var acceptCallback = module.hot._acceptedDependencies[dependency]; - var errorHandler = module.hot._acceptedErrorHandlers[dependency]; - if (acceptCallback) { - if (callbacks.indexOf(acceptCallback) !== -1) continue; - callbacks.push(acceptCallback); - errorHandlers.push(errorHandler); - self.__HMR_UPDATED_RUNTIME__.javascript.acceptedModules.push(dependency); - - dependenciesForCallbacks.push(dependency); - } - } - for (var k = 0; k < callbacks.length; k++) { - try { - callbacks[k].call(null, moduleOutdatedDependencies); - } catch (err) { - if (typeof errorHandlers[k] === "function") { - try { - errorHandlers[k](err, { - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k] - }); - } catch (err2) { - if (options.onErrored) { - options.onErrored({ - type: "accept-error-handler-errored", - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k], - error: err2, - originalError: err - }); - } - if (!options.ignoreErrored) { - reportError(err2); - reportError(err); - } - } - } else { - if (options.onErrored) { - options.onErrored({ - type: "accept-errored", - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k], - error: err - }); - } - if (!options.ignoreErrored) { - reportError(err); - } - } - } - } - } - } - } - - // Load self accepted modules - for (var o = 0; o < outdatedSelfAcceptedModules.length; o++) { - var item = outdatedSelfAcceptedModules[o]; - var moduleId = item.module; - try { - item.require(moduleId); - } catch (err) { - if (typeof item.errorHandler === "function") { - try { - item.errorHandler(err, { - moduleId: moduleId, - module: __webpack_require__.c[moduleId] - }); - } catch (err1) { - if (options.onErrored) { - options.onErrored({ - type: "self-accept-error-handler-errored", - moduleId: moduleId, - error: err1, - originalError: err - }); - } - if (!options.ignoreErrored) { - reportError(err1); - reportError(err); - } - } - } else { - if (options.onErrored) { - options.onErrored({ - type: "self-accept-errored", - moduleId: moduleId, - error: err - }); - } - if (!options.ignoreErrored) { - reportError(err); - } - } - } - } - - return outdatedModules; - } - }; -} - -__webpack_require__.hmrI.require = function (moduleId, applyHandlers) { - if (!currentUpdate) { - currentUpdate = {}; - currentUpdateRuntime = []; - currentUpdateRemovedChunks = []; - applyHandlers.push(applyHandler); - } - if (!__webpack_require__.o(currentUpdate, moduleId)) { - currentUpdate[moduleId] = __webpack_require__.m[moduleId]; - } -}; - -__webpack_require__.hmrC.require = function ( - chunkIds, - removedChunks, - removedModules, - promises, - applyHandlers, - updatedModulesList -) { - applyHandlers.push(applyHandler); - currentUpdateChunks = {}; - currentUpdateRemovedChunks = removedChunks; - currentUpdate = removedModules.reduce(function (obj, key) { - obj[key] = false; - return obj; - }, {}); - currentUpdateRuntime = []; - chunkIds.forEach(function (chunkId) { - if ( - __webpack_require__.o(installedChunks, chunkId) && - installedChunks[chunkId] !== undefined - ) { - promises.push(loadUpdateChunk(chunkId, updatedModulesList)); - currentUpdateChunks[chunkId] = true; - } else { - currentUpdateChunks[chunkId] = false; - } - }); - if (__webpack_require__.f) { - __webpack_require__.f.requireHmr = function (chunkId, promises) { - if ( - currentUpdateChunks && - __webpack_require__.o(currentUpdateChunks, chunkId) && - !currentUpdateChunks[chunkId] - ) { - promises.push(loadUpdateChunk(chunkId)); - currentUpdateChunks[chunkId] = true; - } - }; - } -}; -__webpack_require__.hmrM = () => { - return Promise.resolve() - .then(() => { - return require("./" + __webpack_require__.hmrF()); - })['catch']((err) => { - if (err.code !== 'MODULE_NOT_FOUND') throw err; - }); -}; - __webpack_require__.cssHotUpdateList = [["main","main.LAST_HASH.css.hot-update.json"]]; - })(); } diff --git a/packages/webpack/css-extract-webpack-plugin/test/hotCases/modules/basic/__snapshot__/rspack/2.snap.txt b/packages/webpack/css-extract-webpack-plugin/test/hotCases/modules/basic/__snapshot__/rspack/2.snap.txt index 74c7e9a26d..1a1ae8580b 100644 --- a/packages/webpack/css-extract-webpack-plugin/test/hotCases/modules/basic/__snapshot__/rspack/2.snap.txt +++ b/packages/webpack/css-extract-webpack-plugin/test/hotCases/modules/basic/__snapshot__/rspack/2.snap.txt @@ -7,7 +7,7 @@ - Bundle: rspack-bundle.js - Manifest: main.LAST_HASH.css.hot-update.json, size: 1098 - Manifest: main.LAST_HASH.hot-update.json, size: 28 -- Update: main.LAST_HASH.hot-update.js, size: 14802 +- Update: main.LAST_HASH.hot-update.js, size: 1415 ## Manifest @@ -36,7 +36,6 @@ #### Changed Runtime Modules - webpack/runtime/get_full_hash -- webpack/runtime/require_chunk_loading #### Changed Content ```js @@ -85,479 +84,11 @@ exports.runtime = function(__webpack_require__) { (() => { __webpack_require__.h = () => ("CURRENT_HASH") })(); -// webpack/runtime/require_chunk_loading +// webpack/runtime/lynx css hot update (() => { -var installedChunks = __webpack_require__.hmrS_require = __webpack_require__.hmrS_require || {"main": 1,}; -function loadUpdateChunk(chunkId, updatedModulesList) { - var update = require("./" + __webpack_require__.hu(chunkId)); - var updatedModules = update.modules; - var runtime = update.runtime; - for (var moduleId in updatedModules) { - if (__webpack_require__.o(updatedModules, moduleId)) { - currentUpdate[moduleId] = updatedModules[moduleId]; - if (updatedModulesList) updatedModulesList.push(moduleId); - } - } - if (runtime) currentUpdateRuntime.push(runtime); -}var currentUpdateChunks; -var currentUpdate; -var currentUpdateRemovedChunks; -var currentUpdateRuntime; -function applyHandler(options) { - if (__webpack_require__.f) delete __webpack_require__.f.requireHmr; - currentUpdateChunks = undefined; - function getAffectedModuleEffects(updateModuleId) { - var outdatedModules = [updateModuleId]; - var outdatedDependencies = {}; - var queue = outdatedModules.map(function (id) { - return { - chain: [id], - id: id - }; - }); - while (queue.length > 0) { - var queueItem = queue.pop(); - var moduleId = queueItem.id; - var chain = queueItem.chain; - var module = __webpack_require__.c[moduleId]; - if ( - !module || - (module.hot._selfAccepted && !module.hot._selfInvalidated) - ) { - continue; - } - - if (module.hot._selfDeclined) { - return { - type: "self-declined", - chain: chain, - moduleId: moduleId - }; - } - - if (module.hot._main) { - return { - type: "unaccepted", - chain: chain, - moduleId: moduleId - }; - } - - for (var i = 0; i < module.parents.length; i++) { - var parentId = module.parents[i]; - var parent = __webpack_require__.c[parentId]; - if (!parent) { - continue; - } - if (parent.hot._declinedDependencies[moduleId]) { - return { - type: "declined", - chain: chain.concat([parentId]), - moduleId: moduleId, - parentId: parentId - }; - } - if (outdatedModules.indexOf(parentId) !== -1) { - continue; - } - if (parent.hot._acceptedDependencies[moduleId]) { - if (!outdatedDependencies[parentId]) { - outdatedDependencies[parentId] = []; - } - addAllToSet(outdatedDependencies[parentId], [moduleId]); - continue; - } - delete outdatedDependencies[parentId]; - outdatedModules.push(parentId); - queue.push({ - chain: chain.concat([parentId]), - id: parentId - }); - } - } - - return { - type: "accepted", - moduleId: updateModuleId, - outdatedModules: outdatedModules, - outdatedDependencies: outdatedDependencies - }; - } - - function addAllToSet(a, b) { - for (var i = 0; i < b.length; i++) { - var item = b[i]; - if (a.indexOf(item) === -1) a.push(item); - } - } - - var outdatedDependencies = {}; - var outdatedModules = []; - var appliedUpdate = {}; - - var warnUnexpectedRequire = function warnUnexpectedRequire(module) { - console.warn( - "[HMR] unexpected require(" + module.id + ") to disposed module" - ); - }; - - for (var moduleId in currentUpdate) { - if (__webpack_require__.o(currentUpdate, moduleId)) { - var newModuleFactory = currentUpdate[moduleId]; - var result = newModuleFactory ? getAffectedModuleEffects(moduleId) : { - type: "disposed", - moduleId: moduleId - }; - var abortError = false; - var doApply = false; - var doDispose = false; - var chainInfo = ""; - if (result.chain) { - chainInfo = "\nUpdate propagation: " + result.chain.join(" -> "); - } - switch (result.type) { - case "self-declined": - if (options.onDeclined) options.onDeclined(result); - if (!options.ignoreDeclined) - abortError = new Error( - "Aborted because of self decline: " + result.moduleId + chainInfo - ); - break; - case "declined": - if (options.onDeclined) options.onDeclined(result); - if (!options.ignoreDeclined) - abortError = new Error( - "Aborted because of declined dependency: " + - result.moduleId + - " in " + - result.parentId + - chainInfo - ); - break; - case "unaccepted": - if (options.onUnaccepted) options.onUnaccepted(result); - if (!options.ignoreUnaccepted) - abortError = new Error( - "Aborted because " + moduleId + " is not accepted" + chainInfo - ); - break; - case "accepted": - if (options.onAccepted) options.onAccepted(result); - doApply = true; - break; - case "disposed": - if (options.onDisposed) options.onDisposed(result); - doDispose = true; - break; - default: - throw new Error("Unexception type " + result.type); - } - if (abortError) { - return { - error: abortError - }; - } - if (doApply) { - appliedUpdate[moduleId] = newModuleFactory; - addAllToSet(outdatedModules, result.outdatedModules); - for (moduleId in result.outdatedDependencies) { - if (__webpack_require__.o(result.outdatedDependencies, moduleId)) { - if (!outdatedDependencies[moduleId]) - outdatedDependencies[moduleId] = []; - addAllToSet( - outdatedDependencies[moduleId], - result.outdatedDependencies[moduleId] - ); - } - } - } - if (doDispose) { - addAllToSet(outdatedModules, [result.moduleId]); - appliedUpdate[moduleId] = warnUnexpectedRequire; - } - } - } - currentUpdate = undefined; - - var outdatedSelfAcceptedModules = []; - for (var j = 0; j < outdatedModules.length; j++) { - var outdatedModuleId = outdatedModules[j]; - var module = __webpack_require__.c[outdatedModuleId]; - if ( - module && - (module.hot._selfAccepted || module.hot._main) && - // removed self-accepted modules should not be required - appliedUpdate[outdatedModuleId] !== warnUnexpectedRequire && - // when called invalidate self-accepting is not possible - !module.hot._selfInvalidated - ) { - outdatedSelfAcceptedModules.push({ - module: outdatedModuleId, - require: module.hot._requireSelf, - errorHandler: module.hot._selfAccepted - }); - } - } - self.__HMR_UPDATED_RUNTIME__.javascript.outdatedModules = outdatedModules; - self.__HMR_UPDATED_RUNTIME__.javascript.outdatedDependencies = outdatedDependencies; - - - var moduleOutdatedDependencies; - return { - dispose: function () { - currentUpdateRemovedChunks.forEach(function (chunkId) { - delete installedChunks[chunkId]; - }); - currentUpdateRemovedChunks = undefined; - - var idx; - var queue = outdatedModules.slice(); - while (queue.length > 0) { - var moduleId = queue.pop(); - var module = __webpack_require__.c[moduleId]; - if (!module) continue; - - var data = {}; - - // Call dispose handlers - var disposeHandlers = module.hot._disposeHandlers; - if (disposeHandlers.length > 0) { - self.__HMR_UPDATED_RUNTIME__.javascript.disposedModules.push(moduleId); - } - - for (j = 0; j < disposeHandlers.length; j++) { - disposeHandlers[j].call(null, data); - } - __webpack_require__.hmrD[moduleId] = data; - - module.hot.active = false; - - delete __webpack_require__.c[moduleId]; - - delete outdatedDependencies[moduleId]; - - for (j = 0; j < module.children.length; j++) { - var child = __webpack_require__.c[module.children[j]]; - if (!child) continue; - idx = child.parents.indexOf(moduleId); - if (idx >= 0) { - child.parents.splice(idx, 1); - } - } - } - - var dependency; - for (var outdatedModuleId in outdatedDependencies) { - if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { - module = __webpack_require__.c[outdatedModuleId]; - if (module) { - moduleOutdatedDependencies = outdatedDependencies[outdatedModuleId]; - for (j = 0; j < moduleOutdatedDependencies.length; j++) { - dependency = moduleOutdatedDependencies[j]; - idx = module.children.indexOf(dependency); - if (idx >= 0) module.children.splice(idx, 1); - } - } - } - } - }, - apply: function (reportError) { - // insert new code - for (var updateModuleId in appliedUpdate) { - if (__webpack_require__.o(appliedUpdate, updateModuleId)) { - __webpack_require__.m[updateModuleId] = appliedUpdate[updateModuleId]; - self.__HMR_UPDATED_RUNTIME__.javascript.updatedModules.push(updateModuleId); - - } - } - - // run new runtime modules - for (var i = 0; i < currentUpdateRuntime.length; i++) { - - currentUpdateRuntime[i](new Proxy(__webpack_require__, { - set(target, prop, value, receiver) { - self.__HMR_UPDATED_RUNTIME__.javascript.updatedRuntime.push(`__webpack_require__.${prop}`); - return Reflect.set(target, prop, value, receiver); - } - })); - - } - - // call accept handlers - for (var outdatedModuleId in outdatedDependencies) { - if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { - var module = __webpack_require__.c[outdatedModuleId]; - if (module) { - moduleOutdatedDependencies = outdatedDependencies[outdatedModuleId]; - var callbacks = []; - var errorHandlers = []; - var dependenciesForCallbacks = []; - for (var j = 0; j < moduleOutdatedDependencies.length; j++) { - var dependency = moduleOutdatedDependencies[j]; - var acceptCallback = module.hot._acceptedDependencies[dependency]; - var errorHandler = module.hot._acceptedErrorHandlers[dependency]; - if (acceptCallback) { - if (callbacks.indexOf(acceptCallback) !== -1) continue; - callbacks.push(acceptCallback); - errorHandlers.push(errorHandler); - self.__HMR_UPDATED_RUNTIME__.javascript.acceptedModules.push(dependency); - - dependenciesForCallbacks.push(dependency); - } - } - for (var k = 0; k < callbacks.length; k++) { - try { - callbacks[k].call(null, moduleOutdatedDependencies); - } catch (err) { - if (typeof errorHandlers[k] === "function") { - try { - errorHandlers[k](err, { - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k] - }); - } catch (err2) { - if (options.onErrored) { - options.onErrored({ - type: "accept-error-handler-errored", - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k], - error: err2, - originalError: err - }); - } - if (!options.ignoreErrored) { - reportError(err2); - reportError(err); - } - } - } else { - if (options.onErrored) { - options.onErrored({ - type: "accept-errored", - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k], - error: err - }); - } - if (!options.ignoreErrored) { - reportError(err); - } - } - } - } - } - } - } - - // Load self accepted modules - for (var o = 0; o < outdatedSelfAcceptedModules.length; o++) { - var item = outdatedSelfAcceptedModules[o]; - var moduleId = item.module; - try { - item.require(moduleId); - } catch (err) { - if (typeof item.errorHandler === "function") { - try { - item.errorHandler(err, { - moduleId: moduleId, - module: __webpack_require__.c[moduleId] - }); - } catch (err1) { - if (options.onErrored) { - options.onErrored({ - type: "self-accept-error-handler-errored", - moduleId: moduleId, - error: err1, - originalError: err - }); - } - if (!options.ignoreErrored) { - reportError(err1); - reportError(err); - } - } - } else { - if (options.onErrored) { - options.onErrored({ - type: "self-accept-errored", - moduleId: moduleId, - error: err - }); - } - if (!options.ignoreErrored) { - reportError(err); - } - } - } - } - - return outdatedModules; - } - }; -} -__webpack_require__.hmrI.require = function (moduleId, applyHandlers) { - if (!currentUpdate) { - currentUpdate = {}; - currentUpdateRuntime = []; - currentUpdateRemovedChunks = []; - applyHandlers.push(applyHandler); - } - if (!__webpack_require__.o(currentUpdate, moduleId)) { - currentUpdate[moduleId] = __webpack_require__.m[moduleId]; - } -}; +__webpack_require__.cssHotUpdateList = [["main","main.LAST_HASH.css.hot-update.json"]]; -__webpack_require__.hmrC.require = function ( - chunkIds, - removedChunks, - removedModules, - promises, - applyHandlers, - updatedModulesList -) { - applyHandlers.push(applyHandler); - currentUpdateChunks = {}; - currentUpdateRemovedChunks = removedChunks; - currentUpdate = removedModules.reduce(function (obj, key) { - obj[key] = false; - return obj; - }, {}); - currentUpdateRuntime = []; - chunkIds.forEach(function (chunkId) { - if ( - __webpack_require__.o(installedChunks, chunkId) && - installedChunks[chunkId] !== undefined - ) { - promises.push(loadUpdateChunk(chunkId, updatedModulesList)); - currentUpdateChunks[chunkId] = true; - } else { - currentUpdateChunks[chunkId] = false; - } - }); - if (__webpack_require__.f) { - __webpack_require__.f.requireHmr = function (chunkId, promises) { - if ( - currentUpdateChunks && - __webpack_require__.o(currentUpdateChunks, chunkId) && - !currentUpdateChunks[chunkId] - ) { - promises.push(loadUpdateChunk(chunkId)); - currentUpdateChunks[chunkId] = true; - } - }; - } -}; -__webpack_require__.hmrM = () => { - return Promise.resolve() - .then(() => { - return require("./" + __webpack_require__.hmrF()); - })['catch']((err) => { - if (err.code !== 'MODULE_NOT_FOUND') throw err; - }); -}; - __webpack_require__.cssHotUpdateList = [["main","main.LAST_HASH.css.hot-update.json"]]; - })(); } @@ -598,8 +129,6 @@ Updated Modules: Updated Runtime: - `__webpack_require__.cssHotUpdateList` - `__webpack_require__.h` -- `__webpack_require__.hmrM` -- `__webpack_require__.hmrS_require` #### Callback diff --git a/packages/webpack/css-extract-webpack-plugin/test/hotCases/modules/export-default/__snapshot__/rspack/1.snap.txt b/packages/webpack/css-extract-webpack-plugin/test/hotCases/modules/export-default/__snapshot__/rspack/1.snap.txt index ee486637cc..2969d805f5 100644 --- a/packages/webpack/css-extract-webpack-plugin/test/hotCases/modules/export-default/__snapshot__/rspack/1.snap.txt +++ b/packages/webpack/css-extract-webpack-plugin/test/hotCases/modules/export-default/__snapshot__/rspack/1.snap.txt @@ -7,7 +7,7 @@ - Bundle: rspack-bundle.js - Manifest: main.LAST_HASH.css.hot-update.json, size: 1090 - Manifest: main.LAST_HASH.hot-update.json, size: 28 -- Update: main.LAST_HASH.hot-update.js, size: 14927 +- Update: main.LAST_HASH.hot-update.js, size: 1540 ## Manifest @@ -36,7 +36,6 @@ #### Changed Runtime Modules - webpack/runtime/get_full_hash -- webpack/runtime/require_chunk_loading #### Changed Content ```js @@ -83,479 +82,11 @@ exports.runtime = function(__webpack_require__) { (() => { __webpack_require__.h = () => ("CURRENT_HASH") })(); -// webpack/runtime/require_chunk_loading +// webpack/runtime/lynx css hot update (() => { -var installedChunks = __webpack_require__.hmrS_require = __webpack_require__.hmrS_require || {"main": 1,}; -function loadUpdateChunk(chunkId, updatedModulesList) { - var update = require("./" + __webpack_require__.hu(chunkId)); - var updatedModules = update.modules; - var runtime = update.runtime; - for (var moduleId in updatedModules) { - if (__webpack_require__.o(updatedModules, moduleId)) { - currentUpdate[moduleId] = updatedModules[moduleId]; - if (updatedModulesList) updatedModulesList.push(moduleId); - } - } - if (runtime) currentUpdateRuntime.push(runtime); -}var currentUpdateChunks; -var currentUpdate; -var currentUpdateRemovedChunks; -var currentUpdateRuntime; -function applyHandler(options) { - if (__webpack_require__.f) delete __webpack_require__.f.requireHmr; - currentUpdateChunks = undefined; - function getAffectedModuleEffects(updateModuleId) { - var outdatedModules = [updateModuleId]; - var outdatedDependencies = {}; - var queue = outdatedModules.map(function (id) { - return { - chain: [id], - id: id - }; - }); - while (queue.length > 0) { - var queueItem = queue.pop(); - var moduleId = queueItem.id; - var chain = queueItem.chain; - var module = __webpack_require__.c[moduleId]; - if ( - !module || - (module.hot._selfAccepted && !module.hot._selfInvalidated) - ) { - continue; - } - if (module.hot._selfDeclined) { - return { - type: "self-declined", - chain: chain, - moduleId: moduleId - }; - } +__webpack_require__.cssHotUpdateList = [["main","main.LAST_HASH.css.hot-update.json"]]; - if (module.hot._main) { - return { - type: "unaccepted", - chain: chain, - moduleId: moduleId - }; - } - - for (var i = 0; i < module.parents.length; i++) { - var parentId = module.parents[i]; - var parent = __webpack_require__.c[parentId]; - if (!parent) { - continue; - } - if (parent.hot._declinedDependencies[moduleId]) { - return { - type: "declined", - chain: chain.concat([parentId]), - moduleId: moduleId, - parentId: parentId - }; - } - if (outdatedModules.indexOf(parentId) !== -1) { - continue; - } - if (parent.hot._acceptedDependencies[moduleId]) { - if (!outdatedDependencies[parentId]) { - outdatedDependencies[parentId] = []; - } - addAllToSet(outdatedDependencies[parentId], [moduleId]); - continue; - } - delete outdatedDependencies[parentId]; - outdatedModules.push(parentId); - queue.push({ - chain: chain.concat([parentId]), - id: parentId - }); - } - } - - return { - type: "accepted", - moduleId: updateModuleId, - outdatedModules: outdatedModules, - outdatedDependencies: outdatedDependencies - }; - } - - function addAllToSet(a, b) { - for (var i = 0; i < b.length; i++) { - var item = b[i]; - if (a.indexOf(item) === -1) a.push(item); - } - } - - var outdatedDependencies = {}; - var outdatedModules = []; - var appliedUpdate = {}; - - var warnUnexpectedRequire = function warnUnexpectedRequire(module) { - console.warn( - "[HMR] unexpected require(" + module.id + ") to disposed module" - ); - }; - - for (var moduleId in currentUpdate) { - if (__webpack_require__.o(currentUpdate, moduleId)) { - var newModuleFactory = currentUpdate[moduleId]; - var result = newModuleFactory ? getAffectedModuleEffects(moduleId) : { - type: "disposed", - moduleId: moduleId - }; - var abortError = false; - var doApply = false; - var doDispose = false; - var chainInfo = ""; - if (result.chain) { - chainInfo = "\nUpdate propagation: " + result.chain.join(" -> "); - } - switch (result.type) { - case "self-declined": - if (options.onDeclined) options.onDeclined(result); - if (!options.ignoreDeclined) - abortError = new Error( - "Aborted because of self decline: " + result.moduleId + chainInfo - ); - break; - case "declined": - if (options.onDeclined) options.onDeclined(result); - if (!options.ignoreDeclined) - abortError = new Error( - "Aborted because of declined dependency: " + - result.moduleId + - " in " + - result.parentId + - chainInfo - ); - break; - case "unaccepted": - if (options.onUnaccepted) options.onUnaccepted(result); - if (!options.ignoreUnaccepted) - abortError = new Error( - "Aborted because " + moduleId + " is not accepted" + chainInfo - ); - break; - case "accepted": - if (options.onAccepted) options.onAccepted(result); - doApply = true; - break; - case "disposed": - if (options.onDisposed) options.onDisposed(result); - doDispose = true; - break; - default: - throw new Error("Unexception type " + result.type); - } - if (abortError) { - return { - error: abortError - }; - } - if (doApply) { - appliedUpdate[moduleId] = newModuleFactory; - addAllToSet(outdatedModules, result.outdatedModules); - for (moduleId in result.outdatedDependencies) { - if (__webpack_require__.o(result.outdatedDependencies, moduleId)) { - if (!outdatedDependencies[moduleId]) - outdatedDependencies[moduleId] = []; - addAllToSet( - outdatedDependencies[moduleId], - result.outdatedDependencies[moduleId] - ); - } - } - } - if (doDispose) { - addAllToSet(outdatedModules, [result.moduleId]); - appliedUpdate[moduleId] = warnUnexpectedRequire; - } - } - } - currentUpdate = undefined; - - var outdatedSelfAcceptedModules = []; - for (var j = 0; j < outdatedModules.length; j++) { - var outdatedModuleId = outdatedModules[j]; - var module = __webpack_require__.c[outdatedModuleId]; - if ( - module && - (module.hot._selfAccepted || module.hot._main) && - // removed self-accepted modules should not be required - appliedUpdate[outdatedModuleId] !== warnUnexpectedRequire && - // when called invalidate self-accepting is not possible - !module.hot._selfInvalidated - ) { - outdatedSelfAcceptedModules.push({ - module: outdatedModuleId, - require: module.hot._requireSelf, - errorHandler: module.hot._selfAccepted - }); - } - } - self.__HMR_UPDATED_RUNTIME__.javascript.outdatedModules = outdatedModules; - self.__HMR_UPDATED_RUNTIME__.javascript.outdatedDependencies = outdatedDependencies; - - - var moduleOutdatedDependencies; - return { - dispose: function () { - currentUpdateRemovedChunks.forEach(function (chunkId) { - delete installedChunks[chunkId]; - }); - currentUpdateRemovedChunks = undefined; - - var idx; - var queue = outdatedModules.slice(); - while (queue.length > 0) { - var moduleId = queue.pop(); - var module = __webpack_require__.c[moduleId]; - if (!module) continue; - - var data = {}; - - // Call dispose handlers - var disposeHandlers = module.hot._disposeHandlers; - if (disposeHandlers.length > 0) { - self.__HMR_UPDATED_RUNTIME__.javascript.disposedModules.push(moduleId); - } - - for (j = 0; j < disposeHandlers.length; j++) { - disposeHandlers[j].call(null, data); - } - __webpack_require__.hmrD[moduleId] = data; - - module.hot.active = false; - - delete __webpack_require__.c[moduleId]; - - delete outdatedDependencies[moduleId]; - - for (j = 0; j < module.children.length; j++) { - var child = __webpack_require__.c[module.children[j]]; - if (!child) continue; - idx = child.parents.indexOf(moduleId); - if (idx >= 0) { - child.parents.splice(idx, 1); - } - } - } - - var dependency; - for (var outdatedModuleId in outdatedDependencies) { - if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { - module = __webpack_require__.c[outdatedModuleId]; - if (module) { - moduleOutdatedDependencies = outdatedDependencies[outdatedModuleId]; - for (j = 0; j < moduleOutdatedDependencies.length; j++) { - dependency = moduleOutdatedDependencies[j]; - idx = module.children.indexOf(dependency); - if (idx >= 0) module.children.splice(idx, 1); - } - } - } - } - }, - apply: function (reportError) { - // insert new code - for (var updateModuleId in appliedUpdate) { - if (__webpack_require__.o(appliedUpdate, updateModuleId)) { - __webpack_require__.m[updateModuleId] = appliedUpdate[updateModuleId]; - self.__HMR_UPDATED_RUNTIME__.javascript.updatedModules.push(updateModuleId); - - } - } - - // run new runtime modules - for (var i = 0; i < currentUpdateRuntime.length; i++) { - - currentUpdateRuntime[i](new Proxy(__webpack_require__, { - set(target, prop, value, receiver) { - self.__HMR_UPDATED_RUNTIME__.javascript.updatedRuntime.push(`__webpack_require__.${prop}`); - return Reflect.set(target, prop, value, receiver); - } - })); - - } - - // call accept handlers - for (var outdatedModuleId in outdatedDependencies) { - if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { - var module = __webpack_require__.c[outdatedModuleId]; - if (module) { - moduleOutdatedDependencies = outdatedDependencies[outdatedModuleId]; - var callbacks = []; - var errorHandlers = []; - var dependenciesForCallbacks = []; - for (var j = 0; j < moduleOutdatedDependencies.length; j++) { - var dependency = moduleOutdatedDependencies[j]; - var acceptCallback = module.hot._acceptedDependencies[dependency]; - var errorHandler = module.hot._acceptedErrorHandlers[dependency]; - if (acceptCallback) { - if (callbacks.indexOf(acceptCallback) !== -1) continue; - callbacks.push(acceptCallback); - errorHandlers.push(errorHandler); - self.__HMR_UPDATED_RUNTIME__.javascript.acceptedModules.push(dependency); - - dependenciesForCallbacks.push(dependency); - } - } - for (var k = 0; k < callbacks.length; k++) { - try { - callbacks[k].call(null, moduleOutdatedDependencies); - } catch (err) { - if (typeof errorHandlers[k] === "function") { - try { - errorHandlers[k](err, { - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k] - }); - } catch (err2) { - if (options.onErrored) { - options.onErrored({ - type: "accept-error-handler-errored", - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k], - error: err2, - originalError: err - }); - } - if (!options.ignoreErrored) { - reportError(err2); - reportError(err); - } - } - } else { - if (options.onErrored) { - options.onErrored({ - type: "accept-errored", - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k], - error: err - }); - } - if (!options.ignoreErrored) { - reportError(err); - } - } - } - } - } - } - } - - // Load self accepted modules - for (var o = 0; o < outdatedSelfAcceptedModules.length; o++) { - var item = outdatedSelfAcceptedModules[o]; - var moduleId = item.module; - try { - item.require(moduleId); - } catch (err) { - if (typeof item.errorHandler === "function") { - try { - item.errorHandler(err, { - moduleId: moduleId, - module: __webpack_require__.c[moduleId] - }); - } catch (err1) { - if (options.onErrored) { - options.onErrored({ - type: "self-accept-error-handler-errored", - moduleId: moduleId, - error: err1, - originalError: err - }); - } - if (!options.ignoreErrored) { - reportError(err1); - reportError(err); - } - } - } else { - if (options.onErrored) { - options.onErrored({ - type: "self-accept-errored", - moduleId: moduleId, - error: err - }); - } - if (!options.ignoreErrored) { - reportError(err); - } - } - } - } - - return outdatedModules; - } - }; -} - -__webpack_require__.hmrI.require = function (moduleId, applyHandlers) { - if (!currentUpdate) { - currentUpdate = {}; - currentUpdateRuntime = []; - currentUpdateRemovedChunks = []; - applyHandlers.push(applyHandler); - } - if (!__webpack_require__.o(currentUpdate, moduleId)) { - currentUpdate[moduleId] = __webpack_require__.m[moduleId]; - } -}; - -__webpack_require__.hmrC.require = function ( - chunkIds, - removedChunks, - removedModules, - promises, - applyHandlers, - updatedModulesList -) { - applyHandlers.push(applyHandler); - currentUpdateChunks = {}; - currentUpdateRemovedChunks = removedChunks; - currentUpdate = removedModules.reduce(function (obj, key) { - obj[key] = false; - return obj; - }, {}); - currentUpdateRuntime = []; - chunkIds.forEach(function (chunkId) { - if ( - __webpack_require__.o(installedChunks, chunkId) && - installedChunks[chunkId] !== undefined - ) { - promises.push(loadUpdateChunk(chunkId, updatedModulesList)); - currentUpdateChunks[chunkId] = true; - } else { - currentUpdateChunks[chunkId] = false; - } - }); - if (__webpack_require__.f) { - __webpack_require__.f.requireHmr = function (chunkId, promises) { - if ( - currentUpdateChunks && - __webpack_require__.o(currentUpdateChunks, chunkId) && - !currentUpdateChunks[chunkId] - ) { - promises.push(loadUpdateChunk(chunkId)); - currentUpdateChunks[chunkId] = true; - } - }; - } -}; -__webpack_require__.hmrM = () => { - return Promise.resolve() - .then(() => { - return require("./" + __webpack_require__.hmrF()); - })['catch']((err) => { - if (err.code !== 'MODULE_NOT_FOUND') throw err; - }); -}; - __webpack_require__.cssHotUpdateList = [["main","main.LAST_HASH.css.hot-update.json"]]; - })(); } diff --git a/packages/webpack/css-extract-webpack-plugin/test/hotCases/modules/export-default/__snapshot__/rspack/2.snap.txt b/packages/webpack/css-extract-webpack-plugin/test/hotCases/modules/export-default/__snapshot__/rspack/2.snap.txt index a6be98df74..9d34d601ac 100644 --- a/packages/webpack/css-extract-webpack-plugin/test/hotCases/modules/export-default/__snapshot__/rspack/2.snap.txt +++ b/packages/webpack/css-extract-webpack-plugin/test/hotCases/modules/export-default/__snapshot__/rspack/2.snap.txt @@ -7,7 +7,7 @@ - Bundle: rspack-bundle.js - Manifest: main.LAST_HASH.css.hot-update.json, size: 1090 - Manifest: main.LAST_HASH.hot-update.json, size: 28 -- Update: main.LAST_HASH.hot-update.js, size: 14927 +- Update: main.LAST_HASH.hot-update.js, size: 1540 ## Manifest @@ -36,7 +36,6 @@ #### Changed Runtime Modules - webpack/runtime/get_full_hash -- webpack/runtime/require_chunk_loading #### Changed Content ```js @@ -83,479 +82,11 @@ exports.runtime = function(__webpack_require__) { (() => { __webpack_require__.h = () => ("CURRENT_HASH") })(); -// webpack/runtime/require_chunk_loading +// webpack/runtime/lynx css hot update (() => { -var installedChunks = __webpack_require__.hmrS_require = __webpack_require__.hmrS_require || {"main": 1,}; -function loadUpdateChunk(chunkId, updatedModulesList) { - var update = require("./" + __webpack_require__.hu(chunkId)); - var updatedModules = update.modules; - var runtime = update.runtime; - for (var moduleId in updatedModules) { - if (__webpack_require__.o(updatedModules, moduleId)) { - currentUpdate[moduleId] = updatedModules[moduleId]; - if (updatedModulesList) updatedModulesList.push(moduleId); - } - } - if (runtime) currentUpdateRuntime.push(runtime); -}var currentUpdateChunks; -var currentUpdate; -var currentUpdateRemovedChunks; -var currentUpdateRuntime; -function applyHandler(options) { - if (__webpack_require__.f) delete __webpack_require__.f.requireHmr; - currentUpdateChunks = undefined; - function getAffectedModuleEffects(updateModuleId) { - var outdatedModules = [updateModuleId]; - var outdatedDependencies = {}; - var queue = outdatedModules.map(function (id) { - return { - chain: [id], - id: id - }; - }); - while (queue.length > 0) { - var queueItem = queue.pop(); - var moduleId = queueItem.id; - var chain = queueItem.chain; - var module = __webpack_require__.c[moduleId]; - if ( - !module || - (module.hot._selfAccepted && !module.hot._selfInvalidated) - ) { - continue; - } - - if (module.hot._selfDeclined) { - return { - type: "self-declined", - chain: chain, - moduleId: moduleId - }; - } - - if (module.hot._main) { - return { - type: "unaccepted", - chain: chain, - moduleId: moduleId - }; - } - - for (var i = 0; i < module.parents.length; i++) { - var parentId = module.parents[i]; - var parent = __webpack_require__.c[parentId]; - if (!parent) { - continue; - } - if (parent.hot._declinedDependencies[moduleId]) { - return { - type: "declined", - chain: chain.concat([parentId]), - moduleId: moduleId, - parentId: parentId - }; - } - if (outdatedModules.indexOf(parentId) !== -1) { - continue; - } - if (parent.hot._acceptedDependencies[moduleId]) { - if (!outdatedDependencies[parentId]) { - outdatedDependencies[parentId] = []; - } - addAllToSet(outdatedDependencies[parentId], [moduleId]); - continue; - } - delete outdatedDependencies[parentId]; - outdatedModules.push(parentId); - queue.push({ - chain: chain.concat([parentId]), - id: parentId - }); - } - } - - return { - type: "accepted", - moduleId: updateModuleId, - outdatedModules: outdatedModules, - outdatedDependencies: outdatedDependencies - }; - } - - function addAllToSet(a, b) { - for (var i = 0; i < b.length; i++) { - var item = b[i]; - if (a.indexOf(item) === -1) a.push(item); - } - } - - var outdatedDependencies = {}; - var outdatedModules = []; - var appliedUpdate = {}; - - var warnUnexpectedRequire = function warnUnexpectedRequire(module) { - console.warn( - "[HMR] unexpected require(" + module.id + ") to disposed module" - ); - }; - - for (var moduleId in currentUpdate) { - if (__webpack_require__.o(currentUpdate, moduleId)) { - var newModuleFactory = currentUpdate[moduleId]; - var result = newModuleFactory ? getAffectedModuleEffects(moduleId) : { - type: "disposed", - moduleId: moduleId - }; - var abortError = false; - var doApply = false; - var doDispose = false; - var chainInfo = ""; - if (result.chain) { - chainInfo = "\nUpdate propagation: " + result.chain.join(" -> "); - } - switch (result.type) { - case "self-declined": - if (options.onDeclined) options.onDeclined(result); - if (!options.ignoreDeclined) - abortError = new Error( - "Aborted because of self decline: " + result.moduleId + chainInfo - ); - break; - case "declined": - if (options.onDeclined) options.onDeclined(result); - if (!options.ignoreDeclined) - abortError = new Error( - "Aborted because of declined dependency: " + - result.moduleId + - " in " + - result.parentId + - chainInfo - ); - break; - case "unaccepted": - if (options.onUnaccepted) options.onUnaccepted(result); - if (!options.ignoreUnaccepted) - abortError = new Error( - "Aborted because " + moduleId + " is not accepted" + chainInfo - ); - break; - case "accepted": - if (options.onAccepted) options.onAccepted(result); - doApply = true; - break; - case "disposed": - if (options.onDisposed) options.onDisposed(result); - doDispose = true; - break; - default: - throw new Error("Unexception type " + result.type); - } - if (abortError) { - return { - error: abortError - }; - } - if (doApply) { - appliedUpdate[moduleId] = newModuleFactory; - addAllToSet(outdatedModules, result.outdatedModules); - for (moduleId in result.outdatedDependencies) { - if (__webpack_require__.o(result.outdatedDependencies, moduleId)) { - if (!outdatedDependencies[moduleId]) - outdatedDependencies[moduleId] = []; - addAllToSet( - outdatedDependencies[moduleId], - result.outdatedDependencies[moduleId] - ); - } - } - } - if (doDispose) { - addAllToSet(outdatedModules, [result.moduleId]); - appliedUpdate[moduleId] = warnUnexpectedRequire; - } - } - } - currentUpdate = undefined; - - var outdatedSelfAcceptedModules = []; - for (var j = 0; j < outdatedModules.length; j++) { - var outdatedModuleId = outdatedModules[j]; - var module = __webpack_require__.c[outdatedModuleId]; - if ( - module && - (module.hot._selfAccepted || module.hot._main) && - // removed self-accepted modules should not be required - appliedUpdate[outdatedModuleId] !== warnUnexpectedRequire && - // when called invalidate self-accepting is not possible - !module.hot._selfInvalidated - ) { - outdatedSelfAcceptedModules.push({ - module: outdatedModuleId, - require: module.hot._requireSelf, - errorHandler: module.hot._selfAccepted - }); - } - } - self.__HMR_UPDATED_RUNTIME__.javascript.outdatedModules = outdatedModules; - self.__HMR_UPDATED_RUNTIME__.javascript.outdatedDependencies = outdatedDependencies; - - - var moduleOutdatedDependencies; - return { - dispose: function () { - currentUpdateRemovedChunks.forEach(function (chunkId) { - delete installedChunks[chunkId]; - }); - currentUpdateRemovedChunks = undefined; - - var idx; - var queue = outdatedModules.slice(); - while (queue.length > 0) { - var moduleId = queue.pop(); - var module = __webpack_require__.c[moduleId]; - if (!module) continue; - - var data = {}; - - // Call dispose handlers - var disposeHandlers = module.hot._disposeHandlers; - if (disposeHandlers.length > 0) { - self.__HMR_UPDATED_RUNTIME__.javascript.disposedModules.push(moduleId); - } - - for (j = 0; j < disposeHandlers.length; j++) { - disposeHandlers[j].call(null, data); - } - __webpack_require__.hmrD[moduleId] = data; - - module.hot.active = false; - - delete __webpack_require__.c[moduleId]; - - delete outdatedDependencies[moduleId]; - - for (j = 0; j < module.children.length; j++) { - var child = __webpack_require__.c[module.children[j]]; - if (!child) continue; - idx = child.parents.indexOf(moduleId); - if (idx >= 0) { - child.parents.splice(idx, 1); - } - } - } - - var dependency; - for (var outdatedModuleId in outdatedDependencies) { - if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { - module = __webpack_require__.c[outdatedModuleId]; - if (module) { - moduleOutdatedDependencies = outdatedDependencies[outdatedModuleId]; - for (j = 0; j < moduleOutdatedDependencies.length; j++) { - dependency = moduleOutdatedDependencies[j]; - idx = module.children.indexOf(dependency); - if (idx >= 0) module.children.splice(idx, 1); - } - } - } - } - }, - apply: function (reportError) { - // insert new code - for (var updateModuleId in appliedUpdate) { - if (__webpack_require__.o(appliedUpdate, updateModuleId)) { - __webpack_require__.m[updateModuleId] = appliedUpdate[updateModuleId]; - self.__HMR_UPDATED_RUNTIME__.javascript.updatedModules.push(updateModuleId); - - } - } - - // run new runtime modules - for (var i = 0; i < currentUpdateRuntime.length; i++) { - - currentUpdateRuntime[i](new Proxy(__webpack_require__, { - set(target, prop, value, receiver) { - self.__HMR_UPDATED_RUNTIME__.javascript.updatedRuntime.push(`__webpack_require__.${prop}`); - return Reflect.set(target, prop, value, receiver); - } - })); - - } - - // call accept handlers - for (var outdatedModuleId in outdatedDependencies) { - if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { - var module = __webpack_require__.c[outdatedModuleId]; - if (module) { - moduleOutdatedDependencies = outdatedDependencies[outdatedModuleId]; - var callbacks = []; - var errorHandlers = []; - var dependenciesForCallbacks = []; - for (var j = 0; j < moduleOutdatedDependencies.length; j++) { - var dependency = moduleOutdatedDependencies[j]; - var acceptCallback = module.hot._acceptedDependencies[dependency]; - var errorHandler = module.hot._acceptedErrorHandlers[dependency]; - if (acceptCallback) { - if (callbacks.indexOf(acceptCallback) !== -1) continue; - callbacks.push(acceptCallback); - errorHandlers.push(errorHandler); - self.__HMR_UPDATED_RUNTIME__.javascript.acceptedModules.push(dependency); - - dependenciesForCallbacks.push(dependency); - } - } - for (var k = 0; k < callbacks.length; k++) { - try { - callbacks[k].call(null, moduleOutdatedDependencies); - } catch (err) { - if (typeof errorHandlers[k] === "function") { - try { - errorHandlers[k](err, { - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k] - }); - } catch (err2) { - if (options.onErrored) { - options.onErrored({ - type: "accept-error-handler-errored", - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k], - error: err2, - originalError: err - }); - } - if (!options.ignoreErrored) { - reportError(err2); - reportError(err); - } - } - } else { - if (options.onErrored) { - options.onErrored({ - type: "accept-errored", - moduleId: outdatedModuleId, - dependencyId: dependenciesForCallbacks[k], - error: err - }); - } - if (!options.ignoreErrored) { - reportError(err); - } - } - } - } - } - } - } - - // Load self accepted modules - for (var o = 0; o < outdatedSelfAcceptedModules.length; o++) { - var item = outdatedSelfAcceptedModules[o]; - var moduleId = item.module; - try { - item.require(moduleId); - } catch (err) { - if (typeof item.errorHandler === "function") { - try { - item.errorHandler(err, { - moduleId: moduleId, - module: __webpack_require__.c[moduleId] - }); - } catch (err1) { - if (options.onErrored) { - options.onErrored({ - type: "self-accept-error-handler-errored", - moduleId: moduleId, - error: err1, - originalError: err - }); - } - if (!options.ignoreErrored) { - reportError(err1); - reportError(err); - } - } - } else { - if (options.onErrored) { - options.onErrored({ - type: "self-accept-errored", - moduleId: moduleId, - error: err - }); - } - if (!options.ignoreErrored) { - reportError(err); - } - } - } - } - - return outdatedModules; - } - }; -} -__webpack_require__.hmrI.require = function (moduleId, applyHandlers) { - if (!currentUpdate) { - currentUpdate = {}; - currentUpdateRuntime = []; - currentUpdateRemovedChunks = []; - applyHandlers.push(applyHandler); - } - if (!__webpack_require__.o(currentUpdate, moduleId)) { - currentUpdate[moduleId] = __webpack_require__.m[moduleId]; - } -}; +__webpack_require__.cssHotUpdateList = [["main","main.LAST_HASH.css.hot-update.json"]]; -__webpack_require__.hmrC.require = function ( - chunkIds, - removedChunks, - removedModules, - promises, - applyHandlers, - updatedModulesList -) { - applyHandlers.push(applyHandler); - currentUpdateChunks = {}; - currentUpdateRemovedChunks = removedChunks; - currentUpdate = removedModules.reduce(function (obj, key) { - obj[key] = false; - return obj; - }, {}); - currentUpdateRuntime = []; - chunkIds.forEach(function (chunkId) { - if ( - __webpack_require__.o(installedChunks, chunkId) && - installedChunks[chunkId] !== undefined - ) { - promises.push(loadUpdateChunk(chunkId, updatedModulesList)); - currentUpdateChunks[chunkId] = true; - } else { - currentUpdateChunks[chunkId] = false; - } - }); - if (__webpack_require__.f) { - __webpack_require__.f.requireHmr = function (chunkId, promises) { - if ( - currentUpdateChunks && - __webpack_require__.o(currentUpdateChunks, chunkId) && - !currentUpdateChunks[chunkId] - ) { - promises.push(loadUpdateChunk(chunkId)); - currentUpdateChunks[chunkId] = true; - } - }; - } -}; -__webpack_require__.hmrM = () => { - return Promise.resolve() - .then(() => { - return require("./" + __webpack_require__.hmrF()); - })['catch']((err) => { - if (err.code !== 'MODULE_NOT_FOUND') throw err; - }); -}; - __webpack_require__.cssHotUpdateList = [["main","main.LAST_HASH.css.hot-update.json"]]; - })(); } @@ -596,8 +127,6 @@ Updated Modules: Updated Runtime: - `__webpack_require__.cssHotUpdateList` - `__webpack_require__.h` -- `__webpack_require__.hmrM` -- `__webpack_require__.hmrS_require` #### Callback