Skip to content

Commit 18a5cb1

Browse files
committed
Merge branch 'main' into unify-sandbox
2 parents 11bc609 + bc1624f commit 18a5cb1

File tree

65 files changed

+573
-344
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+573
-344
lines changed

.changeset/beige-lamps-ring.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte': patch
3+
---
4+
5+
fix: always return true from `deleteProperty` trap

.changeset/clean-shirts-yawn.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte': patch
3+
---
4+
5+
breaking: throw error if derived creates state and then depends on it

.changeset/five-maps-reflect.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte': patch
3+
---
4+
5+
fix: ensure assignments to state field inside constructor trigger effects

.changeset/green-windows-tap.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte': patch
3+
---
4+
5+
fix: handle deletions of previously-unread state proxy properties

.changeset/pre.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
"beige-cobras-smoke",
2222
"beige-flies-wash",
2323
"beige-gifts-appear",
24+
"beige-lamps-ring",
2425
"beige-mirrors-listen",
2526
"beige-rabbits-shave",
2627
"beige-seas-share",
@@ -82,6 +83,7 @@
8283
"clean-cats-wave",
8384
"clean-eels-beg",
8485
"clean-melons-wash",
86+
"clean-shirts-yawn",
8587
"clever-chefs-relate",
8688
"clever-maps-travel",
8789
"clever-rockets-burn",
@@ -198,6 +200,7 @@
198200
"fifty-rice-wait",
199201
"fifty-steaks-float",
200202
"fifty-toys-invite",
203+
"five-maps-reflect",
201204
"five-tigers-search",
202205
"flat-feet-visit",
203206
"flat-ghosts-fly",
@@ -273,12 +276,14 @@
273276
"great-fans-unite",
274277
"great-icons-retire",
275278
"great-plums-pretend",
279+
"green-baboons-sip",
276280
"green-eggs-approve",
277281
"green-fishes-lie",
278282
"green-hounds-play",
279283
"green-snails-tickle",
280284
"green-tigers-judge",
281285
"green-walls-clap",
286+
"green-windows-tap",
282287
"grumpy-avocados-fetch",
283288
"grumpy-insects-sleep",
284289
"grumpy-jars-sparkle",
@@ -419,6 +424,7 @@
419424
"mighty-files-hammer",
420425
"mighty-frogs-obey",
421426
"mighty-paws-smash",
427+
"mighty-poets-fix",
422428
"mighty-shoes-nail",
423429
"modern-apricots-promise",
424430
"modern-fishes-double",
@@ -631,6 +637,7 @@
631637
"six-boats-shave",
632638
"six-chicken-kneel",
633639
"six-gorillas-obey",
640+
"six-moons-invent",
634641
"six-vans-add",
635642
"sixty-items-crash",
636643
"sixty-numbers-hope",
@@ -823,7 +830,9 @@
823830
"weak-frogs-bow",
824831
"weak-terms-destroy",
825832
"wet-bats-exercise",
833+
"wet-donkeys-fry",
826834
"wet-games-fly",
835+
"wet-pears-buy",
827836
"wet-pears-remain",
828837
"wet-wombats-repeat",
829838
"wicked-bikes-matter",

.changeset/six-moons-invent.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte': patch
3+
---
4+
5+
fix: make internal sources ownerless

.changeset/wet-donkeys-fry.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte': patch
3+
---
4+
5+
fix: join text nodes separated by comments

.changeset/wet-pears-buy.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte': patch
3+
---
4+
5+
feat: allow non-synchronous legacy component instantiation

benchmarking/benchmarks/kairo/kairo_avoidable.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import * as $ from '../../../packages/svelte/src/internal/client/index.js';
33
import { busy } from './util.js';
44

