Skip to content

Commit 6f4a129

Browse files
committed
use Promise.withResolvers, simplify error handling
1 parent f08c880 commit 6f4a129

File tree

1 file changed

+45
-48
lines changed
  • packages/repl/src/lib/workers/bundler

1 file changed

+45
-48
lines changed

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

Lines changed: 45 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -27,72 +27,69 @@ let svelte_url: string;
2727
let version: string;
2828
let current_id: number;
2929

30-
let fulfil_ready: (arg?: never) => void;
31-
let reject_ready: (arg?: Error) => void;
32-
const ready = new Promise((f, r) => {
33-
fulfil_ready = f;
34-
reject_ready = r;
35-
});
36-
3730
let files: Map<string, string>;
3831
let package_json: any;
3932

40-
self.addEventListener('message', async (event: MessageEvent<BundleMessageData>) => {
41-
switch (event.data.type) {
42-
case 'init': {
43-
const svelte_version = event.data.svelte_version;
44-
packages_url = event.data.packages_url;
33+
let inited = Promise.withResolvers<typeof svelte>();
4534

46-
svelte_url = `${packages_url}/svelte@${svelte_version}`;
47-
const match = /^(pr|commit)-(.+)/.exec(svelte_version);
35+
async function init(v: string, packages_url: string) {
36+
svelte_url = `${packages_url}/svelte@${v}`;
37+
const match = /^(pr|commit)-(.+)/.exec(v);
4838

49-
let tarball: FileDescription[] | undefined;
39+
let tarball: FileDescription[] | undefined;
5040

51-
if (match) {
52-
try {
53-
const response = await fetch(`https://pkg.pr.new/svelte@${match[2]}`);
41+
if (match) {
42+
const response = await fetch(`https://pkg.pr.new/svelte@${match[2]}`);
5443

55-
if (!response.ok) {
56-
throw new Error(
57-
`impossible to fetch the compiler from this ${match[1] === 'pr' ? 'PR' : 'commit'}`
58-
);
59-
}
44+
if (!response.ok) {
45+
throw new Error(
46+
`impossible to fetch the compiler from this ${match[1] === 'pr' ? 'PR' : 'commit'}`
47+
);
48+
}
6049

61-
tarball = await parseTar(await response.arrayBuffer());
62-
files = new Map(
63-
tarball.map((file) => [file.name.substring('package'.length), file.text])
64-
);
65-
const package_json_content = files.get('/package.json')!;
66-
package_json = JSON.parse(package_json_content);
67-
} catch (e) {
68-
reject_ready(e as Error);
69-
return;
70-
}
71-
}
50+
tarball = await parseTar(await response.arrayBuffer());
51+
files = new Map(tarball.map((file) => [file.name.substring('package'.length), file.text]));
52+
53+
const json = files.get('/package.json')!;
54+
package_json = JSON.parse(json);
55+
version = package_json.version;
56+
} else {
57+
version = (await fetch(`${svelte_url}/package.json`).then((r) => r.json())).version;
58+
}
59+
60+
console.log(`Using Svelte compiler version ${version}`);
61+
62+
const entry = version.startsWith('3.')
63+
? 'compiler.js'
64+
: version.startsWith('4.')
65+
? 'compiler.cjs'
66+
: 'compiler/index.js';
67+
68+
const compiler = tarball
69+
? tarball.find((file) => file.name === `package/${entry}`)!.text
70+
: await fetch(`${svelte_url}/${entry}`).then((r) => r.text());
71+
72+
(0, eval)(compiler + `\n//# sourceURL=${entry}@` + version);
7273

73-
({ version } =
74-
package_json ?? (await fetch(`${svelte_url}/package.json`).then((r) => r.json())));
75-
console.log(`Using Svelte compiler version ${version}`);
74+
return svelte;
75+
}
7676

77-
const entry = version.startsWith('3.')
78-
? 'compiler.js'
79-
: version.startsWith('4.')
80-
? 'compiler.cjs'
81-
: 'compiler/index.js';
77+
self.addEventListener('message', async (event: MessageEvent<BundleMessageData>) => {
78+
switch (event.data.type) {
79+
case 'init': {
80+
const svelte_version = event.data.svelte_version;
8281

83-
const compiler = tarball
84-
? tarball.find((file) => file.name === `package/${entry}`)!.text
85-
: await fetch(`${svelte_url}/${entry}`).then((r) => r.text());
82+
packages_url = event.data.packages_url;
83+
svelte_url = `${packages_url}/svelte@${svelte_version}`;
8684

87-
(0, eval)(compiler + `\n//# sourceURL=${entry}@` + version);
85+
init(svelte_version, packages_url).then(inited.resolve, inited.reject);
8886

89-
fulfil_ready();
9087
break;
9188
}
9289

9390
case 'bundle': {
9491
try {
95-
await ready;
92+
await inited.promise;
9693
} catch (e) {
9794
self.postMessage({
9895
type: 'error',

0 commit comments

Comments
 (0)