@lynx-js/rspeedy
Version:
A webpack/rspack-based frontend toolchain for Lynx
100 lines (99 loc) • 4.99 kB
JavaScript
export const __rspack_esm_id = "src_plugins_sourcemap_plugin_ts";
export const __rspack_esm_ids = [
"src_plugins_sourcemap_plugin_ts"
];
export const __webpack_modules__ = {
"./src/plugins/sourcemap.plugin.ts" (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
__webpack_require__.d(__webpack_exports__, {
pluginSourcemap: ()=>pluginSourcemap
});
var isProduction = 'production' === process.env.NODE_ENV;
var prefix = 'Invariant failed';
function invariant(condition, message) {
if (condition) return;
if (isProduction) throw new Error(prefix);
var provided = 'function' == typeof message ? message() : message;
var value = provided ? "".concat(prefix, ": ").concat(provided) : prefix;
throw new Error(value);
}
class EvalSourceMapDevToolPlugin_EvalSourceMapDevToolPlugin {
options;
constructor(options){
this.options = options;
}
apply(compiler) {
const { EvalSourceMapDevToolPlugin } = compiler.webpack;
new EvalSourceMapDevToolPlugin(this.options).apply(compiler);
}
}
class SourceMapDevToolPlugin_SourceMapDevToolPlugin {
options;
constructor(options){
this.options = options;
}
apply(compiler) {
const { SourceMapDevToolPlugin } = compiler.webpack;
new SourceMapDevToolPlugin(this.options).apply(compiler);
}
}
function pluginSourcemap() {
return {
name: 'lynx:rsbuild:sourcemap',
pre: [
'lynx:rsbuild:dev'
],
setup (api) {
api.modifyBundlerChain((chain, { isDev })=>{
const { dev, output, server } = api.getRsbuildConfig('current');
const publicPath = isDev ? dev?.assetPrefix : output?.assetPrefix;
if (false === publicPath) return;
invariant('string' == typeof publicPath || void 0 === publicPath, `dev.assetPrefix should be normalized to string, got ${dev?.assetPrefix}`);
applySourceMapPlugin(chain, getDevtoolFromSourceMap(), publicPath?.replaceAll('<port>', String(api.context.devServer?.port ?? server?.port)));
function getDevtoolFromSourceMap() {
const DEFAULT_DEV_DEVTOOL = 'cheap-module-source-map';
switch(typeof output?.sourceMap){
case 'boolean':
if (output.sourceMap) return isDev ? DEFAULT_DEV_DEVTOOL : 'source-map';
return false;
case 'undefined':
case 'object':
return output?.sourceMap?.js ?? (isDev ? DEFAULT_DEV_DEVTOOL : false);
}
}
});
}
};
}
function applySourceMapPlugin(chain, devtool, publicPath) {
if (false === devtool) return;
const CHAIN_ID_DEV_SOURCEMAP = 'lynx:sourcemap';
const output = chain.get('output');
if (devtool.includes('source-map')) {
const hidden = devtool.includes('hidden');
const inline = devtool.includes('inline');
const evalWrapped = devtool.includes('eval');
const cheap = devtool.includes('cheap');
const moduleMaps = devtool.includes('module');
const noSources = devtool.includes('nosources');
const debugIds = devtool.includes('debugids');
const options = {
filename: inline ? null : output?.sourceMapFilename ?? '[file].map[query]',
moduleFilenameTemplate: output?.devtoolModuleFilenameTemplate ?? 'file://[absolute-resource-path]',
fallbackModuleFilenameTemplate: output?.devtoolFallbackModuleFilenameTemplate ?? 'file://[absolute-resource-path]?[hash]',
append: hidden ? false : void 0,
module: moduleMaps ? true : !cheap,
columns: !cheap,
noSources,
namespace: output?.devtoolNamespace,
publicPath,
debugIds
};
chain.devtool(false).plugin(CHAIN_ID_DEV_SOURCEMAP).when(evalWrapped, (plugin)=>plugin.use(EvalSourceMapDevToolPlugin_EvalSourceMapDevToolPlugin, [
options
]), (plugin)=>plugin.use(SourceMapDevToolPlugin_SourceMapDevToolPlugin, [
options
]));
}
}
}
};