diff --git a/docs/Configuration.md b/docs/Configuration.md index a8b48cc9e8..b9319d570d 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -104,4 +104,4 @@ These options are only useful with React Native projects. | `getPolyfills` | `({platform: ?string}) => $ReadOnlyArray` | An optional list of polyfills to include in the bundle. The list defaults to a set of common polyfills for Number, String, Array, Object... | | `postProcessBundleSourcemap` | `PostProcessBundleSourcemap` | An optional function that can modify the code and source map of the bundle before it is written. Applied once for the entire bundle. | | `getModulesRunBeforeMainModule` | `(entryFilePath: string) => Array` | An array of modules to be required before the entry point. It should contain the absolute path of each module. | -| `postProcessModules` | `(modules: Array, entryFiles: Array) => Array` | A function that can change the resulting modules output. | +| `processModuleFilter` | `(module: Array) => boolean` | A filter function to discard specific modules from the output. | diff --git a/packages/metro-config/src/__tests__/__snapshots__/convertConfig-test.js.snap b/packages/metro-config/src/__tests__/__snapshots__/convertConfig-test.js.snap index 47db1c4889..4d2247693e 100644 --- a/packages/metro-config/src/__tests__/__snapshots__/convertConfig-test.js.snap +++ b/packages/metro-config/src/__tests__/__snapshots__/convertConfig-test.js.snap @@ -6,7 +6,7 @@ Object { "enhanceMiddleware": [Function], "getUseGlobalHotkey": [Function], "port": 8080, - "postProcessModules": [Function], + "processModuleFilter": [Function], "transformVariants": [Function], }, "serverOptions": Object { @@ -91,7 +91,7 @@ Object { "enhanceMiddleware": undefined, "getUseGlobalHotkey": [Function], "port": undefined, - "postProcessModules": undefined, + "processModuleFilter": undefined, "transformVariants": [Function], }, "serverOptions": Object { diff --git a/packages/metro-config/src/__tests__/__snapshots__/loadConfig-test.js.snap b/packages/metro-config/src/__tests__/__snapshots__/loadConfig-test.js.snap index f7d501123b..08005db603 100644 --- a/packages/metro-config/src/__tests__/__snapshots__/loadConfig-test.js.snap +++ b/packages/metro-config/src/__tests__/__snapshots__/loadConfig-test.js.snap @@ -69,7 +69,7 @@ Object { "getRunModuleStatement": [Function], "polyfillModuleNames": Array [], "postProcessBundleSourcemap": [Function], - "postProcessModules": [Function], + "processModuleFilter": [Function], }, "server": Object { "enhanceMiddleware": [Function], @@ -166,7 +166,7 @@ Object { "getRunModuleStatement": [Function], "polyfillModuleNames": Array [], "postProcessBundleSourcemap": [Function], - "postProcessModules": [Function], + "processModuleFilter": [Function], }, "server": Object { "enhanceMiddleware": [Function], diff --git a/packages/metro-config/src/configTypes.flow.js b/packages/metro-config/src/configTypes.flow.js index 8840ca86ac..bb7c8f7a12 100644 --- a/packages/metro-config/src/configTypes.flow.js +++ b/packages/metro-config/src/configTypes.flow.js @@ -19,10 +19,8 @@ import type { PostProcessBundleSourcemap, } from 'metro/src/Bundler'; import type {TransformResult} from 'metro/src/DeltaBundler'; -import type { - Module, - TransformVariants, -} from 'metro/src/ModuleGraph/types.flow.js'; +import type {TransformVariants} from 'metro/src/ModuleGraph/types.flow.js'; +import type {Module} from 'metro/src/DeltaBundler/types.flow.js'; import type {DynamicRequiresBehavior} from 'metro/src/ModuleGraph/worker/collectDependencies'; import type Server from 'metro/src/Server'; import type {Reporter} from 'metro/src/lib/reporting'; @@ -201,10 +199,7 @@ export type OldConfigT = { */ createModuleIdFactory?: () => (path: string) => number, - postProcessModules?: ( - modules: $ReadOnlyArray, - entryFiles: Array, - ) => $ReadOnlyArray, + processModuleFilter: (modules: Module<>) => boolean, transformVariants?: () => TransformVariants, }; @@ -318,11 +313,6 @@ export type InputConfigT = { * contain the absolute path of each module. */ getModulesRunBeforeMainModule?: (entryFilePath: string) => Array, - - postProcessModules?: ( - modules: $ReadOnlyArray, - paths: Array, - ) => $ReadOnlyArray, }, transformer?: { assetRegistryPath?: string, @@ -430,10 +420,7 @@ export type IntermediateConfigT = { getPolyfills: ({platform: ?string}) => $ReadOnlyArray, postProcessBundleSourcemap: PostProcessBundleSourcemap, getModulesRunBeforeMainModule: (entryFilePath: string) => Array, - postProcessModules: ( - modules: $ReadOnlyArray, - paths: Array, - ) => $ReadOnlyArray, + processModuleFilter: (modules: Module<>) => boolean, createModuleIdFactory: () => (path: string) => number, }, transformer: { diff --git a/packages/metro-config/src/convertConfig.js b/packages/metro-config/src/convertConfig.js index d112653ae2..6891946a07 100644 --- a/packages/metro-config/src/convertConfig.js +++ b/packages/metro-config/src/convertConfig.js @@ -19,10 +19,7 @@ const getMaxWorkers = require('metro/src/lib/getMaxWorkers'); const {Terminal} = require('metro-core'); import type {ConfigT, OldConfigT, Middleware} from './configTypes.flow'; -import type { - Module, - TransformVariants, -} from 'metro/src/ModuleGraph/types.flow.js'; +import type {TransformVariants} from 'metro/src/ModuleGraph/types.flow.js'; import type Server from 'metro/src/Server'; import type {Reporter} from 'metro/src/lib/reporting'; import type {Options as ServerOptions} from 'metro/src/shared/types.flow'; @@ -88,7 +85,7 @@ function convertOldToNew({ getWorkerPath, extraNodeModules, transformVariants, - postProcessModules, + processModuleFilter, } = config; const assetExts = defaults.assetExts.concat( @@ -127,7 +124,7 @@ function convertOldToNew({ getRunModuleStatement, getPolyfills, postProcessBundleSourcemap, - postProcessModules: postProcessModules || (modules => modules), + processModuleFilter: processModuleFilter || (module => true), getModulesRunBeforeMainModule, }, server: { @@ -167,10 +164,6 @@ export type ConvertedOldConfigT = { port: number, getUseGlobalHotkey: () => boolean, transformVariants: () => TransformVariants, - postProcessModules: ( - modules: $ReadOnlyArray, - paths: Array, - ) => $ReadOnlyArray, }, }; @@ -215,8 +208,8 @@ function convertNewToOld(newConfig: ConfigT): ConvertedOldConfigT { getPolyfills, postProcessBundleSourcemap, getModulesRunBeforeMainModule, - postProcessModules, createModuleIdFactory, + processModuleFilter, } = serializer; const {useGlobalHotkey, port, enhanceMiddleware} = server; @@ -274,8 +267,8 @@ function convertNewToOld(newConfig: ConfigT): ConvertedOldConfigT { enhanceMiddleware, getUseGlobalHotkey: () => useGlobalHotkey, port, + processModuleFilter, transformVariants: () => transformVariants, - postProcessModules, }, }; diff --git a/packages/metro-config/src/defaults/index.js b/packages/metro-config/src/defaults/index.js index a995e0bf4c..c461850931 100644 --- a/packages/metro-config/src/defaults/index.js +++ b/packages/metro-config/src/defaults/index.js @@ -53,7 +53,7 @@ const getDefaultValues = (projectRoot: ?string): IntermediateConfigT => ({ getPolyfills: () => [], postProcessBundleSourcemap: ({code, map, outFileName}) => ({code, map}), getModulesRunBeforeMainModule: () => [], - postProcessModules: modules => modules, + processModuleFilter: module => true, createModuleIdFactory: defaultCreateModuleIdFactory, }, diff --git a/packages/metro-config/src/oldConfig.js b/packages/metro-config/src/oldConfig.js index be9532dcb7..cae855bd9d 100644 --- a/packages/metro-config/src/oldConfig.js +++ b/packages/metro-config/src/oldConfig.js @@ -56,7 +56,7 @@ const DEFAULT = ({ getResolverMainFields: () => ['browser', 'main'], getModulesRunBeforeMainModule: () => [], getWorkerPath: () => null, - postProcessModules: modules => modules, + processModuleFilter: module => true, }: ConfigT); module.exports = { diff --git a/packages/metro/src/DeltaBundler/Serializers/__tests__/deltaJSBundle-test.js b/packages/metro/src/DeltaBundler/Serializers/__tests__/deltaJSBundle-test.js index 05d39bdd31..06496a202d 100644 --- a/packages/metro/src/DeltaBundler/Serializers/__tests__/deltaJSBundle-test.js +++ b/packages/metro/src/DeltaBundler/Serializers/__tests__/deltaJSBundle-test.js @@ -41,6 +41,7 @@ const graph = { }; const options = { + processModuleFilter: module => true, createModuleId: createModuleIdFactory(), dev: true, getRunModuleStatement: moduleId => `require(${JSON.stringify(moduleId)});`, diff --git a/packages/metro/src/DeltaBundler/Serializers/__tests__/getAllFiles-test.js b/packages/metro/src/DeltaBundler/Serializers/__tests__/getAllFiles-test.js index 86ec5a6dd3..b44cf033b6 100644 --- a/packages/metro/src/DeltaBundler/Serializers/__tests__/getAllFiles-test.js +++ b/packages/metro/src/DeltaBundler/Serializers/__tests__/getAllFiles-test.js @@ -38,7 +38,9 @@ describe('getOrderedDependencyPaths', () => { await getAllFiles( [{path: '/tmp/0.js', output: [{type: 'js/module'}]}], graph, - {}, + { + processModuleFilter: () => true, + }, ), ).toEqual([ '/tmp/0.js', @@ -60,7 +62,9 @@ describe('getOrderedDependencyPaths', () => { ]), }; - expect(await getAllFiles([], graph, {})).toEqual([ + expect( + await getAllFiles([], graph, {processModuleFilter: () => true}), + ).toEqual([ '/tmp/1.js', '/tmp/2.png@2x', '/tmp/2.png@3x', diff --git a/packages/metro/src/DeltaBundler/Serializers/__tests__/getAssets-test.js b/packages/metro/src/DeltaBundler/Serializers/__tests__/getAssets-test.js index acd101ba92..49ad6d16a6 100644 --- a/packages/metro/src/DeltaBundler/Serializers/__tests__/getAssets-test.js +++ b/packages/metro/src/DeltaBundler/Serializers/__tests__/getAssets-test.js @@ -34,7 +34,12 @@ it('should return the bundle assets', async () => { ]), }; - expect(await getAssets(graph, {watchFolders: ['/tmp']})).toEqual([ + expect( + await getAssets(graph, { + watchFolders: ['/tmp'], + processModuleFilter: () => true, + }), + ).toEqual([ {path: '/tmp/3.png', localPath: '3.png'}, {path: '/tmp/5.mov', localPath: '5.mov'}, ]); diff --git a/packages/metro/src/DeltaBundler/Serializers/__tests__/getRamBundleInfo-test.js b/packages/metro/src/DeltaBundler/Serializers/__tests__/getRamBundleInfo-test.js index 3fa876ac7b..7f55920279 100644 --- a/packages/metro/src/DeltaBundler/Serializers/__tests__/getRamBundleInfo-test.js +++ b/packages/metro/src/DeltaBundler/Serializers/__tests__/getRamBundleInfo-test.js @@ -49,6 +49,7 @@ const getRunModuleStatement = moduleId => it('should return the RAM bundle info', async () => { expect( await getRamBundleInfo('/root/entry.js', pre, graph, { + processModuleFilter: module => true, createModuleId: path => path, excludeSource: false, getRunModuleStatement, @@ -72,6 +73,7 @@ it('should use the preloadedModules and ramGroup configs to build a RAM bundle', }); const bundleInfo = await getRamBundleInfo('/root/entry.js', pre, graph, { + processModuleFilter: module => true, createModuleId: path => path, excludeSource: false, getRunModuleStatement, diff --git a/packages/metro/src/DeltaBundler/Serializers/__tests__/plainJSBundle-test.js b/packages/metro/src/DeltaBundler/Serializers/__tests__/plainJSBundle-test.js index 4c3065575c..c0e3335cb0 100644 --- a/packages/metro/src/DeltaBundler/Serializers/__tests__/plainJSBundle-test.js +++ b/packages/metro/src/DeltaBundler/Serializers/__tests__/plainJSBundle-test.js @@ -55,6 +55,7 @@ it('should serialize a very simple bundle', () => { entryPoints: ['foo'], }, { + processModuleFilter: () => true, createModuleId: filePath => path.basename(filePath), dev: true, getRunModuleStatement, @@ -88,6 +89,7 @@ it('should add runBeforeMainModule statements if found in the graph', () => { entryPoints: ['/root/foo'], }, { + processModuleFilter: () => true, createModuleId: filePath => path.basename(filePath), dev: true, getRunModuleStatement, @@ -122,6 +124,7 @@ it('should handle numeric module ids', () => { entryPoints: ['/root/foo'], }, { + processModuleFilter: () => true, createModuleId: createModuleIdFactory(), dev: true, getRunModuleStatement, @@ -156,6 +159,7 @@ it('outputs custom runModule statements', () => { entryPoints: ['/root/foo'], }, { + processModuleFilter: () => true, createModuleId: filePath => path.basename(filePath), dev: true, getRunModuleStatement: moduleId => diff --git a/packages/metro/src/DeltaBundler/Serializers/__tests__/sourceMapString-test.js b/packages/metro/src/DeltaBundler/Serializers/__tests__/sourceMapString-test.js index 4171d4d0e2..bcf7ce8c70 100644 --- a/packages/metro/src/DeltaBundler/Serializers/__tests__/sourceMapString-test.js +++ b/packages/metro/src/DeltaBundler/Serializers/__tests__/sourceMapString-test.js @@ -65,7 +65,10 @@ it('should serialize a very simple bundle', () => { dependencies: new Map([['foo', fooModule], ['bar', barModule]]), entryPoints: ['foo'], }, - {excludesSource: false}, + { + excludesSource: false, + processModuleFilter: module => true, + }, ), ), ).toEqual({ diff --git a/packages/metro/src/DeltaBundler/Serializers/deltaJSBundle.js b/packages/metro/src/DeltaBundler/Serializers/deltaJSBundle.js index 2f735718b0..36447d7230 100644 --- a/packages/metro/src/DeltaBundler/Serializers/deltaJSBundle.js +++ b/packages/metro/src/DeltaBundler/Serializers/deltaJSBundle.js @@ -18,6 +18,7 @@ const {getJsOutput, isJsModule} = require('./helpers/js'); import type {DeltaResult, Graph, Module} from '../types.flow'; type Options = {| + +processModuleFilter: (module: Module<>) => boolean, +createModuleId: string => number | string, +dev: boolean, +getRunModuleStatement: (number | string) => string, @@ -39,8 +40,10 @@ function deltaJSBundle( const outputPost = []; const outputDelta = []; + const {processModuleFilter} = options; + for (const module of delta.modified.values()) { - if (isJsModule(module)) { + if (isJsModule(module) && processModuleFilter(module)) { outputDelta.push([ options.createModuleId(module.path), wrapModule(module, options), @@ -56,7 +59,7 @@ function deltaJSBundle( let i = -1; for (const module of pre) { - if (isJsModule(module)) { + if (isJsModule(module) && processModuleFilter(module)) { outputPre.push([i, getJsOutput(module).data.code]); i--; } @@ -65,7 +68,7 @@ function deltaJSBundle( const appendScripts = getAppendScripts(entryPoint, graph, options); for (const module of appendScripts) { - if (isJsModule(module)) { + if (isJsModule(module) && processModuleFilter(module)) { outputPost.push([ options.createModuleId(module.path), getJsOutput(module).data.code, diff --git a/packages/metro/src/DeltaBundler/Serializers/getAllFiles.js b/packages/metro/src/DeltaBundler/Serializers/getAllFiles.js index f68c85c5dd..6a8370609f 100644 --- a/packages/metro/src/DeltaBundler/Serializers/getAllFiles.js +++ b/packages/metro/src/DeltaBundler/Serializers/getAllFiles.js @@ -17,6 +17,7 @@ import type {Graph, Module} from '../types.flow'; type Options = {| platform: ?string, + +processModuleFilter: (module: Module<>) => boolean, |}; async function getAllFiles( @@ -25,15 +26,18 @@ async function getAllFiles( options: Options, ): Promise<$ReadOnlyArray> { const modules = graph.dependencies; + const {processModuleFilter} = options; const promises = []; for (const module of pre) { - promises.push([module.path]); + if (processModuleFilter(module)) { + promises.push([module.path]); + } } for (const module of modules.values()) { - if (!isJsModule(module)) { + if (!isJsModule(module) || !processModuleFilter(module)) { continue; } diff --git a/packages/metro/src/DeltaBundler/Serializers/getAssets.js b/packages/metro/src/DeltaBundler/Serializers/getAssets.js index d80c007d96..0e0332872b 100644 --- a/packages/metro/src/DeltaBundler/Serializers/getAssets.js +++ b/packages/metro/src/DeltaBundler/Serializers/getAssets.js @@ -16,9 +16,10 @@ const {getAssetData} = require('../../Assets'); const {getJsOutput, isJsModule} = require('./helpers/js'); import type {AssetData} from '../../Assets'; -import type {Graph} from '../types.flow'; +import type {Graph, Module} from '../types.flow'; type Options = {| + +processModuleFilter: (module: Module<>) => boolean, assetPlugins: $ReadOnlyArray, platform: ?string, watchFolders: $ReadOnlyArray, @@ -29,9 +30,14 @@ async function getAssets( options: Options, ): Promise<$ReadOnlyArray> { const promises = []; + const {processModuleFilter} = options; for (const module of graph.dependencies.values()) { - if (isJsModule(module) && getJsOutput(module).type === 'js/module/asset') { + if ( + isJsModule(module) && + processModuleFilter(module) && + getJsOutput(module).type === 'js/module/asset' + ) { promises.push( getAssetData( module.path, diff --git a/packages/metro/src/DeltaBundler/Serializers/getRamBundleInfo.js b/packages/metro/src/DeltaBundler/Serializers/getRamBundleInfo.js index 5580f36712..4af751de51 100644 --- a/packages/metro/src/DeltaBundler/Serializers/getRamBundleInfo.js +++ b/packages/metro/src/DeltaBundler/Serializers/getRamBundleInfo.js @@ -24,6 +24,7 @@ import type {ModuleTransportLike} from '../../shared/types.flow'; import type {Graph, Module} from '../types.flow'; type Options = {| + +processModuleFilter: (module: Module<>) => boolean, +createModuleId: string => number, +dev: boolean, +excludeSource: boolean, @@ -57,22 +58,26 @@ async function getRamBundleInfo( modules.forEach(module => options.createModuleId(module.path)); - const ramModules = modules.filter(isJsModule).map(module => ({ - id: options.createModuleId(module.path), - code: wrapModule(module, options), - map: fullSourceMapObject( - [module], - {dependencies: new Map(), entryPoints: []}, - { - excludeSource: options.excludeSource, - }, - ), - name: path.basename(module.path), - sourcePath: module.path, - source: module.getSource(), - type: nullthrows(module.output.find(({type}) => type.startsWith('js'))) - .type, - })); + const ramModules = modules + .filter(isJsModule) + .filter(options.processModuleFilter) + .map(module => ({ + id: options.createModuleId(module.path), + code: wrapModule(module, options), + map: fullSourceMapObject( + [module], + {dependencies: new Map(), entryPoints: []}, + { + excludeSource: options.excludeSource, + processModuleFilter: options.processModuleFilter, + }, + ), + name: path.basename(module.path), + sourcePath: module.path, + source: module.getSource(), + type: nullthrows(module.output.find(({type}) => type.startsWith('js'))) + .type, + })); const {preloadedModules, ramGroups} = await _getRamOptions( entryPoint, diff --git a/packages/metro/src/DeltaBundler/Serializers/plainJSBundle.js b/packages/metro/src/DeltaBundler/Serializers/plainJSBundle.js index 20e088280b..ac5d8a881e 100644 --- a/packages/metro/src/DeltaBundler/Serializers/plainJSBundle.js +++ b/packages/metro/src/DeltaBundler/Serializers/plainJSBundle.js @@ -17,6 +17,7 @@ const {isJsModule, wrapModule} = require('./helpers/js'); import type {Graph, Module} from '../types.flow'; type Options = {| + +processModuleFilter: (module: Module<>) => boolean, +createModuleId: string => number | string, +dev: boolean, +getRunModuleStatement: (number | string) => string, @@ -42,6 +43,7 @@ function plainJSBundle( ...getAppendScripts(entryPoint, graph, options), ] .filter(isJsModule) + .filter(options.processModuleFilter) .map(module => wrapModule(module, options)) .join('\n'); } diff --git a/packages/metro/src/DeltaBundler/Serializers/sourceMapObject.js b/packages/metro/src/DeltaBundler/Serializers/sourceMapObject.js index 156285bb1e..d4a1137cd9 100644 --- a/packages/metro/src/DeltaBundler/Serializers/sourceMapObject.js +++ b/packages/metro/src/DeltaBundler/Serializers/sourceMapObject.js @@ -19,10 +19,14 @@ import type {BabelSourceMap} from '@babel/core'; function fullSourceMapObject( pre: $ReadOnlyArray>, graph: Graph<>, - options: {|+excludeSource: boolean|}, + options: {| + +excludeSource: boolean, + +processModuleFilter: (module: Module<>) => boolean, + |}, ): BabelSourceMap { const modules = [...pre, ...graph.dependencies.values()] .filter(isJsModule) + .filter(options.processModuleFilter) .map(module => { return { ...getJsOutput(module).data, diff --git a/packages/metro/src/DeltaBundler/Serializers/sourceMapString.js b/packages/metro/src/DeltaBundler/Serializers/sourceMapString.js index e03d2c4970..ed8b8ce020 100644 --- a/packages/metro/src/DeltaBundler/Serializers/sourceMapString.js +++ b/packages/metro/src/DeltaBundler/Serializers/sourceMapString.js @@ -18,10 +18,14 @@ import type {Graph, Module} from '../types.flow'; function fullSourceMap( pre: $ReadOnlyArray>, graph: Graph<>, - options: {|+excludeSource: boolean|}, + options: {| + +excludeSource: boolean, + +processModuleFilter: (module: Module<>) => boolean, + |}, ): string { const modules = [...pre, ...graph.dependencies.values()] .filter(isJsModule) + .filter(options.processModuleFilter) .map(module => { return { ...getJsOutput(module).data, diff --git a/packages/metro/src/Server.js b/packages/metro/src/Server.js index 767d8f385a..476c5d94da 100644 --- a/packages/metro/src/Server.js +++ b/packages/metro/src/Server.js @@ -160,6 +160,7 @@ class Server { return { code: plainJSBundle(entryPoint, graphInfo.prepend, graphInfo.graph, { + processModuleFilter: this._config.serializer.processModuleFilter, createModuleId: this._createModuleId, getRunModuleStatement: this._config.serializer.getRunModuleStatement, dev: options.dev, @@ -172,6 +173,7 @@ class Server { }), map: sourceMapString(graphInfo.prepend, graphInfo.graph, { excludeSource: options.excludeSource, + processModuleFilter: this._config.serializer.processModuleFilter, }), }; } @@ -209,6 +211,7 @@ class Server { graphInfo.prepend, graphInfo.graph, { + processModuleFilter: this._config.serializer.processModuleFilter, createModuleId: this._createModuleId, dev: options.dev, excludeSource: options.excludeSource, @@ -229,6 +232,7 @@ class Server { const {graph} = await this._buildGraph(options); return await getAssets(graph, { + processModuleFilter: this._config.serializer.processModuleFilter, assetPlugins: options.assetPlugins, platform: options.platform, watchFolders: this._config.watchFolders, @@ -253,7 +257,10 @@ class Server { options.platform || parsePlatformFilePath(options.entryFile, this._platforms).platform; - return await getAllFiles(prepend, graph, {platform}); + return await getAllFiles(prepend, graph, { + platform, + processModuleFilter: this._config.serializer.processModuleFilter, + }); } async _buildGraph(options: BundleOptions): Promise { @@ -602,6 +609,7 @@ class Server { sequenceId, graph, { + processModuleFilter: this._config.serializer.processModuleFilter, createModuleId: this._createModuleId, dev: options.dev, getRunModuleStatement: this._config.serializer @@ -670,6 +678,7 @@ class Server { result = { bundle: plainJSBundle(options.entryFile, prepend, graph, { + processModuleFilter: this._config.serializer.processModuleFilter, createModuleId: this._createModuleId, getRunModuleStatement: this._config.serializer.getRunModuleStatement, dev: options.dev, @@ -752,6 +761,7 @@ class Server { sourceMap = sourceMapString(prepend, graph, { excludeSource: options.excludeSource, + processModuleFilter: this._config.serializer.processModuleFilter, }); } catch (error) { this._handleError(mres, this._optionsHash(options), error); @@ -890,6 +900,7 @@ class Server { return sourceMapObject(prepend, graph, { excludeSource: options.excludeSource, + processModuleFilter: this._config.serializer.processModuleFilter, }); }