From 460e786115a3ae20f8148bb13568b4f0149fdd3f Mon Sep 17 00:00:00 2001 From: Will Binns-Smith Date: Mon, 23 May 2022 07:24:21 -0700 Subject: [PATCH] NodeResolver: Reload the closest package.json to an asset if it's a package entry (#7909) --- .../index.js | 3 + .../node_modules/foo/bar/baz/package.json | 3 + .../node_modules/foo/bar/baz/real-bar.js | 1 + .../node_modules/foo/bar/package.json | 3 + .../node_modules/foo/package.json | 1 + .../side-effects-package-redirect-up/index.js | 3 + .../node_modules/foo/bar/package.json | 3 + .../node_modules/foo/package.json | 3 + .../node_modules/foo/real-bar.js | 1 + .../integration-tests/test/scope-hoisting.js | 34 ++ .../node-resolver-core/src/NodeResolver.js | 10 +- .../foo/bar/baz/package.json | 3 + .../foo/bar/baz/real-bar.js | 1 + .../foo/bar/package.json | 3 + .../foo/package.json | 1 + .../package.json | 1 + .../foo/bar/package.json | 3 + .../foo/package.json | 3 + .../foo/real-bar.js | 1 + .../package.json | 1 + .../utils/node-resolver-core/test/resolver.js | 304 ++++++++++++++++++ 21 files changed, 385 insertions(+), 1 deletion(-) create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-down/index.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-down/node_modules/foo/bar/baz/package.json create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-down/node_modules/foo/bar/baz/real-bar.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-down/node_modules/foo/bar/package.json create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-down/node_modules/foo/package.json create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-up/index.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-up/node_modules/foo/bar/package.json create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-up/node_modules/foo/package.json create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-up/node_modules/foo/real-bar.js create mode 100644 packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-down/foo/bar/baz/package.json create mode 100644 packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-down/foo/bar/baz/real-bar.js create mode 100644 packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-down/foo/bar/package.json create mode 100644 packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-down/foo/package.json create mode 100644 packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-down/package.json create mode 100644 packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-up/foo/bar/package.json create mode 100644 packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-up/foo/package.json create mode 100644 packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-up/foo/real-bar.js create mode 100644 packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-up/package.json diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-down/index.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-down/index.js new file mode 100644 index 00000000000..3afbd9e39b2 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-down/index.js @@ -0,0 +1,3 @@ +import {one} from 'foo/bar' + +output = one; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-down/node_modules/foo/bar/baz/package.json b/packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-down/node_modules/foo/bar/baz/package.json new file mode 100644 index 00000000000..a43829151e1 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-down/node_modules/foo/bar/baz/package.json @@ -0,0 +1,3 @@ +{ + "sideEffects": false +} diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-down/node_modules/foo/bar/baz/real-bar.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-down/node_modules/foo/bar/baz/real-bar.js new file mode 100644 index 00000000000..d8157863065 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-down/node_modules/foo/bar/baz/real-bar.js @@ -0,0 +1 @@ +export const one = 1; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-down/node_modules/foo/bar/package.json b/packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-down/node_modules/foo/bar/package.json new file mode 100644 index 00000000000..518cd1ba105 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-down/node_modules/foo/bar/package.json @@ -0,0 +1,3 @@ +{ + "module": "baz/real-bar.js" +} diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-down/node_modules/foo/package.json b/packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-down/node_modules/foo/package.json new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-down/node_modules/foo/package.json @@ -0,0 +1 @@ +{} diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-up/index.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-up/index.js new file mode 100644 index 00000000000..3afbd9e39b2 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-up/index.js @@ -0,0 +1,3 @@ +import {one} from 'foo/bar' + +output = one; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-up/node_modules/foo/bar/package.json b/packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-up/node_modules/foo/bar/package.json new file mode 100644 index 00000000000..476f815322c --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-up/node_modules/foo/bar/package.json @@ -0,0 +1,3 @@ +{ + "module": "../real-bar.js" +} diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-up/node_modules/foo/package.json b/packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-up/node_modules/foo/package.json new file mode 100644 index 00000000000..a43829151e1 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-up/node_modules/foo/package.json @@ -0,0 +1,3 @@ +{ + "sideEffects": false +} diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-up/node_modules/foo/real-bar.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-up/node_modules/foo/real-bar.js new file mode 100644 index 00000000000..d8157863065 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/side-effects-package-redirect-up/node_modules/foo/real-bar.js @@ -0,0 +1 @@ +export const one = 1; diff --git a/packages/core/integration-tests/test/scope-hoisting.js b/packages/core/integration-tests/test/scope-hoisting.js index 33144b862e4..0cc240d9570 100644 --- a/packages/core/integration-tests/test/scope-hoisting.js +++ b/packages/core/integration-tests/test/scope-hoisting.js @@ -2348,6 +2348,40 @@ describe('scope hoisting', function () { assert.equal(await output, 42); }); + describe("considers an asset's closest package.json for sideEffects, not the package through which it found the asset", () => { + it('handles redirects up the tree', async () => { + let b = await bundle( + path.join( + __dirname, + '/integration/scope-hoisting/es6/side-effects-package-redirect-up/index.js', + ), + ); + + let result = await run(b); + assert.strictEqual(result, 1); + + let bar = findAsset(b, 'real-bar.js'); + assert(bar); + assert.strictEqual(bar.sideEffects, false); + }); + + it('handles redirects down the tree', async () => { + let b = await bundle( + path.join( + __dirname, + '/integration/scope-hoisting/es6/side-effects-package-redirect-down/index.js', + ), + ); + + let result = await run(b); + assert.strictEqual(result, 1); + + let bar = findAsset(b, 'real-bar.js'); + assert(bar); + assert.strictEqual(bar.sideEffects, false); + }); + }); + describe('correctly updates used symbols on changes', () => { it('dependency symbols change', async function () { let testDir = path.join( diff --git a/packages/utils/node-resolver-core/src/NodeResolver.js b/packages/utils/node-resolver-core/src/NodeResolver.js index f7802facf3e..3b8614b5d42 100644 --- a/packages/utils/node-resolver-core/src/NodeResolver.js +++ b/packages/utils/node-resolver-core/src/NodeResolver.js @@ -997,7 +997,15 @@ export default class NodeResolver { } if (found) { - return {path: found, pkg}; + return { + path: found, + // If this package.json isn't a sibling of found, it's possible pkg is not the + // closest package.json to the resolved file. Reload it instead. + pkg: + pkg == null || pkg?.pkgdir !== path.dirname(found) + ? await this.findPackage(found, ctx) + : pkg, + }; } return null; diff --git a/packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-down/foo/bar/baz/package.json b/packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-down/foo/bar/baz/package.json new file mode 100644 index 00000000000..a43829151e1 --- /dev/null +++ b/packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-down/foo/bar/baz/package.json @@ -0,0 +1,3 @@ +{ + "sideEffects": false +} diff --git a/packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-down/foo/bar/baz/real-bar.js b/packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-down/foo/bar/baz/real-bar.js new file mode 100644 index 00000000000..d8157863065 --- /dev/null +++ b/packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-down/foo/bar/baz/real-bar.js @@ -0,0 +1 @@ +export const one = 1; diff --git a/packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-down/foo/bar/package.json b/packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-down/foo/bar/package.json new file mode 100644 index 00000000000..518cd1ba105 --- /dev/null +++ b/packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-down/foo/bar/package.json @@ -0,0 +1,3 @@ +{ + "module": "baz/real-bar.js" +} diff --git a/packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-down/foo/package.json b/packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-down/foo/package.json new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-down/foo/package.json @@ -0,0 +1 @@ +{} diff --git a/packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-down/package.json b/packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-down/package.json new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-down/package.json @@ -0,0 +1 @@ +{} diff --git a/packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-up/foo/bar/package.json b/packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-up/foo/bar/package.json new file mode 100644 index 00000000000..476f815322c --- /dev/null +++ b/packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-up/foo/bar/package.json @@ -0,0 +1,3 @@ +{ + "module": "../real-bar.js" +} diff --git a/packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-up/foo/package.json b/packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-up/foo/package.json new file mode 100644 index 00000000000..a43829151e1 --- /dev/null +++ b/packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-up/foo/package.json @@ -0,0 +1,3 @@ +{ + "sideEffects": false +} diff --git a/packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-up/foo/real-bar.js b/packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-up/foo/real-bar.js new file mode 100644 index 00000000000..d8157863065 --- /dev/null +++ b/packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-up/foo/real-bar.js @@ -0,0 +1 @@ +export const one = 1; diff --git a/packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-up/package.json b/packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-up/package.json new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/packages/utils/node-resolver-core/test/fixture/node_modules/side-effects-package-redirect-up/package.json @@ -0,0 +1 @@ +{} diff --git a/packages/utils/node-resolver-core/test/resolver.js b/packages/utils/node-resolver-core/test/resolver.js index 0f1c818429a..3b7e3e3fff8 100644 --- a/packages/utils/node-resolver-core/test/resolver.js +++ b/packages/utils/node-resolver-core/test/resolver.js @@ -307,6 +307,10 @@ describe('resolver', function () { fileName: 'node_modules/browserify-zlib', aboveFilePath: path.join(rootDir, 'foo.js'), }, + { + fileName: 'package.json', + aboveFilePath: require.resolve('browserify-zlib/lib/index.js'), + }, ], invalidateOnFileChange: [ path.join(rootDir, 'package.json'), @@ -339,6 +343,10 @@ describe('resolver', function () { fileName: 'node_modules/browserify-zlib', aboveFilePath: path.join(rootDir, 'foo.js'), }, + { + fileName: 'package.json', + aboveFilePath: require.resolve('browserify-zlib/lib/index.js'), + }, ], invalidateOnFileChange: [ path.join(rootDir, 'package.json'), @@ -371,6 +379,10 @@ describe('resolver', function () { fileName: 'package.json', aboveFilePath: path.join(__dirname, '..', 'src', '_empty.js'), }, + { + fileName: 'package.json', + aboveFilePath: path.join(__dirname, '..', 'src', '_empty.js'), + }, ], invalidateOnFileChange: [ path.join(rootDir, 'package.json'), @@ -713,6 +725,16 @@ describe('resolver', function () { 'package.json', ), }, + { + fileName: 'package.json', + aboveFilePath: path.join( + rootDir, + 'node_modules', + 'package-main-directory', + 'nested', + 'index.js', + ), + }, ], invalidateOnFileChange: [ path.join(rootDir, 'package.json'), @@ -750,6 +772,16 @@ describe('resolver', function () { fileName: 'node_modules/foo', aboveFilePath: path.join(rootDir, 'foo.js'), }, + { + fileName: 'package.json', + aboveFilePath: path.join( + rootDir, + 'node_modules', + 'foo', + 'nested', + 'baz.js', + ), + }, ], invalidateOnFileChange: [ path.join(rootDir, 'package.json'), @@ -814,6 +846,17 @@ describe('resolver', function () { fileName: 'node_modules/@scope/pkg', aboveFilePath: path.join(rootDir, 'foo.js'), }, + { + fileName: 'package.json', + aboveFilePath: path.join( + rootDir, + 'node_modules', + '@scope', + 'pkg', + 'foo', + 'bar.js', + ), + }, ], invalidateOnFileChange: [ path.join(rootDir, 'package.json'), @@ -850,6 +893,16 @@ describe('resolver', function () { fileName: 'node_modules/side-effects-false', aboveFilePath: path.join(rootDir, 'foo.js'), }, + { + fileName: 'package.json', + aboveFilePath: path.join( + rootDir, + 'node_modules', + 'side-effects-false', + 'src', + 'index.js', + ), + }, ], invalidateOnFileChange: [ path.join(rootDir, 'package.json'), @@ -890,6 +943,16 @@ describe('resolver', function () { fileName: 'node_modules/side-effects-false', aboveFilePath: path.join(rootDir, 'foo.js'), }, + { + fileName: 'package.json', + aboveFilePath: path.join( + rootDir, + 'node_modules', + 'side-effects-false', + 'src', + 'index.js', + ), + }, ], invalidateOnFileChange: [ path.join(rootDir, 'package.json'), @@ -949,6 +1012,16 @@ describe('resolver', function () { ), fileName: 'package.json', }, + { + aboveFilePath: path.join( + rootDir, + 'node_modules', + 'side-effects-false', + 'src', + 'index.js', + ), + fileName: 'package.json', + }, ], invalidateOnFileChange: [ path.join(rootDir, 'package.json'), @@ -1008,6 +1081,16 @@ describe('resolver', function () { ), fileName: 'package.json', }, + { + aboveFilePath: path.join( + rootDir, + 'node_modules', + 'side-effects-false', + 'src', + 'index.js', + ), + fileName: 'package.json', + }, ], invalidateOnFileChange: [ path.join(rootDir, 'package.json'), @@ -1020,6 +1103,168 @@ describe('resolver', function () { ], }); }); + + it('should determine sideEffects correctly (main field exists in upward package)', async function () { + let resolved = await resolver.resolve({ + env: BROWSER_ENV, + filename: 'side-effects-package-redirect-up/foo/bar', + specifierType: 'esm', + parent: path.join(rootDir, 'foo.js'), + }); + assert.deepEqual(resolved, { + filePath: path.resolve( + rootDir, + 'node_modules/side-effects-package-redirect-up/foo/real-bar.js', + ), + sideEffects: false, + query: undefined, + invalidateOnFileCreate: [ + { + fileName: 'package.json', + aboveFilePath: path.join(rootDir, 'index'), + }, + { + fileName: 'package.json', + aboveFilePath: path.join(rootDir, 'foo.js'), + }, + { + fileName: 'node_modules/side-effects-package-redirect-up', + aboveFilePath: path.join(rootDir, 'foo.js'), + }, + { + filePath: path.join( + rootDir, + 'node_modules', + 'side-effects-package-redirect-up', + 'foo', + 'bar.js', + ), + }, + { + filePath: path.join( + rootDir, + 'node_modules', + 'side-effects-package-redirect-up', + 'foo', + 'bar.json', + ), + }, + { + fileName: 'package.json', + aboveFilePath: path.join( + rootDir, + 'node_modules/side-effects-package-redirect-up/foo/real-bar.js', + ), + }, + ], + invalidateOnFileChange: [ + path.join(rootDir, 'package.json'), + path.join( + rootDir, + 'node_modules', + 'side-effects-package-redirect-up', + 'package.json', + ), + path.join( + rootDir, + 'node_modules', + 'side-effects-package-redirect-up', + 'foo', + 'bar', + 'package.json', + ), + path.join( + rootDir, + 'node_modules', + 'side-effects-package-redirect-up', + 'foo', + 'package.json', + ), + ], + }); + }); + + it('should determine sideEffects correctly (main field exists in downward package)', async function () { + let resolved = await resolver.resolve({ + env: BROWSER_ENV, + filename: 'side-effects-package-redirect-down/foo/bar', + specifierType: 'esm', + parent: path.join(rootDir, 'foo.js'), + }); + assert.deepEqual(resolved, { + filePath: path.resolve( + rootDir, + 'node_modules/side-effects-package-redirect-down/foo/bar/baz/real-bar.js', + ), + sideEffects: false, + query: undefined, + invalidateOnFileCreate: [ + { + fileName: 'package.json', + aboveFilePath: path.join(rootDir, 'index'), + }, + { + fileName: 'package.json', + aboveFilePath: path.join(rootDir, 'foo.js'), + }, + { + fileName: 'node_modules/side-effects-package-redirect-down', + aboveFilePath: path.join(rootDir, 'foo.js'), + }, + { + filePath: path.join( + rootDir, + 'node_modules', + 'side-effects-package-redirect-down', + 'foo', + 'bar.js', + ), + }, + { + filePath: path.join( + rootDir, + 'node_modules', + 'side-effects-package-redirect-down', + 'foo', + 'bar.json', + ), + }, + { + fileName: 'package.json', + aboveFilePath: path.join( + rootDir, + 'node_modules/side-effects-package-redirect-down/foo/bar/baz/real-bar.js', + ), + }, + ], + invalidateOnFileChange: [ + path.join(rootDir, 'package.json'), + path.join( + rootDir, + 'node_modules', + 'side-effects-package-redirect-down', + 'package.json', + ), + path.join( + rootDir, + 'node_modules', + 'side-effects-package-redirect-down', + 'foo', + 'bar', + 'package.json', + ), + path.join( + rootDir, + 'node_modules', + 'side-effects-package-redirect-down', + 'foo', + 'bar', + 'baz', + 'package.json', + ), + ], + }); + }); }); describe('sideEffects: globs', function () { @@ -1412,6 +1657,17 @@ describe('resolver', function () { 'nested', ), }, + { + fileName: 'package.json', + aboveFilePath: path.join( + rootDir, + 'node_modules', + 'package-browser-alias', + 'subfolder1', + 'subfolder2', + 'subfile.js', + ), + }, ], invalidateOnFileChange: [ path.join(rootDir, 'package.json'), @@ -1550,6 +1806,16 @@ describe('resolver', function () { 'test', ), }, + { + fileName: 'package.json', + aboveFilePath: path.join( + rootDir, + 'node_modules', + 'package-alias-glob', + 'src', + 'test.js', + ), + }, ], invalidateOnFileChange: [ path.join(rootDir, 'package.json'), @@ -1771,6 +2037,10 @@ describe('resolver', function () { fileName: 'package.json', aboveFilePath: path.join(rootDir, 'nested', 'test.js'), }, + { + fileName: 'package.json', + aboveFilePath: path.join(rootDir, 'nested', 'test.js'), + }, ], invalidateOnFileChange: [path.join(rootDir, 'package.json')], }); @@ -1809,6 +2079,10 @@ describe('resolver', function () { { filePath: path.join(rootDir, 'nested', 'package.json'), }, + { + fileName: 'package.json', + aboveFilePath: path.join(rootDir, 'nested/index.js'), + }, ], invalidateOnFileChange: [path.join(rootDir, 'package.json')], }); @@ -1838,6 +2112,10 @@ describe('resolver', function () { fileName: 'package.json', aboveFilePath: path.join(rootDir, 'nested', 'test.js'), }, + { + fileName: 'package.json', + aboveFilePath: path.join(rootDir, 'nested', 'test.js'), + }, ], invalidateOnFileChange: [path.join(rootDir, 'package.json')], }); @@ -1876,6 +2154,10 @@ describe('resolver', function () { { filePath: path.join(rootDir, 'nested', 'package.json'), }, + { + fileName: 'package.json', + aboveFilePath: path.join(rootDir, 'nested/index.js'), + }, ], invalidateOnFileChange: [path.join(rootDir, 'package.json')], }); @@ -1934,6 +2216,10 @@ describe('resolver', function () { fileName: 'package.json', aboveFilePath: path.join(rootDir, 'nested', 'test'), }, + { + fileName: 'package.json', + aboveFilePath: path.join(rootDir, 'nested', 'test.js'), + }, ], invalidateOnFileChange: [path.join(rootDir, 'package.json')], }); @@ -1963,6 +2249,10 @@ describe('resolver', function () { fileName: 'package.json', aboveFilePath: path.join(rootDir, 'nested', 'test.js'), }, + { + fileName: 'package.json', + aboveFilePath: path.join(rootDir, 'nested', 'test.js'), + }, ], invalidateOnFileChange: [path.join(rootDir, 'package.json')], }); @@ -1997,6 +2287,10 @@ describe('resolver', function () { fileName: 'package.json', aboveFilePath: path.join(rootDir, 'nested', 'test.js'), }, + { + fileName: 'package.json', + aboveFilePath: path.join(rootDir, 'nested', 'test.js'), + }, ], invalidateOnFileChange: [ path.join(rootDir, 'package.json'), @@ -2029,6 +2323,10 @@ describe('resolver', function () { fileName: 'node_modules/package-browser-exclude', aboveFilePath: path.join(rootDir, 'foo.js'), }, + { + fileName: 'package.json', + aboveFilePath: path.join(__dirname, '..', 'src', '_empty.js'), + }, ], invalidateOnFileChange: [ path.join(rootDir, 'package.json'), @@ -2038,6 +2336,7 @@ describe('resolver', function () { 'package-browser-exclude', 'package.json', ), + path.join(__dirname, '..', 'package.json'), ], }); }); @@ -2066,6 +2365,10 @@ describe('resolver', function () { fileName: 'node_modules/package-alias-exclude', aboveFilePath: path.join(rootDir, 'foo.js'), }, + { + fileName: 'package.json', + aboveFilePath: path.join(__dirname, '..', 'src', '_empty.js'), + }, ], invalidateOnFileChange: [ path.join(rootDir, 'package.json'), @@ -2075,6 +2378,7 @@ describe('resolver', function () { 'package-alias-exclude', 'package.json', ), + path.join(__dirname, '..', 'package.json'), ], }); });