summaryrefslogtreecommitdiff
path: root/node_modules/webpack/lib/javascript/EnableChunkLoadingPlugin.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/webpack/lib/javascript/EnableChunkLoadingPlugin.js')
-rw-r--r--node_modules/webpack/lib/javascript/EnableChunkLoadingPlugin.js123
1 files changed, 123 insertions, 0 deletions
diff --git a/node_modules/webpack/lib/javascript/EnableChunkLoadingPlugin.js b/node_modules/webpack/lib/javascript/EnableChunkLoadingPlugin.js
new file mode 100644
index 00000000..0dc08a38
--- /dev/null
+++ b/node_modules/webpack/lib/javascript/EnableChunkLoadingPlugin.js
@@ -0,0 +1,123 @@
+/*
+ MIT License http://www.opensource.org/licenses/mit-license.php
+ Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+/** @typedef {import("../../declarations/WebpackOptions").ChunkLoadingType} ChunkLoadingType */
+/** @typedef {import("../Compiler")} Compiler */
+
+/** @type {WeakMap<Compiler, Set<ChunkLoadingType>>} */
+const enabledTypes = new WeakMap();
+
+/**
+ * @param {Compiler} compiler compiler
+ * @returns {Set<ChunkLoadingType>} enabled types
+ */
+const getEnabledTypes = compiler => {
+ let set = enabledTypes.get(compiler);
+ if (set === undefined) {
+ set = new Set();
+ enabledTypes.set(compiler, set);
+ }
+ return set;
+};
+
+class EnableChunkLoadingPlugin {
+ /**
+ * @param {ChunkLoadingType} type library type that should be available
+ */
+ constructor(type) {
+ this.type = type;
+ }
+
+ /**
+ * @param {Compiler} compiler the compiler instance
+ * @param {ChunkLoadingType} type type of library
+ * @returns {void}
+ */
+ static setEnabled(compiler, type) {
+ getEnabledTypes(compiler).add(type);
+ }
+
+ /**
+ * @param {Compiler} compiler the compiler instance
+ * @param {ChunkLoadingType} type type of library
+ * @returns {void}
+ */
+ static checkEnabled(compiler, type) {
+ if (!getEnabledTypes(compiler).has(type)) {
+ throw new Error(
+ `Chunk loading type "${type}" is not enabled. ` +
+ "EnableChunkLoadingPlugin need to be used to enable this type of chunk loading. " +
+ `This usually happens through the "output.enabledChunkLoadingTypes" option. ` +
+ `If you are using a function as entry which sets "chunkLoading", you need to add all potential chunk loading types to "output.enabledChunkLoadingTypes". ` +
+ `These types are enabled: ${Array.from(
+ getEnabledTypes(compiler)
+ ).join(", ")}`
+ );
+ }
+ }
+
+ /**
+ * Apply the plugin
+ * @param {Compiler} compiler the compiler instance
+ * @returns {void}
+ */
+ apply(compiler) {
+ const { type } = this;
+
+ // Only enable once
+ const enabled = getEnabledTypes(compiler);
+ if (enabled.has(type)) return;
+ enabled.add(type);
+
+ if (typeof type === "string") {
+ switch (type) {
+ case "jsonp": {
+ const JsonpChunkLoadingPlugin = require("../web/JsonpChunkLoadingPlugin");
+ new JsonpChunkLoadingPlugin().apply(compiler);
+ break;
+ }
+ case "import-scripts": {
+ const ImportScriptsChunkLoadingPlugin = require("../webworker/ImportScriptsChunkLoadingPlugin");
+ new ImportScriptsChunkLoadingPlugin().apply(compiler);
+ break;
+ }
+ case "require": {
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
+ const CommonJsChunkLoadingPlugin = require("../node/CommonJsChunkLoadingPlugin");
+ new CommonJsChunkLoadingPlugin({
+ asyncChunkLoading: false
+ }).apply(compiler);
+ break;
+ }
+ case "async-node": {
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
+ const CommonJsChunkLoadingPlugin = require("../node/CommonJsChunkLoadingPlugin");
+ new CommonJsChunkLoadingPlugin({
+ asyncChunkLoading: true
+ }).apply(compiler);
+ break;
+ }
+ case "import": {
+ const ModuleChunkLoadingPlugin = require("../esm/ModuleChunkLoadingPlugin");
+ new ModuleChunkLoadingPlugin().apply(compiler);
+ break;
+ }
+ case "universal":
+ // TODO implement universal chunk loading
+ throw new Error("Universal Chunk Loading is not implemented yet");
+ default:
+ throw new Error(`Unsupported chunk loading type ${type}.
+Plugins which provide custom chunk loading types must call EnableChunkLoadingPlugin.setEnabled(compiler, type) to disable this error.`);
+ }
+ } else {
+ // TODO support plugin instances here
+ // apply them to the compiler
+ }
+ }
+}
+
+module.exports = EnableChunkLoadingPlugin;