Merge branch 'main' into partial-components

partial-components
ComputerGuy 1 day ago
commit 77d2143ecd

@ -4,7 +4,7 @@ title: $bindable
Ordinarily, props go one way, from parent to child. This makes it easy to understand how data flows around your app.
In Svelte, component props can be _bound_, which means that data can also flow _up_ from child to parent. This isn't something you should do often, but it can simplify your code if used sparingly and carefully.
In Svelte, component props can be _bound_, which means that data can also flow _up_ from child to parent. This isn't something you should do often — overuse can make your data flow unpredictable and your components harder to maintain — but it can simplify your code if used sparingly and carefully.
It also means that a state proxy can be _mutated_ in the child.

@ -12,7 +12,9 @@ title: {#each ...}
{#each expression as name, index}...{/each}
```
Iterating over values can be done with an each block. The values in question can be arrays, array-like objects (i.e. anything with a `length` property), or iterables like `Map` and `Set` — in other words, anything that can be used with `Array.from`.
Iterating over values can be done with an each block. The values in question can be arrays, array-like objects (i.e. anything with a `length` property), or iterables like `Map` and `Set`— in other words, anything that can be used with `Array.from`.
If the value is `null` or `undefined`, it is treated the same as an empty array (which will cause [else blocks](#Else-blocks) to be rendered, where applicable).
```svelte
<h1>Shopping list</h1>

@ -18,7 +18,7 @@ There are online forums and chats which are a great place for discussion about b
## Are there any third-party resources?
Svelte Society maintains a [list of books and videos](https://sveltesociety.dev/resources).
Svelte Society maintains a [list of books and videos](https://sveltesociety.dev/collection/a-list-of-books-and-courses-ac01dd10363184fa).
## How can I get VS Code to syntax-highlight my .svelte files?

@ -41,7 +41,7 @@
"prettier-plugin-svelte": "^3.4.0",
"svelte": "workspace:^",
"typescript": "^5.5.4",
"typescript-eslint": "^8.48.0",
"typescript-eslint": "^8.48.1",
"v8-natives": "^1.2.5",
"vitest": "^2.1.9"
}

@ -1,5 +1,37 @@
# svelte
## 5.45.10
### Patch Changes
- fix: race condition when importing `AsyncLocalStorage` ([#17350](https://github.com/sveltejs/svelte/pull/17350))
## 5.45.9
### Patch Changes
- fix: correctly reschedule deferred effects when reviving a batch after async work ([#17332](https://github.com/sveltejs/svelte/pull/17332))
- fix: correctly print `!doctype` during `print` ([#17341](https://github.com/sveltejs/svelte/pull/17341))
## 5.45.8
### Patch Changes
- fix: set AST `root.start` to `0` and `root.end` to `template.length` ([#17125](https://github.com/sveltejs/svelte/pull/17125))
- fix: prevent erroneous `state_referenced_locally` warnings on prop fallbacks ([#17329](https://github.com/sveltejs/svelte/pull/17329))
## 5.45.7
### Patch Changes
- fix: Add `<textarea wrap="off">` as a valid attribute value ([#17326](https://github.com/sveltejs/svelte/pull/17326))
- fix: add more css selectors to `print()` ([#17330](https://github.com/sveltejs/svelte/pull/17330))
- fix: don't crash on `hydratable` serialization failure ([#17315](https://github.com/sveltejs/svelte/pull/17315))
## 5.45.6
### Patch Changes

@ -1422,7 +1422,7 @@ export interface HTMLTextareaAttributes extends HTMLAttributes<HTMLTextAreaEleme
// needs both casing variants because language tools does lowercase names of non-shorthand attributes
defaultValue?: string | string[] | number | undefined | null;
defaultvalue?: string | string[] | number | undefined | null;
wrap?: 'hard' | 'soft' | undefined | null;
wrap?: 'hard' | 'soft' | 'off' | undefined | null;
'on:change'?: ChangeEventHandler<HTMLTextAreaElement> | undefined | null;
onchange?: ChangeEventHandler<HTMLTextAreaElement> | undefined | null;

@ -2,7 +2,7 @@
"name": "svelte",
"description": "Cybernetically enhanced web apps",
"license": "MIT",
"version": "5.45.6",
"version": "5.45.10",
"type": "module",
"types": "./types/index.d.ts",
"engines": {

@ -117,21 +117,8 @@ export class Parser {
e.unexpected_eof(this.index);
}
if (this.root.fragment.nodes.length) {
let start = /** @type {number} */ (this.root.fragment.nodes[0].start);
while (regex_whitespace.test(template[start])) start += 1;
let end = /** @type {number} */ (
this.root.fragment.nodes[this.root.fragment.nodes.length - 1].end
);
while (regex_whitespace.test(template[end - 1])) end -= 1;
this.root.start = start;
this.root.end = end;
} else {
// @ts-ignore
this.root.start = this.root.end = null;
}
this.root.start = 0;
this.root.end = template.length;
const options_index = this.root.fragment.nodes.findIndex(
/** @param {any} thing */

@ -146,5 +146,15 @@ export function VariableDeclarator(node, context) {
}
}
context.next();
if (node.init && get_rune(node.init, context.state.scope) === '$props') {
// prevent erroneous `state_referenced_locally` warnings on prop fallbacks
context.visit(node.id, {
...context.state,
function_depth: context.state.function_depth + 1
});
context.visit(node.init);
} else {
context.next();
}
}

@ -112,12 +112,13 @@ function base_element(node, context) {
}
const multiline_attributes = attributes(node.attributes, child_context);
const is_doctype_node = node.name.toLowerCase() === '!doctype';
const is_self_closing =
is_void(node.name) || (node.type === 'Component' && node.fragment.nodes.length === 0);
let multiline_content = false;
if (is_self_closing) {
if (is_doctype_node) child_context.write(`>`);
else if (is_self_closing) {
child_context.write(`${multiline_attributes ? '' : ' '}/>`);
} else {
child_context.write('>');
@ -181,6 +182,18 @@ const css_visitors = {
}
},
AttributeSelector(node, context) {
context.write(`[${node.name}`);
if (node.matcher) {
context.write(node.matcher);
context.write(`"${node.value}"`);
if (node.flags) {
context.write(` ${node.flags}`);
}
}
context.write(']');
},
Block(node, context) {
context.write('{');
@ -221,10 +234,22 @@ const css_visitors = {
context.write(`${node.property}: ${node.value};`);
},
IdSelector(node, context) {
context.write(`#${node.name}`);
},
NestingSelector(node, context) {
context.write('&');
},
Nth(node, context) {
context.write(node.value);
},
Percentage(node, context) {
context.write(`${node.value}%`);
},
PseudoClassSelector(node, context) {
context.write(`:${node.name}`);

@ -44,7 +44,6 @@ import { eager_effect, unlink_effect } from './effects.js';
* effect: Effect | null;
* effects: Effect[];
* render_effects: Effect[];
* block_effects: Effect[];
* }} EffectTarget
*/
@ -128,15 +127,15 @@ export class Batch {
/**
* Deferred effects (which run after async work has completed) that are DIRTY
* @type {Effect[]}
* @type {Set<Effect>}
*/
#dirty_effects = [];
#dirty_effects = new Set();
/**
* Deferred effects that are MAYBE_DIRTY
* @type {Effect[]}
* @type {Set<Effect>}
*/
#maybe_dirty_effects = [];
#maybe_dirty_effects = new Set();
/**
* A set of branches that still exist, but will be destroyed when this batch
@ -167,8 +166,7 @@ export class Batch {
parent: null,
effect: null,
effects: [],
render_effects: [],
block_effects: []
render_effects: []
};
for (const root of root_effects) {
@ -187,7 +185,6 @@ export class Batch {
if (this.is_deferred()) {
this.#defer_effects(target.effects);
this.#defer_effects(target.render_effects);
this.#defer_effects(target.block_effects);
} else {
// If sources are written to, then work needs to happen in a separate batch, else prior sources would be mixed with
// newly updated sources, which could lead to infinite loops when effects run over and over again.
@ -228,8 +225,7 @@ export class Batch {
parent: target,
effect,
effects: [],
render_effects: [],
block_effects: []
render_effects: []
};
}
@ -241,7 +237,7 @@ export class Batch {
} else if (async_mode_flag && (flags & (RENDER_EFFECT | MANAGED_EFFECT)) !== 0) {
target.render_effects.push(effect);
} else if (is_dirty(effect)) {
if ((effect.f & BLOCK_EFFECT) !== 0) target.block_effects.push(effect);
if ((effect.f & BLOCK_EFFECT) !== 0) this.#dirty_effects.add(effect);
update_effect(effect);
}
@ -263,7 +259,6 @@ export class Batch {
// once the boundary is ready?
this.#defer_effects(target.effects);
this.#defer_effects(target.render_effects);
this.#defer_effects(target.block_effects);
target = /** @type {EffectTarget} */ (target.parent);
}
@ -279,8 +274,11 @@ export class Batch {
*/
#defer_effects(effects) {
for (const e of effects) {
const target = (e.f & DIRTY) !== 0 ? this.#dirty_effects : this.#maybe_dirty_effects;
target.push(e);
if ((e.f & DIRTY) !== 0) {
this.#dirty_effects.add(e);
} else if ((e.f & MAYBE_DIRTY) !== 0) {
this.#maybe_dirty_effects.add(e);
}
// Since we're not executing these effects now, we need to clear any WAS_MARKED flags
// so that other batches can correctly reach these effects during their own traversal
@ -390,8 +388,7 @@ export class Batch {
parent: null,
effect: null,
effects: [],
render_effects: [],
block_effects: []
render_effects: []
};
for (const batch of batches) {
@ -484,6 +481,7 @@ export class Batch {
revive() {
for (const e of this.#dirty_effects) {
this.#maybe_dirty_effects.delete(e);
set_signal_status(e, DIRTY);
schedule_effect(e);
}
@ -493,9 +491,6 @@ export class Batch {
schedule_effect(e);
}
this.#dirty_effects = [];
this.#maybe_dirty_effects = [];
this.flush();
}

@ -57,8 +57,16 @@ function encode(key, value, unresolved) {
entry.serialized = devalue.uneval(entry.value, (value, uneval) => {
if (is_promise(value)) {
// we serialize promises as `"${i}"`, because it's impossible for that string
// to occur 'naturally' (since the quote marks would have to be escaped)
// this placeholder is returned synchronously from `uneval`, which includes it in the
// serialized string. Later (at least one microtask from now), when `p.then` runs, it'll
// be replaced.
const placeholder = `"${uid++}"`;
const p = value
.then((v) => `r(${uneval(v)})`)
.then((v) => {
entry.serialized = entry.serialized.replace(placeholder, `r(${uneval(v)})`);
})
.catch((devalue_error) =>
e.hydratable_serialization_failed(
key,
@ -66,23 +74,11 @@ function encode(key, value, unresolved) {
)
);
// prevent unhandled rejections from crashing the server
p.catch(() => {});
// track which promises are still resolving when render is complete
unresolved?.set(p, key);
p.finally(() => unresolved?.delete(p));
// we serialize promises as `"${i}"`, because it's impossible for that string
// to occur 'naturally' (since the quote marks would have to be escaped)
const placeholder = `"${uid++}"`;
(entry.promises ??= []).push(
p.then((s) => {
entry.serialized = entry.serialized.replace(placeholder, s);
})
);
// prevent unhandled rejections from crashing the server, track which promises are still resolving when render is complete
p.catch(() => {}).finally(() => unresolved?.delete(p));
(entry.promises ??= []).push(p);
return placeholder;
}
});

@ -2,7 +2,7 @@
/** @import { AsyncLocalStorage } from 'node:async_hooks' */
/** @import { RenderContext } from '#server' */
import { deferred } from '../shared/utils.js';
import { deferred, noop } from '../shared/utils.js';
import * as e from './errors.js';
/** @type {Promise<void> | null} */
@ -56,14 +56,26 @@ export async function with_render_context(fn) {
/** @type {AsyncLocalStorage<RenderContext | null> | null} */
let als = null;
/** @type {Promise<void> | null} */
let als_import = null;
export async function init_render_context() {
if (als !== null) return;
try {
// @ts-ignore -- we don't include node types in the production build
const { AsyncLocalStorage } = await import('node:async_hooks');
als = new AsyncLocalStorage();
} catch {}
/**
*
* @returns {Promise<void>}
*/
export function init_render_context() {
// It's important the right side of this assignment can run a maximum of one time
// otherwise it's possible for a very, very well-timed race condition to assign to `als`
// at the beginning of a render, and then another render to assign to it again, which causes
// the first render's second half to use a new instance of `als` which doesn't have its
// context anymore.
// @ts-ignore -- we don't include node types in the production build
als_import ??= import('node:async_hooks')
.then((hooks) => {
als = new hooks.AsyncLocalStorage();
})
.then(noop, noop);
return als_import;
}
// this has to be a function because rollup won't treeshake it if it's a constant

@ -4,5 +4,5 @@
* The current version, as set in package.json.
* @type {string}
*/
export const VERSION = '5.45.6';
export const VERSION = '5.45.10';
export const PUBLIC_VERSION = '5';

@ -1,6 +1,6 @@
# Test repo
This repo tries to migrate as many tests from the currente Svelte project over to test against the new compiler/runtime.
This repo tries to migrate as many tests from the current Svelte project over to test against the new compiler/runtime.
## Differences to the old test suite

@ -1,7 +1,7 @@
{
"css": null,
"js": [],
"start": 37,
"start": 0,
"end": 117,
"type": "Root",
"fragment": {

@ -2,7 +2,7 @@
"css": null,
"js": [],
"start": 0,
"end": 27,
"end": 76,
"type": "Root",
"fragment": {
"type": "Fragment",

@ -1079,7 +1079,7 @@
}
},
"js": [],
"start": 808,
"start": 0,
"end": 820,
"type": "Root",
"fragment": {

@ -398,8 +398,8 @@
}
},
"js": [],
"start": null,
"end": null,
"start": 0,
"end": 386,
"type": "Root",
"fragment": {
"type": "Fragment",

@ -1,7 +1,7 @@
{
"css": null,
"js": [],
"start": 30,
"start": 0,
"end": 192,
"type": "Root",
"fragment": {

@ -1,7 +1,7 @@
{
"css": null,
"js": [],
"start": 45,
"start": 0,
"end": 119,
"type": "Root",
"fragment": {

@ -2,7 +2,7 @@
"css": null,
"js": [],
"start": 0,
"end": 102,
"end": 169,
"type": "Root",
"fragment": {
"type": "Fragment",

@ -0,0 +1,6 @@
<script>
// script and style but no markup
</script>
<style>
div { color: red; }
</style>

@ -0,0 +1,112 @@
{
"css": {
"type": "StyleSheet",
"start": 54,
"end": 91,
"attributes": [],
"children": [
{
"type": "Rule",
"prelude": {
"type": "SelectorList",
"start": 63,
"end": 66,
"children": [
{
"type": "ComplexSelector",
"start": 63,
"end": 66,
"children": [
{
"type": "RelativeSelector",
"combinator": null,
"selectors": [
{
"type": "TypeSelector",
"name": "div",
"start": 63,
"end": 66
}
],
"start": 63,
"end": 66
}
]
}
]
},
"block": {
"type": "Block",
"start": 67,
"end": 82,
"children": [
{
"type": "Declaration",
"start": 69,
"end": 79,
"property": "color",
"value": "red"
}
]
},
"start": 63,
"end": 82
}
],
"content": {
"start": 61,
"end": 83,
"styles": "\n\tdiv { color: red; }\n",
"comment": null
}
},
"js": [],
"start": 0,
"end": 91,
"type": "Root",
"fragment": {
"type": "Fragment",
"nodes": [
{
"type": "Text",
"start": 53,
"end": 54,
"raw": "\n",
"data": "\n"
}
]
},
"options": null,
"instance": {
"type": "Script",
"start": 0,
"end": 53,
"context": "default",
"content": {
"type": "Program",
"start": 8,
"end": 44,
"loc": {
"start": {
"line": 1,
"column": 0
},
"end": {
"line": 3,
"column": 0
}
},
"body": [],
"sourceType": "module",
"trailingComments": [
{
"type": "Line",
"value": " script and style but no markup",
"start": 10,
"end": 43
}
]
},
"attributes": []
}
}

@ -77,7 +77,7 @@
},
"js": [],
"start": 0,
"end": 35,
"end": 205,
"type": "Root",
"fragment": {
"type": "Fragment",

@ -1,7 +1,7 @@
{
"css": null,
"js": [],
"start": 29,
"start": 0,
"end": 101,
"type": "Root",
"fragment": {

@ -1,7 +1,7 @@
{
"css": null,
"js": [],
"start": 54,
"start": 0,
"end": 173,
"type": "Root",
"fragment": {

@ -0,0 +1,11 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Svelte App</title>
</head>
<body>
<div>Hello World</div>
</body>
</html>

@ -0,0 +1,12 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1.0"
/>
<title>Svelte App</title>
</head>
<body><div>Hello World</div></body>
</html>

@ -16,6 +16,7 @@
@keyframes fade {
from { opacity: 0; }
50% { opacity: 0.5; }
to { opacity: 1; }
}
@ -40,4 +41,14 @@
.container .item, nav > ul.menu {
color: red;
}
#id-selector { color: red; }
[data-attribute] { color: red; }
[data-attribute="value"] { color: red; }
.card {
background: white;
&:hover {
background: gray;
}
}
</style>

@ -19,6 +19,9 @@
from {
opacity: 0;
}
50%% {
opacity: 0.5;
}
to {
opacity: 1;
}
@ -66,4 +69,23 @@
nav > ul.menu {
color: red;
}
#id-selector {
color: red;
}
[data-attribute] {
color: red;
}
[data-attribute="value"] {
color: red;
}
.card {
background: white;
&:hover {
background: gray;
}
}
</style>

@ -164,6 +164,7 @@ async function run_test(
}
],
bundle: true,
platform: 'node',
format: 'iife',
globalName: 'test_ssr'
});

@ -0,0 +1,26 @@
import { tick } from 'svelte';
import { test } from '../../test';
export default test({
async test({ assert, target }) {
const [a, b, resolve] = target.querySelectorAll('button');
a.click();
await tick();
b.click();
await tick();
resolve.click();
await tick();
assert.htmlEqual(
target.innerHTML,
`
<button>a (true)</button>
<button>b (true)</button>
<button>resolve</button>
42
`
);
}
});

@ -0,0 +1,23 @@
<script>
import Child from './Child.svelte';
let a = $state(false);
let b = $state(false);
let deferred = [];
function push(value) {
const d = Promise.withResolvers();
deferred.push(() => d.resolve(value))
return d.promise;
}
</script>
<button onclick={() => a = !a}>a ({a})</button>
<button onclick={() => b = !b}>b ({b})</button>
<button onclick={() => deferred.shift()()}>resolve</button>
{#if a}
{await push(42)}
<Child />
{/if}

@ -0,0 +1,6 @@
import { test } from '../../test';
export default test({
mode: ['async'],
error: 'hydratable_serialization_failed'
});

@ -0,0 +1,5 @@
<script lang="ts">
import { hydratable } from 'svelte';
hydratable('key', () => new Promise(() => { throw new Error('nope') }));
</script>

@ -9,7 +9,8 @@
console.log(doubled);
let {
prop
prop,
other_prop = prop
} = $props();
let prop_state = $state(prop);
let prop_derived = $derived(prop);

@ -39,36 +39,36 @@
"code": "state_referenced_locally",
"end": {
"column": 29,
"line": 14
"line": 15
},
"message": "This reference only captures the initial value of `prop`. Did you mean to reference it inside a closure instead?",
"start": {
"column": 25,
"line": 14
"line": 15
}
},
{
"code": "state_referenced_locally",
"end": {
"column": 17,
"line": 16
"line": 17
},
"message": "This reference only captures the initial value of `prop`. Did you mean to reference it inside a closure instead?",
"start": {
"column": 13,
"line": 16
"line": 17
}
},
{
"code": "state_referenced_locally",
"end": {
"column": 25,
"line": 17
"line": 18
},
"message": "This reference only captures the initial value of `prop_derived`. Did you mean to reference it inside a closure instead?",
"start": {
"column": 13,
"line": 17
"line": 18
}
}
]

@ -13,7 +13,7 @@ importers:
version: 2.29.8(@types/node@20.19.17)
'@sveltejs/eslint-config':
specifier: ^8.3.3
version: 8.3.3(@stylistic/eslint-plugin-js@1.8.0(eslint@9.9.1))(eslint-config-prettier@9.1.0(eslint@9.9.1))(eslint-plugin-n@17.16.1(eslint@9.9.1)(typescript@5.5.4))(eslint-plugin-svelte@3.11.0(eslint@9.9.1)(svelte@packages+svelte))(eslint@9.9.1)(typescript-eslint@8.48.0(eslint@9.9.1)(typescript@5.5.4))(typescript@5.5.4)
version: 8.3.3(@stylistic/eslint-plugin-js@1.8.0(eslint@9.9.1))(eslint-config-prettier@9.1.0(eslint@9.9.1))(eslint-plugin-n@17.16.1(eslint@9.9.1)(typescript@5.5.4))(eslint-plugin-svelte@3.11.0(eslint@9.9.1)(svelte@packages+svelte))(eslint@9.9.1)(typescript-eslint@8.48.1(eslint@9.9.1)(typescript@5.5.4))(typescript@5.5.4)
'@svitejs/changesets-changelog-github-compact':
specifier: ^1.1.0
version: 1.1.0
@ -54,8 +54,8 @@ importers:
specifier: ^5.5.4
version: 5.5.4
typescript-eslint:
specifier: ^8.48.0
version: 8.48.0(eslint@9.9.1)(typescript@5.5.4)
specifier: ^8.48.1
version: 8.48.1(eslint@9.9.1)(typescript@5.5.4)
v8-natives:
specifier: ^1.2.5
version: 1.2.5
@ -898,63 +898,63 @@ packages:
'@types/resolve@1.20.2':
resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
'@typescript-eslint/eslint-plugin@8.48.0':
resolution: {integrity: sha512-XxXP5tL1txl13YFtrECECQYeZjBZad4fyd3cFV4a19LkAY/bIp9fev3US4S5fDVV2JaYFiKAZ/GRTOLer+mbyQ==}
'@typescript-eslint/eslint-plugin@8.48.1':
resolution: {integrity: sha512-X63hI1bxl5ohelzr0LY5coufyl0LJNthld+abwxpCoo6Gq+hSqhKwci7MUWkXo67mzgUK6YFByhmaHmUcuBJmA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
'@typescript-eslint/parser': ^8.48.0
'@typescript-eslint/parser': ^8.48.1
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/parser@8.48.0':
resolution: {integrity: sha512-jCzKdm/QK0Kg4V4IK/oMlRZlY+QOcdjv89U2NgKHZk1CYTj82/RVSx1mV/0gqCVMJ/DA+Zf/S4NBWNF8GQ+eqQ==}
'@typescript-eslint/parser@8.48.1':
resolution: {integrity: sha512-PC0PDZfJg8sP7cmKe6L3QIL8GZwU5aRvUFedqSIpw3B+QjRSUZeeITC2M5XKeMXEzL6wccN196iy3JLwKNvDVA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/project-service@8.48.0':
resolution: {integrity: sha512-Ne4CTZyRh1BecBf84siv42wv5vQvVmgtk8AuiEffKTUo3DrBaGYZueJSxxBZ8fjk/N3DrgChH4TOdIOwOwiqqw==}
'@typescript-eslint/project-service@8.48.1':
resolution: {integrity: sha512-HQWSicah4s9z2/HifRPQ6b6R7G+SBx64JlFQpgSSHWPKdvCZX57XCbszg/bapbRsOEv42q5tayTYcEFpACcX1w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/scope-manager@8.48.0':
resolution: {integrity: sha512-uGSSsbrtJrLduti0Q1Q9+BF1/iFKaxGoQwjWOIVNJv0o6omrdyR8ct37m4xIl5Zzpkp69Kkmvom7QFTtue89YQ==}
'@typescript-eslint/scope-manager@8.48.1':
resolution: {integrity: sha512-rj4vWQsytQbLxC5Bf4XwZ0/CKd362DkWMUkviT7DCS057SK64D5lH74sSGzhI6PDD2HCEq02xAP9cX68dYyg1w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/tsconfig-utils@8.48.0':
resolution: {integrity: sha512-WNebjBdFdyu10sR1M4OXTt2OkMd5KWIL+LLfeH9KhgP+jzfDV/LI3eXzwJ1s9+Yc0Kzo2fQCdY/OpdusCMmh6w==}
'@typescript-eslint/tsconfig-utils@8.48.1':
resolution: {integrity: sha512-k0Jhs4CpEffIBm6wPaCXBAD7jxBtrHjrSgtfCjUvPp9AZ78lXKdTR8fxyZO5y4vWNlOvYXRtngSZNSn+H53Jkw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/type-utils@8.48.0':
resolution: {integrity: sha512-zbeVaVqeXhhab6QNEKfK96Xyc7UQuoFWERhEnj3mLVnUWrQnv15cJNseUni7f3g557gm0e46LZ6IJ4NJVOgOpw==}
'@typescript-eslint/type-utils@8.48.1':
resolution: {integrity: sha512-1jEop81a3LrJQLTf/1VfPQdhIY4PlGDBc/i67EVWObrtvcziysbLN3oReexHOM6N3jyXgCrkBsZpqwH0hiDOQg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/types@8.48.0':
resolution: {integrity: sha512-cQMcGQQH7kwKoVswD1xdOytxQR60MWKM1di26xSUtxehaDs/32Zpqsu5WJlXTtTTqyAVK8R7hvsUnIXRS+bjvA==}
'@typescript-eslint/types@8.48.1':
resolution: {integrity: sha512-+fZ3LZNeiELGmimrujsDCT4CRIbq5oXdHe7chLiW8qzqyPMnn1puNstCrMNVAqwcl2FdIxkuJ4tOs/RFDBVc/Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/typescript-estree@8.48.0':
resolution: {integrity: sha512-ljHab1CSO4rGrQIAyizUS6UGHHCiAYhbfcIZ1zVJr5nMryxlXMVWS3duFPSKvSUbFPwkXMFk1k0EMIjub4sRRQ==}
'@typescript-eslint/typescript-estree@8.48.1':
resolution: {integrity: sha512-/9wQ4PqaefTK6POVTjJaYS0bynCgzh6ClJHGSBj06XEHjkfylzB+A3qvyaXnErEZSaxhIo4YdyBgq6j4RysxDg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/utils@8.48.0':
resolution: {integrity: sha512-yTJO1XuGxCsSfIVt1+1UrLHtue8xz16V8apzPYI06W0HbEbEWHxHXgZaAgavIkoh+GeV6hKKd5jm0sS6OYxWXQ==}
'@typescript-eslint/utils@8.48.1':
resolution: {integrity: sha512-fAnhLrDjiVfey5wwFRwrweyRlCmdz5ZxXz2G/4cLn0YDLjTapmN4gcCsTBR1N2rWnZSDeWpYtgLDsJt+FpmcwA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/visitor-keys@8.48.0':
resolution: {integrity: sha512-T0XJMaRPOH3+LBbAfzR2jalckP1MSG/L9eUtY0DEzUyVaXJ/t6zN0nR7co5kz0Jko/nkSYCBRkz1djvjajVTTg==}
'@typescript-eslint/visitor-keys@8.48.1':
resolution: {integrity: sha512-BmxxndzEWhE4TIEEMBs8lP3MBWN3jFPs/p6gPm/wkv02o41hI6cq9AuSmGAaTTHPtA1FTi2jBre4A9rm5ZmX+Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@vitest/coverage-v8@2.1.9':
@ -1472,8 +1472,8 @@ packages:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
glob@10.4.5:
resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
glob@10.5.0:
resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==}
hasBin: true
globals@14.0.0:
@ -2283,8 +2283,8 @@ packages:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
typescript-eslint@8.48.0:
resolution: {integrity: sha512-fcKOvQD9GUn3Xw63EgiDqhvWJ5jsyZUaekl3KVpGsDJnN46WJTe3jWxtQP9lMZm1LJNkFLlTaWAxK2vUQR+cqw==}
typescript-eslint@8.48.1:
resolution: {integrity: sha512-FbOKN1fqNoXp1hIl5KYpObVrp0mCn+CLgn479nmu2IsRMrx2vyv74MmsBLVlhg8qVwNFGbXSp8fh1zp8pEoC2A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@ -3100,7 +3100,7 @@ snapshots:
dependencies:
acorn: 8.15.0
'@sveltejs/eslint-config@8.3.3(@stylistic/eslint-plugin-js@1.8.0(eslint@9.9.1))(eslint-config-prettier@9.1.0(eslint@9.9.1))(eslint-plugin-n@17.16.1(eslint@9.9.1)(typescript@5.5.4))(eslint-plugin-svelte@3.11.0(eslint@9.9.1)(svelte@packages+svelte))(eslint@9.9.1)(typescript-eslint@8.48.0(eslint@9.9.1)(typescript@5.5.4))(typescript@5.5.4)':
'@sveltejs/eslint-config@8.3.3(@stylistic/eslint-plugin-js@1.8.0(eslint@9.9.1))(eslint-config-prettier@9.1.0(eslint@9.9.1))(eslint-plugin-n@17.16.1(eslint@9.9.1)(typescript@5.5.4))(eslint-plugin-svelte@3.11.0(eslint@9.9.1)(svelte@packages+svelte))(eslint@9.9.1)(typescript-eslint@8.48.1(eslint@9.9.1)(typescript@5.5.4))(typescript@5.5.4)':
dependencies:
'@stylistic/eslint-plugin-js': 1.8.0(eslint@9.9.1)
eslint: 9.9.1
@ -3109,7 +3109,7 @@ snapshots:
eslint-plugin-svelte: 3.11.0(eslint@9.9.1)(svelte@packages+svelte)
globals: 15.15.0
typescript: 5.5.4
typescript-eslint: 8.48.0(eslint@9.9.1)(typescript@5.5.4)
typescript-eslint: 8.48.1(eslint@9.9.1)(typescript@5.5.4)
'@sveltejs/vite-plugin-svelte-inspector@5.0.1(@sveltejs/vite-plugin-svelte@6.2.0(svelte@packages+svelte)(vite@7.1.11(@types/node@24.5.2)(lightningcss@1.23.0)(sass@1.70.0)(terser@5.27.0)))(svelte@packages+svelte)(vite@7.1.11(@types/node@24.5.2)(lightningcss@1.23.0)(sass@1.70.0)(terser@5.27.0))':
dependencies:
@ -3164,14 +3164,14 @@ snapshots:
'@types/resolve@1.20.2': {}
'@typescript-eslint/eslint-plugin@8.48.0(@typescript-eslint/parser@8.48.0(eslint@9.9.1)(typescript@5.5.4))(eslint@9.9.1)(typescript@5.5.4)':
'@typescript-eslint/eslint-plugin@8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.9.1)(typescript@5.5.4))(eslint@9.9.1)(typescript@5.5.4)':
dependencies:
'@eslint-community/regexpp': 4.12.2
'@typescript-eslint/parser': 8.48.0(eslint@9.9.1)(typescript@5.5.4)
'@typescript-eslint/scope-manager': 8.48.0
'@typescript-eslint/type-utils': 8.48.0(eslint@9.9.1)(typescript@5.5.4)
'@typescript-eslint/utils': 8.48.0(eslint@9.9.1)(typescript@5.5.4)
'@typescript-eslint/visitor-keys': 8.48.0
'@typescript-eslint/parser': 8.48.1(eslint@9.9.1)(typescript@5.5.4)
'@typescript-eslint/scope-manager': 8.48.1
'@typescript-eslint/type-utils': 8.48.1(eslint@9.9.1)(typescript@5.5.4)
'@typescript-eslint/utils': 8.48.1(eslint@9.9.1)(typescript@5.5.4)
'@typescript-eslint/visitor-keys': 8.48.1
eslint: 9.9.1
graphemer: 1.4.0
ignore: 7.0.5
@ -3181,41 +3181,41 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/parser@8.48.0(eslint@9.9.1)(typescript@5.5.4)':
'@typescript-eslint/parser@8.48.1(eslint@9.9.1)(typescript@5.5.4)':
dependencies:
'@typescript-eslint/scope-manager': 8.48.0
'@typescript-eslint/types': 8.48.0
'@typescript-eslint/typescript-estree': 8.48.0(typescript@5.5.4)
'@typescript-eslint/visitor-keys': 8.48.0
'@typescript-eslint/scope-manager': 8.48.1
'@typescript-eslint/types': 8.48.1
'@typescript-eslint/typescript-estree': 8.48.1(typescript@5.5.4)
'@typescript-eslint/visitor-keys': 8.48.1
debug: 4.4.3
eslint: 9.9.1
typescript: 5.5.4
transitivePeerDependencies:
- supports-color
'@typescript-eslint/project-service@8.48.0(typescript@5.5.4)':
'@typescript-eslint/project-service@8.48.1(typescript@5.5.4)':
dependencies:
'@typescript-eslint/tsconfig-utils': 8.48.0(typescript@5.5.4)
'@typescript-eslint/types': 8.48.0
'@typescript-eslint/tsconfig-utils': 8.48.1(typescript@5.5.4)
'@typescript-eslint/types': 8.48.1
debug: 4.4.3
typescript: 5.5.4
transitivePeerDependencies:
- supports-color
'@typescript-eslint/scope-manager@8.48.0':
'@typescript-eslint/scope-manager@8.48.1':
dependencies:
'@typescript-eslint/types': 8.48.0
'@typescript-eslint/visitor-keys': 8.48.0
'@typescript-eslint/types': 8.48.1
'@typescript-eslint/visitor-keys': 8.48.1
'@typescript-eslint/tsconfig-utils@8.48.0(typescript@5.5.4)':
'@typescript-eslint/tsconfig-utils@8.48.1(typescript@5.5.4)':
dependencies:
typescript: 5.5.4
'@typescript-eslint/type-utils@8.48.0(eslint@9.9.1)(typescript@5.5.4)':
'@typescript-eslint/type-utils@8.48.1(eslint@9.9.1)(typescript@5.5.4)':
dependencies:
'@typescript-eslint/types': 8.48.0
'@typescript-eslint/typescript-estree': 8.48.0(typescript@5.5.4)
'@typescript-eslint/utils': 8.48.0(eslint@9.9.1)(typescript@5.5.4)
'@typescript-eslint/types': 8.48.1
'@typescript-eslint/typescript-estree': 8.48.1(typescript@5.5.4)
'@typescript-eslint/utils': 8.48.1(eslint@9.9.1)(typescript@5.5.4)
debug: 4.4.3
eslint: 9.9.1
ts-api-utils: 2.1.0(typescript@5.5.4)
@ -3223,14 +3223,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/types@8.48.0': {}
'@typescript-eslint/types@8.48.1': {}
'@typescript-eslint/typescript-estree@8.48.0(typescript@5.5.4)':
'@typescript-eslint/typescript-estree@8.48.1(typescript@5.5.4)':
dependencies:
'@typescript-eslint/project-service': 8.48.0(typescript@5.5.4)
'@typescript-eslint/tsconfig-utils': 8.48.0(typescript@5.5.4)
'@typescript-eslint/types': 8.48.0
'@typescript-eslint/visitor-keys': 8.48.0
'@typescript-eslint/project-service': 8.48.1(typescript@5.5.4)
'@typescript-eslint/tsconfig-utils': 8.48.1(typescript@5.5.4)
'@typescript-eslint/types': 8.48.1
'@typescript-eslint/visitor-keys': 8.48.1
debug: 4.4.3
minimatch: 9.0.5
semver: 7.7.3
@ -3240,20 +3240,20 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/utils@8.48.0(eslint@9.9.1)(typescript@5.5.4)':
'@typescript-eslint/utils@8.48.1(eslint@9.9.1)(typescript@5.5.4)':
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.9.1)
'@typescript-eslint/scope-manager': 8.48.0
'@typescript-eslint/types': 8.48.0
'@typescript-eslint/typescript-estree': 8.48.0(typescript@5.5.4)
'@typescript-eslint/scope-manager': 8.48.1
'@typescript-eslint/types': 8.48.1
'@typescript-eslint/typescript-estree': 8.48.1(typescript@5.5.4)
eslint: 9.9.1
typescript: 5.5.4
transitivePeerDependencies:
- supports-color
'@typescript-eslint/visitor-keys@8.48.0':
'@typescript-eslint/visitor-keys@8.48.1':
dependencies:
'@typescript-eslint/types': 8.48.0
'@typescript-eslint/types': 8.48.1
eslint-visitor-keys: 4.2.1
'@vitest/coverage-v8@2.1.9(vitest@2.1.9(@types/node@20.19.17)(jsdom@25.0.1)(lightningcss@1.23.0)(sass@1.70.0)(terser@5.27.0))':
@ -3620,7 +3620,7 @@ snapshots:
eslint-plugin-n@17.16.1(eslint@9.9.1)(typescript@5.5.4):
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.9.1)
'@typescript-eslint/utils': 8.48.0(eslint@9.9.1)(typescript@5.5.4)
'@typescript-eslint/utils': 8.48.1(eslint@9.9.1)(typescript@5.5.4)
enhanced-resolve: 5.18.3
eslint: 9.9.1
eslint-plugin-es-x: 7.8.0(eslint@9.9.1)
@ -3832,7 +3832,7 @@ snapshots:
dependencies:
is-glob: 4.0.3
glob@10.4.5:
glob@10.5.0:
dependencies:
foreground-child: 3.3.0
jackspeak: 3.4.3
@ -4501,7 +4501,7 @@ snapshots:
test-exclude@7.0.1:
dependencies:
'@istanbuljs/schema': 0.1.3
glob: 10.4.5
glob: 10.5.0
minimatch: 9.0.5
text-table@0.2.0: {}
@ -4566,12 +4566,12 @@ snapshots:
dependencies:
prelude-ls: 1.2.1
typescript-eslint@8.48.0(eslint@9.9.1)(typescript@5.5.4):
typescript-eslint@8.48.1(eslint@9.9.1)(typescript@5.5.4):
dependencies:
'@typescript-eslint/eslint-plugin': 8.48.0(@typescript-eslint/parser@8.48.0(eslint@9.9.1)(typescript@5.5.4))(eslint@9.9.1)(typescript@5.5.4)
'@typescript-eslint/parser': 8.48.0(eslint@9.9.1)(typescript@5.5.4)
'@typescript-eslint/typescript-estree': 8.48.0(typescript@5.5.4)
'@typescript-eslint/utils': 8.48.0(eslint@9.9.1)(typescript@5.5.4)
'@typescript-eslint/eslint-plugin': 8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.9.1)(typescript@5.5.4))(eslint@9.9.1)(typescript@5.5.4)
'@typescript-eslint/parser': 8.48.1(eslint@9.9.1)(typescript@5.5.4)
'@typescript-eslint/typescript-estree': 8.48.1(typescript@5.5.4)
'@typescript-eslint/utils': 8.48.1(eslint@9.9.1)(typescript@5.5.4)
eslint: 9.9.1
typescript: 5.5.4
transitivePeerDependencies:

Loading…
Cancel
Save