diff options
Diffstat (limited to 'node_modules/webpack/lib/ExternalModule.js')
-rw-r--r-- | node_modules/webpack/lib/ExternalModule.js | 305 |
1 files changed, 177 insertions, 128 deletions
diff --git a/node_modules/webpack/lib/ExternalModule.js b/node_modules/webpack/lib/ExternalModule.js index 45c183b1a..8cb5e071c 100644 --- a/node_modules/webpack/lib/ExternalModule.js +++ b/node_modules/webpack/lib/ExternalModule.js @@ -1,128 +1,177 @@ -/*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
-*/
-"use strict";
-const Module = require("./Module");
-const OriginalSource = require("webpack-sources").OriginalSource;
-const RawSource = require("webpack-sources").RawSource;
-const WebpackMissingModule = require("./dependencies/WebpackMissingModule");
-const Template = require("./Template");
-
-class ExternalModule extends Module {
- constructor(request, type, userRequest) {
- super();
- this.request = request;
- this.userRequest = userRequest;
- this.type = type;
- this.built = false;
- this.external = true;
- }
-
- libIdent() {
- return this.userRequest;
- }
-
- chunkCondition(chunk) {
- return chunk.hasEntryModule();
- }
-
- identifier() {
- return "external " + JSON.stringify(this.request);
- }
-
- readableIdentifier() {
- return "external " + JSON.stringify(this.request);
- }
-
- needRebuild() {
- return false;
- }
-
- build(options, compilation, resolver, fs, callback) {
- this.builtTime = Date.now();
- callback();
- }
-
- getSourceForGlobalVariableExternal(variableName, type) {
- if(!Array.isArray(variableName)) {
- // make it an array as the look up works the same basically
- variableName = [variableName];
- }
-
- // needed for e.g. window["some"]["thing"]
- const objectLookup = variableName.map(r => `[${JSON.stringify(r)}]`).join("");
- return `(function() { module.exports = ${type}${objectLookup}; }());`;
- }
-
- getSourceForCommonJsExternal(moduleAndSpecifiers) {
- if(!Array.isArray(moduleAndSpecifiers)) {
- return `module.exports = require(${JSON.stringify(moduleAndSpecifiers)});`;
- }
-
- const moduleName = moduleAndSpecifiers[0];
- const objectLookup = moduleAndSpecifiers.slice(1).map(r => `[${JSON.stringify(r)}]`).join("");
- return `module.exports = require(${moduleName})${objectLookup};`;
- }
-
- checkExternalVariable(variableToCheck, request) {
- return `if(typeof ${variableToCheck} === 'undefined') {${WebpackMissingModule.moduleCode(request)}}\n`;
- }
-
- getSourceForAmdOrUmdExternal(id, optional, request) {
- const externalVariable = Template.toIdentifier(`__WEBPACK_EXTERNAL_MODULE_${id}__`);
- const missingModuleError = optional ? this.checkExternalVariable(externalVariable, request) : "";
- return `${missingModuleError}module.exports = ${externalVariable};`;
- }
-
- getSourceForDefaultCase(optional, request) {
- const missingModuleError = optional ? this.checkExternalVariable(request, request) : "";
- return `${missingModuleError}module.exports = ${request};`;
- }
-
- getSourceString() {
- const request = typeof this.request === "object" ? this.request[this.type] : this.request;
- switch(this.type) {
- case "this":
- case "window":
- case "global":
- return this.getSourceForGlobalVariableExternal(request, this.type);
- case "commonjs":
- case "commonjs2":
- return this.getSourceForCommonJsExternal(request);
- case "amd":
- case "umd":
- case "umd2":
- return this.getSourceForAmdOrUmdExternal(this.id, this.optional, request);
- default:
- return this.getSourceForDefaultCase(this.optional, request);
- }
- }
-
- getSource(sourceString) {
- if(this.useSourceMap) {
- return new OriginalSource(sourceString, this.identifier());
- }
-
- return new RawSource(sourceString);
- }
-
- source() {
- return this.getSource(
- this.getSourceString()
- );
- }
-
- size() {
- return 42;
- }
-
- updateHash(hash) {
- hash.update(this.type);
- hash.update(JSON.stringify(this.request));
- hash.update(JSON.stringify(Boolean(this.optional)));
- super.updateHash(hash);
- }
-}
-
-module.exports = ExternalModule;
+/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +"use strict"; + +const { OriginalSource, RawSource } = require("webpack-sources"); +const Module = require("./Module"); +const WebpackMissingModule = require("./dependencies/WebpackMissingModule"); +const Template = require("./Template"); + +/** @typedef {import("./util/createHash").Hash} Hash */ + +class ExternalModule extends Module { + constructor(request, type, userRequest) { + super("javascript/dynamic", null); + + // Info from Factory + this.request = request; + this.externalType = type; + this.userRequest = userRequest; + this.external = true; + } + + libIdent() { + return this.userRequest; + } + + chunkCondition(chunk) { + return chunk.hasEntryModule(); + } + + identifier() { + return "external " + JSON.stringify(this.request); + } + + readableIdentifier() { + return "external " + JSON.stringify(this.request); + } + + needRebuild() { + return false; + } + + build(options, compilation, resolver, fs, callback) { + this.built = true; + this.buildMeta = {}; + this.buildInfo = {}; + callback(); + } + + getSourceForGlobalVariableExternal(variableName, type) { + if (!Array.isArray(variableName)) { + // make it an array as the look up works the same basically + variableName = [variableName]; + } + + // needed for e.g. window["some"]["thing"] + const objectLookup = variableName + .map(r => `[${JSON.stringify(r)}]`) + .join(""); + return `(function() { module.exports = ${type}${objectLookup}; }());`; + } + + getSourceForCommonJsExternal(moduleAndSpecifiers) { + if (!Array.isArray(moduleAndSpecifiers)) { + return `module.exports = require(${JSON.stringify( + moduleAndSpecifiers + )});`; + } + + const moduleName = moduleAndSpecifiers[0]; + const objectLookup = moduleAndSpecifiers + .slice(1) + .map(r => `[${JSON.stringify(r)}]`) + .join(""); + return `module.exports = require(${JSON.stringify( + moduleName + )})${objectLookup};`; + } + + checkExternalVariable(variableToCheck, request) { + return `if(typeof ${variableToCheck} === 'undefined') {${WebpackMissingModule.moduleCode( + request + )}}\n`; + } + + getSourceForAmdOrUmdExternal(id, optional, request) { + const externalVariable = `__WEBPACK_EXTERNAL_MODULE_${Template.toIdentifier( + `${id}` + )}__`; + const missingModuleError = optional + ? this.checkExternalVariable(externalVariable, request) + : ""; + return `${missingModuleError}module.exports = ${externalVariable};`; + } + + getSourceForDefaultCase(optional, request) { + if (!Array.isArray(request)) { + // make it an array as the look up works the same basically + request = [request]; + } + + const variableName = request[0]; + const missingModuleError = optional + ? this.checkExternalVariable(variableName, request.join(".")) + : ""; + const objectLookup = request + .slice(1) + .map(r => `[${JSON.stringify(r)}]`) + .join(""); + return `${missingModuleError}module.exports = ${variableName}${objectLookup};`; + } + + getSourceString(runtime) { + const request = + typeof this.request === "object" && !Array.isArray(this.request) + ? this.request[this.externalType] + : this.request; + switch (this.externalType) { + case "this": + case "window": + case "self": + return this.getSourceForGlobalVariableExternal( + request, + this.externalType + ); + case "global": + return this.getSourceForGlobalVariableExternal( + runtime.outputOptions.globalObject, + this.externalType + ); + case "commonjs": + case "commonjs2": + return this.getSourceForCommonJsExternal(request); + case "amd": + case "umd": + case "umd2": + return this.getSourceForAmdOrUmdExternal( + this.id, + this.optional, + request + ); + default: + return this.getSourceForDefaultCase(this.optional, request); + } + } + + getSource(sourceString) { + if (this.useSourceMap) { + return new OriginalSource(sourceString, this.identifier()); + } + + return new RawSource(sourceString); + } + + source(dependencyTemplates, runtime) { + return this.getSource(this.getSourceString(runtime)); + } + + size() { + return 42; + } + + /** + * @param {Hash} hash the hash used to track dependencies + * @returns {void} + */ + updateHash(hash) { + hash.update(this.externalType); + hash.update(JSON.stringify(this.request)); + hash.update(JSON.stringify(Boolean(this.optional))); + super.updateHash(hash); + } +} + +module.exports = ExternalModule; |