UNPKG

next

Version:

The React Framework

58 lines (57 loc) 2.65 kB
// Source: https://github.com/mondaychen/devtools-ignore-webpack-plugin/blob/e35ce41d9606a92a455ef247f509a1c2ccab5778/src/index.ts import { webpack } from 'next/dist/compiled/webpack/webpack'; // Following the naming conventions from // https://tc39.es/source-map/#source-map-format const IGNORE_LIST = 'ignoreList'; const PLUGIN_NAME = 'devtools-ignore-plugin'; function defaultShouldIgnorePath(path) { return path.includes('/node_modules/') || path.includes('/webpack/'); } function defaultIsSourceMapAsset(name) { return name.endsWith('.map'); } /** * This plugin adds a field to source maps that identifies which sources are * vendored or runtime-injected (aka third-party) sources. These are consumed by * Chrome DevTools to automatically ignore-list sources. */ export default class DevToolsIgnorePlugin { constructor(options = {}){ this.options = { shouldIgnorePath: options.shouldIgnorePath ?? defaultShouldIgnorePath, isSourceMapAsset: options.isSourceMapAsset ?? defaultIsSourceMapAsset }; } apply(compiler) { const { RawSource } = compiler.webpack.sources; compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation)=>{ compilation.hooks.processAssets.tap({ name: PLUGIN_NAME, stage: webpack.Compilation.PROCESS_ASSETS_STAGE_DEV_TOOLING, additionalAssets: true }, (assets)=>{ for (const [name, asset] of Object.entries(assets)){ // Instead of using `asset.map()` to fetch the source maps from // SourceMapSource assets, process them directly as a RawSource. // This is because `.map()` is slow and can take several seconds. if (!this.options.isSourceMapAsset(name)) { continue; } const mapContent = asset.source().toString(); if (!mapContent) { continue; } const sourcemap = JSON.parse(mapContent); const ignoreList = []; for (const [index, path] of sourcemap.sources.entries()){ if (this.options.shouldIgnorePath(path)) { ignoreList.push(index); } } sourcemap[IGNORE_LIST] = ignoreList; compilation.updateAsset(name, new RawSource(JSON.stringify(sourcemap))); } }); }); } } //# sourceMappingURL=devtools-ignore-list-plugin.js.map