diff options
Diffstat (limited to 'node_modules/webpack/lib/LibraryTemplatePlugin.js')
-rw-r--r-- | node_modules/webpack/lib/LibraryTemplatePlugin.js | 245 |
1 files changed, 153 insertions, 92 deletions
diff --git a/node_modules/webpack/lib/LibraryTemplatePlugin.js b/node_modules/webpack/lib/LibraryTemplatePlugin.js index 11ab06074..c871994fa 100644 --- a/node_modules/webpack/lib/LibraryTemplatePlugin.js +++ b/node_modules/webpack/lib/LibraryTemplatePlugin.js @@ -1,92 +1,153 @@ -/*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
-*/
-"use strict";
-
-const SetVarMainTemplatePlugin = require("./SetVarMainTemplatePlugin");
-
-function accessorToObjectAccess(accessor) {
- return accessor.map((a) => {
- return `[${JSON.stringify(a)}]`;
- }).join("");
-}
-
-function accessorAccess(base, accessor, joinWith) {
- accessor = [].concat(accessor);
- return accessor.map((a, idx) => {
- a = base ?
- base + accessorToObjectAccess(accessor.slice(0, idx + 1)) :
- accessor[0] + accessorToObjectAccess(accessor.slice(1, idx + 1));
- if(idx === accessor.length - 1) return a;
- if(idx === 0 && typeof base === "undefined") return `${a} = typeof ${a} === "object" ? ${a} : {}`;
- return `${a} = ${a} || {}`;
- }).join(joinWith || "; ");
-}
-
-class LibraryTemplatePlugin {
-
- constructor(name, target, umdNamedDefine, auxiliaryComment, exportProperty) {
- this.name = name;
- this.target = target;
- this.umdNamedDefine = umdNamedDefine;
- this.auxiliaryComment = auxiliaryComment;
- this.exportProperty = exportProperty;
- }
-
- apply(compiler) {
- compiler.plugin("this-compilation", (compilation) => {
- if(this.exportProperty) {
- var ExportPropertyMainTemplatePlugin = require("./ExportPropertyMainTemplatePlugin");
- compilation.apply(new ExportPropertyMainTemplatePlugin(this.exportProperty));
- }
- switch(this.target) {
- case "var":
- compilation.apply(new SetVarMainTemplatePlugin(`var ${accessorAccess(false, this.name)}`));
- break;
- case "assign":
- compilation.apply(new SetVarMainTemplatePlugin(accessorAccess(undefined, this.name)));
- break;
- case "this":
- case "window":
- case "global":
- if(this.name)
- compilation.apply(new SetVarMainTemplatePlugin(accessorAccess(this.target, this.name)));
- else
- compilation.apply(new SetVarMainTemplatePlugin(this.target, true));
- break;
- case "commonjs":
- if(this.name)
- compilation.apply(new SetVarMainTemplatePlugin(accessorAccess("exports", this.name)));
- else
- compilation.apply(new SetVarMainTemplatePlugin("exports", true));
- break;
- case "commonjs2":
- case "commonjs-module":
- compilation.apply(new SetVarMainTemplatePlugin("module.exports"));
- break;
- case "amd":
- var AmdMainTemplatePlugin = require("./AmdMainTemplatePlugin");
- compilation.apply(new AmdMainTemplatePlugin(this.name));
- break;
- case "umd":
- case "umd2":
- var UmdMainTemplatePlugin = require("./UmdMainTemplatePlugin");
- compilation.apply(new UmdMainTemplatePlugin(this.name, {
- optionalAmdExternalAsGlobal: this.target === "umd2",
- namedDefine: this.umdNamedDefine,
- auxiliaryComment: this.auxiliaryComment
- }));
- break;
- case "jsonp":
- var JsonpExportMainTemplatePlugin = require("./JsonpExportMainTemplatePlugin");
- compilation.apply(new JsonpExportMainTemplatePlugin(this.name));
- break;
- default:
- throw new Error(`${this.target} is not a valid Library target`);
- }
- });
- }
-}
-
-module.exports = LibraryTemplatePlugin;
+/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +"use strict"; + +const SetVarMainTemplatePlugin = require("./SetVarMainTemplatePlugin"); + +/** @typedef {import("./Compiler")} Compiler */ + +/** + * @param {string[]} accessor the accessor to convert to path + * @returns {string} the path + */ +const accessorToObjectAccess = accessor => { + return accessor.map(a => `[${JSON.stringify(a)}]`).join(""); +}; + +/** + * @param {string=} base the path prefix + * @param {string|string[]} accessor the accessor + * @param {string=} joinWith the element separator + * @returns {string} the path + */ +const accessorAccess = (base, accessor, joinWith = "; ") => { + const accessors = Array.isArray(accessor) ? accessor : [accessor]; + return accessors + .map((_, idx) => { + const a = base + ? base + accessorToObjectAccess(accessors.slice(0, idx + 1)) + : accessors[0] + accessorToObjectAccess(accessors.slice(1, idx + 1)); + if (idx === accessors.length - 1) return a; + if (idx === 0 && base === undefined) { + return `${a} = typeof ${a} === "object" ? ${a} : {}`; + } + return `${a} = ${a} || {}`; + }) + .join(joinWith); +}; + +class LibraryTemplatePlugin { + /** + * @param {string} name name of library + * @param {string} target type of library + * @param {boolean} umdNamedDefine setting this to true will name the UMD module + * @param {string|TODO} auxiliaryComment comment in the UMD wrapper + * @param {string|string[]} exportProperty which export should be exposed as library + */ + constructor(name, target, umdNamedDefine, auxiliaryComment, exportProperty) { + this.name = name; + this.target = target; + this.umdNamedDefine = umdNamedDefine; + this.auxiliaryComment = auxiliaryComment; + this.exportProperty = exportProperty; + } + + /** + * @param {Compiler} compiler the compiler instance + * @returns {void} + */ + apply(compiler) { + compiler.hooks.thisCompilation.tap("LibraryTemplatePlugin", compilation => { + if (this.exportProperty) { + const ExportPropertyMainTemplatePlugin = require("./ExportPropertyMainTemplatePlugin"); + new ExportPropertyMainTemplatePlugin(this.exportProperty).apply( + compilation + ); + } + switch (this.target) { + case "var": + new SetVarMainTemplatePlugin( + `var ${accessorAccess(undefined, this.name)}`, + false + ).apply(compilation); + break; + case "assign": + new SetVarMainTemplatePlugin( + accessorAccess(undefined, this.name), + false + ).apply(compilation); + break; + case "this": + case "self": + case "window": + if (this.name) { + new SetVarMainTemplatePlugin( + accessorAccess(this.target, this.name), + false + ).apply(compilation); + } else { + new SetVarMainTemplatePlugin(this.target, true).apply(compilation); + } + break; + case "global": + if (this.name) { + new SetVarMainTemplatePlugin( + accessorAccess( + compilation.runtimeTemplate.outputOptions.globalObject, + this.name + ), + false + ).apply(compilation); + } else { + new SetVarMainTemplatePlugin( + compilation.runtimeTemplate.outputOptions.globalObject, + true + ).apply(compilation); + } + break; + case "commonjs": + if (this.name) { + new SetVarMainTemplatePlugin( + accessorAccess("exports", this.name), + false + ).apply(compilation); + } else { + new SetVarMainTemplatePlugin("exports", true).apply(compilation); + } + break; + case "commonjs2": + case "commonjs-module": + new SetVarMainTemplatePlugin("module.exports", false).apply( + compilation + ); + break; + case "amd": { + const AmdMainTemplatePlugin = require("./AmdMainTemplatePlugin"); + new AmdMainTemplatePlugin(this.name).apply(compilation); + break; + } + case "umd": + case "umd2": { + const UmdMainTemplatePlugin = require("./UmdMainTemplatePlugin"); + new UmdMainTemplatePlugin(this.name, { + optionalAmdExternalAsGlobal: this.target === "umd2", + namedDefine: this.umdNamedDefine, + auxiliaryComment: this.auxiliaryComment + }).apply(compilation); + break; + } + case "jsonp": { + const JsonpExportMainTemplatePlugin = require("./web/JsonpExportMainTemplatePlugin"); + new JsonpExportMainTemplatePlugin(this.name).apply(compilation); + break; + } + default: + throw new Error(`${this.target} is not a valid Library target`); + } + }); + } +} + +module.exports = LibraryTemplatePlugin; |