From e7f43020dc5e812d57a4ebcbe2cd7fcd32bd4057 Mon Sep 17 00:00:00 2001 From: Max Richter Date: Thu, 18 Apr 2024 15:40:41 +0200 Subject: [PATCH] feat: add validation to include_definition macro --- Cargo.lock | 18 +- Cargo.toml | 2 +- app/package.json | 2 +- .../lib/graph-interface/graph/Graph.svelte | 6 +- .../graph-interface/node/NodeParameter.svelte | 8 +- app/src/routes/+layout.svelte | 2 +- nodes/max/plantarium/math/src/lib.rs | 2 + nodes/max/plantarium/vec3/src/input.json | 9 +- packages/macros/Cargo.toml | 4 +- packages/macros/src/lib.rs | 8 +- packages/node-registry/package.json | 2 +- packages/types/Cargo.toml | 8 + packages/types/package.json | 2 +- packages/types/{ => src}/index.ts | 0 packages/types/{ => src}/inputs.ts | 2 +- packages/types/src/lib.rs | 133 ++++++++++++ packages/types/{ => src}/parameters.ts | 0 packages/ui/package.json | 5 +- packages/ui/src/lib/Input.svelte | 7 +- .../routes => packages/ui/src/lib}/app.css | 0 packages/ui/src/lib/elements/Float.svelte | 172 +++++++++++++++- packages/ui/src/lib/elements/Slider.svelte | 9 - .../ui/src/lib/helpers/getBoundingValue.ts | 13 ++ packages/ui/src/routes/+page.svelte | 10 +- .../fonts/fira-code-v22-latin-300.woff2 | Bin 0 -> 23200 bytes .../fonts/fira-code-v22-latin-600.woff2 | Bin 0 -> 23344 bytes pnpm-lock.yaml | 189 +++++++++--------- 27 files changed, 466 insertions(+), 147 deletions(-) create mode 100644 packages/types/Cargo.toml rename packages/types/{ => src}/index.ts (100%) rename packages/types/{ => src}/inputs.ts (97%) create mode 100644 packages/types/src/lib.rs rename packages/types/{ => src}/parameters.ts (100%) rename {app/src/routes => packages/ui/src/lib}/app.css (100%) delete mode 100644 packages/ui/src/lib/elements/Slider.svelte create mode 100644 packages/ui/src/lib/helpers/getBoundingValue.ts create mode 100644 packages/ui/static/fonts/fira-code-v22-latin-300.woff2 create mode 100644 packages/ui/static/fonts/fira-code-v22-latin-600.woff2 diff --git a/Cargo.lock b/Cargo.lock index 7245610..170f91c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -97,8 +97,10 @@ name = "macros" version = "0.1.0" dependencies = [ "quote", + "serde", "serde_json", "syn 1.0.109", + "types", ] [[package]] @@ -224,9 +226,9 @@ checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" [[package]] name = "serde" -version = "1.0.197" +version = "1.0.198" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" +checksum = "9846a40c979031340571da2545a4e5b7c4163bdae79b301d5f86d03979451fcc" dependencies = [ "serde_derive", ] @@ -244,9 +246,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.197" +version = "1.0.198" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" +checksum = "e88edab869b01783ba905e7d0153f9fc1a6505a96e4ad3018011eedb838566d9" dependencies = [ "proc-macro2", "quote", @@ -314,6 +316,14 @@ dependencies = [ "web-sys", ] +[[package]] +name = "types" +version = "0.1.0" +dependencies = [ + "serde", + "serde_json", +] + [[package]] name = "unicode-ident" version = "1.0.12" diff --git a/Cargo.toml b/Cargo.toml index a0c8ee1..9fc8f10 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [workspace] resolver = "2" -members = ["nodes/max/plantarium/*", "packages/macros", "packages/utils"] +members = ["nodes/max/plantarium/*", "packages/macros", "packages/types", "packages/utils"] [profile.release] diff --git a/app/package.json b/app/package.json index 1776ec0..48c913d 100644 --- a/app/package.json +++ b/app/package.json @@ -37,7 +37,7 @@ "@zerodevx/svelte-json-view": "^1.0.9", "histoire": "^0.17.17", "internal-ip": "^8.0.0", - "svelte": "^4.2.14", + "svelte": "^4.2.15", "svelte-check": "^3.6.9", "tslib": "^2.6.2", "typescript": "^5.4.5", diff --git a/app/src/lib/graph-interface/graph/Graph.svelte b/app/src/lib/graph-interface/graph/Graph.svelte index ead4ea0..b885e9d 100644 --- a/app/src/lib/graph-interface/graph/Graph.svelte +++ b/app/src/lib/graph-interface/graph/Graph.svelte @@ -514,9 +514,7 @@ } function handleKeyDown(event: KeyboardEvent) { - const bodyIsFocused = - document.activeElement === document.body || - document?.activeElement?.id === "graph"; + const bodyIsFocused = document?.activeElement?.nodeName !== "INPUT"; if (event.key === "l") { const activeNode = graph.getNode($activeNodeId); @@ -538,7 +536,7 @@ addMenuPosition = [mousePosition[0], mousePosition[1]]; } - if (event.key === ".") { + if (event.key === "." && bodyIsFocused) { const average = [0, 0]; for (const node of $nodes.values()) { average[0] += node.position[0]; diff --git a/app/src/lib/graph-interface/node/NodeParameter.svelte b/app/src/lib/graph-interface/node/NodeParameter.svelte index 1b8f623..c92466a 100644 --- a/app/src/lib/graph-interface/node/NodeParameter.svelte +++ b/app/src/lib/graph-interface/node/NodeParameter.svelte @@ -15,6 +15,8 @@ export let id: string; export let isLast = false; + const inputType = node?.tmp?.type?.inputs?.[id]!; + const socketId = `${node.id}-${id}`; const graph = getGraphManager(); @@ -75,8 +77,10 @@ > {#key id && graphId}
- - {#if node?.tmp?.type?.inputs?.[id]?.external !== true} + {#if inputType.label !== false} + + {/if} + {#if inputType.external !== true} {/if}
diff --git a/app/src/routes/+layout.svelte b/app/src/routes/+layout.svelte index ee5c896..343fca9 100644 --- a/app/src/routes/+layout.svelte +++ b/app/src/routes/+layout.svelte @@ -1,5 +1,5 @@ diff --git a/nodes/max/plantarium/math/src/lib.rs b/nodes/max/plantarium/math/src/lib.rs index 14d93c3..2230fff 100644 --- a/nodes/max/plantarium/math/src/lib.rs +++ b/nodes/max/plantarium/math/src/lib.rs @@ -10,8 +10,10 @@ pub fn execute(args: &[i32]) -> Vec { result.push(1); result.push(0); // encoding the [ bracket result.push(args[1] + 1); + result.push(0); // adding the node-type, math: 0 result.extend_from_slice(&args[2..]); + result.push(1); result.push(1); // closing bracket result.push(1); diff --git a/nodes/max/plantarium/vec3/src/input.json b/nodes/max/plantarium/vec3/src/input.json index ec5bba4..39858ab 100644 --- a/nodes/max/plantarium/vec3/src/input.json +++ b/nodes/max/plantarium/vec3/src/input.json @@ -4,13 +4,16 @@ ], "inputs": { "0": { - "type": "float" + "type": "float", + "label": false }, "1": { - "type": "float" + "type": "float", + "label": false }, "2": { - "type": "float" + "type": "float", + "label": false } } } diff --git a/packages/macros/Cargo.toml b/packages/macros/Cargo.toml index cbfc0a1..1f9d7a9 100644 --- a/packages/macros/Cargo.toml +++ b/packages/macros/Cargo.toml @@ -8,5 +8,7 @@ proc-macro = true [dependencies] syn = { version = "1.0", features = ["full"] } -serde_json = "1.0" +serde = { version = "1.0", features = ["derive"] } +serde_json = { version = "1.0", default-features = false, features = ["alloc"] } quote = "1.0" +types = { version = "0.1.0", path = "../types" } diff --git a/packages/macros/src/lib.rs b/packages/macros/src/lib.rs index 6db4c93..fc5c4b1 100644 --- a/packages/macros/src/lib.rs +++ b/packages/macros/src/lib.rs @@ -1,18 +1,18 @@ extern crate proc_macro; use proc_macro::TokenStream; use quote::quote; -use serde_json::Value; use std::env; use std::fs; use std::path::Path; use syn::{parse_macro_input, LitStr}; +use types::NodeType; #[proc_macro] pub fn define_node(input: TokenStream) -> TokenStream { let input_string = parse_macro_input!(input as LitStr).value(); // Validate JSON format - let json: Value = match serde_json::from_str(&input_string) { + let json: NodeType = match serde_json::from_str(&input_string) { Ok(json) => json, Err(e) => panic!("Invalid JSON input: {}", e), }; @@ -49,8 +49,8 @@ pub fn include_definition_file(input: TokenStream) -> TokenStream { }); // Optionally, validate that the content is valid JSON - let _: Value = serde_json::from_str(&json_content) - .unwrap_or_else(|_| panic!("JSON file contains invalid JSON")); + let _: NodeType = serde_json::from_str(&json_content) + .unwrap_or_else(|err| panic!("JSON file contains invalid JSON: {}", err)); // Generate the function that returns the JSON string let expanded = quote! { diff --git a/packages/node-registry/package.json b/packages/node-registry/package.json index eaea9d4..3d97ee4 100644 --- a/packages/node-registry/package.json +++ b/packages/node-registry/package.json @@ -24,7 +24,7 @@ "eslint-plugin-svelte": "^2.37.0", "prettier": "^3.2.5", "prettier-plugin-svelte": "^3.2.3", - "svelte": "^4.2.14", + "svelte": "^4.2.15", "svelte-check": "^3.6.9", "tslib": "^2.6.2", "typescript": "^5.4.5", diff --git a/packages/types/Cargo.toml b/packages/types/Cargo.toml new file mode 100644 index 0000000..00025ca --- /dev/null +++ b/packages/types/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "types" +version = "0.1.0" +edition = "2021" + +[dependencies] +serde = { version = "1.0", features = ["derive"] } +serde_json = { version = "1.0", default-features = false, features = ["alloc"] } diff --git a/packages/types/package.json b/packages/types/package.json index 94771ac..23d0414 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -2,7 +2,7 @@ "name": "@nodes/types", "version": "1.0.0", "description": "", - "main": "index.ts", + "main": "src/index.ts", "keywords": [], "author": "", "license": "ISC" diff --git a/packages/types/index.ts b/packages/types/src/index.ts similarity index 100% rename from packages/types/index.ts rename to packages/types/src/index.ts diff --git a/packages/types/inputs.ts b/packages/types/src/inputs.ts similarity index 97% rename from packages/types/inputs.ts rename to packages/types/src/inputs.ts index 01c3cc3..bd89a1e 100644 --- a/packages/types/inputs.ts +++ b/packages/types/src/inputs.ts @@ -35,7 +35,7 @@ type DefaultOptions = { internal?: boolean; external?: boolean; setting?: string; - label?: string; + label?: string | false; } type InputTypes = (NodeInputSeed | NodeInputBoolean | NodeInputFloat | NodeInputInteger | NodeInputSelect); diff --git a/packages/types/src/lib.rs b/packages/types/src/lib.rs new file mode 100644 index 0000000..8922cc9 --- /dev/null +++ b/packages/types/src/lib.rs @@ -0,0 +1,133 @@ +use serde::{Deserialize, Deserializer, Serialize}; +use serde_json::Value; +use std::collections::HashMap; + +#[derive(Serialize, Deserialize, Debug)] +#[serde(tag = "type")] +#[allow(non_camel_case_types)] +pub enum InputTypes { + float(NodeInputFloat), + integer(NodeInputInteger), + boolean(NodeInputBoolean), + select(NodeInputSelect), + seed(NodeInputSeed), + model(NodeInputModel), + plant(NodeInputPlant), + vec3(NodeInputVec3), +} + +#[derive(Serialize, Deserialize, Debug)] +pub struct NodeInputVec3 { + #[serde(skip_serializing_if = "Option::is_none")] + pub value: Option>, +} + +#[derive(Serialize, Deserialize, Debug)] +pub struct NodeInputFloat { + #[serde(skip_serializing_if = "Option::is_none")] + pub value: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub min: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub max: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub step: Option, +} + +#[derive(Serialize, Deserialize, Debug)] +pub struct NodeInputInteger { + #[serde(skip_serializing_if = "Option::is_none")] + pub element: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub value: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub min: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub max: Option, +} + +#[derive(Serialize, Deserialize, Debug)] +pub struct NodeInputBoolean { + #[serde(skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Debug)] +pub struct NodeInputSelect { + pub labels: Vec, + #[serde(skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Debug)] +pub struct NodeInputSeed { + #[serde(skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +// Assuming similar structure as other NodeInput types for Model and Plant +#[derive(Serialize, Deserialize, Debug)] +pub struct NodeInputModel { + // Model-specific fields can be added here +} + +#[derive(Serialize, Deserialize, Debug)] +pub struct NodeInputPlant { + // Plant-specific fields can be added here +} + +#[derive(Serialize, Deserialize, Debug)] +pub struct DefaultOptions { + #[serde(skip_serializing_if = "Option::is_none")] + pub internal: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub external: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub setting: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub label: Option, // To handle both String and false +} + +#[derive(Serialize, Deserialize, Debug)] +#[serde(untagged)] +pub enum NodeTypeOrArray { + Single(InputTypes), + Multiple(Vec), +} + +#[derive(Debug, Serialize)] +pub struct NodeInput { + pub types: Vec, + pub options: DefaultOptions, +} + +impl<'de> Deserialize<'de> for NodeInput { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let raw_input: Value = Deserialize::deserialize(deserializer)?; + let options: DefaultOptions = + DefaultOptions::deserialize(&raw_input).map_err(serde::de::Error::custom)?; // Maps deserialization errors appropriately + + let types: Vec = match raw_input.get("type") { + Some(Value::String(single_type)) => vec![single_type.clone()], + Some(Value::Array(types)) => types + .iter() + .map(|t| t.as_str().unwrap_or("").to_owned()) + .collect(), + _ => return Err(serde::de::Error::custom("Invalid or missing 'type' field")), + }; + + Ok(NodeInput { types, options }) + } +} + +#[derive(Deserialize, Debug, Serialize)] +pub struct NodeType { + #[serde(skip_serializing_if = "Option::is_none")] + pub inputs: Option>, + #[serde(skip_serializing_if = "Option::is_none")] + pub outputs: Option>, +} + diff --git a/packages/types/parameters.ts b/packages/types/src/parameters.ts similarity index 100% rename from packages/types/parameters.ts rename to packages/types/src/parameters.ts diff --git a/packages/ui/package.json b/packages/ui/package.json index 49089f6..745f7c0 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -16,7 +16,8 @@ ".": { "types": "./dist/index.d.ts", "svelte": "./dist/index.js" - } + }, + "./app.css": "./dist/app.css" }, "files": [ "dist", @@ -37,7 +38,7 @@ "eslint": "^9.0.0", "eslint-plugin-svelte": "^2.37.0", "publint": "^0.2.7", - "svelte": "^4.2.14", + "svelte": "^4.2.15", "svelte-check": "^3.6.9", "tslib": "^2.6.2", "typescript": "^5.4.5", diff --git a/packages/ui/src/lib/Input.svelte b/packages/ui/src/lib/Input.svelte index d0f1994..27788c2 100644 --- a/packages/ui/src/lib/Input.svelte +++ b/packages/ui/src/lib/Input.svelte @@ -5,7 +5,6 @@ import Select from "$lib/elements/Select.svelte"; import type { NodeInput } from "@nodes/types"; - import Slider from "./elements/Slider.svelte"; export let input: NodeInput; export let value: any; @@ -13,11 +12,7 @@ {#if input.type === "float"} - {#if input?.element === "slider"} - - {:else} - - {/if} + {:else if input.type === "integer"} {:else if input.type === "boolean"} diff --git a/app/src/routes/app.css b/packages/ui/src/lib/app.css similarity index 100% rename from app/src/routes/app.css rename to packages/ui/src/lib/app.css diff --git a/packages/ui/src/lib/elements/Float.svelte b/packages/ui/src/lib/elements/Float.svelte index cb50167..96565db 100644 --- a/packages/ui/src/lib/elements/Float.svelte +++ b/packages/ui/src/lib/elements/Float.svelte @@ -1,20 +1,172 @@ - +
+ + +
diff --git a/packages/ui/src/lib/elements/Slider.svelte b/packages/ui/src/lib/elements/Slider.svelte deleted file mode 100644 index a17ee8c..0000000 --- a/packages/ui/src/lib/elements/Slider.svelte +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/packages/ui/src/lib/helpers/getBoundingValue.ts b/packages/ui/src/lib/helpers/getBoundingValue.ts new file mode 100644 index 0000000..33b8553 --- /dev/null +++ b/packages/ui/src/lib/helpers/getBoundingValue.ts @@ -0,0 +1,13 @@ +export function getBoundingValue(_v: number) { + const v = Math.abs(_v); + + let level = 1; + const levels = [1, 2, 4, 10, 20, 50, 100, 200, 300, 400, 500, 1000]; + + for (const l of levels) { + level = l; + if (l >= v) break; + } + + return _v >= 0 ? level : -level; +} diff --git a/packages/ui/src/routes/+page.svelte b/packages/ui/src/routes/+page.svelte index 0a45b69..fed7354 100644 --- a/packages/ui/src/routes/+page.svelte +++ b/packages/ui/src/routes/+page.svelte @@ -1,3 +1,7 @@ -

Welcome to your library project

-

Create your package using @sveltejs/package and preview/showcase your work with SvelteKit

-

Visit kit.svelte.dev to read the documentation

+ + + + diff --git a/packages/ui/static/fonts/fira-code-v22-latin-300.woff2 b/packages/ui/static/fonts/fira-code-v22-latin-300.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ab6a0e59f5fd6e7f7cc595aaac2b62eb66fdf5b5 GIT binary patch literal 23200 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͡ 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 literal 0 HcmV?d00001 diff --git a/packages/ui/static/fonts/fira-code-v22-latin-600.woff2 b/packages/ui/static/fonts/fira-code-v22-latin-600.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..309e5296e548b9ce02ff30a4d3ffc1465c85d2a4 GIT binary patch literal 23344 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�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 L|NsA04mSb-v^N%+ literal 0 HcmV?d00001 diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c760499..7be976b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,7 +18,7 @@ importers: version: link:../packages/utils '@sveltejs/kit': specifier: ^2.5.6 - version: 2.5.6(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.14)(vite@5.2.9) + version: 2.5.6(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.9) '@tauri-apps/api': specifier: 2.0.0-beta.2 version: 2.0.0-beta.2 @@ -27,13 +27,13 @@ importers: version: 2.0.0-beta.2 '@threlte/core': specifier: ^7.3.0 - version: 7.3.0(svelte@4.2.14)(three@0.163.0) + version: 7.3.0(svelte@4.2.15)(three@0.163.0) '@threlte/extras': specifier: ^8.11.2 - version: 8.11.2(@types/three@0.163.0)(svelte@4.2.14)(three@0.163.0) + version: 8.11.2(@types/three@0.163.0)(svelte@4.2.15)(three@0.163.0) '@threlte/flex': specifier: ^1.0.2 - version: 1.0.2(svelte@4.2.14)(three@0.163.0) + version: 1.0.2(svelte@4.2.15)(three@0.163.0) '@types/three': specifier: ^0.163.0 version: 0.163.0 @@ -49,7 +49,7 @@ importers: devDependencies: '@histoire/plugin-svelte': specifier: ^0.17.17 - version: 0.17.17(histoire@0.17.17)(svelte@4.2.14)(vite@5.2.9) + version: 0.17.17(histoire@0.17.17)(svelte@4.2.15)(vite@5.2.9) '@nodes/types': specifier: link:../packages/types version: link:../packages/types @@ -58,7 +58,7 @@ importers: version: 3.0.1(@sveltejs/kit@2.5.6) '@sveltejs/vite-plugin-svelte': specifier: ^3.1.0 - version: 3.1.0(svelte@4.2.14)(vite@5.2.9) + version: 3.1.0(svelte@4.2.15)(vite@5.2.9) '@tauri-apps/cli': specifier: 2.0.0-beta.3 version: 2.0.0-beta.3 @@ -67,7 +67,7 @@ importers: version: 5.0.4 '@zerodevx/svelte-json-view': specifier: ^1.0.9 - version: 1.0.9(svelte@4.2.14) + version: 1.0.9(svelte@4.2.15) histoire: specifier: ^0.17.17 version: 0.17.17(vite@5.2.9) @@ -75,11 +75,11 @@ importers: specifier: ^8.0.0 version: 8.0.0 svelte: - specifier: ^4.2.14 - version: 4.2.14 + specifier: ^4.2.15 + version: 4.2.15 svelte-check: specifier: ^3.6.9 - version: 3.6.9(postcss@8.4.38)(svelte@4.2.14) + version: 3.6.9(postcss@8.4.38)(svelte@4.2.15) tslib: specifier: ^2.6.2 version: 2.6.2 @@ -138,6 +138,10 @@ importers: nodes/max/plantarium/triangle/pkg: {} + nodes/max/plantarium/vec3: {} + + nodes/max/plantarium/vec3/pkg: {} + packages/node-registry: dependencies: '@nodes/utils': @@ -152,10 +156,10 @@ importers: version: 3.2.0(@sveltejs/kit@2.5.6) '@sveltejs/kit': specifier: ^2.5.6 - version: 2.5.6(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.14)(vite@5.2.9) + version: 2.5.6(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.9) '@sveltejs/vite-plugin-svelte': specifier: ^3.1.0 - version: 3.1.0(svelte@4.2.14)(vite@5.2.9) + version: 3.1.0(svelte@4.2.15)(vite@5.2.9) '@types/eslint': specifier: ^8.56.9 version: 8.56.9 @@ -173,19 +177,19 @@ importers: version: 9.1.0(eslint@9.0.0) eslint-plugin-svelte: specifier: ^2.37.0 - version: 2.37.0(eslint@9.0.0)(svelte@4.2.14) + version: 2.37.0(eslint@9.0.0)(svelte@4.2.15) prettier: specifier: ^3.2.5 version: 3.2.5 prettier-plugin-svelte: specifier: ^3.2.3 - version: 3.2.3(prettier@3.2.5)(svelte@4.2.14) + version: 3.2.3(prettier@3.2.5)(svelte@4.2.15) svelte: - specifier: ^4.2.14 - version: 4.2.14 + specifier: ^4.2.15 + version: 4.2.15 svelte-check: specifier: ^3.6.9 - version: 3.6.9(postcss@8.4.38)(svelte@4.2.14) + version: 3.6.9(postcss@8.4.38)(svelte@4.2.15) tslib: specifier: ^2.6.2 version: 2.6.2 @@ -215,13 +219,13 @@ importers: version: 3.2.0(@sveltejs/kit@2.5.6) '@sveltejs/kit': specifier: ^2.5.6 - version: 2.5.6(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.14)(vite@5.2.9) + version: 2.5.6(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.9) '@sveltejs/package': specifier: ^2.3.1 - version: 2.3.1(svelte@4.2.14)(typescript@5.4.5) + version: 2.3.1(svelte@4.2.15)(typescript@5.4.5) '@sveltejs/vite-plugin-svelte': specifier: ^3.1.0 - version: 3.1.0(svelte@4.2.14)(vite@5.2.9) + version: 3.1.0(svelte@4.2.15)(vite@5.2.9) '@types/eslint': specifier: ^8.56.9 version: 8.56.9 @@ -236,16 +240,16 @@ importers: version: 9.0.0 eslint-plugin-svelte: specifier: ^2.37.0 - version: 2.37.0(eslint@9.0.0)(svelte@4.2.14) + version: 2.37.0(eslint@9.0.0)(svelte@4.2.15) publint: specifier: ^0.2.7 version: 0.2.7 svelte: - specifier: ^4.2.14 - version: 4.2.14 + specifier: ^4.2.15 + version: 4.2.15 svelte-check: specifier: ^3.6.9 - version: 3.6.9(postcss@8.4.38)(svelte@4.2.14) + version: 3.6.9(postcss@8.4.38)(svelte@4.2.15) tslib: specifier: ^2.6.2 version: 2.6.2 @@ -291,8 +295,8 @@ packages: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - /@codemirror/commands@6.3.3: - resolution: {integrity: sha512-dO4hcF0fGT9tu1Pj1D2PvGvxjeGkbC6RGcZw6Qs74TH+Ed1gw98jmUgd2axWvIZEqTeTuFrg1lEB1KV6cK9h1A==} + /@codemirror/commands@6.4.0: + resolution: {integrity: sha512-HB3utD5GxCvEhSyj5EuG9KpuQQhFpxalh3lwrspyL/GeSNDe4c6JDxVzL12SJ+7gUknHjZzmq7OPCb9QPgiRmQ==} dependencies: '@codemirror/language': 6.10.1 '@codemirror/state': 6.4.1 @@ -584,7 +588,7 @@ packages: /@histoire/controls@0.17.17(vite@5.2.9): resolution: {integrity: sha512-W22HZ/X078IZmE09XEKj4Fq7LxQPP/w/aMYAzm94V2NIGhI0fkiSaBDvyTUl7NYrGT66Wq5+9Po1IWPMllk3cQ==} dependencies: - '@codemirror/commands': 6.3.3 + '@codemirror/commands': 6.4.0 '@codemirror/lang-json': 6.0.1 '@codemirror/language': 6.10.1 '@codemirror/lint': 6.5.0 @@ -597,7 +601,7 @@ packages: - vite dev: true - /@histoire/plugin-svelte@0.17.17(histoire@0.17.17)(svelte@4.2.14)(vite@5.2.9): + /@histoire/plugin-svelte@0.17.17(histoire@0.17.17)(svelte@4.2.15)(vite@5.2.9): resolution: {integrity: sha512-PEBe7uiwLJgxprc7ha5lCkxe0UrcMqDE0Lv2oR/6EIPXINpWyR7L2MkVnbCQVZv/SpYOJbfqv5+9jiWef6cP2A==} peerDependencies: histoire: ^0.17.17 @@ -611,7 +615,7 @@ packages: histoire: 0.17.17(vite@5.2.9) launch-editor: 2.6.1 pathe: 1.1.2 - svelte: 4.2.14 + svelte: 4.2.15 transitivePeerDependencies: - vite dev: true @@ -869,7 +873,7 @@ packages: peerDependencies: '@sveltejs/kit': ^2.0.0 dependencies: - '@sveltejs/kit': 2.5.6(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.14)(vite@5.2.9) + '@sveltejs/kit': 2.5.6(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.9) import-meta-resolve: 4.0.0 dev: true @@ -878,10 +882,10 @@ packages: peerDependencies: '@sveltejs/kit': ^2.0.0 dependencies: - '@sveltejs/kit': 2.5.6(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.14)(vite@5.2.9) + '@sveltejs/kit': 2.5.6(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.9) dev: true - /@sveltejs/kit@2.5.6(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.14)(vite@5.2.9): + /@sveltejs/kit@2.5.6(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.9): resolution: {integrity: sha512-AYb02Jm5MfNqJHc8zrj7ScQAFAKmTUCkpkfoi8EVaZZDdnjkvI7L2GtnTDhpiXSAZRVitZX4qm59sMS1FgL+lQ==} engines: {node: '>=18.13'} hasBin: true @@ -891,23 +895,23 @@ packages: svelte: ^4.0.0 || ^5.0.0-next.0 vite: ^5.0.3 dependencies: - '@sveltejs/vite-plugin-svelte': 3.1.0(svelte@4.2.14)(vite@5.2.9) + '@sveltejs/vite-plugin-svelte': 3.1.0(svelte@4.2.15)(vite@5.2.9) '@types/cookie': 0.6.0 cookie: 0.6.0 devalue: 4.3.2 esm-env: 1.0.0 import-meta-resolve: 4.0.0 kleur: 4.1.5 - magic-string: 0.30.9 + magic-string: 0.30.10 mrmime: 2.0.0 sade: 1.8.1 set-cookie-parser: 2.6.0 sirv: 2.0.4 - svelte: 4.2.14 + svelte: 4.2.15 tiny-glob: 0.2.9 vite: 5.2.9 - /@sveltejs/package@2.3.1(svelte@4.2.14)(typescript@5.4.5): + /@sveltejs/package@2.3.1(svelte@4.2.15)(typescript@5.4.5): resolution: {integrity: sha512-JvR2J4ost1oCn1CSdqenYRwGX/1RX+7LN+VZ71aPnz3JAlIFaEKQd1pBxlb+OSQTfeugJO0W39gB9voAbBO5ow==} engines: {node: ^16.14 || >=18} hasBin: true @@ -918,13 +922,13 @@ packages: kleur: 4.1.5 sade: 1.8.1 semver: 7.6.0 - svelte: 4.2.14 - svelte2tsx: 0.7.6(svelte@4.2.14)(typescript@5.4.5) + svelte: 4.2.15 + svelte2tsx: 0.7.6(svelte@4.2.15)(typescript@5.4.5) transitivePeerDependencies: - typescript dev: true - /@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.14)(vite@5.2.9): + /@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.9): resolution: {integrity: sha512-9QX28IymvBlSCqsCll5t0kQVxipsfhFFL+L2t3nTWfXnddYwxBuAEtTtlaVQpRz9c37BhJjltSeY4AJSC03SSg==} engines: {node: ^18.0.0 || >=20} peerDependencies: @@ -932,27 +936,27 @@ packages: svelte: ^4.0.0 || ^5.0.0-next.0 vite: ^5.0.0 dependencies: - '@sveltejs/vite-plugin-svelte': 3.1.0(svelte@4.2.14)(vite@5.2.9) + '@sveltejs/vite-plugin-svelte': 3.1.0(svelte@4.2.15)(vite@5.2.9) debug: 4.3.4 - svelte: 4.2.14 + svelte: 4.2.15 vite: 5.2.9 transitivePeerDependencies: - supports-color - /@sveltejs/vite-plugin-svelte@3.1.0(svelte@4.2.14)(vite@5.2.9): + /@sveltejs/vite-plugin-svelte@3.1.0(svelte@4.2.15)(vite@5.2.9): resolution: {integrity: sha512-sY6ncCvg+O3njnzbZexcVtUqOBE3iYmQPJ9y+yXSkOwG576QI/xJrBnQSRXFLGwJNBa0T78JEKg5cIR0WOAuUw==} engines: {node: ^18.0.0 || >=20} peerDependencies: svelte: ^4.0.0 || ^5.0.0-next.0 vite: ^5.0.0 dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.14)(vite@5.2.9) + '@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.9) debug: 4.3.4 deepmerge: 4.3.1 kleur: 4.1.5 - magic-string: 0.30.9 - svelte: 4.2.14 - svelte-hmr: 0.16.0(svelte@4.2.14) + magic-string: 0.30.10 + svelte: 4.2.15 + svelte-hmr: 0.16.0(svelte@4.2.15) vite: 5.2.9 vitefu: 0.2.5(vite@5.2.9) transitivePeerDependencies: @@ -1096,25 +1100,25 @@ packages: - '@types/three' dev: false - /@threlte/core@7.3.0(svelte@4.2.14)(three@0.163.0): + /@threlte/core@7.3.0(svelte@4.2.15)(three@0.163.0): resolution: {integrity: sha512-yedstu5kcjV1/V1W0xNjkFQmL8A+n57NzjxBK+cPC1fdUtOvBtmOPxvOZ0b/TlhTyZM8XkEv4BiKrGibOrBzyA==} peerDependencies: svelte: '>=4' three: '>=0.152' dependencies: mitt: 3.0.1 - svelte: 4.2.14 + svelte: 4.2.15 three: 0.163.0 dev: false - /@threlte/extras@8.11.2(@types/three@0.163.0)(svelte@4.2.14)(three@0.163.0): + /@threlte/extras@8.11.2(@types/three@0.163.0)(svelte@4.2.15)(three@0.163.0): resolution: {integrity: sha512-4wXIh47EoQbgjOrcbwiXFlQ3s4fPxW5x3OSfXEZgn8GGBdC8ZGdMhALyProe/6VeLhGa50uEn21vX7TcQYgn1w==} peerDependencies: svelte: '>=4' three: '>=0.152' dependencies: '@threejs-kit/instanced-sprite-mesh': 2.4.7(@types/three@0.163.0)(three@0.163.0) - svelte: 4.2.14 + svelte: 4.2.15 three: 0.163.0 three-mesh-bvh: 0.7.4(three@0.163.0) three-perf: 1.0.10(three@0.163.0) @@ -1123,14 +1127,14 @@ packages: - '@types/three' dev: false - /@threlte/flex@1.0.2(svelte@4.2.14)(three@0.163.0): + /@threlte/flex@1.0.2(svelte@4.2.15)(three@0.163.0): resolution: {integrity: sha512-Y87chYdzqhjrWpXaRjmulJX5LXhMLdWjXpR0dIytHg72muvWAbX5csKrBnJFSSMyrxthy2ZUKNrsfvymTqK8Zw==} peerDependencies: svelte: '>=4' three: '>=0.152' dependencies: mitt: 3.0.1 - svelte: 4.2.14 + svelte: 4.2.15 three: 0.163.0 yoga-layout: 2.0.1 dev: false @@ -1377,7 +1381,7 @@ packages: /@vitest/snapshot@1.5.0: resolution: {integrity: sha512-qpv3fSEuNrhAO3FpH6YYRdaECnnRjg9VxbhdtPwPRnzSfHVXnNzzrpX4cJxqiwgRMo7uRMWDFBlsBq4Cr+rO3A==} dependencies: - magic-string: 0.30.9 + magic-string: 0.30.10 pathe: 1.1.2 pretty-format: 29.7.0 dev: true @@ -1397,12 +1401,12 @@ packages: pretty-format: 29.7.0 dev: true - /@zerodevx/svelte-json-view@1.0.9(svelte@4.2.14): + /@zerodevx/svelte-json-view@1.0.9(svelte@4.2.15): resolution: {integrity: sha512-2KKxBfDxEo7lM/kJSy+m1PdLAp5Q9c5nB6OYVBg7oWPdCLXB9JVH1Ytxn2hkqTn77m9MobqGI1fz9FFOTPONfA==} peerDependencies: svelte: ^3.57.0 || ^4.0.0 dependencies: - svelte: 4.2.14 + svelte: 4.2.15 dev: true /abab@2.0.6: @@ -1701,6 +1705,10 @@ packages: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true + /confbox@0.1.7: + resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==} + dev: true + /connect@3.7.0: resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==} engines: {node: '>= 0.10.0'} @@ -1988,7 +1996,7 @@ packages: eslint: 9.0.0 dev: true - /eslint-plugin-svelte@2.37.0(eslint@9.0.0)(svelte@4.2.14): + /eslint-plugin-svelte@2.37.0(eslint@9.0.0)(svelte@4.2.15): resolution: {integrity: sha512-H/2Gz7agYHEMEEzRuLYuCmAIdjuBnbhFG9hOK0yCdSBvvJGJMkjo+lR6j67OIvLOavgp4L7zA5LnDKi8WqdPhQ==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: @@ -2010,8 +2018,8 @@ packages: postcss-safe-parser: 6.0.0(postcss@8.4.38) postcss-selector-parser: 6.0.16 semver: 7.6.0 - svelte: 4.2.14 - svelte-eslint-parser: 0.34.1(svelte@4.2.14) + svelte: 4.2.15 + svelte-eslint-parser: 0.34.1(svelte@4.2.15) transitivePeerDependencies: - supports-color - ts-node @@ -2721,10 +2729,6 @@ packages: hasBin: true dev: true - /jsonc-parser@3.2.1: - resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} - dev: true - /jsondiffpatch@0.6.0: resolution: {integrity: sha512-3QItJOXp2AP1uv7waBkao5nCvhEv+QmJAd38Ybq7wNI74Q+BBmnLn4EDKz6yI9xGAIQoUF87qHt+kc1IVxB4zQ==} engines: {node: ^18.0.0 || >=20.0.0} @@ -2793,7 +2797,7 @@ packages: engines: {node: '>=14'} dependencies: mlly: 1.6.1 - pkg-types: 1.0.3 + pkg-types: 1.1.0 dev: true /locate-character@3.0.0: @@ -2839,6 +2843,11 @@ packages: three: 0.163.0 dev: false + /magic-string@0.30.10: + resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + /magic-string@0.30.5: resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} engines: {node: '>=12'} @@ -2846,12 +2855,6 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true - /magic-string@0.30.9: - resolution: {integrity: sha512-S1+hd+dIrC8EZqKyT9DstTH/0Z+f76kmmvZnkfQVmOpDEF9iVgdYif3Q/pIWHmCoo59bQVGW0kVL3e2nl+9+Sw==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - /markdown-it-anchor@8.6.7(@types/markdown-it@12.2.3)(markdown-it@12.3.2): resolution: {integrity: sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==} peerDependencies: @@ -2976,7 +2979,7 @@ packages: dependencies: acorn: 8.11.3 pathe: 1.1.2 - pkg-types: 1.0.3 + pkg-types: 1.1.0 ufo: 1.5.3 dev: true @@ -3207,10 +3210,10 @@ packages: engines: {node: '>=8.6'} dev: true - /pkg-types@1.0.3: - resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + /pkg-types@1.1.0: + resolution: {integrity: sha512-/RpmvKdxKf8uILTtoOhAgf30wYbP2Qw+L9p3Rvshx1JZVX+XQNZQFjlbmGHEGIm4CkVPlSn+NXmIM8+9oWQaSA==} dependencies: - jsonc-parser: 3.2.1 + confbox: 0.1.7 mlly: 1.6.1 pathe: 1.1.2 dev: true @@ -3271,14 +3274,14 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /prettier-plugin-svelte@3.2.3(prettier@3.2.5)(svelte@4.2.14): + /prettier-plugin-svelte@3.2.3(prettier@3.2.5)(svelte@4.2.15): resolution: {integrity: sha512-wJq8RunyFlWco6U0WJV5wNCM7zpBFakS76UBSbmzMGpncpK98NZABaE+s7n8/APDCEVNHXC5Mpq+MLebQtsRlg==} peerDependencies: prettier: ^3.0.0 svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 dependencies: prettier: 3.2.5 - svelte: 4.2.14 + svelte: 4.2.15 dev: true /prettier@3.2.5: @@ -3605,7 +3608,7 @@ packages: has-flag: 4.0.0 dev: true - /svelte-check@3.6.9(postcss@8.4.38)(svelte@4.2.14): + /svelte-check@3.6.9(postcss@8.4.38)(svelte@4.2.15): resolution: {integrity: sha512-hDQrk3L0osX07djQyMiXocKysTLfusqi8AriNcCiQxhQR49/LonYolcUGMtZ0fbUR8HTR198Prrgf52WWU9wEg==} hasBin: true peerDependencies: @@ -3617,8 +3620,8 @@ packages: import-fresh: 3.3.0 picocolors: 1.0.0 sade: 1.8.1 - svelte: 4.2.14 - svelte-preprocess: 5.1.3(postcss@8.4.38)(svelte@4.2.14)(typescript@5.4.5) + svelte: 4.2.15 + svelte-preprocess: 5.1.4(postcss@8.4.38)(svelte@4.2.15)(typescript@5.4.5) typescript: 5.4.5 transitivePeerDependencies: - '@babel/core' @@ -3632,7 +3635,7 @@ packages: - sugarss dev: true - /svelte-eslint-parser@0.34.1(svelte@4.2.14): + /svelte-eslint-parser@0.34.1(svelte@4.2.15): resolution: {integrity: sha512-9+uLA1pqI9AZioKVGJzYYmlOZWxfoCXSbAM9iaNm7H01XlYlzRTtJfZgl9o3StQGN41PfGJIbkKkfk3e/pHFfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3646,20 +3649,20 @@ packages: espree: 9.6.1 postcss: 8.4.38 postcss-scss: 4.0.9(postcss@8.4.38) - svelte: 4.2.14 + svelte: 4.2.15 dev: true - /svelte-hmr@0.16.0(svelte@4.2.14): + /svelte-hmr@0.16.0(svelte@4.2.15): resolution: {integrity: sha512-Gyc7cOS3VJzLlfj7wKS0ZnzDVdv3Pn2IuVeJPk9m2skfhcu5bq3wtIZyQGggr7/Iim5rH5cncyQft/kRLupcnA==} engines: {node: ^12.20 || ^14.13.1 || >= 16} peerDependencies: svelte: ^3.19.0 || ^4.0.0 dependencies: - svelte: 4.2.14 + svelte: 4.2.15 - /svelte-preprocess@5.1.3(postcss@8.4.38)(svelte@4.2.14)(typescript@5.4.5): - resolution: {integrity: sha512-xxAkmxGHT+J/GourS5mVJeOXZzne1FR5ljeOUAMXUkfEhkLEllRreXpbl3dIYJlcJRfL1LO1uIAPpBpBfiqGPw==} - engines: {node: '>= 16.0.0', pnpm: ^8.0.0} + /svelte-preprocess@5.1.4(postcss@8.4.38)(svelte@4.2.15)(typescript@5.4.5): + resolution: {integrity: sha512-IvnbQ6D6Ao3Gg6ftiM5tdbR6aAETwjhHV+UKGf5bHGYR69RQvF1ho0JKPcbUON4vy4R7zom13jPjgdOWCQ5hDA==} + engines: {node: '>= 16.0.0'} requiresBuild: true peerDependencies: '@babel/core': ^7.10.2 @@ -3697,15 +3700,15 @@ packages: dependencies: '@types/pug': 2.0.10 detect-indent: 6.1.0 - magic-string: 0.30.9 + magic-string: 0.30.10 postcss: 8.4.38 sorcery: 0.11.0 strip-indent: 3.0.0 - svelte: 4.2.14 + svelte: 4.2.15 typescript: 5.4.5 dev: true - /svelte2tsx@0.7.6(svelte@4.2.14)(typescript@5.4.5): + /svelte2tsx@0.7.6(svelte@4.2.15)(typescript@5.4.5): resolution: {integrity: sha512-awHvYsakyiGjRqqSOhb2F+qJ6lUT9klQe0UQofAcdHNaKKeDHA8kEZ8zYKGG3BiDPurKYMGvH5/lZ+jeIoG7yQ==} peerDependencies: svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 @@ -3713,12 +3716,12 @@ packages: dependencies: dedent-js: 1.0.1 pascal-case: 3.1.2 - svelte: 4.2.14 + svelte: 4.2.15 typescript: 5.4.5 dev: true - /svelte@4.2.14: - resolution: {integrity: sha512-ry3+YlWqZpHxLy45MW4MZIxNdvB+Wl7p2nnstWKbOAewaJyNJuOtivSbRChcfIej6wFBjWqyKmf/NgK1uW2JAA==} + /svelte@4.2.15: + resolution: {integrity: sha512-j9KJSccHgLeRERPlhMKrCXpk2TqL2m5Z+k+OBTQhZOhIdCCd3WfqV+ylPWeipEwq17P/ekiSFWwrVQv93i3bsg==} engines: {node: '>=16'} dependencies: '@ampproject/remapping': 2.3.0 @@ -3733,7 +3736,7 @@ packages: estree-walker: 3.0.3 is-reference: 3.0.2 locate-character: 3.0.0 - magic-string: 0.30.9 + magic-string: 0.30.10 periscopic: 3.1.0 /symbol-tree@3.2.4: @@ -4129,7 +4132,7 @@ packages: debug: 4.3.4 execa: 8.0.1 local-pkg: 0.5.0 - magic-string: 0.30.9 + magic-string: 0.30.10 pathe: 1.1.2 picocolors: 1.0.0 std-env: 3.7.0