diff options
author | Florian Dold <florian.dold@gmail.com> | 2018-09-20 02:56:13 +0200 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2018-09-20 02:56:13 +0200 |
commit | bbff7403fbf46f9ad92240ac213df8d30ef31b64 (patch) | |
tree | c58400ec5124da1c7d56b01aea83309f80a56c3b /node_modules/webpack/lib/BannerPlugin.js | |
parent | 003fb34971cf63466184351b4db5f7c67df4f444 (diff) |
update packages
Diffstat (limited to 'node_modules/webpack/lib/BannerPlugin.js')
-rw-r--r-- | node_modules/webpack/lib/BannerPlugin.js | 190 |
1 files changed, 117 insertions, 73 deletions
diff --git a/node_modules/webpack/lib/BannerPlugin.js b/node_modules/webpack/lib/BannerPlugin.js index 342a30328..1e9aa343c 100644 --- a/node_modules/webpack/lib/BannerPlugin.js +++ b/node_modules/webpack/lib/BannerPlugin.js @@ -1,73 +1,117 @@ -/*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
- */
-
-"use strict";
-
-const ConcatSource = require("webpack-sources").ConcatSource;
-const ModuleFilenameHelpers = require("./ModuleFilenameHelpers");
-
-const wrapComment = (str) => {
- if(!str.includes("\n")) return `/*! ${str} */`;
- return `/*!\n * ${str.split("\n").join("\n * ")}\n */`;
-};
-
-class BannerPlugin {
- constructor(options) {
- if(arguments.length > 1)
- throw new Error("BannerPlugin only takes one argument (pass an options object)");
- if(typeof options === "string")
- options = {
- banner: options
- };
- this.options = options || {};
- this.banner = this.options.raw ? options.banner : wrapComment(options.banner);
- }
-
- apply(compiler) {
- const options = this.options;
- const banner = this.banner;
-
- compiler.plugin("compilation", (compilation) => {
- compilation.plugin("optimize-chunk-assets", (chunks, callback) => {
- chunks.forEach((chunk) => {
- if(options.entryOnly && !chunk.isInitial()) return;
- chunk.files
- .filter(ModuleFilenameHelpers.matchObject.bind(undefined, options))
- .forEach((file) => {
- let basename;
- let query = "";
- let filename = file;
- const hash = compilation.hash;
- const querySplit = filename.indexOf("?");
-
- if(querySplit >= 0) {
- query = filename.substr(querySplit);
- filename = filename.substr(0, querySplit);
- }
-
- if(filename.indexOf("/") < 0) {
- basename = filename;
- } else {
- basename = filename.substr(filename.lastIndexOf("/") + 1);
- }
-
- const comment = compilation.getPath(banner, {
- hash,
- chunk,
- filename,
- basename,
- query,
- });
-
- return compilation.assets[file] = new ConcatSource(comment, "\n", compilation.assets[file]);
- });
- });
- callback();
- });
- });
- }
-}
-
-module.exports = BannerPlugin;
+/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra + */ + +"use strict"; + +const { ConcatSource } = require("webpack-sources"); +const ModuleFilenameHelpers = require("./ModuleFilenameHelpers"); +const Template = require("./Template"); + +const validateOptions = require("schema-utils"); +const schema = require("../schemas/plugins/BannerPlugin.json"); + +const wrapComment = str => { + if (!str.includes("\n")) { + return Template.toComment(str); + } + return `/*!\n * ${str + .replace(/\*\//g, "* /") + .split("\n") + .join("\n * ")}\n */`; +}; + +class BannerPlugin { + constructor(options) { + if (arguments.length > 1) { + throw new Error( + "BannerPlugin only takes one argument (pass an options object)" + ); + } + + validateOptions(schema, options, "Banner Plugin"); + + if (typeof options === "string" || typeof options === "function") { + options = { + banner: options + }; + } + + this.options = options || {}; + + if (typeof options.banner === "function") { + const getBanner = this.options.banner; + this.banner = this.options.raw + ? getBanner + : data => wrapComment(getBanner(data)); + } else { + const banner = this.options.raw + ? this.options.banner + : wrapComment(this.options.banner); + this.banner = () => banner; + } + } + + apply(compiler) { + const options = this.options; + const banner = this.banner; + const matchObject = ModuleFilenameHelpers.matchObject.bind( + undefined, + options + ); + + compiler.hooks.compilation.tap("BannerPlugin", compilation => { + compilation.hooks.optimizeChunkAssets.tap("BannerPlugin", chunks => { + for (const chunk of chunks) { + if (options.entryOnly && !chunk.canBeInitial()) { + continue; + } + + for (const file of chunk.files) { + if (!matchObject(file)) { + continue; + } + + let basename; + let query = ""; + let filename = file; + const hash = compilation.hash; + const querySplit = filename.indexOf("?"); + + if (querySplit >= 0) { + query = filename.substr(querySplit); + filename = filename.substr(0, querySplit); + } + + const lastSlashIndex = filename.lastIndexOf("/"); + + if (lastSlashIndex === -1) { + basename = filename; + } else { + basename = filename.substr(lastSlashIndex + 1); + } + + const data = { + hash, + chunk, + filename, + basename, + query + }; + + const comment = compilation.getPath(banner(data), data); + + compilation.assets[file] = new ConcatSource( + comment, + "\n", + compilation.assets[file] + ); + } + } + }); + }); + } +} + +module.exports = BannerPlugin; |