diff --git a/.changeset/sweet-moments-fry.md b/.changeset/sweet-moments-fry.md deleted file mode 100644 index 18a4bf059..000000000 --- a/.changeset/sweet-moments-fry.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@solidjs/image": minor ---- - -Release initial version diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 6642b7233..8399346f3 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -32,9 +32,6 @@ jobs: - name: Build SolidStart run: pnpm --filter @solidjs/start build - - name: Build @solidjs/image - run: pnpm --filter @solidjs/image build - - name: Build Test Project run: pnpm --filter tests build diff --git a/.gitignore b/.gitignore index a6414f0c3..ba104be4b 100644 --- a/.gitignore +++ b/.gitignore @@ -56,5 +56,3 @@ tsconfig.tsbuildinfo apps/tests/**/test-results .solid-start .pnpm-store - -.image diff --git a/apps/tests/package.json b/apps/tests/package.json index 8348853b5..b264f827f 100644 --- a/apps/tests/package.json +++ b/apps/tests/package.json @@ -15,7 +15,6 @@ "test:all": "pnpm run unit:ci && pnpm run e2e && pnpm run e2e:bundled-dev" }, "dependencies": { - "@solidjs/image": "workspace:*", "@solidjs/meta": "^0.29.4", "@solidjs/router": "^0.15.4", "@solidjs/start": "workspace:*", diff --git a/apps/tests/src/images/example.jpg b/apps/tests/src/images/example.jpg deleted file mode 100644 index 229e7980c..000000000 Binary files a/apps/tests/src/images/example.jpg and /dev/null differ diff --git a/apps/tests/src/routes/image-local.tsx b/apps/tests/src/routes/image-local.tsx deleted file mode 100644 index 52a621316..000000000 --- a/apps/tests/src/routes/image-local.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { SolidImage as Image } from "@solidjs/image"; -import { type JSX, onMount, Show } from "solid-js"; -import exampleImage from "../images/example.jpg?image"; - -interface PlaceholderProps { - show: () => void; -} - -function Placeholder(props: PlaceholderProps): JSX.Element { - onMount(() => { - props.show(); - }); - - return
Loading...
; -} - -export default function App(): JSX.Element { - return ( -
- example ( - - - - )} - /> -
- ); -} diff --git a/apps/tests/src/routes/image-remote.tsx b/apps/tests/src/routes/image-remote.tsx deleted file mode 100644 index 54d87b488..000000000 --- a/apps/tests/src/routes/image-remote.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { SolidImage as Image } from "@solidjs/image"; -import { type JSX, onMount, Show } from "solid-js"; -// local -// import exampleImage from './example.jpg?image'; - -// remote -import exampleImage from "image:foobar"; - -interface PlaceholderProps { - show: () => void; -} - -function Placeholder(props: PlaceholderProps): JSX.Element { - onMount(() => { - props.show(); - }); - - return
Loading...
; -} - -export default function App(): JSX.Element { - return ( -
- example ( - - - - )} - /> -
- ); -} diff --git a/apps/tests/tsconfig.json b/apps/tests/tsconfig.json index 67b634e1a..376a974e4 100644 --- a/apps/tests/tsconfig.json +++ b/apps/tests/tsconfig.json @@ -10,7 +10,7 @@ "allowJs": true, "strict": true, "noEmit": true, - "types": ["vitest/globals", "@testing-library/jest-dom", "@solidjs/start/env", "@solidjs/image/env"], + "types": ["vitest/globals", "@testing-library/jest-dom", "@solidjs/start/env"], "isolatedModules": true, "paths": { "~/*": ["./src/*"], diff --git a/apps/tests/vite.config.ts b/apps/tests/vite.config.ts index aed9dc3d1..7ac29edec 100644 --- a/apps/tests/vite.config.ts +++ b/apps/tests/vite.config.ts @@ -1,7 +1,6 @@ import { nitro } from "nitro/vite"; import { defineConfig } from "vite"; import { solidStart } from "../../packages/start/src/config"; -import { imagePlugin } from '../../packages/image/src/vite'; export default defineConfig({ server: { @@ -29,45 +28,5 @@ export default defineConfig({ nitro({ compressPublicAssets: true, }), - imagePlugin({ - local: { - sizes: [480, 600], - quality: 80, - publicPath: "public", - }, - remote: { - transformURL(url) { - return { - src: { - source: `https://picsum.photos/seed/${url}/1200/900.webp`, - width: 1080, - height: 760, - }, - variants: [ - { - path: `https://picsum.photos/seed/${url}/800/600.jpg`, - width: 800, - type: "image/jpeg", - }, - { - path: `https://picsum.photos/seed/${url}/400/300.jpg`, - width: 400, - type: "image/jpeg", - }, - { - path: `https://picsum.photos/seed/${url}/800/600.png`, - width: 800, - type: "image/png", - }, - { - path: `https://picsum.photos/seed/${url}/400/300.png`, - width: 400, - type: "image/png", - }, - ], - }; - }, - }, - }), ], }); diff --git a/package.json b/package.json index 4e0e7af34..36c7a3bc1 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "clean:test": "pnpx rimraf .tmp", "release": "pnpm build && changeset publish", "format": "pnpm oxfmt", - "rewrite-exports": "pnpm --filter='./packages/*' -c exec \"echo \\$(cat package.json | jq '.exports = (.publishConfig.exports // .exports)') > package.json\"", + "rewrite-exports": "pnpm --filter='./packages/*' -c exec \"echo \\$(cat package.json | jq '.exports = .publishConfig.exports') > package.json\"", "vite-ecosystem-ci:build": "pnpm run build:all && pnpm --filter fixture-basic build", "vite-ecosystem-ci:before-test": "pnpm --filter tests exec playwright install chromium", "vite-ecosystem-ci:test": "pnpm --filter tests run test:all" diff --git a/packages/image/CHANGELOG.md b/packages/image/CHANGELOG.md deleted file mode 100644 index 0897d4389..000000000 --- a/packages/image/CHANGELOG.md +++ /dev/null @@ -1,7 +0,0 @@ -# @solidjs/image - -## 0.1.0-rc.0 - -### Minor Changes - -- 6baaf72: Release initial version diff --git a/packages/image/README.md b/packages/image/README.md deleted file mode 100644 index 600397995..000000000 --- a/packages/image/README.md +++ /dev/null @@ -1,185 +0,0 @@ -# `@solidjs/image` - -## Install - -```bash -npm i @solidjs/image -``` - -```bash -pnpm add @solidjs/image -``` - -## Setup - -### Vite - -```ts -import { imagePlugin } from '@solidjs/image/vite'; - -export default defineConfig({ - plugins: { - imagePlugin({ - /** - * Used to process local image imports - * - * example: - * import myImage from './path/to/my-image.jpg?image'; - */ - local: { - /** - * Image formats that can be processed - */ - input: ['jpeg', 'png'], - /** - * Image format for the output images. - * - * Take note that each input image will - * produce a new image for each format - */ - output: ['jpeg', 'png'], - /** - * Sizes of the output images, based on width - * while retaining the aspect ratio. - * - * This option also produces an image for - * each width and for each output format. - */ - sizes: [480, 600], - /** - * Quality of the processed images - */ - quality: 80, - /** - * Where the processed images as emitted - */ - publicPath: "public", - }, - /** - * Used for remote images - * - * example: - * import myImage from 'image:my-value'; - */ - remote: { - /** - * Transforms the right-hand part of the `image:*` string - */ - transformURL(url) { - return { - /** - * The default image for the given url - */ - src: { - source: `https://picsum.photos/seed/${url}/1200/900.webp`, - width: 1080, - height: 760, - }, - /** - * Variants of the image (format, size) for responsiveness - */ - variants: [ - { - path: `https://picsum.photos/seed/${url}/800/600.jpg`, - width: 800, - type: "image/jpeg", - }, - { - path: `https://picsum.photos/seed/${url}/400/300.jpg`, - width: 400, - type: "image/jpeg", - }, - { - path: `https://picsum.photos/seed/${url}/800/600.png`, - width: 800, - type: "image/png", - }, - { - path: `https://picsum.photos/seed/${url}/400/300.png`, - width: 400, - type: "image/png", - }, - ], - }; - }, - }, - }), - } -}); -``` - -## Usage - -### Local image - -```tsx -import { SolidImage as Image } from "@solidjs/image"; -import { type JSX, onMount, Show } from "solid-js"; - -import exampleImage from "../images/example.jpg?image"; - -interface PlaceholderProps { - show: () => void; -} - -function Placeholder(props: PlaceholderProps): JSX.Element { - onMount(() => { - props.show(); - }); - - return
Loading...
; -} - -export default function App(): JSX.Element { - return ( -
- example ( - - - - )} - /> -
- ); -} -``` - -### Remote image - -```tsx -import { SolidImage as Image } from "@solidjs/image"; -import { type JSX, onMount, Show } from "solid-js"; - -import exampleImage from "image:foobar"; - -interface PlaceholderProps { - show: () => void; -} - -function Placeholder(props: PlaceholderProps): JSX.Element { - onMount(() => { - props.show(); - }); - - return
Loading...
; -} - -export default function App(): JSX.Element { - return ( -
- example ( - - - - )} - /> -
- ); -} -``` diff --git a/packages/image/package.json b/packages/image/package.json deleted file mode 100644 index b0c12226e..000000000 --- a/packages/image/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "@solidjs/image", - "version": "0.1.0-rc.0", - "type": "module", - "repository": { - "type": "git", - "url": "git+https://github.com/solidjs/solid-start.git", - "directory": "packages/image" - }, - "publishConfig": { - "access": "public" - }, - "files": [ - "dist" - ], - "scripts": { - "prepublishOnly": "tsdown", - "build": "tsdown", - "watch": "tsdown --watch", - "test": "vitest" - }, - "devDependencies": { - "@tsdown/css": "^0.22.12", - "@types/node": "^25.5.0", - "solid-js": "^1.9.9", - "tsdown": "^0.22.12", - "vite": "^8.1.5", - "vite-plugin-solid": "^2.11.11", - "vitest": "^4.0.10" - }, - "dependencies": { - "sharp": "^0.35.3" - }, - "peerDependencies": { - "solid-js": "^1.9.9", - "vite": "^8 || ^9" - }, - "exports": { - ".": "./dist/index.jsx", - "./env": "./dist/env.js", - "./vite": "./dist/vite.js", - "./package.json": "./package.json", - "./style.css": "./dist/style.css" - } -} diff --git a/packages/image/src/__tests__/components.test.tsx b/packages/image/src/__tests__/components.test.tsx deleted file mode 100644 index 357191315..000000000 --- a/packages/image/src/__tests__/components.test.tsx +++ /dev/null @@ -1,116 +0,0 @@ -import { createRoot } from "solid-js"; -import { renderToString } from "solid-js/web"; -import { describe, expect, it } from "vitest"; -import { ClientOnly, createClientSignal } from "../core/client-only"; -import { createLazyRender } from "../core/create-lazy-render"; -import { SolidImage } from "../core/index"; - -// --------------------------------------------------------------------------- -// createLazyRender -// --------------------------------------------------------------------------- -describe("createLazyRender", () => { - it("starts with visible = false", () => { - let visible: boolean | undefined; - - createRoot(dispose => { - const laze = createLazyRender(); - visible = laze.visible; - dispose(); - }); - - expect(visible).toBe(false); - }); - - it("exposes a callable ref setter", () => { - createRoot(dispose => { - const laze = createLazyRender(); - expect(typeof laze.ref).toBe("function"); - dispose(); - }); - }); - - it("returns correct shape with refresh option", () => { - createRoot(dispose => { - const laze = createLazyRender({ refresh: true }); - expect(typeof laze.ref).toBe("function"); - expect(laze.visible).toBe(false); - dispose(); - }); - }); -}); - -// --------------------------------------------------------------------------- -// createClientSignal (server context -- isServer is true in Node) -// --------------------------------------------------------------------------- -describe("createClientSignal", () => { - it("returns a function that resolves to false on the server", () => { - const signal = createClientSignal(); - expect(typeof signal).toBe("function"); - expect(signal()).toBe(false); - }); -}); - -// --------------------------------------------------------------------------- -// ClientOnly (server context) -// --------------------------------------------------------------------------- -describe("ClientOnly", () => { - it("renders the fallback in a server environment", () => { - const html = renderToString(() => ( - loading}> - client content - - )); - - expect(html).toContain("loading"); - expect(html).not.toContain("client content"); - }); - - it("renders the fallback element when no children are given", () => { - const html = renderToString(() => placeholder} />); - - expect(html).toContain("placeholder"); - }); -}); - -// --------------------------------------------------------------------------- -// SolidImage SSR regression -// --------------------------------------------------------------------------- -describe("SolidImage SSR", () => { - it("does not throw ReferenceError: document is not defined", () => { - expect(() => { - renderToString(() => ( -
loading
} - /> - )); - }).not.toThrow(); - }); - - it("produces HTML containing the image container", () => { - const html = renderToString(() => ( -
loading
} - /> - )); - - expect(html).toContain("data-start-image"); - expect(html).toContain("test.jpg"); - }); - - it("renders without a transformer (default fallback path)", () => { - const html = renderToString(() => ( - placeholder} - /> - )); - - expect(html).toContain("hero.png"); - expect(html).toContain('alt="hero image"'); - }); -}); diff --git a/packages/image/src/__tests__/transformer.test.ts b/packages/image/src/__tests__/transformer.test.ts deleted file mode 100644 index 9c7ca99c7..000000000 --- a/packages/image/src/__tests__/transformer.test.ts +++ /dev/null @@ -1,174 +0,0 @@ -import { describe, expect, it } from "vitest"; -import { - createImageVariants, - mergeImageVariantsByType, - mergeImageVariantsToSrcSet, -} from "../core/transformer"; -import type { SolidImageSource, SolidImageTransformer, SolidImageVariant } from "../core/types"; - -describe("createImageVariants", () => { - it("returns an array with 1 item when transformer returns a single variant", () => { - const source: SolidImageSource<{}> = { - source: "/img/photo.jpg", - width: 800, - height: 600, - options: {}, - }; - - const transformer: SolidImageTransformer<{}> = { - transform: () => ({ - path: "/img/photo-800.webp", - width: 800, - type: "image/webp", - }), - }; - - const result = createImageVariants(source, transformer); - - expect(result).toHaveLength(1); - expect(result[0]).toEqual({ - path: "/img/photo-800.webp", - width: 800, - type: "image/webp", - }); - }); - - it("returns an array with 3 items when transformer returns 3 variants", () => { - const source: SolidImageSource<{}> = { - source: "/img/hero.png", - width: 1200, - height: 800, - options: {}, - }; - - const variants: SolidImageVariant[] = [ - { path: "/img/hero-400.avif", width: 400, type: "image/avif" }, - { path: "/img/hero-800.avif", width: 800, type: "image/avif" }, - { path: "/img/hero-1200.avif", width: 1200, type: "image/avif" }, - ]; - - const transformer: SolidImageTransformer<{}> = { - transform: () => variants, - }; - - const result = createImageVariants(source, transformer); - - expect(result).toHaveLength(3); - expect(result[0]).toEqual({ - path: "/img/hero-400.avif", - width: 400, - type: "image/avif", - }); - expect(result[1]).toEqual({ - path: "/img/hero-800.avif", - width: 800, - type: "image/avif", - }); - expect(result[2]).toEqual({ - path: "/img/hero-1200.avif", - width: 1200, - type: "image/avif", - }); - }); - - it("passes the source to the transformer", () => { - const source: SolidImageSource<{ quality: number }> = { - source: "/img/test.jpg", - width: 500, - height: 300, - options: { quality: 80 }, - }; - - let receivedSource: SolidImageSource<{ quality: number }> | undefined; - - const transformer: SolidImageTransformer<{ quality: number }> = { - transform: src => { - receivedSource = src; - return { path: "/img/test-500.webp", width: 500, type: "image/webp" }; - }, - }; - - createImageVariants(source, transformer); - - expect(receivedSource).toBe(source); - }); -}); - -describe("mergeImageVariantsByType", () => { - it("groups variants by their MIME type", () => { - const variants: SolidImageVariant[] = [ - { path: "/img/a-400.webp", width: 400, type: "image/webp" }, - { path: "/img/a-800.webp", width: 800, type: "image/webp" }, - { path: "/img/a-400.avif", width: 400, type: "image/avif" }, - { path: "/img/a-800.avif", width: 800, type: "image/avif" }, - ]; - - const result = mergeImageVariantsByType(variants); - - expect(result.size).toBe(2); - - const webpGroup = result.get("image/webp")!; - expect(webpGroup).toHaveLength(2); - expect(webpGroup[0]).toEqual({ - path: "/img/a-400.webp", - width: 400, - type: "image/webp", - }); - expect(webpGroup[1]).toEqual({ - path: "/img/a-800.webp", - width: 800, - type: "image/webp", - }); - - const avifGroup = result.get("image/avif")!; - expect(avifGroup).toHaveLength(2); - expect(avifGroup[0]).toEqual({ - path: "/img/a-400.avif", - width: 400, - type: "image/avif", - }); - expect(avifGroup[1]).toEqual({ - path: "/img/a-800.avif", - width: 800, - type: "image/avif", - }); - }); - - it("returns a Map with 1 entry when all variants share the same type", () => { - const variants: SolidImageVariant[] = [ - { path: "/img/x-100.png", width: 100, type: "image/png" }, - { path: "/img/x-200.png", width: 200, type: "image/png" }, - ]; - - const result = mergeImageVariantsByType(variants); - - expect(result.size).toBe(1); - expect(result.get("image/png")).toHaveLength(2); - }); -}); - -describe("mergeImageVariantsToSrcSet", () => { - it("formats a single variant into a srcset string", () => { - const variants: SolidImageVariant[] = [ - { path: "/img/photo-100.webp", width: 100, type: "image/webp" }, - ]; - - const result = mergeImageVariantsToSrcSet(variants); - - expect(result).toBe("/img/photo-100.webp 100w"); - }); - - it("formats multiple variants into a comma-separated srcset string", () => { - const variants: SolidImageVariant[] = [ - { path: "/img/photo-100.webp", width: 100, type: "image/webp" }, - { path: "/img/photo-200.webp", width: 200, type: "image/webp" }, - { path: "/img/photo-400.webp", width: 400, type: "image/webp" }, - ]; - - const result = mergeImageVariantsToSrcSet(variants); - - expect(result).toBe( - "/img/photo-100.webp 100w,/img/photo-200.webp 200w,/img/photo-400.webp 400w", - ); - }); -}); diff --git a/packages/image/src/core/aspect-ratio.ts b/packages/image/src/core/aspect-ratio.ts deleted file mode 100644 index 962464188..000000000 --- a/packages/image/src/core/aspect-ratio.ts +++ /dev/null @@ -1,86 +0,0 @@ -function gcd(a: number, b: number): number { - if (b === 0) { - return a; - } - return gcd(b, a % b); -} - -export interface AspectRatio { - width: number; - height: number; -} - -const HORIZONTAL_ASPECT_RATIO = [ - { width: 4, height: 4 }, // Square - { width: 4, height: 3 }, // Standard Fullscreen - { width: 16, height: 10 }, // Standard LCD - { width: 16, height: 9 }, // HD - // { width: 37, height: 20 }, // Widescreen - { width: 6, height: 3 }, // Univisium - { width: 21, height: 9 }, // Anamorphic 2.35:1 - // { width: 64, height: 27 }, // Anamorphic 2.39:1 or 2.37:1 - { width: 19, height: 16 }, // Movietone - { width: 5, height: 4 }, // 17' LCD CRT - // { width: 48, height: 35 }, // 16mm and 35mm - { width: 11, height: 8 }, // 35mm full sound - // { width: 143, height: 100 }, // IMAX - { width: 6, height: 4 }, // 35mm photo - { width: 14, height: 9 }, // commercials - { width: 5, height: 3 }, // Paramount - { width: 7, height: 4 }, // early 35mm - { width: 11, height: 5 }, // 70mm - { width: 12, height: 5 }, // Bluray - { width: 8, height: 3 }, // Super 16 - { width: 18, height: 5 }, // IMAX - { width: 12, height: 3 }, // Polyvision -]; - -const VERTICAL_ASPECT_RATIO = HORIZONTAL_ASPECT_RATIO.map(item => ({ - width: item.height, - height: item.width, -})); - -const ASPECT_RATIO = [...HORIZONTAL_ASPECT_RATIO, ...VERTICAL_ASPECT_RATIO]; - -export function getAspectRatio({ width, height }: AspectRatio): AspectRatio { - const denom = gcd(width, height); - - return { - width: width / denom, - height: height / denom, - }; -} - -export function getNearestAspectRatio(ratio: AspectRatio): AspectRatio { - let nearest = Number.MAX_VALUE; - let id = 0; - - const originalRatio = ratio.width / ratio.height; - - for (let i = 0; i < ASPECT_RATIO.length; i += 1) { - const target = ASPECT_RATIO[i]!; - - const tRatio = target.width / target.height; - const squared = tRatio - originalRatio; - const distance = Math.sqrt(squared * squared); - - if (i === 0) { - nearest = distance; - } else if (distance < nearest) { - id = i; - nearest = distance; - } - } - - return ASPECT_RATIO[id]!; -} - -export function getScaledComponentRatio(ratio: AspectRatio): AspectRatio { - const xScale = 9 / ratio.width; - const yScale = 9 / ratio.height; - const scale = Math.min(xScale, yScale); - return { - width: scale * ratio.width, - height: scale * ratio.height, - }; -} diff --git a/packages/image/src/core/client-only.tsx b/packages/image/src/core/client-only.tsx deleted file mode 100644 index 4df147fd9..000000000 --- a/packages/image/src/core/client-only.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import type { JSX } from "solid-js"; -import { createSignal, onMount, Show } from "solid-js"; -import { isServer } from "solid-js/web"; - -export const createClientSignal = isServer - ? (): (() => boolean) => () => false - : (): (() => boolean) => { - const [flag, setFlag] = createSignal(false); - - onMount(() => { - setFlag(true); - }); - - return flag; - }; - -export interface ClientOnlyProps { - fallback?: JSX.Element; - children?: JSX.Element; -} - -export const ClientOnly = (props: ClientOnlyProps): JSX.Element => { - const isClient = createClientSignal(); - - return Show({ - keyed: false, - get when() { - return isClient(); - }, - get fallback() { - return props.fallback; - }, - get children() { - return props.children; - }, - }); -}; diff --git a/packages/image/src/core/create-lazy-render.ts b/packages/image/src/core/create-lazy-render.ts deleted file mode 100644 index d5b32d370..000000000 --- a/packages/image/src/core/create-lazy-render.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { createEffect, createSignal, onCleanup } from "solid-js"; - -export interface LazyRender { - ref: (value: T) => void; - visible: boolean; -} - -export interface LazyRenderOptions { - refresh?: boolean; -} - -export function createLazyRender( - options?: LazyRenderOptions, -): LazyRender { - const [visible, setVisible] = createSignal(false); - - // We use a reactive ref here so that the component - // re-renders if the host element changes, therefore - // re-evaluating our intersection logic - const [ref, setRef] = createSignal(null); - - createEffect(() => { - // If the host changed, make sure that - // visibility is set to false - setVisible(false); - const shouldRefresh = options?.refresh; - - const current = ref(); - if (!current) { - return; - } - const observer = new IntersectionObserver(entries => { - for (const entry of entries) { - if (shouldRefresh) { - setVisible(entry.isIntersecting); - } else if (entry.isIntersecting) { - // Host intersected, set visibility to true - setVisible(true); - - // Stop observing - observer.disconnect(); - } - } - }); - - observer.observe(current); - - onCleanup(() => { - observer.unobserve(current); - observer.disconnect(); - }); - }); - - return { - ref(value) { - return setRef(() => value); - }, - get visible() { - return visible(); - }, - }; -} diff --git a/packages/image/src/core/index.tsx b/packages/image/src/core/index.tsx deleted file mode 100644 index ee3ce1102..000000000 --- a/packages/image/src/core/index.tsx +++ /dev/null @@ -1,120 +0,0 @@ -import type { JSX } from "solid-js"; -import { createMemo, createSignal, For, Show } from "solid-js"; -import { ClientOnly } from "./client-only.tsx"; -import { createLazyRender } from "./create-lazy-render.ts"; -import { - createImageVariants, - mergeImageVariantsByType, - mergeImageVariantsToSrcSet, -} from "./transformer.ts"; -import type { SolidImageSource, SolidImageTransformer, SolidImageVariant } from "./types.ts"; -import { getAspectRatioBoxStyle } from "./utils.ts"; - -import "./styles.css"; - -export interface SolidImageProps { - src: SolidImageSource; - alt: string; - transformer?: SolidImageTransformer; - - onLoad?: () => void; - fallback: (visible: () => boolean, onLoad: () => void) => JSX.Element; - - crossOrigin?: JSX.HTMLCrossorigin | undefined; - fetchPriority?: "high" | "low" | "auto" | undefined; - decoding?: "sync" | "async" | "auto" | undefined; -} - -interface SolidImageSourcesProps extends SolidImageProps { - variants: SolidImageVariant[]; -} - -function SolidImageSources(props: SolidImageSourcesProps): JSX.Element { - const mergedVariants = createMemo(() => { - const types = mergeImageVariantsByType(props.variants); - - const values: [type: string, srcset: string][] = []; - - for (const [key, variants] of types) { - values.push([key, mergeImageVariantsToSrcSet(variants)]); - } - - return values; - }); - - return ( - {([type, srcset]) => } - ); -} - -export function SolidImage(props: SolidImageProps): JSX.Element { - const [showPlaceholder, setShowPlaceholder] = createSignal(true); - const laze = createLazyRender(); - const [defer, setDefer] = createSignal(true); - - function onPlaceholderLoad() { - setDefer(false); - } - - const width = createMemo(() => props.src.width); - const height = createMemo(() => props.src.height); - - return ( -
-
- - }> - {cb => } - - - } - > - - {props.alt} { - if (!defer()) { - setShowPlaceholder(false); - props.onLoad?.(); - } - }} - style={{ - opacity: showPlaceholder() ? 0 : 1, - }} - crossOrigin={props.crossOrigin} - fetchpriority={props.fetchPriority} - decoding={props.decoding} - /> - - - -
-
- - {props.fallback(showPlaceholder, onPlaceholderLoad)} - -
-
- ); -} - -export * from "./types"; diff --git a/packages/image/src/core/styles.css b/packages/image/src/core/styles.css deleted file mode 100644 index a484a6c03..000000000 --- a/packages/image/src/core/styles.css +++ /dev/null @@ -1,24 +0,0 @@ -[data-solid-image="blocker"], -[data-solid-image="image"], -[data-solid-image="picture"] { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; -} - -[data-solid-image="image"], -[data-solid-image="picture"] { - width: 100%; - height: 100%; - object-fit: contain; - pointer-events: none; - user-select: none; -} - -[data-solid-image="container"] { - width: 100%; - height: 100%; - position: relative; -} \ No newline at end of file diff --git a/packages/image/src/core/transformer.ts b/packages/image/src/core/transformer.ts deleted file mode 100644 index c377997a7..000000000 --- a/packages/image/src/core/transformer.ts +++ /dev/null @@ -1,117 +0,0 @@ -import type { - SolidImageFile, - SolidImageFormat, - SolidImageMIME, - SolidImageSource, - SolidImageTransformer, - SolidImageVariant, -} from "./types"; - -const MIME_TO_FORMAT: Record = { - "image/avif": "avif", - "image/jpeg": "jpeg", - "image/png": "png", - "image/webp": "webp", - "image/tiff": "tiff", -}; - -export function getFormatFromMIME(mime: SolidImageMIME): SolidImageFormat { - return MIME_TO_FORMAT[mime]; -} - -const FORMAT_TO_MIME: Record = { - avif: "image/avif", - jpeg: "image/jpeg", - png: "image/png", - webp: "image/webp", - tiff: "image/tiff", -}; - -export function getMIMEFromFormat(format: SolidImageFormat): SolidImageMIME { - return FORMAT_TO_MIME[format]; -} - -const FILE_TO_FORMAT: Record = { - avif: "avif", - jfif: "jpeg", - jpeg: "jpeg", - jpg: "jpeg", - pjp: "jpeg", - pjpeg: "jpeg", - png: "png", - webp: "webp", - tif: "tiff", - tiff: "tiff", -}; - -export function getFormatFromFile(file: SolidImageFile): SolidImageFormat { - return FILE_TO_FORMAT[file]; -} - -const FORMAT_TO_FILES: Record = { - avif: ["avif"], - jpeg: ["jfif", "jpeg", "jpg", "pjp", "pjpeg"], - png: ["png"], - webp: ["webp"], - tiff: ["tif", "tiff"], -}; - -export function getFilesFromFormat(format: SolidImageFormat): SolidImageFile[] { - return FORMAT_TO_FILES[format]; -} - -const FORMAT_TO_OUTPUT: Record = { - avif: "avif", - jpeg: "jpg", - png: "png", - webp: "webp", - tiff: "tiff", -}; - -export function getOutputFileFromFormat(format: SolidImageFormat): SolidImageFile { - return FORMAT_TO_OUTPUT[format]; -} - -function ensureArray(value: T | T[]): T[] { - if (Array.isArray(value)) { - return value; - } - return [value]; -} - -export function createImageVariants( - source: SolidImageSource, - transformer: SolidImageTransformer, -): SolidImageVariant[] { - return ensureArray(transformer.transform(source)); -} - -function variantToSrcSetPart(variant: SolidImageVariant): string { - return variant.path + " " + variant.width + "w"; -} - -export function mergeImageVariantsToSrcSet(variants: SolidImageVariant[]): string { - let result = variantToSrcSetPart(variants[0]!); - - for (let i = 1, len = variants.length; i < len; i++) { - result += "," + variantToSrcSetPart(variants[i]!); - } - - return result; -} - -export function mergeImageVariantsByType( - variants: SolidImageVariant[], -): Map { - const map = new Map(); - - for (let i = 0, len = variants.length; i < len; i++) { - const current = variants[i]!; - - const arr = map.get(current.type) || []; - arr.push(current); - map.set(current.type, arr); - } - - return map; -} diff --git a/packages/image/src/core/types.ts b/packages/image/src/core/types.ts deleted file mode 100644 index c891710bc..000000000 --- a/packages/image/src/core/types.ts +++ /dev/null @@ -1,53 +0,0 @@ -/** - * List of supported image types - * - * Based on https://developer.mozilla.org/en-US/docs/Web/Media/Guides/Formats/Image_types - */ -export type SolidImageMIME = - | "image/avif" - | "image/jpeg" - | "image/png" - | "image/webp" - | "image/tiff"; - -export type SolidImagePNG = "png"; -export type SolidImageAVIF = "avif"; -export type SolidImageJPEG = "jpg" | "jpeg" | "jfif" | "pjpeg" | "pjp"; -export type SolidImageWebP = "webp"; -export type SolidImageTIFF = "tiff" | "tif"; - -export type SolidImageFile = - | SolidImageAVIF - | SolidImageJPEG - | SolidImagePNG - | SolidImageWebP - | SolidImageTIFF; - -export type SolidImageFormat = "avif" | "jpeg" | "png" | "webp" | "tiff"; - -/** - * A variant of an image source. This is used to transform a given source string - * into a element - */ -export interface SolidImageVariant { - path: string; - width: number; - type: SolidImageMIME; -} - -/** - * An image source - */ -export interface SolidImageSource { - source: string; - width: number; - height: number; - options: T; -} - -/** - * Transforms an image source into a set of image variants - */ -export interface SolidImageTransformer { - transform: (source: SolidImageSource) => SolidImageVariant | SolidImageVariant[]; -} diff --git a/packages/image/src/core/utils.ts b/packages/image/src/core/utils.ts deleted file mode 100644 index 4b2291eb6..000000000 --- a/packages/image/src/core/utils.ts +++ /dev/null @@ -1,48 +0,0 @@ -import type { JSX } from "solid-js"; -import type { AspectRatio } from "./aspect-ratio"; - -function kebabify(str: string): string { - return str - .replace(/([A-Z])([A-Z])/g, "$1-$2") - .replace(/([a-z])([A-Z])/g, "$1-$2") - .replace(/[\s_]+/g, "-") - .toLowerCase(); -} - -export function shimStyle(style: JSX.CSSProperties): JSX.CSSProperties { - const keys = Object.keys(style) as (keyof JSX.CSSProperties)[]; - const newStyle: JSX.CSSProperties = {}; - - for (let i = 0, len = keys.length; i < len; i += 1) { - const key = kebabify(keys[i]!); - newStyle[key as any] = style[keys[i]!]; - } - return newStyle; -} - -export function getAspectRatioBoxStyle(ratio: AspectRatio): JSX.CSSProperties { - return { - position: "relative", - "padding-top": `${(ratio.height * 100) / ratio.width}%`, - width: "100%", - height: "0", - overflow: "hidden", - }; -} - -export function getEmptySVGPlaceholder({ width, height }: AspectRatio): string { - return ``; -} - -export function getEncodedSVG(svg: string): string { - const encodedSVG = encodeURIComponent(svg); - return `data:image/svg+xml,${encodedSVG}`; -} - -export function getEncodedOptionalSVG(ratio: AspectRatio, svg?: string): string { - return getEncodedSVG(svg || getEmptySVGPlaceholder(ratio)); -} - -export function getEmptyImageURL(ratio: AspectRatio): string { - return getEncodedOptionalSVG(ratio); -} diff --git a/packages/image/src/env.d.ts b/packages/image/src/env.d.ts deleted file mode 100644 index e09546c3b..000000000 --- a/packages/image/src/env.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -declare module "image:*" { - import type { SolidImageProps } from "./core/index.ts"; - - const props: Pick, "src" | "transformer">; - - export default props; -} - -declare module "*?image" { - import type { SolidImageProps } from "./core/index.ts"; - - const props: Pick, "src" | "transformer">; - - export default props; -} diff --git a/packages/image/src/vite/fs.ts b/packages/image/src/vite/fs.ts deleted file mode 100644 index 46eefaeaa..000000000 --- a/packages/image/src/vite/fs.ts +++ /dev/null @@ -1,72 +0,0 @@ -import type { Abortable } from "node:events"; -import type { Mode, ObjectEncodingOptions, OpenMode } from "node:fs"; -import fs from "node:fs/promises"; -import path from "node:path"; -import type { Stream } from "node:stream"; - -export async function removeFile(filePath: string): Promise { - return await fs.rm(filePath, { recursive: true, force: true }); -} - -export async function fileExists(p: string): Promise { - try { - const stat = await fs.stat(p); - - return stat.isFile(); - } catch { - return false; - } -} - -const PATH_FILTER = /[<>:"|?*]/; - -export function checkPath(pth: string) { - if (process.platform === "win32") { - const pathHasInvalidWinCharacters = PATH_FILTER.test(pth.replace(path.parse(pth).root, "")); - - if (pathHasInvalidWinCharacters) { - const error = new Error(`Path contains invalid characters: ${pth}`); - throw error; - } - } -} - -export async function makeDir(dir: string, mode = 0o777) { - checkPath(dir); - return await fs.mkdir(dir, { - mode, - recursive: true, - }); -} - -export async function pathExists(filePath: string) { - try { - await fs.access(filePath); - return true; - } catch { - return false; - } -} - -export async function outputFile( - file: string, - data: - | string - | NodeJS.ArrayBufferView - | Iterable - | AsyncIterable - | Stream, - encoding?: - | (ObjectEncodingOptions & { - mode?: Mode | undefined; - flag?: OpenMode | undefined; - } & Abortable) - | BufferEncoding - | null, -) { - const dir = path.dirname(file); - if (!(await pathExists(dir))) { - await makeDir(dir); - } - return fs.writeFile(file, data, encoding); -} diff --git a/packages/image/src/vite/index.ts b/packages/image/src/vite/index.ts deleted file mode 100644 index 02f66e670..000000000 --- a/packages/image/src/vite/index.ts +++ /dev/null @@ -1,205 +0,0 @@ -import path from "node:path"; -import type { Plugin } from "vite"; -import { getFilesFromFormat, getMIMEFromFormat, getOutputFileFromFormat } from "../core/transformer.ts"; -import type { SolidImageFile, SolidImageFormat, SolidImageVariant } from "../core/types.ts"; -import { outputFile } from "./fs.ts"; -import { getImageData, transformImage } from "./transformers.ts"; -import xxHash32 from "./xxhash32.ts"; - -const DEFAULT_INPUT: SolidImageFormat[] = ["png", "jpeg", "webp"]; -const DEFAULT_OUTPUT: SolidImageFormat[] = ["png", "jpeg", "webp"]; -const DEFAULT_QUALITY = 0.8; - -type MaybePromise = T | Promise; - -export interface SolidImageOptions { - local?: { - sizes: number[]; - input?: SolidImageFormat[]; - output?: SolidImageFormat[]; - quality: number; - publicPath?: string; - }; - remote?: { - transformURL(url: string): MaybePromise<{ - src: { - source: string; - width: number; - height: number; - }; - variants: SolidImageVariant | SolidImageVariant[]; - }>; - }; -} - -function getValidFileExtensions(formats: SolidImageFormat[]): Set { - const result = new Set(); - for (const format of formats) { - for (const file of getFilesFromFormat(format)) { - result.add(file); - } - } - return result; -} - -function isValidFileExtension(extensions: Set, target: string): target is SolidImageFile { - return extensions.has(target); -} - -async function getImageSource(imagePath: string, relativePath: string): Promise { - // TODO add format variation - const imageData = await getImageData(imagePath); - return ` -import source from ${JSON.stringify(relativePath)}; -export default { - width: ${JSON.stringify(imageData.width)}, - height: ${JSON.stringify(imageData.height)}, - source, -}; -`; -} - -function getImageTransformer(imagePath: string, outputTypes: string[], sizes: number[]): string { - let imported = ""; - let exported = ""; - - for (const format of outputTypes) { - for (const size of sizes) { - const variantName = "variant_" + format + "_" + size; - const importPath = JSON.stringify(imagePath + "?image-" + format + "-" + size); - imported += "import " + variantName + " from " + importPath + ";\n"; - exported += variantName + ","; - } - } - - return ( - imported + - "const variants = [" + - exported + - "];\n" + - "export default { transform() { return variants; }};" - ); -} - -function getImageVariant(imagePath: string, target: SolidImageFormat, size: number): string { - return `import source from ${JSON.stringify(imagePath + "?image-raw-" + target + "-" + size)}; -export default { - width: ${size}, - type: '${getMIMEFromFormat(target)}', - path: source, -};`; -} - -function getImageEntryPoint(imagePath: string): string { - return `import src from ${JSON.stringify(imagePath + "?image-source")}; -import transformer from ${JSON.stringify(imagePath + "?image-transformer")}; - -export default { src, transformer }; -`; -} - -const LOCAL_PATH = /\?image(-[a-z]+(-[0-9]+)?)?/; -const REMOTE_PATH = "image:"; - -export const imagePlugin = (options: SolidImageOptions) => { - const plugins: Plugin[] = []; - if (options.remote) { - const transformUrl = options.remote.transformURL; - plugins.push({ - name: "solid-start:image/remote", - enforce: "pre", - resolveId(id) { - if (id.startsWith(REMOTE_PATH)) { - return id; - } - return null; - }, - async load(id) { - if (id.startsWith(REMOTE_PATH)) { - const param = id.substring(REMOTE_PATH.length); - - const result = await transformUrl(param); - - return `const VARIANTS = ${JSON.stringify(result.variants)}; -export default { - src: ${JSON.stringify(result.src)}, - transformer: { - transform() { - return VARIANTS; - }, - }, -};`; - } - return null; - }, - }); - } - if (options.local) { - const inputFormat = options.local.input ?? DEFAULT_INPUT; - const outputFormat = options.local.output ?? DEFAULT_OUTPUT; - const quality = options.local.quality ?? DEFAULT_QUALITY; - const sizes = options.local.sizes; - const publicPath = options.local.publicPath ?? "dist"; - - const validInputFileExtensions = getValidFileExtensions(inputFormat); - - plugins.push({ - name: "solid-start:image/local", - enforce: "pre", - resolveId(id, importer) { - if (LOCAL_PATH.test(id) && importer) { - return path.join(path.dirname(importer), id); - } - return null; - }, - async load(id) { - if (id.startsWith("\0")) { - return null; - } - const { dir, name, ext } = path.parse(id); - const [actualExtension, condition] = ext.substring(1).split("?"); - // Check if extension is valid - if (!isValidFileExtension(validInputFileExtensions, actualExtension!)) { - return null; - } - if (!condition) { - return null; - } - const originalPath = `${dir}/${name}.${actualExtension}`; - const relativePath = `./${name}.${actualExtension}`; - // Get the true source - if (condition.startsWith("image-source")) { - return await getImageSource(originalPath, relativePath); - } - // Get the transformer file - if (condition.startsWith("image-transformer")) { - return getImageTransformer(relativePath, outputFormat, sizes); - } - // Image transformer variant - if (condition.startsWith("image-raw")) { - const [, , format, size] = condition.split("-"); - const hash = xxHash32(originalPath).toString(16); - const filename = `i-${hash}-${size}.${getOutputFileFromFormat(format as SolidImageFormat)}`; - const image = transformImage(originalPath, format as SolidImageFormat, +size!, quality); - const buffer = await image.toBuffer(); - const basePath = path.join(".image", filename); - const targetPath = path.join(publicPath, basePath); - await outputFile(targetPath, buffer); - return `export default "/${basePath}"`; - } - // Image transformer variant - if (condition.startsWith("image-")) { - const [, format, size] = condition.split("-"); - - return getImageVariant(relativePath, format as SolidImageFormat, +size!); - } - if (condition.startsWith("image")) { - return getImageEntryPoint(relativePath); - } - return null; - }, - }); - } - - return plugins; -}; diff --git a/packages/image/src/vite/transformers.ts b/packages/image/src/vite/transformers.ts deleted file mode 100644 index 762d59ce4..000000000 --- a/packages/image/src/vite/transformers.ts +++ /dev/null @@ -1,46 +0,0 @@ -import sharp from "sharp"; -import type { SolidImageFormat } from "../core/types.ts"; - -export function transformImage( - originalPath: string, - targetFormat: SolidImageFormat, - size: number, - quality: number, -) { - const input = sharp(originalPath); - switch (targetFormat) { - case "avif": - return input.resize(size).avif({ - quality, - }); - case "jpeg": - return input.resize(size).jpeg({ - quality, - }); - case "png": - return input.resize(size).png({ - quality, - }); - case "webp": - return input.resize(size).webp({ - quality, - }); - case "tiff": - return input.resize(size).tiff({ - quality, - }); - } -} - -interface ImageData { - width: number; - height: number; -} - -export async function getImageData(originalPath: string): Promise { - const result = await sharp(originalPath).metadata(); - return { - width: result.width || 0, - height: result.height || 0, - }; -} diff --git a/packages/image/src/vite/xxhash32.ts b/packages/image/src/vite/xxhash32.ts deleted file mode 100644 index 0cae220f3..000000000 --- a/packages/image/src/vite/xxhash32.ts +++ /dev/null @@ -1,202 +0,0 @@ -// @ts-nocheck -/** - * Copyright (c) 2019 Jason Dent - * https://github.com/Jason3S/xxhash - */ -const PRIME32_1 = 2654435761; -const PRIME32_2 = 2246822519; -const PRIME32_3 = 3266489917; -const PRIME32_4 = 668265263; -const PRIME32_5 = 374761393; - -function toUtf8(text: string): Uint8Array { - const bytes: number[] = []; - for (let i = 0, n = text.length; i < n; ++i) { - const c = text.charCodeAt(i); - if (c < 0x80) { - bytes.push(c); - } else if (c < 0x800) { - bytes.push(0xc0 | (c >> 6), 0x80 | (c & 0x3f)); - } else if (c < 0xd800 || c >= 0xe000) { - bytes.push(0xe0 | (c >> 12), 0x80 | ((c >> 6) & 0x3f), 0x80 | (c & 0x3f)); - } else { - const cp = 0x10000 + (((c & 0x3ff) << 10) | (text.charCodeAt(++i) & 0x3ff)); - bytes.push( - 0xf0 | ((cp >> 18) & 0x7), - 0x80 | ((cp >> 12) & 0x3f), - 0x80 | ((cp >> 6) & 0x3f), - 0x80 | (cp & 0x3f), - ); - } - } - return new Uint8Array(bytes); -} -/** - * - * @param buffer - byte array or string - * @param seed - optional seed (32-bit unsigned); - */ -export default function xxHash32(buffer: Uint8Array | string, seed = 0): number { - buffer = typeof buffer === "string" ? toUtf8(buffer) : buffer; - const b = buffer; - - /* - Step 1. Initialize internal accumulators - Each accumulator gets an initial value based on optional seed input. - Since the seed is optional, it can be 0. - ``` - u32 acc1 = seed + PRIME32_1 + PRIME32_2; - u32 acc2 = seed + PRIME32_2; - u32 acc3 = seed + 0; - u32 acc4 = seed - PRIME32_1; - ``` - Special case : input is less than 16 bytes - When input is too small (< 16 bytes), the algorithm will not process any stripe. - Consequently, it will not make use of parallel accumulators. - In which case, a simplified initialization is performed, using a single accumulator : - u32 acc = seed + PRIME32_5; - The algorithm then proceeds directly to step 4. - */ - - let acc = (seed + PRIME32_5) & 0xffffffff; - let offset = 0; - - if (b.length >= 16) { - const accN = [ - (seed + PRIME32_1 + PRIME32_2) & 0xffffffff, - (seed + PRIME32_2) & 0xffffffff, - (seed + 0) & 0xffffffff, - (seed - PRIME32_1) & 0xffffffff, - ]; - - /* - Step 2. Process stripes - A stripe is a contiguous segment of 16 bytes. It is evenly divided into 4 lanes, - of 4 bytes each. The first lane is used to update accumulator 1, the second lane - is used to update accumulator 2, and so on. Each lane read its associated 32-bit - value using little-endian convention. For each {lane, accumulator}, the update - process is called a round, and applies the following formula : - ``` - accN = accN + (laneN * PRIME32_2); - accN = accN <<< 13; - accN = accN * PRIME32_1; - ``` - This shuffles the bits so that any bit from input lane impacts several bits in - output accumulator. All operations are performed modulo 2^32. - Input is consumed one full stripe at a time. Step 2 is looped as many times as - necessary to consume the whole input, except the last remaining bytes which cannot - form a stripe (< 16 bytes). When that happens, move to step 3. - */ - - const b = buffer; - const limit = b.length - 16; - let lane = 0; - for (offset = 0; (offset & 0xfffffff0) <= limit; offset += 4) { - const i = offset; - const laneN0 = b[i + 0] + (b[i + 1] << 8); - const laneN1 = b[i + 2] + (b[i + 3] << 8); - const laneNP = laneN0 * PRIME32_2 + ((laneN1 * PRIME32_2) << 16); - let acc = (accN[lane] + laneNP) & 0xffffffff; - acc = (acc << 13) | (acc >>> 19); - const acc0 = acc & 0xffff; - const acc1 = acc >>> 16; - accN[lane] = (acc0 * PRIME32_1 + ((acc1 * PRIME32_1) << 16)) & 0xffffffff; - lane = (lane + 1) & 0x3; - } - - /* - Step 3. Accumulator convergence - All 4 lane accumulators from previous steps are merged to produce a - single remaining accumulator - of same width (32-bit). The associated formula is as follows : - ``` - acc = (acc1 <<< 1) + (acc2 <<< 7) + (acc3 <<< 12) + (acc4 <<< 18); - ``` - */ - acc = - (((accN[0] << 1) | (accN[0] >>> 31)) + - ((accN[1] << 7) | (accN[1] >>> 25)) + - ((accN[2] << 12) | (accN[2] >>> 20)) + - ((accN[3] << 18) | (accN[3] >>> 14))) & - 0xffffffff; - } - - /* - Step 4. Add input length - The input total length is presumed known at this stage. - This step is just about adding the length to - accumulator, so that it participates to final mixing. - ``` - acc = acc + (u32)inputLength; - ``` - */ - acc = (acc + buffer.length) & 0xffffffff; - - /* - Step 5. Consume remaining input - There may be up to 15 bytes remaining to consume from the input. - The final stage will digest them according - to following pseudo-code : - ``` - while (remainingLength >= 4) { - lane = read_32bit_little_endian(input_ptr); - acc = acc + lane * PRIME32_3; - acc = (acc <<< 17) * PRIME32_4; - input_ptr += 4; remainingLength -= 4; - } - ``` - This process ensures that all input bytes are present in the final mix. - */ - - const limit = buffer.length - 4; - for (; offset <= limit; offset += 4) { - const i = offset; - const laneN0 = b[i + 0] + (b[i + 1] << 8); - const laneN1 = b[i + 2] + (b[i + 3] << 8); - const laneP = laneN0 * PRIME32_3 + ((laneN1 * PRIME32_3) << 16); - acc = (acc + laneP) & 0xffffffff; - acc = (acc << 17) | (acc >>> 15); - acc = ((acc & 0xffff) * PRIME32_4 + (((acc >>> 16) * PRIME32_4) << 16)) & 0xffffffff; - } - - /* - ``` - while (remainingLength >= 1) { - lane = read_byte(input_ptr); - acc = acc + lane * PRIME32_5; - acc = (acc <<< 11) * PRIME32_1; - input_ptr += 1; remainingLength -= 1; - } - ``` - */ - - for (; offset < b.length; ++offset) { - const lane = b[offset]; - acc += lane * PRIME32_5; - acc = (acc << 11) | (acc >>> 21); - acc = ((acc & 0xffff) * PRIME32_1 + (((acc >>> 16) * PRIME32_1) << 16)) & 0xffffffff; - } - - /* - Step 6. Final mix (avalanche) - The final mix ensures that all input bits have a chance to impact any bit in - the output digest, resulting in an unbiased distribution. This is also called - avalanche effect. - ``` - acc = acc xor (acc >> 15); - acc = acc * PRIME32_2; - acc = acc xor (acc >> 13); - acc = acc * PRIME32_3; - acc = acc xor (acc >> 16); - ``` - */ - - acc ^= acc >>> 15; - acc = (((acc & 0xffff) * PRIME32_2) & 0xffffffff) + (((acc >>> 16) * PRIME32_2) << 16); - acc ^= acc >>> 13; - acc = (((acc & 0xffff) * PRIME32_3) & 0xffffffff) + (((acc >>> 16) * PRIME32_3) << 16); - acc ^= acc >>> 16; - - // turn any negatives back into a positive number; - return acc < 0 ? acc + 4294967296 : acc; -} diff --git a/packages/image/tsconfig.build.json b/packages/image/tsconfig.build.json deleted file mode 100644 index a632032dc..000000000 --- a/packages/image/tsconfig.build.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "module": "ESNext", - "moduleResolution": "bundler", - "strict": true, - "noUncheckedIndexedAccess": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "jsx": "preserve", - "jsxImportSource": "solid-js", - "allowJs": true, - "isolatedModules": true, - "declaration": true, - "skipLibCheck": true, - "types": ["vite/client"], - "allowImportingTsExtensions": true, - "rewriteRelativeImportExtensions": true - }, - "include": ["./src", "./env.d.ts"], - "exclude": ["./dist", "**/*.spec.ts"] -} diff --git a/packages/image/tsconfig.json b/packages/image/tsconfig.json deleted file mode 100644 index d8faaf508..000000000 --- a/packages/image/tsconfig.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "./tsconfig.build.json" -} diff --git a/packages/image/tsconfig.node.json b/packages/image/tsconfig.node.json deleted file mode 100644 index a44d6036c..000000000 --- a/packages/image/tsconfig.node.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "module": "ESNext", - "moduleResolution": "bundler", - "strict": true, - "noUncheckedIndexedAccess": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "jsx": "preserve", - "jsxImportSource": "solid-js", - "allowJs": true, - "isolatedModules": true, - "declaration": true, - "skipLibCheck": true, - "types": ["node", "vite/client"], - "allowImportingTsExtensions": true, - "rewriteRelativeImportExtensions": true - }, - "include": ["./src", "./env.d.ts"], - "exclude": ["./dist", "**/*.spec.ts"] -} diff --git a/packages/image/tsdown.config.ts b/packages/image/tsdown.config.ts deleted file mode 100644 index a68648410..000000000 --- a/packages/image/tsdown.config.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { defineConfig } from "tsdown"; - -export default defineConfig([ - { - entry: "src/core/index.tsx", - format: ["esm"], - dts: true, - tsconfig: "tsconfig.build.json", - clean: true, - platform: "browser", - outExtensions: () => ({ - js: ".jsx", - }), - css: { - minify: true, - }, - exports: true, - }, - { - entry: { - vite: "src/vite/index.ts", - env: "src/env.d.ts", - }, - format: ["esm"], - dts: true, - tsconfig: "tsconfig.node.json", - clean: false, - platform: "node", - outExtensions: () => ({ - js: ".js", - }), - exports: true, - }, -]); diff --git a/packages/image/vitest.config.ts b/packages/image/vitest.config.ts deleted file mode 100644 index 021686dfb..000000000 --- a/packages/image/vitest.config.ts +++ /dev/null @@ -1,27 +0,0 @@ -import solid from "vite-plugin-solid"; -import { defineConfig } from "vitest/config"; - -export default defineConfig({ - plugins: [ - solid({ ssr: true }), - // vite-plugin-solid automatically injects @testing-library/jest-dom into - // setupFiles when it detects the module in pnpm's store. Because the image - // package does not depend on jest-dom, the import fails at runtime. - // Strip the injected entry so vitest never tries to load it. - { - name: "strip-jest-dom-setup", - config(config) { - const files = config.test?.setupFiles; - if (Array.isArray(files)) { - config.test!.setupFiles = files.filter( - f => typeof f !== "string" || !f.includes("jest-dom"), - ); - } - }, - }, - ], - test: { - globals: true, - environment: "node", - }, -}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6c9871a78..5f8caf4dd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -256,9 +256,6 @@ importers: apps/tests: dependencies: - '@solidjs/image': - specifier: workspace:* - version: link:../../packages/image '@solidjs/meta': specifier: ^0.29.4 version: 0.29.4(solid-js@1.9.11) @@ -318,34 +315,6 @@ importers: specifier: ^1.58.2 version: 1.58.2 - packages/image: - dependencies: - sharp: - specifier: ^0.35.3 - version: 0.35.3(@types/node@25.5.0) - devDependencies: - '@tsdown/css': - specifier: ^0.22.12 - version: 0.22.12(jiti@2.7.0)(postcss@8.5.19)(tsdown@0.22.12) - '@types/node': - specifier: ^25.5.0 - version: 25.5.0 - solid-js: - specifier: ^1.9.9 - version: 1.9.11 - tsdown: - specifier: ^0.22.12 - version: 0.22.12(@tsdown/css@0.22.12)(typescript@7.0.2) - vite: - specifier: ^8.1.5 - version: 8.1.5(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0) - vite-plugin-solid: - specifier: ^2.11.11 - version: 2.11.11(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@8.1.5(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0)) - vitest: - specifier: ^4.0.10 - version: 4.1.0(@types/node@25.5.0)(@vitest/browser-playwright@4.1.0)(@vitest/ui@4.1.0)(jsdom@28.1.0)(vite@8.1.5(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0)) - packages/start: dependencies: '@babel/core': @@ -645,15 +614,9 @@ packages: '@emnapi/core@1.11.1': resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} - '@emnapi/core@1.11.2': - resolution: {integrity: sha512-TC8MkTuZUtcTSiFeuC0ksCh9QIJ5+F21MvZ4Wn4ORfYaFJ/0dsiudv5tVkejgwZlwQ39jL9WWDe2lz8x0WglOA==} - '@emnapi/runtime@1.11.1': resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} - '@emnapi/runtime@1.11.2': - resolution: {integrity: sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==} - '@emnapi/wasi-threads@1.2.2': resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} @@ -831,168 +794,6 @@ packages: '@floating-ui/utils@0.2.11': resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} - '@img/colour@1.1.0': - resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} - engines: {node: '>=18'} - - '@img/sharp-darwin-arm64@0.35.3': - resolution: {integrity: sha512-RMnFX7YQsMoh7lWfcM4NEHHymBX/rLuKNPVM84XE9ONPcaSCDgE7CHIHpSgPcO2xcRthgBy1HfNO319mwhIAkg==} - engines: {node: '>=20.9.0'} - cpu: [arm64] - os: [darwin] - - '@img/sharp-darwin-x64@0.35.3': - resolution: {integrity: sha512-Xo+5uFBtLN0BKqieTxiFzFPQAUlBbbH5iBKyRX/z1JrbnYsHTfKJnUfL8+p2TPXr1pXqao4eeL4Rl144uDpK9w==} - engines: {node: '>=20.9.0'} - cpu: [x64] - os: [darwin] - - '@img/sharp-freebsd-wasm32@0.35.3': - resolution: {integrity: sha512-lUxcqWIj2wMQ9BrwNjngcr1gWUr5xgaGThBRqPPalIC2n67Cqj1uPh8NnA/ZhAg8hUbKl+kVHKwgUIwe6ZYPrg==} - engines: {node: '>=20.9.0'} - os: [freebsd] - - '@img/sharp-libvips-darwin-arm64@1.3.2': - resolution: {integrity: sha512-9J6ypZFpQBj4YnePGoq/S38w6nz+vqg5WZLrLGY4YuSemdMq47GMLBPO42MzwdGwpg/agZ7xzZcFHa48xlywfg==} - cpu: [arm64] - os: [darwin] - - '@img/sharp-libvips-darwin-x64@1.3.2': - resolution: {integrity: sha512-m2pW1n6cns9VaubNwsZ+c3CRYjxNQWgJ5gPlnL1nbBcpkBvFm6SCFN5o0psFHI8w9n11NKhFkeEDns98tiqbEw==} - cpu: [x64] - os: [darwin] - - '@img/sharp-libvips-linux-arm64@1.3.2': - resolution: {integrity: sha512-dqVSFynCox4C/J8kT16V7SIFAns0IjgLwkvYT7p8LQVmJ5OS5b6tI9IGflxTeuBS//zXeFIUbwt5dwxyZ17cnA==} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linux-arm@1.3.2': - resolution: {integrity: sha512-1eMLzy92I4J6rmi4mAT8yC3HxOtniyGELlzGbNMLLeqe052ahFQ0h6LFq+lh5DsDIdYViIDst08abvSbcEdLXQ==} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linux-ppc64@1.3.2': - resolution: {integrity: sha512-3z0NHDxD6n5I9gc05U1eW1AyRm+Gznzq3naMrthPNqE6oYykcogW0l/jfpJdjYnuNl8R7yI9pNbE1XiUeyq0Aw==} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linux-riscv64@1.3.2': - resolution: {integrity: sha512-bsb4rI+NldGOsXuej2r8OdSS8+zXDVaCWxyWrcv6kneTOlgAHtZABRzBBCwdsPiD90J4myNJuHpg6kA20ImW/w==} - cpu: [riscv64] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linux-s390x@1.3.2': - resolution: {integrity: sha512-/ABshyj8gCpyIrNXnHn4LorDJ0HHm1VhXPBlxZ8zAtfVPAaSafXPGn+sUSIRiwaSBy0mmFjSjiXI5mkcwdChKQ==} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linux-x64@1.3.2': - resolution: {integrity: sha512-ITPEtgffGJ0S6G9dRyw/366tJQqFRcHWPHhC+Stpg3Z8AEMrDrTr2lhdz4f/Y/HMbRh//7Z5mBzEpVdi62Oc3w==} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linuxmusl-arm64@1.3.2': - resolution: {integrity: sha512-zE9EdiUzUmg5mDT5a1rk5fYJ6GWPloTwWBYDS14naqHsL+EaMpDj1AWnpLgh3u0YCORv2Tt50wrcrpYqkP97Kw==} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@img/sharp-libvips-linuxmusl-x64@1.3.2': - resolution: {integrity: sha512-m0lrLiUt+lBYnCFr8qV/65yMR4E/c7/wf78I5eKTdkEakFAlZ9QlzEM3QIhhAwVeUhLAHLcCq7a7Vszq/oFNZQ==} - cpu: [x64] - os: [linux] - libc: [musl] - - '@img/sharp-linux-arm64@0.35.3': - resolution: {integrity: sha512-QgKDspHPnrU+GQ55XPhGwyhC8acLVOOSyAvo1oVfFmrIXLkDNmGWzAfDZ4xK8oSA1qBQrALcHX0G5UZni/SuFQ==} - engines: {node: '>=20.9.0'} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@img/sharp-linux-arm@0.35.3': - resolution: {integrity: sha512-affVWCTLooy8TSxbDx2qkzuDeaWLNVBA+P//FNBirHsXpP2fuBhk5AuboYUnrDnzoXes8GFjpTx0SBFOCRg+FA==} - engines: {node: '>=20.9.0'} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@img/sharp-linux-ppc64@0.35.3': - resolution: {integrity: sha512-sMd8rDxmpLOwv/7N44klFjOD5DUO7FLdjiXDI0hoxYaf7Ar262dQIEkosE98bps+5HPLtp/EvNqeqQtOycP/IA==} - engines: {node: '>=20.9.0'} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@img/sharp-linux-riscv64@0.35.3': - resolution: {integrity: sha512-0Eob78yjlYPfL5vMNWAW55l3R9Y6BQS/gOfe0ZcP9mEz9ohhKSt4im1hayiknXgf8AWrFqMvJcKIdmLmEe7yeQ==} - engines: {node: '>=20.9.0'} - cpu: [riscv64] - os: [linux] - libc: [glibc] - - '@img/sharp-linux-s390x@0.35.3': - resolution: {integrity: sha512-KgAxQ0DxpNOq1rG2t5cgTgShJFGSuU7XO45cqC+1NVOuZnP6tlgZRuSYOfNupGkHID0o3cJOsw4DVeJpMovcGw==} - engines: {node: '>=20.9.0'} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@img/sharp-linux-x64@0.35.3': - resolution: {integrity: sha512-8pqvxubL2PGdhlPy6GLqzDYMUjyRmKAwKHYKixpdJYBUK7PJ0C029XdsnpFIdgRZG68fZiGdHVWcKPvtiPB4cA==} - engines: {node: '>=20.9.0'} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@img/sharp-linuxmusl-arm64@0.35.3': - resolution: {integrity: sha512-Vz0iQjzzcSX3HCbfwFfCSG/9SCIqyO0mH2sXyiHaAYfBk0cRsCWXRyQYX0ovCK/PAQBbTzQ0dsPQHh5MAFL59w==} - engines: {node: '>=20.9.0'} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@img/sharp-linuxmusl-x64@0.35.3': - resolution: {integrity: sha512-6O1NPKcDVj9QEdg7Hx549EX8U0rp6yXQERqru6yRN7fGBn32UvIRJUlWnk+8xDCiG76hXVBbX82NZ/ZKr0euIg==} - engines: {node: '>=20.9.0'} - cpu: [x64] - os: [linux] - libc: [musl] - - '@img/sharp-wasm32@0.35.3': - resolution: {integrity: sha512-cZ0XkcYGpHZkqW6iCkqTcmUC0CD9DhD5d/qeZlZkfRBn6GnHniZXLUo5+9xw8Iv76YE6LQFN9YNBlKREcCG76w==} - engines: {node: '>=20.9.0'} - - '@img/sharp-webcontainers-wasm32@0.35.3': - resolution: {integrity: sha512-2rnq7bX3NzeR2T4YWgz8qiG4h3TSdMe+vN1iQXpJleSJ3SM5zQ8Fy2SyyXAWlbxpEZ2Y+Z4u1BePgJEYbSy80Q==} - engines: {node: '>=20.9.0'} - cpu: [wasm32] - - '@img/sharp-win32-arm64@0.35.3': - resolution: {integrity: sha512-4bPwFdMbeC4JQ8L8LOyWp6nsHcboP5fxkp6iPOXz2Vg49R42TuMs2whkJ5OAP4/Ul035qOzy0AecOF9VOscn4w==} - engines: {node: '>=20.9.0'} - cpu: [arm64] - os: [win32] - - '@img/sharp-win32-ia32@0.35.3': - resolution: {integrity: sha512-r53mXsBN6lFUDiST764SvgwUdHAqM4rPAiDzAmf4fLoB6X/rkfyTrLCg6+g17wJJiCmB3JYgHuUldCWUIRFSXw==} - engines: {node: ^20.9.0} - cpu: [ia32] - os: [win32] - - '@img/sharp-win32-x64@0.35.3': - resolution: {integrity: sha512-D4y1vNeZrIIJCN+uHaWVtH86B+aCrdMYYjicy9pXHvbGZeGYLLSd3wdVuC37FxVXlU1ARsk84eKWfWMXGYEqvA==} - engines: {node: '>=20.9.0'} - cpu: [x64] - os: [win32] - '@inquirer/external-editor@1.0.3': resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} engines: {node: '>=18'} @@ -1212,9 +1013,6 @@ packages: '@oxc-project/types@0.139.0': resolution: {integrity: sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==} - '@oxc-project/types@0.140.0': - resolution: {integrity: sha512-h5LUOzGArYemnW1NMz/DuuQhBi96J6JL2Bk8zE4kvqxB5Sg3jxmCiH4uyOWHDkiKSt5vWlG4FIwCR/DbstcNRQ==} - '@oxfmt/binding-android-arm-eabi@0.36.0': resolution: {integrity: sha512-Z4yVHJWx/swHHjtr0dXrBZb6LxS+qNz1qdza222mWwPTUK4L790+5i3LTgjx3KYGBzcYpjaiZBw4vOx94dH7MQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1442,69 +1240,36 @@ packages: '@popperjs/core@2.11.8': resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} - '@quansync/fs@1.0.0': - resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==} - '@rolldown/binding-android-arm64@1.1.5': resolution: {integrity: sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-android-arm64@1.2.0': - resolution: {integrity: sha512-9yB1l95IrJuNGDFdOYe79vdApdz6WWBCObE+rQ2LUliYUlcyFwSYIb2xb5/Ifw7dAtMy2ZqNyd8QTSOc7duAKw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [android] - '@rolldown/binding-darwin-arm64@1.1.5': resolution: {integrity: sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-arm64@1.2.0': - resolution: {integrity: sha512-pexNaW9ACLUOaBITOpU6qVu4VrsOFIjTv6bzgu0YUATo4eUJx0V605PxwZfndpPOn0ilqGqvGQ0M8UW0IE24jg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [darwin] - '@rolldown/binding-darwin-x64@1.1.5': resolution: {integrity: sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-darwin-x64@1.2.0': - resolution: {integrity: sha512-NqKYaq0355ZmNMG4QGpxtEDxsc7tGDhjhCm4PpE0cwnBW+5Il95LJyq414niEiaKLVjnVHBEjSo1wngKxJNiFw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [darwin] - '@rolldown/binding-freebsd-x64@1.1.5': resolution: {integrity: sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-freebsd-x64@1.2.0': - resolution: {integrity: sha512-3vPoHzh6eBTz9IbB0/qZdSr0Qeks2echn+I4cHu2joV74VriPDdldswksEDzrl1mBB+oPRi+67+3Ib59paxIPQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.1.5': resolution: {integrity: sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm-gnueabihf@1.2.0': - resolution: {integrity: sha512-E6NNefZ1bUVmKJq2tJkf45J4Zyczj7qm9rUT7NY+Xo2474Y13qWAwc2tvBt0BAVbmtXR1llkxXg0Ou1jbDf2SQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.1.5': resolution: {integrity: sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1512,13 +1277,6 @@ packages: os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-gnu@1.2.0': - resolution: {integrity: sha512-D+TgkdgM1vu+7/Fpf8+v0ARW+RXEP9Ccazgm8zQ4JFFd9Q7SrYQ2TakU5S5ihazQDgpKyAgZDOcIFsvoHmTZ8w==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.1.5': resolution: {integrity: sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1526,13 +1284,6 @@ packages: os: [linux] libc: [musl] - '@rolldown/binding-linux-arm64-musl@1.2.0': - resolution: {integrity: sha512-wUqdwJBbAv0APN87GecstdMUtLjjNTs0hBALpxETD73mccFxdmt/XeizXDtN5RAlBwNKmI+Tg+blect2G+8IeQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.1.5': resolution: {integrity: sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1540,13 +1291,6 @@ packages: os: [linux] libc: [glibc] - '@rolldown/binding-linux-ppc64-gnu@1.2.0': - resolution: {integrity: sha512-9DtF35qR9/NrfhM4oxLplCzVVjE+KKm8Pjemi0i/sdhAWkUasjmSo8WTTubNJClhSHCfyk2yeyoXDQEDPtDAAw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ppc64] - os: [linux] - libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.1.5': resolution: {integrity: sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1554,13 +1298,6 @@ packages: os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.2.0': - resolution: {integrity: sha512-RzuHrBh8X8Hntd2N4VR02QGEciq/9JhcZoTpR/Cee6otRrlILGCf3cg2ygHuih+ZebUnWmMrDX6ITI85btO6rQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [s390x] - os: [linux] - libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.1.5': resolution: {integrity: sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1568,13 +1305,6 @@ packages: os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.2.0': - resolution: {integrity: sha512-MK7L0018jjh1jR3mh21G2j1zAVcpscJBlPo2z19pRjv2XOYGRhaV4LyiD8HO6nCDdZln9IFgCMIV5yt4E3klGQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.1.5': resolution: {integrity: sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1582,59 +1312,29 @@ packages: os: [linux] libc: [musl] - '@rolldown/binding-linux-x64-musl@1.2.0': - resolution: {integrity: sha512-gyrxLQ9NfGb/9LoVnC4kb9miUghw1mghnkfYvNHSnVIXriabnfgGPUP4RLcJm87q3KgYz4FYUG8IDiWUT+CpSw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [musl] - '@rolldown/binding-openharmony-arm64@1.1.5': resolution: {integrity: sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-openharmony-arm64@1.2.0': - resolution: {integrity: sha512-/6VFMQGRmrhP77KXDC+StIxGzcNp5JOIyYtw0CQ8gPlzhpiIRucYfoM5FaFamHd5BJYIdH86yfP46l1p3WdrFA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.1.5': resolution: {integrity: sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@rolldown/binding-wasm32-wasi@1.2.0': - resolution: {integrity: sha512-rwdbUL465kisF24WEJLvP3JrEG6E5GRuIHt5wpMwHGERtHe4Wm2CIvtf5gTBgr2tGOHKh5NdKEAFS2VkOPE91g==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.1.5': resolution: {integrity: sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-arm64-msvc@1.2.0': - resolution: {integrity: sha512-+5suHwRiKGmhwyUaNT8a5QbrBvLFh2DbO910TEmGRH1aSxwrCezodvGQnulv4uiWEIv1Kq4ypRsJ5+O+ry1DiA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [win32] - '@rolldown/binding-win32-x64-msvc@1.1.5': resolution: {integrity: sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.2.0': - resolution: {integrity: sha512-WfFv6/qGufotqBSBzBYwgpCkJBk8Nj7697LL9vTz/XWc67e0r3oewu8iMRwQj3AUL45GVD7wVsPjCsAAtW66Wg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [win32] - '@rolldown/pluginutils@1.0.1': resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} @@ -1858,28 +1558,6 @@ packages: peerDependencies: '@testing-library/dom': '>=7.21.4' - '@tsdown/css@0.22.12': - resolution: {integrity: sha512-y7UMif5Fi96wZ8h9nRUIfxicLdmpIFl89CZNRi3suvyZCfBfPN9zQgUAUjtDK5yYKlGJlJM81LYf/XNLJ0mxWA==} - engines: {node: ^22.18.0 || >=24.11.0} - peerDependencies: - postcss: ^8.4.0 - postcss-import: ^16.0.0 - postcss-modules: ^6.0.0 - sass: '*' - sass-embedded: '*' - tsdown: 0.22.12 - peerDependenciesMeta: - postcss: - optional: true - postcss-import: - optional: true - postcss-modules: - optional: true - sass: - optional: true - sass-embedded: - optional: true - '@tybys/wasm-util@0.10.3': resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} @@ -2100,137 +1778,6 @@ packages: '@vitest/utils@4.1.0': resolution: {integrity: sha512-XfPXT6a8TZY3dcGY8EdwsBulFCIw+BeeX0RZn2x/BtiY/75YGh8FeWGG8QISN/WhaqSrE2OrlDgtF8q5uhOTmw==} - '@yuku-codegen/binding-darwin-arm64@0.6.12': - resolution: {integrity: sha512-C9rpGA8S8MTze6+EeM9wVu63OXyfzvzhVaBW7gvvS+X36uQc3DZ3qAN5kuXkRVaVN+pJqb+maIKEjnJ0k9lwmw==} - cpu: [arm64] - os: [darwin] - - '@yuku-codegen/binding-darwin-x64@0.6.12': - resolution: {integrity: sha512-YV2jLF2hJtkRjw50szArmyl19DI2s50Y0v+UTb6vADaDTts0kCP/ZJ5bvTX8XuX/5RW7kTERZx/PI+w/9lnAKw==} - cpu: [x64] - os: [darwin] - - '@yuku-codegen/binding-freebsd-x64@0.6.12': - resolution: {integrity: sha512-hNAMOQhYuW9f3wIPwP7anyvr+sBBwtEUSTEOD7BYwcuay9f+wjAYM+UBiL2wiJ/4L/0yV0SNc1fF/N+BWEKqKw==} - cpu: [x64] - os: [freebsd] - - '@yuku-codegen/binding-linux-arm-gnu@0.6.12': - resolution: {integrity: sha512-ClOiLpyofntNGZzQ3BxbwkNe92J911t9C2R3s6HwQ2yH0lRLS88DUey7+xQNu4az96T1PEc+pR9ZIP/GzOCHNg==} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@yuku-codegen/binding-linux-arm-musl@0.6.12': - resolution: {integrity: sha512-8LnO3kYIEpm13Gj0RDfM2hciPxagTZWJcB6RM6DZBEF+GJYsmOII90F0UulLzn/l2bLY5oVPMPgF0Rn29fY2jw==} - cpu: [arm] - os: [linux] - libc: [musl] - - '@yuku-codegen/binding-linux-arm64-gnu@0.6.12': - resolution: {integrity: sha512-GdETEflvfkPtdEpzT6QBAucsMAt7wiLYMk4+w1qA34J02OAo11BsTJrxUkPaQ4z/S6KkX3IfK5Ud9rCAyelnCg==} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@yuku-codegen/binding-linux-arm64-musl@0.6.12': - resolution: {integrity: sha512-ztFEUChX/sK9B0DH6//g4/QYl4dvTs3BOE+YMVt7pxg9G9fzBcV1vMZdROuXXNGWp6/hU56kTSZ8t4uW/0qpjw==} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@yuku-codegen/binding-linux-x64-gnu@0.6.12': - resolution: {integrity: sha512-aDZEat8bARks9upxd8Joi7LGatX2B/TwlnXIdbMCGlONK3WAEroihY1SUyGlf02niU1OyBidhlN7l3l+LByMxw==} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@yuku-codegen/binding-linux-x64-musl@0.6.12': - resolution: {integrity: sha512-IEuUSS04RsAx+d3PpAMAgCmEC0PzAuk5cath2Zk/KGe/te1zwTjZGxbBJM7n+0APaHB+IhUEMgm0bcjIAweEVQ==} - cpu: [x64] - os: [linux] - libc: [musl] - - '@yuku-codegen/binding-win32-arm64@0.6.12': - resolution: {integrity: sha512-0HHfyj/TbuFN09QFyypZ4+5vqmxeOYmEdFGuDnsq0KJdxnTeH0Fbqh1Bn7ZRV89IRzi8Fm7zSkb3mMJIS8Tk4g==} - cpu: [arm64] - os: [win32] - - '@yuku-codegen/binding-win32-x64@0.6.12': - resolution: {integrity: sha512-ZItYULslPqB9S7b53v23IeUcPCd5NeW+5+BoMyCY5/AEsMADKdznZXd4ELO1TZxv+0oA55g3iAOC9GWgigCsZA==} - cpu: [x64] - os: [win32] - - '@yuku-parser/binding-darwin-arm64@0.6.12': - resolution: {integrity: sha512-8nsmwwzuh2YCmJ3LT26RQp1tvS6FzGC2+XP6wFz6TNaBtQje+QgwkVdKVuECVWNHPFmuSTHonOnSzX0QirHqvQ==} - cpu: [arm64] - os: [darwin] - - '@yuku-parser/binding-darwin-x64@0.6.12': - resolution: {integrity: sha512-URbCSLE/B0jWnB94RpOxak2TM0GvRLUmArtfb/UmxtQfNOLed4LKK0jUv68IMAL9lOmJlvOBH9UwOyeuLEfuvA==} - cpu: [x64] - os: [darwin] - - '@yuku-parser/binding-freebsd-x64@0.6.12': - resolution: {integrity: sha512-VmiuUxe6uUe2c5tmBnIdZ+/LQ++ioKIZcCP/zMB8E7tuUaQesvMEPOS8ZQrUohFY2VlrKroiATaB1l9KJw15Zw==} - cpu: [x64] - os: [freebsd] - - '@yuku-parser/binding-linux-arm-gnu@0.6.12': - resolution: {integrity: sha512-q9WcllopGo8W9qzMz4Aahew3z/rLxiZFpmVoZQaLjwaO9EDW3sULue2zJ9agvVMf1NzRXircauTUrPZ4EZ74cQ==} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@yuku-parser/binding-linux-arm-musl@0.6.12': - resolution: {integrity: sha512-DcEO5Ywaw4r5keOonqdvuQdKNqN+VipJrdiC+jakOwiy1NLSbseylyufheg6uafviMuGn2to1oWw1FXD6Y4ztQ==} - cpu: [arm] - os: [linux] - libc: [musl] - - '@yuku-parser/binding-linux-arm64-gnu@0.6.12': - resolution: {integrity: sha512-zUFJar5Y9On9eIAw6kLxCmuAirGUjC3pyLdxrHC1dYueIMzZDrBa0hyzHRC7Nybr6R7COQ2U0oVZuZcl46RboA==} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@yuku-parser/binding-linux-arm64-musl@0.6.12': - resolution: {integrity: sha512-nPkXLUBQ0GiU0+BQByTb5M+a9wnCfM0SSBmIHYJ2KtaRUYmOruMut4AyBOVwIE2mbPeiOYcrWpMkseeFJ7Wonw==} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@yuku-parser/binding-linux-x64-gnu@0.6.12': - resolution: {integrity: sha512-XucJKw1k2nyfQoiBJiQJm1q3n6K8rCDvhQpF4XRoIzTQNhAV2sldEayJvCAsTS4orCHcsDqrDrBVRMRg8ExXPw==} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@yuku-parser/binding-linux-x64-musl@0.6.12': - resolution: {integrity: sha512-+p17OXn9xf4zePE3EEh1NriHv5GtfBJ8dEeaGVHUQNo5rkzDzcMH3PrMUD00RqWrWci5BfY7jMhMxgUye+NArA==} - cpu: [x64] - os: [linux] - libc: [musl] - - '@yuku-parser/binding-win32-arm64@0.6.12': - resolution: {integrity: sha512-BF6hLXQzaKj5Rn5r1QrCu6GBqdkjOOb8qpzWoKdG18QVhr/pnMPJpFl9isMg20orlOM+Kl/mU6XfzljgmzbocQ==} - cpu: [arm64] - os: [win32] - - '@yuku-parser/binding-win32-x64@0.6.12': - resolution: {integrity: sha512-Qv4Lwg3pvLJrLg+JlB71Xuz3kIxEg/S402jpoLSlchvUkQKTzO+dii0+97FZfQsN67pqqssenhezg5iLNrdw1w==} - cpu: [x64] - os: [win32] - - '@yuku-toolchain/types@0.5.43': - resolution: {integrity: sha512-kSpvPntnXw5+lYjO71ffBEnQ5ycQ74KGIYknh0TS4xeyCuBkOqxyJumxZkMhLBBUCLjDAbx2+Icnr3Zh4ftjpQ==} - - '@yuku-toolchain/types@0.6.11': - resolution: {integrity: sha512-i1JYFNJaKNCgyJ/nVoR8GK7wvlXF+ShYzFHBauWcvg8IoiXInK7pVziHcgNz/MWLPNr/Mb/CtmXccrJMkKqSHQ==} - - '@yuku-toolchain/types@0.6.8': - resolution: {integrity: sha512-AbUd1775RVkOxJkh8hkldIWoU6kRMTCsZFSZq8Ny53q7GkbaVe5UCfleNZ3RWCoz/ZKE8qwfeB7Cj0xqhLWsKA==} - acorn@8.16.0: resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} engines: {node: '>=0.4.0'} @@ -2252,10 +1799,6 @@ packages: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} - ansis@4.3.1: - resolution: {integrity: sha512-BJ8/l4R5LRE7hW9WdSuGYrLSHi2ynxeFpDFbH0K/CgNeY/tyhk+vO6TYxXC5r5CpUhNVX310xzPsN/H9lCdfOA==} - engines: {node: '>=14'} - any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} @@ -2336,10 +1879,6 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - cac@7.0.0: - resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==} - engines: {node: '>=20.19.0'} - camelcase-css@2.0.1: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} @@ -2497,9 +2036,6 @@ packages: defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} - defu@6.1.7: - resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} - denque@2.1.0: resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} engines: {node: '>=0.10'} @@ -2542,25 +2078,12 @@ packages: resolution: {integrity: sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==} engines: {node: '>=12'} - dts-resolver@3.0.0: - resolution: {integrity: sha512-1T1f+z+4tl9XD+m+0HBgWoL/nm0bOIffyWaUuUSBlFg/86IWvfx+wjNaO/ybU0AJzG9/Mi5hBUgGV6zCmWEN7Q==} - engines: {node: ^22.18.0 || >=24.0.0} - peerDependencies: - oxc-resolver: '>=11.0.0' - peerDependenciesMeta: - oxc-resolver: - optional: true - electron-to-chromium@1.5.313: resolution: {integrity: sha512-QBMrTWEf00GXZmJyx2lbYD45jpI3TUFnNIzJ5BBc8piGUDwMPa1GV6HJWTZVvY/eiN3fSopl7NRbgGp9sZ9LTA==} emoji-regex-xs@1.0.0: resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} - empathic@2.0.1: - resolution: {integrity: sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==} - engines: {node: '>=14'} - enhanced-resolve@5.21.6: resolution: {integrity: sha512-aNnGCvbJ/RIyWo1IuhNdVjnNF+EjH9wpzpNHt+ci/m9He9LJvUN8wrCcXjp9cWsGNAuvSpVFTx/vraAFQ8qGjQ==} engines: {node: '>=10.13.0'} @@ -2693,10 +2216,6 @@ packages: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} - get-tsconfig@5.0.0-beta.5: - resolution: {integrity: sha512-/6gFNr0N04nob252sTQxyFLi3eKFRqIg1I87YcqAMT1i6SQrSF6KujUEQrtrjMV0H/eejTCltLdDSTEMzHbnsQ==} - engines: {node: '>=20.20.0'} - giget@2.0.0: resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==} hasBin: true @@ -2799,10 +2318,6 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - import-without-cache@0.4.0: - resolution: {integrity: sha512-NkJQA7oZ4YHQhd2+H3BoRFKF3d/XNsiKpHZCQEMH9pDX27hQQLsTyOocyRgaIVtf8gHX3Nt3LPkR4e5EdtPAGQ==} - engines: {node: ^22.18.0 || >=24.0.0} - indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} @@ -3187,10 +2702,6 @@ packages: obug@2.1.1: resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} - obug@2.1.4: - resolution: {integrity: sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==} - engines: {node: '>=12.20.0'} - ocache@0.1.5: resolution: {integrity: sha512-kNNnkkVQup/QDvmTz8Q84wc2ntiyoVHDxa6eHWKt5qdGAmFRBIxy83rxgCYEjW0x06UJ9E3P6VgM2yY4rOBH4w==} @@ -3397,9 +2908,6 @@ packages: quansync@0.2.11: resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} - quansync@1.0.0: - resolution: {integrity: sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==} - queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -3453,9 +2961,6 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.11: resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} engines: {node: '>= 0.4'} @@ -3465,35 +2970,11 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rolldown-plugin-dts@0.27.11: - resolution: {integrity: sha512-DnBl4USSTV/h/sgy//QjCLHVo2JypE/52P5QugGeYaEqZmjBz/FYESOld0MhyIhul2U3Vsh41K63UWGHhJU/qQ==} - engines: {node: ^22.18.0 || >=24.11.0} - peerDependencies: - '@typescript/native-preview': '*' - '@volar/typescript': ~2.4.0 - rolldown: ^1.0.0 - typescript: ^5.0.0 || ^6.0.0 || ~7.0.0 - vue-tsc: ~3.2.0 || ~3.3.0 - peerDependenciesMeta: - '@typescript/native-preview': - optional: true - '@volar/typescript': - optional: true - typescript: - optional: true - vue-tsc: - optional: true - rolldown@1.1.5: resolution: {integrity: sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - rolldown@1.2.0: - resolution: {integrity: sha512-u7tgm5l4Yw1iTqUL4EcYOAt7fFvCgQMLeidrnD4GALlC6aOznCjezYajgxeyKw27u0Q5N7fwgCzjVyPIWzwuBA==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - rou3@0.8.1: resolution: {integrity: sha512-ePa+XGk00/3HuCqrEnK3LxJW7I0SdNg6EFzKUJG73hMAdDcOUC/i/aSz7LSDwLrGr33kal/rqOGydzwl6U7zBA==} @@ -3519,11 +3000,6 @@ packages: engines: {node: '>=10'} hasBin: true - semver@7.8.5: - resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} - engines: {node: '>=10'} - hasBin: true - seroval-plugins@1.5.1: resolution: {integrity: sha512-4FbuZ/TMl02sqv0RTFexu0SP6V+ywaIe5bAWCCEik0fk17BhALgwvUDVF7e3Uvf9pxmwCEJsRPmlkUE6HdzLAw==} engines: {node: '>=10'} @@ -3538,15 +3014,6 @@ packages: resolution: {integrity: sha512-46uFvgrXTVxZcUorgSSRZ4y+ieqLLQRMlG4bnCZKW3qI6BZm7Rg4ntMW4p1mILEEBZWrFlcpp0AyIIlM6jD9iw==} engines: {node: '>=10'} - sharp@0.35.3: - resolution: {integrity: sha512-ej0zVHuZGHCiABXcNxeYhpRnPNPAcvbG8RMdBAhDAxLKkCRVSpK3Iyu7qbqw3JMzoj0REeM6f3tJLtVwl0023Q==} - engines: {node: '>=20.9.0'} - peerDependencies: - '@types/node': '*' - peerDependenciesMeta: - '@types/node': - optional: true - shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -3737,10 +3204,6 @@ packages: resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==} engines: {node: '>=18'} - tinyexec@1.2.4: - resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==} - engines: {node: '>=18'} - tinyglobby@0.2.15: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} @@ -3783,50 +3246,12 @@ packages: resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==} engines: {node: '>=20'} - tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - tsdown@0.22.12: - resolution: {integrity: sha512-IzGRfGwSsufXJWOcQ0tmECKMG/dbxhUwDOySTS7JE1AM8pkB9+bpcTPs8bTxxSNrSvGocSczrBlOh97tZObq9Q==} - engines: {node: ^22.18.0 || >=24.11.0} - hasBin: true - peerDependencies: - '@arethetypeswrong/core': ^0.18.1 - '@tsdown/css': 0.22.12 - '@tsdown/exe': 0.22.12 - '@vitejs/devtools': '*' - publint: ^0.3.8 - tsx: '*' - typescript: ^5.0.0 || ^6.0.0 || ^7.0.0 - unplugin-unused: ^0.5.0 - unrun: '*' - peerDependenciesMeta: - '@arethetypeswrong/core': - optional: true - '@tsdown/css': - optional: true - '@tsdown/exe': - optional: true - '@vitejs/devtools': - optional: true - publint: - optional: true - tsx: - optional: true - typescript: - optional: true - unplugin-unused: - optional: true - unrun: - optional: true - tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -3838,9 +3263,6 @@ packages: ufo@1.6.3: resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} - unconfig-core@7.5.0: - resolution: {integrity: sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==} - uncrypto@0.1.3: resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} @@ -4007,10 +3429,6 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - verkit@0.1.0: - resolution: {integrity: sha512-hot+EjuRuW/QsivBRTVKlL5FUVPIGpnjJv0fzuyYyD9Bqaj3Kx2KoSw1WVIoCTOhFkmNJZ0fhl66JdsXjWXztw==} - engines: {node: ^22.18.0 || ^24.11.0 || >=26.0.0} - vfile-message@4.0.3: resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} @@ -4070,49 +3488,6 @@ packages: yaml: optional: true - vite@8.1.5: - resolution: {integrity: sha512-7ULLwsCdYx/nRyrpiEwvqb5TFHrMVZyBt+rg/OAXT7rgj/z+DtTDyKFeLAdDkubDVDKD8jOsndmy7m55XcfUsw==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - peerDependencies: - '@types/node': ^20.19.0 || >=22.12.0 - '@vitejs/devtools': ^0.3.0 - esbuild: ^0.27.0 || ^0.28.0 - jiti: '>=1.21.0' - less: ^4.0.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: '>=0.54.8' - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - '@vitejs/devtools': - optional: true - esbuild: - optional: true - jiti: - optional: true - less: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - vitefu@1.1.2: resolution: {integrity: sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw==} peerDependencies: @@ -4204,18 +3579,6 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yuku-ast@0.1.7: - resolution: {integrity: sha512-2RiMEWv500TixY5rJy6OZd4fSy9WYZKWh6gGbIJ7y7vAGcuCugWOWwOLGaQcRZrXcPUfqtLtvpaJ3SdXtWlhKA==} - - yuku-ast@0.6.11: - resolution: {integrity: sha512-ZfXkFYVsDewS45+kv3WiA/qNB73CRfxFDEQwfnRMUAR4AD5zRI7PRqxmI2U3Jz/oG41GneTVW6mxDOQal0lgeA==} - - yuku-codegen@0.6.12: - resolution: {integrity: sha512-5cAJedx9MdKf/ngFpMYH9B1DKaB3FVJOPncl80M+8nNS2rEvrta17N59ryEVIewuHYS81o4XDb4Hg5/5hBdF7A==} - - yuku-parser@0.6.12: - resolution: {integrity: sha512-A1+KVTvdm1pQmrl/cS5JlqFvUclKpM8I5MvAOoQnYSGmmJBVDKN24HNXiZmxE8Ndsl4g3qBliZBAxq8/J4pKxA==} - zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -4540,22 +3903,11 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/core@1.11.2': - dependencies: - '@emnapi/wasi-threads': 1.2.2 - tslib: 2.8.1 - optional: true - '@emnapi/runtime@1.11.1': dependencies: tslib: 2.8.1 optional: true - '@emnapi/runtime@1.11.2': - dependencies: - tslib: 2.8.1 - optional: true - '@emnapi/wasi-threads@1.2.2': dependencies: tslib: 2.8.1 @@ -4630,134 +3982,28 @@ snapshots: '@esbuild/sunos-x64@0.27.4': optional: true - '@esbuild/win32-arm64@0.27.4': - optional: true - - '@esbuild/win32-ia32@0.27.4': - optional: true - - '@esbuild/win32-x64@0.27.4': - optional: true - - '@exodus/bytes@1.15.0': {} - - '@floating-ui/core@1.7.5': - dependencies: - '@floating-ui/utils': 0.2.11 - - '@floating-ui/dom@1.7.6': - dependencies: - '@floating-ui/core': 1.7.5 - '@floating-ui/utils': 0.2.11 - - '@floating-ui/utils@0.2.11': {} - - '@img/colour@1.1.0': {} - - '@img/sharp-darwin-arm64@0.35.3': - optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.3.2 - optional: true - - '@img/sharp-darwin-x64@0.35.3': - optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.3.2 - optional: true - - '@img/sharp-freebsd-wasm32@0.35.3': - dependencies: - '@img/sharp-wasm32': 0.35.3 - optional: true - - '@img/sharp-libvips-darwin-arm64@1.3.2': - optional: true - - '@img/sharp-libvips-darwin-x64@1.3.2': - optional: true - - '@img/sharp-libvips-linux-arm64@1.3.2': - optional: true - - '@img/sharp-libvips-linux-arm@1.3.2': - optional: true - - '@img/sharp-libvips-linux-ppc64@1.3.2': - optional: true - - '@img/sharp-libvips-linux-riscv64@1.3.2': - optional: true - - '@img/sharp-libvips-linux-s390x@1.3.2': - optional: true - - '@img/sharp-libvips-linux-x64@1.3.2': - optional: true - - '@img/sharp-libvips-linuxmusl-arm64@1.3.2': - optional: true - - '@img/sharp-libvips-linuxmusl-x64@1.3.2': - optional: true - - '@img/sharp-linux-arm64@0.35.3': - optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.3.2 - optional: true - - '@img/sharp-linux-arm@0.35.3': - optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.3.2 - optional: true - - '@img/sharp-linux-ppc64@0.35.3': - optionalDependencies: - '@img/sharp-libvips-linux-ppc64': 1.3.2 - optional: true - - '@img/sharp-linux-riscv64@0.35.3': - optionalDependencies: - '@img/sharp-libvips-linux-riscv64': 1.3.2 - optional: true - - '@img/sharp-linux-s390x@0.35.3': - optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.3.2 - optional: true - - '@img/sharp-linux-x64@0.35.3': - optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.3.2 - optional: true - - '@img/sharp-linuxmusl-arm64@0.35.3': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.3.2 - optional: true - - '@img/sharp-linuxmusl-x64@0.35.3': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.3.2 - optional: true - - '@img/sharp-wasm32@0.35.3': - dependencies: - '@emnapi/runtime': 1.11.1 - optional: true - - '@img/sharp-webcontainers-wasm32@0.35.3': - dependencies: - '@img/sharp-wasm32': 0.35.3 - optional: true - - '@img/sharp-win32-arm64@0.35.3': + '@esbuild/win32-arm64@0.27.4': optional: true - '@img/sharp-win32-ia32@0.35.3': + '@esbuild/win32-ia32@0.27.4': optional: true - '@img/sharp-win32-x64@0.35.3': + '@esbuild/win32-x64@0.27.4': optional: true + '@exodus/bytes@1.15.0': {} + + '@floating-ui/core@1.7.5': + dependencies: + '@floating-ui/utils': 0.2.11 + + '@floating-ui/dom@1.7.6': + dependencies: + '@floating-ui/core': 1.7.5 + '@floating-ui/utils': 0.2.11 + + '@floating-ui/utils@0.2.11': {} + '@inquirer/external-editor@1.0.3(@types/node@25.5.0)': dependencies: chardet: 2.1.1 @@ -4882,13 +4128,6 @@ snapshots: '@tybys/wasm-util': 0.10.3 optional: true - '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)': - dependencies: - '@emnapi/core': 1.11.2 - '@emnapi/runtime': 1.11.2 - '@tybys/wasm-util': 0.10.3 - optional: true - '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -4967,8 +4206,6 @@ snapshots: '@oxc-project/types@0.139.0': {} - '@oxc-project/types@0.140.0': {} - '@oxfmt/binding-android-arm-eabi@0.36.0': optional: true @@ -5059,7 +4296,7 @@ snapshots: '@parcel/watcher-wasm@2.5.6': dependencies: is-glob: 4.0.3 - picomatch: 4.0.5 + picomatch: 4.0.3 '@parcel/watcher-win32-arm64@2.5.6': optional: true @@ -5075,7 +4312,7 @@ snapshots: detect-libc: 2.1.2 is-glob: 4.0.3 node-addon-api: 7.1.1 - picomatch: 4.0.5 + picomatch: 4.0.3 optionalDependencies: '@parcel/watcher-android-arm64': 2.5.6 '@parcel/watcher-darwin-arm64': 2.5.6 @@ -5099,82 +4336,42 @@ snapshots: '@popperjs/core@2.11.8': {} - '@quansync/fs@1.0.0': - dependencies: - quansync: 1.0.0 - '@rolldown/binding-android-arm64@1.1.5': optional: true - '@rolldown/binding-android-arm64@1.2.0': - optional: true - '@rolldown/binding-darwin-arm64@1.1.5': optional: true - '@rolldown/binding-darwin-arm64@1.2.0': - optional: true - '@rolldown/binding-darwin-x64@1.1.5': optional: true - '@rolldown/binding-darwin-x64@1.2.0': - optional: true - '@rolldown/binding-freebsd-x64@1.1.5': optional: true - '@rolldown/binding-freebsd-x64@1.2.0': - optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.1.5': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.2.0': - optional: true - '@rolldown/binding-linux-arm64-gnu@1.1.5': optional: true - '@rolldown/binding-linux-arm64-gnu@1.2.0': - optional: true - '@rolldown/binding-linux-arm64-musl@1.1.5': optional: true - '@rolldown/binding-linux-arm64-musl@1.2.0': - optional: true - '@rolldown/binding-linux-ppc64-gnu@1.1.5': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.2.0': - optional: true - '@rolldown/binding-linux-s390x-gnu@1.1.5': optional: true - '@rolldown/binding-linux-s390x-gnu@1.2.0': - optional: true - '@rolldown/binding-linux-x64-gnu@1.1.5': optional: true - '@rolldown/binding-linux-x64-gnu@1.2.0': - optional: true - '@rolldown/binding-linux-x64-musl@1.1.5': optional: true - '@rolldown/binding-linux-x64-musl@1.2.0': - optional: true - '@rolldown/binding-openharmony-arm64@1.1.5': optional: true - '@rolldown/binding-openharmony-arm64@1.2.0': - optional: true - '@rolldown/binding-wasm32-wasi@1.1.5': dependencies: '@emnapi/core': 1.11.1 @@ -5182,25 +4379,12 @@ snapshots: '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) optional: true - '@rolldown/binding-wasm32-wasi@1.2.0': - dependencies: - '@emnapi/core': 1.11.2 - '@emnapi/runtime': 1.11.2 - '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) - optional: true - '@rolldown/binding-win32-arm64-msvc@1.1.5': optional: true - '@rolldown/binding-win32-arm64-msvc@1.2.0': - optional: true - '@rolldown/binding-win32-x64-msvc@1.1.5': optional: true - '@rolldown/binding-win32-x64-msvc@1.2.0': - optional: true - '@rolldown/pluginutils@1.0.1': {} '@shikijs/core@1.29.2': @@ -5419,19 +4603,6 @@ snapshots: dependencies: '@testing-library/dom': 10.4.1 - '@tsdown/css@0.22.12(jiti@2.7.0)(postcss@8.5.19)(tsdown@0.22.12)': - dependencies: - lightningcss: 1.32.0 - postcss-load-config: 6.0.1(jiti@2.7.0)(postcss@8.5.19) - rolldown: 1.2.0 - tsdown: 0.22.12(@tsdown/css@0.22.12)(typescript@7.0.2) - optionalDependencies: - postcss: 8.5.19 - transitivePeerDependencies: - - jiti - - tsx - - yaml - '@tybys/wasm-util@0.10.3': dependencies: tslib: 2.8.1 @@ -5568,20 +4739,6 @@ snapshots: - utf-8-validate - vite - '@vitest/browser-playwright@4.1.0(playwright@1.58.2)(vite@8.1.5(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0))(vitest@4.1.0)': - dependencies: - '@vitest/browser': 4.1.0(vite@8.1.5(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0))(vitest@4.1.0) - '@vitest/mocker': 4.1.0(vite@8.1.5(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0)) - playwright: 1.58.2 - tinyrainbow: 3.1.0 - vitest: 4.1.0(@types/node@25.5.0)(@vitest/browser-playwright@4.1.0)(@vitest/ui@4.1.0)(jsdom@28.1.0)(vite@8.1.5(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0)) - transitivePeerDependencies: - - bufferutil - - msw - - utf-8-validate - - vite - optional: true - '@vitest/browser@4.1.0(vite@8.1.4(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0))(vitest@4.1.0)': dependencies: '@blazediff/core': 1.9.1 @@ -5599,24 +4756,6 @@ snapshots: - utf-8-validate - vite - '@vitest/browser@4.1.0(vite@8.1.5(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0))(vitest@4.1.0)': - dependencies: - '@blazediff/core': 1.9.1 - '@vitest/mocker': 4.1.0(vite@8.1.5(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0)) - '@vitest/utils': 4.1.0 - magic-string: 0.30.21 - pngjs: 7.0.0 - sirv: 3.0.2 - tinyrainbow: 3.1.0 - vitest: 4.1.0(@types/node@25.5.0)(@vitest/browser-playwright@4.1.0)(@vitest/ui@4.1.0)(jsdom@28.1.0)(vite@8.1.5(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0)) - ws: 8.19.0 - transitivePeerDependencies: - - bufferutil - - msw - - utf-8-validate - - vite - optional: true - '@vitest/expect@4.1.0': dependencies: '@standard-schema/spec': 1.1.0 @@ -5634,14 +4773,6 @@ snapshots: optionalDependencies: vite: 8.1.4(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0) - '@vitest/mocker@4.1.0(vite@8.1.5(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0))': - dependencies: - '@vitest/spy': 4.1.0 - estree-walker: 3.0.3 - magic-string: 0.30.21 - optionalDependencies: - vite: 8.1.5(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0) - '@vitest/pretty-format@4.1.0': dependencies: tinyrainbow: 3.1.0 @@ -5667,9 +4798,9 @@ snapshots: flatted: 3.4.0 pathe: 2.0.3 sirv: 3.0.2 - tinyglobby: 0.2.17 + tinyglobby: 0.2.15 tinyrainbow: 3.1.0 - vitest: 4.1.0(@types/node@25.5.0)(@vitest/browser-playwright@4.1.0)(@vitest/ui@4.1.0)(jsdom@28.1.0)(vite@8.1.5(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0)) + vitest: 4.1.0(@types/node@25.5.0)(@vitest/browser-playwright@4.1.0)(@vitest/ui@4.1.0)(jsdom@28.1.0)(vite@8.1.4(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0)) '@vitest/utils@4.1.0': dependencies: @@ -5677,78 +4808,6 @@ snapshots: convert-source-map: 2.0.0 tinyrainbow: 3.1.0 - '@yuku-codegen/binding-darwin-arm64@0.6.12': - optional: true - - '@yuku-codegen/binding-darwin-x64@0.6.12': - optional: true - - '@yuku-codegen/binding-freebsd-x64@0.6.12': - optional: true - - '@yuku-codegen/binding-linux-arm-gnu@0.6.12': - optional: true - - '@yuku-codegen/binding-linux-arm-musl@0.6.12': - optional: true - - '@yuku-codegen/binding-linux-arm64-gnu@0.6.12': - optional: true - - '@yuku-codegen/binding-linux-arm64-musl@0.6.12': - optional: true - - '@yuku-codegen/binding-linux-x64-gnu@0.6.12': - optional: true - - '@yuku-codegen/binding-linux-x64-musl@0.6.12': - optional: true - - '@yuku-codegen/binding-win32-arm64@0.6.12': - optional: true - - '@yuku-codegen/binding-win32-x64@0.6.12': - optional: true - - '@yuku-parser/binding-darwin-arm64@0.6.12': - optional: true - - '@yuku-parser/binding-darwin-x64@0.6.12': - optional: true - - '@yuku-parser/binding-freebsd-x64@0.6.12': - optional: true - - '@yuku-parser/binding-linux-arm-gnu@0.6.12': - optional: true - - '@yuku-parser/binding-linux-arm-musl@0.6.12': - optional: true - - '@yuku-parser/binding-linux-arm64-gnu@0.6.12': - optional: true - - '@yuku-parser/binding-linux-arm64-musl@0.6.12': - optional: true - - '@yuku-parser/binding-linux-x64-gnu@0.6.12': - optional: true - - '@yuku-parser/binding-linux-x64-musl@0.6.12': - optional: true - - '@yuku-parser/binding-win32-arm64@0.6.12': - optional: true - - '@yuku-parser/binding-win32-x64@0.6.12': - optional: true - - '@yuku-toolchain/types@0.5.43': {} - - '@yuku-toolchain/types@0.6.11': {} - - '@yuku-toolchain/types@0.6.8': {} - acorn@8.16.0: {} agent-base@7.1.4: {} @@ -5759,8 +4818,6 @@ snapshots: ansi-styles@5.2.0: {} - ansis@4.3.1: {} - any-promise@1.3.0: {} anymatch@3.1.3: @@ -5838,8 +4895,6 @@ snapshots: buffer-from@1.1.2: optional: true - cac@7.0.0: {} - camelcase-css@2.0.1: {} caniuse-lite@1.0.30001778: {} @@ -5965,8 +5020,6 @@ snapshots: defu@6.1.4: {} - defu@6.1.7: {} - denque@2.1.0: optional: true @@ -5997,14 +5050,10 @@ snapshots: dotenv@17.3.1: optional: true - dts-resolver@3.0.0: {} - electron-to-chromium@1.5.313: {} emoji-regex-xs@1.0.0: {} - empathic@2.0.1: {} - enhanced-resolve@5.21.6: dependencies: graceful-fs: 4.2.11 @@ -6058,7 +5107,6 @@ snapshots: '@esbuild/win32-arm64': 0.27.4 '@esbuild/win32-ia32': 0.27.4 '@esbuild/win32-x64': 0.27.4 - optional: true escalade@3.2.0: {} @@ -6147,15 +5195,11 @@ snapshots: get-stream@8.0.1: {} - get-tsconfig@5.0.0-beta.5: - dependencies: - resolve-pkg-maps: 1.0.0 - giget@2.0.0: dependencies: citty: 0.1.6 consola: 3.4.2 - defu: 6.1.7 + defu: 6.1.4 node-fetch-native: 1.6.7 nypm: 0.6.5 pathe: 2.0.3 @@ -6272,8 +5316,6 @@ snapshots: ignore@5.3.2: {} - import-without-cache@0.4.0: {} - indent-string@4.0.0: {} ioredis@5.10.0: @@ -6692,7 +5734,7 @@ snapshots: dependencies: citty: 0.2.1 pathe: 2.0.3 - tinyexec: 1.2.4 + tinyexec: 1.0.4 optional: true object-assign@4.1.1: {} @@ -6701,8 +5743,6 @@ snapshots: obug@2.1.1: {} - obug@2.1.4: {} - ocache@0.1.5: dependencies: ohash: 2.0.11 @@ -6871,13 +5911,6 @@ snapshots: jiti: 1.21.7 postcss: 8.5.8 - postcss-load-config@6.0.1(jiti@2.7.0)(postcss@8.5.19): - dependencies: - lilconfig: 3.1.3 - optionalDependencies: - jiti: 2.7.0 - postcss: 8.5.19 - postcss-nested@6.2.0(postcss@8.5.8): dependencies: postcss: 8.5.8 @@ -6921,8 +5954,6 @@ snapshots: quansync@0.2.11: {} - quansync@1.0.0: {} - queue-microtask@1.2.3: {} radix3@1.1.2: {} @@ -6975,8 +6006,6 @@ snapshots: resolve-from@5.0.0: {} - resolve-pkg-maps@1.0.0: {} - resolve@1.22.11: dependencies: is-core-module: 2.16.1 @@ -6985,20 +6014,6 @@ snapshots: reusify@1.1.0: {} - rolldown-plugin-dts@0.27.11(rolldown@1.2.0)(typescript@7.0.2): - dependencies: - dts-resolver: 3.0.0 - get-tsconfig: 5.0.0-beta.5 - obug: 2.1.4 - rolldown: 1.2.0 - yuku-ast: 0.1.7 - yuku-codegen: 0.6.12 - yuku-parser: 0.6.12 - optionalDependencies: - typescript: 7.0.2 - transitivePeerDependencies: - - oxc-resolver - rolldown@1.1.5: dependencies: '@oxc-project/types': 0.139.0 @@ -7020,27 +6035,6 @@ snapshots: '@rolldown/binding-win32-arm64-msvc': 1.1.5 '@rolldown/binding-win32-x64-msvc': 1.1.5 - rolldown@1.2.0: - dependencies: - '@oxc-project/types': 0.140.0 - '@rolldown/pluginutils': 1.0.1 - optionalDependencies: - '@rolldown/binding-android-arm64': 1.2.0 - '@rolldown/binding-darwin-arm64': 1.2.0 - '@rolldown/binding-darwin-x64': 1.2.0 - '@rolldown/binding-freebsd-x64': 1.2.0 - '@rolldown/binding-linux-arm-gnueabihf': 1.2.0 - '@rolldown/binding-linux-arm64-gnu': 1.2.0 - '@rolldown/binding-linux-arm64-musl': 1.2.0 - '@rolldown/binding-linux-ppc64-gnu': 1.2.0 - '@rolldown/binding-linux-s390x-gnu': 1.2.0 - '@rolldown/binding-linux-x64-gnu': 1.2.0 - '@rolldown/binding-linux-x64-musl': 1.2.0 - '@rolldown/binding-openharmony-arm64': 1.2.0 - '@rolldown/binding-wasm32-wasi': 1.2.0 - '@rolldown/binding-win32-arm64-msvc': 1.2.0 - '@rolldown/binding-win32-x64-msvc': 1.2.0 - rou3@0.8.1: {} rou3@0.9.1: {} @@ -7059,8 +6053,6 @@ snapshots: semver@7.7.4: {} - semver@7.8.5: {} - seroval-plugins@1.5.1(seroval@1.5.1): dependencies: seroval: 1.5.1 @@ -7073,39 +6065,6 @@ snapshots: seroval@1.5.4: {} - sharp@0.35.3(@types/node@25.5.0): - dependencies: - '@img/colour': 1.1.0 - detect-libc: 2.1.2 - semver: 7.8.5 - optionalDependencies: - '@img/sharp-darwin-arm64': 0.35.3 - '@img/sharp-darwin-x64': 0.35.3 - '@img/sharp-freebsd-wasm32': 0.35.3 - '@img/sharp-libvips-darwin-arm64': 1.3.2 - '@img/sharp-libvips-darwin-x64': 1.3.2 - '@img/sharp-libvips-linux-arm': 1.3.2 - '@img/sharp-libvips-linux-arm64': 1.3.2 - '@img/sharp-libvips-linux-ppc64': 1.3.2 - '@img/sharp-libvips-linux-riscv64': 1.3.2 - '@img/sharp-libvips-linux-s390x': 1.3.2 - '@img/sharp-libvips-linux-x64': 1.3.2 - '@img/sharp-libvips-linuxmusl-arm64': 1.3.2 - '@img/sharp-libvips-linuxmusl-x64': 1.3.2 - '@img/sharp-linux-arm': 0.35.3 - '@img/sharp-linux-arm64': 0.35.3 - '@img/sharp-linux-ppc64': 0.35.3 - '@img/sharp-linux-riscv64': 0.35.3 - '@img/sharp-linux-s390x': 0.35.3 - '@img/sharp-linux-x64': 0.35.3 - '@img/sharp-linuxmusl-arm64': 0.35.3 - '@img/sharp-linuxmusl-x64': 0.35.3 - '@img/sharp-webcontainers-wasm32': 0.35.3 - '@img/sharp-win32-arm64': 0.35.3 - '@img/sharp-win32-ia32': 0.35.3 - '@img/sharp-win32-x64': 0.35.3 - '@types/node': 25.5.0 - shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -7239,7 +6198,7 @@ snapshots: lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.7 - tinyglobby: 0.2.17 + tinyglobby: 0.2.15 ts-interface-checker: 0.1.13 supports-preserve-symlinks-flag@1.0.0: {} @@ -7313,8 +6272,6 @@ snapshots: tinyexec@1.0.4: {} - tinyexec@1.2.4: {} - tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.3) @@ -7353,38 +6310,10 @@ snapshots: dependencies: punycode: 2.3.1 - tree-kill@1.2.2: {} - trim-lines@3.0.1: {} ts-interface-checker@0.1.13: {} - tsdown@0.22.12(@tsdown/css@0.22.12)(typescript@7.0.2): - dependencies: - ansis: 4.3.1 - cac: 7.0.0 - defu: 6.1.7 - empathic: 2.0.1 - hookable: 6.1.1 - import-without-cache: 0.4.0 - obug: 2.1.4 - picomatch: 4.0.5 - rolldown: 1.2.0 - rolldown-plugin-dts: 0.27.11(rolldown@1.2.0)(typescript@7.0.2) - tinyexec: 1.2.4 - tinyglobby: 0.2.17 - tree-kill: 1.2.2 - unconfig-core: 7.5.0 - verkit: 0.1.0 - optionalDependencies: - '@tsdown/css': 0.22.12(jiti@2.7.0)(postcss@8.5.19)(tsdown@0.22.12) - typescript: 7.0.2 - transitivePeerDependencies: - - '@typescript/native-preview' - - '@volar/typescript' - - oxc-resolver - - vue-tsc - tslib@2.8.1: {} typescript@7.0.2: @@ -7412,11 +6341,6 @@ snapshots: ufo@1.6.3: {} - unconfig-core@7.5.0: - dependencies: - '@quansync/fs': 1.0.0 - quansync: 1.0.0 - uncrypto@0.1.3: {} undici-types@7.18.2: {} @@ -7491,8 +6415,6 @@ snapshots: util-deprecate@1.0.2: {} - verkit@0.1.0: {} - vfile-message@4.0.3: dependencies: '@types/unist': 3.0.3 @@ -7518,21 +6440,6 @@ snapshots: transitivePeerDependencies: - supports-color - vite-plugin-solid@2.11.11(@testing-library/jest-dom@6.9.1)(solid-js@1.9.11)(vite@8.1.5(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0)): - dependencies: - '@babel/core': 7.29.0 - '@types/babel__core': 7.20.5 - babel-preset-solid: 1.9.10(@babel/core@7.29.0)(solid-js@1.9.11) - merge-anything: 5.1.7 - solid-js: 1.9.11 - solid-refresh: 0.6.3(solid-js@1.9.11) - vite: 8.1.5(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0) - vitefu: 1.1.2(vite@8.1.5(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0)) - optionalDependencies: - '@testing-library/jest-dom': 6.9.1 - transitivePeerDependencies: - - supports-color - vite@8.1.4(@types/node@25.5.0)(esbuild@0.27.4)(jiti@1.21.7)(terser@5.46.0): dependencies: lightningcss: 1.32.0 @@ -7561,28 +6468,10 @@ snapshots: jiti: 2.7.0 terser: 5.46.0 - vite@8.1.5(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0): - dependencies: - lightningcss: 1.32.0 - picomatch: 4.0.5 - postcss: 8.5.19 - rolldown: 1.1.5 - tinyglobby: 0.2.17 - optionalDependencies: - '@types/node': 25.5.0 - esbuild: 0.27.4 - fsevents: 2.3.3 - jiti: 2.7.0 - terser: 5.46.0 - vitefu@1.1.2(vite@8.1.4(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0)): optionalDependencies: vite: 8.1.4(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0) - vitefu@1.1.2(vite@8.1.5(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0)): - optionalDependencies: - vite: 8.1.5(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0) - vitest@4.1.0(@types/node@25.5.0)(@vitest/browser-playwright@4.1.0)(@vitest/ui@4.1.0)(jsdom@28.1.0)(vite@8.1.4(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0)): dependencies: '@vitest/expect': 4.1.0 @@ -7613,36 +6502,6 @@ snapshots: transitivePeerDependencies: - msw - vitest@4.1.0(@types/node@25.5.0)(@vitest/browser-playwright@4.1.0)(@vitest/ui@4.1.0)(jsdom@28.1.0)(vite@8.1.5(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0)): - dependencies: - '@vitest/expect': 4.1.0 - '@vitest/mocker': 4.1.0(vite@8.1.5(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0)) - '@vitest/pretty-format': 4.1.0 - '@vitest/runner': 4.1.0 - '@vitest/snapshot': 4.1.0 - '@vitest/spy': 4.1.0 - '@vitest/utils': 4.1.0 - es-module-lexer: 2.0.0 - expect-type: 1.3.0 - magic-string: 0.30.21 - obug: 2.1.1 - pathe: 2.0.3 - picomatch: 4.0.3 - std-env: 4.0.0 - tinybench: 2.9.0 - tinyexec: 1.0.4 - tinyglobby: 0.2.15 - tinyrainbow: 3.1.0 - vite: 8.1.5(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0) - why-is-node-running: 2.3.0 - optionalDependencies: - '@types/node': 25.5.0 - '@vitest/browser-playwright': 4.1.0(playwright@1.58.2)(vite@8.1.5(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0))(vitest@4.1.0) - '@vitest/ui': 4.1.0(vitest@4.1.0) - jsdom: 28.1.0 - transitivePeerDependencies: - - msw - w3c-xmlserializer@5.0.0: dependencies: xml-name-validator: 5.0.0 @@ -7676,45 +6535,4 @@ snapshots: yallist@3.1.1: {} - yuku-ast@0.1.7: - dependencies: - '@yuku-toolchain/types': 0.5.43 - - yuku-ast@0.6.11: - dependencies: - '@yuku-toolchain/types': 0.6.8 - - yuku-codegen@0.6.12: - dependencies: - '@yuku-toolchain/types': 0.6.11 - optionalDependencies: - '@yuku-codegen/binding-darwin-arm64': 0.6.12 - '@yuku-codegen/binding-darwin-x64': 0.6.12 - '@yuku-codegen/binding-freebsd-x64': 0.6.12 - '@yuku-codegen/binding-linux-arm-gnu': 0.6.12 - '@yuku-codegen/binding-linux-arm-musl': 0.6.12 - '@yuku-codegen/binding-linux-arm64-gnu': 0.6.12 - '@yuku-codegen/binding-linux-arm64-musl': 0.6.12 - '@yuku-codegen/binding-linux-x64-gnu': 0.6.12 - '@yuku-codegen/binding-linux-x64-musl': 0.6.12 - '@yuku-codegen/binding-win32-arm64': 0.6.12 - '@yuku-codegen/binding-win32-x64': 0.6.12 - - yuku-parser@0.6.12: - dependencies: - '@yuku-toolchain/types': 0.6.11 - yuku-ast: 0.6.11 - optionalDependencies: - '@yuku-parser/binding-darwin-arm64': 0.6.12 - '@yuku-parser/binding-darwin-x64': 0.6.12 - '@yuku-parser/binding-freebsd-x64': 0.6.12 - '@yuku-parser/binding-linux-arm-gnu': 0.6.12 - '@yuku-parser/binding-linux-arm-musl': 0.6.12 - '@yuku-parser/binding-linux-arm64-gnu': 0.6.12 - '@yuku-parser/binding-linux-arm64-musl': 0.6.12 - '@yuku-parser/binding-linux-x64-gnu': 0.6.12 - '@yuku-parser/binding-linux-x64-musl': 0.6.12 - '@yuku-parser/binding-win32-arm64': 0.6.12 - '@yuku-parser/binding-win32-x64': 0.6.12 - zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 772bf3a3c..e93b431c2 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -16,10 +16,7 @@ ignoredBuiltDependencies: - prisma minimumReleaseAgeExclude: - - '@tsdown/css@0.22.12' - srvx@0.12.0 - - tsdown@0.22.12 - - verkit@0.1.0 onlyBuiltDependencies: - '@parcel/watcher'