From f50fea99ab126d14403be53f10f432662668d86e Mon Sep 17 00:00:00 2001 From: Jack Bates Date: Fri, 24 Sep 2021 10:42:34 -0700 Subject: [PATCH 1/2] [New] give resolvers access to parserServices --- src/ExportMap.js | 2 +- utils/resolve.js | 33 ++++++++++++++++++++++----------- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/ExportMap.js b/src/ExportMap.js index 53091e4668..9880e99d66 100644 --- a/src/ExportMap.js +++ b/src/ExportMap.js @@ -431,7 +431,7 @@ ExportMap.parse = function (path, content, context) { const namespaces = new Map(); function remotePath(value) { - return resolve.relative(value, path, context.settings); + return resolve.relative(value, path, context); } function resolveImport(value) { diff --git a/utils/resolve.js b/utils/resolve.js index 27d5dcc1e1..ef285440fd 100644 --- a/utils/resolve.js +++ b/utils/resolve.js @@ -80,19 +80,20 @@ exports.fileExistsWithCaseSync = function fileExistsWithCaseSync(filepath, cache return result; }; -function relative(modulePath, sourceFile, settings) { - return fullResolve(modulePath, sourceFile, settings).path; +function relative(modulePath, sourceFile, context) { + return fullResolve(modulePath, sourceFile, context).path; } -function fullResolve(modulePath, sourceFile, settings) { +function fullResolve(modulePath, sourceFile, context) { // check if this is a bonus core module - const coreSet = new Set(settings['import/core-modules']); + const coreSet = new Set(context.settings['import/core-modules']); if (coreSet.has(modulePath)) return { found: true, path: null }; const sourceDir = path.dirname(sourceFile); - const cacheKey = sourceDir + hashObject(settings).digest('hex') + modulePath; + const cacheKey = + sourceDir + hashObject(context.settings).digest('hex') + modulePath; - const cacheSettings = ModuleCache.getSettings(settings); + const cacheSettings = ModuleCache.getSettings(context.settings); const cachedPath = fileExistsCache.get(cacheKey, cacheSettings); if (cachedPath !== undefined) return { found: true, path: cachedPath }; @@ -105,7 +106,12 @@ function fullResolve(modulePath, sourceFile, settings) { function v1() { try { - const resolved = resolver.resolveImport(modulePath, sourceFile, config); + const resolved = resolver.resolveImport( + modulePath, + sourceFile, + config, + context.parserServices, + ); if (resolved === undefined) return { found: false }; return { found: true, path: resolved }; } catch (err) { @@ -114,7 +120,12 @@ function fullResolve(modulePath, sourceFile, settings) { } function v2() { - return resolver.resolve(modulePath, sourceFile, config); + return resolver.resolve( + modulePath, + sourceFile, + config, + context.parserServices, + ); } switch (resolver.interfaceVersion) { @@ -127,8 +138,8 @@ function fullResolve(modulePath, sourceFile, settings) { } } - const configResolvers = (settings['import/resolver'] - || { 'node': settings['import/resolve'] }); // backward compatibility + const configResolvers = (context.settings['import/resolver'] + || { 'node': context.settings['import/resolve'] }); // backward compatibility const resolvers = resolverReducer(configResolvers, new Map()); @@ -217,7 +228,7 @@ const erroredContexts = new Set(); */ function resolve(p, context) { try { - return relative(p, context.getPhysicalFilename ? context.getPhysicalFilename() : context.getFilename(), context.settings); + return relative(p, context.getPhysicalFilename ? context.getPhysicalFilename() : context.getFilename(), context); } catch (err) { if (!erroredContexts.has(context)) { // The `err.stack` string starts with `err.name` followed by colon and `err.message`. From dc0553d656fbcca7b4f38ec4a1aa2f9db52a7b03 Mon Sep 17 00:00:00 2001 From: Jack Bates Date: Fri, 24 Sep 2021 11:14:34 -0700 Subject: [PATCH 2/2] Add backward compatibility --- utils/resolve.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/utils/resolve.js b/utils/resolve.js index ef285440fd..06ca167193 100644 --- a/utils/resolve.js +++ b/utils/resolve.js @@ -81,7 +81,12 @@ exports.fileExistsWithCaseSync = function fileExistsWithCaseSync(filepath, cache }; function relative(modulePath, sourceFile, context) { - return fullResolve(modulePath, sourceFile, context).path; + return fullResolve( + modulePath, + sourceFile, + // Accept context or settings, for backward compatibility + !('settings' in context) ? { settings: context } : context, + ).path; } function fullResolve(modulePath, sourceFile, context) {