| /* |
| 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 DelegatedSourceDependency = require("./dependencies/DelegatedSourceDependency"); |
| const DelegatedExportsDependency = require("./dependencies/DelegatedExportsDependency"); |
| |
| /** @typedef {import("./dependencies/ModuleDependency")} ModuleDependency */ |
| /** @typedef {import("./util/createHash").Hash} Hash */ |
| |
| class DelegatedModule extends Module { |
| constructor(sourceRequest, data, type, userRequest, originalRequest) { |
| super("javascript/dynamic", null); |
| |
| // Info from Factory |
| this.sourceRequest = sourceRequest; |
| this.request = data.id; |
| this.type = type; |
| this.userRequest = userRequest; |
| this.originalRequest = originalRequest; |
| this.delegateData = data; |
| |
| // Build info |
| this.delegatedSourceDependency = undefined; |
| } |
| |
| libIdent(options) { |
| return typeof this.originalRequest === "string" |
| ? this.originalRequest |
| : this.originalRequest.libIdent(options); |
| } |
| |
| identifier() { |
| return `delegated ${JSON.stringify(this.request)} from ${ |
| this.sourceRequest |
| }`; |
| } |
| |
| readableIdentifier() { |
| return `delegated ${this.userRequest} from ${this.sourceRequest}`; |
| } |
| |
| needRebuild() { |
| return false; |
| } |
| |
| build(options, compilation, resolver, fs, callback) { |
| this.built = true; |
| this.buildMeta = Object.assign({}, this.delegateData.buildMeta); |
| this.buildInfo = {}; |
| this.delegatedSourceDependency = new DelegatedSourceDependency( |
| this.sourceRequest |
| ); |
| this.addDependency(this.delegatedSourceDependency); |
| this.addDependency( |
| new DelegatedExportsDependency(this, this.delegateData.exports || true) |
| ); |
| callback(); |
| } |
| |
| source(depTemplates, runtime) { |
| const dep = /** @type {DelegatedSourceDependency} */ (this.dependencies[0]); |
| const sourceModule = dep.module; |
| let str; |
| |
| if (!sourceModule) { |
| str = WebpackMissingModule.moduleCode(this.sourceRequest); |
| } else { |
| str = `module.exports = (${runtime.moduleExports({ |
| module: sourceModule, |
| request: dep.request |
| })})`; |
| |
| switch (this.type) { |
| case "require": |
| str += `(${JSON.stringify(this.request)})`; |
| break; |
| case "object": |
| str += `[${JSON.stringify(this.request)}]`; |
| break; |
| } |
| |
| str += ";"; |
| } |
| |
| if (this.useSourceMap) { |
| return new OriginalSource(str, this.identifier()); |
| } else { |
| return new RawSource(str); |
| } |
| } |
| |
| size() { |
| return 42; |
| } |
| |
| /** |
| * @param {Hash} hash the hash used to track dependencies |
| * @returns {void} |
| */ |
| updateHash(hash) { |
| hash.update(this.type); |
| hash.update(JSON.stringify(this.request)); |
| super.updateHash(hash); |
| } |
| } |
| |
| module.exports = DelegatedModule; |