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..06ca167193 100644 --- a/utils/resolve.js +++ b/utils/resolve.js @@ -80,19 +80,25 @@ 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, + // Accept context or settings, for backward compatibility + !('settings' in context) ? { settings: context } : 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 +111,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 +125,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 +143,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 +233,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`.