Skip to content

Commit be182c9

Browse files
authored
support experimental options (sveltejs#1124)
1 parent 965cf81 commit be182c9

File tree

2 files changed

+69
-7
lines changed

2 files changed

+69
-7
lines changed

packages/editor/src/lib/compile-worker/worker.ts

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ declare var self: Window & typeof globalThis & { svelte: typeof import('svelte/c
1212

1313
let inited: PromiseWithResolvers<typeof self.svelte>;
1414

15+
let can_use_experimental_async = false;
16+
1517
async function init(v: string) {
1618
const svelte_url = v === 'local' ? '/svelte' : `https://unpkg.com/svelte@${v}`;
1719
const match = /^(?:pr|commit)-(.+)/.exec(v);
@@ -46,6 +48,23 @@ async function init(v: string) {
4648

4749
(0, eval)(compiler + `\n//# sourceURL=${entry}@` + version);
4850

51+
try {
52+
self.svelte.compileModule('', {
53+
generate: 'client',
54+
// @ts-expect-error
55+
experimental: {
56+
async: true
57+
}
58+
});
59+
60+
can_use_experimental_async = true;
61+
} catch (e) {
62+
console.error(e);
63+
// do nothing
64+
}
65+
66+
console.log({ can_use_experimental_async });
67+
4968
return self.svelte;
5069
}
5170

@@ -101,16 +120,28 @@ addEventListener('message', async (event) => {
101120
dev: options.dev,
102121
filename: file.name
103122
};
123+
104124
if (!is_svelte_3_or_4) {
105125
compilerOptions.modernAst = options.modernAst; // else Svelte 3/4 will throw an "unknown option" error
106126
}
127+
128+
if (can_use_experimental_async) {
129+
compilerOptions.experimental = { async: true };
130+
}
131+
107132
result = svelte.compile(file.contents, compilerOptions);
108133
} else {
109-
result = svelte.compileModule(file.contents, {
134+
const compilerOptions: any = {
110135
generate: options.generate,
111136
dev: options.dev,
112137
filename: file.name
113-
});
138+
};
139+
140+
if (can_use_experimental_async) {
141+
compilerOptions.experimental = { async: true };
142+
}
143+
144+
result = svelte.compileModule(file.contents, compilerOptions);
114145
}
115146

116147
postMessage({

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

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ let current_id: number;
3131

3232
let inited = Promise.withResolvers<typeof svelte>();
3333

34+
let can_use_experimental_async = false;
35+
3436
async function init(v: string, packages_url: string) {
3537
const match = /^(pr|commit)-(.+)/.exec(v);
3638

@@ -80,6 +82,23 @@ async function init(v: string, packages_url: string) {
8082

8183
(0, eval)(compiler + `\n//# sourceURL=${entry}@` + version);
8284

85+
try {
86+
self.svelte.compileModule('', {
87+
generate: 'client',
88+
// @ts-expect-error
89+
experimental: {
90+
async: true
91+
}
92+
});
93+
94+
can_use_experimental_async = true;
95+
} catch (e) {
96+
console.error(e);
97+
// do nothing
98+
}
99+
100+
console.log({ can_use_experimental_async });
101+
83102
return svelte;
84103
}
85104

@@ -405,13 +424,18 @@ async function get_bundle(
405424
if (cached_id && cached_id.code === code) {
406425
result = cached_id.result;
407426
} else if (id.endsWith('.svelte')) {
408-
result = svelte.compile(code, {
427+
const compilerOptions: any = {
409428
...options,
410429
filename: name + '.svelte',
411-
// @ts-expect-error
412430
generate: Number(svelte.VERSION.split('.')[0]) >= 5 ? 'client' : 'dom',
413431
dev: true
414-
});
432+
};
433+
434+
if (can_use_experimental_async) {
435+
compilerOptions.experimental = { async: true };
436+
}
437+
438+
result = svelte.compile(code, compilerOptions);
415439

416440
if (result.css?.code) {
417441
// resolve local files by inlining them
@@ -441,11 +465,18 @@ async function get_bundle(
441465
`.replace(/\t/g, '');
442466
}
443467
} else if (id.endsWith('.svelte.js')) {
444-
result = svelte.compileModule?.(code, {
468+
const compilerOptions: any = {
445469
filename: name + '.js',
446470
generate: 'client',
447471
dev: true
448-
});
472+
};
473+
474+
if (can_use_experimental_async) {
475+
compilerOptions.experimental = { async: true };
476+
}
477+
478+
result = svelte.compileModule?.(code, compilerOptions);
479+
449480
if (!result) {
450481
return null;
451482
}

0 commit comments

Comments
 (0)