From 23226cdd67118cff29beb9cbd3a436091d34a7c2 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Fri, 31 Dec 2021 03:47:46 +0100 Subject: [PATCH] fix(node-resolve): forward meta-information from other plugins (#1062) --- packages/node-resolve/src/index.js | 15 +++++++++------ packages/node-resolve/test/test.js | 24 ++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/packages/node-resolve/src/index.js b/packages/node-resolve/src/index.js index 845a6dba9..3eab84bfe 100644 --- a/packages/node-resolve/src/index.js +++ b/packages/node-resolve/src/index.js @@ -8,10 +8,10 @@ import isModule from 'is-module'; import { version } from '../package.json'; import { isDirCached, isFileCached, readCachedFile } from './cache'; +import handleDeprecatedOptions from './deprecated-options'; import { fileExists, readFile, realpath } from './fs'; import resolveImportSpecifiers from './resolveImportSpecifiers'; import { getMainFields, getPackageName, normalizeInput } from './util'; -import handleDeprecatedOptions from './deprecated-options'; const builtins = new Set(builtinList); const ES6_BROWSER_EMPTY = '\0node-resolve:empty.js'; @@ -225,11 +225,10 @@ export function nodeResolve(opts = {}) { } return null; } - const result = { + return { id: `${location}${importSuffix}`, moduleSideEffects: hasModuleSideEffects(location) }; - return result; }; return { @@ -271,9 +270,13 @@ export function nodeResolve(opts = {}) { importer, Object.assign({ skipSelf: true }, resolveOptions) ); - const isExternal = !!(resolvedResolved && resolvedResolved.external); - if (isExternal) { - return false; + if (resolvedResolved) { + // Handle plugins that manually make the result external + if (resolvedResolved.external) { + return false; + } + // Pass on meta information added by other plugins + return { ...resolved, meta: resolvedResolved.meta }; } } return resolved; diff --git a/packages/node-resolve/test/test.js b/packages/node-resolve/test/test.js index ece327f78..0979eb76a 100755 --- a/packages/node-resolve/test/test.js +++ b/packages/node-resolve/test/test.js @@ -525,3 +525,27 @@ test('passes on custom options', async (t) => { ['other.js', void 0, { custom: {}, isEntry: true }] ]); }); + +test('passes on meta information from other plugins', async (t) => { + await rollup({ + input: 'entry/other.js', + onwarn: failOnWarn(t), + plugins: [ + nodeResolve(), + { + name: 'test-meta', + resolveId(importee) { + return { + id: resolve(importee), + meta: { test: { 'I am': 'here' } } + }; + }, + + load(id) { + const info = this.getModuleInfo(id); + t.deepEqual(info.meta, { test: { 'I am': 'here' } }); + } + } + ] + }); +});