Skip to content

Commit a703c47

Browse files
committed
fix: rename option and add version checking
1 parent bb1b074 commit a703c47

File tree

10 files changed

+176
-57
lines changed

10 files changed

+176
-57
lines changed

apps/svelte.dev/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
7272
"satori": "^0.10.13",
7373
"satori-html": "^0.3.2",
7474
"sv": "^0.6.8",
75-
"svelte": "5.23.0",
75+
"svelte": "^5.33.0",
7676
"svelte-check": "^4.1.1",
7777
"svelte-preprocess": "^6.0.3",
7878
"tiny-glob": "^0.2.9",

apps/svelte.dev/src/routes/(authed)/playground/[id]/+page.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
let setting_hash: any = null;
2323
2424
// svelte-ignore non_reactive_update
25-
let version = page.url.searchParams.get('version') || 'latest';
25+
let version = $derived(page.url.searchParams.get('version') || 'latest');
2626
2727
// Hashed URLs are less safe (we can't delete malicious REPLs), therefore
2828
// don't allow links to escape the sandbox restrictions

apps/svelte.dev/src/routes/(authed)/playground/[id]/embed/+page.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
1313
let repl = $state() as ReturnType<typeof Repl>;
1414
15-
let version = page.url.searchParams.get('version') || 'latest';
15+
let version = $derived(page.url.searchParams.get('version') || 'latest');
1616
1717
// TODO make this munging unnecessary
1818
function munge(data: any): File {

packages/repl/src/lib/Output/CompilerOptions.svelte

Lines changed: 31 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,19 @@
11
<script lang="ts">
22
import { Checkbox } from '@sveltejs/site-kit/components';
33
import type { Workspace } from '../Workspace.svelte';
4+
import { get_repl_context } from '../../lib/context.js';
5+
6+
const { svelteVersion } = $derived(get_repl_context());
7+
8+
const is_fragments_available = $derived.by(() => {
9+
const [major, minor] = svelteVersion.split('.');
10+
// if the version is 5.33.0 or greater, fragments are available
11+
if (+major >= 5 && +minor >= 33) {
12+
return true;
13+
}
14+
// we assume they are available if work with local
15+
return svelteVersion === 'local';
16+
});
417
518
let { workspace }: { workspace: Workspace } = $props();
619
</script>
@@ -23,23 +36,24 @@
2336
<label for={generate}><span class="string">"{generate}"</span></label>
2437
{/each},
2538
</div>
26-
27-
<div class="option">
28-
<span class="key">templatingMode:</span>
29-
30-
{#each ['string', 'functional'] as const as templating_mode}
31-
<input
32-
id={templating_mode}
33-
type="radio"
34-
checked={workspace.compiler_options.templatingMode === templating_mode}
35-
value={templating_mode}
36-
onchange={() => {
37-
workspace.update_compiler_options({ templatingMode: templating_mode });
38-
}}
39-
/>
40-
<label for={templating_mode}><span class="string">"{templating_mode}"</span></label>
41-
{/each},
42-
</div>
39+
{#if is_fragments_available}
40+
<div class="option">
41+
<span class="key">fragments:</span>
42+
43+
{#each ['html', 'tree'] as const as templating_mode}
44+
<input
45+
id={templating_mode}
46+
type="radio"
47+
checked={workspace.compiler_options.fragments === templating_mode}
48+
value={templating_mode}
49+
onchange={() => {
50+
workspace.update_compiler_options({ fragments: templating_mode });
51+
}}
52+
/>
53+
<label for={templating_mode}><span class="string">"{templating_mode}"</span></label>
54+
{/each},
55+
</div>
56+
{/if}
4357

4458
<!-- svelte-ignore a11y_label_has_associated_control (TODO this warning should probably be disabled if there's a component)-->
4559
<label class="option">

packages/repl/src/lib/Repl.svelte

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,7 @@
8888
async function rebundle() {
8989
bundler!.bundle(workspace.files as File[], {
9090
tailwind: workspace.tailwind,
91-
// @ts-ignore
92-
templatingMode: workspace.compiler_options.templatingMode
91+
fragments: workspace.compiler_options.fragments
9392
});
9493
}
9594
@@ -141,7 +140,11 @@
141140
bundler,
142141
toggleable,
143142
workspace,
144-
svelteVersion
143+
get svelteVersion() {
144+
// we want this to be reactive since we are checking in
145+
// the compiler options
146+
return svelteVersion;
147+
}
145148
});
146149
147150
function before_unload(event: BeforeUnloadEvent) {

packages/repl/src/lib/Workspace.svelte.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ export interface ExposedCompilerOptions {
9494
generate: 'client' | 'server';
9595
dev: boolean;
9696
modernAst: boolean;
97-
templatingMode: 'string' | 'functional';
97+
fragments: 'html' | 'tree' | undefined;
9898
}
9999

100100
export class Workspace {
@@ -106,7 +106,9 @@ export class Workspace {
106106
generate: 'client',
107107
dev: false,
108108
modernAst: true,
109-
templatingMode: 'string'
109+
// default to undefined so it's removed if the current version
110+
// doesn't support it
111+
fragments: undefined
110112
});
111113
compiled = $state<Record<string, Compiled>>({});
112114

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -308,8 +308,7 @@ async function get_bundle(
308308
filename: name + '.svelte',
309309
generate: is_gt_5 ? 'client' : 'dom',
310310
dev: true,
311-
// @ts-expect-error
312-
templatingMode: options.templatingMode
311+
fragments: options.fragments
313312
};
314313

315314
if (is_gt_5) {
@@ -320,6 +319,12 @@ async function get_bundle(
320319
compilerOptions.experimental = { async: true };
321320
}
322321

322+
if (compilerOptions.fragments == null) {
323+
// if fragments is not set it probably means we are using
324+
// a version that doesn't support it, so we need to remove it
325+
delete compilerOptions.fragments;
326+
}
327+
323328
result = svelte.compile(code, compilerOptions);
324329

325330
walk(result.ast.html as import('svelte/compiler').AST.TemplateNode, null, {

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ addEventListener('message', async (event) => {
5959
: options.generate,
6060
dev: options.dev,
6161
filename: file.name,
62-
templatingMode: options.templatingMode
62+
fragments: options.fragments
6363
};
6464

6565
if (!is_svelte_3_or_4) {
@@ -70,6 +70,12 @@ addEventListener('message', async (event) => {
7070
compilerOptions.experimental = { async: true };
7171
}
7272

73+
if (compilerOptions.fragments == null) {
74+
// if fragments is not set it probably means we are using
75+
// a version that doesn't support it, so we need to remove it
76+
delete compilerOptions.fragments;
77+
}
78+
7379
result = svelte.compile(file.contents, compilerOptions);
7480
} else {
7581
const compilerOptions: any = {

packages/repl/src/lib/workers/workers.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ export interface MigrateOutput {
5252
export interface BundleOptions {
5353
tailwind?: boolean;
5454
runes?: boolean;
55+
fragments?: 'html' | 'tree';
5556
}
5657

5758
export type BundleMessageData = {

0 commit comments

Comments
 (0)