Skip to content

Commit

Permalink
⚡ cache fetched results
Browse files Browse the repository at this point in the history
  • Loading branch information
JiangWeixian committed May 19, 2024
1 parent 060d5f3 commit 68c4d53
Showing 1 changed file with 12 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -122,10 +122,11 @@ const getCompileOptions = (
*/
const fetchDependencyTypesFromCDN = async (
dependenciesMap: Map<string, string>,
cachedDependencyFiles: Map<string, FetchedTypes>,
): Promise<FetchedTypes> => {
let typeRegistryFetchPromise: Promise<Record<string, { latest: string }>>
const requiredTypeFiles: FetchedTypes = {}
const mergeValidTypes = (files: FetchedTypes) => {
const mergeValidTypes = (files: FetchedTypes, options: { name: string; version: string }) => {
Object.entries(files).forEach(([key, value]) => {
const isTypeModule
= key.endsWith('.d.ts')
Expand All @@ -135,9 +136,14 @@ const fetchDependencyTypesFromCDN = async (
requiredTypeFiles[fileName] = value
}
})
cachedDependencyFiles.set(`${options.name}@${options.version}`, files)
}
await Promise.all(
Array.from(dependenciesMap).map(async ([name, version]) => {
if (cachedDependencyFiles.get(`${name}@${version}`)) {
mergeValidTypes(cachedDependencyFiles.get(`${name}@${version}`)!, { name, version })
return
}
// Try to fetch types of current version directly from the CDN.
// This will work if the package contains .d.ts files.
const files = await fetchTypesFromCodeSandboxBucket({ name, version })
Expand All @@ -147,7 +153,7 @@ const fetchDependencyTypesFromCDN = async (

// Types found at current version - add them to the filesystem.
if (hasTypes) {
mergeValidTypes(files)
mergeValidTypes(files, { name, version })
return
}

Expand All @@ -165,7 +171,7 @@ const fetchDependencyTypesFromCDN = async (
name: typingName,
version: registryEntries[name].latest,
})
mergeValidTypes(atTypeFiles)
mergeValidTypes(atTypeFiles, { name, version })
}
}),
)
Expand Down Expand Up @@ -197,6 +203,8 @@ class TSServerWorker {
listenPort: globalThis,
})[0]

cachedDependencyFiles = new Map<string, FetchedTypes>()

createEnv = async (args: {
envId: number
files: Files
Expand Down Expand Up @@ -277,7 +285,7 @@ class TSServerWorker {
}
}

const dependencyFiles = await fetchDependencyTypesFromCDN(dependenciesMap)
const dependencyFiles = await fetchDependencyTypesFromCDN(dependenciesMap, this.cachedDependencyFiles)
for (const [key, value] of Object.entries(dependencyFiles)) {
fsMap.set(key, value.module.code)
}
Expand Down

0 comments on commit 68c4d53

Please sign in to comment.