Skip to content

Commit

Permalink
[Refactor] importType resolve path lazily
Browse files Browse the repository at this point in the history
  • Loading branch information
meowtec committed Jan 28, 2022
1 parent fc98de2 commit 002167e
Showing 1 changed file with 13 additions and 10 deletions.
23 changes: 13 additions & 10 deletions src/core/importType.js
Expand Up @@ -31,17 +31,17 @@ export function isBuiltIn(name, settings, path) {
}

export function isExternalModule(name, path, context) {
if (arguments.length < 3) {
if (arguments.length < 3) {
throw new TypeError('isExternalModule: name, path, and context are all required');
}
return (isModule(name) || isScoped(name)) && typeTest(name, context, path) === 'external';
return (isModule(name) || isScoped(name)) && typeTest(name, context, () => path) === 'external';
}

export function isExternalModuleMain(name, path, context) {
if (arguments.length < 3) {
if (arguments.length < 3) {
throw new TypeError('isExternalModule: name, path, and context are all required');
}
return isModuleMain(name) && typeTest(name, context, path) === 'external';
return isModuleMain(name) && typeTest(name, context, () => path) === 'external';
}

const moduleRegExp = /^\w/;
Expand Down Expand Up @@ -109,20 +109,23 @@ function isExternalLookingName(name) {
return isModule(name) || isScoped(name);
}

function typeTest(name, context, path ) {
function typeTest(name, context, getPath) {
const { settings } = context;
if (isInternalRegexMatch(name, settings)) { return 'internal'; }
if (isAbsolute(name, settings, path)) { return 'absolute'; }
if (isAbsolute(name)) { return 'absolute'; }
if (isRelativeToParent(name)) { return 'parent'; }
if (isIndex(name)) { return 'index'; }
if (isRelativeToSibling(name)) { return 'sibling'; }

// `resolve` is expensive, do it only when necessary
const path = getPath();
if (isBuiltIn(name, settings, path)) { return 'builtin'; }
if (isRelativeToParent(name, settings, path)) { return 'parent'; }
if (isIndex(name, settings, path)) { return 'index'; }
if (isRelativeToSibling(name, settings, path)) { return 'sibling'; }
if (isExternalPath(path, context)) { return 'external'; }
if (isInternalPath(path, context)) { return 'internal'; }
if (isExternalLookingName(name)) { return 'external'; }
return 'unknown';
}

export default function resolveImportType(name, context) {
return typeTest(name, context, resolve(name, context));
return typeTest(name, context, () => resolve(name, context));
}

0 comments on commit 002167e

Please sign in to comment.