diff --git a/packages/metro/src/DeltaBundler/__tests__/resolver-test.js b/packages/metro/src/DeltaBundler/__tests__/resolver-test.js index 70e3fc8231..72778a92ac 100644 --- a/packages/metro/src/DeltaBundler/__tests__/resolver-test.js +++ b/packages/metro/src/DeltaBundler/__tests__/resolver-test.js @@ -451,6 +451,42 @@ function dep(name: string): TransformResultDependency { }); }); + describe('blockList config param', () => { + test('hides files matching a pattern in a blockList array', async () => { + setMockFileSystem({ + 'index.js': '', + 'a.js': '', + 'blocked.js': '', + }); + + resolver = await createResolver({ + resolver: {blockList: [/blocked\.js$/]}, + }); + + expect(resolver.resolve(p('/root/index.js'), dep('./a'))).toEqual({ + type: 'sourceFile', + filePath: p('/root/a.js'), + }); + expect(() => + resolver.resolve(p('/root/index.js'), dep('./blocked')), + ).toThrow(/Unable to resolve module \.\/blocked/); + }); + + test('does not hide any file with an empty blockList array', async () => { + setMockFileSystem({ + 'index.js': '', + 'a.js': '', + }); + + resolver = await createResolver({resolver: {blockList: []}}); + + expect(resolver.resolve(p('/root/index.js'), dep('./a'))).toEqual({ + type: 'sourceFile', + filePath: p('/root/a.js'), + }); + }); + }); + describe('absolute paths', () => { test('supports requiring absolute paths', async () => { setMockFileSystem({ diff --git a/packages/metro/src/node-haste/DependencyGraph/createFileMap.js b/packages/metro/src/node-haste/DependencyGraph/createFileMap.js index 9a3729307a..caabaf1be8 100644 --- a/packages/metro/src/node-haste/DependencyGraph/createFileMap.js +++ b/packages/metro/src/node-haste/DependencyGraph/createFileMap.js @@ -22,6 +22,11 @@ const flattenBlockList = (regexes: ConfigT['resolver']['blockList']) => { if (!Array.isArray(regexes)) { return regexes; } + // An empty list blocks nothing. Joining no patterns would give an empty + // RegExp, which matches every path. + if (regexes.length === 0) { + return /.^/; + } return new RegExp( regexes .map((regex, index) => {