@eaglesong/task-panorama
Version:
Eaglesong task for Panorama
125 lines • 5.87 kB
JavaScript
/* eslint-disable eslint-comments/no-unlimited-disable, unicorn/no-abusive-eslint-disable */
/* eslint-disable */
const { ConcatSource } = require('webpack-sources');
const ModuleFilenameHelpers = require('webpack/lib/ModuleFilenameHelpers');
const NormalModule = require('webpack/lib/NormalModule');
const SourceMapDevToolModuleOptionsPlugin = require('webpack/lib/SourceMapDevToolModuleOptionsPlugin');
const JavascriptModulesPlugin = require('webpack/lib/javascript/JavascriptModulesPlugin');
const ConcatenatedModule = require('webpack/lib/optimize/ConcatenatedModule');
const { absolutify } = require('webpack/lib/util/identifier');
/** @typedef {import("webpack-sources").Source} Source */
/** @typedef {import("./Compiler")} Compiler */
/** @type {WeakMap<Source, Source>} */
const cache = new WeakMap();
class InjectSourceMapDevToolPlugin {
/**
* @param {TODO} options Options object
*/
constructor(options = {}) {
if (typeof options === 'string') {
options = {
append: options,
};
}
this.variableName = options.variableName || '__webpack_sources__';
this.moduleFilenameTemplate =
options.moduleFilenameTemplate || 'webpack://[namespace]/[resource-path]?[hash]';
this.namespace = options.namespace || '';
this.options = options;
}
/**
* Apply the plugin
* @param {Compiler} compiler the compiler instance
* @returns {void}
*/
apply(compiler) {
const options = this.options;
compiler.hooks.compilation.tap('InjectSourceMapDevToolPlugin', compilation => {
const hooks = JavascriptModulesPlugin.getCompilationHooks(compilation);
new SourceMapDevToolModuleOptionsPlugin(options).apply(compilation);
const matchModule = ModuleFilenameHelpers.matchObject.bind(ModuleFilenameHelpers, options);
hooks.renderModuleContent.tap('InjectSourceMapDevToolPlugin', (source, m, { runtimeTemplate, chunkGraph }) => {
const cachedSource = cache.get(source);
if (cachedSource !== undefined) {
return cachedSource;
}
if (m instanceof NormalModule) {
const module = /** @type {NormalModule} */ m;
if (!matchModule(module.resource)) {
return source;
}
}
else if (m instanceof ConcatenatedModule) {
const concatModule = /** @type {ConcatenatedModule} */ m;
if (concatModule.rootModule instanceof NormalModule) {
const module = /** @type {NormalModule} */ concatModule.rootModule;
if (!matchModule(module.resource)) {
return source;
}
}
else {
return source;
}
}
else {
return source;
}
/** @type {{ [key: string]: TODO; }} */
let sourceMap;
let content;
if (source.sourceAndMap) {
const sourceAndMap = source.sourceAndMap(options);
sourceMap = sourceAndMap.map;
content = sourceAndMap.source;
}
else {
sourceMap = source.map(options);
content = source.source();
}
if (!sourceMap) {
return source;
}
// Clone (flat) the sourcemap to ensure that the mutations below do not persist.
sourceMap = { ...sourceMap };
const context = compiler.options.context;
const root = compiler.root;
const modules = sourceMap.sources.map(source => {
if (!source.startsWith('webpack://'))
return source;
source = absolutify(context, source.slice(10), root);
const module = compilation.findModule(source);
return module || source;
});
let moduleFilenames = modules.map(module => {
return ModuleFilenameHelpers.createFilename(module, {
moduleFilenameTemplate: this.moduleFilenameTemplate,
namespace: this.namespace,
}, {
requestShortener: runtimeTemplate.requestShortener,
chunkGraph,
});
});
moduleFilenames = ModuleFilenameHelpers.replaceDuplicates(moduleFilenames, (filename, i, n) => {
for (let j = 0; j < n; j++)
filename += '*';
return filename;
});
sourceMap.sources = moduleFilenames;
sourceMap.sourceRoot = options.sourceRoot || '';
const moduleId = chunkGraph.getModuleId(m);
sourceMap.file = `${moduleId}.js`;
const header = `if (typeof ${this.variableName} === undefined) ${this.variableName} = {};${this.variableName}[${moduleId}] = ${JSON.stringify(sourceMap)}`;
const evalSource = new ConcatSource(header, content);
cache.set(source, evalSource);
return evalSource;
});
hooks.chunkHash.tap('InjectSourceMapDevToolPlugin', (chunk, hash) => {
hash.update('InjectSourceMapDevToolPlugin');
hash.update('2');
});
});
}
}
module.exports = InjectSourceMapDevToolPlugin;
//# sourceMappingURL=InjectSourceMapDevToolPlugin.5.js.map
;