From 96e09008c37153fc05c2db57d20305ec12329ce0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Iglesias=20Garc=C3=ADa?= Date: Fri, 1 May 2020 23:47:06 +0200 Subject: [PATCH] fix(node-resolve): resolve local files if `resolveOption` is set (#337) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(node-resolve): Resolve local files if `resolveOption` is set * format(node-resolve): Remove empty line in `fixtures/only.js` * test(node-resolve): add assertion to 'resolveOnly' tests to check resolved modules Co-authored-by: Javier Iglesias García --- packages/node-resolve/src/index.js | 9 +++++++-- packages/node-resolve/test/fixtures/only-local.js | 1 + packages/node-resolve/test/fixtures/only.js | 3 +++ packages/node-resolve/test/only.js | 12 ++++++++++-- util/test.d.ts | 2 ++ util/test.js | 8 ++++++++ 6 files changed, 31 insertions(+), 4 deletions(-) create mode 100755 packages/node-resolve/test/fixtures/only-local.js diff --git a/packages/node-resolve/src/index.js b/packages/node-resolve/src/index.js index 2378f568c..f043b2822 100644 --- a/packages/node-resolve/src/index.js +++ b/packages/node-resolve/src/index.js @@ -111,6 +111,7 @@ export const nodeResolve = (opts = {}) => { const parts = importee.split(/[/\\]/); let id = parts.shift(); + let isRelativeImport = false; if (id[0] === '@' && parts.length > 0) { // scoped packages @@ -118,11 +119,15 @@ export const nodeResolve = (opts = {}) => { } else if (id[0] === '.') { // an import relative to the parent dir of the importer id = resolve(basedir, importee); + isRelativeImport = true; } const input = normalizeInput(rollupOptions.input); - - if (resolveOnly.length && !resolveOnly.some((pattern) => pattern.test(id))) { + if ( + !isRelativeImport && + resolveOnly.length && + !resolveOnly.some((pattern) => pattern.test(id)) + ) { if (input.includes(id)) { return null; } diff --git a/packages/node-resolve/test/fixtures/only-local.js b/packages/node-resolve/test/fixtures/only-local.js new file mode 100755 index 000000000..2b416b8fb --- /dev/null +++ b/packages/node-resolve/test/fixtures/only-local.js @@ -0,0 +1 @@ +export default 'Resolved local var'; diff --git a/packages/node-resolve/test/fixtures/only.js b/packages/node-resolve/test/fixtures/only.js index 70f00e6ca..d97541df1 100755 --- a/packages/node-resolve/test/fixtures/only.js +++ b/packages/node-resolve/test/fixtures/only.js @@ -2,6 +2,9 @@ import foo from '@scoped/foo'; import bar from '@scoped/bar'; import test from 'test'; +import local from './only-local'; + console.log(foo); console.log(bar); console.log(test); +console.log(local); diff --git a/packages/node-resolve/test/only.js b/packages/node-resolve/test/only.js index d983e5b61..1bb3b108a 100644 --- a/packages/node-resolve/test/only.js +++ b/packages/node-resolve/test/only.js @@ -1,9 +1,9 @@ -const { join } = require('path'); +const { join, resolve } = require('path'); const test = require('ava'); const { rollup } = require('rollup'); -const { getImports } = require('../../../util/test'); +const { getImports, getResolvedModules } = require('../../../util/test'); const { nodeResolve } = require('..'); @@ -21,10 +21,12 @@ test('specify the only packages to resolve', async (t) => { ] }); const imports = await getImports(bundle); + const modules = await getResolvedModules(bundle); t.is(warnings.length, 0); t.snapshot(warnings); t.deepEqual(imports, ['@scoped/foo', '@scoped/bar']); + t.assert(Object.keys(modules).includes(resolve('only-local.js'))); }); test('regex', async (t) => { @@ -39,10 +41,12 @@ test('regex', async (t) => { ] }); const imports = await getImports(bundle); + const modules = await getResolvedModules(bundle); t.is(warnings.length, 0); t.snapshot(warnings); t.deepEqual(imports, ['test']); + t.assert(Object.keys(modules).includes(resolve('only-local.js'))); }); test('deprecated: specify the only packages to resolve', async (t) => { @@ -57,10 +61,12 @@ test('deprecated: specify the only packages to resolve', async (t) => { ] }); const imports = await getImports(bundle); + const modules = await getResolvedModules(bundle); t.is(warnings.length, 1); t.snapshot(warnings); t.deepEqual(imports, ['@scoped/foo', '@scoped/bar']); + t.assert(Object.keys(modules).includes(resolve('only-local.js'))); }); test('deprecated: regex', async (t) => { @@ -75,8 +81,10 @@ test('deprecated: regex', async (t) => { ] }); const imports = await getImports(bundle); + const modules = await getResolvedModules(bundle); t.is(warnings.length, 1); t.snapshot(warnings); t.deepEqual(imports, ['test']); + t.assert(Object.keys(modules).includes(resolve('only-local.js'))); }); diff --git a/util/test.d.ts b/util/test.d.ts index 2cc0070aa..297fa73ee 100644 --- a/util/test.d.ts +++ b/util/test.d.ts @@ -17,6 +17,8 @@ export const getCode: GetCode; export function getImports(bundle: RollupBuild): Promise; +export function getResolvedModules(bundle: RollupBuild): Promise>; + export function testBundle( t: Assertions, bundle: RollupBuild, diff --git a/util/test.js b/util/test.js index 7d1147c82..54d670747 100644 --- a/util/test.js +++ b/util/test.js @@ -23,6 +23,13 @@ const getImports = async (bundle) => { return imports; }; +const getResolvedModules = async (bundle) => { + const { + output: [{ modules }] + } = await bundle.generate({ format: 'esm' }); + return modules; +}; + /** * @param {import('ava').Assertions} t * @param {import('rollup').RollupBuild} bundle @@ -55,5 +62,6 @@ const testBundle = async (t, bundle, args = {}) => { module.exports = { getCode, getImports, + getResolvedModules, testBundle };