aboutsummaryrefslogtreecommitdiff
path: root/node_modules/webpack/lib/LibraryTemplatePlugin.js
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2018-09-20 02:56:13 +0200
committerFlorian Dold <florian.dold@gmail.com>2018-09-20 02:56:13 +0200
commitbbff7403fbf46f9ad92240ac213df8d30ef31b64 (patch)
treec58400ec5124da1c7d56b01aea83309f80a56c3b /node_modules/webpack/lib/LibraryTemplatePlugin.js
parent003fb34971cf63466184351b4db5f7c67df4f444 (diff)
update packages
Diffstat (limited to 'node_modules/webpack/lib/LibraryTemplatePlugin.js')
-rw-r--r--node_modules/webpack/lib/LibraryTemplatePlugin.js245
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;