summaryrefslogtreecommitdiff
path: root/node_modules/webpack/lib/esm
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2023-11-05 17:16:09 +0800
committerlittleblack111 <littleblack11111@gmail.com>2023-11-05 17:16:09 +0800
commitd1d9f00b1bd660842addf5e6b1d1b64c852a9eea (patch)
tree60fb37ae73a1109d95301de5ec9b61b5726a4b61 /node_modules/webpack/lib/esm
parent7c85166c4cbdd862fc4252007d2df5befcbc2a58 (diff)
added hover prefixer
Diffstat (limited to 'node_modules/webpack/lib/esm')
-rw-r--r--node_modules/webpack/lib/esm/ExportWebpackRequireRuntimeModule.js30
-rw-r--r--node_modules/webpack/lib/esm/ModuleChunkFormatPlugin.js215
-rw-r--r--node_modules/webpack/lib/esm/ModuleChunkLoadingPlugin.js87
-rw-r--r--node_modules/webpack/lib/esm/ModuleChunkLoadingRuntimeModule.js249
4 files changed, 581 insertions, 0 deletions
diff --git a/node_modules/webpack/lib/esm/ExportWebpackRequireRuntimeModule.js b/node_modules/webpack/lib/esm/ExportWebpackRequireRuntimeModule.js
new file mode 100644
index 00000000..30a275fa
--- /dev/null
+++ b/node_modules/webpack/lib/esm/ExportWebpackRequireRuntimeModule.js
@@ -0,0 +1,30 @@
+/*
+ MIT License http://www.opensource.org/licenses/mit-license.php
+*/
+
+"use strict";
+
+const RuntimeGlobals = require("../RuntimeGlobals");
+const RuntimeModule = require("../RuntimeModule");
+
+class ExportWebpackRequireRuntimeModule extends RuntimeModule {
+ constructor() {
+ super("export webpack runtime", RuntimeModule.STAGE_ATTACH);
+ }
+
+ /**
+ * @returns {boolean} true, if the runtime module should get it's own scope
+ */
+ shouldIsolate() {
+ return false;
+ }
+
+ /**
+ * @returns {string | null} runtime code
+ */
+ generate() {
+ return `export default ${RuntimeGlobals.require};`;
+ }
+}
+
+module.exports = ExportWebpackRequireRuntimeModule;
diff --git a/node_modules/webpack/lib/esm/ModuleChunkFormatPlugin.js b/node_modules/webpack/lib/esm/ModuleChunkFormatPlugin.js
new file mode 100644
index 00000000..6f00ae75
--- /dev/null
+++ b/node_modules/webpack/lib/esm/ModuleChunkFormatPlugin.js
@@ -0,0 +1,215 @@
+/*
+ MIT License http://www.opensource.org/licenses/mit-license.php
+ Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const { ConcatSource } = require("webpack-sources");
+const { RuntimeGlobals } = require("..");
+const HotUpdateChunk = require("../HotUpdateChunk");
+const Template = require("../Template");
+const { getAllChunks } = require("../javascript/ChunkHelpers");
+const {
+ chunkHasJs,
+ getCompilationHooks,
+ getChunkFilenameTemplate
+} = require("../javascript/JavascriptModulesPlugin");
+const { updateHashForEntryStartup } = require("../javascript/StartupHelpers");
+
+/** @typedef {import("../Chunk")} Chunk */
+/** @typedef {import("../Compiler")} Compiler */
+/** @typedef {import("../Entrypoint")} Entrypoint */
+
+class ModuleChunkFormatPlugin {
+ /**
+ * Apply the plugin
+ * @param {Compiler} compiler the compiler instance
+ * @returns {void}
+ */
+ apply(compiler) {
+ compiler.hooks.thisCompilation.tap(
+ "ModuleChunkFormatPlugin",
+ compilation => {
+ compilation.hooks.additionalChunkRuntimeRequirements.tap(
+ "ModuleChunkFormatPlugin",
+ (chunk, set) => {
+ if (chunk.hasRuntime()) return;
+ if (compilation.chunkGraph.getNumberOfEntryModules(chunk) > 0) {
+ set.add(RuntimeGlobals.require);
+ set.add(RuntimeGlobals.startupEntrypoint);
+ set.add(RuntimeGlobals.externalInstallChunk);
+ }
+ }
+ );
+ const hooks = getCompilationHooks(compilation);
+ hooks.renderChunk.tap(
+ "ModuleChunkFormatPlugin",
+ (modules, renderContext) => {
+ const { chunk, chunkGraph, runtimeTemplate } = renderContext;
+ const hotUpdateChunk =
+ chunk instanceof HotUpdateChunk ? chunk : null;
+ const source = new ConcatSource();
+ if (hotUpdateChunk) {
+ throw new Error(
+ "HMR is not implemented for module chunk format yet"
+ );
+ } else {
+ source.add(`export const id = ${JSON.stringify(chunk.id)};\n`);
+ source.add(`export const ids = ${JSON.stringify(chunk.ids)};\n`);
+ source.add(`export const modules = `);
+ source.add(modules);
+ source.add(`;\n`);
+ const runtimeModules =
+ chunkGraph.getChunkRuntimeModulesInOrder(chunk);
+ if (runtimeModules.length > 0) {
+ source.add("export const runtime =\n");
+ source.add(
+ Template.renderChunkRuntimeModules(
+ runtimeModules,
+ renderContext
+ )
+ );
+ }
+ const entries = Array.from(
+ chunkGraph.getChunkEntryModulesWithChunkGroupIterable(chunk)
+ );
+ if (entries.length > 0) {
+ const runtimeChunk =
+ /** @type {Entrypoint[][]} */
+ (entries)[0][1].getRuntimeChunk();
+ const currentOutputName = compilation
+ .getPath(
+ getChunkFilenameTemplate(chunk, compilation.outputOptions),
+ {
+ chunk,
+ contentHashType: "javascript"
+ }
+ )
+ .split("/");
+
+ // remove filename, we only need the directory
+ currentOutputName.pop();
+
+ /**
+ * @param {Chunk} chunk the chunk
+ * @returns {string} the relative path
+ */
+ const getRelativePath = chunk => {
+ const baseOutputName = currentOutputName.slice();
+ const chunkOutputName = compilation
+ .getPath(
+ getChunkFilenameTemplate(
+ chunk,
+ compilation.outputOptions
+ ),
+ {
+ chunk: chunk,
+ contentHashType: "javascript"
+ }
+ )
+ .split("/");
+
+ // remove common parts
+ while (
+ baseOutputName.length > 0 &&
+ chunkOutputName.length > 0 &&
+ baseOutputName[0] === chunkOutputName[0]
+ ) {
+ baseOutputName.shift();
+ chunkOutputName.shift();
+ }
+ // create final path
+ return (
+ (baseOutputName.length > 0
+ ? "../".repeat(baseOutputName.length)
+ : "./") + chunkOutputName.join("/")
+ );
+ };
+
+ const entrySource = new ConcatSource();
+ entrySource.add(source);
+ entrySource.add(";\n\n// load runtime\n");
+ entrySource.add(
+ `import ${RuntimeGlobals.require} from ${JSON.stringify(
+ getRelativePath(/** @type {Chunk} */ (runtimeChunk))
+ )};\n`
+ );
+
+ const startupSource = new ConcatSource();
+ startupSource.add(
+ `var __webpack_exec__ = ${runtimeTemplate.returningFunction(
+ `${RuntimeGlobals.require}(${RuntimeGlobals.entryModuleId} = moduleId)`,
+ "moduleId"
+ )}\n`
+ );
+
+ const loadedChunks = new Set();
+ let index = 0;
+ for (let i = 0; i < entries.length; i++) {
+ const [module, entrypoint] = entries[i];
+ const final = i + 1 === entries.length;
+ const moduleId = chunkGraph.getModuleId(module);
+ const chunks = getAllChunks(
+ /** @type {Entrypoint} */ (entrypoint),
+ /** @type {Chunk} */ (runtimeChunk),
+ undefined
+ );
+ for (const chunk of chunks) {
+ if (
+ loadedChunks.has(chunk) ||
+ !chunkHasJs(chunk, chunkGraph)
+ )
+ continue;
+ loadedChunks.add(chunk);
+ startupSource.add(
+ `import * as __webpack_chunk_${index}__ from ${JSON.stringify(
+ getRelativePath(chunk)
+ )};\n`
+ );
+ startupSource.add(
+ `${RuntimeGlobals.externalInstallChunk}(__webpack_chunk_${index}__);\n`
+ );
+ index++;
+ }
+ startupSource.add(
+ `${
+ final ? `var ${RuntimeGlobals.exports} = ` : ""
+ }__webpack_exec__(${JSON.stringify(moduleId)});\n`
+ );
+ }
+
+ entrySource.add(
+ hooks.renderStartup.call(
+ startupSource,
+ entries[entries.length - 1][0],
+ {
+ ...renderContext,
+ inlined: false
+ }
+ )
+ );
+ return entrySource;
+ }
+ }
+ return source;
+ }
+ );
+ hooks.chunkHash.tap(
+ "ModuleChunkFormatPlugin",
+ (chunk, hash, { chunkGraph, runtimeTemplate }) => {
+ if (chunk.hasRuntime()) return;
+ hash.update("ModuleChunkFormatPlugin");
+ hash.update("1");
+ const entries = Array.from(
+ chunkGraph.getChunkEntryModulesWithChunkGroupIterable(chunk)
+ );
+ updateHashForEntryStartup(hash, chunkGraph, entries, chunk);
+ }
+ );
+ }
+ );
+ }
+}
+
+module.exports = ModuleChunkFormatPlugin;
diff --git a/node_modules/webpack/lib/esm/ModuleChunkLoadingPlugin.js b/node_modules/webpack/lib/esm/ModuleChunkLoadingPlugin.js
new file mode 100644
index 00000000..b88533a8
--- /dev/null
+++ b/node_modules/webpack/lib/esm/ModuleChunkLoadingPlugin.js
@@ -0,0 +1,87 @@
+/*
+ MIT License http://www.opensource.org/licenses/mit-license.php
+ Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const RuntimeGlobals = require("../RuntimeGlobals");
+const ExportWebpackRequireRuntimeModule = require("./ExportWebpackRequireRuntimeModule");
+const ModuleChunkLoadingRuntimeModule = require("./ModuleChunkLoadingRuntimeModule");
+
+/** @typedef {import("../Chunk")} Chunk */
+/** @typedef {import("../Compiler")} Compiler */
+
+class ModuleChunkLoadingPlugin {
+ /**
+ * Apply the plugin
+ * @param {Compiler} compiler the compiler instance
+ * @returns {void}
+ */
+ apply(compiler) {
+ compiler.hooks.thisCompilation.tap(
+ "ModuleChunkLoadingPlugin",
+ compilation => {
+ const globalChunkLoading = compilation.outputOptions.chunkLoading;
+ /**
+ * @param {Chunk} chunk chunk to check
+ * @returns {boolean} true, when the plugin is enabled for the chunk
+ */
+ const isEnabledForChunk = chunk => {
+ const options = chunk.getEntryOptions();
+ const chunkLoading =
+ options && options.chunkLoading !== undefined
+ ? options.chunkLoading
+ : globalChunkLoading;
+ return chunkLoading === "import";
+ };
+ const onceForChunkSet = new WeakSet();
+ /**
+ * @param {Chunk} chunk chunk to check
+ * @param {Set<string>} set runtime requirements
+ */
+ const handler = (chunk, set) => {
+ if (onceForChunkSet.has(chunk)) return;
+ onceForChunkSet.add(chunk);
+ if (!isEnabledForChunk(chunk)) return;
+ set.add(RuntimeGlobals.moduleFactoriesAddOnly);
+ set.add(RuntimeGlobals.hasOwnProperty);
+ compilation.addRuntimeModule(
+ chunk,
+ new ModuleChunkLoadingRuntimeModule(set)
+ );
+ };
+ compilation.hooks.runtimeRequirementInTree
+ .for(RuntimeGlobals.ensureChunkHandlers)
+ .tap("ModuleChunkLoadingPlugin", handler);
+ compilation.hooks.runtimeRequirementInTree
+ .for(RuntimeGlobals.baseURI)
+ .tap("ModuleChunkLoadingPlugin", handler);
+ compilation.hooks.runtimeRequirementInTree
+ .for(RuntimeGlobals.externalInstallChunk)
+ .tap("ModuleChunkLoadingPlugin", handler);
+ compilation.hooks.runtimeRequirementInTree
+ .for(RuntimeGlobals.onChunksLoaded)
+ .tap("ModuleChunkLoadingPlugin", handler);
+ compilation.hooks.runtimeRequirementInTree
+ .for(RuntimeGlobals.externalInstallChunk)
+ .tap("ModuleChunkLoadingPlugin", (chunk, set) => {
+ if (!isEnabledForChunk(chunk)) return;
+ compilation.addRuntimeModule(
+ chunk,
+ new ExportWebpackRequireRuntimeModule()
+ );
+ });
+
+ compilation.hooks.runtimeRequirementInTree
+ .for(RuntimeGlobals.ensureChunkHandlers)
+ .tap("ModuleChunkLoadingPlugin", (chunk, set) => {
+ if (!isEnabledForChunk(chunk)) return;
+ set.add(RuntimeGlobals.getChunkScriptFilename);
+ });
+ }
+ );
+ }
+}
+
+module.exports = ModuleChunkLoadingPlugin;
diff --git a/node_modules/webpack/lib/esm/ModuleChunkLoadingRuntimeModule.js b/node_modules/webpack/lib/esm/ModuleChunkLoadingRuntimeModule.js
new file mode 100644
index 00000000..c29f0f50
--- /dev/null
+++ b/node_modules/webpack/lib/esm/ModuleChunkLoadingRuntimeModule.js
@@ -0,0 +1,249 @@
+/*
+ MIT License http://www.opensource.org/licenses/mit-license.php
+*/
+
+"use strict";
+
+const { SyncWaterfallHook } = require("tapable");
+const Compilation = require("../Compilation");
+const RuntimeGlobals = require("../RuntimeGlobals");
+const RuntimeModule = require("../RuntimeModule");
+const Template = require("../Template");
+const {
+ getChunkFilenameTemplate,
+ chunkHasJs
+} = require("../javascript/JavascriptModulesPlugin");
+const { getInitialChunkIds } = require("../javascript/StartupHelpers");
+const compileBooleanMatcher = require("../util/compileBooleanMatcher");
+const { getUndoPath } = require("../util/identifier");
+
+/** @typedef {import("../Chunk")} Chunk */
+/** @typedef {import("../ChunkGraph")} ChunkGraph */
+
+/**
+ * @typedef {Object} JsonpCompilationPluginHooks
+ * @property {SyncWaterfallHook<[string, Chunk]>} linkPreload
+ * @property {SyncWaterfallHook<[string, Chunk]>} linkPrefetch
+ */
+
+/** @type {WeakMap<Compilation, JsonpCompilationPluginHooks>} */
+const compilationHooksMap = new WeakMap();
+
+class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
+ /**
+ * @param {Compilation} compilation the compilation
+ * @returns {JsonpCompilationPluginHooks} hooks
+ */
+ static getCompilationHooks(compilation) {
+ if (!(compilation instanceof Compilation)) {
+ throw new TypeError(
+ "The 'compilation' argument must be an instance of Compilation"
+ );
+ }
+ let hooks = compilationHooksMap.get(compilation);
+ if (hooks === undefined) {
+ hooks = {
+ linkPreload: new SyncWaterfallHook(["source", "chunk"]),
+ linkPrefetch: new SyncWaterfallHook(["source", "chunk"])
+ };
+ compilationHooksMap.set(compilation, hooks);
+ }
+ return hooks;
+ }
+
+ /**
+ * @param {ReadonlySet<string>} runtimeRequirements runtime requirements
+ */
+ constructor(runtimeRequirements) {
+ super("import chunk loading", RuntimeModule.STAGE_ATTACH);
+ this._runtimeRequirements = runtimeRequirements;
+ }
+
+ /**
+ * @private
+ * @param {Chunk} chunk chunk
+ * @param {string} rootOutputDir root output directory
+ * @returns {string} generated code
+ */
+ _generateBaseUri(chunk, rootOutputDir) {
+ const options = chunk.getEntryOptions();
+ if (options && options.baseUri) {
+ return `${RuntimeGlobals.baseURI} = ${JSON.stringify(options.baseUri)};`;
+ }
+ const compilation = /** @type {Compilation} */ (this.compilation);
+ const {
+ outputOptions: { importMetaName }
+ } = compilation;
+ return `${RuntimeGlobals.baseURI} = new URL(${JSON.stringify(
+ rootOutputDir
+ )}, ${importMetaName}.url);`;
+ }
+
+ /**
+ * @returns {string | null} runtime code
+ */
+ generate() {
+ const compilation = /** @type {Compilation} */ (this.compilation);
+ const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
+ const chunk = /** @type {Chunk} */ (this.chunk);
+ const {
+ runtimeTemplate,
+ outputOptions: { importFunctionName }
+ } = compilation;
+ const fn = RuntimeGlobals.ensureChunkHandlers;
+ const withBaseURI = this._runtimeRequirements.has(RuntimeGlobals.baseURI);
+ const withExternalInstallChunk = this._runtimeRequirements.has(
+ RuntimeGlobals.externalInstallChunk
+ );
+ const withLoading = this._runtimeRequirements.has(
+ RuntimeGlobals.ensureChunkHandlers
+ );
+ const withOnChunkLoad = this._runtimeRequirements.has(
+ RuntimeGlobals.onChunksLoaded
+ );
+ const withHmr = this._runtimeRequirements.has(
+ RuntimeGlobals.hmrDownloadUpdateHandlers
+ );
+ const conditionMap = chunkGraph.getChunkConditionMap(chunk, chunkHasJs);
+ const hasJsMatcher = compileBooleanMatcher(conditionMap);
+ const initialChunkIds = getInitialChunkIds(chunk, chunkGraph, chunkHasJs);
+
+ const outputName = compilation.getPath(
+ getChunkFilenameTemplate(chunk, compilation.outputOptions),
+ {
+ chunk,
+ contentHashType: "javascript"
+ }
+ );
+ const rootOutputDir = getUndoPath(
+ outputName,
+ /** @type {string} */ (compilation.outputOptions.path),
+ true
+ );
+
+ const stateExpression = withHmr
+ ? `${RuntimeGlobals.hmrRuntimeStatePrefix}_module`
+ : undefined;
+
+ return Template.asString([
+ withBaseURI
+ ? this._generateBaseUri(chunk, rootOutputDir)
+ : "// no baseURI",
+ "",
+ "// object to store loaded and loading chunks",
+ "// undefined = chunk not loaded, null = chunk preloaded/prefetched",
+ "// [resolve, Promise] = chunk loading, 0 = chunk loaded",
+ `var installedChunks = ${
+ stateExpression ? `${stateExpression} = ${stateExpression} || ` : ""
+ }{`,
+ Template.indent(
+ Array.from(initialChunkIds, id => `${JSON.stringify(id)}: 0`).join(
+ ",\n"
+ )
+ ),
+ "};",
+ "",
+ withLoading || withExternalInstallChunk
+ ? `var installChunk = ${runtimeTemplate.basicFunction("data", [
+ runtimeTemplate.destructureObject(
+ ["ids", "modules", "runtime"],
+ "data"
+ ),
+ '// add "modules" to the modules object,',
+ '// then flag all "ids" as loaded and fire callback',
+ "var moduleId, chunkId, i = 0;",
+ "for(moduleId in modules) {",
+ Template.indent([
+ `if(${RuntimeGlobals.hasOwnProperty}(modules, moduleId)) {`,
+ Template.indent(
+ `${RuntimeGlobals.moduleFactories}[moduleId] = modules[moduleId];`
+ ),
+ "}"
+ ]),
+ "}",
+ `if(runtime) runtime(${RuntimeGlobals.require});`,
+ "for(;i < ids.length; i++) {",
+ Template.indent([
+ "chunkId = ids[i];",
+ `if(${RuntimeGlobals.hasOwnProperty}(installedChunks, chunkId) && installedChunks[chunkId]) {`,
+ Template.indent("installedChunks[chunkId][0]();"),
+ "}",
+ "installedChunks[ids[i]] = 0;"
+ ]),
+ "}",
+ withOnChunkLoad ? `${RuntimeGlobals.onChunksLoaded}();` : ""
+ ])}`
+ : "// no install chunk",
+ "",
+ withLoading
+ ? Template.asString([
+ `${fn}.j = ${runtimeTemplate.basicFunction(
+ "chunkId, promises",
+ hasJsMatcher !== false
+ ? Template.indent([
+ "// import() chunk loading for javascript",
+ `var installedChunkData = ${RuntimeGlobals.hasOwnProperty}(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;`,
+ 'if(installedChunkData !== 0) { // 0 means "already installed".',
+ Template.indent([
+ "",
+ '// a Promise means "currently loading".',
+ "if(installedChunkData) {",
+ Template.indent([
+ "promises.push(installedChunkData[1]);"
+ ]),
+ "} else {",
+ Template.indent([
+ hasJsMatcher === true
+ ? "if(true) { // all chunks have JS"
+ : `if(${hasJsMatcher("chunkId")}) {`,
+ Template.indent([
+ "// setup Promise in chunk cache",
+ `var promise = ${importFunctionName}(${JSON.stringify(
+ rootOutputDir
+ )} + ${
+ RuntimeGlobals.getChunkScriptFilename
+ }(chunkId)).then(installChunk, ${runtimeTemplate.basicFunction(
+ "e",
+ [
+ "if(installedChunks[chunkId] !== 0) installedChunks[chunkId] = undefined;",
+ "throw e;"
+ ]
+ )});`,
+ `var promise = Promise.race([promise, new Promise(${runtimeTemplate.expressionFunction(
+ `installedChunkData = installedChunks[chunkId] = [resolve]`,
+ "resolve"
+ )})])`,
+ `promises.push(installedChunkData[1] = promise);`
+ ]),
+ hasJsMatcher === true
+ ? "}"
+ : "} else installedChunks[chunkId] = 0;"
+ ]),
+ "}"
+ ]),
+ "}"
+ ])
+ : Template.indent(["installedChunks[chunkId] = 0;"])
+ )};`
+ ])
+ : "// no chunk on demand loading",
+ "",
+ withExternalInstallChunk
+ ? Template.asString([
+ `${RuntimeGlobals.externalInstallChunk} = installChunk;`
+ ])
+ : "// no external install chunk",
+ "",
+ withOnChunkLoad
+ ? `${
+ RuntimeGlobals.onChunksLoaded
+ }.j = ${runtimeTemplate.returningFunction(
+ "installedChunks[chunkId] === 0",
+ "chunkId"
+ )};`
+ : "// no on chunks loaded"
+ ]);
+ }
+}
+
+module.exports = ModuleChunkLoadingRuntimeModule;