Skip to content

Commit c4a73f2

Browse files
author
Damien Maillard
committed
update alpha version
1 parent b20297e commit c4a73f2

3 files changed

Lines changed: 77 additions & 48 deletions

File tree

dist/commonjs/main.cjs

Lines changed: 54 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,18 @@ var module$1 = require('module');
99
var cancellation = require('@jsenv/cancellation');
1010

1111
const memoizeAsyncFunctionByUrl = fn => {
12-
const map = new WeakMap();
12+
const cache = {};
1313
return memoizeAsyncFunction(fn, {
1414
getMemoryEntryFromArguments: ([url]) => {
1515
return {
1616
get: () => {
17-
return map.get(url);
17+
return cache[url];
1818
},
1919
set: promise => {
20-
map.set(url, promise);
20+
cache[url] = promise;
2121
},
2222
delete: () => {
23-
map.delete(url);
23+
delete cache[url];
2424
}
2525
};
2626
}
@@ -61,7 +61,7 @@ const memoizeAsyncFunctionBySpecifierAndImporter = fn => {
6161
const memoizeAsyncFunction = (fn, {
6262
getMemoryEntryFromArguments
6363
}) => {
64-
return async (...args) => {
64+
const memoized = async (...args) => {
6565
const memoryEntry = getMemoryEntryFromArguments(args);
6666
const promiseFromMemory = memoryEntry.get();
6767

@@ -95,6 +95,12 @@ const memoizeAsyncFunction = (fn, {
9595

9696
return promise;
9797
};
98+
99+
memoized.isInMemory = (...args) => {
100+
return Boolean(getMemoryEntryFromArguments(args).get());
101+
};
102+
103+
return memoized;
98104
};
99105

100106
const createControllablePromise = () => {
@@ -537,6 +543,15 @@ const getImportMapFromJsFiles = async ({
537543
scope,
538544
from
539545
}) => {
546+
if (scope) {
547+
// make scope relative again
548+
scope = `./${util.urlToRelativeUrl(scope, projectDirectoryUrl)}`; // make from relative again
549+
550+
if (from.startsWith(projectDirectoryUrl)) {
551+
from = `./${util.urlToRelativeUrl(from, projectDirectoryUrl)}`;
552+
}
553+
}
554+
540555
markMappingAsUsed({
541556
scope,
542557
from,
@@ -547,7 +562,7 @@ const getImportMapFromJsFiles = async ({
547562
});
548563
};
549564

550-
const visitFile = async (specifier, importer, {
565+
const resolveFileSystemUrl = memoizeAsyncFunctionBySpecifierAndImporter(async (specifier, importer, {
551566
importedBy
552567
}) => {
553568
let fileUrl;
@@ -563,7 +578,7 @@ const getImportMapFromJsFiles = async ({
563578
if (importer === projectPackageFileUrl) {
564579
// cannot find package main file (package.main is "" for instance)
565580
// we can't discover main file and parse dependencies
566-
return;
581+
return null;
567582
}
568583

569584
gotBareSpecifierError = true;
@@ -581,7 +596,7 @@ const getImportMapFromJsFiles = async ({
581596
fileUrl,
582597
magicExtensions
583598
}));
584-
return;
599+
return null;
585600
}
586601

587602
const needsAutoMapping = fileUrlOnFileSystem !== fileUrl || gotBareSpecifierError;
@@ -607,39 +622,45 @@ const getImportMapFromJsFiles = async ({
607622
}));
608623
}
609624

610-
await visitFileContent(fileUrlOnFileSystem);
611-
};
612-
613-
const visitFileContent = memoizeAsyncFunctionByUrl(async fileUrl => {
614-
const fileContent = await readFileContent(fileUrl);
625+
return fileUrlOnFileSystem;
626+
});
627+
const visitFile = memoizeAsyncFunctionByUrl(async fileUrl => {
628+
const fileContent = await util.readFile(fileUrl, {
629+
as: "string"
630+
});
615631
const specifiers = await parseSpecifiersFromFile(fileUrl, {
616632
fileContent
617633
});
618-
await Promise.all(Object.keys(specifiers).map(async specifier => {
634+
const dependencies = await Promise.all(Object.keys(specifiers).map(async specifier => {
619635
const specifierInfo = specifiers[specifier];
620-
await visitFileMemoized(specifier, fileUrl, {
636+
const dependencyUrlOnFileSystem = await resolveFileSystemUrl(specifier, fileUrl, {
621637
importedBy: showSource({
622638
url: fileUrl,
623639
line: specifierInfo.line,
624640
column: specifierInfo.column,
625641
source: fileContent
626642
})
627643
});
644+
return dependencyUrlOnFileSystem;
628645
}));
629-
});
630-
const visitFileMemoized = memoizeAsyncFunctionBySpecifierAndImporter(visitFile);
631-
const readFileContent = memoizeAsyncFunctionByUrl(fileUrl => {
632-
return util.readFile(fileUrl, {
633-
as: "string"
646+
const dependenciesToVisit = dependencies.filter(dependency => {
647+
return dependency && !visitFile.isInMemory(dependency);
634648
});
649+
await Promise.all(dependenciesToVisit.map(dependency => {
650+
return visitFile(dependency);
651+
}));
635652
});
636653
const projectPackageObject = await util.readFile(projectPackageFileUrl, {
637654
as: "json"
638655
});
639-
await visitFileMemoized(projectPackageObject.name, projectPackageFileUrl, {
656+
const projectMainFileUrlOnFileSystem = await resolveFileSystemUrl(projectPackageObject.name, projectPackageFileUrl, {
640657
importedBy: projectPackageObject.exports ? `${projectPackageFileUrl}#exports` : `${projectPackageFileUrl}`
641658
});
642659

660+
if (projectMainFileUrlOnFileSystem) {
661+
await visitFile(projectMainFileUrlOnFileSystem);
662+
}
663+
643664
if (removeUnusedMappings) {
644665
const importsUsed = {};
645666
topLevelMappingsUsed.forEach(({
@@ -660,16 +681,16 @@ const getImportMapFromJsFiles = async ({
660681
});
661682
scopesUsed[scope] = scopedMappings;
662683
});
663-
return {
684+
return importMap.sortImportMap({
664685
imports: importsUsed,
665686
scopes: scopesUsed
666-
};
687+
});
667688
}
668689

669-
return {
690+
return importMap.sortImportMap(importMap.composeTwoImportMaps(importMap$1, {
670691
imports,
671692
scopes
672-
};
693+
}));
673694
};
674695

675696
const packageDirectoryUrlFromUrl = (url, projectDirectoryUrl) => {
@@ -2064,18 +2085,22 @@ const getImportMapFromProjectFiles = async ({
20642085
...rest
20652086
});
20662087
importMapFromPackageFiles = importMap.sortImportMap(importMapFromPackageFiles);
2067-
let importMapFromJsFiles = jsFiles ? await getImportMapFromJsFiles({
2068-
logLevel,
2088+
2089+
if (!jsFiles) {
2090+
return importMapFromPackageFiles;
2091+
}
2092+
2093+
let importMapFromJsFiles = await getImportMapFromJsFiles({
20692094
warn,
20702095
importMap: importMapFromPackageFiles,
20712096
removeUnusedMappings,
20722097
projectDirectoryUrl,
20732098
magicExtensions,
20742099
packagesExportsPreference,
20752100
runtime
2076-
}) : {};
2101+
});
20772102
importMapFromJsFiles = importMap.sortImportMap(importMapFromJsFiles);
2078-
return importMap.sortImportMap(importMap.composeTwoImportMaps(importMapFromPackageFiles, importMapFromJsFiles));
2103+
return importMapFromJsFiles;
20792104
};
20802105
const runtimeExportsPreferences = {
20812106
browser: ["browser"],

0 commit comments

Comments
 (0)