Skip to content

Commit 00a01f9

Browse files
committed
use existing FETCH_CACHE
1 parent 0c509af commit 00a01f9

File tree

1 file changed

+19
-35
lines changed
  • packages/repl/src/lib/workers/bundler

1 file changed

+19
-35
lines changed

packages/repl/src/lib/workers/bundler/index.ts

Lines changed: 19 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,9 @@ let svelte_url: string;
2727
let version: string;
2828
let current_id: number;
2929

30-
let files: Map<string, string>;
31-
let package_json: any;
32-
3330
let inited = Promise.withResolvers<typeof svelte>();
3431

3532
async function init(v: string, packages_url: string) {
36-
svelte_url = `${packages_url}/svelte@${v}`;
3733
const match = /^(pr|commit)-(.+)/.exec(v);
3834

3935
let tarball: FileDescription[] | undefined;
@@ -48,13 +44,19 @@ async function init(v: string, packages_url: string) {
4844
}
4945

5046
tarball = await parseTar(await response.arrayBuffer());
51-
files = new Map(tarball.map((file) => [file.name.substring('package'.length), file.text]));
5247

53-
const json = files.get('/package.json')!;
54-
package_json = JSON.parse(json);
55-
version = package_json.version;
48+
const json = tarball.find((file) => file.name === 'package/package.json')!.text;
49+
version = JSON.parse(json).version;
50+
51+
svelte_url = `svelte://svelte@${version}`;
52+
53+
for (const file of tarball) {
54+
const url = `${svelte_url}/${file.name.slice('package/'.length)}`;
55+
FETCH_CACHE.set(url, Promise.resolve({ url, body: file.text }));
56+
}
5657
} else {
5758
version = (await fetch(`${svelte_url}/package.json`).then((r) => r.json())).version;
59+
svelte_url = `${packages_url}/svelte@${version}`;
5860
}
5961

6062
console.log(`Using Svelte compiler version ${version}`);
@@ -297,13 +299,9 @@ async function get_bundle(
297299
return;
298300
} else {
299301
// relative import in an external file
300-
const url = new URL(importee, importer);
301-
if (url.protocol === 'file:') {
302-
return url.toString();
303-
}
304-
302+
const url = new URL(importee, importer).href;
305303
self.postMessage({ type: 'status', uid, message: `resolving ${url}` });
306-
return await follow_redirects(url.href, uid);
304+
return await follow_redirects(url, uid);
307305
}
308306
} else {
309307
// fetch from unpkg
@@ -315,20 +313,20 @@ async function get_bundle(
315313
}
316314

317315
const pkg_name = match[1];
318-
const version = pkg_name === 'svelte' ? svelte.VERSION : match[2] ?? 'latest';
316+
const pkg_url =
317+
pkg_name === 'svelte'
318+
? `${svelte_url}/package.json`
319+
: `${packages_url}/${pkg_name}/package.json`;
319320
const subpath = `.${match[3] ?? ''}`;
320321

321322
// if this was imported by one of our files, add it to the `imports` set
322323
if (importer && local_files_lookup.has(importer)) {
323324
imports.add(pkg_name);
324325
}
325326

326-
const fetch_package_info = async () => {
327+
const fetch_package_info = async (pkg_url) => {
327328
try {
328-
const pkg_url = await follow_redirects(
329-
`${packages_url}/${pkg_name}@${version}/package.json`,
330-
uid
331-
);
329+
pkg_url = await follow_redirects(pkg_url, uid);
332330

333331
if (!pkg_url) throw new Error();
334332

@@ -346,13 +344,7 @@ async function get_bundle(
346344
}
347345
};
348346

349-
let pkg: any;
350-
let pkg_url_base = 'file:';
351-
if (importee.startsWith(`svelte`) && package_json) {
352-
pkg = package_json;
353-
} else {
354-
({ pkg, pkg_url_base } = await fetch_package_info());
355-
}
347+
const { pkg, pkg_url_base } = await fetch_package_info(pkg_url);
356348

357349
try {
358350
const resolved_id = await resolve_from_pkg(pkg, subpath, uid, pkg_url_base);
@@ -369,14 +361,6 @@ async function get_bundle(
369361
return `export const BROWSER = true; export const DEV = true`;
370362
}
371363

372-
try {
373-
const resolved_url = new URL(resolved);
374-
375-
if (resolved_url.protocol === 'file:') {
376-
return files.get(resolved_url.pathname);
377-
}
378-
} catch {}
379-
380364
const cached_file = local_files_lookup.get(resolved);
381365
if (cached_file) {
382366
return cached_file.contents;

0 commit comments

Comments
 (0)