| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 | /*	MIT License http://www.opensource.org/licenses/mit-license.php	Author Tobias Koppers @sokra*/"use strict";/** @typedef {import("../../declarations/WebpackOptions").LibraryOptions} LibraryOptions *//** @typedef {import("../../declarations/WebpackOptions").LibraryType} LibraryType *//** @typedef {import("../Compiler")} Compiler *//** @type {WeakMap<Compiler, Set<LibraryType>>} */const enabledTypes = new WeakMap();const getEnabledTypes = compiler => {	let set = enabledTypes.get(compiler);	if (set === undefined) {		set = new Set();		enabledTypes.set(compiler, set);	}	return set;};class EnableLibraryPlugin {	/**	 * @param {LibraryType} type library type that should be available	 */	constructor(type) {		this.type = type;	}	/**	 * @param {Compiler} compiler the compiler instance	 * @param {LibraryType} type type of library	 * @returns {void}	 */	static setEnabled(compiler, type) {		getEnabledTypes(compiler).add(type);	}	/**	 * @param {Compiler} compiler the compiler instance	 * @param {LibraryType} type type of library	 * @returns {void}	 */	static checkEnabled(compiler, type) {		if (!getEnabledTypes(compiler).has(type)) {			throw new Error(				`Library type "${type}" is not enabled. ` +					"EnableLibraryPlugin need to be used to enable this type of library. " +					'This usually happens through the "output.enabledLibraryTypes" option. ' +					'If you are using a function as entry which sets "library", you need to add all potential library types to "output.enabledLibraryTypes". ' +					"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") {			const enableExportProperty = () => {				const ExportPropertyTemplatePlugin = require("./ExportPropertyLibraryPlugin");				new ExportPropertyTemplatePlugin({					type,					nsObjectUsed: type !== "module"				}).apply(compiler);			};			switch (type) {				case "var": {					//@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697					const AssignLibraryPlugin = require("./AssignLibraryPlugin");					new AssignLibraryPlugin({						type,						prefix: [],						declare: "var",						unnamed: "error"					}).apply(compiler);					break;				}				case "assign-properties": {					//@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697					const AssignLibraryPlugin = require("./AssignLibraryPlugin");					new AssignLibraryPlugin({						type,						prefix: [],						declare: false,						unnamed: "error",						named: "copy"					}).apply(compiler);					break;				}				case "assign": {					//@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697					const AssignLibraryPlugin = require("./AssignLibraryPlugin");					new AssignLibraryPlugin({						type,						prefix: [],						declare: false,						unnamed: "error"					}).apply(compiler);					break;				}				case "this": {					//@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697					const AssignLibraryPlugin = require("./AssignLibraryPlugin");					new AssignLibraryPlugin({						type,						prefix: ["this"],						declare: false,						unnamed: "copy"					}).apply(compiler);					break;				}				case "window": {					//@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697					const AssignLibraryPlugin = require("./AssignLibraryPlugin");					new AssignLibraryPlugin({						type,						prefix: ["window"],						declare: false,						unnamed: "copy"					}).apply(compiler);					break;				}				case "self": {					//@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697					const AssignLibraryPlugin = require("./AssignLibraryPlugin");					new AssignLibraryPlugin({						type,						prefix: ["self"],						declare: false,						unnamed: "copy"					}).apply(compiler);					break;				}				case "global": {					//@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697					const AssignLibraryPlugin = require("./AssignLibraryPlugin");					new AssignLibraryPlugin({						type,						prefix: "global",						declare: false,						unnamed: "copy"					}).apply(compiler);					break;				}				case "commonjs": {					//@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697					const AssignLibraryPlugin = require("./AssignLibraryPlugin");					new AssignLibraryPlugin({						type,						prefix: ["exports"],						declare: false,						unnamed: "copy"					}).apply(compiler);					break;				}				case "commonjs-static": {					//@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697					const AssignLibraryPlugin = require("./AssignLibraryPlugin");					new AssignLibraryPlugin({						type,						prefix: ["exports"],						declare: false,						unnamed: "static"					}).apply(compiler);					break;				}				case "commonjs2":				case "commonjs-module": {					//@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697					const AssignLibraryPlugin = require("./AssignLibraryPlugin");					new AssignLibraryPlugin({						type,						prefix: ["module", "exports"],						declare: false,						unnamed: "assign"					}).apply(compiler);					break;				}				case "amd":				case "amd-require": {					enableExportProperty();					const AmdLibraryPlugin = require("./AmdLibraryPlugin");					new AmdLibraryPlugin({						type,						requireAsWrapper: type === "amd-require"					}).apply(compiler);					break;				}				case "umd":				case "umd2": {					enableExportProperty();					const UmdLibraryPlugin = require("./UmdLibraryPlugin");					new UmdLibraryPlugin({						type,						optionalAmdExternalAsGlobal: type === "umd2"					}).apply(compiler);					break;				}				case "system": {					enableExportProperty();					const SystemLibraryPlugin = require("./SystemLibraryPlugin");					new SystemLibraryPlugin({						type					}).apply(compiler);					break;				}				case "jsonp": {					enableExportProperty();					const JsonpLibraryPlugin = require("./JsonpLibraryPlugin");					new JsonpLibraryPlugin({						type					}).apply(compiler);					break;				}				case "module": {					enableExportProperty();					const ModuleLibraryPlugin = require("./ModuleLibraryPlugin");					new ModuleLibraryPlugin({						type					}).apply(compiler);					break;				}				default:					throw new Error(`Unsupported library type ${type}.Plugins which provide custom library types must call EnableLibraryPlugin.setEnabled(compiler, type) to disable this error.`);			}		} else {			// TODO support plugin instances here			// apply them to the compiler		}	}}module.exports = EnableLibraryPlugin;
 |