diff --git a/.changeset/spicy-nails-design.md b/.changeset/spicy-nails-design.md new file mode 100644 index 00000000..b02c10d8 --- /dev/null +++ b/.changeset/spicy-nails-design.md @@ -0,0 +1,5 @@ +--- +"runed": minor +--- + +add `box` utilities diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 763735d1..18dd78bc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -53,6 +53,43 @@ jobs: # - name: Run svelte-check # run: pnpm check + Test: + runs-on: ubuntu-latest + name: Test + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Install Node.JS + uses: actions/setup-node@v3 + with: + node-version: 18 + + - uses: pnpm/action-setup@v2 + name: Install pnpm + id: pnpm-install + with: + version: 8 + + # PNPM Store cache setup + - name: Get pnpm store directory + id: pnpm-cache + run: | + echo "pnpm_cache_dir=$(pnpm store path)" >> $GITHUB_OUTPUT + - name: Setup pnpm cache + uses: actions/cache@v3 + with: + path: ${{ steps.pnpm-cache.outputs.pnpm_cache_dir }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Install dependencies + run: pnpm install + + - run: pnpm test + Lint: runs-on: ubuntu-latest name: Lint diff --git a/.vscode/settings.json b/.vscode/settings.json index 4df879e2..8ac08783 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,13 +1,12 @@ { // Enable the ESlint flat config support "eslint.experimental.useFlatConfig": true, - // Auto fix "editor.codeActionsOnSave": { "source.fixAll.eslint": "explicit", "source.organizeImports": "never" }, - + "editor.formatOnSave": true, // Enable eslint for all supported languages "eslint.validate": [ "javascript", diff --git a/eslint.config.js b/eslint.config.js index 1e5870f5..006dd921 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,8 +1,20 @@ import config, { DEFAULT_IGNORES } from "@huntabyte/eslint-config"; -const CUSTOM_IGNORES = ["**/.github/**", "CHANGELOG.md", "**/.contentlayer"]; +const CUSTOM_IGNORES = [ + "**/.github/**", + "CHANGELOG.md", + "**/.contentlayer", + "**/node_modules/**", + "**/.svelte-kit/**", + ".svelte-kit/**/*", + "*.md", +]; export default config({ svelte: true, ignores: [...DEFAULT_IGNORES, ...CUSTOM_IGNORES], +}).override("antfu/typescript/rules", { + rules: { + "ts/consistent-type-definitions": "off", + }, }); diff --git a/package.json b/package.json index ad079ea7..00ed8877 100644 --- a/package.json +++ b/package.json @@ -24,8 +24,10 @@ "url": "https://github.com/svecosystem/runed" }, "scripts": { - "test": "pnpm -r test", "dev": "pnpm sync && pnpm --parallel dev", + "test": "pnpm -r test", + "test:package": "pnpm -F \"./packages/**\" test", + "test:package:watch": "pnpm -F \"./packages/**\" test:watch", "build": "pnpm -r build", "build:packages": "pnpm -F \"./packages/**\" --parallel build", "build:content": "pnpm -F \"./sites/**\" --parallel build:content", @@ -39,14 +41,14 @@ "license": "MIT", "devDependencies": { "@changesets/cli": "^2.26.2", - "@huntabyte/eslint-config": "^0.2.0", + "@huntabyte/eslint-config": "^0.3.1", "@svitejs/changesets-changelog-github-compact": "^1.1.0", - "eslint": "^8.56.0", - "eslint-plugin-svelte": "2.36.0-next.13", + "eslint": "^9.1.1", + "eslint-plugin-svelte": "2.38.0", "prettier": "^3.2.5", - "prettier-plugin-svelte": "^3.2.2", - "prettier-plugin-tailwindcss": "^0.5.13", - "svelte-eslint-parser": "^0.33.1" + "prettier-plugin-svelte": "^3.2.3", + "prettier-plugin-tailwindcss": "^0.5.14", + "svelte-eslint-parser": "^0.35.0" }, "type": "module" } \ No newline at end of file diff --git a/packages/runed/package.json b/packages/runed/package.json index 842b3301..53c85920 100644 --- a/packages/runed/package.json +++ b/packages/runed/package.json @@ -24,7 +24,8 @@ "dev": "pnpm sync && pnpm watch", "build": "pnpm package", "package": "svelte-kit sync && svelte-package && publint", - "test": "vitest", + "test": "vitest --run", + "test:watch": "vitest --watch", "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", "watch": "svelte-kit sync && svelte-package --watch" }, @@ -48,6 +49,7 @@ "@sveltejs/package": "^2.3.0", "@sveltejs/vite-plugin-svelte": "^3.0.0", "@types/node": "^20.10.6", + "@vitest/coverage-v8": "^1.5.1", "jsdom": "^24.0.0", "publint": "^0.1.9", "svelte": "^5.0.0-next.110", @@ -55,7 +57,7 @@ "tslib": "^2.4.1", "typescript": "^5.0.0", "vite": "^5.0.3", - "vitest": "^1.0.0" + "vitest": "^1.5.1" }, "svelte": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/runed/postcss.config.cjs b/packages/runed/postcss.config.cjs deleted file mode 100644 index e68d4de2..00000000 --- a/packages/runed/postcss.config.cjs +++ /dev/null @@ -1,13 +0,0 @@ -const tailwindcss = require("tailwindcss"); -const autoprefixer = require("autoprefixer"); - -const config = { - plugins: [ - //Some plugins, like tailwindcss/nesting, need to run before Tailwind, - tailwindcss(), - //But others, like autoprefixer, need to run after, - autoprefixer, - ], -}; - -module.exports = config; diff --git a/packages/runed/src/lib/functions/box/box.svelte.ts b/packages/runed/src/lib/functions/box/box.svelte.ts new file mode 100644 index 00000000..358fa1f6 --- /dev/null +++ b/packages/runed/src/lib/functions/box/box.svelte.ts @@ -0,0 +1,192 @@ +import type { Expand, Getter } from "$lib/internal/types.js"; +import { isFunction, isObject } from "$lib/internal/utils/is.js"; + +const BoxSymbol = Symbol("box"); +const isWritableSymbol = Symbol("is-writable"); + +export interface ReadableBox { + readonly [BoxSymbol]: true; + readonly value: T; +} + +export interface WritableBox extends ReadableBox { + readonly [isWritableSymbol]: true; + value: T; +} + +/** + * @returns Whether the value is a Box + */ +function isBox(value: unknown): value is ReadableBox { + return isObject(value) && BoxSymbol in value; +} +/** + * @returns Whether the value is a WritableBox + */ +function isWritableBox(value: unknown): value is WritableBox { + return box.isBox(value) && isWritableSymbol in value; +} + +/** + * Creates a writable box. + * + * @returns A box with a `value` property which can be set to a new value. + * Useful to pass state to other functions. + */ +export function box(): WritableBox; +/** + * Creates a writable box with an initial value. + * + * @param initialValue The initial value of the box. + * @returns A box with a `value` property which can be set to a new value. + * Useful to pass state to other functions. + */ +export function box(initialValue: T): WritableBox; +export function box(initialValue?: unknown) { + let value = $state(initialValue); + + return { + [BoxSymbol]: true, + [isWritableSymbol]: true, + get value() { + return value as unknown; + }, + set value(v: unknown) { + value = v; + }, + }; +} + +/** + * Creates a readonly box + * + * @param getter Function to get the value of the box + * @returns A box with a `value` property whose value is the result of the getter. + * Useful to pass state to other functions. + */ +function boxWith(getter: () => T): ReadableBox; +/** + * Creates a writable box + * + * @param getter Function to get the value of the box + * @param setter Function to set the value of the box + * @returns A box with a `value` property which can be set to a new value. + * Useful to pass state to other functions. + */ +function boxWith(getter: () => T, setter: (v: T) => void): WritableBox; +function boxWith(getter: () => T, setter?: (v: T) => void) { + const derived = $derived.by(getter); + + if (setter) { + return { + [BoxSymbol]: true, + [isWritableSymbol]: true, + get value() { + return derived; + }, + set value(v: T) { + setter(v); + }, + }; + } + + return { + [BoxSymbol]: true, + get value() { + return getter(); + }, + }; +} + +export type BoxFrom = + T extends WritableBox + ? WritableBox + : T extends ReadableBox + ? ReadableBox + : T extends Getter + ? ReadableBox + : WritableBox; + +/** + * Creates a box from either a static value, a box, or a getter function. + * Useful when you want to receive any of these types of values and generate a boxed version of it. + * + * @returns A box with a `value` property whose value. + */ +function boxFrom(value: T): BoxFrom { + if (box.isBox(value)) return value as BoxFrom; + if (isFunction(value)) return box.with(value) as BoxFrom; + return box(value) as BoxFrom; +} + +type GetKeys = { + [K in keyof T]: T[K] extends U ? K : never; +}[keyof T]; +type RemoveValues = Omit>; + +type BoxFlatten> = Expand< + RemoveValues< + { + [K in keyof R]: R[K] extends WritableBox ? T : never; + }, + never + > & + RemoveValues< + { + readonly [K in keyof R]: R[K] extends WritableBox + ? never + : R[K] extends ReadableBox + ? T + : never; + }, + never + > +> & + RemoveValues< + { + [K in keyof R]: R[K] extends ReadableBox ? never : R[K]; + }, + never + >; + +/** + * Function that gets an object of boxes, and returns an object of reactive values + * + * @example + * const count = box(0) + * const flat = box.flatten({ count, double: box.with(() => count.value) }) + * // type of flat is { count: number, readonly double: number } + */ +function boxFlatten>(boxes: R): BoxFlatten { + return Object.entries(boxes).reduce>((acc, [key, b]) => { + if (!box.isBox(b)) { + return Object.assign(acc, { [key]: b }); + } + + if (box.isWritableBox(b)) { + Object.defineProperty(acc, key, { + get() { + return b.value; + }, + // eslint-disable-next-line ts/no-explicit-any + set(v: any) { + b.value = v; + }, + }); + } else { + Object.defineProperty(acc, key, { + get() { + return b.value; + }, + }); + } + + return acc; + }, {} as BoxFlatten); +} + +box.from = boxFrom; +box.with = boxWith; +box.flatten = boxFlatten; +box.isBox = isBox; +box.isWritableBox = isWritableBox; diff --git a/packages/runed/src/lib/functions/box/box.test.svelte.ts b/packages/runed/src/lib/functions/box/box.test.svelte.ts new file mode 100644 index 00000000..3afa9c0e --- /dev/null +++ b/packages/runed/src/lib/functions/box/box.test.svelte.ts @@ -0,0 +1,157 @@ +import { describe, expect, expectTypeOf, test } from "vitest"; +import { type ReadableBox, type WritableBox, box } from "./box.svelte.js"; + +describe("box", () => { + test("box with initial value should be settable", () => { + const count = box(0); + expect(count.value).toBe(0); + count.value = 1; + expect(count.value).toBe(1); + }); +}); + +describe("box.from", () => { + test("box of writable box should be settable", () => { + const count = box.from(box(0)); + expect(count.value).toBe(0); + count.value = 1; + expect(count.value).toBe(1); + }); + + test("box of readable box should not be settable", () => { + const count = box.from(box.with(() => 0)); + expect(count.value).toBe(0); + // @ts-expect-error -- we're testing that the setter is not run + expect(() => (count.value = 1)).toThrow(); + }); + + test("can set box of box or value", () => { + const count = 0 as number | WritableBox; + const reCount = box.from(count); + expect(reCount.value).toBe(0); + reCount.value = 1; + expect(reCount.value).toBe(1); + }); +}); + +describe("box.with", () => { + test("box with getter only should return value and not be settable", () => { + const count = box.with(() => 0); + expect(count.value).toBe(0); + // @ts-expect-error -- we're testing that the setter is not run + expect(() => (count.value = 1)).toThrow(); + }); + + test("box with state getter should be reactive", () => { + let value = $state(0); + const count = box.with(() => value); + expect(count.value).toBe(0); + value++; + expect(count.value).toBe(1); + }); + + test("box with getter and setter should be reactive", () => { + let value = $state(0); + const double = box.with( + () => value, + (v) => (value = v * 2) + ); + expect(double.value).toBe(0); + double.value = 1; + expect(double.value).toBe(2); + expect(value).toBe(2); + }); +}); + +describe("box.isBox", () => { + test("box should be a box", () => { + const count = box(0); + expect(box.isBox(count)).toBe(true); + }); +}); + +describe("box.isWritableBox", () => { + test("writable box should be a writable box", () => { + const count = box(0); + expect(box.isWritableBox(count)).toBe(true); + }); + + test("readable box should not be a writable box", () => { + const count = box.from(() => 0); + expect(box.isWritableBox(count)).toBe(false); + }); +}); + +describe("box.flatten", () => { + test("flattens an object of boxes", () => { + const count = box(0); + const double = box.with(() => count.value * 2); + function increment() { + count.value++; + } + const flat = box.flatten({ count, double, increment }); + + expect(flat.count).toBe(0); + expect(flat.double).toBe(0); + + count.value = 1; + expect(flat.count).toBe(1); + expect(flat.double).toBe(2); + + flat.count = 2; + expect(count.value).toBe(2); + expect(flat.count).toBe(2); + expect(double.value).toBe(4); + expect(flat.double).toBe(4); + + // @ts-expect-error -- we're testing that the setter is not run + expect(() => (flat.double = 3)).toThrow(); + + flat.increment(); + expect(count.value).toBe(3); + expect(double.value).toBe(6); + expect(flat.count).toBe(3); + expect(flat.double).toBe(6); + }); +}); + +describe("box types", () => { + test("box without initial value", () => { + const count = box(); + expectTypeOf(count).toMatchTypeOf>(); + expectTypeOf(count).toMatchTypeOf>(); + }); + + test("box with initial value", () => { + const count = box(0); + expectTypeOf(count).toMatchTypeOf>(); + expectTypeOf(count).toMatchTypeOf>(); + }); + + test("box from writable box", () => { + const count = box.from(box(0)); + expectTypeOf(count).toMatchTypeOf>(); + }); + + test("box from readable box", () => { + const count = box.from(box.with(() => 0)); + expectTypeOf(count).toMatchTypeOf>(); + expectTypeOf(count).not.toMatchTypeOf>(); + }); + + test("box from box or value", () => { + const count = 0 as number | ReadableBox; + const count2 = box.from(count); + expectTypeOf(count2).toMatchTypeOf>(); + }); + + test("box.isWritableBox = true should allow box to be settable", () => { + const count = box(0) as WritableBox | ReadableBox; + expectTypeOf(count).toMatchTypeOf>(); + expect(box.isWritableBox(count)).toBe(true); + + if (box.isWritableBox(count)) { + expectTypeOf(count).toMatchTypeOf>(); + } + }); +}); diff --git a/packages/runed/src/lib/functions/box/index.ts b/packages/runed/src/lib/functions/box/index.ts new file mode 100644 index 00000000..35ec4e2c --- /dev/null +++ b/packages/runed/src/lib/functions/box/index.ts @@ -0,0 +1 @@ +export * from "./box.svelte.js"; diff --git a/packages/runed/src/lib/functions/index.ts b/packages/runed/src/lib/functions/index.ts index c76ccef0..eb795d2b 100644 --- a/packages/runed/src/lib/functions/index.ts +++ b/packages/runed/src/lib/functions/index.ts @@ -2,3 +2,4 @@ export * from "./useActiveElement/index.js"; export * from "./useDebounce/index.js"; export * from "./useElementSize/index.js"; export * from "./useEventListener/index.js"; +export * from "./box/index.js"; diff --git a/packages/runed/src/lib/functions/useDebounce/useDebounce.svelte.ts b/packages/runed/src/lib/functions/useDebounce/useDebounce.svelte.ts index ec21be5f..26441a15 100644 --- a/packages/runed/src/lib/functions/useDebounce/useDebounce.svelte.ts +++ b/packages/runed/src/lib/functions/useDebounce/useDebounce.svelte.ts @@ -1,4 +1,4 @@ -import type { FunctionArgs, ValueOrGetter } from "$lib/internal/types.js"; +import type { FunctionArgs, MaybeGetter } from "$lib/internal/types.js"; /** * Function that takes a callback, and returns a debounced version of it. @@ -15,7 +15,7 @@ import type { FunctionArgs, ValueOrGetter } from "$lib/internal/types.js"; */ export function useDebounce( callback: Callback, - wait: ValueOrGetter = 250 + wait: MaybeGetter = 250 ) { let timeout: ReturnType | undefined; let resolve: (value: ReturnType) => void; diff --git a/packages/runed/src/lib/functions/useElementSize/useElementSize.svelte.ts b/packages/runed/src/lib/functions/useElementSize/useElementSize.svelte.ts index 1901f330..30d97567 100644 --- a/packages/runed/src/lib/functions/useElementSize/useElementSize.svelte.ts +++ b/packages/runed/src/lib/functions/useElementSize/useElementSize.svelte.ts @@ -1,5 +1,5 @@ -import type { ValueOrGetter } from "$lib/internal/types.js"; -import { boxed } from "$lib/internal/utils/boxed.svelte.js"; +import { box } from "../box/box.svelte.js"; +import type { MaybeBoxOrGetter } from "$lib/internal/types.js"; type Options = { initialSize?: { @@ -19,12 +19,12 @@ type Options = { * @returns an object with `width` and `height` properties. */ export function useElementSize( - _node: ValueOrGetter, + _node: MaybeBoxOrGetter, options: Options = { box: "border-box", } ): { width: number; height: number } { - const node = boxed(_node); + const node = box.from(_node); const size = $state({ width: options.initialSize?.width ?? 0, height: options.initialSize?.height ?? 0, diff --git a/packages/runed/src/lib/functions/useEventListener/useEventListener.svelte.ts b/packages/runed/src/lib/functions/useEventListener/useEventListener.svelte.ts index 45143c4e..6505470a 100644 --- a/packages/runed/src/lib/functions/useEventListener/useEventListener.svelte.ts +++ b/packages/runed/src/lib/functions/useEventListener/useEventListener.svelte.ts @@ -1,16 +1,15 @@ -import type { ValueOrGetter } from "$lib/internal/types.js"; -import { boxed } from "$lib/internal/utils/boxed.svelte.js"; +import { box } from "../box/box.svelte.js"; +import type { MaybeBoxOrGetter } from "$lib/internal/types.js"; import { addEventListener } from "$lib/internal/utils/event.js"; - export function useEventListener( - target: ValueOrGetter, + target: MaybeBoxOrGetter, event: TEvent, handler: (this: Window, event: WindowEventMap[TEvent]) => unknown, options?: boolean | AddEventListenerOptions ): void; export function useEventListener( - target: ValueOrGetter, + target: MaybeBoxOrGetter, event: TEvent, handler: (this: Document, event: DocumentEventMap[TEvent]) => unknown, options?: boolean | AddEventListenerOptions @@ -20,26 +19,26 @@ export function useEventListener< TElement extends HTMLElement, TEvent extends keyof HTMLElementEventMap, >( - target: ValueOrGetter, + target: MaybeBoxOrGetter, event: TEvent, handler: (this: TElement, event: HTMLElementEventMap[TEvent]) => unknown, options?: boolean | AddEventListenerOptions ): void; export function useEventListener( - target: ValueOrGetter, + target: MaybeBoxOrGetter, event: string, handler: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions ): void; export function useEventListener( - _target: ValueOrGetter, + _target: MaybeBoxOrGetter, event: string, handler: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions ) { - const target = boxed(_target); + const target = box.from(_target); $effect(() => { if (target.value === undefined || target.value === null) return; diff --git a/packages/runed/src/lib/internal/types.ts b/packages/runed/src/lib/internal/types.ts index 4f86037f..87bfb303 100644 --- a/packages/runed/src/lib/internal/types.ts +++ b/packages/runed/src/lib/internal/types.ts @@ -1,5 +1,10 @@ +import type { ReadableBox } from "$lib/functions/index.js"; + // eslint-disable-next-line ts/no-explicit-any export type FunctionArgs = (...args: Args) => Return; export type Getter = () => T; -export type ValueOrGetter = T | (() => T); +export type MaybeGetter = T | (() => T); +export type MaybeBoxOrGetter = T | Getter | ReadableBox; + +export type Expand = T extends infer U ? { [K in keyof U]: U[K] } : never; diff --git a/packages/runed/src/lib/internal/utils/boxed.svelte.ts b/packages/runed/src/lib/internal/utils/boxed.svelte.ts deleted file mode 100644 index 2cd8cc7f..00000000 --- a/packages/runed/src/lib/internal/utils/boxed.svelte.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { isFunction } from "./is.js"; -import type { ValueOrGetter } from "$lib/internal/types.js"; - -export function boxed(value: ValueOrGetter) { - return { - get value() { - return isFunction(value) ? value() : value; - }, - }; -} diff --git a/packages/runed/src/lib/internal/utils/is.ts b/packages/runed/src/lib/internal/utils/is.ts index 91dd54eb..3adbbf09 100644 --- a/packages/runed/src/lib/internal/utils/is.ts +++ b/packages/runed/src/lib/internal/utils/is.ts @@ -1,3 +1,7 @@ export function isFunction(value: unknown): value is (...args: unknown[]) => unknown { return typeof value === "function"; } + +export function isObject(value: unknown): value is Record { + return value !== null && typeof value === "object"; +} diff --git a/packages/runed/svelte.config.js b/packages/runed/svelte.config.js index 68f90643..00ae3f3f 100644 --- a/packages/runed/svelte.config.js +++ b/packages/runed/svelte.config.js @@ -2,7 +2,7 @@ import { vitePreprocess } from "@sveltejs/vite-plugin-svelte"; /** @type {import('@sveltejs/kit').Config} */ const config = { - preprocess: [vitePreprocess({})], + preprocess: [vitePreprocess()], }; export default config; diff --git a/packages/runed/tailwind.config.cjs b/packages/runed/tailwind.config.cjs deleted file mode 100644 index 5373ea11..00000000 --- a/packages/runed/tailwind.config.cjs +++ /dev/null @@ -1,12 +0,0 @@ -/** @type {import('tailwindcss').Config}*/ -const config = { - content: ["./src/**/*.{html,js,svelte,ts}"], - - theme: { - extend: {}, - }, - - plugins: [], -}; - -module.exports = config; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 871d26e4..5099aed9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,29 +12,29 @@ importers: specifier: ^2.26.2 version: 2.27.1 '@huntabyte/eslint-config': - specifier: ^0.2.0 - version: 0.2.0(@vue/compiler-sfc@3.4.21)(eslint-plugin-svelte@2.36.0-next.13)(eslint@8.56.0)(svelte-eslint-parser@0.33.1)(svelte@5.0.0-next.110)(typescript@5.3.3) + specifier: ^0.3.1 + version: 0.3.1(@vue/compiler-sfc@3.4.21)(eslint-plugin-svelte@2.38.0)(eslint@9.1.1)(svelte-eslint-parser@0.35.0)(svelte@5.0.0-next.110)(typescript@5.3.3) '@svitejs/changesets-changelog-github-compact': specifier: ^1.1.0 version: 1.1.0 eslint: - specifier: ^8.56.0 - version: 8.56.0 + specifier: ^9.1.1 + version: 9.1.1 eslint-plugin-svelte: - specifier: 2.36.0-next.13 - version: 2.36.0-next.13(eslint@8.56.0)(svelte@5.0.0-next.110) + specifier: 2.38.0 + version: 2.38.0(eslint@9.1.1)(svelte@5.0.0-next.110) prettier: specifier: ^3.2.5 version: 3.2.5 prettier-plugin-svelte: - specifier: ^3.2.2 - version: 3.2.2(prettier@3.2.5)(svelte@5.0.0-next.110) + specifier: ^3.2.3 + version: 3.2.3(prettier@3.2.5)(svelte@5.0.0-next.110) prettier-plugin-tailwindcss: - specifier: ^0.5.13 - version: 0.5.13(prettier-plugin-svelte@3.2.2)(prettier@3.2.5) + specifier: ^0.5.14 + version: 0.5.14(prettier-plugin-svelte@3.2.3)(prettier@3.2.5) svelte-eslint-parser: - specifier: ^0.33.1 - version: 0.33.1(svelte@5.0.0-next.110) + specifier: ^0.35.0 + version: 0.35.0(svelte@5.0.0-next.110) packages/runed: dependencies: @@ -57,6 +57,9 @@ importers: '@types/node': specifier: ^20.10.6 version: 20.11.17 + '@vitest/coverage-v8': + specifier: ^1.5.1 + version: 1.5.1(vitest@1.5.1) jsdom: specifier: ^24.0.0 version: 24.0.0 @@ -68,7 +71,7 @@ importers: version: 5.0.0-next.110 svelte-check: specifier: ^3.6.0 - version: 3.6.4(postcss@8.4.35)(svelte@5.0.0-next.110) + version: 3.6.4(postcss@8.4.38)(svelte@5.0.0-next.110) tslib: specifier: ^2.4.1 version: 2.6.2 @@ -79,8 +82,8 @@ importers: specifier: ^5.0.3 version: 5.1.3(@types/node@20.11.17) vitest: - specifier: ^1.0.0 - version: 1.3.0(@types/node@20.11.17)(jsdom@24.0.0) + specifier: ^1.5.1 + version: 1.5.1(@types/node@20.11.17)(jsdom@24.0.0) sites/docs: dependencies: @@ -192,7 +195,7 @@ importers: version: 5.1.3(@types/node@20.11.17) vitest: specifier: ^1.3.0 - version: 1.3.0(@types/node@20.11.17)(jsdom@24.0.0) + version: 1.3.0 zod: specifier: ^3.22.4 version: 3.22.4 @@ -216,23 +219,26 @@ packages: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.22 - /@antfu/eslint-config@2.12.1(@vue/compiler-sfc@3.4.21)(eslint-plugin-svelte@2.36.0-next.13)(eslint@8.56.0)(svelte-eslint-parser@0.33.1)(svelte@5.0.0-next.110)(typescript@5.3.3): - resolution: {integrity: sha512-o0tTokP/qk7Hwsv14N+sr1DsF3bylZrJH9yWdY73A0wSHlomqy7W+v9lXjN23q3cwjLftNzujd6SXmWBgcpCLg==} + /@antfu/eslint-config@2.15.0(@vue/compiler-sfc@3.4.21)(eslint-plugin-svelte@2.38.0)(eslint@9.1.1)(svelte-eslint-parser@0.35.0)(svelte@5.0.0-next.110)(typescript@5.3.3): + resolution: {integrity: sha512-qoqw+0N8bqz0vBIigGJamaIf1LdzXcmCDuleygJAF3EtACLieKyIMvpOdc2TU9AnuPbMBFCkN40340UWRChELw==} hasBin: true peerDependencies: + '@eslint-react/eslint-plugin': ^1.5.8 '@unocss/eslint-plugin': '>=0.50.0' astro-eslint-parser: ^0.16.3 eslint: '>=8.40.0' eslint-plugin-astro: ^0.31.4 eslint-plugin-format: '>=0.1.0' - eslint-plugin-react: ^7.33.2 eslint-plugin-react-hooks: ^4.6.0 eslint-plugin-react-refresh: ^0.4.4 - eslint-plugin-svelte: ^2.35.1 + eslint-plugin-solid: ^0.13.2 + eslint-plugin-svelte: '>=2.35.1' prettier-plugin-astro: ^0.13.0 prettier-plugin-slidev: ^1.0.5 svelte-eslint-parser: ^0.33.1 peerDependenciesMeta: + '@eslint-react/eslint-plugin': + optional: true '@unocss/eslint-plugin': optional: true astro-eslint-parser: @@ -241,12 +247,12 @@ packages: optional: true eslint-plugin-format: optional: true - eslint-plugin-react: - optional: true eslint-plugin-react-hooks: optional: true eslint-plugin-react-refresh: optional: true + eslint-plugin-solid: + optional: true eslint-plugin-svelte: optional: true prettier-plugin-astro: @@ -258,38 +264,38 @@ packages: dependencies: '@antfu/install-pkg': 0.3.2 '@clack/prompts': 0.7.0 - '@stylistic/eslint-plugin': 1.7.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/eslint-plugin': 7.5.0(@typescript-eslint/parser@7.5.0)(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/parser': 7.5.0(eslint@8.56.0)(typescript@5.3.3) - eslint: 8.56.0 + '@stylistic/eslint-plugin': 1.7.2(eslint@9.1.1)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 7.7.1(@typescript-eslint/parser@7.7.1)(eslint@9.1.1)(typescript@5.3.3) + '@typescript-eslint/parser': 7.7.1(eslint@9.1.1)(typescript@5.3.3) + eslint: 9.1.1 eslint-config-flat-gitignore: 0.1.5 - eslint-flat-config-utils: 0.2.0 - eslint-merge-processors: 0.1.0(eslint@8.56.0) - eslint-plugin-antfu: 2.1.2(eslint@8.56.0) - eslint-plugin-eslint-comments: 3.2.0(eslint@8.56.0) - eslint-plugin-import-x: 0.5.0(eslint@8.56.0)(typescript@5.3.3) - eslint-plugin-jsdoc: 48.2.2(eslint@8.56.0) - eslint-plugin-jsonc: 2.15.0(eslint@8.56.0) - eslint-plugin-markdown: 4.0.1(eslint@8.56.0) - eslint-plugin-n: 16.6.2(eslint@8.56.0) + eslint-flat-config-utils: 0.2.3 + eslint-merge-processors: 0.1.0(eslint@9.1.1) + eslint-plugin-antfu: 2.1.2(eslint@9.1.1) + eslint-plugin-eslint-comments: 3.2.0(eslint@9.1.1) + eslint-plugin-import-x: 0.5.0(eslint@9.1.1)(typescript@5.3.3) + eslint-plugin-jsdoc: 48.2.3(eslint@9.1.1) + eslint-plugin-jsonc: 2.15.1(eslint@9.1.1) + eslint-plugin-markdown: 4.0.1(eslint@9.1.1) + eslint-plugin-n: 17.3.1(eslint@9.1.1) eslint-plugin-no-only-tests: 3.1.0 - eslint-plugin-perfectionist: 2.7.0(eslint@8.56.0)(svelte-eslint-parser@0.33.1)(svelte@5.0.0-next.110)(typescript@5.3.3)(vue-eslint-parser@9.4.2) - eslint-plugin-svelte: 2.36.0-next.13(eslint@8.56.0)(svelte@5.0.0-next.110) - eslint-plugin-toml: 0.11.0(eslint@8.56.0) - eslint-plugin-unicorn: 51.0.1(eslint@8.56.0) - eslint-plugin-unused-imports: 3.1.0(@typescript-eslint/eslint-plugin@7.5.0)(eslint@8.56.0) - eslint-plugin-vitest: 0.4.1(@typescript-eslint/eslint-plugin@7.5.0)(eslint@8.56.0)(typescript@5.3.3) - eslint-plugin-vue: 9.24.0(eslint@8.56.0) - eslint-plugin-yml: 1.14.0(eslint@8.56.0) - eslint-processor-vue-blocks: 0.1.1(@vue/compiler-sfc@3.4.21)(eslint@8.56.0) + eslint-plugin-perfectionist: 2.10.0(eslint@9.1.1)(svelte-eslint-parser@0.35.0)(svelte@5.0.0-next.110)(typescript@5.3.3)(vue-eslint-parser@9.4.2) + eslint-plugin-svelte: 2.38.0(eslint@9.1.1)(svelte@5.0.0-next.110) + eslint-plugin-toml: 0.11.0(eslint@9.1.1) + eslint-plugin-unicorn: 52.0.0(eslint@9.1.1) + eslint-plugin-unused-imports: 3.1.0(@typescript-eslint/eslint-plugin@7.7.1)(eslint@9.1.1) + eslint-plugin-vitest: 0.5.4(@typescript-eslint/eslint-plugin@7.7.1)(eslint@9.1.1)(typescript@5.3.3) + eslint-plugin-vue: 9.25.0(eslint@9.1.1) + eslint-plugin-yml: 1.14.0(eslint@9.1.1) + eslint-processor-vue-blocks: 0.1.2(@vue/compiler-sfc@3.4.21)(eslint@9.1.1) globals: 15.0.0 jsonc-eslint-parser: 2.4.0 local-pkg: 0.5.0 parse-gitignore: 2.0.0 picocolors: 1.0.0 - svelte-eslint-parser: 0.33.1(svelte@5.0.0-next.110) + svelte-eslint-parser: 0.35.0(svelte@5.0.0-next.110) toml-eslint-parser: 0.9.3 - vue-eslint-parser: 9.4.2(eslint@8.56.0) + vue-eslint-parser: 9.4.2(eslint@9.1.1) yaml-eslint-parser: 1.2.2 yargs: 17.7.2 transitivePeerDependencies: @@ -333,8 +339,8 @@ packages: js-tokens: 4.0.0 dev: true - /@babel/parser@7.24.1: - resolution: {integrity: sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==} + /@babel/parser@7.24.4: + resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==} engines: {node: '>=6.0.0'} hasBin: true dependencies: @@ -357,6 +363,10 @@ packages: to-fast-properties: 2.0.0 dev: true + /@bcoe/v8-coverage@0.2.3: + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + dev: true + /@changesets/apply-release-plan@7.0.0: resolution: {integrity: sha512-vfi69JR416qC9hWmFGSxj7N6wA5J222XNBmezSVATPWDVPIF7gkd4d8CpbEbXmRWbVrkoli3oerGS6dcL/BGsQ==} dependencies: @@ -663,6 +673,10 @@ packages: peerDependencies: '@effect-ts/otel-node': '*' peerDependenciesMeta: + '@effect-ts/core': + optional: true + '@effect-ts/otel': + optional: true '@effect-ts/otel-node': optional: true dependencies: @@ -1182,13 +1196,13 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): + /@eslint-community/eslint-utils@4.4.0(eslint@9.1.1): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.56.0 + eslint: 9.1.1 eslint-visitor-keys: 3.4.3 dev: true @@ -1214,9 +1228,26 @@ packages: - supports-color dev: true - /@eslint/js@8.56.0: - resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@eslint/eslintrc@3.0.2: + resolution: {integrity: sha512-wV19ZEGEMAC1eHgrS7UQPqsdEiCIbTKTasEfcXAigzoXICcqZSjBZEHlZwNVvKg6UBCjSlos84XiLqsRJnIcIg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 10.0.1 + globals: 14.0.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/js@9.1.1: + resolution: {integrity: sha512-5WoDz3Y19Bg2BnErkZTp0en+c/i9PvgFS7MBe1+m60HjFr0hrphlAGp4yzI7pxpt4xShln4ZyYp4neJm8hmOkQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dev: true /@fal-works/esbuild-plugin-global-externals@2.1.2: @@ -1259,11 +1290,11 @@ packages: yargs: 17.7.2 dev: true - /@humanwhocodes/config-array@0.11.14: - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + /@humanwhocodes/config-array@0.13.0: + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 2.0.2 + '@humanwhocodes/object-schema': 2.0.3 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: @@ -1275,39 +1306,47 @@ packages: engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema@2.0.2: - resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} + /@humanwhocodes/object-schema@2.0.3: + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + dev: true + + /@humanwhocodes/retry@0.2.3: + resolution: {integrity: sha512-X38nUbachlb01YMlvPFojKoiXq+LzZvuSce70KPMPdeM1Rj03k4dR7lDslhbqXn3Ang4EU3+EAmwEAsbrjHW3g==} + engines: {node: '>=18.18'} dev: true - /@huntabyte/eslint-config@0.2.0(@vue/compiler-sfc@3.4.21)(eslint-plugin-svelte@2.36.0-next.13)(eslint@8.56.0)(svelte-eslint-parser@0.33.1)(svelte@5.0.0-next.110)(typescript@5.3.3): - resolution: {integrity: sha512-8zvcqqQOeLf9p9Kf4f6bMCcy4wbzSbonbor64fPKFn/JnLrBrDbCPpk7XIc7+SS6C82zU42OVSqE6x5X1S4OrA==} + /@huntabyte/eslint-config@0.3.1(@vue/compiler-sfc@3.4.21)(eslint-plugin-svelte@2.38.0)(eslint@9.1.1)(svelte-eslint-parser@0.35.0)(svelte@5.0.0-next.110)(typescript@5.3.3): + resolution: {integrity: sha512-aLnVtA+n556gtv+NfCfIi1OoM0j0tsHP9ERlVaaJ3p+AHoZyT6FYefEInX6Snxwt4U5WzmL/gJ8w0QbyZdyH4w==} hasBin: true peerDependencies: - eslint: '>=8.40.0' - eslint-plugin-svelte: ^2.35.1 - svelte-eslint-parser: ^0.33.1 + eslint: ^9.0.0 + eslint-plugin-svelte: ^2.37.0 + svelte-eslint-parser: ^0.34.1 dependencies: - '@antfu/eslint-config': 2.12.1(@vue/compiler-sfc@3.4.21)(eslint-plugin-svelte@2.36.0-next.13)(eslint@8.56.0)(svelte-eslint-parser@0.33.1)(svelte@5.0.0-next.110)(typescript@5.3.3) + '@antfu/eslint-config': 2.15.0(@vue/compiler-sfc@3.4.21)(eslint-plugin-svelte@2.38.0)(eslint@9.1.1)(svelte-eslint-parser@0.35.0)(svelte@5.0.0-next.110)(typescript@5.3.3) '@antfu/install-pkg': 0.3.2 '@clack/prompts': 0.7.0 - '@huntabyte/eslint-plugin': 0.0.1(eslint@8.56.0) + '@huntabyte/eslint-plugin': 0.1.0(eslint@9.1.1) + '@typescript-eslint/eslint-plugin': 7.7.1(@typescript-eslint/parser@7.7.1)(eslint@9.1.1)(typescript@5.3.3) + '@typescript-eslint/parser': 7.7.1(eslint@9.1.1)(typescript@5.3.3) chalk: 5.3.0 - eslint: 8.56.0 - eslint-flat-config-utils: 0.2.0 - eslint-plugin-svelte: 2.36.0-next.13(eslint@8.56.0)(svelte@5.0.0-next.110) + eslint: 9.1.1 + eslint-flat-config-utils: 0.2.3 + eslint-plugin-svelte: 2.38.0(eslint@9.1.1)(svelte@5.0.0-next.110) local-pkg: 0.5.0 parse-gitignore: 2.0.0 - svelte-eslint-parser: 0.33.1(svelte@5.0.0-next.110) + svelte-eslint-parser: 0.35.0(svelte@5.0.0-next.110) yargs: 17.7.2 transitivePeerDependencies: + - '@eslint-react/eslint-plugin' - '@unocss/eslint-plugin' - '@vue/compiler-sfc' - astro-eslint-parser - eslint-plugin-astro - eslint-plugin-format - - eslint-plugin-react - eslint-plugin-react-hooks - eslint-plugin-react-refresh + - eslint-plugin-solid - prettier-plugin-astro - prettier-plugin-slidev - supports-color @@ -1316,12 +1355,12 @@ packages: - vitest dev: true - /@huntabyte/eslint-plugin@0.0.1(eslint@8.56.0): - resolution: {integrity: sha512-Ksf//Ey+BcnUxvzKHTzyjZXzrfdnEda2rrNv9ygl4dlQHSI9WY9fhlh9Fn1LPqrWUz66mQHk0Bw/4wEf4R+XIw==} + /@huntabyte/eslint-plugin@0.1.0(eslint@9.1.1): + resolution: {integrity: sha512-u2TIbkMD8R+eke49PofIfu/hI542ZiLTynNVTtKkhIh1vmQiIPzcnVdVjuZ/aNvjIjpH9FnowyY2Xd+i4llqLQ==} peerDependencies: eslint: '*' dependencies: - eslint: 8.56.0 + eslint: 9.1.1 dev: true /@internationalized/date@3.5.1: @@ -1342,6 +1381,11 @@ packages: wrap-ansi-cjs: /wrap-ansi@7.0.0 dev: true + /@istanbuljs/schema@0.1.3: + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + dev: true + /@jest/schemas@29.6.3: resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -1374,6 +1418,13 @@ packages: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + /@js-temporal/polyfill@0.4.4: resolution: {integrity: sha512-2X6bvghJ/JAoZO52lbgyAPFj8uCflhTo2g7nkFzEQdXd/D8rEeD4HtmTEpmtGCva260fcd66YNXBOYdnmHqSOg==} engines: {node: '>=12'} @@ -1878,73 +1929,73 @@ packages: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true - /@stylistic/eslint-plugin-js@1.7.0(eslint@8.56.0): - resolution: {integrity: sha512-PN6On/+or63FGnhhMKSQfYcWutRlzOiYlVdLM6yN7lquoBTqUJHYnl4TA4MHwiAt46X5gRxDr1+xPZ1lOLcL+Q==} + /@stylistic/eslint-plugin-js@1.7.2(eslint@9.1.1): + resolution: {integrity: sha512-ZYX7C5p7zlHbACwFLU+lISVh6tdcRP/++PWegh2Sy0UgMT5kU0XkPa2tKWEtJYzZmPhJxu9LxbnWcnE/tTwSDQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: '>=8.40.0' dependencies: - '@types/eslint': 8.56.7 + '@types/eslint': 8.56.10 acorn: 8.11.3 escape-string-regexp: 4.0.0 - eslint: 8.56.0 + eslint: 9.1.1 eslint-visitor-keys: 3.4.3 espree: 9.6.1 dev: true - /@stylistic/eslint-plugin-jsx@1.7.0(eslint@8.56.0): - resolution: {integrity: sha512-BACdBwXakQvjYIST5N2WWhRbvhRsIxa/F59BiZol+0IH4FSmDXhie7v/yaxDIIA9CbfElzOmIA5nWNYTVXcnwQ==} + /@stylistic/eslint-plugin-jsx@1.7.2(eslint@9.1.1): + resolution: {integrity: sha512-lNZR5PR0HLJPs+kY0y8fy6KroKlYqA5PwsYWpVYWzqZWiL5jgAeUo4s9yLFYjJjzildJ5MsTVMy/xP81Qz6GXg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: '>=8.40.0' dependencies: - '@stylistic/eslint-plugin-js': 1.7.0(eslint@8.56.0) - '@types/eslint': 8.56.7 - eslint: 8.56.0 + '@stylistic/eslint-plugin-js': 1.7.2(eslint@9.1.1) + '@types/eslint': 8.56.10 + eslint: 9.1.1 estraverse: 5.3.0 picomatch: 4.0.2 dev: true - /@stylistic/eslint-plugin-plus@1.7.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-AabDw8sXsc70Ydx3qnbeTlRHZnIwY6UKEenBPURPhY3bfYWX+/pDpZH40HkOu94v8D0DUrocPkeeEUxl4e0JDg==} + /@stylistic/eslint-plugin-plus@1.7.2(eslint@9.1.1)(typescript@5.3.3): + resolution: {integrity: sha512-luUfRVbBVtt0+/FNt8/76BANJEzb/nHWasHD7UUjyMrch2U9xUKpObrkTCzqBuisKek+uFupwGjqXqDP07+fQw==} peerDependencies: eslint: '*' dependencies: - '@types/eslint': 8.56.7 - '@typescript-eslint/utils': 6.21.0(eslint@8.56.0)(typescript@5.3.3) - eslint: 8.56.0 + '@types/eslint': 8.56.10 + '@typescript-eslint/utils': 6.21.0(eslint@9.1.1)(typescript@5.3.3) + eslint: 9.1.1 transitivePeerDependencies: - supports-color - typescript dev: true - /@stylistic/eslint-plugin-ts@1.7.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-QsHv98mmW1xaucVYQTyLDgEpybPJ/6jPPxVBrIchntWWwj74xCWKUiw79hu+TpYj/Pbhd9rkqJYLNq3pQGYuyA==} + /@stylistic/eslint-plugin-ts@1.7.2(eslint@9.1.1)(typescript@5.3.3): + resolution: {integrity: sha512-szX89YPocwCe4T0eT3alj7MwEzDHt5+B+kb/vQfSSLIjI9CGgoWrgj50zU8PtaDctTh4ZieFBzU/lRmkSUo0RQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: '>=8.40.0' dependencies: - '@stylistic/eslint-plugin-js': 1.7.0(eslint@8.56.0) - '@types/eslint': 8.56.7 - '@typescript-eslint/utils': 6.21.0(eslint@8.56.0)(typescript@5.3.3) - eslint: 8.56.0 + '@stylistic/eslint-plugin-js': 1.7.2(eslint@9.1.1) + '@types/eslint': 8.56.10 + '@typescript-eslint/utils': 6.21.0(eslint@9.1.1)(typescript@5.3.3) + eslint: 9.1.1 transitivePeerDependencies: - supports-color - typescript dev: true - /@stylistic/eslint-plugin@1.7.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-ThMUjGIi/jeWYNvOdjZkoLw1EOVs0tEuKXDgWvTn8uWaEz55HuPlajKxjKLpv19C+qRDbKczJfzUODfCdME53A==} + /@stylistic/eslint-plugin@1.7.2(eslint@9.1.1)(typescript@5.3.3): + resolution: {integrity: sha512-TesaPR4AOCeD4unwu9gZCdTe8SsUpykriICuwXV8GFBgESuVbfVp+S8g6xTWe9ntVR803bNMtnr2UhxHW0iFqg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: '>=8.40.0' dependencies: - '@stylistic/eslint-plugin-js': 1.7.0(eslint@8.56.0) - '@stylistic/eslint-plugin-jsx': 1.7.0(eslint@8.56.0) - '@stylistic/eslint-plugin-plus': 1.7.0(eslint@8.56.0)(typescript@5.3.3) - '@stylistic/eslint-plugin-ts': 1.7.0(eslint@8.56.0)(typescript@5.3.3) - '@types/eslint': 8.56.7 - eslint: 8.56.0 + '@stylistic/eslint-plugin-js': 1.7.2(eslint@9.1.1) + '@stylistic/eslint-plugin-jsx': 1.7.2(eslint@9.1.1) + '@stylistic/eslint-plugin-plus': 1.7.2(eslint@9.1.1)(typescript@5.3.3) + '@stylistic/eslint-plugin-ts': 1.7.2(eslint@9.1.1)(typescript@5.3.3) + '@types/eslint': 8.56.10 + eslint: 9.1.1 transitivePeerDependencies: - supports-color - typescript @@ -2157,8 +2208,8 @@ packages: '@types/ms': 0.7.34 dev: true - /@types/eslint@8.56.7: - resolution: {integrity: sha512-SjDvI/x3zsZnOkYZ3lCt9lOZWZLB2jIlNKz+LBgCtDurK0JZcwucxYHn1w2BJkD34dgX9Tjnak0txtq4WTggEA==} + /@types/eslint@8.56.10: + resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} dependencies: '@types/estree': 1.0.5 '@types/json-schema': 7.0.15 @@ -2242,6 +2293,10 @@ packages: resolution: {integrity: sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==} dev: true + /@types/semver@7.5.8: + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + dev: true + /@types/unist@2.0.10: resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} dev: true @@ -2249,8 +2304,8 @@ packages: /@types/unist@3.0.2: resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} - /@typescript-eslint/eslint-plugin@7.5.0(@typescript-eslint/parser@7.5.0)(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-HpqNTH8Du34nLxbKgVMGljZMG0rJd2O9ecvr2QLYp+7512ty1j42KnsFwspPXg1Vh8an9YImf6CokUBltisZFQ==} + /@typescript-eslint/eslint-plugin@7.7.1(@typescript-eslint/parser@7.7.1)(eslint@9.1.1)(typescript@5.3.3): + resolution: {integrity: sha512-KwfdWXJBOviaBVhxO3p5TJiLpNuh2iyXyjmWN0f1nU87pwyvfS0EmjC6ukQVYVFJd/K1+0NWGPDXiyEyQorn0Q==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: '@typescript-eslint/parser': ^7.0.0 @@ -2261,25 +2316,25 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.5.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 7.5.0 - '@typescript-eslint/type-utils': 7.5.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/utils': 7.5.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 7.5.0 + '@typescript-eslint/parser': 7.7.1(eslint@9.1.1)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 7.7.1 + '@typescript-eslint/type-utils': 7.7.1(eslint@9.1.1)(typescript@5.3.3) + '@typescript-eslint/utils': 7.7.1(eslint@9.1.1)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 7.7.1 debug: 4.3.4 - eslint: 8.56.0 + eslint: 9.1.1 graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.6.0 - ts-api-utils: 1.2.1(typescript@5.3.3) + ts-api-utils: 1.3.0(typescript@5.3.3) typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@7.5.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-cj+XGhNujfD2/wzR1tabNsidnYRaFfEkcULdcIyVBYcXjBvBKOes+mpMBP7hMpOyk+gBcfXsrg4NBGAStQyxjQ==} + /@typescript-eslint/parser@7.7.1(eslint@9.1.1)(typescript@5.3.3): + resolution: {integrity: sha512-vmPzBOOtz48F6JAGVS/kZYk4EkXao6iGrD838sp1w3NQQC0W8ry/q641KU4PrG7AKNAf56NOcR8GOpH8l9FPCw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -2288,12 +2343,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 7.5.0 - '@typescript-eslint/types': 7.5.0 - '@typescript-eslint/typescript-estree': 7.5.0(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 7.5.0 + '@typescript-eslint/scope-manager': 7.7.1 + '@typescript-eslint/types': 7.7.1 + '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 7.7.1 debug: 4.3.4 - eslint: 8.56.0 + eslint: 9.1.1 typescript: 5.3.3 transitivePeerDependencies: - supports-color @@ -2315,8 +2370,16 @@ packages: '@typescript-eslint/visitor-keys': 7.5.0 dev: true - /@typescript-eslint/type-utils@7.5.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-A021Rj33+G8mx2Dqh0nMO9GyjjIBK3MqgVgZ2qlKf6CJy51wY/lkkFqq3TqqnH34XyAHUkq27IjlUkWlQRpLHw==} + /@typescript-eslint/scope-manager@7.7.1: + resolution: {integrity: sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==} + engines: {node: ^18.18.0 || >=20.0.0} + dependencies: + '@typescript-eslint/types': 7.7.1 + '@typescript-eslint/visitor-keys': 7.7.1 + dev: true + + /@typescript-eslint/type-utils@7.7.1(eslint@9.1.1)(typescript@5.3.3): + resolution: {integrity: sha512-ZksJLW3WF7o75zaBPScdW1Gbkwhd/lyeXGf1kQCxJaOeITscoSl0MjynVvCzuV5boUz/3fOI06Lz8La55mu29Q==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -2325,11 +2388,11 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 7.5.0(typescript@5.3.3) - '@typescript-eslint/utils': 7.5.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.3.3) + '@typescript-eslint/utils': 7.7.1(eslint@9.1.1)(typescript@5.3.3) debug: 4.3.4 - eslint: 8.56.0 - ts-api-utils: 1.2.1(typescript@5.3.3) + eslint: 9.1.1 + ts-api-utils: 1.3.0(typescript@5.3.3) typescript: 5.3.3 transitivePeerDependencies: - supports-color @@ -2345,6 +2408,11 @@ packages: engines: {node: ^18.18.0 || >=20.0.0} dev: true + /@typescript-eslint/types@7.7.1: + resolution: {integrity: sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==} + engines: {node: ^18.18.0 || >=20.0.0} + dev: true + /@typescript-eslint/typescript-estree@6.21.0(typescript@5.3.3): resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -2389,38 +2457,79 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@6.21.0(eslint@8.56.0)(typescript@5.3.3): + /@typescript-eslint/typescript-estree@7.7.1(typescript@5.3.3): + resolution: {integrity: sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 7.7.1 + '@typescript-eslint/visitor-keys': 7.7.1 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.4 + semver: 7.6.0 + ts-api-utils: 1.3.0(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils@6.21.0(eslint@9.1.1)(typescript@5.3.3): resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.1.1) '@types/json-schema': 7.0.15 '@types/semver': 7.5.7 '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.3) - eslint: 8.56.0 + eslint: 9.1.1 semver: 7.6.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/utils@7.5.0(eslint@8.56.0)(typescript@5.3.3): + /@typescript-eslint/utils@7.5.0(eslint@9.1.1)(typescript@5.3.3): resolution: {integrity: sha512-3vZl9u0R+/FLQcpy2EHyRGNqAS/ofJ3Ji8aebilfJe+fobK8+LbIFmrHciLVDxjDoONmufDcnVSF38KwMEOjzw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.1.1) '@types/json-schema': 7.0.15 '@types/semver': 7.5.7 '@typescript-eslint/scope-manager': 7.5.0 '@typescript-eslint/types': 7.5.0 '@typescript-eslint/typescript-estree': 7.5.0(typescript@5.3.3) - eslint: 8.56.0 + eslint: 9.1.1 + semver: 7.6.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/utils@7.7.1(eslint@9.1.1)(typescript@5.3.3): + resolution: {integrity: sha512-QUvBxPEaBXf41ZBbaidKICgVL8Hin0p6prQDu6bbetWo39BKbWJxRsErOzMNT1rXvTll+J7ChrbmMCXM9rsvOQ==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.1.1) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 7.7.1 + '@typescript-eslint/types': 7.7.1 + '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.3.3) + eslint: 9.1.1 semver: 7.6.0 transitivePeerDependencies: - supports-color @@ -2443,10 +2552,41 @@ packages: eslint-visitor-keys: 3.4.3 dev: true + /@typescript-eslint/visitor-keys@7.7.1: + resolution: {integrity: sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==} + engines: {node: ^18.18.0 || >=20.0.0} + dependencies: + '@typescript-eslint/types': 7.7.1 + eslint-visitor-keys: 3.4.3 + dev: true + /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true + /@vitest/coverage-v8@1.5.1(vitest@1.5.1): + resolution: {integrity: sha512-Zx+dYEDcZg+44ksjIWvWosIGlPLJB1PPpN3O8+Xrh/1qa7WSFA6Y8H7lsZJTYrxu4G2unk9tvP5TgjIGDliF1w==} + peerDependencies: + vitest: 1.5.1 + dependencies: + '@ampproject/remapping': 2.2.1 + '@bcoe/v8-coverage': 0.2.3 + debug: 4.3.4 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 5.0.4 + istanbul-reports: 3.1.7 + magic-string: 0.30.7 + magicast: 0.3.4 + picocolors: 1.0.0 + std-env: 3.7.0 + strip-literal: 2.0.0 + test-exclude: 6.0.0 + vitest: 1.5.1(@types/node@20.11.17)(jsdom@24.0.0) + transitivePeerDependencies: + - supports-color + dev: true + /@vitest/expect@1.3.0: resolution: {integrity: sha512-7bWt0vBTZj08B+Ikv70AnLRicohYwFgzNjFqo9SxxqHHxSlUJGSXmCRORhOnRMisiUryKMdvsi1n27Bc6jL9DQ==} dependencies: @@ -2455,6 +2595,14 @@ packages: chai: 4.4.1 dev: true + /@vitest/expect@1.5.1: + resolution: {integrity: sha512-w3Bn+VUMqku+oWmxvPhTE86uMTbfmBl35aGaIPlwVW7Q89ZREC/icfo2HBsEZ3AAW6YR9lObfZKPEzstw9tJOQ==} + dependencies: + '@vitest/spy': 1.5.1 + '@vitest/utils': 1.5.1 + chai: 4.4.1 + dev: true + /@vitest/runner@1.3.0: resolution: {integrity: sha512-1Jb15Vo/Oy7mwZ5bXi7zbgszsdIBNjc4IqP8Jpr/8RdBC4nF1CTzIAn2dxYvpF1nGSseeL39lfLQ2uvs5u1Y9A==} dependencies: @@ -2463,6 +2611,14 @@ packages: pathe: 1.1.2 dev: true + /@vitest/runner@1.5.1: + resolution: {integrity: sha512-mt372zsz0vFR7L1xF/ert4t+teD66oSuXoTyaZbl0eJgilvyzCKP1tJ21gVa8cDklkBOM3DLnkE1ljj/BskyEw==} + dependencies: + '@vitest/utils': 1.5.1 + p-limit: 5.0.0 + pathe: 1.1.2 + dev: true + /@vitest/snapshot@1.3.0: resolution: {integrity: sha512-swmktcviVVPYx9U4SEQXLV6AEY51Y6bZ14jA2yo6TgMxQ3h+ZYiO0YhAHGJNp0ohCFbPAis1R9kK0cvN6lDPQA==} dependencies: @@ -2471,12 +2627,26 @@ packages: pretty-format: 29.7.0 dev: true + /@vitest/snapshot@1.5.1: + resolution: {integrity: sha512-h/1SGaZYXmjn6hULRBOlqam2z4oTlEe6WwARRzLErAPBqljAs6eX7tfdyN0K+MpipIwSZ5sZsubDWkCPAiVXZQ==} + dependencies: + magic-string: 0.30.7 + pathe: 1.1.2 + pretty-format: 29.7.0 + dev: true + /@vitest/spy@1.3.0: resolution: {integrity: sha512-AkCU0ThZunMvblDpPKgjIi025UxR8V7MZ/g/EwmAGpjIujLVV2X6rGYGmxE2D4FJbAy0/ijdROHMWa2M/6JVMw==} dependencies: tinyspy: 2.2.1 dev: true + /@vitest/spy@1.5.1: + resolution: {integrity: sha512-vsqczk6uPJjmPLy6AEtqfbFqgLYcGBe9BTY+XL8L6y8vrGOhyE23CJN9P/hPimKXnScbqiZ/r/UtUSOQ2jIDGg==} + dependencies: + tinyspy: 2.2.1 + dev: true + /@vitest/utils@1.3.0: resolution: {integrity: sha512-/LibEY/fkaXQufi4GDlQZhikQsPO2entBKtfuyIpr1jV4DpaeasqkeHjhdOhU24vSHshcSuEyVlWdzvv2XmYCw==} dependencies: @@ -2486,14 +2656,23 @@ packages: pretty-format: 29.7.0 dev: true + /@vitest/utils@1.5.1: + resolution: {integrity: sha512-92pE17bBXUxA0Y7goPcvnATMCuq4NQLOmqsG0e2BtzRi7KLwZB5jpiELi/8ybY8IQNWemKjSD5rMoO7xTdv8ug==} + dependencies: + diff-sequences: 29.6.3 + estree-walker: 3.0.3 + loupe: 2.3.7 + pretty-format: 29.7.0 + dev: true + /@vue/compiler-core@3.4.21: resolution: {integrity: sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==} dependencies: - '@babel/parser': 7.24.1 + '@babel/parser': 7.24.4 '@vue/shared': 3.4.21 entities: 4.5.0 estree-walker: 2.0.2 - source-map-js: 1.0.2 + source-map-js: 1.2.0 dev: true /@vue/compiler-dom@3.4.21: @@ -2506,15 +2685,15 @@ packages: /@vue/compiler-sfc@3.4.21: resolution: {integrity: sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==} dependencies: - '@babel/parser': 7.24.1 + '@babel/parser': 7.24.4 '@vue/compiler-core': 3.4.21 '@vue/compiler-dom': 3.4.21 '@vue/compiler-ssr': 3.4.21 '@vue/shared': 3.4.21 estree-walker: 2.0.2 magic-string: 0.30.7 - postcss: 8.4.35 - source-map-js: 1.0.2 + postcss: 8.4.38 + source-map-js: 1.2.0 dev: true /@vue/compiler-ssr@3.4.21: @@ -2838,12 +3017,6 @@ packages: engines: {node: '>=6'} dev: true - /builtins@5.0.1: - resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} - dependencies: - semver: 7.6.0 - dev: true - /cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -3397,6 +3570,14 @@ packages: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} dev: true + /enhanced-resolve@5.16.0: + resolution: {integrity: sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + dev: true + /enquirer@2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} @@ -3576,13 +3757,13 @@ packages: engines: {node: '>=12'} dev: true - /eslint-compat-utils@0.5.0(eslint@8.56.0): + /eslint-compat-utils@0.5.0(eslint@9.1.1): resolution: {integrity: sha512-dc6Y8tzEcSYZMHa+CMPLi/hyo1FzNeonbhJL7Ol0ccuKQkwopJcJBA9YL/xmMTLU1eKigXo9vj9nALElWYSowg==} engines: {node: '>=12'} peerDependencies: eslint: '>=6.0.0' dependencies: - eslint: 8.56.0 + eslint: 9.1.1 semver: 7.6.0 dev: true @@ -3593,10 +3774,10 @@ packages: parse-gitignore: 2.0.0 dev: true - /eslint-flat-config-utils@0.2.0: - resolution: {integrity: sha512-8jLkFKKBAzWPBEjygdH/P9Y/c+K9AcuMAig9u/4/x7mtsDRHj8EdgEJHX1IEvOTAbZiWXEUoZqiKZUIx/1FWKg==} + /eslint-flat-config-utils@0.2.3: + resolution: {integrity: sha512-tfrMNXZfuN4q7sFi1Cr//BN3qdI7c8fLJhbshlp8l9PZIqZ7eVeeyd2Regtu/P9kjOlv18lRlBALzsZaF7ByUg==} dependencies: - '@types/eslint': 8.56.7 + '@types/eslint': 8.56.10 pathe: 1.1.2 dev: true @@ -3610,55 +3791,55 @@ packages: - supports-color dev: true - /eslint-merge-processors@0.1.0(eslint@8.56.0): + /eslint-merge-processors@0.1.0(eslint@9.1.1): resolution: {integrity: sha512-IvRXXtEajLeyssvW4wJcZ2etxkR9mUf4zpNwgI+m/Uac9RfXHskuJefkHUcawVzePnd6xp24enp5jfgdHzjRdQ==} peerDependencies: eslint: '*' dependencies: - eslint: 8.56.0 + eslint: 9.1.1 dev: true - /eslint-plugin-antfu@2.1.2(eslint@8.56.0): + /eslint-plugin-antfu@2.1.2(eslint@9.1.1): resolution: {integrity: sha512-s7ZTOM3uq0iqpp6gF0UEotnvup7f2PHBUftCytLZX0+6C9j9KadKZQh6bVVngAyFgsmeD9+gcBopOYLClb2oDg==} peerDependencies: eslint: '*' dependencies: - eslint: 8.56.0 + eslint: 9.1.1 dev: true - /eslint-plugin-es-x@7.6.0(eslint@8.56.0): + /eslint-plugin-es-x@7.6.0(eslint@9.1.1): resolution: {integrity: sha512-I0AmeNgevgaTR7y2lrVCJmGYF0rjoznpDvqV/kIkZSZbZ8Rw3eu4cGlvBBULScfkSOCzqKbff5LR4CNrV7mZHA==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '>=8' dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.1.1) '@eslint-community/regexpp': 4.10.0 - eslint: 8.56.0 - eslint-compat-utils: 0.5.0(eslint@8.56.0) + eslint: 9.1.1 + eslint-compat-utils: 0.5.0(eslint@9.1.1) dev: true - /eslint-plugin-eslint-comments@3.2.0(eslint@8.56.0): + /eslint-plugin-eslint-comments@3.2.0(eslint@9.1.1): resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} engines: {node: '>=6.5.0'} peerDependencies: eslint: '>=4.19.1' dependencies: escape-string-regexp: 1.0.5 - eslint: 8.56.0 + eslint: 9.1.1 ignore: 5.3.1 dev: true - /eslint-plugin-import-x@0.5.0(eslint@8.56.0)(typescript@5.3.3): + /eslint-plugin-import-x@0.5.0(eslint@9.1.1)(typescript@5.3.3): resolution: {integrity: sha512-C7R8Z4IzxmsoOPMtSzwuOBW5FH6iRlxHR6iTks+MzVlrk3r3TUxokkWTx3ypdj9nGOEP+CG/5e6ebZzHbxgbbQ==} engines: {node: '>=16'} peerDependencies: eslint: ^8.56.0 || ^9.0.0-0 dependencies: - '@typescript-eslint/utils': 7.5.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 7.5.0(eslint@9.1.1)(typescript@5.3.3) debug: 4.3.4 doctrine: 3.0.0 - eslint: 8.56.0 + eslint: 9.1.1 eslint-import-resolver-node: 0.3.9 get-tsconfig: 4.7.3 is-glob: 4.0.3 @@ -3669,8 +3850,8 @@ packages: - typescript dev: true - /eslint-plugin-jsdoc@48.2.2(eslint@8.56.0): - resolution: {integrity: sha512-S0Gk+rpT5w/ephKCncUY7kUsix9uE4B9XI8D/fS1/26d8okE+vZsuG1IvIt4B6sJUdQqsnzi+YXfmh+HJG11CA==} + /eslint-plugin-jsdoc@48.2.3(eslint@9.1.1): + resolution: {integrity: sha512-r9DMAmFs66VNvNqRLLjHejdnJtILrt3xGi+Qx0op0oRfFGVpOR1Hb3BC++MacseHx93d8SKYPhyrC9BS7Os2QA==} engines: {node: '>=18'} peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 @@ -3680,7 +3861,7 @@ packages: comment-parser: 1.4.1 debug: 4.3.4 escape-string-regexp: 4.0.0 - eslint: 8.56.0 + eslint: 9.1.1 esquery: 1.5.0 is-builtin-module: 3.2.1 semver: 7.6.0 @@ -3689,15 +3870,15 @@ packages: - supports-color dev: true - /eslint-plugin-jsonc@2.15.0(eslint@8.56.0): - resolution: {integrity: sha512-wAphMVgTQPAKAYV8d/QEkEYDg8uer9nMQ85N17IUiJcAWLxJs83/Exe59dEH9yKUpvpLf46H+wR7/U7lZ3/NpQ==} + /eslint-plugin-jsonc@2.15.1(eslint@9.1.1): + resolution: {integrity: sha512-PVFrqIJa8BbM/e828RSn0SwB/Z5ye+2LDuy2XqG6AymNgPsfApRRcznsbxP7VrjdLEU4Nb+g9n/d6opyp0jp9A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - eslint: 8.56.0 - eslint-compat-utils: 0.5.0(eslint@8.56.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.1.1) + eslint: 9.1.1 + eslint-compat-utils: 0.5.0(eslint@9.1.1) espree: 9.6.1 graphemer: 1.4.0 jsonc-eslint-parser: 2.4.0 @@ -3705,35 +3886,32 @@ packages: synckit: 0.6.2 dev: true - /eslint-plugin-markdown@4.0.1(eslint@8.56.0): + /eslint-plugin-markdown@4.0.1(eslint@9.1.1): resolution: {integrity: sha512-5/MnGvYU0i8MbHH5cg8S+Vl3DL+bqRNYshk1xUO86DilNBaxtTkhH+5FD0/yO03AmlI6+lfNFdk2yOw72EPzpA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=8' dependencies: - eslint: 8.56.0 + eslint: 9.1.1 mdast-util-from-markdown: 0.8.5 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-n@16.6.2(eslint@8.56.0): - resolution: {integrity: sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==} - engines: {node: '>=16.0.0'} + /eslint-plugin-n@17.3.1(eslint@9.1.1): + resolution: {integrity: sha512-25+HTtKe1F8U/M4ERmdzbz/xkm/gaY0OYC8Fcv1z/WvpLJ8Xfh9LzJ13JV5uj4QyCUD8kOPJrNjn/3y+tc57Vw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: '>=7.0.0' + eslint: '>=8.23.0' dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - builtins: 5.0.1 - eslint: 8.56.0 - eslint-plugin-es-x: 7.6.0(eslint@8.56.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.1.1) + enhanced-resolve: 5.16.0 + eslint: 9.1.1 + eslint-plugin-es-x: 7.6.0(eslint@9.1.1) get-tsconfig: 4.7.3 - globals: 13.24.0 + globals: 15.0.0 ignore: 5.3.1 - is-builtin-module: 3.2.1 - is-core-module: 2.13.1 - minimatch: 3.1.2 - resolve: 1.22.8 + minimatch: 9.0.3 semver: 7.6.0 dev: true @@ -3742,8 +3920,8 @@ packages: engines: {node: '>=5.0.0'} dev: true - /eslint-plugin-perfectionist@2.7.0(eslint@8.56.0)(svelte-eslint-parser@0.33.1)(svelte@5.0.0-next.110)(typescript@5.3.3)(vue-eslint-parser@9.4.2): - resolution: {integrity: sha512-RpSMc0T0DT9DlOj4APzwlAjCqQMxFdsIYlupe73eDkKLn1mMK7fVw2z3nj2y822szKOpvHA7bDa56ySOlr4GXw==} + /eslint-plugin-perfectionist@2.10.0(eslint@9.1.1)(svelte-eslint-parser@0.35.0)(svelte@5.0.0-next.110)(typescript@5.3.3)(vue-eslint-parser@9.4.2): + resolution: {integrity: sha512-P+tdrkHeMWBc55+DZsoDOAftV1WCsEoHaKm6JC7zajFus/syfT4vUPBFb3atGFSuyaVnGQGHlcKpP9X3Q0gH/w==} peerDependencies: astro-eslint-parser: ^0.16.0 eslint: '>=8.0.0' @@ -3760,75 +3938,75 @@ packages: vue-eslint-parser: optional: true dependencies: - '@typescript-eslint/utils': 6.21.0(eslint@8.56.0)(typescript@5.3.3) - eslint: 8.56.0 + '@typescript-eslint/utils': 7.5.0(eslint@9.1.1)(typescript@5.3.3) + eslint: 9.1.1 minimatch: 9.0.3 natural-compare-lite: 1.4.0 svelte: 5.0.0-next.110 - svelte-eslint-parser: 0.33.1(svelte@5.0.0-next.110) - vue-eslint-parser: 9.4.2(eslint@8.56.0) + svelte-eslint-parser: 0.35.0(svelte@5.0.0-next.110) + vue-eslint-parser: 9.4.2(eslint@9.1.1) transitivePeerDependencies: - supports-color - typescript dev: true - /eslint-plugin-svelte@2.36.0-next.13(eslint@8.56.0)(svelte@5.0.0-next.110): - resolution: {integrity: sha512-N4bLGdFkGbbAQiKvX17kLfBgnZ+Em00khOY3AReppO7fkP9jaSxwjdgTCcWf+Q5/uZWor58g4GleRqHcb2Dk2w==} + /eslint-plugin-svelte@2.38.0(eslint@9.1.1)(svelte@5.0.0-next.110): + resolution: {integrity: sha512-IwwxhHzitx3dr0/xo0z4jjDlb2AAHBPKt+juMyKKGTLlKi1rZfA4qixMwnveU20/JTHyipM6keX4Vr7LZFYc9g==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0-0 || ^9.0.0-0 - svelte: ^3.37.0 || ^4.0.0 || ^5.0.0-next.73 + svelte: ^3.37.0 || ^4.0.0 || ^5.0.0-next.112 peerDependenciesMeta: svelte: optional: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.1.1) '@jridgewell/sourcemap-codec': 1.4.15 debug: 4.3.4 - eslint: 8.56.0 - eslint-compat-utils: 0.5.0(eslint@8.56.0) + eslint: 9.1.1 + eslint-compat-utils: 0.5.0(eslint@9.1.1) esutils: 2.0.3 known-css-properties: 0.30.0 - postcss: 8.4.35 - postcss-load-config: 3.1.4(postcss@8.4.35) - postcss-safe-parser: 6.0.0(postcss@8.4.35) - postcss-selector-parser: 6.0.15 + postcss: 8.4.38 + postcss-load-config: 3.1.4(postcss@8.4.38) + postcss-safe-parser: 6.0.0(postcss@8.4.38) + postcss-selector-parser: 6.0.16 semver: 7.6.0 svelte: 5.0.0-next.110 - svelte-eslint-parser: 0.34.0-next.12(svelte@5.0.0-next.110) + svelte-eslint-parser: 0.35.0(svelte@5.0.0-next.110) transitivePeerDependencies: - supports-color - ts-node dev: true - /eslint-plugin-toml@0.11.0(eslint@8.56.0): + /eslint-plugin-toml@0.11.0(eslint@9.1.1): resolution: {integrity: sha512-sau+YvPU4fWTjB+qtBt3n8WS87aoDCs+BVbSUAemGaIsRNbvR9uEk+Tt892iLHTGvp/DPWYoCX4/8DoyAbB+sQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' dependencies: debug: 4.3.4 - eslint: 8.56.0 - eslint-compat-utils: 0.5.0(eslint@8.56.0) + eslint: 9.1.1 + eslint-compat-utils: 0.5.0(eslint@9.1.1) lodash: 4.17.21 toml-eslint-parser: 0.9.3 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-unicorn@51.0.1(eslint@8.56.0): - resolution: {integrity: sha512-MuR/+9VuB0fydoI0nIn2RDA5WISRn4AsJyNSaNKLVwie9/ONvQhxOBbkfSICBPnzKrB77Fh6CZZXjgTt/4Latw==} + /eslint-plugin-unicorn@52.0.0(eslint@9.1.1): + resolution: {integrity: sha512-1Yzm7/m+0R4djH0tjDjfVei/ju2w3AzUGjG6q8JnuNIL5xIwsflyCooW5sfBvQp2pMYQFSWWCFONsjCax1EHng==} engines: {node: '>=16'} peerDependencies: eslint: '>=8.56.0' dependencies: '@babel/helper-validator-identifier': 7.22.20 - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.1.1) '@eslint/eslintrc': 2.1.4 ci-info: 4.0.0 clean-regexp: 1.0.0 core-js-compat: 3.36.1 - eslint: 8.56.0 + eslint: 9.1.1 esquery: 1.5.0 indent-string: 4.0.0 is-builtin-module: 3.2.1 @@ -3843,7 +4021,7 @@ packages: - supports-color dev: true - /eslint-plugin-unused-imports@3.1.0(@typescript-eslint/eslint-plugin@7.5.0)(eslint@8.56.0): + /eslint-plugin-unused-imports@3.1.0(@typescript-eslint/eslint-plugin@7.7.1)(eslint@9.1.1): resolution: {integrity: sha512-9l1YFCzXKkw1qtAru1RWUtG2EVDZY0a0eChKXcL+EZ5jitG7qxdctu4RnvhOJHv4xfmUf7h+JJPINlVpGhZMrw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3853,17 +4031,17 @@ packages: '@typescript-eslint/eslint-plugin': optional: true dependencies: - '@typescript-eslint/eslint-plugin': 7.5.0(@typescript-eslint/parser@7.5.0)(eslint@8.56.0)(typescript@5.3.3) - eslint: 8.56.0 + '@typescript-eslint/eslint-plugin': 7.7.1(@typescript-eslint/parser@7.7.1)(eslint@9.1.1)(typescript@5.3.3) + eslint: 9.1.1 eslint-rule-composer: 0.3.0 dev: true - /eslint-plugin-vitest@0.4.1(@typescript-eslint/eslint-plugin@7.5.0)(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-+PnZ2u/BS+f5FiuHXz4zKsHPcMKHie+K+1Uvu/x91ovkCMEOJqEI8E9Tw1Wzx2QRz4MHOBHYf1ypO8N1K0aNAA==} + /eslint-plugin-vitest@0.5.4(@typescript-eslint/eslint-plugin@7.7.1)(eslint@9.1.1)(typescript@5.3.3): + resolution: {integrity: sha512-um+odCkccAHU53WdKAw39MY61+1x990uXjSPguUCq3VcEHdqJrOb8OTMrbYlY6f9jAKx7x98kLVlIe3RJeJqoQ==} engines: {node: ^18.0.0 || >= 20.0.0} peerDependencies: '@typescript-eslint/eslint-plugin': '*' - eslint: '>=8.0.0' + eslint: ^8.57.0 || ^9.0.0 vitest: '*' peerDependenciesMeta: '@typescript-eslint/eslint-plugin': @@ -3871,42 +4049,42 @@ packages: vitest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 7.5.0(@typescript-eslint/parser@7.5.0)(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/utils': 7.5.0(eslint@8.56.0)(typescript@5.3.3) - eslint: 8.56.0 + '@typescript-eslint/eslint-plugin': 7.7.1(@typescript-eslint/parser@7.7.1)(eslint@9.1.1)(typescript@5.3.3) + '@typescript-eslint/utils': 7.7.1(eslint@9.1.1)(typescript@5.3.3) + eslint: 9.1.1 transitivePeerDependencies: - supports-color - typescript dev: true - /eslint-plugin-vue@9.24.0(eslint@8.56.0): - resolution: {integrity: sha512-9SkJMvF8NGMT9aQCwFc5rj8Wo1XWSMSHk36i7ZwdI614BU7sIOR28ZjuFPKp8YGymZN12BSEbiSwa7qikp+PBw==} + /eslint-plugin-vue@9.25.0(eslint@9.1.1): + resolution: {integrity: sha512-tDWlx14bVe6Bs+Nnh3IGrD+hb11kf2nukfm6jLsmJIhmiRQ1SUaksvwY9U5MvPB0pcrg0QK0xapQkfITs3RKOA==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: - eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 + eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - eslint: 8.56.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.1.1) + eslint: 9.1.1 globals: 13.24.0 natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 6.0.15 semver: 7.6.0 - vue-eslint-parser: 9.4.2(eslint@8.56.0) + vue-eslint-parser: 9.4.2(eslint@9.1.1) xml-name-validator: 4.0.0 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-yml@1.14.0(eslint@8.56.0): + /eslint-plugin-yml@1.14.0(eslint@9.1.1): resolution: {integrity: sha512-ESUpgYPOcAYQO9czugcX5OqRvn/ydDVwGCPXY4YjPqc09rHaUVUA6IE6HLQys4rXk/S+qx3EwTd1wHCwam/OWQ==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' dependencies: debug: 4.3.4 - eslint: 8.56.0 - eslint-compat-utils: 0.5.0(eslint@8.56.0) + eslint: 9.1.1 + eslint-compat-utils: 0.5.0(eslint@9.1.1) lodash: 4.17.21 natural-compare: 1.4.0 yaml-eslint-parser: 1.2.2 @@ -3914,14 +4092,14 @@ packages: - supports-color dev: true - /eslint-processor-vue-blocks@0.1.1(@vue/compiler-sfc@3.4.21)(eslint@8.56.0): - resolution: {integrity: sha512-9+dU5lU881log570oBwpelaJmOfOzSniben7IWEDRYQPPWwlvaV7NhOtsTuUWDqpYT+dtKKWPsgz4OkOi+aZnA==} + /eslint-processor-vue-blocks@0.1.2(@vue/compiler-sfc@3.4.21)(eslint@9.1.1): + resolution: {integrity: sha512-PfpJ4uKHnqeL/fXUnzYkOax3aIenlwewXRX8jFinA1a2yCFnLgMuiH3xvCgvHHUlV2xJWQHbCTdiJWGwb3NqpQ==} peerDependencies: '@vue/compiler-sfc': ^3.3.0 - eslint: ^8.50.0 + eslint: ^8.50.0 || ^9.0.0 dependencies: '@vue/compiler-sfc': 3.4.21 - eslint: 8.56.0 + eslint: 9.1.1 dev: true /eslint-rule-composer@0.3.0: @@ -3937,46 +4115,55 @@ packages: estraverse: 5.3.0 dev: true + /eslint-scope@8.0.1: + resolution: {integrity: sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + /eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.56.0: - resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /eslint-visitor-keys@4.0.0: + resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dev: true + + /eslint@9.1.1: + resolution: {integrity: sha512-b4cRQ0BeZcSEzPpY2PjFY70VbO32K7BStTGtBsnIGdTSEEQzBi8hPBcGQmTG2zUvFr9uLe0TK42bw8YszuHEqg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.1.1) '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.56.0 - '@humanwhocodes/config-array': 0.11.14 + '@eslint/eslintrc': 3.0.2 + '@eslint/js': 9.1.1 + '@humanwhocodes/config-array': 0.13.0 '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.2.3 '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 debug: 4.3.4 - doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 + eslint-scope: 8.0.1 + eslint-visitor-keys: 4.0.0 + espree: 10.0.1 esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 + file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 ignore: 5.3.1 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 - js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 lodash.merge: 4.6.2 @@ -3992,6 +4179,15 @@ packages: /esm-env@1.0.0: resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==} + /espree@10.0.1: + resolution: {integrity: sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) + eslint-visitor-keys: 4.0.0 + dev: true + /espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4173,11 +4369,11 @@ packages: web-streams-polyfill: 3.3.2 dev: true - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + /file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} dependencies: - flat-cache: 3.2.0 + flat-cache: 4.0.1 dev: true /fill-range@7.0.1: @@ -4219,13 +4415,12 @@ packages: pkg-dir: 4.2.0 dev: true - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + /flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} dependencies: flatted: 3.2.9 keyv: 4.5.4 - rimraf: 3.0.2 dev: true /flatted@3.2.9: @@ -4428,6 +4623,11 @@ packages: type-fest: 0.20.2 dev: true + /globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + dev: true + /globals@15.0.0: resolution: {integrity: sha512-m/C/yR4mjO6pXDTm9/R/SpYTAIyaUB4EOzcaaMEl7mds7Mshct9GfejiJNQGjHHbdMPey13Kpu4TMbYi9ex1pw==} engines: {node: '>=18'} @@ -4758,6 +4958,10 @@ packages: whatwg-encoding: 3.1.1 dev: true + /html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + dev: true + /html-void-elements@2.0.1: resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==} dev: true @@ -5112,6 +5316,39 @@ packages: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true + /istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + dev: true + + /istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + dev: true + + /istanbul-lib-source-maps@5.0.4: + resolution: {integrity: sha512-wHOoEsNJTVltaJp8eVkm8w+GVkVNHT2YDYo53YdzQEL2gWm1hBX5cGFR9hQJtuGLebidVX7et3+dmDZrmclduw==} + engines: {node: '>=10'} + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + debug: 4.3.4 + istanbul-lib-coverage: 3.2.2 + transitivePeerDependencies: + - supports-color + dev: true + + /istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + dev: true + /jackspeak@2.3.6: resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} engines: {node: '>=14'} @@ -5394,6 +5631,21 @@ packages: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 + /magicast@0.3.4: + resolution: {integrity: sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q==} + dependencies: + '@babel/parser': 7.24.4 + '@babel/types': 7.24.0 + source-map-js: 1.2.0 + dev: true + + /make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + dependencies: + semver: 7.6.0 + dev: true + /map-obj@1.0.1: resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} engines: {node: '>=0.10.0'} @@ -6347,6 +6599,13 @@ packages: brace-expansion: 2.0.1 dev: true + /minimatch@9.0.4: + resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minimist-options@4.1.0: resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} engines: {node: '>= 6'} @@ -6870,7 +7129,7 @@ packages: postcss: 8.4.35 dev: true - /postcss-load-config@3.1.4(postcss@8.4.35): + /postcss-load-config@3.1.4(postcss@8.4.38): resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} peerDependencies: @@ -6883,7 +7142,7 @@ packages: optional: true dependencies: lilconfig: 2.1.0 - postcss: 8.4.35 + postcss: 8.4.38 yaml: 1.10.2 dev: true @@ -6931,22 +7190,22 @@ packages: postcss-selector-parser: 6.0.15 dev: true - /postcss-safe-parser@6.0.0(postcss@8.4.35): + /postcss-safe-parser@6.0.0(postcss@8.4.38): resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.3.3 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /postcss-scss@4.0.9(postcss@8.4.35): + /postcss-scss@4.0.9(postcss@8.4.38): resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.4.29 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true /postcss-selector-parser@6.0.10: @@ -6965,6 +7224,14 @@ packages: util-deprecate: 1.0.2 dev: true + /postcss-selector-parser@6.0.16: + resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} dev: true @@ -6978,6 +7245,15 @@ packages: source-map-js: 1.0.2 dev: true + /postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.2.0 + dev: true + /preferred-pm@3.1.2: resolution: {integrity: sha512-nk7dKrcW8hfCZ4H6klWcdRknBOXWzNQByJ0oJyX97BOupsYD+FzLS4hflgEu/uPUEHZCuRfMxzCBsuWd7OzT8Q==} engines: {node: '>=10'} @@ -6993,8 +7269,8 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /prettier-plugin-svelte@3.2.2(prettier@3.2.5)(svelte@5.0.0-next.110): - resolution: {integrity: sha512-ZzzE/wMuf48/1+Lf2Ffko0uDa6pyCfgHV6+uAhtg2U0AAXGrhCSW88vEJNAkAxW5qyrFY1y1zZ4J8TgHrjW++Q==} + /prettier-plugin-svelte@3.2.3(prettier@3.2.5)(svelte@5.0.0-next.110): + 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 @@ -7003,8 +7279,8 @@ packages: svelte: 5.0.0-next.110 dev: true - /prettier-plugin-tailwindcss@0.5.13(prettier-plugin-svelte@3.2.2)(prettier@3.2.5): - resolution: {integrity: sha512-2tPWHCFNC+WRjAC4SIWQNSOdcL1NNkydXim8w7TDqlZi+/ulZYz2OouAI6qMtkggnPt7lGamboj6LcTMwcCvoQ==} + /prettier-plugin-tailwindcss@0.5.14(prettier-plugin-svelte@3.2.3)(prettier@3.2.5): + resolution: {integrity: sha512-Puaz+wPUAhFp8Lo9HuciYKM2Y2XExESjeT+9NQoVFXZsPPnc9VYss2SpxdQ6vbatmt8/4+SN0oe0I1cPDABg9Q==} engines: {node: '>=14.21.3'} peerDependencies: '@ianvs/prettier-plugin-sort-imports': '*' @@ -7056,7 +7332,7 @@ packages: optional: true dependencies: prettier: 3.2.5 - prettier-plugin-svelte: 3.2.2(prettier@3.2.5)(svelte@5.0.0-next.110) + prettier-plugin-svelte: 3.2.3(prettier@3.2.5)(svelte@5.0.0-next.110) dev: true /prettier@2.8.8: @@ -7415,13 +7691,6 @@ packages: glob: 7.2.3 dev: true - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true - dependencies: - glob: 7.2.3 - dev: true - /rollup@4.10.0: resolution: {integrity: sha512-t2v9G2AKxcQ8yrG+WGxctBes1AomT0M4ND7jTFBCVPXQ/WFTvNSefIrNSmLKhIKBrvN8SG+CZslimJcT3W2u2g==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -7660,6 +7929,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + engines: {node: '>=0.10.0'} + dev: true + /source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: @@ -7909,7 +8183,7 @@ packages: - sugarss dev: true - /svelte-check@3.6.4(postcss@8.4.35)(svelte@5.0.0-next.110): + /svelte-check@3.6.4(postcss@8.4.38)(svelte@5.0.0-next.110): resolution: {integrity: sha512-mY/dqucqm46p72M8yZmn81WPZx9mN6uuw8UVfR3ZKQeLxQg5HDGO3HHm5AZuWZPYNMLJ+TRMn+TeN53HfQ/vsw==} hasBin: true peerDependencies: @@ -7922,7 +8196,7 @@ packages: picocolors: 1.0.0 sade: 1.8.1 svelte: 5.0.0-next.110 - svelte-preprocess: 5.1.3(postcss@8.4.35)(svelte@5.0.0-next.110)(typescript@5.3.3) + svelte-preprocess: 5.1.3(postcss@8.4.38)(svelte@5.0.0-next.110)(typescript@5.3.3) typescript: 5.3.3 transitivePeerDependencies: - '@babel/core' @@ -7936,11 +8210,11 @@ packages: - sugarss dev: true - /svelte-eslint-parser@0.33.1(svelte@5.0.0-next.110): - resolution: {integrity: sha512-vo7xPGTlKBGdLH8T5L64FipvTrqv3OQRx9d2z5X05KKZDlF4rQk8KViZO4flKERY+5BiVdOh7zZ7JGJWo5P0uA==} + /svelte-eslint-parser@0.35.0(svelte@5.0.0-next.110): + resolution: {integrity: sha512-CtbPseajW0gjwEvHiuzYJkPDjAcHz2FaHt540j6RVYrZgnE6xWkzUBodQ4I3nV+G5AS0Svt8K6aIA/CIU9xT2Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: - svelte: ^3.37.0 || ^4.0.0 + svelte: ^3.37.0 || ^4.0.0 || ^5.0.0-next.112 peerDependenciesMeta: svelte: optional: true @@ -7948,25 +8222,8 @@ packages: eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - postcss: 8.4.35 - postcss-scss: 4.0.9(postcss@8.4.35) - svelte: 5.0.0-next.110 - dev: true - - /svelte-eslint-parser@0.34.0-next.12(svelte@5.0.0-next.110): - resolution: {integrity: sha512-KJTStZILapiwY6ULdUaAf+6GgJs0qGZJrRy5PHtgAGKr8xNHtst9Cax0xbxz2ONDvDGaR26SZRDl9vI2f1KBAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - svelte: ^3.37.0 || ^4.0.0 || ^5.0.0-next.69 - peerDependenciesMeta: - svelte: - optional: true - dependencies: - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - postcss: 8.4.35 - postcss-scss: 4.0.9(postcss@8.4.35) + postcss: 8.4.38 + postcss-scss: 4.0.9(postcss@8.4.38) svelte: 5.0.0-next.110 dev: true @@ -8037,7 +8294,7 @@ packages: typescript: 5.3.3 dev: true - /svelte-preprocess@5.1.3(postcss@8.4.35)(svelte@5.0.0-next.110)(typescript@5.3.3): + /svelte-preprocess@5.1.3(postcss@8.4.38)(svelte@5.0.0-next.110)(typescript@5.3.3): resolution: {integrity: sha512-xxAkmxGHT+J/GourS5mVJeOXZzne1FR5ljeOUAMXUkfEhkLEllRreXpbl3dIYJlcJRfL1LO1uIAPpBpBfiqGPw==} engines: {node: '>= 16.0.0', pnpm: ^8.0.0} requiresBuild: true @@ -8078,7 +8335,7 @@ packages: '@types/pug': 2.0.10 detect-indent: 6.1.0 magic-string: 0.30.7 - postcss: 8.4.35 + postcss: 8.4.38 sorcery: 0.11.0 strip-indent: 3.0.0 svelte: 5.0.0-next.110 @@ -8204,11 +8461,25 @@ packages: - ts-node dev: true + /tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + dev: true + /term-size@2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} dev: true + /test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + dev: true + /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true @@ -8242,6 +8513,11 @@ packages: engines: {node: '>=14.0.0'} dev: true + /tinypool@0.8.4: + resolution: {integrity: sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==} + engines: {node: '>=14.0.0'} + dev: true + /tinyspy@2.2.1: resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} engines: {node: '>=14.0.0'} @@ -8330,6 +8606,15 @@ packages: typescript: 5.3.3 dev: true + /ts-api-utils@1.3.0(typescript@5.3.3): + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 5.3.3 + dev: true + /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true @@ -8704,7 +8989,7 @@ packages: vfile-message: 4.0.2 dev: true - /vite-node@1.3.0(@types/node@20.11.17): + /vite-node@1.3.0: resolution: {integrity: sha512-D/oiDVBw75XMnjAXne/4feCkCEwcbr2SU1bjAhCcfI5Bq3VoOHji8/wCPAfUkDIeohJ5nSZ39fNxM3dNZ6OBOA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -8725,6 +9010,27 @@ packages: - terser dev: true + /vite-node@1.5.1(@types/node@20.11.17): + resolution: {integrity: sha512-HNpfV7BrAsjkYVNWIcPleJwvJmydJqqJRrRbpoQ/U7QDwJKyEzNa4g5aYg8MjXJyKsk29IUCcMLFRcsEvqUIsA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + dependencies: + cac: 6.7.14 + debug: 4.3.4 + pathe: 1.1.2 + picocolors: 1.0.0 + vite: 5.1.3(@types/node@20.11.17) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + /vite@5.1.3(@types/node@20.11.17): resolution: {integrity: sha512-UfmUD36DKkqhi/F75RrxvPpry+9+tTkrXfMNZD+SboZqBCMsxKtO52XeGzzuh7ioz+Eo/SYDBbdb0Z7vgcDJew==} engines: {node: ^18.0.0 || >=20.0.0} @@ -8772,7 +9078,7 @@ packages: vite: 5.1.3(@types/node@20.11.17) dev: true - /vitest@1.3.0(@types/node@20.11.17)(jsdom@24.0.0): + /vitest@1.3.0: resolution: {integrity: sha512-V9qb276J1jjSx9xb75T2VoYXdO1UKi+qfflY7V7w93jzX7oA/+RtYE6TcifxksxsZvygSSMwu2Uw6di7yqDMwg==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -8797,7 +9103,6 @@ packages: jsdom: optional: true dependencies: - '@types/node': 20.11.17 '@vitest/expect': 1.3.0 '@vitest/runner': 1.3.0 '@vitest/snapshot': 1.3.0 @@ -8807,7 +9112,6 @@ packages: chai: 4.4.1 debug: 4.3.4 execa: 8.0.1 - jsdom: 24.0.0 local-pkg: 0.5.0 magic-string: 0.30.7 pathe: 1.1.2 @@ -8817,7 +9121,64 @@ packages: tinybench: 2.6.0 tinypool: 0.8.2 vite: 5.1.3(@types/node@20.11.17) - vite-node: 1.3.0(@types/node@20.11.17) + vite-node: 1.3.0 + why-is-node-running: 2.2.2 + transitivePeerDependencies: + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + + /vitest@1.5.1(@types/node@20.11.17)(jsdom@24.0.0): + resolution: {integrity: sha512-3GvBMpoRnUNbZRX1L3mJCv3Ou3NAobb4dM48y8k9ZGwDofePpclTOyO+lqJFKSQpubH1V8tEcAEw/Y3mJKGJQQ==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': 1.5.1 + '@vitest/ui': 1.5.1 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + dependencies: + '@types/node': 20.11.17 + '@vitest/expect': 1.5.1 + '@vitest/runner': 1.5.1 + '@vitest/snapshot': 1.5.1 + '@vitest/spy': 1.5.1 + '@vitest/utils': 1.5.1 + acorn-walk: 8.3.2 + chai: 4.4.1 + debug: 4.3.4 + execa: 8.0.1 + jsdom: 24.0.0 + local-pkg: 0.5.0 + magic-string: 0.30.7 + pathe: 1.1.2 + picocolors: 1.0.0 + std-env: 3.7.0 + strip-literal: 2.0.0 + tinybench: 2.6.0 + tinypool: 0.8.4 + vite: 5.1.3(@types/node@20.11.17) + vite-node: 1.5.1(@types/node@20.11.17) why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -8829,14 +9190,14 @@ packages: - terser dev: true - /vue-eslint-parser@9.4.2(eslint@8.56.0): + /vue-eslint-parser@9.4.2(eslint@9.1.1): resolution: {integrity: sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' dependencies: debug: 4.3.4 - eslint: 8.56.0 + eslint: 9.1.1 eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 diff --git a/sites/docs/content/functions/box.md b/sites/docs/content/functions/box.md new file mode 100644 index 00000000..2a73c1c4 --- /dev/null +++ b/sites/docs/content/functions/box.md @@ -0,0 +1,154 @@ +--- +title: Box +description: Box your state and take it anywhere +--- + + + +## Description + +State in runes is based on primitives, which provides a concise syntax. However, when sending these primitives across boundaries, e.g. in function arguments, the state is not reactive, and rather, the static value gets sent. + +Box provides several utilities to make sending and receiving reactive values easier. + +## Usage + +### `box` + +Initializes the boxed state. + +```svelte + + + +``` + +### `box.with` + +Allows you to use getters and setters to define a box. Useful to pass around state. + +```svelte + + + +``` + +### `box.from` + +Creates a box from an existing box, a getter function, or a static value. +Used in functions to receive props that are optionally reactive. + +```svelte + +``` + +### `box.flatten` + +Transforms any boxes inside an object to reactive properties, flattening the `.value` onto them. + +```ts +const count = box(1); +const flat = box.flatten({ + count, + double: box.with(() => count.value * 2), + increment() { + count.value++; + }, +}); + +console.log(flat.count); // 1 +console.log(flat.double); // 2 +flat.increment(); +console.log(flat.count); // 2 +``` + +### `box.isBox` + +Checks if a value is a `Box`. + +```ts +const count = box(1); +console.log(box.isBox(count)); // true +console.log(box.isBox(1)); // false +``` + +### `box.isWritableBox` + +Checks if a value is a `WritableBox`. + +```ts +const count = box(1); +const double = box.with(() => count.value * 2); +console.log(box.isWritableBox(count)); // true +console.log(box.isWritableBox(double)); // false +``` diff --git a/sites/docs/src/lib/config/navigation.ts b/sites/docs/src/lib/config/navigation.ts index b6e34c81..64246ff8 100644 --- a/sites/docs/src/lib/config/navigation.ts +++ b/sites/docs/src/lib/config/navigation.ts @@ -61,6 +61,11 @@ export const navigation: Navigation = { title: "Functions", collapsible: true, items: [ + { + title: "Box", + href: "/docs/functions/box", + items: [], + }, { title: "useActiveElement", href: "/docs/functions/use-active-element",