diff --git a/packages/jest-resolve/src/__mocks__/conditions/node_modules/import/file.js b/packages/jest-resolve/src/__mocks__/conditions/node_modules/exports/default.js similarity index 100% rename from packages/jest-resolve/src/__mocks__/conditions/node_modules/import/file.js rename to packages/jest-resolve/src/__mocks__/conditions/node_modules/exports/default.js diff --git a/packages/jest-resolve/src/__mocks__/conditions/node_modules/require/file.js b/packages/jest-resolve/src/__mocks__/conditions/node_modules/exports/import.js similarity index 100% rename from packages/jest-resolve/src/__mocks__/conditions/node_modules/require/file.js rename to packages/jest-resolve/src/__mocks__/conditions/node_modules/exports/import.js diff --git a/packages/jest-resolve/src/__mocks__/conditions/node_modules/exports/main.js b/packages/jest-resolve/src/__mocks__/conditions/node_modules/exports/main.js new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/jest-resolve/src/__mocks__/conditions/node_modules/exports/nestedDefault.js b/packages/jest-resolve/src/__mocks__/conditions/node_modules/exports/nestedDefault.js new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/jest-resolve/src/__mocks__/conditions/node_modules/exports/nestedRequire.js b/packages/jest-resolve/src/__mocks__/conditions/node_modules/exports/nestedRequire.js new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/jest-resolve/src/__mocks__/conditions/node_modules/exports/other.js b/packages/jest-resolve/src/__mocks__/conditions/node_modules/exports/other.js new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/jest-resolve/src/__mocks__/conditions/node_modules/exports/package.json b/packages/jest-resolve/src/__mocks__/conditions/node_modules/exports/package.json new file mode 100644 index 000000000000..7fd4bab2a661 --- /dev/null +++ b/packages/jest-resolve/src/__mocks__/conditions/node_modules/exports/package.json @@ -0,0 +1,16 @@ +{ + "name": "import", + "main": "main.js", + "exports": { + ".": { + "require": "./require.js", + "import": "./import.js", + "default": "./default.js" + }, + "./nested": "./nestedDefault.js", + "./deeplyNested" : { + "require": "./nestedRequire.js", + "default": "./nestedDefault.js" + } + } +} diff --git a/packages/jest-resolve/src/__mocks__/conditions/node_modules/exports/require.js b/packages/jest-resolve/src/__mocks__/conditions/node_modules/exports/require.js new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/jest-resolve/src/__mocks__/conditions/node_modules/import/package.json b/packages/jest-resolve/src/__mocks__/conditions/node_modules/import/package.json deleted file mode 100644 index 24fc72b1cac7..000000000000 --- a/packages/jest-resolve/src/__mocks__/conditions/node_modules/import/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "import", - "exports": { - "import": "./file.js" - } -} diff --git a/packages/jest-resolve/src/__mocks__/conditions/node_modules/require/package.json b/packages/jest-resolve/src/__mocks__/conditions/node_modules/require/package.json deleted file mode 100644 index c42b33ecca86..000000000000 --- a/packages/jest-resolve/src/__mocks__/conditions/node_modules/require/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "require", - "exports": { - "require": "./file.js" - } -} diff --git a/packages/jest-resolve/src/__tests__/resolve.test.ts b/packages/jest-resolve/src/__tests__/resolve.test.ts index 6a2f7c44a541..6c6dfaf0705e 100644 --- a/packages/jest-resolve/src/__tests__/resolve.test.ts +++ b/packages/jest-resolve/src/__tests__/resolve.test.ts @@ -160,24 +160,78 @@ describe('findNodeModule', () => { }); test('resolves with import', () => { - const result = Resolver.findNodeModule('import', { + const result = Resolver.findNodeModule('exports', { basedir: conditionsRoot, conditions: ['import'], }); expect(result).toEqual( - path.resolve(conditionsRoot, './node_modules/import/file.js'), + path.resolve(conditionsRoot, './node_modules/exports/import.js'), ); }); test('resolves with require', () => { - const result = Resolver.findNodeModule('require', { + const result = Resolver.findNodeModule('exports', { basedir: conditionsRoot, conditions: ['require'], }); expect(result).toEqual( - path.resolve(conditionsRoot, './node_modules/require/file.js'), + path.resolve(conditionsRoot, './node_modules/exports/require.js'), + ); + }); + + test('gets default when nothing is passed', () => { + const result = Resolver.findNodeModule('exports', { + basedir: conditionsRoot, + conditions: [], + }); + + expect(result).toEqual( + path.resolve(conditionsRoot, './node_modules/exports/default.js'), + ); + }); + + test('respects order in package.json, not conditions', () => { + const resultImport = Resolver.findNodeModule('exports', { + basedir: conditionsRoot, + conditions: ['import', 'require'], + }); + const resultRequire = Resolver.findNodeModule('exports', { + basedir: conditionsRoot, + conditions: ['require', 'import'], + }); + + expect(resultImport).toEqual(resultRequire); + }); + + test('supports nested paths', () => { + const result = Resolver.findNodeModule('exports/nested', { + basedir: conditionsRoot, + conditions: [], + }); + + expect(result).toEqual( + path.resolve(conditionsRoot, './node_modules/exports/nestedDefault.js'), + ); + }); + + test('supports nested conditions', () => { + const resultRequire = Resolver.findNodeModule('exports/deeplyNested', { + basedir: conditionsRoot, + conditions: ['require'], + }); + const resultDefault = Resolver.findNodeModule('exports/deeplyNested', { + basedir: conditionsRoot, + conditions: [], + }); + + expect(resultRequire).toEqual( + path.resolve(conditionsRoot, './node_modules/exports/nestedRequire.js'), + ); + + expect(resultDefault).toEqual( + path.resolve(conditionsRoot, './node_modules/exports/nestedDefault.js'), ); }); });