Skip to content

Commit

Permalink
perf(better-define): add resolve cache
Browse files Browse the repository at this point in the history
  • Loading branch information
sxzz committed Mar 16, 2023
1 parent 2dff8b2 commit 976d198
Showing 1 changed file with 20 additions and 3 deletions.
23 changes: 20 additions & 3 deletions packages/better-define/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,26 @@ export default createUnplugin<Options | undefined, false>(
}
}

const resolveCache = new Map<
string /* importer */,
Map<string /* id */, string /* result */>
>()

function withResolveCache(id: string, importer: string, result: string) {
if (!resolveCache.has(importer)) {
resolveCache.set(importer, new Map([[id, result]]))
return result
}
resolveCache.get(importer)!.set(id, result)
return result
}

const RollupResolve =
(ctx: PluginContext): ResolveTSFileIdImpl =>
async (id, importer) => {
const cached = resolveCache.get(importer)?.get(id)
if (cached) return cached

async function tryPkgEntry() {
try {
const pkgPath = (await ctx.resolve(`${id}/package.json`, importer))
Expand Down Expand Up @@ -81,20 +98,20 @@ export default createUnplugin<Options | undefined, false>(

if (!id.startsWith('.')) {
const entry = await tryPkgEntry()
if (entry) return entry
if (entry) return withResolveCache(id, importer, entry)
}

let resolved = await tryResolve(id)
if (!resolved) return
if (existsSync(resolved)) {
collectReferencedFile(importer, resolved)
return resolved
return withResolveCache(id, importer, resolved)
}

resolved = await tryResolve(resolved)
if (resolved && existsSync(resolved)) {
collectReferencedFile(importer, resolved)
return resolved
return withResolveCache(id, importer, resolved)
}
}

Expand Down

0 comments on commit 976d198

Please sign in to comment.