55
function setup() {
6-
let head = $.source(0);
6+
let head = $.state(0);
77
let computed1 = $.derived(() => $.get(head));
88
let computed2 = $.derived(() => ($.get(computed1), 0));
99
let computed3 = $.derived(() => (busy(), $.get(computed2) + 1)); // heavy computation

benchmarking/benchmarks/kairo/kairo_broad.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { assert, fastest_test } from '../../utils.js';
22
import * as $ from '../../../packages/svelte/src/internal/client/index.js';
33

44
function setup() {
5-
let head = $.source(0);
5+
let head = $.state(0);
66
let last = head;
77
let counter = 0;
88

benchmarking/benchmarks/kairo/kairo_deep.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ let len = 50;
55
const iter = 50;
66

77
function setup() {
8-
let head = $.source(0);
8+
let head = $.state(0);
99
let current = head;
1010
for (let i = 0; i < len; i++) {
1111
let c = current;

benchmarking/benchmarks/kairo/kairo_diamond.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import * as $ from '../../../packages/svelte/src/internal/client/index.js';
44
let width = 5;
55

66
function setup() {
7-
let head = $.source(0);
7+
let head = $.state(0);
88
let current = [];
99
for (let i = 0; i < width; i++) {
1010
current.push(

benchmarking/benchmarks/kairo/kairo_mux.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { assert, fastest_test } from '../../utils.js';
22
import * as $ from '../../../packages/svelte/src/internal/client/index.js';
33

44
function setup() {
5-
let heads = new Array(100).fill(null).map((_) => $.source(0));
5+
let heads = new Array(100).fill(null).map((_) => $.state(0));
66
const mux = $.derived(() => {
77
return Object.fromEntries(heads.map((h) => $.get(h)).entries());
88
});

benchmarking/benchmarks/kairo/kairo_repeated.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import * as $ from '../../../packages/svelte/src/internal/client/index.js';
44
let size = 30;
55

66
function setup() {
7-
let head = $.source(0);
7+
let head = $.state(0);
88
let current = $.derived(() => {
99
let result = 0;
1010
for (let i = 0; i < size; i++) {

benchmarking/benchmarks/kairo/kairo_triangle.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ function count(number) {
1111
}
1212

1313
function setup() {
14-
let head = $.source(0);
14+
let head = $.state(0);
1515
let current = head;
1616
let list = [];
1717
for (let i = 0; i < width; i++) {

benchmarking/benchmarks/kairo/kairo_unstable.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { assert, fastest_test } from '../../utils.js';
22
import * as $ from '../../../packages/svelte/src/internal/client/index.js';
33

44
function setup() {
5-
let head = $.source(0);
5+
let head = $.state(0);
66
const double = $.derived(() => $.get(head) * 2);
77
const inverse = $.derived(() => -$.get(head));
88
let current = $.derived(() => {

benchmarking/benchmarks/mol_bench.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ const numbers = Array.from({ length: 5 }, (_, i) => i);
2020

2121
function setup() {
2222
let res = [];
23-
const A = $.source(0);
24-
const B = $.source(0);
23+
const A = $.state(0);
24+
const B = $.state(0);
2525
const C = $.derived(() => ($.get(A) % 2) + ($.get(B) % 2));
2626
const D = $.derived(() => numbers.map((i) => i + ($.get(A) % 2) - ($.get(B) % 2)));
2727
D.equals = function (/** @type {number[]} */ l) {

benchmarking/benchmarks/sbench.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const COUNT = 1e5;
99
*/
1010
function create_data_signals(n, sources) {
1111
for (let i = 0; i < n; i++) {
12-
sources[i] = $.source(i);
12+
sources[i] = $.state(i);
1313
}
1414
return sources;
1515
}

packages/svelte/CHANGELOG.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,31 @@
11
# svelte
22

3+
## 5.0.0-next.238
4+
5+
### Patch Changes
6+
7+
- fix: always return true from `deleteProperty` trap ([#13008](https://github.com/sveltejs/svelte/pull/13008))
8+
9+
- fix: handle deletions of previously-unread state proxy properties ([#13008](https://github.com/sveltejs/svelte/pull/13008))
10+
11+
- fix: make internal sources ownerless ([#13013](https://github.com/sveltejs/svelte/pull/13013))
12+
13+
- fix: join text nodes separated by comments ([#13009](https://github.com/sveltejs/svelte/pull/13009))
14+
15+
## 5.0.0-next.237
16+
17+
### Patch Changes
18+
19+
- breaking: throw error if derived creates state and then depends on it ([#12985](https://github.com/sveltejs/svelte/pull/12985))
20+
21+
- fix: ensure assignments to state field inside constructor trigger effects ([#12985](https://github.com/sveltejs/svelte/pull/12985))
22+
23+
- fix: ensure $inspect works with SvelteMap and SvelteSet ([#12994](https://github.com/sveltejs/svelte/pull/12994))
24+
25+
- chore: default options.filename to "(unknown)" ([#12997](https://github.com/sveltejs/svelte/pull/12997))
26+
27+
- feat: allow non-synchronous legacy component instantiation ([#12970](https://github.com/sveltejs/svelte/pull/12970))
28+
329
## 5.0.0-next.236
430

531
### Patch Changes

packages/svelte/knip.json

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"$schema": "https://unpkg.com/knip@5/schema.json",
3+
"entry": [
4+
"src/*/index.js",
5+
"src/index-client.ts",
6+
"src/index-server.ts",
7+
"src/index.d.ts",
8+
"tests/**/*.js",
9+
"tests/**/*.ts",
10+
"!tests/**/*.svelte",
11+
"!tests/**/*.svelte.js",
12+
"!tests/**/_output",
13+
"!tests/runtime-browser/driver.js",
14+
"!tests/runtime-browser/driver-ssr.js",
15+
"!tests/types/component.ts"
16+
],
17+
"project": ["src/**"]
18+
}

packages/svelte/messages/client-errors/errors.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,10 @@
7272

7373
> Cannot set prototype of `$state` object
7474
75-
## state_unsafe_mutation
75+
## state_unsafe_local_read
7676

77-
> Updating state inside a derived is forbidden. If the value should not be reactive, declare it without `$state`
77+
> Reading state that was created inside the same derived is forbidden. Consider using `untrack` to read locally created state
7878
79-
## svelte_component_invalid_this_value
79+
## state_unsafe_mutation
8080

81-
> The `this={...}` property of a `<svelte:component>` must be a Svelte component, if defined
81+
> Updating state inside a derived is forbidden. If the value should not be reactive, declare it without `$state`

packages/svelte/messages/compile-errors/template.md

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -302,10 +302,6 @@ HTML restricts where certain elements can appear. In case of a violation the bro
302302

303303
> `<svelte:fragment>` must be the direct child of a component
304304
305-
## svelte_fragment_invalid_slot
306-
307-
> `<svelte:fragment>` slot attribute must have a static value
308-
309305
## svelte_head_illegal_attribute
310306

311307
> `<svelte:head>` cannot have attributes nor directives

packages/svelte/messages/compile-warnings/script.md

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
## derived_iife
2-
3-
> Use `$derived.by(() => {...})` instead of `$derived((() => {...})())`
4-
51
## export_let_unused
62

73
> Component has unused export property '%name%'. If it is for external reference only, please consider using `export const %name%`

packages/svelte/package.json

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "svelte",
33
"description": "Cybernetically enhanced web apps",
44
"license": "MIT",
5-
"version": "5.0.0-next.236",
5+
"version": "5.0.0-next.238",
66
"type": "module",
77
"types": "./types/index.d.ts",
88
"engines": {
@@ -124,11 +124,16 @@
124124
"@rollup/plugin-terser": "^0.4.4",
125125
"@rollup/plugin-virtual": "^3.0.2",
126126
"@types/aria-query": "^5.0.4",
127+
"@types/node": "^20.11.5",
127128
"dts-buddy": "^0.5.1",
128129
"esbuild": "^0.19.11",
130+
"eslint": "^9.6.0",
131+
"prettier": "^3.2.4",
129132
"rollup": "^4.9.5",
130133
"source-map": "^0.7.4",
131-
"tiny-glob": "^0.2.9"
134+
"tiny-glob": "^0.2.9",
135+
"typescript": "^5.5.2",
136+
"vitest": "^1.2.1"
132137
},
133138
"dependencies": {
134139
"@ampproject/remapping": "^2.2.1",
@@ -144,18 +149,5 @@
144149
"locate-character": "^3.0.0",
145150
"magic-string": "^0.30.5",
146151
"zimmerframe": "^1.1.2"
147-
},
148-
"knip": {
149-
"entry": [
150-
"src/*/index.js",
151-
"src/index-client.ts",
152-
"src/index-server.ts",
153-
"src/index.d.ts",
154-
"tests/**/*.js",
155-
"tests/**/*.ts"
156-
],
157-
"project": [
158-
"src/**"
159-
]
160152
}
161153
}

packages/svelte/src/compiler/errors.js

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1246,15 +1246,6 @@ export function svelte_fragment_invalid_placement(node) {
12461246
e(node, "svelte_fragment_invalid_placement", "`<svelte:fragment>` must be the direct child of a component");
12471247
}
12481248

1249-
/**
1250-
* `<svelte:fragment>` slot attribute must have a static value
1251-
* @param {null | number | NodeLike} node
1252-
* @returns {never}
1253-
*/
1254-
export function svelte_fragment_invalid_slot(node) {
1255-
e(node, "svelte_fragment_invalid_slot", "`<svelte:fragment>` slot attribute must have a static value");
1256-
}
1257-
12581249
/**
12591250
* `<svelte:head>` cannot have attributes nor directives
12601251
* @param {null | number | NodeLike} node

packages/svelte/src/compiler/phases/3-transform/client/transform-client.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ export function client_component(analysis, options) {
207207

208208
for (const [name, binding] of analysis.instance.scope.declarations) {
209209
if (binding.kind === 'legacy_reactive') {
210-
legacy_reactive_declarations.push(b.const(name, b.call('$.mutable_source')));
210+
legacy_reactive_declarations.push(b.const(name, b.call('$.mutable_state')));
211211
}
212212
if (binding.kind === 'store_sub') {
213213
if (store_setup.length === 0) {

packages/svelte/src/compiler/phases/3-transform/client/utils.js

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -47,19 +47,10 @@ export function build_getter(node, state) {
4747

4848
/**
4949
* @param {Expression} value
50-
* @param {PrivateIdentifier | string} proxy_reference
50+
* @param {Expression} previous
5151
*/
52-
export function build_proxy_reassignment(value, proxy_reference) {
53-
return dev
54-
? b.call(
55-
'$.proxy',
56-
value,
57-
b.null,
58-
typeof proxy_reference === 'string'
59-
? b.id(proxy_reference)
60-
: b.member(b.this, proxy_reference)
61-
)
62-
: b.call('$.proxy', value);
52+
export function build_proxy_reassignment(value, previous) {
53+
return dev ? b.call('$.proxy', value, b.null, previous) : b.call('$.proxy', value);
6354
}
6455

6556
/**

0 commit comments

Comments
 (0)