From 3061d29b70472fe28a9f84f4737ba3d5ff05f7e2 Mon Sep 17 00:00:00 2001 From: Sarah Sturgeon Date: Tue, 7 Oct 2025 17:15:07 -0700 Subject: [PATCH 01/14] Fix docker image, update to node22, assorted updates --- .github/workflows/full_update.yml | 2 +- .github/workflows/update.yml | 6 +- .gitignore | 4 +- Dockerfile | 63 +- astro.config.mjs | 51 +- build/modules/download_caches.sh | 4 + build/modules/upload_caches.sh | 2 + package-lock.json | 8389 ++++++++++++----------------- package.json | 30 +- public/.gitkeep | 0 src/components/Sidebar.astro | 2 +- src/env.d.ts | 1 - src/layouts/Layout.astro | 82 +- tsconfig.json | 2 + wrangler.toml | 1 + 15 files changed, 3626 insertions(+), 5013 deletions(-) create mode 100755 build/modules/download_caches.sh create mode 100644 public/.gitkeep delete mode 100644 src/env.d.ts diff --git a/.github/workflows/full_update.yml b/.github/workflows/full_update.yml index 0da6b0b..ac34e55 100644 --- a/.github/workflows/full_update.yml +++ b/.github/workflows/full_update.yml @@ -24,7 +24,7 @@ jobs: - name: Setup Node uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 22 cache: "npm" - name: Setup diff --git a/.github/workflows/update.yml b/.github/workflows/update.yml index a17e8b7..ff67acc 100644 --- a/.github/workflows/update.yml +++ b/.github/workflows/update.yml @@ -21,15 +21,13 @@ jobs: - name: Setup Node uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 22 cache: "npm" - name: Setup run: | npm --no-audit --progress=false ci & - (curl --location --remote-name https://storage.gmodwiki.com/build_cache.zip && unzip -q build_cache.zip && rm -v build_cache.zip) & - (curl --location --remote-name https://storage.gmodwiki.com/public_cache.zip && unzip -q public_cache.zip && rm -v public_cache.zip) & - wait + npm run download_caches - name: Remove expired files run: | diff --git a/.gitignore b/.gitignore index dc8f2d2..4dcb8fa 100644 --- a/.gitignore +++ b/.gitignore @@ -21,7 +21,9 @@ pnpm-debug.log* .DS_Store build/cache/ -public/ + +public/* +!public/.gitkeep slim.report.json diff --git a/Dockerfile b/Dockerfile index d0cfce3..7c392f4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,32 +1,55 @@ -FROM node:21 AS builder +FROM node:22-slim AS base +WORKDIR /app +COPY package.json package-lock.json ./ -ENV DEBIAN_FRONTEND=noninteractive -RUN apt-get update && apt-get install -y --no-install-recommends python3-minimal && rm -rf /var/lib/apt/lists/* -WORKDIR /app +FROM base AS prod-deps +RUN npm ci --omit=dev +# Remove a bunch of unnecessary stuff to slim down the image +RUN rm -rf \ + /app/node_modules/@astrojs/cloudflare \ + /app/node_modules/typescript \ + /app/node_modules/@shikijs \ + /app/node_modules/@esbuild \ + /app/node_modules/@cloudflare \ + /app/node_modules/fontkit \ + /app/node_modules/@babel \ + /app/node_modules/prismjs \ + /app/node_modules/shiki \ + /app/node_modules/rollup \ + /app/node_modules/vite \ + /app/node_modules/@types \ + /app/node_modules/terser \ + /app/node_modules/@rollup \ + /app/node_modules/esbuild \ + /app/node_modules/sharp \ + /app/node_modules/@img \ + /app/node_modules/astro -COPY package.json /app -COPY package-lock.json /app -COPY node_modules /app/node_modules -RUN npm install -COPY ./build /app/build -COPY ./public /app/public -COPY astro.config.mjs . -COPY tsconfig.json /app/tsconfig.json -COPY src /app/src +FROM base AS build-deps +RUN npm ci + +FROM build-deps AS builder +COPY astro.config.mjs tsconfig.json ./ +COPY .astro ./ +COPY src ./src +COPY build ./build +COPY public ./public ENV BUILD_ENV=docker RUN npm run build RUN npm run astrobuild -FROM node:21-alpine -WORKDIR /app -COPY --from=builder /app/dist /app/dist +# Final Image +FROM gcr.io/distroless/nodejs22-debian12 AS final +WORKDIR /app +COPY --from=prod-deps /app/node_modules ./node_modules +COPY --from=builder /app/dist ./dist +ENV NODE_ENV=production ENV HOST=0.0.0.0 ENV PORT=4321 -ENV NODE_ENV=production -RUN npm i cookie kleur clsx cssesc server-destroy send path-to-regexp@6.2.1 html-escaper -RUN du -sh /app/node_modules -CMD ["node", "/app/dist/server/entry.mjs"] +EXPOSE 4321 + +CMD ["/app/dist/server/entry.mjs"] diff --git a/astro.config.mjs b/astro.config.mjs index 4f16443..0e19ebc 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -1,6 +1,6 @@ -import { defineConfig } from 'astro/config'; +import { defineConfig } from "astro/config"; -import node from '@astrojs/node'; +import node from "@astrojs/node"; import cloudflare from "@astrojs/cloudflare"; const buildEnv = process.env.BUILD_ENV; @@ -11,38 +11,39 @@ const buildConfig = { split: true }; if (buildEnv === "production") { console.log("Building for Cloudflare adapter"); adapter = cloudflare({ - mode: "advanced", + imageService: "passthrough", routes: { - strategy: "include", - include: ["/*"], - exclude: [ - "/content/*", - "/script.js", - "/search_index.json", - "/~pagelist.json", - "/styles/gmod.css", - "/wiki/files/*", - "/rubat/*", - "/lewis/*", - "/garry/*", - "/fonts/*", - "/*.webp", - "/cdn-cgi/*", - "/last_build.txt", - ] - } + extend: { + include: [{ pattern: "/*" }], + exclude: [ + { pattern: "/content/*" }, + { pattern: "/script.js" }, + { pattern: "/search_index.json" }, + { pattern: "/~pagelist.json" }, + { pattern: "/styles/gmod.css" }, + { pattern: "/wiki/files/*" }, + { pattern: "/rubat/*" }, + { pattern: "/lewis/*" }, + { pattern: "/garry/*" }, + { pattern: "/fonts/*" }, + { pattern: "/*.webp" }, + { pattern: "/cdn-cgi/*" }, + { pattern: "/last_build.txt" }, + ], + }, + }, }); } else { console.log("Building for Node adapter"); adapter = node({ mode: "standalone" }); - + buildConfig.rollupOptions = { - external: ["fs", "node:fs", "path", "node:path"] - } + external: ["fs", "node:fs", "path", "node:path"], + }; } export default defineConfig({ build: buildConfig, output: "server", - adapter: adapter + adapter: adapter, }); diff --git a/build/modules/download_caches.sh b/build/modules/download_caches.sh new file mode 100755 index 0000000..6ef6fb0 --- /dev/null +++ b/build/modules/download_caches.sh @@ -0,0 +1,4 @@ +#!/bin/bash +(curl --location --remote-name https://storage.gmodwiki.com/build_cache.zip && unzip -q build_cache.zip && rm -v build_cache.zip) & +(curl --location --remote-name https://storage.gmodwiki.com/public_cache.zip && unzip -q public_cache.zip && rm -v public_cache.zip) & +wait diff --git a/build/modules/upload_caches.sh b/build/modules/upload_caches.sh index e3b3d7b..7a1a5bd 100755 --- a/build/modules/upload_caches.sh +++ b/build/modules/upload_caches.sh @@ -1,3 +1,5 @@ +#!/bin/bash + # Used to seed the R2 cache with the result of a local build (for when we need to clear out R2) zip --recurse-paths -9 --quiet public_cache.zip ./public & zip --recurse-paths -9 --quiet build_cache.zip ./build/cache & diff --git a/package-lock.json b/package-lock.json index 07d28a1..970e1ea 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,25 +8,24 @@ "name": "gmodwiki", "version": "0.0.1", "dependencies": { - "html-minifier-next": "^2.1.6" + "@astrojs/cloudflare": "^12.6.9", + "@astrojs/node": "^9.4.4" }, "devDependencies": { "@astrojs/check": "^0.9.4", - "@astrojs/cloudflare": "^12.6.9", "@astrojs/internal-helpers": "^0.7.3", - "@astrojs/node": "^9.4.4", "@cloudflare/workers-types": "^4.20240129.0", - "@types/cheerio": "^1.0.0", "@types/html-minifier": "^4.0.5", "@types/minify": "^9.1.4", - "@types/node": "^24.7.0", + "@types/node": "^22.0.0", "astro": "^5.14.1", "bottleneck": "^2.19.5", "chalk": "^5.3.0", - "cheerio": "^1.0.0-rc.12", + "cheerio": "^1.1.2", "gmod-wiki-scraper": "github:NullEnt1ty/gmod-wiki-scraper", + "html-minifier-next": "^2.1.6", "ky": "^1.2.0", - "sharp": "^0.33.2", + "sharp": "^0.34.4", "ts-node": "^10.9.2", "typescript": "^5.3.3", "wrangler": "^4.42.0" @@ -55,7 +54,6 @@ "version": "12.6.9", "resolved": "https://registry.npmjs.org/@astrojs/cloudflare/-/cloudflare-12.6.9.tgz", "integrity": "sha512-9LPTxQ484rOL0BqOodY+itXmD901YBdalGrah+V5e0k6r5ClRB2O9WSamDJxDt8o3Wq21ulJAbddMP3yKgsXCw==", - "dev": true, "license": "MIT", "dependencies": { "@astrojs/internal-helpers": "0.7.3", @@ -73,7 +71,6 @@ "version": "2.7.3", "resolved": "https://registry.npmjs.org/@cloudflare/unenv-preset/-/unenv-preset-2.7.3.tgz", "integrity": "sha512-tsQQagBKjvpd9baa6nWVIv399ejiqcrUBBW6SZx6Z22+ymm+Odv5+cFimyuCsD/fC1fQTwfRmwXBNpzvHSeGCw==", - "dev": true, "license": "MIT OR Apache-2.0", "peerDependencies": { "unenv": "2.0.0-rc.21", @@ -92,7 +89,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -109,7 +105,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -126,7 +121,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -143,7 +137,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -160,7 +153,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -170,1493 +162,1328 @@ "node": ">=16" } }, - "node_modules/@astrojs/cloudflare/node_modules/@esbuild/aix-ppc64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", - "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", - "cpu": [ - "ppc64" - ], - "dev": true, + "node_modules/@astrojs/cloudflare/node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "license": "MIT", - "optional": true, - "os": [ - "aix" - ], + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": ">=18" + "node": ">=0.4.0" } }, - "node_modules/@astrojs/cloudflare/node_modules/@esbuild/android-arm": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz", - "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", - "cpu": [ - "arm" - ], - "dev": true, + "node_modules/@astrojs/cloudflare/node_modules/acorn-walk": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", "license": "MIT", - "optional": true, - "os": [ - "android" - ], "engines": { - "node": ">=18" + "node": ">=0.4.0" } }, - "node_modules/@astrojs/cloudflare/node_modules/@esbuild/android-arm64": { + "node_modules/@astrojs/cloudflare/node_modules/esbuild": { "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz", - "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", - "cpu": [ - "arm64" - ], - "dev": true, + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", + "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", + "hasInstallScript": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "bin": { + "esbuild": "bin/esbuild" + }, "engines": { "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.4", + "@esbuild/android-arm": "0.25.4", + "@esbuild/android-arm64": "0.25.4", + "@esbuild/android-x64": "0.25.4", + "@esbuild/darwin-arm64": "0.25.4", + "@esbuild/darwin-x64": "0.25.4", + "@esbuild/freebsd-arm64": "0.25.4", + "@esbuild/freebsd-x64": "0.25.4", + "@esbuild/linux-arm": "0.25.4", + "@esbuild/linux-arm64": "0.25.4", + "@esbuild/linux-ia32": "0.25.4", + "@esbuild/linux-loong64": "0.25.4", + "@esbuild/linux-mips64el": "0.25.4", + "@esbuild/linux-ppc64": "0.25.4", + "@esbuild/linux-riscv64": "0.25.4", + "@esbuild/linux-s390x": "0.25.4", + "@esbuild/linux-x64": "0.25.4", + "@esbuild/netbsd-arm64": "0.25.4", + "@esbuild/netbsd-x64": "0.25.4", + "@esbuild/openbsd-arm64": "0.25.4", + "@esbuild/openbsd-x64": "0.25.4", + "@esbuild/sunos-x64": "0.25.4", + "@esbuild/win32-arm64": "0.25.4", + "@esbuild/win32-ia32": "0.25.4", + "@esbuild/win32-x64": "0.25.4" } }, - "node_modules/@astrojs/cloudflare/node_modules/@esbuild/android-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz", - "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/@astrojs/cloudflare/node_modules/miniflare": { + "version": "4.20250906.2", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-4.20250906.2.tgz", + "integrity": "sha512-SXGv8Rdd91b6UXZ5eW3rde/gSJM6WVLItMNFV7u9axUVhACvpT4CB5p80OBfi2OOsGfOuFQ6M6s8tMxJbzioVw==", "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "@cspotcode/source-map-support": "0.8.1", + "acorn": "8.14.0", + "acorn-walk": "8.3.2", + "exit-hook": "2.2.1", + "glob-to-regexp": "0.4.1", + "sharp": "^0.33.5", + "stoppable": "1.1.0", + "undici": "7.14.0", + "workerd": "1.20250906.0", + "ws": "8.18.0", + "youch": "4.1.0-beta.10", + "zod": "3.22.3" + }, + "bin": { + "miniflare": "bootstrap.js" + }, "engines": { - "node": ">=18" + "node": ">=18.0.0" } }, - "node_modules/@astrojs/cloudflare/node_modules/@esbuild/darwin-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", - "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "node_modules/@astrojs/cloudflare/node_modules/sharp": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", + "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.3" + }, "engines": { - "node": ">=18" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.5", + "@img/sharp-darwin-x64": "0.33.5", + "@img/sharp-libvips-darwin-arm64": "1.0.4", + "@img/sharp-libvips-darwin-x64": "1.0.4", + "@img/sharp-libvips-linux-arm": "1.0.5", + "@img/sharp-libvips-linux-arm64": "1.0.4", + "@img/sharp-libvips-linux-s390x": "1.0.4", + "@img/sharp-libvips-linux-x64": "1.0.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", + "@img/sharp-libvips-linuxmusl-x64": "1.0.4", + "@img/sharp-linux-arm": "0.33.5", + "@img/sharp-linux-arm64": "0.33.5", + "@img/sharp-linux-s390x": "0.33.5", + "@img/sharp-linux-x64": "0.33.5", + "@img/sharp-linuxmusl-arm64": "0.33.5", + "@img/sharp-linuxmusl-x64": "0.33.5", + "@img/sharp-wasm32": "0.33.5", + "@img/sharp-win32-ia32": "0.33.5", + "@img/sharp-win32-x64": "0.33.5" } }, - "node_modules/@astrojs/cloudflare/node_modules/@esbuild/darwin-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz", - "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/@astrojs/cloudflare/node_modules/undici": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.14.0.tgz", + "integrity": "sha512-Vqs8HTzjpQXZeXdpsfChQTlafcMQaaIwnGwLam1wudSSjlJeQ3bw1j+TLPePgrCnCpUXx7Ba5Pdpf5OBih62NQ==", "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": ">=18" + "node": ">=20.18.1" } }, - "node_modules/@astrojs/cloudflare/node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz", - "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "node_modules/@astrojs/cloudflare/node_modules/workerd": { + "version": "1.20250906.0", + "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20250906.0.tgz", + "integrity": "sha512-ryVyEaqXPPsr/AxccRmYZZmDAkfQVjhfRqrNTlEeN8aftBk6Ca1u7/VqmfOayjCXrA+O547TauebU+J3IpvFXw==", + "hasInstallScript": true, + "license": "Apache-2.0", + "bin": { + "workerd": "bin/workerd" + }, "engines": { - "node": ">=18" + "node": ">=16" + }, + "optionalDependencies": { + "@cloudflare/workerd-darwin-64": "1.20250906.0", + "@cloudflare/workerd-darwin-arm64": "1.20250906.0", + "@cloudflare/workerd-linux-64": "1.20250906.0", + "@cloudflare/workerd-linux-arm64": "1.20250906.0", + "@cloudflare/workerd-windows-64": "1.20250906.0" } }, - "node_modules/@astrojs/cloudflare/node_modules/@esbuild/freebsd-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz", - "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "node_modules/@astrojs/cloudflare/node_modules/wrangler": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-4.37.0.tgz", + "integrity": "sha512-W8IbQohQbUHFn4Hz2kh8gi0SdyFV/jyi9Uus+WrTz0F0Dc9W5qKPCjLbxibeE53+YPHyoI25l65O7nSlwX+Z6Q==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@cloudflare/kv-asset-handler": "0.4.0", + "@cloudflare/unenv-preset": "2.7.3", + "blake3-wasm": "2.1.5", + "esbuild": "0.25.4", + "miniflare": "4.20250906.2", + "path-to-regexp": "6.3.0", + "unenv": "2.0.0-rc.21", + "workerd": "1.20250906.0" + }, + "bin": { + "wrangler": "bin/wrangler.js", + "wrangler2": "bin/wrangler.js" + }, "engines": { - "node": ">=18" - } - }, - "node_modules/@astrojs/cloudflare/node_modules/@esbuild/linux-arm": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz", - "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", - "cpu": [ - "arm" - ], - "dev": true, + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@cloudflare/workers-types": "^4.20250906.0" + }, + "peerDependenciesMeta": { + "@cloudflare/workers-types": { + "optional": true + } + } + }, + "node_modules/@astrojs/cloudflare/node_modules/zod": { + "version": "3.22.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.3.tgz", + "integrity": "sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "funding": { + "url": "https://github.com/sponsors/colinhacks" } }, - "node_modules/@astrojs/cloudflare/node_modules/@esbuild/linux-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz", - "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", - "cpu": [ - "arm64" - ], + "node_modules/@astrojs/compiler": { + "version": "2.13.0", + "license": "MIT" + }, + "node_modules/@astrojs/internal-helpers": { + "version": "0.7.3", + "license": "MIT" + }, + "node_modules/@astrojs/language-server": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/@astrojs/language-server/-/language-server-2.15.4.tgz", + "integrity": "sha512-JivzASqTPR2bao9BWsSc/woPHH7OGSGc9aMxXL4U6egVTqBycB3ZHdBJPuOCVtcGLrzdWTosAqVPz1BVoxE0+A==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@astrojs/compiler": "^2.10.3", + "@astrojs/yaml2ts": "^0.2.2", + "@jridgewell/sourcemap-codec": "^1.4.15", + "@volar/kit": "~2.4.7", + "@volar/language-core": "~2.4.7", + "@volar/language-server": "~2.4.7", + "@volar/language-service": "~2.4.7", + "fast-glob": "^3.2.12", + "muggle-string": "^0.4.1", + "volar-service-css": "0.0.62", + "volar-service-emmet": "0.0.62", + "volar-service-html": "0.0.62", + "volar-service-prettier": "0.0.62", + "volar-service-typescript": "0.0.62", + "volar-service-typescript-twoslash-queries": "0.0.62", + "volar-service-yaml": "0.0.62", + "vscode-html-languageservice": "^5.2.0", + "vscode-uri": "^3.0.8" + }, + "bin": { + "astro-ls": "bin/nodeServer.js" + }, + "peerDependencies": { + "prettier": "^3.0.0", + "prettier-plugin-astro": ">=0.11.0" + }, + "peerDependenciesMeta": { + "prettier": { + "optional": true + }, + "prettier-plugin-astro": { + "optional": true + } } }, - "node_modules/@astrojs/cloudflare/node_modules/@esbuild/linux-ia32": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz", - "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", - "cpu": [ - "ia32" - ], - "dev": true, + "node_modules/@astrojs/markdown-remark": { + "version": "6.3.7", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@astrojs/internal-helpers": "0.7.3", + "@astrojs/prism": "3.3.0", + "github-slugger": "^2.0.0", + "hast-util-from-html": "^2.0.3", + "hast-util-to-text": "^4.0.2", + "import-meta-resolve": "^4.2.0", + "js-yaml": "^4.1.0", + "mdast-util-definitions": "^6.0.0", + "rehype-raw": "^7.0.0", + "rehype-stringify": "^10.0.1", + "remark-gfm": "^4.0.1", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.2", + "remark-smartypants": "^3.0.2", + "shiki": "^3.12.2", + "smol-toml": "^1.4.2", + "unified": "^11.0.5", + "unist-util-remove-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "unist-util-visit-parents": "^6.0.1", + "vfile": "^6.0.3" } }, - "node_modules/@astrojs/cloudflare/node_modules/@esbuild/linux-loong64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz", - "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", - "cpu": [ - "loong64" - ], - "dev": true, + "node_modules/@astrojs/node": { + "version": "9.4.4", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@astrojs/internal-helpers": "0.7.3", + "send": "^1.2.0", + "server-destroy": "^1.0.1" + }, + "peerDependencies": { + "astro": "^5.7.0" } }, - "node_modules/@astrojs/cloudflare/node_modules/@esbuild/linux-mips64el": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz", - "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", - "cpu": [ - "mips64el" - ], - "dev": true, + "node_modules/@astrojs/prism": { + "version": "3.3.0", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "prismjs": "^1.30.0" + }, "engines": { - "node": ">=18" + "node": "18.20.8 || ^20.3.0 || >=22.0.0" } }, - "node_modules/@astrojs/cloudflare/node_modules/@esbuild/linux-ppc64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz", - "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", - "cpu": [ - "ppc64" - ], - "dev": true, + "node_modules/@astrojs/telemetry": { + "version": "3.3.0", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "ci-info": "^4.2.0", + "debug": "^4.4.0", + "dlv": "^1.1.3", + "dset": "^3.1.4", + "is-docker": "^3.0.0", + "is-wsl": "^3.1.0", + "which-pm-runs": "^1.1.0" + }, "engines": { - "node": ">=18" + "node": "18.20.8 || ^20.3.0 || >=22.0.0" } }, - "node_modules/@astrojs/cloudflare/node_modules/@esbuild/linux-riscv64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz", - "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", - "cpu": [ - "riscv64" - ], + "node_modules/@astrojs/underscore-redirects": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/@astrojs/yaml2ts": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@astrojs/yaml2ts/-/yaml2ts-0.2.2.tgz", + "integrity": "sha512-GOfvSr5Nqy2z5XiwqTouBBpy5FyI6DEe+/g/Mk5am9SjILN1S5fOEvYK0GuWHg98yS/dobP4m8qyqw/URW35fQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "yaml": "^2.5.0" } }, - "node_modules/@astrojs/cloudflare/node_modules/@esbuild/linux-s390x": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz", - "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", - "cpu": [ - "s390x" - ], - "dev": true, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">=6.9.0" } }, - "node_modules/@astrojs/cloudflare/node_modules/@esbuild/linux-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", - "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">=6.9.0" } }, - "node_modules/@astrojs/cloudflare/node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz", - "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/@babel/parser": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", + "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.4" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", + "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@capsizecss/unpack": { + "version": "2.4.0", + "license": "MIT", + "dependencies": { + "blob-to-buffer": "^1.2.8", + "cross-fetch": "^3.0.4", + "fontkit": "^2.0.2" + } + }, + "node_modules/@cloudflare/kv-asset-handler": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.4.0.tgz", + "integrity": "sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "mime": "^3.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@cloudflare/unenv-preset": { + "version": "2.7.7", + "resolved": "https://registry.npmjs.org/@cloudflare/unenv-preset/-/unenv-preset-2.7.7.tgz", + "integrity": "sha512-HtZuh166y0Olbj9bqqySckz0Rw9uHjggJeoGbDx5x+sgezBXlxO6tQSig2RZw5tgObF8mWI8zaPvQMkQZtAODw==", + "dev": true, + "license": "MIT OR Apache-2.0", + "peerDependencies": { + "unenv": "2.0.0-rc.21", + "workerd": "^1.20250927.0" + }, + "peerDependenciesMeta": { + "workerd": { + "optional": true + } + } + }, + "node_modules/@cloudflare/workerd-darwin-64": { + "version": "1.20251004.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20251004.0.tgz", + "integrity": "sha512-gL6/b7NXCum95e77n+CLyDzmfV14ZAsyoWWHoWsi2Nt89ngl8xB7aW6IQQPZPjxvtSth5y/peFCIbmR55DxFCg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", "optional": true, "os": [ - "netbsd" + "darwin" ], "engines": { - "node": ">=18" + "node": ">=16" } }, - "node_modules/@astrojs/cloudflare/node_modules/@esbuild/netbsd-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz", - "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", + "node_modules/@cloudflare/workerd-darwin-arm64": { + "version": "1.20251004.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20251004.0.tgz", + "integrity": "sha512-w3oE8PtYUAOyJCYLXIdmLuCmRrn1dEqB91u1sZs+MbLxzTNrvRwNaiioLJBHhpIeg3Oq2kyn3+idg0FdvgDLTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-linux-64": { + "version": "1.20251004.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20251004.0.tgz", + "integrity": "sha512-PZxHuL6p2bxDI1ozBguKFO71AySTy0MzXiHePiubBuX+Mqa8sCmdAbWbp3QPIoErZ9eBsvw9UCNeSyEtM9H/iw==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", + "license": "Apache-2.0", "optional": true, "os": [ - "netbsd" + "linux" ], "engines": { - "node": ">=18" + "node": ">=16" } }, - "node_modules/@astrojs/cloudflare/node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz", - "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", + "node_modules/@cloudflare/workerd-linux-arm64": { + "version": "1.20251004.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20251004.0.tgz", + "integrity": "sha512-ePCfH9W2ea+YhVL+FhXjWRV9vGWj/zshO3ugKm/qCO6OXAL1h0NPYCe55iZXFKwngwQH82H6Fv8UROaxDaGZ1Q==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", + "license": "Apache-2.0", "optional": true, "os": [ - "openbsd" + "linux" ], "engines": { - "node": ">=18" + "node": ">=16" } }, - "node_modules/@astrojs/cloudflare/node_modules/@esbuild/openbsd-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz", - "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", + "node_modules/@cloudflare/workerd-windows-64": { + "version": "1.20251004.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20251004.0.tgz", + "integrity": "sha512-sRuSls6kH6C2MG+xWoCi7fuV0SG26dB8+Cc2b59Pc0dzJRThOeNXbwpiSIZ4BQFGUudGlbCRwCpzIuPW3JxQLg==", "cpu": [ "x64" ], "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workers-types": { + "version": "4.20251004.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20251004.0.tgz", + "integrity": "sha512-FkTBHEyOBwphbW4SLQ2XLCgNntD2wz0v1Si7NwJeN0JAPW/39/w6zhsKy3rsh+203tuSfBgsoP34+Os4RaySOw==", + "license": "MIT OR Apache-2.0" + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@emmetio/abbreviation": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@emmetio/abbreviation/-/abbreviation-2.3.3.tgz", + "integrity": "sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@emmetio/scanner": "^1.0.4" + } + }, + "node_modules/@emmetio/css-abbreviation": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@emmetio/css-abbreviation/-/css-abbreviation-2.1.8.tgz", + "integrity": "sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@emmetio/scanner": "^1.0.4" + } + }, + "node_modules/@emmetio/css-parser": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emmetio/css-parser/-/css-parser-0.4.0.tgz", + "integrity": "sha512-z7wkxRSZgrQHXVzObGkXG+Vmj3uRlpM11oCZ9pbaz0nFejvCDmAiNDpY75+wgXOcffKpj4rzGtwGaZxfJKsJxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@emmetio/stream-reader": "^2.2.0", + "@emmetio/stream-reader-utils": "^0.1.0" + } + }, + "node_modules/@emmetio/html-matcher": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@emmetio/html-matcher/-/html-matcher-1.3.0.tgz", + "integrity": "sha512-NTbsvppE5eVyBMuyGfVu2CRrLvo7J4YHb6t9sBFLyY03WYhXET37qA4zOYUjBWFCRHO7pS1B9khERtY0f5JXPQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@emmetio/scanner": "^1.0.0" + } + }, + "node_modules/@emmetio/scanner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@emmetio/scanner/-/scanner-1.0.4.tgz", + "integrity": "sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@emmetio/stream-reader": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@emmetio/stream-reader/-/stream-reader-2.2.0.tgz", + "integrity": "sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@emmetio/stream-reader-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@emmetio/stream-reader-utils/-/stream-reader-utils-0.1.0.tgz", + "integrity": "sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@emnapi/runtime": { + "version": "1.5.0", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", + "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", + "cpu": [ + "ppc64" + ], "license": "MIT", "optional": true, "os": [ - "openbsd" + "aix" ], "engines": { "node": ">=18" } }, - "node_modules/@astrojs/cloudflare/node_modules/@esbuild/sunos-x64": { + "node_modules/@esbuild/android-arm": { "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz", - "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz", + "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", "cpu": [ - "x64" + "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ - "sunos" + "android" ], "engines": { "node": ">=18" } }, - "node_modules/@astrojs/cloudflare/node_modules/@esbuild/win32-arm64": { + "node_modules/@esbuild/android-arm64": { "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz", - "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz", + "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ - "win32" + "android" ], "engines": { "node": ">=18" } }, - "node_modules/@astrojs/cloudflare/node_modules/@esbuild/win32-ia32": { + "node_modules/@esbuild/android-x64": { "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz", - "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz", + "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", "cpu": [ - "ia32" + "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ - "win32" + "android" ], "engines": { "node": ">=18" } }, - "node_modules/@astrojs/cloudflare/node_modules/@esbuild/win32-x64": { + "node_modules/@esbuild/darwin-arm64": { "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz", - "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", + "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", "cpu": [ - "x64" + "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ - "win32" + "darwin" ], "engines": { "node": ">=18" } }, - "node_modules/@astrojs/cloudflare/node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "dev": true, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz", + "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", + "cpu": [ + "x64" + ], "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=0.4.0" + "node": ">=18" } }, - "node_modules/@astrojs/cloudflare/node_modules/acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", - "dev": true, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz", + "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", + "cpu": [ + "arm64" + ], "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=0.4.0" + "node": ">=18" } }, - "node_modules/@astrojs/cloudflare/node_modules/esbuild": { + "node_modules/@esbuild/freebsd-x64": { "version": "0.25.4", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", - "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", - "dev": true, - "hasInstallScript": true, + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz", + "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", + "cpu": [ + "x64" + ], "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.4", - "@esbuild/android-arm": "0.25.4", - "@esbuild/android-arm64": "0.25.4", - "@esbuild/android-x64": "0.25.4", - "@esbuild/darwin-arm64": "0.25.4", - "@esbuild/darwin-x64": "0.25.4", - "@esbuild/freebsd-arm64": "0.25.4", - "@esbuild/freebsd-x64": "0.25.4", - "@esbuild/linux-arm": "0.25.4", - "@esbuild/linux-arm64": "0.25.4", - "@esbuild/linux-ia32": "0.25.4", - "@esbuild/linux-loong64": "0.25.4", - "@esbuild/linux-mips64el": "0.25.4", - "@esbuild/linux-ppc64": "0.25.4", - "@esbuild/linux-riscv64": "0.25.4", - "@esbuild/linux-s390x": "0.25.4", - "@esbuild/linux-x64": "0.25.4", - "@esbuild/netbsd-arm64": "0.25.4", - "@esbuild/netbsd-x64": "0.25.4", - "@esbuild/openbsd-arm64": "0.25.4", - "@esbuild/openbsd-x64": "0.25.4", - "@esbuild/sunos-x64": "0.25.4", - "@esbuild/win32-arm64": "0.25.4", - "@esbuild/win32-ia32": "0.25.4", - "@esbuild/win32-x64": "0.25.4" } }, - "node_modules/@astrojs/cloudflare/node_modules/miniflare": { - "version": "4.20250906.2", - "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-4.20250906.2.tgz", - "integrity": "sha512-SXGv8Rdd91b6UXZ5eW3rde/gSJM6WVLItMNFV7u9axUVhACvpT4CB5p80OBfi2OOsGfOuFQ6M6s8tMxJbzioVw==", - "dev": true, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz", + "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", + "cpu": [ + "arm" + ], "license": "MIT", - "dependencies": { - "@cspotcode/source-map-support": "0.8.1", - "acorn": "8.14.0", - "acorn-walk": "8.3.2", - "exit-hook": "2.2.1", - "glob-to-regexp": "0.4.1", - "sharp": "^0.33.5", - "stoppable": "1.1.0", - "undici": "7.14.0", - "workerd": "1.20250906.0", - "ws": "8.18.0", - "youch": "4.1.0-beta.10", - "zod": "3.22.3" - }, - "bin": { - "miniflare": "bootstrap.js" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=18.0.0" + "node": ">=18" } }, - "node_modules/@astrojs/cloudflare/node_modules/undici": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.14.0.tgz", - "integrity": "sha512-Vqs8HTzjpQXZeXdpsfChQTlafcMQaaIwnGwLam1wudSSjlJeQ3bw1j+TLPePgrCnCpUXx7Ba5Pdpf5OBih62NQ==", - "dev": true, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz", + "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", + "cpu": [ + "arm64" + ], "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=20.18.1" + "node": ">=18" } }, - "node_modules/@astrojs/cloudflare/node_modules/workerd": { - "version": "1.20250906.0", - "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20250906.0.tgz", - "integrity": "sha512-ryVyEaqXPPsr/AxccRmYZZmDAkfQVjhfRqrNTlEeN8aftBk6Ca1u7/VqmfOayjCXrA+O547TauebU+J3IpvFXw==", - "dev": true, - "hasInstallScript": true, - "license": "Apache-2.0", - "bin": { - "workerd": "bin/workerd" - }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz", + "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=16" - }, - "optionalDependencies": { - "@cloudflare/workerd-darwin-64": "1.20250906.0", - "@cloudflare/workerd-darwin-arm64": "1.20250906.0", - "@cloudflare/workerd-linux-64": "1.20250906.0", - "@cloudflare/workerd-linux-arm64": "1.20250906.0", - "@cloudflare/workerd-windows-64": "1.20250906.0" + "node": ">=18" } }, - "node_modules/@astrojs/cloudflare/node_modules/wrangler": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-4.37.0.tgz", - "integrity": "sha512-W8IbQohQbUHFn4Hz2kh8gi0SdyFV/jyi9Uus+WrTz0F0Dc9W5qKPCjLbxibeE53+YPHyoI25l65O7nSlwX+Z6Q==", - "dev": true, - "license": "MIT OR Apache-2.0", - "dependencies": { - "@cloudflare/kv-asset-handler": "0.4.0", - "@cloudflare/unenv-preset": "2.7.3", - "blake3-wasm": "2.1.5", - "esbuild": "0.25.4", - "miniflare": "4.20250906.2", - "path-to-regexp": "6.3.0", - "unenv": "2.0.0-rc.21", - "workerd": "1.20250906.0" - }, - "bin": { - "wrangler": "bin/wrangler.js", - "wrangler2": "bin/wrangler.js" - }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz", + "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=18.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@cloudflare/workers-types": "^4.20250906.0" - }, - "peerDependenciesMeta": { - "@cloudflare/workers-types": { - "optional": true - } + "node": ">=18" } }, - "node_modules/@astrojs/cloudflare/node_modules/zod": { - "version": "3.22.3", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.3.tgz", - "integrity": "sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==", - "dev": true, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz", + "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", + "cpu": [ + "mips64el" + ], "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@astrojs/compiler": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.13.0.tgz", - "integrity": "sha512-mqVORhUJViA28fwHYaWmsXSzLO9osbdZ5ImUfxBarqsYdMlPbqAqGJCxsNzvppp1BEzc1mJNjOVvQqeDN8Vspw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@astrojs/internal-helpers": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.7.3.tgz", - "integrity": "sha512-6Pl0bQEIChuW5wqN7jdKrzWfCscW2rG/Cz+fzt4PhSQX2ivBpnhXgFUCs0M3DCYvjYHnPVG2W36X5rmFjZ62sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@astrojs/language-server": { - "version": "2.15.4", - "resolved": "https://registry.npmjs.org/@astrojs/language-server/-/language-server-2.15.4.tgz", - "integrity": "sha512-JivzASqTPR2bao9BWsSc/woPHH7OGSGc9aMxXL4U6egVTqBycB3ZHdBJPuOCVtcGLrzdWTosAqVPz1BVoxE0+A==", - "dev": true, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz", + "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", + "cpu": [ + "ppc64" + ], "license": "MIT", - "dependencies": { - "@astrojs/compiler": "^2.10.3", - "@astrojs/yaml2ts": "^0.2.2", - "@jridgewell/sourcemap-codec": "^1.4.15", - "@volar/kit": "~2.4.7", - "@volar/language-core": "~2.4.7", - "@volar/language-server": "~2.4.7", - "@volar/language-service": "~2.4.7", - "fast-glob": "^3.2.12", - "muggle-string": "^0.4.1", - "volar-service-css": "0.0.62", - "volar-service-emmet": "0.0.62", - "volar-service-html": "0.0.62", - "volar-service-prettier": "0.0.62", - "volar-service-typescript": "0.0.62", - "volar-service-typescript-twoslash-queries": "0.0.62", - "volar-service-yaml": "0.0.62", - "vscode-html-languageservice": "^5.2.0", - "vscode-uri": "^3.0.8" - }, - "bin": { - "astro-ls": "bin/nodeServer.js" - }, - "peerDependencies": { - "prettier": "^3.0.0", - "prettier-plugin-astro": ">=0.11.0" - }, - "peerDependenciesMeta": { - "prettier": { - "optional": true - }, - "prettier-plugin-astro": { - "optional": true - } - } - }, - "node_modules/@astrojs/markdown-remark": { - "version": "6.3.7", - "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.3.7.tgz", - "integrity": "sha512-KXGdq6/BC18doBCYXp08alHlWChH0hdD2B1qv9wIyOHbvwI5K6I7FhSta8dq1hBQNdun8YkKPR013D/Hm8xd0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@astrojs/internal-helpers": "0.7.3", - "@astrojs/prism": "3.3.0", - "github-slugger": "^2.0.0", - "hast-util-from-html": "^2.0.3", - "hast-util-to-text": "^4.0.2", - "import-meta-resolve": "^4.2.0", - "js-yaml": "^4.1.0", - "mdast-util-definitions": "^6.0.0", - "rehype-raw": "^7.0.0", - "rehype-stringify": "^10.0.1", - "remark-gfm": "^4.0.1", - "remark-parse": "^11.0.0", - "remark-rehype": "^11.1.2", - "remark-smartypants": "^3.0.2", - "shiki": "^3.12.2", - "smol-toml": "^1.4.2", - "unified": "^11.0.5", - "unist-util-remove-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "unist-util-visit-parents": "^6.0.1", - "vfile": "^6.0.3" - } - }, - "node_modules/@astrojs/node": { - "version": "9.4.4", - "resolved": "https://registry.npmjs.org/@astrojs/node/-/node-9.4.4.tgz", - "integrity": "sha512-zQelZmeejnpw3Y5cj2gCyAZ6HT7tjgsWLZH8k40s3bTaT6lqJXlPtKJeIsuEcod21vZLODqBEQeu0CWrWm01EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@astrojs/internal-helpers": "0.7.3", - "send": "^1.2.0", - "server-destroy": "^1.0.1" - }, - "peerDependencies": { - "astro": "^5.7.0" - } - }, - "node_modules/@astrojs/prism": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.3.0.tgz", - "integrity": "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prismjs": "^1.30.0" - }, - "engines": { - "node": "18.20.8 || ^20.3.0 || >=22.0.0" - } - }, - "node_modules/@astrojs/telemetry": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.0.tgz", - "integrity": "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ci-info": "^4.2.0", - "debug": "^4.4.0", - "dlv": "^1.1.3", - "dset": "^3.1.4", - "is-docker": "^3.0.0", - "is-wsl": "^3.1.0", - "which-pm-runs": "^1.1.0" - }, - "engines": { - "node": "18.20.8 || ^20.3.0 || >=22.0.0" - } - }, - "node_modules/@astrojs/underscore-redirects": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@astrojs/underscore-redirects/-/underscore-redirects-1.0.0.tgz", - "integrity": "sha512-qZxHwVnmb5FXuvRsaIGaqWgnftjCuMY+GSbaVZdBmE4j8AfgPqKPxYp8SUERyJcjpKCEmO4wD6ybuGH8A2kVRQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@astrojs/yaml2ts": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@astrojs/yaml2ts/-/yaml2ts-0.2.2.tgz", - "integrity": "sha512-GOfvSr5Nqy2z5XiwqTouBBpy5FyI6DEe+/g/Mk5am9SjILN1S5fOEvYK0GuWHg98yS/dobP4m8qyqw/URW35fQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yaml": "^2.5.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", - "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.28.4" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", - "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@capsizecss/unpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-2.4.0.tgz", - "integrity": "sha512-GrSU71meACqcmIUxPYOJvGKF0yryjN/L1aCuE9DViCTJI7bfkjgYDPD1zbNDcINJwSSP6UaBZY9GAbYDO7re0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "blob-to-buffer": "^1.2.8", - "cross-fetch": "^3.0.4", - "fontkit": "^2.0.2" - } - }, - "node_modules/@cloudflare/kv-asset-handler": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.4.0.tgz", - "integrity": "sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==", - "dev": true, - "license": "MIT OR Apache-2.0", - "dependencies": { - "mime": "^3.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@cloudflare/unenv-preset": { - "version": "2.7.6", - "resolved": "https://registry.npmjs.org/@cloudflare/unenv-preset/-/unenv-preset-2.7.6.tgz", - "integrity": "sha512-ykG2nd3trk6jbknRCH69xL3RpGLLbKCrbTbWSOvKEq7s4jH06yLrQlRr/q9IU+dK9p1JY1EXqhFK7VG5KqhzmQ==", - "dev": true, - "license": "MIT OR Apache-2.0", - "peerDependencies": { - "unenv": "2.0.0-rc.21", - "workerd": "^1.20250927.0" - }, - "peerDependenciesMeta": { - "workerd": { - "optional": true - } + "node": ">=18" } }, - "node_modules/@cloudflare/workerd-darwin-64": { - "version": "1.20251001.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20251001.0.tgz", - "integrity": "sha512-y1ST/cCscaRewWRnsHZdWbgiLJbki5UMGd0hMo/FLqjlztwPeDgQ5CGm5jMiCDdw/IBCpWxEukftPYR34rWNog==", + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz", + "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", "cpu": [ - "x64" + "riscv64" ], - "dev": true, - "license": "Apache-2.0", + "license": "MIT", "optional": true, "os": [ - "darwin" + "linux" ], "engines": { - "node": ">=16" + "node": ">=18" } }, - "node_modules/@cloudflare/workerd-darwin-arm64": { - "version": "1.20251001.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20251001.0.tgz", - "integrity": "sha512-+z4QHHZ/Yix82zLFYS+ZS2UV09IENFPwDCEKUWfnrM9Km2jOOW3Ua4hJNob1EgQUYs8fFZo7k5O/tpwxMsSbbQ==", + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz", + "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", "cpu": [ - "arm64" + "s390x" ], - "dev": true, - "license": "Apache-2.0", + "license": "MIT", "optional": true, "os": [ - "darwin" + "linux" ], "engines": { - "node": ">=16" + "node": ">=18" } }, - "node_modules/@cloudflare/workerd-linux-64": { - "version": "1.20251001.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20251001.0.tgz", - "integrity": "sha512-hGS+O2V9Mm2XjJUaB9ZHMA5asDUaDjKko42e+accbew0PQR7zrAl1afdII6hMqCLV4tk4GAjvhv281pN4g48rg==", + "node_modules/@esbuild/linux-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", + "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", "cpu": [ "x64" ], - "dev": true, - "license": "Apache-2.0", + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=16" + "node": ">=18" } }, - "node_modules/@cloudflare/workerd-linux-arm64": { - "version": "1.20251001.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20251001.0.tgz", - "integrity": "sha512-QYaMK+pRgt28N7CX1JlJ+ToegJF9LxzqdT7MjWqPgVj9D2WTyIhBVYl3wYjJRcgOlnn+DRt42+li4T64CPEeuA==", + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz", + "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", "cpu": [ "arm64" ], - "dev": true, - "license": "Apache-2.0", + "license": "MIT", "optional": true, "os": [ - "linux" + "netbsd" ], "engines": { - "node": ">=16" + "node": ">=18" } }, - "node_modules/@cloudflare/workerd-windows-64": { - "version": "1.20251001.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20251001.0.tgz", - "integrity": "sha512-ospnDR/FlyRvrv9DSHuxDAXmzEBLDUiAHQrQHda1iUH9HqxnNQ8giz9VlPfq7NIRc7bQ1ZdIYPGLJOY4Q366Ng==", + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz", + "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", "cpu": [ "x64" ], - "dev": true, - "license": "Apache-2.0", + "license": "MIT", "optional": true, "os": [ - "win32" + "netbsd" ], "engines": { - "node": ">=16" - } - }, - "node_modules/@cloudflare/workers-types": { - "version": "4.20251004.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20251004.0.tgz", - "integrity": "sha512-FkTBHEyOBwphbW4SLQ2XLCgNntD2wz0v1Si7NwJeN0JAPW/39/w6zhsKy3rsh+203tuSfBgsoP34+Os4RaySOw==", - "dev": true, - "license": "MIT OR Apache-2.0" - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@emmetio/abbreviation": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@emmetio/abbreviation/-/abbreviation-2.3.3.tgz", - "integrity": "sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@emmetio/scanner": "^1.0.4" - } - }, - "node_modules/@emmetio/css-abbreviation": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@emmetio/css-abbreviation/-/css-abbreviation-2.1.8.tgz", - "integrity": "sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@emmetio/scanner": "^1.0.4" - } - }, - "node_modules/@emmetio/css-parser": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@emmetio/css-parser/-/css-parser-0.4.0.tgz", - "integrity": "sha512-z7wkxRSZgrQHXVzObGkXG+Vmj3uRlpM11oCZ9pbaz0nFejvCDmAiNDpY75+wgXOcffKpj4rzGtwGaZxfJKsJxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@emmetio/stream-reader": "^2.2.0", - "@emmetio/stream-reader-utils": "^0.1.0" - } - }, - "node_modules/@emmetio/html-matcher": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@emmetio/html-matcher/-/html-matcher-1.3.0.tgz", - "integrity": "sha512-NTbsvppE5eVyBMuyGfVu2CRrLvo7J4YHb6t9sBFLyY03WYhXET37qA4zOYUjBWFCRHO7pS1B9khERtY0f5JXPQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@emmetio/scanner": "^1.0.0" - } - }, - "node_modules/@emmetio/scanner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@emmetio/scanner/-/scanner-1.0.4.tgz", - "integrity": "sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@emmetio/stream-reader": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@emmetio/stream-reader/-/stream-reader-2.2.0.tgz", - "integrity": "sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@emmetio/stream-reader-utils": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@emmetio/stream-reader-utils/-/stream-reader-utils-0.1.0.tgz", - "integrity": "sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A==", - "dev": true, - "license": "MIT" - }, - "node_modules/@emnapi/runtime": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.5.0.tgz", - "integrity": "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" + "node": ">=18" } }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.10.tgz", - "integrity": "sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==", + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz", + "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", "cpu": [ - "ppc64" + "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ - "aix" + "openbsd" ], "engines": { "node": ">=18" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.10.tgz", - "integrity": "sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==", + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz", + "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", "cpu": [ - "arm" + "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ - "android" + "openbsd" ], "engines": { "node": ">=18" } }, - "node_modules/@esbuild/android-arm64": { + "node_modules/@esbuild/openharmony-arm64": { "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.10.tgz", - "integrity": "sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.10.tgz", + "integrity": "sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==", "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ - "android" + "openharmony" ], "engines": { "node": ">=18" } }, - "node_modules/@esbuild/android-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.10.tgz", - "integrity": "sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==", + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz", + "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ - "android" + "sunos" ], "engines": { "node": ">=18" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.10.tgz", - "integrity": "sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==", + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz", + "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ - "darwin" + "win32" ], "engines": { "node": ">=18" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.10.tgz", - "integrity": "sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==", + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz", + "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", "cpu": [ - "x64" + "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ - "darwin" + "win32" ], "engines": { "node": ">=18" } }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.10.tgz", - "integrity": "sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==", + "node_modules/@esbuild/win32-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz", + "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", "cpu": [ - "arm64" + "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ - "freebsd" + "win32" ], "engines": { "node": ">=18" } }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.10.tgz", - "integrity": "sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/@img/colour": { + "version": "1.0.0", + "devOptional": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], "engines": { "node": ">=18" } }, - "node_modules/@esbuild/linux-arm": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.10.tgz", - "integrity": "sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==", + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", "cpu": [ - "arm" + "arm64" ], - "dev": true, - "license": "MIT", + "license": "Apache-2.0", "optional": true, "os": [ - "linux" + "darwin" ], "engines": { - "node": ">=18" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.4" } }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.10.tgz", - "integrity": "sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==", + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", "cpu": [ - "arm64" + "x64" ], - "dev": true, - "license": "MIT", + "license": "Apache-2.0", "optional": true, "os": [ - "linux" + "darwin" ], "engines": { - "node": ">=18" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.4" } }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.10.tgz", - "integrity": "sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==", + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", "cpu": [ - "ia32" + "arm64" ], - "dev": true, - "license": "MIT", + "license": "LGPL-3.0-or-later", "optional": true, "os": [ - "linux" + "darwin" ], - "engines": { - "node": ">=18" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.10.tgz", - "integrity": "sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==", + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", "cpu": [ - "loong64" + "x64" ], - "dev": true, - "license": "MIT", + "license": "LGPL-3.0-or-later", "optional": true, "os": [ - "linux" + "darwin" ], - "engines": { - "node": ">=18" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.10.tgz", - "integrity": "sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==", + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", "cpu": [ - "mips64el" + "arm" ], - "dev": true, - "license": "MIT", + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" ], - "engines": { - "node": ">=18" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.10.tgz", - "integrity": "sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==", + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", "cpu": [ - "ppc64" + "arm64" ], - "dev": true, - "license": "MIT", + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" ], - "engines": { - "node": ">=18" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.10.tgz", - "integrity": "sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==", + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.3.tgz", + "integrity": "sha512-Y2T7IsQvJLMCBM+pmPbM3bKT/yYJvVtLJGfCs4Sp95SjvnFIjynbjzsa7dY1fRJX45FTSfDksbTp6AGWudiyCg==", "cpu": [ - "riscv64" + "ppc64" ], - "dev": true, - "license": "MIT", + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" ], - "engines": { - "node": ">=18" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.10.tgz", - "integrity": "sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==", + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", + "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", "cpu": [ "s390x" ], - "dev": true, - "license": "MIT", + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" ], - "engines": { - "node": ">=18" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@esbuild/linux-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.10.tgz", - "integrity": "sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==", + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", "cpu": [ "x64" ], - "dev": true, - "license": "MIT", + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" ], - "engines": { - "node": ">=18" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.10.tgz", - "integrity": "sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==", + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", + "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", "cpu": [ "arm64" ], - "dev": true, - "license": "MIT", + "license": "LGPL-3.0-or-later", "optional": true, "os": [ - "netbsd" + "linux" ], - "engines": { - "node": ">=18" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.10.tgz", - "integrity": "sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==", + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", + "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", "cpu": [ "x64" ], - "dev": true, - "license": "MIT", + "license": "LGPL-3.0-or-later", "optional": true, "os": [ - "netbsd" + "linux" ], - "engines": { - "node": ">=18" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.10.tgz", - "integrity": "sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==", + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", "cpu": [ - "arm64" + "arm" ], - "dev": true, - "license": "MIT", + "license": "Apache-2.0", "optional": true, "os": [ - "openbsd" + "linux" ], "engines": { - "node": ">=18" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.5" } }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.10.tgz", - "integrity": "sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==", + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", "cpu": [ - "x64" + "arm64" ], - "dev": true, - "license": "MIT", + "license": "Apache-2.0", "optional": true, "os": [ - "openbsd" + "linux" ], "engines": { - "node": ">=18" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.4" } }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.10.tgz", - "integrity": "sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==", + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.4.tgz", + "integrity": "sha512-F4PDtF4Cy8L8hXA2p3TO6s4aDt93v+LKmpcYFLAVdkkD3hSxZzee0rh6/+94FpAynsuMpLX5h+LRsSG3rIciUQ==", "cpu": [ - "arm64" + "ppc64" ], - "dev": true, - "license": "MIT", + "license": "Apache-2.0", "optional": true, "os": [ - "openharmony" + "linux" ], "engines": { - "node": ">=18" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.3" } }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.10.tgz", - "integrity": "sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==", + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", + "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", "cpu": [ - "x64" + "s390x" ], - "dev": true, - "license": "MIT", + "license": "Apache-2.0", "optional": true, "os": [ - "sunos" + "linux" ], "engines": { - "node": ">=18" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.4" } }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.10.tgz", - "integrity": "sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==", + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", "cpu": [ - "arm64" + "x64" ], - "dev": true, - "license": "MIT", + "license": "Apache-2.0", "optional": true, "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.10.tgz", - "integrity": "sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.10.tgz", - "integrity": "sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" + "linux" ], "engines": { - "node": ">=18" - } - }, - "node_modules/@img/colour": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz", - "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=18" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.4" } }, - "node_modules/@img/sharp-darwin-arm64": { + "node_modules/@img/sharp-linuxmusl-arm64": { "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", - "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", + "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", "cpu": [ "arm64" ], - "dev": true, "license": "Apache-2.0", "optional": true, "os": [ - "darwin" + "linux" ], "engines": { "node": "^18.17.0 || ^20.3.0 || >=21.0.0" @@ -1665,21 +1492,20 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.0.4" + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" } }, - "node_modules/@img/sharp-darwin-x64": { + "node_modules/@img/sharp-linuxmusl-x64": { "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", - "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", + "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", "cpu": [ "x64" ], - "dev": true, "license": "Apache-2.0", "optional": true, "os": [ - "darwin" + "linux" ], "engines": { "node": "^18.17.0 || ^20.3.0 || >=21.0.0" @@ -1688,717 +1514,364 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.0.4" + "@img/sharp-libvips-linuxmusl-x64": "1.0.4" } }, - "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", - "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "node_modules/@img/sharp-wasm32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", + "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", "cpu": [ - "arm64" + "wasm32" ], - "dev": true, - "license": "LGPL-3.0-or-later", + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "@emnapi/runtime": "^1.2.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, "funding": { "url": "https://opencollective.com/libvips" } }, - "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", - "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.4.tgz", + "integrity": "sha512-2Q250do/5WXTwxW3zjsEuMSv5sUU4Tq9VThWKlU2EYLm4MB7ZeMwF+SFJutldYODXF6jzc6YEOC+VfX0SZQPqA==", "cpu": [ - "x64" + "arm64" ], - "dev": true, - "license": "LGPL-3.0-or-later", + "license": "Apache-2.0 AND LGPL-3.0-or-later", "optional": true, "os": [ - "darwin" + "win32" ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, "funding": { "url": "https://opencollective.com/libvips" } }, - "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", - "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", + "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", "cpu": [ - "arm" + "ia32" ], - "dev": true, - "license": "LGPL-3.0-or-later", + "license": "Apache-2.0 AND LGPL-3.0-or-later", "optional": true, "os": [ - "linux" + "win32" ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, "funding": { "url": "https://opencollective.com/libvips" } }, - "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", - "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", "cpu": [ - "arm64" + "x64" ], - "dev": true, - "license": "LGPL-3.0-or-later", + "license": "Apache-2.0 AND LGPL-3.0-or-later", "optional": true, "os": [ - "linux" + "win32" ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, "funding": { "url": "https://opencollective.com/libvips" } }, - "node_modules/@img/sharp-libvips-linux-ppc64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.3.tgz", - "integrity": "sha512-Y2T7IsQvJLMCBM+pmPbM3bKT/yYJvVtLJGfCs4Sp95SjvnFIjynbjzsa7dY1fRJX45FTSfDksbTp6AGWudiyCg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", - "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "license": "MIT", + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", - "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, - "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", - "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "license": "MIT" }, - "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", - "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@img/sharp-linux-arm": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", - "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", - "cpu": [ - "arm" - ], + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.0.5" + "engines": { + "node": ">= 8" } }, - "node_modules/@img/sharp-linux-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", - "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", - "cpu": [ - "arm64" - ], + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.0.4" + "node": ">= 8" } }, - "node_modules/@img/sharp-linux-ppc64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.4.tgz", - "integrity": "sha512-F4PDtF4Cy8L8hXA2p3TO6s4aDt93v+LKmpcYFLAVdkkD3hSxZzee0rh6/+94FpAynsuMpLX5h+LRsSG3rIciUQ==", - "cpu": [ - "ppc64" - ], + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">= 8" + } + }, + "node_modules/@oslojs/encoding": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/@poppinss/colors": { + "version": "4.1.5", + "license": "MIT", + "dependencies": { + "kleur": "^4.1.5" + } + }, + "node_modules/@poppinss/dumper": { + "version": "0.6.4", + "license": "MIT", + "dependencies": { + "@poppinss/colors": "^4.1.5", + "@sindresorhus/is": "^7.0.2", + "supports-color": "^10.0.0" + } + }, + "node_modules/@poppinss/dumper/node_modules/@sindresorhus/is": { + "version": "7.1.0", + "license": "MIT", + "engines": { + "node": ">=18" }, "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-ppc64": "1.2.3" + "url": "https://github.com/sindresorhus/is?sponsor=1" } }, - "node_modules/@img/sharp-linux-s390x": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", - "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], + "node_modules/@poppinss/exception": { + "version": "1.2.2", + "license": "MIT" + }, + "node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=14.0.0" }, - "funding": { - "url": "https://opencollective.com/libvips" + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.0.4" + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@img/sharp-linux-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", - "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.4.tgz", + "integrity": "sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA==", "cpu": [ - "x64" + "arm" ], - "dev": true, - "license": "Apache-2.0", + "license": "MIT", "optional": true, "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.0.4" - } + "android" + ] }, - "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", - "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.4.tgz", + "integrity": "sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w==", "cpu": [ "arm64" ], - "dev": true, - "license": "Apache-2.0", + "license": "MIT", "optional": true, "os": [ - "linux" + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.4.tgz", + "integrity": "sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==", + "cpu": [ + "arm64" ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" - } + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", - "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.4.tgz", + "integrity": "sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw==", "cpu": [ "x64" ], - "dev": true, - "license": "Apache-2.0", + "license": "MIT", "optional": true, "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.0.4" - } + "darwin" + ] }, - "node_modules/@img/sharp-wasm32": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", - "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.4.tgz", + "integrity": "sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ==", "cpu": [ - "wasm32" + "arm64" ], - "dev": true, - "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", - "optional": true, - "dependencies": { - "@emnapi/runtime": "^1.2.0" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-arm64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.4.tgz", - "integrity": "sha512-2Q250do/5WXTwxW3zjsEuMSv5sUU4Tq9VThWKlU2EYLm4MB7ZeMwF+SFJutldYODXF6jzc6YEOC+VfX0SZQPqA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-ia32": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", - "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "Apache-2.0 AND LGPL-3.0-or-later", + "license": "MIT", "optional": true, "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } + "freebsd" + ] }, - "node_modules/@img/sharp-win32-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", - "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.4.tgz", + "integrity": "sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw==", "cpu": [ "x64" ], - "dev": true, - "license": "Apache-2.0 AND LGPL-3.0-or-later", + "license": "MIT", "optional": true, "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", - "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@oslojs/encoding": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz", - "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@poppinss/colors": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@poppinss/colors/-/colors-4.1.5.tgz", - "integrity": "sha512-FvdDqtcRCtz6hThExcFOgW0cWX+xwSMWcRuQe5ZEb2m7cVQOAVZOIMt+/v9RxGiD9/OY16qJBXK4CVKWAPalBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^4.1.5" - } - }, - "node_modules/@poppinss/dumper": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@poppinss/dumper/-/dumper-0.6.4.tgz", - "integrity": "sha512-iG0TIdqv8xJ3Lt9O8DrPRxw1MRLjNpoqiSGU03P/wNLP/s0ra0udPJ1J2Tx5M0J3H/cVyEgpbn8xUKRY9j59kQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@poppinss/colors": "^4.1.5", - "@sindresorhus/is": "^7.0.2", - "supports-color": "^10.0.0" - } - }, - "node_modules/@poppinss/dumper/node_modules/@sindresorhus/is": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.1.0.tgz", - "integrity": "sha512-7F/yz2IphV39hiS2zB4QYVkivrptHHh0K8qJJd9HhuWSdvf8AN7NpebW3CcDZDBQsUPMoDKWsY2WWgW7bqOcfA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@poppinss/exception": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@poppinss/exception/-/exception-1.2.2.tgz", - "integrity": "sha512-m7bpKCD4QMlFCjA/nKTs23fuvoVFoA83brRKmObCUNmi/9tVu8Ve3w4YQAnJu4q3Tjf5fr685HYIC/IA2zHRSg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rollup/pluginutils": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", - "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/pluginutils/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true, - "license": "MIT" + "freebsd" + ] }, - "node_modules/@rollup/rollup-android-arm-eabi": { + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.4.tgz", - "integrity": "sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA==", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.4.tgz", + "integrity": "sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==", "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ - "android" + "linux" ] }, - "node_modules/@rollup/rollup-android-arm64": { + "node_modules/@rollup/rollup-linux-arm-musleabihf": { "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.4.tgz", - "integrity": "sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w==", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.4.tgz", + "integrity": "sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==", "cpu": [ - "arm64" + "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ - "android" + "linux" ] }, - "node_modules/@rollup/rollup-darwin-arm64": { + "node_modules/@rollup/rollup-linux-arm64-gnu": { "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.4.tgz", - "integrity": "sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.4.tgz", + "integrity": "sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==", "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ - "darwin" + "linux" ] }, - "node_modules/@rollup/rollup-darwin-x64": { + "node_modules/@rollup/rollup-linux-arm64-musl": { "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.4.tgz", - "integrity": "sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw==", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.4.tgz", + "integrity": "sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==", "cpu": [ - "x64" + "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ - "darwin" + "linux" ] }, - "node_modules/@rollup/rollup-freebsd-arm64": { + "node_modules/@rollup/rollup-linux-loong64-gnu": { "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.4.tgz", - "integrity": "sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ==", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.4.tgz", + "integrity": "sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==", "cpu": [ - "arm64" + "loong64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.4.tgz", - "integrity": "sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.4.tgz", - "integrity": "sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.4.tgz", - "integrity": "sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.4.tgz", - "integrity": "sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.4.tgz", - "integrity": "sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.4.tgz", - "integrity": "sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" + "linux" ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { @@ -2408,7 +1881,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2422,7 +1894,6 @@ "cpu": [ "riscv64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2436,7 +1907,6 @@ "cpu": [ "riscv64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2450,7 +1920,6 @@ "cpu": [ "s390x" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2464,7 +1933,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2478,7 +1946,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2492,7 +1959,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2506,7 +1972,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2520,7 +1985,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2534,7 +1998,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2548,7 +2011,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2559,7 +2021,6 @@ "version": "3.13.0", "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.13.0.tgz", "integrity": "sha512-3P8rGsg2Eh2qIHekwuQjzWhKI4jV97PhvYjYUzGqjvJfqdQPz+nMlfWahU24GZAyW1FxFI1sYjyhfh5CoLmIUA==", - "dev": true, "license": "MIT", "dependencies": { "@shikijs/types": "3.13.0", @@ -2572,7 +2033,6 @@ "version": "3.13.0", "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.13.0.tgz", "integrity": "sha512-Ty7xv32XCp8u0eQt8rItpMs6rU9Ki6LJ1dQOW3V/56PKDcpvfHPnYFbsx5FFUP2Yim34m/UkazidamMNVR4vKg==", - "dev": true, "license": "MIT", "dependencies": { "@shikijs/types": "3.13.0", @@ -2584,7 +2044,6 @@ "version": "3.13.0", "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.13.0.tgz", "integrity": "sha512-O42rBGr4UDSlhT2ZFMxqM7QzIU+IcpoTMzb3W7AlziI1ZF7R8eS2M0yt5Ry35nnnTX/LTLXFPUjRFCIW+Operg==", - "dev": true, "license": "MIT", "dependencies": { "@shikijs/types": "3.13.0", @@ -2595,7 +2054,6 @@ "version": "3.13.0", "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.13.0.tgz", "integrity": "sha512-672c3WAETDYHwrRP0yLy3W1QYB89Hbpj+pO4KhxK6FzIrDI2FoEXNiNCut6BQmEApYLfuYfpgOZaqbY+E9b8wQ==", - "dev": true, "license": "MIT", "dependencies": { "@shikijs/types": "3.13.0" @@ -2605,7 +2063,6 @@ "version": "3.13.0", "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.13.0.tgz", "integrity": "sha512-Vxw1Nm1/Od8jyA7QuAenaV78BG2nSr3/gCGdBkLpfLscddCkzkL36Q5b67SrLLfvAJTOUzW39x4FHVCFriPVgg==", - "dev": true, "license": "MIT", "dependencies": { "@shikijs/types": "3.13.0" @@ -2615,7 +2072,6 @@ "version": "3.13.0", "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.13.0.tgz", "integrity": "sha512-oM9P+NCFri/mmQ8LoFGVfVyemm5Hi27330zuOBp0annwJdKH1kOLndw3zCtAVDehPLg9fKqoEx3Ht/wNZxolfw==", - "dev": true, "license": "MIT", "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", @@ -2626,7 +2082,6 @@ "version": "10.0.2", "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", - "dev": true, "license": "MIT" }, "node_modules/@sindresorhus/is": { @@ -2644,16 +2099,10 @@ }, "node_modules/@speed-highlight/core": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@speed-highlight/core/-/core-1.2.7.tgz", - "integrity": "sha512-0dxmVj4gxg3Jg879kvFS/msl4s9F3T9UXC1InxgOf7t5NvcPD97u/WTA5vL/IxWHMn7qSxBozqrnnE2wvl1m8g==", - "dev": true, "license": "CC0-1.0" }, "node_modules/@swc/helpers": { "version": "0.5.17", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", - "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.8.0" @@ -2700,17 +2149,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/cheerio": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/cheerio/-/cheerio-1.0.0.tgz", - "integrity": "sha512-zAaImHWoh5RY2CLgU2mvg3bl2k3F65B0N5yphuII3ythFLPmJhL7sj1RDu6gSxcgqHlETbr/lhA2OBY+WF1fXQ==", - "deprecated": "This is a stub types definition. cheerio provides its own type definitions, so you do not need this installed.", - "dev": true, - "license": "MIT", - "dependencies": { - "cheerio": "*" - } - }, "node_modules/@types/clean-css": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.11.tgz", @@ -2726,7 +2164,6 @@ "version": "4.1.12", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "dev": true, "license": "MIT", "dependencies": { "@types/ms": "*" @@ -2736,14 +2173,12 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, "license": "MIT" }, "node_modules/@types/fontkit": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/@types/fontkit/-/fontkit-2.0.8.tgz", "integrity": "sha512-wN+8bYxIpJf+5oZdrdtaX04qUuWHcKxcDEgRS9Qm9ZClSHjzEn13SxUC+5eRM+4yXIeTYk8mTzLAWGF64847ew==", - "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -2753,7 +2188,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "dev": true, "license": "MIT", "dependencies": { "@types/unist": "*" @@ -2789,7 +2223,6 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", - "dev": true, "license": "MIT", "dependencies": { "@types/unist": "*" @@ -2811,27 +2244,24 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", - "dev": true, "license": "MIT" }, "node_modules/@types/nlcst": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz", "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==", - "dev": true, "license": "MIT", "dependencies": { "@types/unist": "*" } }, "node_modules/@types/node": { - "version": "24.7.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.7.0.tgz", - "integrity": "sha512-IbKooQVqUBrlzWTi79E8Fw78l8k1RNtlDDNWsFZs7XonuQSJ8oNYfEeclhprUldXISRMLzBpILuKgPlIxm+/Yw==", - "dev": true, + "version": "22.18.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.8.tgz", + "integrity": "sha512-pAZSHMiagDR7cARo/cch1f3rXy0AEXwsVsVH09FcyeJVAzCnGgmYis7P3JidtTUjyadhTeSo8TgRPswstghDaw==", "license": "MIT", "dependencies": { - "undici-types": "~7.14.0" + "undici-types": "~6.21.0" } }, "node_modules/@types/relateurl": { @@ -2855,14 +2285,10 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, "license": "MIT" }, "node_modules/@ungap/structured-clone": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", - "dev": true, "license": "ISC" }, "node_modules/@volar/kit": { @@ -2978,8 +2404,6 @@ }, "node_modules/acorn": { "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -3020,9 +2444,6 @@ }, "node_modules/ansi-align": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, "license": "ISC", "dependencies": { "string-width": "^4.1.0" @@ -3030,9 +2451,6 @@ }, "node_modules/ansi-align/node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -3040,16 +2458,10 @@ }, "node_modules/ansi-align/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, "license": "MIT" }, "node_modules/ansi-align/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -3062,9 +2474,6 @@ }, "node_modules/ansi-align/node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -3075,9 +2484,6 @@ }, "node_modules/ansi-regex": { "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -3088,9 +2494,6 @@ }, "node_modules/ansi-styles": { "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -3101,9 +2504,6 @@ }, "node_modules/anymatch": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", @@ -3115,9 +2515,6 @@ }, "node_modules/anymatch/node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -3135,16 +2532,10 @@ }, "node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, "license": "Python-2.0" }, "node_modules/aria-query": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", - "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", - "dev": true, "license": "Apache-2.0", "engines": { "node": ">= 0.4" @@ -3152,9 +2543,6 @@ }, "node_modules/array-iterate": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz", - "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==", - "dev": true, "license": "MIT", "funding": { "type": "github", @@ -3163,9 +2551,6 @@ }, "node_modules/astro": { "version": "5.14.1", - "resolved": "https://registry.npmjs.org/astro/-/astro-5.14.1.tgz", - "integrity": "sha512-gPa8NY7/lP8j8g81iy8UwANF3+aukKRWS68IlthZQNgykpg80ne6lbHOp6FErYycxQ1TUhgEfkXVDQZAoJx8Bg==", - "dev": true, "license": "MIT", "dependencies": { "@astrojs/compiler": "^2.12.2", @@ -3247,842 +2632,745 @@ "sharp": "^0.34.0" } }, - "node_modules/astro/node_modules/@img/sharp-darwin-arm64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.4.tgz", - "integrity": "sha512-sitdlPzDVyvmINUdJle3TNHl+AG9QcwiAMsXmccqsCOMZNIdW2/7S26w0LyU8euiLVzFBL3dXPwVCq/ODnf2vA==", - "cpu": [ - "arm64" - ], + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], + "license": "MIT", "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.2.3" + "node": ">=8.0.0" } }, - "node_modules/astro/node_modules/@img/sharp-darwin-x64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.4.tgz", - "integrity": "sha512-rZheupWIoa3+SOdF/IcUe1ah4ZDpKBGWcsPX6MT0lYniH9micvIU7HQkYTfrx5Xi8u+YqwLtxC/3vl8TQN6rMg==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/axobject-query": { + "version": "4.1.0", "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.2.3" + "node": ">= 0.4" } }, - "node_modules/astro/node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.3.tgz", - "integrity": "sha512-QzWAKo7kpHxbuHqUC28DZ9pIKpSi2ts2OJnoIGI26+HMgq92ZZ4vk8iJd4XsxN+tYfNJxzH6W62X5eTcsBymHw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], + "node_modules/bail": { + "version": "2.0.2", + "license": "MIT", "funding": { - "url": "https://opencollective.com/libvips" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/astro/node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.3.tgz", - "integrity": "sha512-Ju+g2xn1E2AKO6YBhxjj+ACcsPQRHT0bhpglxcEf+3uyPY+/gL8veniKoo96335ZaPo03bdDXMv0t+BBFAbmRA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } + "node_modules/base-64": { + "version": "1.0.0", + "license": "MIT" }, - "node_modules/astro/node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.3.tgz", - "integrity": "sha512-x1uE93lyP6wEwGvgAIV0gP6zmaL/a0tGzJs/BIDDG0zeBhMnuUPm7ptxGhUbcGs4okDJrk4nxgrmxpib9g6HpA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" + "node_modules/base64-js": { + "version": "1.5.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } ], - "funding": { - "url": "https://opencollective.com/libvips" - } + "license": "MIT" }, - "node_modules/astro/node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.3.tgz", - "integrity": "sha512-I4RxkXU90cpufazhGPyVujYwfIm9Nk1QDEmiIsaPwdnm013F7RIceaCc87kAH+oUB1ezqEvC6ga4m7MSlqsJvQ==", - "cpu": [ - "arm64" + "node_modules/blake3-wasm": { + "version": "2.1.5", + "license": "MIT" + }, + "node_modules/blob-to-buffer": { + "version": "1.2.9", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } ], + "license": "MIT" + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } + "license": "ISC" }, - "node_modules/astro/node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.3.tgz", - "integrity": "sha512-RgWrs/gVU7f+K7P+KeHFaBAJlNkD1nIZuVXdQv6S+fNA6syCcoboNjsV2Pou7zNlVdNQoQUpQTk8SWDHUA3y/w==", - "cpu": [ - "s390x" - ], + "node_modules/bottleneck": { + "version": "2.19.5", + "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", + "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==", "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], + "license": "MIT" + }, + "node_modules/boxen": { + "version": "8.0.1", + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^8.0.0", + "chalk": "^5.3.0", + "cli-boxes": "^3.0.0", + "string-width": "^7.2.0", + "type-fest": "^4.21.0", + "widest-line": "^5.0.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, "funding": { - "url": "https://opencollective.com/libvips" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/astro/node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.3.tgz", - "integrity": "sha512-3JU7LmR85K6bBiRzSUc/Ff9JBVIFVvq6bomKE0e63UXGeRw2HPVEjoJke1Yx+iU4rL7/7kUjES4dZ/81Qjhyxg==", - "cpu": [ - "x64" - ], + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/astro/node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.3.tgz", - "integrity": "sha512-F9q83RZ8yaCwENw1GieztSfj5msz7GGykG/BA+MOUefvER69K/ubgFHNeSyUu64amHIYKGDs4sRCMzXVj8sEyw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" + "node_modules/brotli": { + "version": "1.3.3", + "license": "MIT", + "dependencies": { + "base64-js": "^1.1.2" } }, - "node_modules/astro/node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.3.tgz", - "integrity": "sha512-U5PUY5jbc45ANM6tSJpsgqmBF/VsL6LnxJmIf11kB7J5DctHgqm0SkuXzVWtIY90GnJxKnC/JT251TDnk1fu/g==", - "cpu": [ - "x64" - ], + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } ], - "funding": { - "url": "https://opencollective.com/libvips" + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/astro/node_modules/@img/sharp-linux-arm": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.4.tgz", - "integrity": "sha512-Xyam4mlqM0KkTHYVSuc6wXRmM7LGN0P12li03jAnZ3EJWZqj83+hi8Y9UxZUbxsgsK1qOEwg7O0Bc0LjqQVtxA==", - "cpu": [ - "arm" - ], + "node_modules/buffer-from": { + "version": "1.1.2", + "devOptional": true, + "license": "MIT" + }, + "node_modules/cacheable-lookup": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", + "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.2.3" + "node": ">=14.16" } }, - "node_modules/astro/node_modules/@img/sharp-linux-arm64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.4.tgz", - "integrity": "sha512-YXU1F/mN/Wu786tl72CyJjP/Ngl8mGHN1hST4BGl+hiW5jhCnV2uRVTNOcaYPs73NeT/H8Upm3y9582JVuZHrQ==", - "cpu": [ - "arm64" - ], + "node_modules/cacheable-request": { + "version": "10.2.14", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", + "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "^4.0.2", + "get-stream": "^6.0.1", + "http-cache-semantics": "^4.1.1", + "keyv": "^4.5.3", + "mimic-response": "^4.0.0", + "normalize-url": "^8.0.0", + "responselike": "^3.0.0" }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.2.3" + "engines": { + "node": ">=14.16" } }, - "node_modules/astro/node_modules/@img/sharp-linux-s390x": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.4.tgz", - "integrity": "sha512-qVrZKE9Bsnzy+myf7lFKvng6bQzhNUAYcVORq2P7bDlvmF6u2sCmK2KyEQEBdYk+u3T01pVsPrkj943T1aJAsw==", - "cpu": [ - "s390x" - ], + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "8.0.0", + "license": "MIT", "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=16" }, "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.2.3" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/astro/node_modules/@img/sharp-linux-x64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.4.tgz", - "integrity": "sha512-ZfGtcp2xS51iG79c6Vhw9CWqQC8l2Ot8dygxoDoIQPTat/Ov3qAa8qpxSrtAEAJW+UjTXc4yxCjNfxm4h6Xm2A==", - "cpu": [ - "x64" - ], + "node_modules/capital-case": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", + "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.2.3" + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" } }, - "node_modules/astro/node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.4.tgz", - "integrity": "sha512-8hDVvW9eu4yHWnjaOOR8kHVrew1iIX+MUgwxSuH2XyYeNRtLUe4VNioSqbNkB7ZYQJj9rUTT4PyRscyk2PXFKA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, + "node_modules/ccount": { + "version": "2.0.1", + "license": "MIT", "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.2.3" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/astro/node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.4.tgz", - "integrity": "sha512-lU0aA5L8QTlfKjpDCEFOZsTYGn3AEiO6db8W5aQDxj0nQkVrZWmN3ZP9sYKWJdtq3PWPhUNlqehWyXpYDcI9Sg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], + "node_modules/chalk": { + "version": "5.6.2", + "license": "MIT", "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.2.3" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/astro/node_modules/@img/sharp-wasm32": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.4.tgz", - "integrity": "sha512-33QL6ZO/qpRyG7woB/HUALz28WnTMI2W1jgX3Nu2bypqLIKx/QKMILLJzJjI+SIbvXdG9fUnmrxR7vbi1sTBeA==", - "cpu": [ - "wasm32" - ], + "node_modules/change-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz", + "integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==", "dev": true, - "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", - "optional": true, + "license": "MIT", "dependencies": { - "@emnapi/runtime": "^1.5.0" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, + "camel-case": "^4.1.2", + "capital-case": "^1.0.4", + "constant-case": "^3.0.4", + "dot-case": "^3.0.4", + "header-case": "^2.0.4", + "no-case": "^3.0.4", + "param-case": "^3.0.4", + "pascal-case": "^3.1.2", + "path-case": "^3.0.4", + "sentence-case": "^3.0.4", + "snake-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "license": "MIT", "funding": { - "url": "https://opencollective.com/libvips" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/astro/node_modules/@img/sharp-win32-ia32": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.4.tgz", - "integrity": "sha512-3ZeLue5V82dT92CNL6rsal6I2weKw1cYu+rGKm8fOCCtJTR2gYeUfY3FqUnIJsMUPIH68oS5jmZ0NiJ508YpEw==", - "cpu": [ - "ia32" - ], + "node_modules/character-entities-html4": { + "version": "2.1.0", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/cheerio": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.1.2.tgz", + "integrity": "sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg==", "dev": true, - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], + "license": "MIT", + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "encoding-sniffer": "^0.2.1", + "htmlparser2": "^10.0.0", + "parse5": "^7.3.0", + "parse5-htmlparser2-tree-adapter": "^7.1.0", + "parse5-parser-stream": "^7.1.2", + "undici": "^7.12.0", + "whatwg-mimetype": "^4.0.0" + }, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.18.1" }, "funding": { - "url": "https://opencollective.com/libvips" + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" } }, - "node_modules/astro/node_modules/@img/sharp-win32-x64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.4.tgz", - "integrity": "sha512-xIyj4wpYs8J18sVN3mSQjwrw7fKUqRw+Z5rnHNCy5fYTxigBz81u5mOMPmFumwjcn8+ld1ppptMBCLic1nz6ig==", - "cpu": [ - "x64" - ], + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", "dev": true, - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" }, "funding": { - "url": "https://opencollective.com/libvips" + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/astro/node_modules/sharp": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.4.tgz", - "integrity": "sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA==", - "dev": true, - "hasInstallScript": true, - "license": "Apache-2.0", - "optional": true, + "node_modules/chokidar": { + "version": "4.0.3", + "license": "MIT", "dependencies": { - "@img/colour": "^1.0.0", - "detect-libc": "^2.1.0", - "semver": "^7.7.2" + "readdirp": "^4.0.1" }, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">= 14.16.0" }, "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.34.4", - "@img/sharp-darwin-x64": "0.34.4", - "@img/sharp-libvips-darwin-arm64": "1.2.3", - "@img/sharp-libvips-darwin-x64": "1.2.3", - "@img/sharp-libvips-linux-arm": "1.2.3", - "@img/sharp-libvips-linux-arm64": "1.2.3", - "@img/sharp-libvips-linux-ppc64": "1.2.3", - "@img/sharp-libvips-linux-s390x": "1.2.3", - "@img/sharp-libvips-linux-x64": "1.2.3", - "@img/sharp-libvips-linuxmusl-arm64": "1.2.3", - "@img/sharp-libvips-linuxmusl-x64": "1.2.3", - "@img/sharp-linux-arm": "0.34.4", - "@img/sharp-linux-arm64": "0.34.4", - "@img/sharp-linux-ppc64": "0.34.4", - "@img/sharp-linux-s390x": "0.34.4", - "@img/sharp-linux-x64": "0.34.4", - "@img/sharp-linuxmusl-arm64": "0.34.4", - "@img/sharp-linuxmusl-x64": "0.34.4", - "@img/sharp-wasm32": "0.34.4", - "@img/sharp-win32-arm64": "0.34.4", - "@img/sharp-win32-ia32": "0.34.4", - "@img/sharp-win32-x64": "0.34.4" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/atomic-sleep": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", - "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", - "dev": true, + "node_modules/ci-info": { + "version": "4.3.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "license": "MIT", "engines": { - "node": ">=8.0.0" + "node": ">=8" } }, - "node_modules/axobject-query": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", - "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, "engines": { - "node": ">= 0.4" + "node": ">= 10.0" } }, - "node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "dev": true, + "node_modules/cli-boxes": { + "version": "3.0.0", "license": "MIT", + "engines": { + "node": ">=10" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/base-64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", - "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==", + "node_modules/cli-progress": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz", + "integrity": "sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==", "dev": true, - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/blake3-wasm": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz", - "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", - "dev": true, - "license": "MIT" - }, - "node_modules/blob-to-buffer": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/blob-to-buffer/-/blob-to-buffer-1.2.9.tgz", - "integrity": "sha512-BF033y5fN6OCofD3vgHmNtwZWRcq9NLyyxyILx9hfMy1sXYy4ojFl765hJ2lP0YaN2fuxPaLO2Vzzoxy0FLFFA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" + "license": "MIT", + "dependencies": { + "string-width": "^4.2.3" + }, + "engines": { + "node": ">=4" + } }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "node_modules/cli-progress/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "license": "ISC" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/bottleneck": { - "version": "2.19.5", - "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", - "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==", + "node_modules/cli-progress/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, - "node_modules/boxen": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz", - "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==", + "node_modules/cli-progress/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^8.0.0", - "chalk": "^5.3.0", - "cli-boxes": "^3.0.0", - "string-width": "^7.2.0", - "type-fest": "^4.21.0", - "widest-line": "^5.0.0", - "wrap-ansi": "^9.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "node_modules/cli-progress/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { - "fill-range": "^7.1.1" + "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/brotli": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", - "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "base64-js": "^1.1.2" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "engines": { + "node": ">=8" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "license": "MIT" - }, - "node_modules/cacheable-lookup": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", - "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=14.16" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/cacheable-request": { - "version": "10.2.14", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", - "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { - "@types/http-cache-semantics": "^4.0.2", - "get-stream": "^6.0.1", - "http-cache-semantics": "^4.1.1", - "keyv": "^4.5.3", - "mimic-response": "^4.0.0", - "normalize-url": "^8.0.0", - "responselike": "^3.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=14.16" + "node": ">=8" } }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/camelcase": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", - "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, "engines": { - "node": ">=16" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/capital-case": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", - "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", + "node_modules/clone": { + "version": "2.1.2", "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case-first": "^2.0.2" + "engines": { + "node": ">=0.8" } }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "dev": true, + "node_modules/clsx": { + "version": "2.1.1", "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": ">=6" } }, - "node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", - "dev": true, + "node_modules/color": { + "version": "4.2.3", "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "engines": { + "node": ">=12.5.0" } }, - "node_modules/change-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz", - "integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==", + "node_modules/color-convert": { + "version": "2.0.1", "license": "MIT", "dependencies": { - "camel-case": "^4.1.2", - "capital-case": "^1.0.4", - "constant-case": "^3.0.4", - "dot-case": "^3.0.4", - "header-case": "^2.0.4", - "no-case": "^3.0.4", - "param-case": "^3.0.4", - "pascal-case": "^3.1.2", - "path-case": "^3.0.4", - "sentence-case": "^3.0.4", - "snake-case": "^3.0.4", - "tslib": "^2.0.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "dev": true, + "node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" } }, - "node_modules/character-entities-html4": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true, + "license": "MIT" + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "node_modules/commander": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.1.tgz", + "integrity": "sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==", "dev": true, "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": ">=20" } }, - "node_modules/cheerio": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.1.2.tgz", - "integrity": "sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg==", + "node_modules/common-ancestor-path": { + "version": "1.0.1", + "license": "ISC" + }, + "node_modules/constant-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", + "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", "dev": true, "license": "MIT", "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.2.2", - "encoding-sniffer": "^0.2.1", - "htmlparser2": "^10.0.0", - "parse5": "^7.3.0", - "parse5-htmlparser2-tree-adapter": "^7.1.0", - "parse5-parser-stream": "^7.1.2", - "undici": "^7.12.0", - "whatwg-mimetype": "^4.0.0" - }, + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case": "^2.0.2" + } + }, + "node_modules/cookie": { + "version": "1.0.2", + "license": "MIT", "engines": { - "node": ">=20.18.1" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + "node": ">=18" } }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "node_modules/cookie-es": { + "version": "1.2.2", + "license": "MIT" + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-fetch": { + "version": "3.2.0", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, + "node_modules/crossws": { + "version": "0.3.5", + "license": "MIT", + "dependencies": { + "uncrypto": "^0.1.3" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", - "css-select": "^5.1.0", "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" }, "funding": { "url": "https://github.com/sponsors/fb55" } }, - "node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, + "node_modules/css-tree": { + "version": "3.1.0", "license": "MIT", "dependencies": { - "readdirp": "^4.0.1" + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" }, "engines": { - "node": ">= 14.16.0" + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" }, "funding": { - "url": "https://paulmillr.com/funding/" + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/ci-info": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", - "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", + "node_modules/cssesc": { + "version": "3.0.0", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/dateformat": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], "license": "MIT", "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/clean-css": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", - "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "node_modules/debug": { + "version": "4.4.3", "license": "MIT", "dependencies": { - "source-map": "~0.6.0" + "ms": "^2.1.3" }, "engines": { - "node": ">= 10.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "node_modules/decode-named-character-reference": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, "engines": { "node": ">=10" }, @@ -4090,766 +3378,692 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-progress": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz", - "integrity": "sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==", + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true, "license": "MIT", - "dependencies": { - "string-width": "^4.2.3" - }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-progress/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/cli-progress/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, + "node_modules/defu": { + "version": "6.1.4", "license": "MIT" }, - "node_modules/cli-progress/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, + "node_modules/depd": { + "version": "2.0.0", "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/cli-progress/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, + "node_modules/dequal": { + "version": "2.0.3", "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } + "node_modules/destr": { + "version": "2.0.5", + "license": "MIT" }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", + "node_modules/detect-libc": { + "version": "2.1.2", + "license": "Apache-2.0", "engines": { "node": ">=8" } }, - "node_modules/cliui/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "node_modules/deterministic-object-hash": { + "version": "2.0.2", "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "base-64": "^1.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=18" } }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, + "node_modules/devalue": { + "version": "5.3.2", "license": "MIT" }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, + "node_modules/devlop": { + "version": "1.1.0", "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "dequal": "^2.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, + "node_modules/dfa": { + "version": "1.2.0", + "license": "MIT" + }, + "node_modules/diff": { + "version": "5.2.0", + "license": "BSD-3-Clause", "engines": { - "node": ">=8" + "node": ">=0.3.1" } }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/dlv": { + "version": "1.1.3", + "license": "MIT" + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" }, - "node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, "engines": { - "node": ">=6" + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" }, - "engines": { - "node": ">=12.5.0" + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" - }, + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dset": { + "version": "3.1.4", + "license": "MIT", "engines": { - "node": ">=7.0.0" + "node": ">=4" } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, + "node_modules/ee-first": { + "version": "1.1.1", "license": "MIT" }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "node_modules/emmet": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/emmet/-/emmet-2.4.11.tgz", + "integrity": "sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ==", "dev": true, "license": "MIT", + "workspaces": [ + "./packages/scanner", + "./packages/abbreviation", + "./packages/css-abbreviation", + "./" + ], "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" + "@emmetio/abbreviation": "^2.3.3", + "@emmetio/css-abbreviation": "^2.1.8" } }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true, + "node_modules/emoji-regex": { + "version": "10.5.0", "license": "MIT" }, - "node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "node_modules/encodeurl": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding-sniffer": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz", + "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==", "dev": true, "license": "MIT", + "dependencies": { + "iconv-lite": "^0.6.3", + "whatwg-encoding": "^3.1.1" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" } }, - "node_modules/commander": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.1.tgz", - "integrity": "sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==", + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=20" + "dependencies": { + "once": "^1.4.0" } }, - "node_modules/common-ancestor-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", - "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", - "dev": true, - "license": "ISC" - }, - "node_modules/constant-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", - "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case": "^2.0.2" - } - }, - "node_modules/cookie": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", - "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/cookie-es": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.2.tgz", - "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==", - "dev": true, - "license": "MIT" - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/cross-fetch": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", - "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "node-fetch": "^2.7.0" - } - }, - "node_modules/crossws": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", - "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", - "dev": true, - "license": "MIT", - "dependencies": { - "uncrypto": "^0.1.3" - } - }, - "node_modules/css-select": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", - "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" + "engines": { + "node": ">=0.12" }, "funding": { - "url": "https://github.com/sponsors/fb55" + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/css-tree": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", - "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", - "dev": true, + "node_modules/error-stack-parser-es": { + "version": "1.0.5", "license": "MIT", - "dependencies": { - "mdn-data": "2.12.2", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/css-what": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", - "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, "funding": { - "url": "https://github.com/sponsors/fb55" + "url": "https://github.com/sponsors/antfu" } }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.25.10", + "hasInstallScript": true, "license": "MIT", "bin": { - "cssesc": "bin/cssesc" + "esbuild": "bin/esbuild" }, "engines": { - "node": ">=4" + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.10", + "@esbuild/android-arm": "0.25.10", + "@esbuild/android-arm64": "0.25.10", + "@esbuild/android-x64": "0.25.10", + "@esbuild/darwin-arm64": "0.25.10", + "@esbuild/darwin-x64": "0.25.10", + "@esbuild/freebsd-arm64": "0.25.10", + "@esbuild/freebsd-x64": "0.25.10", + "@esbuild/linux-arm": "0.25.10", + "@esbuild/linux-arm64": "0.25.10", + "@esbuild/linux-ia32": "0.25.10", + "@esbuild/linux-loong64": "0.25.10", + "@esbuild/linux-mips64el": "0.25.10", + "@esbuild/linux-ppc64": "0.25.10", + "@esbuild/linux-riscv64": "0.25.10", + "@esbuild/linux-s390x": "0.25.10", + "@esbuild/linux-x64": "0.25.10", + "@esbuild/netbsd-arm64": "0.25.10", + "@esbuild/netbsd-x64": "0.25.10", + "@esbuild/openbsd-arm64": "0.25.10", + "@esbuild/openbsd-x64": "0.25.10", + "@esbuild/openharmony-arm64": "0.25.10", + "@esbuild/sunos-x64": "0.25.10", + "@esbuild/win32-arm64": "0.25.10", + "@esbuild/win32-ia32": "0.25.10", + "@esbuild/win32-x64": "0.25.10" } }, - "node_modules/dateformat": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", - "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", - "dev": true, + "node_modules/esbuild/node_modules/@esbuild/aix-ppc64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.10.tgz", + "integrity": "sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==", + "cpu": [ + "ppc64" + ], "license": "MIT", + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": "*" + "node": ">=18" } }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, + "node_modules/esbuild/node_modules/@esbuild/android-arm": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.10.tgz", + "integrity": "sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==", + "cpu": [ + "arm" + ], "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=18" } }, - "node_modules/decode-named-character-reference": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", - "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", - "dev": true, + "node_modules/esbuild/node_modules/@esbuild/android-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.10.tgz", + "integrity": "sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==", + "cpu": [ + "arm64" + ], "license": "MIT", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" } }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, + "node_modules/esbuild/node_modules/@esbuild/android-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.10.tgz", + "integrity": "sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "mimic-response": "^3.1.0" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, + "node_modules/esbuild/node_modules/@esbuild/darwin-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.10.tgz", + "integrity": "sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==", + "cpu": [ + "arm64" + ], "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true, + "node_modules/esbuild/node_modules/@esbuild/darwin-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.10.tgz", + "integrity": "sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==", + "cpu": [ + "x64" + ], "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=10" + "node": ">=18" } }, - "node_modules/defu": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", - "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", - "dev": true, - "license": "MIT" - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, + "node_modules/esbuild/node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.10.tgz", + "integrity": "sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==", + "cpu": [ + "arm64" + ], "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">= 0.8" + "node": ">=18" } }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, + "node_modules/esbuild/node_modules/@esbuild/freebsd-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.10.tgz", + "integrity": "sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==", + "cpu": [ + "x64" + ], "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=6" + "node": ">=18" } }, - "node_modules/destr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", - "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", - "dev": true, - "license": "MIT" - }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", - "dev": true, - "license": "Apache-2.0", + "node_modules/esbuild/node_modules/@esbuild/linux-arm": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.10.tgz", + "integrity": "sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/deterministic-object-hash": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/deterministic-object-hash/-/deterministic-object-hash-2.0.2.tgz", - "integrity": "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==", - "dev": true, + "node_modules/esbuild/node_modules/@esbuild/linux-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.10.tgz", + "integrity": "sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==", + "cpu": [ + "arm64" + ], "license": "MIT", - "dependencies": { - "base-64": "^1.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { "node": ">=18" } }, - "node_modules/devalue": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.3.2.tgz", - "integrity": "sha512-UDsjUbpQn9kvm68slnrs+mfxwFkIflOhkanmyabZ8zOYk8SMEIbJ3TK+88g70hSIeytu4y18f0z/hYHMTrXIWw==", - "dev": true, - "license": "MIT" - }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", - "dev": true, + "node_modules/esbuild/node_modules/@esbuild/linux-ia32": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.10.tgz", + "integrity": "sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==", + "cpu": [ + "ia32" + ], "license": "MIT", - "dependencies": { - "dequal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/dfa": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", - "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", - "dev": true, - "license": "BSD-3-Clause", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=0.3.1" + "node": ">=18" } }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true, - "license": "MIT" - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, + "node_modules/esbuild/node_modules/@esbuild/linux-loong64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.10.tgz", + "integrity": "sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==", + "cpu": [ + "loong64" + ], "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } + "optional": true, + "os": [ + "linux" ], - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.3.0" - }, "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "node": ">=18" } }, - "node_modules/domutils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" + "node_modules/esbuild/node_modules/@esbuild/linux-mips64el": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.10.tgz", + "integrity": "sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "node_modules/esbuild/node_modules/@esbuild/linux-ppc64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.10.tgz", + "integrity": "sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==", + "cpu": [ + "ppc64" + ], "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/dset": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", - "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", - "dev": true, + "node_modules/esbuild/node_modules/@esbuild/linux-riscv64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.10.tgz", + "integrity": "sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==", + "cpu": [ + "riscv64" + ], "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=4" + "node": ">=18" } }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true, - "license": "MIT" - }, - "node_modules/emmet": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/emmet/-/emmet-2.4.11.tgz", - "integrity": "sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ==", - "dev": true, + "node_modules/esbuild/node_modules/@esbuild/linux-s390x": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.10.tgz", + "integrity": "sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==", + "cpu": [ + "s390x" + ], "license": "MIT", - "workspaces": [ - "./packages/scanner", - "./packages/abbreviation", - "./packages/css-abbreviation", - "./" + "optional": true, + "os": [ + "linux" ], - "dependencies": { - "@emmetio/abbreviation": "^2.3.3", - "@emmetio/css-abbreviation": "^2.1.8" + "engines": { + "node": ">=18" } }, - "node_modules/emoji-regex": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.5.0.tgz", - "integrity": "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==", - "dev": true, - "license": "MIT" + "node_modules/esbuild/node_modules/@esbuild/linux-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.10.tgz", + "integrity": "sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "dev": true, + "node_modules/esbuild/node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.10.tgz", + "integrity": "sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==", + "cpu": [ + "arm64" + ], "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">= 0.8" + "node": ">=18" } }, - "node_modules/encoding-sniffer": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz", - "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==", - "dev": true, + "node_modules/esbuild/node_modules/@esbuild/netbsd-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.10.tgz", + "integrity": "sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "iconv-lite": "^0.6.3", - "whatwg-encoding": "^3.1.1" - }, - "funding": { - "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" } }, - "node_modules/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "dev": true, + "node_modules/esbuild/node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.10.tgz", + "integrity": "sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==", + "cpu": [ + "arm64" + ], "license": "MIT", - "dependencies": { - "once": "^1.4.0" + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" } }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/esbuild/node_modules/@esbuild/openbsd-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.10.tgz", + "integrity": "sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "node": ">=18" } }, - "node_modules/error-stack-parser-es": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz", - "integrity": "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==", - "dev": true, + "node_modules/esbuild/node_modules/@esbuild/sunos-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.10.tgz", + "integrity": "sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==", + "cpu": [ + "x64" + ], "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/antfu" + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" } }, - "node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", - "dev": true, - "license": "MIT" + "node_modules/esbuild/node_modules/@esbuild/win32-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.10.tgz", + "integrity": "sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/esbuild": { + "node_modules/esbuild/node_modules/@esbuild/win32-ia32": { "version": "0.25.10", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.10.tgz", - "integrity": "sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==", - "dev": true, - "hasInstallScript": true, + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.10.tgz", + "integrity": "sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==", + "cpu": [ + "ia32" + ], "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/win32-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.10.tgz", + "integrity": "sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.10", - "@esbuild/android-arm": "0.25.10", - "@esbuild/android-arm64": "0.25.10", - "@esbuild/android-x64": "0.25.10", - "@esbuild/darwin-arm64": "0.25.10", - "@esbuild/darwin-x64": "0.25.10", - "@esbuild/freebsd-arm64": "0.25.10", - "@esbuild/freebsd-x64": "0.25.10", - "@esbuild/linux-arm": "0.25.10", - "@esbuild/linux-arm64": "0.25.10", - "@esbuild/linux-ia32": "0.25.10", - "@esbuild/linux-loong64": "0.25.10", - "@esbuild/linux-mips64el": "0.25.10", - "@esbuild/linux-ppc64": "0.25.10", - "@esbuild/linux-riscv64": "0.25.10", - "@esbuild/linux-s390x": "0.25.10", - "@esbuild/linux-x64": "0.25.10", - "@esbuild/netbsd-arm64": "0.25.10", - "@esbuild/netbsd-x64": "0.25.10", - "@esbuild/openbsd-arm64": "0.25.10", - "@esbuild/openbsd-x64": "0.25.10", - "@esbuild/openharmony-arm64": "0.25.10", - "@esbuild/sunos-x64": "0.25.10", - "@esbuild/win32-arm64": "0.25.10", - "@esbuild/win32-ia32": "0.25.10", - "@esbuild/win32-x64": "0.25.10" } }, "node_modules/escalade": { @@ -4864,16 +4078,10 @@ }, "node_modules/escape-html": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true, "license": "MIT" }, "node_modules/escape-string-regexp": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -4884,9 +4092,6 @@ }, "node_modules/estree-walker": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, "license": "MIT", "dependencies": { "@types/estree": "^1.0.0" @@ -4894,9 +4099,6 @@ }, "node_modules/etag": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -4914,9 +4116,6 @@ }, "node_modules/eventemitter3": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "dev": true, "license": "MIT" }, "node_modules/events": { @@ -4931,9 +4130,6 @@ }, "node_modules/exit-hook": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz", - "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -4944,16 +4140,10 @@ }, "node_modules/exsolve": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.7.tgz", - "integrity": "sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==", - "dev": true, "license": "MIT" }, "node_modules/extend": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true, "license": "MIT" }, "node_modules/fast-copy": { @@ -4965,9 +4155,6 @@ }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, "license": "MIT" }, "node_modules/fast-glob": { @@ -5023,9 +4210,6 @@ }, "node_modules/fdir": { "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, "license": "MIT", "engines": { "node": ">=12.0.0" @@ -5054,9 +4238,6 @@ }, "node_modules/flattie": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz", - "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -5064,9 +4245,6 @@ }, "node_modules/fontace": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.3.1.tgz", - "integrity": "sha512-9f5g4feWT1jWT8+SbL85aLIRLIXUaDygaM2xPXRmzPYxrOMNok79Lr3FGJoKVNKibE0WCunNiEVG2mwuE+2qEg==", - "dev": true, "license": "MIT", "dependencies": { "@types/fontkit": "^2.0.8", @@ -5077,7 +4255,6 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-2.0.4.tgz", "integrity": "sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==", - "dev": true, "license": "MIT", "dependencies": { "@swc/helpers": "^0.5.12", @@ -5103,9 +4280,6 @@ }, "node_modules/fresh": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -5113,10 +4287,6 @@ }, "node_modules/fsevents": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, "license": "MIT", "optional": true, "os": [ @@ -5138,9 +4308,6 @@ }, "node_modules/get-east-asian-width": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", - "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -5164,9 +4331,6 @@ }, "node_modules/github-slugger": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", - "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", - "dev": true, "license": "ISC" }, "node_modules/glob-parent": { @@ -5184,9 +4348,6 @@ }, "node_modules/glob-to-regexp": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true, "license": "BSD-2-Clause" }, "node_modules/gmod-wiki-scraper": { @@ -5238,9 +4399,6 @@ }, "node_modules/h3": { "version": "1.15.4", - "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.4.tgz", - "integrity": "sha512-z5cFQWDffyOe4vQ9xIqNfCZdV4p//vy6fBnr8Q1AWnVZ0teurKMG66rLj++TKwKPUP3u7iMUvrvKaEUiQw2QWQ==", - "dev": true, "license": "MIT", "dependencies": { "cookie-es": "^1.2.2", @@ -5256,9 +4414,6 @@ }, "node_modules/hast-util-from-html": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz", - "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==", - "dev": true, "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -5275,9 +4430,6 @@ }, "node_modules/hast-util-from-parse5": { "version": "8.0.3", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", - "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", - "dev": true, "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -5296,9 +4448,6 @@ }, "node_modules/hast-util-is-element": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", - "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", - "dev": true, "license": "MIT", "dependencies": { "@types/hast": "^3.0.0" @@ -5310,9 +4459,6 @@ }, "node_modules/hast-util-parse-selector": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", - "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", - "dev": true, "license": "MIT", "dependencies": { "@types/hast": "^3.0.0" @@ -5324,9 +4470,6 @@ }, "node_modules/hast-util-raw": { "version": "9.1.0", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", - "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", - "dev": true, "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -5350,9 +4493,6 @@ }, "node_modules/hast-util-to-html": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", - "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", - "dev": true, "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -5374,9 +4514,6 @@ }, "node_modules/hast-util-to-parse5": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", - "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", - "dev": true, "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -5394,9 +4531,6 @@ }, "node_modules/hast-util-to-parse5/node_modules/property-information": { "version": "6.5.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", - "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", - "dev": true, "license": "MIT", "funding": { "type": "github", @@ -5405,9 +4539,6 @@ }, "node_modules/hast-util-to-text": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", - "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", - "dev": true, "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -5422,9 +4553,6 @@ }, "node_modules/hast-util-whitespace": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", - "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", - "dev": true, "license": "MIT", "dependencies": { "@types/hast": "^3.0.0" @@ -5436,9 +4564,6 @@ }, "node_modules/hastscript": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", - "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", - "dev": true, "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -5456,6 +4581,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", "integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==", + "dev": true, "license": "MIT", "dependencies": { "capital-case": "^1.0.4", @@ -5471,15 +4597,13 @@ }, "node_modules/html-escaper": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", - "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==", - "dev": true, "license": "MIT" }, "node_modules/html-minifier-next": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/html-minifier-next/-/html-minifier-next-2.1.6.tgz", "integrity": "sha512-4NzJqfN5WJaTuWXW5dq1nyMcxbqAkenpQPrEHq3/QfL1CQlTEaCpKMUAXiDxVHuHamRoQ/Lo9xQunZIBlq/wIg==", + "dev": true, "license": "MIT", "dependencies": { "change-case": "^4.1.2", @@ -5497,6 +4621,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.0.tgz", "integrity": "sha512-FDWG5cmEYf2Z00IkYRhbFrwIwvdFKH07uV8dvNy0omp/Qb1xcyCWp2UDtcwJF4QZZvk0sLudP6/hAu42TaqVhQ==", + "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.12" @@ -5507,9 +4632,6 @@ }, "node_modules/html-void-elements": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", - "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", - "dev": true, "license": "MIT", "funding": { "type": "github", @@ -5551,16 +4673,10 @@ }, "node_modules/http-cache-semantics": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", - "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", - "dev": true, "license": "BSD-2-Clause" }, "node_modules/http-errors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, "license": "MIT", "dependencies": { "depd": "2.0.0", @@ -5575,9 +4691,6 @@ }, "node_modules/http-errors/node_modules/statuses": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -5633,9 +4746,6 @@ }, "node_modules/import-meta-resolve": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", - "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", - "dev": true, "license": "MIT", "funding": { "type": "github", @@ -5644,16 +4754,10 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, "license": "ISC" }, "node_modules/iron-webcrypto": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", - "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/brc-dd" @@ -5661,16 +4765,10 @@ }, "node_modules/is-arrayish": { "version": "0.3.4", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz", - "integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==", - "dev": true, "license": "MIT" }, "node_modules/is-docker": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "dev": true, "license": "MIT", "bin": { "is-docker": "cli.js" @@ -5694,9 +4792,6 @@ }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -5717,9 +4812,6 @@ }, "node_modules/is-inside-container": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "dev": true, "license": "MIT", "dependencies": { "is-docker": "^3.0.0" @@ -5746,9 +4838,6 @@ }, "node_modules/is-plain-obj": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -5759,9 +4848,6 @@ }, "node_modules/is-wsl": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", - "dev": true, "license": "MIT", "dependencies": { "is-inside-container": "^1.0.0" @@ -5785,9 +4871,6 @@ }, "node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -5829,9 +4912,6 @@ }, "node_modules/kleur": { "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -5859,9 +4939,6 @@ }, "node_modules/longest-streak": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", - "dev": true, "license": "MIT", "funding": { "type": "github", @@ -5872,6 +4949,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, "license": "MIT", "dependencies": { "tslib": "^2.0.3" @@ -5892,16 +4970,10 @@ }, "node_modules/lru-cache": { "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, "license": "ISC" }, "node_modules/magic-string": { "version": "0.30.19", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", - "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" @@ -5909,9 +4981,6 @@ }, "node_modules/magicast": { "version": "0.3.5", - "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", - "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.25.4", @@ -5928,9 +4997,6 @@ }, "node_modules/markdown-table": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", - "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", - "dev": true, "license": "MIT", "funding": { "type": "github", @@ -5939,9 +5005,6 @@ }, "node_modules/mdast-util-definitions": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz", - "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==", - "dev": true, "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -5955,9 +5018,6 @@ }, "node_modules/mdast-util-find-and-replace": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", - "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", - "dev": true, "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -5972,9 +5032,6 @@ }, "node_modules/mdast-util-from-markdown": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", - "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", - "dev": true, "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -5997,9 +5054,6 @@ }, "node_modules/mdast-util-gfm": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", - "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", - "dev": true, "license": "MIT", "dependencies": { "mdast-util-from-markdown": "^2.0.0", @@ -6017,9 +5071,6 @@ }, "node_modules/mdast-util-gfm-autolink-literal": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", - "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", - "dev": true, "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -6035,9 +5086,6 @@ }, "node_modules/mdast-util-gfm-footnote": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", - "dev": true, "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -6053,9 +5101,6 @@ }, "node_modules/mdast-util-gfm-strikethrough": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", - "dev": true, "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -6069,9 +5114,6 @@ }, "node_modules/mdast-util-gfm-table": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", - "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", - "dev": true, "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -6087,9 +5129,6 @@ }, "node_modules/mdast-util-gfm-task-list-item": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", - "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", - "dev": true, "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -6104,9 +5143,6 @@ }, "node_modules/mdast-util-phrasing": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", - "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", - "dev": true, "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -6119,9 +5155,6 @@ }, "node_modules/mdast-util-to-hast": { "version": "13.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", - "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", - "dev": true, "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -6141,9 +5174,6 @@ }, "node_modules/mdast-util-to-markdown": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", - "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", - "dev": true, "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -6163,9 +5193,6 @@ }, "node_modules/mdast-util-to-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", - "dev": true, "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0" @@ -6177,9 +5204,6 @@ }, "node_modules/mdn-data": { "version": "2.12.2", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", - "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", - "dev": true, "license": "CC0-1.0" }, "node_modules/merge2": { @@ -6194,9 +5218,6 @@ }, "node_modules/micromark": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", - "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", - "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -6230,9 +5251,6 @@ }, "node_modules/micromark-core-commonmark": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", - "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", - "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -6265,9 +5283,6 @@ }, "node_modules/micromark-extension-gfm": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", - "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", - "dev": true, "license": "MIT", "dependencies": { "micromark-extension-gfm-autolink-literal": "^2.0.0", @@ -6286,9 +5301,6 @@ }, "node_modules/micromark-extension-gfm-autolink-literal": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", - "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", - "dev": true, "license": "MIT", "dependencies": { "micromark-util-character": "^2.0.0", @@ -6303,9 +5315,6 @@ }, "node_modules/micromark-extension-gfm-footnote": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", - "dev": true, "license": "MIT", "dependencies": { "devlop": "^1.0.0", @@ -6324,9 +5333,6 @@ }, "node_modules/micromark-extension-gfm-strikethrough": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", - "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", - "dev": true, "license": "MIT", "dependencies": { "devlop": "^1.0.0", @@ -6343,9 +5349,6 @@ }, "node_modules/micromark-extension-gfm-table": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", - "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", - "dev": true, "license": "MIT", "dependencies": { "devlop": "^1.0.0", @@ -6361,9 +5364,6 @@ }, "node_modules/micromark-extension-gfm-tagfilter": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", - "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", - "dev": true, "license": "MIT", "dependencies": { "micromark-util-types": "^2.0.0" @@ -6375,9 +5375,6 @@ }, "node_modules/micromark-extension-gfm-task-list-item": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", - "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", - "dev": true, "license": "MIT", "dependencies": { "devlop": "^1.0.0", @@ -6393,9 +5390,6 @@ }, "node_modules/micromark-factory-destination": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", - "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", - "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -6415,9 +5409,6 @@ }, "node_modules/micromark-factory-label": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", - "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", - "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -6438,9 +5429,6 @@ }, "node_modules/micromark-factory-space": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -6459,9 +5447,6 @@ }, "node_modules/micromark-factory-title": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", - "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", - "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -6482,9 +5467,6 @@ }, "node_modules/micromark-factory-whitespace": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", - "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", - "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -6505,9 +5487,6 @@ }, "node_modules/micromark-util-character": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -6526,9 +5505,6 @@ }, "node_modules/micromark-util-chunked": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", - "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", - "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -6546,9 +5522,6 @@ }, "node_modules/micromark-util-classify-character": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", - "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", - "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -6568,9 +5541,6 @@ }, "node_modules/micromark-util-combine-extensions": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", - "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", - "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -6589,9 +5559,6 @@ }, "node_modules/micromark-util-decode-numeric-character-reference": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", - "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", - "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -6609,9 +5576,6 @@ }, "node_modules/micromark-util-decode-string": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", - "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", - "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -6632,9 +5596,6 @@ }, "node_modules/micromark-util-encode": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", - "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", - "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -6649,9 +5610,6 @@ }, "node_modules/micromark-util-html-tag-name": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", - "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", - "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -6666,9 +5624,6 @@ }, "node_modules/micromark-util-normalize-identifier": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", - "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", - "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -6686,9 +5641,6 @@ }, "node_modules/micromark-util-resolve-all": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", - "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", - "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -6706,9 +5658,6 @@ }, "node_modules/micromark-util-sanitize-uri": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", - "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", - "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -6728,9 +5677,6 @@ }, "node_modules/micromark-util-subtokenize": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", - "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", - "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -6751,9 +5697,6 @@ }, "node_modules/micromark-util-symbol": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -6768,9 +5711,6 @@ }, "node_modules/micromark-util-types": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", - "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", - "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -6812,9 +5752,6 @@ }, "node_modules/mime": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "dev": true, "license": "MIT", "bin": { "mime": "cli.js" @@ -6825,9 +5762,6 @@ }, "node_modules/mime-db": { "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -6835,9 +5769,6 @@ }, "node_modules/mime-types": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", - "dev": true, "license": "MIT", "dependencies": { "mime-db": "^1.54.0" @@ -6860,9 +5791,9 @@ } }, "node_modules/miniflare": { - "version": "4.20251001.0", - "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-4.20251001.0.tgz", - "integrity": "sha512-OHd31D2LT8JH+85nVXClV0Z18jxirCohzKNAcZs/fgt4mIkUDtidX3VqR3ovAM0jWooNxrFhB9NSs3iDbiJF7Q==", + "version": "4.20251004.0", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-4.20251004.0.tgz", + "integrity": "sha512-XxQ/vZVp5yTbnwq83fJag9DL8ww5IBfzaFZzlxMWMo2wf7bfHPYMkE4VbeibMwdLI+Pkyddg4zIxMTOvvZNigg==", "dev": true, "license": "MIT", "dependencies": { @@ -6874,7 +5805,7 @@ "sharp": "^0.33.5", "stoppable": "1.1.0", "undici": "7.14.0", - "workerd": "1.20251001.0", + "workerd": "1.20251004.0", "ws": "8.18.0", "youch": "4.1.0-beta.10", "zod": "3.22.3" @@ -6909,6 +5840,46 @@ "node": ">=0.4.0" } }, + "node_modules/miniflare/node_modules/sharp": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", + "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.5", + "@img/sharp-darwin-x64": "0.33.5", + "@img/sharp-libvips-darwin-arm64": "1.0.4", + "@img/sharp-libvips-darwin-x64": "1.0.4", + "@img/sharp-libvips-linux-arm": "1.0.5", + "@img/sharp-libvips-linux-arm64": "1.0.4", + "@img/sharp-libvips-linux-s390x": "1.0.4", + "@img/sharp-libvips-linux-x64": "1.0.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", + "@img/sharp-libvips-linuxmusl-x64": "1.0.4", + "@img/sharp-linux-arm": "0.33.5", + "@img/sharp-linux-arm64": "0.33.5", + "@img/sharp-linux-s390x": "0.33.5", + "@img/sharp-linux-x64": "0.33.5", + "@img/sharp-linuxmusl-arm64": "0.33.5", + "@img/sharp-linuxmusl-x64": "0.33.5", + "@img/sharp-wasm32": "0.33.5", + "@img/sharp-win32-ia32": "0.33.5", + "@img/sharp-win32-x64": "0.33.5" + } + }, "node_modules/miniflare/node_modules/undici": { "version": "7.14.0", "resolved": "https://registry.npmjs.org/undici/-/undici-7.14.0.tgz", @@ -6941,9 +5912,6 @@ }, "node_modules/mrmime": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", - "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -6951,9 +5919,6 @@ }, "node_modules/ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, "license": "MIT" }, "node_modules/muggle-string": { @@ -6965,9 +5930,6 @@ }, "node_modules/nanoid": { "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "dev": true, "funding": [ { "type": "github", @@ -6984,9 +5946,6 @@ }, "node_modules/neotraverse": { "version": "0.6.18", - "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz", - "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==", - "dev": true, "license": "MIT", "engines": { "node": ">= 10" @@ -6994,9 +5953,6 @@ }, "node_modules/nlcst-to-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz", - "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==", - "dev": true, "license": "MIT", "dependencies": { "@types/nlcst": "^2.0.0" @@ -7010,6 +5966,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, "license": "MIT", "dependencies": { "lower-case": "^2.0.2", @@ -7018,9 +5975,6 @@ }, "node_modules/node-fetch": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" @@ -7039,23 +5993,14 @@ }, "node_modules/node-fetch-native": { "version": "1.6.7", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", - "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", - "dev": true, "license": "MIT" }, "node_modules/node-mock-http": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.3.tgz", - "integrity": "sha512-jN8dK25fsfnMrVsEhluUTPkBFY+6ybu7jSB1n+ri/vOGjJxU8J9CZhpSGkHXSkFjtUhbmoncG/YG9ta5Ludqog==", - "dev": true, "license": "MIT" }, "node_modules/normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -7089,9 +6034,6 @@ }, "node_modules/ofetch": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.4.1.tgz", - "integrity": "sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==", - "dev": true, "license": "MIT", "dependencies": { "destr": "^2.0.3", @@ -7101,9 +6043,6 @@ }, "node_modules/ohash": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", - "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", - "dev": true, "license": "MIT" }, "node_modules/on-exit-leak-free": { @@ -7118,9 +6057,6 @@ }, "node_modules/on-finished": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, "license": "MIT", "dependencies": { "ee-first": "1.1.1" @@ -7141,16 +6077,10 @@ }, "node_modules/oniguruma-parser": { "version": "0.12.1", - "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz", - "integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==", - "dev": true, "license": "MIT" }, "node_modules/oniguruma-to-es": { "version": "4.3.3", - "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.3.tgz", - "integrity": "sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==", - "dev": true, "license": "MIT", "dependencies": { "oniguruma-parser": "^0.12.1", @@ -7170,9 +6100,6 @@ }, "node_modules/p-limit": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.2.0.tgz", - "integrity": "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==", - "dev": true, "license": "MIT", "dependencies": { "yocto-queue": "^1.1.1" @@ -7186,9 +6113,6 @@ }, "node_modules/p-queue": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.1.tgz", - "integrity": "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==", - "dev": true, "license": "MIT", "dependencies": { "eventemitter3": "^5.0.1", @@ -7203,9 +6127,6 @@ }, "node_modules/p-timeout": { "version": "6.1.4", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", - "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", - "dev": true, "license": "MIT", "engines": { "node": ">=14.16" @@ -7216,22 +6137,17 @@ }, "node_modules/package-manager-detector": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.4.0.tgz", - "integrity": "sha512-rRZ+pR1Usc+ND9M2NkmCvE/LYJS+8ORVV9X0KuNSY/gFsp7RBHJM/ADh9LYq4Vvfq6QkKrW6/weuh8SMEtN5gw==", - "dev": true, "license": "MIT" }, "node_modules/pako": { "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", - "dev": true, "license": "MIT" }, "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, "license": "MIT", "dependencies": { "dot-case": "^3.0.4", @@ -7240,9 +6156,6 @@ }, "node_modules/parse-latin": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz", - "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==", - "dev": true, "license": "MIT", "dependencies": { "@types/nlcst": "^2.0.0", @@ -7259,9 +6172,6 @@ }, "node_modules/parse5": { "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", - "dev": true, "license": "MIT", "dependencies": { "entities": "^6.0.0" @@ -7299,9 +6209,6 @@ }, "node_modules/parse5/node_modules/entities": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", - "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.12" @@ -7314,6 +6221,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, "license": "MIT", "dependencies": { "no-case": "^3.0.4", @@ -7331,6 +6239,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", "integrity": "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==", + "dev": true, "license": "MIT", "dependencies": { "dot-case": "^3.0.4", @@ -7339,30 +6248,18 @@ }, "node_modules/path-to-regexp": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", - "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", - "dev": true, "license": "MIT" }, "node_modules/pathe": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, "license": "MIT" }, "node_modules/picocolors": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, "license": "ISC" }, "node_modules/picomatch": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -7439,9 +6336,6 @@ }, "node_modules/postcss": { "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "dev": true, "funding": [ { "type": "opencollective", @@ -7466,11 +6360,28 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/prettier": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/prismjs": { "version": "1.30.0", "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -7505,9 +6416,6 @@ }, "node_modules/prompts": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, "license": "MIT", "dependencies": { "kleur": "^3.0.3", @@ -7519,9 +6427,6 @@ }, "node_modules/prompts/node_modules/kleur": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -7529,9 +6434,6 @@ }, "node_modules/property-information": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", - "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", - "dev": true, "license": "MIT", "funding": { "type": "github", @@ -7592,16 +6494,10 @@ }, "node_modules/radix3": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", - "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", - "dev": true, "license": "MIT" }, "node_modules/range-parser": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -7626,9 +6522,6 @@ }, "node_modules/readdirp": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 14.18.0" @@ -7650,9 +6543,6 @@ }, "node_modules/regex": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/regex/-/regex-6.0.1.tgz", - "integrity": "sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==", - "dev": true, "license": "MIT", "dependencies": { "regex-utilities": "^2.3.0" @@ -7660,9 +6550,6 @@ }, "node_modules/regex-recursion": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", - "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", - "dev": true, "license": "MIT", "dependencies": { "regex-utilities": "^2.3.0" @@ -7670,16 +6557,10 @@ }, "node_modules/regex-utilities": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", - "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", - "dev": true, "license": "MIT" }, "node_modules/rehype": { "version": "13.0.2", - "resolved": "https://registry.npmjs.org/rehype/-/rehype-13.0.2.tgz", - "integrity": "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==", - "dev": true, "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -7694,9 +6575,6 @@ }, "node_modules/rehype-parse": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.1.tgz", - "integrity": "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==", - "dev": true, "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -7710,9 +6588,6 @@ }, "node_modules/rehype-raw": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", - "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", - "dev": true, "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -7726,9 +6601,6 @@ }, "node_modules/rehype-stringify": { "version": "10.0.1", - "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz", - "integrity": "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==", - "dev": true, "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -7744,6 +6616,7 @@ "version": "0.2.7", "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.10" @@ -7751,9 +6624,6 @@ }, "node_modules/remark-gfm": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", - "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", - "dev": true, "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -7770,9 +6640,6 @@ }, "node_modules/remark-parse": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", - "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", - "dev": true, "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -7787,9 +6654,6 @@ }, "node_modules/remark-rehype": { "version": "11.1.2", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", - "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", - "dev": true, "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -7805,9 +6669,6 @@ }, "node_modules/remark-smartypants": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.2.tgz", - "integrity": "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==", - "dev": true, "license": "MIT", "dependencies": { "retext": "^9.0.0", @@ -7821,9 +6682,6 @@ }, "node_modules/remark-stringify": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", - "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", - "dev": true, "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -7887,16 +6745,10 @@ }, "node_modules/restructure": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/restructure/-/restructure-3.0.2.tgz", - "integrity": "sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==", - "dev": true, "license": "MIT" }, "node_modules/retext": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz", - "integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==", - "dev": true, "license": "MIT", "dependencies": { "@types/nlcst": "^2.0.0", @@ -7911,9 +6763,6 @@ }, "node_modules/retext-latin": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-4.0.0.tgz", - "integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==", - "dev": true, "license": "MIT", "dependencies": { "@types/nlcst": "^2.0.0", @@ -7927,9 +6776,6 @@ }, "node_modules/retext-smartypants": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz", - "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==", - "dev": true, "license": "MIT", "dependencies": { "@types/nlcst": "^2.0.0", @@ -7943,9 +6789,6 @@ }, "node_modules/retext-stringify": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-4.0.0.tgz", - "integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==", - "dev": true, "license": "MIT", "dependencies": { "@types/nlcst": "^2.0.0", @@ -7972,7 +6815,6 @@ "version": "4.52.4", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.4.tgz", "integrity": "sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==", - "dev": true, "license": "MIT", "dependencies": { "@types/estree": "1.0.8" @@ -8080,10 +6922,7 @@ "license": "BSD-3-Clause" }, "node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, + "version": "7.7.3", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -8094,9 +6933,6 @@ }, "node_modules/send": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", - "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", - "dev": true, "license": "MIT", "dependencies": { "debug": "^4.3.5", @@ -8119,6 +6955,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==", + "dev": true, "license": "MIT", "dependencies": { "no-case": "^3.0.4", @@ -8128,29 +6965,21 @@ }, "node_modules/server-destroy": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", - "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==", - "dev": true, "license": "ISC" }, "node_modules/setprototypeof": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true, "license": "ISC" }, "node_modules/sharp": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", - "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", - "dev": true, + "version": "0.34.4", + "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "color": "^4.2.3", - "detect-libc": "^2.0.3", - "semver": "^7.6.3" + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.0", + "semver": "^7.7.2" }, "engines": { "node": "^18.17.0 || ^20.3.0 || >=21.0.0" @@ -8159,1811 +6988,1604 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.33.5", - "@img/sharp-darwin-x64": "0.33.5", - "@img/sharp-libvips-darwin-arm64": "1.0.4", - "@img/sharp-libvips-darwin-x64": "1.0.4", - "@img/sharp-libvips-linux-arm": "1.0.5", - "@img/sharp-libvips-linux-arm64": "1.0.4", - "@img/sharp-libvips-linux-s390x": "1.0.4", - "@img/sharp-libvips-linux-x64": "1.0.4", - "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", - "@img/sharp-libvips-linuxmusl-x64": "1.0.4", - "@img/sharp-linux-arm": "0.33.5", - "@img/sharp-linux-arm64": "0.33.5", - "@img/sharp-linux-s390x": "0.33.5", - "@img/sharp-linux-x64": "0.33.5", - "@img/sharp-linuxmusl-arm64": "0.33.5", - "@img/sharp-linuxmusl-x64": "0.33.5", - "@img/sharp-wasm32": "0.33.5", - "@img/sharp-win32-ia32": "0.33.5", - "@img/sharp-win32-x64": "0.33.5" - } - }, - "node_modules/shiki": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.13.0.tgz", - "integrity": "sha512-aZW4l8Og16CokuCLf8CF8kq+KK2yOygapU5m3+hoGw0Mdosc6fPitjM+ujYarppj5ZIKGyPDPP1vqmQhr+5/0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/core": "3.13.0", - "@shikijs/engine-javascript": "3.13.0", - "@shikijs/engine-oniguruma": "3.13.0", - "@shikijs/langs": "3.13.0", - "@shikijs/themes": "3.13.0", - "@shikijs/types": "3.13.0", - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz", - "integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.3.1" + "@img/sharp-darwin-arm64": "0.34.4", + "@img/sharp-darwin-x64": "0.34.4", + "@img/sharp-libvips-darwin-arm64": "1.2.3", + "@img/sharp-libvips-darwin-x64": "1.2.3", + "@img/sharp-libvips-linux-arm": "1.2.3", + "@img/sharp-libvips-linux-arm64": "1.2.3", + "@img/sharp-libvips-linux-ppc64": "1.2.3", + "@img/sharp-libvips-linux-s390x": "1.2.3", + "@img/sharp-libvips-linux-x64": "1.2.3", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.3", + "@img/sharp-libvips-linuxmusl-x64": "1.2.3", + "@img/sharp-linux-arm": "0.34.4", + "@img/sharp-linux-arm64": "0.34.4", + "@img/sharp-linux-ppc64": "0.34.4", + "@img/sharp-linux-s390x": "0.34.4", + "@img/sharp-linux-x64": "0.34.4", + "@img/sharp-linuxmusl-arm64": "0.34.4", + "@img/sharp-linuxmusl-x64": "0.34.4", + "@img/sharp-wasm32": "0.34.4", + "@img/sharp-win32-arm64": "0.34.4", + "@img/sharp-win32-ia32": "0.34.4", + "@img/sharp-win32-x64": "0.34.4" } }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/slow-redact": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/slow-redact/-/slow-redact-0.3.1.tgz", - "integrity": "sha512-NvFvl1GuLZNW4U046Tfi8b26zXo8aBzgCAS2f7yVJR/fArN93mOqSA99cB9uITm92ajSz01bsu1K7SCVVjIMpQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/smol-toml": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.4.2.tgz", - "integrity": "sha512-rInDH6lCNiEyn3+hH8KVGFdbjc099j47+OSgbMrfDYX1CmXLfdKd7qi6IfcWj2wFxvSVkuI46M+wPGYfEOEj6g==", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/sharp/node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.4.tgz", + "integrity": "sha512-sitdlPzDVyvmINUdJle3TNHl+AG9QcwiAMsXmccqsCOMZNIdW2/7S26w0LyU8euiLVzFBL3dXPwVCq/ODnf2vA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 18" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "url": "https://github.com/sponsors/cyyynthia" - } - }, - "node_modules/snake-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/sonic-boom": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.0.tgz", - "integrity": "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==", - "dev": true, - "license": "MIT", - "dependencies": { - "atomic-sleep": "^1.0.0" + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.3" } }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", + "node_modules/sharp/node_modules/@img/sharp-darwin-x64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.4.tgz", + "integrity": "sha512-rZheupWIoa3+SOdF/IcUe1ah4ZDpKBGWcsPX6MT0lYniH9micvIU7HQkYTfrx5Xi8u+YqwLtxC/3vl8TQN6rMg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=0.10.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.3" } }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" + "node_modules/sharp/node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.3.tgz", + "integrity": "sha512-QzWAKo7kpHxbuHqUC28DZ9pIKpSi2ts2OJnoIGI26+HMgq92ZZ4vk8iJd4XsxN+tYfNJxzH6W62X5eTcsBymHw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "node_modules/sharp/node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.3.tgz", + "integrity": "sha512-Ju+g2xn1E2AKO6YBhxjj+ACcsPQRHT0bhpglxcEf+3uyPY+/gL8veniKoo96335ZaPo03bdDXMv0t+BBFAbmRA==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", - "dev": true, - "license": "MIT", + "node_modules/sharp/node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.3.tgz", + "integrity": "sha512-x1uE93lyP6wEwGvgAIV0gP6zmaL/a0tGzJs/BIDDG0zeBhMnuUPm7ptxGhUbcGs4okDJrk4nxgrmxpib9g6HpA==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://opencollective.com/libvips" } }, - "node_modules/split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 10.x" + "node_modules/sharp/node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.3.tgz", + "integrity": "sha512-I4RxkXU90cpufazhGPyVujYwfIm9Nk1QDEmiIsaPwdnm013F7RIceaCc87kAH+oUB1ezqEvC6ga4m7MSlqsJvQ==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" + "node_modules/sharp/node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.3.tgz", + "integrity": "sha512-RgWrs/gVU7f+K7P+KeHFaBAJlNkD1nIZuVXdQv6S+fNA6syCcoboNjsV2Pou7zNlVdNQoQUpQTk8SWDHUA3y/w==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/stoppable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", - "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4", - "npm": ">=6" + "node_modules/sharp/node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.3.tgz", + "integrity": "sha512-3JU7LmR85K6bBiRzSUc/Ff9JBVIFVvq6bomKE0e63UXGeRw2HPVEjoJke1Yx+iU4rL7/7kUjES4dZ/81Qjhyxg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" + "node_modules/sharp/node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.3.tgz", + "integrity": "sha512-F9q83RZ8yaCwENw1GieztSfj5msz7GGykG/BA+MOUefvER69K/ubgFHNeSyUu64amHIYKGDs4sRCMzXVj8sEyw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, + "node_modules/sharp/node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.3.tgz", + "integrity": "sha512-U5PUY5jbc45ANM6tSJpsgqmBF/VsL6LnxJmIf11kB7J5DctHgqm0SkuXzVWtIY90GnJxKnC/JT251TDnk1fu/g==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/libvips" } }, - "node_modules/stringify-entities": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", - "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-entities-html4": "^2.0.0", - "character-entities-legacy": "^3.0.0" + "node_modules/sharp/node_modules/@img/sharp-linux-arm": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.4.tgz", + "integrity": "sha512-Xyam4mlqM0KkTHYVSuc6wXRmM7LGN0P12li03jAnZ3EJWZqj83+hi8Y9UxZUbxsgsK1qOEwg7O0Bc0LjqQVtxA==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.3" } }, - "node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, + "node_modules/sharp/node_modules/@img/sharp-linux-arm64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.4.tgz", + "integrity": "sha512-YXU1F/mN/Wu786tl72CyJjP/Ngl8mGHN1hST4BGl+hiW5jhCnV2uRVTNOcaYPs73NeT/H8Upm3y9582JVuZHrQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=12" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.3" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", - "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", - "dev": true, - "license": "MIT", + "node_modules/sharp/node_modules/@img/sharp-linux-s390x": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.4.tgz", + "integrity": "sha512-qVrZKE9Bsnzy+myf7lFKvng6bQzhNUAYcVORq2P7bDlvmF6u2sCmK2KyEQEBdYk+u3T01pVsPrkj943T1aJAsw==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=18" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/terser": { - "version": "5.44.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.0.tgz", - "integrity": "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==", - "license": "BSD-2-Clause", - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.15.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" + "url": "https://opencollective.com/libvips" }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "license": "MIT" - }, - "node_modules/thread-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz", - "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==", - "dev": true, - "license": "MIT", - "dependencies": { - "real-require": "^0.2.0" + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.3" } }, - "node_modules/tiny-inflate": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", - "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinyexec": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", - "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" - }, + "node_modules/sharp/node_modules/@img/sharp-linux-x64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.4.tgz", + "integrity": "sha512-ZfGtcp2xS51iG79c6Vhw9CWqQC8l2Ot8dygxoDoIQPTat/Ov3qAa8qpxSrtAEAJW+UjTXc4yxCjNfxm4h6Xm2A==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=12.0.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true, - "license": "MIT" - }, - "node_modules/trim-lines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", - "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/trough": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", - "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tsconfck": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz", - "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==", - "dev": true, - "license": "MIT", - "bin": { - "tsconfck": "bin/tsconfck.js" - }, - "engines": { - "node": "^18 || >=20" - }, - "peerDependencies": { - "typescript": "^5.0.0" + "url": "https://opencollective.com/libvips" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.3" } }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", + "node_modules/sharp/node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.4.tgz", + "integrity": "sha512-8hDVvW9eu4yHWnjaOOR8kHVrew1iIX+MUgwxSuH2XyYeNRtLUe4VNioSqbNkB7ZYQJj9rUTT4PyRscyk2PXFKA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=16" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typesafe-path": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/typesafe-path/-/typesafe-path-0.2.2.tgz", - "integrity": "sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA==", - "dev": true, - "license": "MIT" - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "url": "https://opencollective.com/libvips" }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/typescript-auto-import-cache": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/typescript-auto-import-cache/-/typescript-auto-import-cache-0.3.6.tgz", - "integrity": "sha512-RpuHXrknHdVdK7wv/8ug3Fr0WNsNi5l5aB8MYYuXhq2UH5lnEB1htJ1smhtD5VeCsGr2p8mUDtd83LCQDFVgjQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.3.8" + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.3" } }, - "node_modules/ufo": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", - "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", - "dev": true, - "license": "MIT" - }, - "node_modules/ultrahtml": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.6.0.tgz", - "integrity": "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==", - "dev": true, - "license": "MIT" - }, - "node_modules/uncrypto": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", - "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/undici": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.16.0.tgz", - "integrity": "sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==", - "dev": true, - "license": "MIT", + "node_modules/sharp/node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.4.tgz", + "integrity": "sha512-lU0aA5L8QTlfKjpDCEFOZsTYGn3AEiO6db8W5aQDxj0nQkVrZWmN3ZP9sYKWJdtq3PWPhUNlqehWyXpYDcI9Sg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=20.18.1" - } - }, - "node_modules/undici-types": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.14.0.tgz", - "integrity": "sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==", - "dev": true, - "license": "MIT" - }, - "node_modules/unenv": { - "version": "2.0.0-rc.21", - "resolved": "https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.21.tgz", - "integrity": "sha512-Wj7/AMtE9MRnAXa6Su3Lk0LNCfqDYgfwVjwRFVum9U7wsto1imuHqk4kTm7Jni+5A0Hn7dttL6O/zjvUvoo+8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "defu": "^6.1.4", - "exsolve": "^1.0.7", - "ohash": "^2.0.11", - "pathe": "^2.0.3", - "ufo": "^1.6.1" - } - }, - "node_modules/unicode-properties": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", - "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", - "dev": true, - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.0", - "unicode-trie": "^2.0.0" - } - }, - "node_modules/unicode-trie": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", - "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "pako": "^0.2.5", - "tiny-inflate": "^1.0.0" - } - }, - "node_modules/unified": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", - "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unifont": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.5.2.tgz", - "integrity": "sha512-LzR4WUqzH9ILFvjLAUU7dK3Lnou/qd5kD+IakBtBK4S15/+x2y9VX+DcWQv6s551R6W+vzwgVS6tFg3XggGBgg==", - "dev": true, - "license": "MIT", - "dependencies": { - "css-tree": "^3.0.0", - "ofetch": "^1.4.1", - "ohash": "^2.0.0" + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.3" } }, - "node_modules/unist-util-find-after": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", - "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", - "dev": true, - "license": "MIT", + "node_modules/sharp/node_modules/@img/sharp-wasm32": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.4.tgz", + "integrity": "sha512-33QL6ZO/qpRyG7woB/HUALz28WnTMI2W1jgX3Nu2bypqLIKx/QKMILLJzJjI+SIbvXdG9fUnmrxR7vbi1sTBeA==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" + "@emnapi/runtime": "^1.5.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://opencollective.com/libvips" } }, - "node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" + "node_modules/sharp/node_modules/@img/sharp-win32-ia32": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.4.tgz", + "integrity": "sha512-3ZeLue5V82dT92CNL6rsal6I2weKw1cYu+rGKm8fOCCtJTR2gYeUfY3FqUnIJsMUPIH68oS5jmZ0NiJ508YpEw==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://opencollective.com/libvips" } }, - "node_modules/unist-util-modify-children": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-4.0.0.tgz", - "integrity": "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "array-iterate": "^2.0.0" + "node_modules/sharp/node_modules/@img/sharp-win32-x64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.4.tgz", + "integrity": "sha512-xIyj4wpYs8J18sVN3mSQjwrw7fKUqRw+Z5rnHNCy5fYTxigBz81u5mOMPmFumwjcn8+ld1ppptMBCLic1nz6ig==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://opencollective.com/libvips" } }, - "node_modules/unist-util-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", - "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", - "dev": true, + "node_modules/shiki": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.13.0.tgz", + "integrity": "sha512-aZW4l8Og16CokuCLf8CF8kq+KK2yOygapU5m3+hoGw0Mdosc6fPitjM+ujYarppj5ZIKGyPDPP1vqmQhr+5/0g==", "license": "MIT", "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@shikijs/core": "3.13.0", + "@shikijs/engine-javascript": "3.13.0", + "@shikijs/engine-oniguruma": "3.13.0", + "@shikijs/langs": "3.13.0", + "@shikijs/themes": "3.13.0", + "@shikijs/types": "3.13.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" } }, - "node_modules/unist-util-remove-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", - "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", - "dev": true, + "node_modules/simple-swizzle": { + "version": "0.2.4", "license": "MIT", "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-visit": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "is-arrayish": "^0.3.1" } }, - "node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "node_modules/sisteransi": { + "version": "1.0.5", + "license": "MIT" + }, + "node_modules/slow-redact": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/slow-redact/-/slow-redact-0.3.1.tgz", + "integrity": "sha512-NvFvl1GuLZNW4U046Tfi8b26zXo8aBzgCAS2f7yVJR/fArN93mOqSA99cB9uITm92ajSz01bsu1K7SCVVjIMpQ==", "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" + "license": "MIT" + }, + "node_modules/smol-toml": { + "version": "1.4.2", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 18" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/cyyynthia" } }, - "node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "node_modules/snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", "dev": true, "license": "MIT", "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "dot-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "node_modules/unist-util-visit-children": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-3.0.0.tgz", - "integrity": "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==", + "node_modules/sonic-boom": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.0.tgz", + "integrity": "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==", "dev": true, "license": "MIT", "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "atomic-sleep": "^1.0.0" } }, - "node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "dev": true, + "node_modules/source-map": { + "version": "0.6.1", + "devOptional": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "devOptional": true, "license": "MIT", "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/unstorage": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.1.tgz", - "integrity": "sha512-KKGwRTT0iVBCErKemkJCLs7JdxNVfqTPc/85ae1XES0+bsHbc/sFBfVi5kJp156cc51BHinIH2l3k0EZ24vOBQ==", - "dev": true, + "node_modules/space-separated-tokens": { + "version": "2.0.2", "license": "MIT", - "dependencies": { - "anymatch": "^3.1.3", - "chokidar": "^4.0.3", - "destr": "^2.0.5", - "h3": "^1.15.4", - "lru-cache": "^10.4.3", - "node-fetch-native": "^1.6.7", - "ofetch": "^1.4.1", - "ufo": "^1.6.1" - }, - "peerDependencies": { - "@azure/app-configuration": "^1.8.0", - "@azure/cosmos": "^4.2.0", - "@azure/data-tables": "^13.3.0", - "@azure/identity": "^4.6.0", - "@azure/keyvault-secrets": "^4.9.0", - "@azure/storage-blob": "^12.26.0", - "@capacitor/preferences": "^6.0.3 || ^7.0.0", - "@deno/kv": ">=0.9.0", - "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", - "@planetscale/database": "^1.19.0", - "@upstash/redis": "^1.34.3", - "@vercel/blob": ">=0.27.1", - "@vercel/functions": "^2.2.12 || ^3.0.0", - "@vercel/kv": "^1.0.1", - "aws4fetch": "^1.0.20", - "db0": ">=0.2.1", - "idb-keyval": "^6.2.1", - "ioredis": "^5.4.2", - "uploadthing": "^7.4.4" - }, - "peerDependenciesMeta": { - "@azure/app-configuration": { - "optional": true - }, - "@azure/cosmos": { - "optional": true - }, - "@azure/data-tables": { - "optional": true - }, - "@azure/identity": { - "optional": true - }, - "@azure/keyvault-secrets": { - "optional": true - }, - "@azure/storage-blob": { - "optional": true - }, - "@capacitor/preferences": { - "optional": true - }, - "@deno/kv": { - "optional": true - }, - "@netlify/blobs": { - "optional": true - }, - "@planetscale/database": { - "optional": true - }, - "@upstash/redis": { - "optional": true - }, - "@vercel/blob": { - "optional": true - }, - "@vercel/functions": { - "optional": true - }, - "@vercel/kv": { - "optional": true - }, - "aws4fetch": { - "optional": true - }, - "db0": { - "optional": true - }, - "idb-keyval": { - "optional": true - }, - "ioredis": { - "optional": true - }, - "uploadthing": { - "optional": true - } + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/upper-case": { + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/statuses": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", - "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" + "engines": { + "node": ">= 0.8" } }, - "node_modules/upper-case-first": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", - "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", + "node_modules/stoppable": { + "version": "1.1.0", "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" + "engines": { + "node": ">=4", + "npm": ">=6" } }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } }, - "node_modules/vfile": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", - "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", - "dev": true, + "node_modules/string-width": { + "version": "7.2.0", "license": "MIT", "dependencies": { - "@types/unist": "^3.0.0", - "vfile-message": "^4.0.0" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/vfile-location": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", - "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", - "dev": true, + "node_modules/stringify-entities": { + "version": "4.0.4", "license": "MIT", "dependencies": { - "@types/unist": "^3.0.0", - "vfile": "^6.0.0" + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/vfile-message": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", - "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", - "dev": true, + "node_modules/strip-ansi": { + "version": "7.1.2", "license": "MIT", "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/vite": { - "version": "6.3.6", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.6.tgz", - "integrity": "sha512-0msEVHJEScQbhkbVTb/4iHZdJ6SXp/AvxL2sjwYQFfBqleHtnCqv1J3sa9zbWz/6kW1m9Tfzn92vW+kZ1WV6QA==", + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "license": "MIT", - "dependencies": { - "esbuild": "^0.25.0", - "fdir": "^6.4.4", - "picomatch": "^4.0.2", - "postcss": "^8.5.3", - "rollup": "^4.34.9", - "tinyglobby": "^0.2.13" - }, - "bin": { - "vite": "bin/vite.js" + "engines": { + "node": ">=8" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "10.2.2", + "license": "MIT", "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + "node": ">=18" }, "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/terser": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.0.tgz", + "integrity": "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==", + "devOptional": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" }, - "optionalDependencies": { - "fsevents": "~2.3.3" + "bin": { + "terser": "bin/terser" }, - "peerDependencies": { - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "jiti": ">=1.21.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/thread-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz", + "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==", + "dev": true, + "license": "MIT", + "dependencies": { + "real-require": "^0.2.0" + } + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/vitefu": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.1.tgz", - "integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "license": "MIT", - "workspaces": [ - "tests/deps/*", - "tests/projects/*", - "tests/projects/workspace/packages/*" - ], - "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" + "dependencies": { + "is-number": "^7.0.0" }, - "peerDependenciesMeta": { - "vite": { - "optional": true - } + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "license": "MIT" + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/volar-service-css": { - "version": "0.0.62", - "resolved": "https://registry.npmjs.org/volar-service-css/-/volar-service-css-0.0.62.tgz", - "integrity": "sha512-JwNyKsH3F8PuzZYuqPf+2e+4CTU8YoyUHEHVnoXNlrLe7wy9U3biomZ56llN69Ris7TTy/+DEX41yVxQpM4qvg==", + "node_modules/trough": { + "version": "2.2.0", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, "license": "MIT", "dependencies": { - "vscode-css-languageservice": "^6.3.0", - "vscode-languageserver-textdocument": "^1.0.11", - "vscode-uri": "^3.0.8" + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" }, "peerDependencies": { - "@volar/language-service": "~2.4.0" + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" }, "peerDependenciesMeta": { - "@volar/language-service": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { "optional": true } } }, - "node_modules/volar-service-emmet": { - "version": "0.0.62", - "resolved": "https://registry.npmjs.org/volar-service-emmet/-/volar-service-emmet-0.0.62.tgz", - "integrity": "sha512-U4dxWDBWz7Pi4plpbXf4J4Z/ss6kBO3TYrACxWNsE29abu75QzVS0paxDDhI6bhqpbDFXlpsDhZ9aXVFpnfGRQ==", + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tsconfck": { + "version": "3.1.6", "license": "MIT", - "dependencies": { - "@emmetio/css-parser": "^0.4.0", - "@emmetio/html-matcher": "^1.3.0", - "@vscode/emmet-helper": "^2.9.3", - "vscode-uri": "^3.0.8" + "bin": { + "tsconfck": "bin/tsconfck.js" + }, + "engines": { + "node": "^18 || >=20" }, "peerDependencies": { - "@volar/language-service": "~2.4.0" + "typescript": "^5.0.0" }, "peerDependenciesMeta": { - "@volar/language-service": { + "typescript": { "optional": true } } }, - "node_modules/volar-service-html": { - "version": "0.0.62", - "resolved": "https://registry.npmjs.org/volar-service-html/-/volar-service-html-0.0.62.tgz", - "integrity": "sha512-Zw01aJsZRh4GTGUjveyfEzEqpULQUdQH79KNEiKVYHZyuGtdBRYCHlrus1sueSNMxwwkuF5WnOHfvBzafs8yyQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "vscode-html-languageservice": "^5.3.0", - "vscode-languageserver-textdocument": "^1.0.11", - "vscode-uri": "^3.0.8" + "node_modules/tslib": { + "version": "2.8.1", + "license": "0BSD" + }, + "node_modules/type-fest": { + "version": "4.41.0", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" }, - "peerDependencies": { - "@volar/language-service": "~2.4.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typesafe-path": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/typesafe-path/-/typesafe-path-0.2.2.tgz", + "integrity": "sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA==", + "dev": true, + "license": "MIT" + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, - "peerDependenciesMeta": { - "@volar/language-service": { - "optional": true - } + "engines": { + "node": ">=14.17" } }, - "node_modules/volar-service-prettier": { - "version": "0.0.62", - "resolved": "https://registry.npmjs.org/volar-service-prettier/-/volar-service-prettier-0.0.62.tgz", - "integrity": "sha512-h2yk1RqRTE+vkYZaI9KYuwpDfOQRrTEMvoHol0yW4GFKc75wWQRrb5n/5abDrzMPrkQbSip8JH2AXbvrRtYh4w==", + "node_modules/typescript-auto-import-cache": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/typescript-auto-import-cache/-/typescript-auto-import-cache-0.3.6.tgz", + "integrity": "sha512-RpuHXrknHdVdK7wv/8ug3Fr0WNsNi5l5aB8MYYuXhq2UH5lnEB1htJ1smhtD5VeCsGr2p8mUDtd83LCQDFVgjQ==", "dev": true, "license": "MIT", "dependencies": { - "vscode-uri": "^3.0.8" - }, - "peerDependencies": { - "@volar/language-service": "~2.4.0", - "prettier": "^2.2 || ^3.0" - }, - "peerDependenciesMeta": { - "@volar/language-service": { - "optional": true - }, - "prettier": { - "optional": true - } + "semver": "^7.3.8" } }, - "node_modules/volar-service-typescript": { - "version": "0.0.62", - "resolved": "https://registry.npmjs.org/volar-service-typescript/-/volar-service-typescript-0.0.62.tgz", - "integrity": "sha512-p7MPi71q7KOsH0eAbZwPBiKPp9B2+qrdHAd6VY5oTo9BUXatsOAdakTm9Yf0DUj6uWBAaOT01BSeVOPwucMV1g==", + "node_modules/ufo": { + "version": "1.6.1", + "license": "MIT" + }, + "node_modules/ultrahtml": { + "version": "1.6.0", + "license": "MIT" + }, + "node_modules/uncrypto": { + "version": "0.1.3", + "license": "MIT" + }, + "node_modules/undici": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.16.0.tgz", + "integrity": "sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==", "dev": true, "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "license": "MIT" + }, + "node_modules/unenv": { + "version": "2.0.0-rc.21", + "license": "MIT", "dependencies": { - "path-browserify": "^1.0.1", - "semver": "^7.6.2", - "typescript-auto-import-cache": "^0.3.3", - "vscode-languageserver-textdocument": "^1.0.11", - "vscode-nls": "^5.2.0", - "vscode-uri": "^3.0.8" - }, - "peerDependencies": { - "@volar/language-service": "~2.4.0" - }, - "peerDependenciesMeta": { - "@volar/language-service": { - "optional": true - } + "defu": "^6.1.4", + "exsolve": "^1.0.7", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "ufo": "^1.6.1" } }, - "node_modules/volar-service-typescript-twoslash-queries": { - "version": "0.0.62", - "resolved": "https://registry.npmjs.org/volar-service-typescript-twoslash-queries/-/volar-service-typescript-twoslash-queries-0.0.62.tgz", - "integrity": "sha512-KxFt4zydyJYYI0kFAcWPTh4u0Ha36TASPZkAnNY784GtgajerUqM80nX/W1d0wVhmcOFfAxkVsf/Ed+tiYU7ng==", - "dev": true, + "node_modules/unicode-properties": { + "version": "1.4.1", "license": "MIT", "dependencies": { - "vscode-uri": "^3.0.8" + "base64-js": "^1.3.0", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/unicode-trie": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + } + }, + "node_modules/unified": { + "version": "11.0.5", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" }, - "peerDependencies": { - "@volar/language-service": "~2.4.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unifont": { + "version": "0.5.2", + "license": "MIT", + "dependencies": { + "css-tree": "^3.0.0", + "ofetch": "^1.4.1", + "ohash": "^2.0.0" + } + }, + "node_modules/unist-util-find-after": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" }, - "peerDependenciesMeta": { - "@volar/language-service": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/volar-service-yaml": { - "version": "0.0.62", - "resolved": "https://registry.npmjs.org/volar-service-yaml/-/volar-service-yaml-0.0.62.tgz", - "integrity": "sha512-k7gvv7sk3wa+nGll3MaSKyjwQsJjIGCHFjVkl3wjaSP2nouKyn9aokGmqjrl39mi88Oy49giog2GkZH526wjig==", - "dev": true, + "node_modules/unist-util-is": { + "version": "6.0.0", "license": "MIT", "dependencies": { - "vscode-uri": "^3.0.8", - "yaml-language-server": "~1.15.0" - }, - "peerDependencies": { - "@volar/language-service": "~2.4.0" + "@types/unist": "^3.0.0" }, - "peerDependenciesMeta": { - "@volar/language-service": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/vscode-css-languageservice": { - "version": "6.3.8", - "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.3.8.tgz", - "integrity": "sha512-dBk/9ullEjIMbfSYAohGpDOisOVU1x2MQHOeU12ohGJQI7+r0PCimBwaa/pWpxl/vH4f7ibrBfxIZY3anGmHKQ==", - "dev": true, + "node_modules/unist-util-modify-children": { + "version": "4.0.0", "license": "MIT", "dependencies": { - "@vscode/l10n": "^0.0.18", - "vscode-languageserver-textdocument": "^1.0.12", - "vscode-languageserver-types": "3.17.5", - "vscode-uri": "^3.1.0" + "@types/unist": "^3.0.0", + "array-iterate": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/vscode-html-languageservice": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.5.2.tgz", - "integrity": "sha512-QpaUhCjvb7U/qThOzo4V6grwsRE62Jk/vf8BRJZoABlMw3oplLB5uovrvcrLO9vYhkeMiSjyqLnCxbfHzzZqmw==", - "dev": true, + "node_modules/unist-util-position": { + "version": "5.0.0", "license": "MIT", "dependencies": { - "@vscode/l10n": "^0.0.18", - "vscode-languageserver-textdocument": "^1.0.12", - "vscode-languageserver-types": "^3.17.5", - "vscode-uri": "^3.1.0" + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/vscode-json-languageservice": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.1.8.tgz", - "integrity": "sha512-0vSpg6Xd9hfV+eZAaYN63xVVMOTmJ4GgHxXnkLCh+9RsQBkWKIghzLhW2B9ebfG+LQQg8uLtsQ2aUKjTgE+QOg==", - "dev": true, + "node_modules/unist-util-remove-position": { + "version": "5.0.0", "license": "MIT", "dependencies": { - "jsonc-parser": "^3.0.0", - "vscode-languageserver-textdocument": "^1.0.1", - "vscode-languageserver-types": "^3.16.0", - "vscode-nls": "^5.0.0", - "vscode-uri": "^3.0.2" + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" }, - "engines": { - "npm": ">=7.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/vscode-json-languageservice/node_modules/jsonc-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", - "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/vscode-jsonrpc": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", - "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", - "dev": true, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", "license": "MIT", - "engines": { - "node": ">=14.0.0" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/vscode-languageserver": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz", - "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==", - "dev": true, + "node_modules/unist-util-visit": { + "version": "5.0.0", "license": "MIT", "dependencies": { - "vscode-languageserver-protocol": "3.17.5" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" }, - "bin": { - "installServerIntoExtension": "bin/installServerIntoExtension" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/vscode-languageserver-protocol": { - "version": "3.17.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", - "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", - "dev": true, + "node_modules/unist-util-visit-children": { + "version": "3.0.0", "license": "MIT", "dependencies": { - "vscode-jsonrpc": "8.2.0", - "vscode-languageserver-types": "3.17.5" + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", - "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", - "dev": true, - "license": "MIT" - }, - "node_modules/vscode-languageserver-types": { - "version": "3.17.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", - "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", - "dev": true, - "license": "MIT" - }, - "node_modules/vscode-nls": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz", - "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==", - "dev": true, - "license": "MIT" - }, - "node_modules/vscode-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", - "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/web-namespaces": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", - "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", - "dev": true, + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unstorage": { + "version": "1.17.1", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^4.0.3", + "destr": "^2.0.5", + "h3": "^1.15.4", + "lru-cache": "^10.4.3", + "node-fetch-native": "^1.6.7", + "ofetch": "^1.4.1", + "ufo": "^1.6.1" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6.0.3 || ^7.0.0", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/functions": "^2.2.12 || ^3.0.0", + "@vercel/kv": "^1.0.1", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/functions": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } } }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-encoding": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", - "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "node_modules/upper-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", + "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", "dev": true, "license": "MIT", "dependencies": { - "iconv-lite": "0.6.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/whatwg-mimetype": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", - "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" + "tslib": "^2.0.3" } }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "node_modules/upper-case-first": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", + "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", "dev": true, "license": "MIT", "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "tslib": "^2.0.3" } }, - "node_modules/which-pm-runs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", - "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true, + "license": "MIT" + }, + "node_modules/vfile": { + "version": "6.0.3", "license": "MIT", - "engines": { - "node": ">=4" + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/widest-line": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz", - "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==", - "dev": true, + "node_modules/vfile-location": { + "version": "5.0.3", "license": "MIT", "dependencies": { - "string-width": "^7.0.0" - }, - "engines": { - "node": ">=18" + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/workerd": { - "version": "1.20251001.0", - "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20251001.0.tgz", - "integrity": "sha512-oT/K4YWNhmwpVmGeaHNmF7mLRfgjszlVr7lJtpS4jx5khmxmMzWZEEQRrJEpgzeHP6DOq9qWLPNT0bjMK7TchQ==", - "dev": true, - "hasInstallScript": true, - "license": "Apache-2.0", - "bin": { - "workerd": "bin/workerd" - }, - "engines": { - "node": ">=16" + "node_modules/vfile-message": { + "version": "4.0.3", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, - "optionalDependencies": { - "@cloudflare/workerd-darwin-64": "1.20251001.0", - "@cloudflare/workerd-darwin-arm64": "1.20251001.0", - "@cloudflare/workerd-linux-64": "1.20251001.0", - "@cloudflare/workerd-linux-arm64": "1.20251001.0", - "@cloudflare/workerd-windows-64": "1.20251001.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/wrangler": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-4.42.0.tgz", - "integrity": "sha512-OZXiUSfGD66OVkncDbjZtqrsH6bWPRQMYc6RmMbkzYm/lEvJ8lvARKcqDgEyq8zDAgJAivlMQLyPtKQoVjQ/4g==", - "dev": true, - "license": "MIT OR Apache-2.0", + "node_modules/vite": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.6.tgz", + "integrity": "sha512-0msEVHJEScQbhkbVTb/4iHZdJ6SXp/AvxL2sjwYQFfBqleHtnCqv1J3sa9zbWz/6kW1m9Tfzn92vW+kZ1WV6QA==", + "license": "MIT", "dependencies": { - "@cloudflare/kv-asset-handler": "0.4.0", - "@cloudflare/unenv-preset": "2.7.6", - "blake3-wasm": "2.1.5", - "esbuild": "0.25.4", - "miniflare": "4.20251001.0", - "path-to-regexp": "6.3.0", - "unenv": "2.0.0-rc.21", - "workerd": "1.20251001.0" + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" }, "bin": { - "wrangler": "bin/wrangler.js", - "wrangler2": "bin/wrangler.js" + "vite": "bin/vite.js" }, "engines": { - "node": ">=18.0.0" + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" }, "optionalDependencies": { - "fsevents": "~2.3.2" + "fsevents": "~2.3.3" }, "peerDependencies": { - "@cloudflare/workers-types": "^4.20251001.0" + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" }, "peerDependenciesMeta": { - "@cloudflare/workers-types": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { "optional": true } } }, - "node_modules/wrangler/node_modules/@esbuild/aix-ppc64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", - "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/wrangler/node_modules/@esbuild/android-arm": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz", - "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/wrangler/node_modules/@esbuild/android-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz", - "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/wrangler/node_modules/@esbuild/android-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz", - "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/vitefu": { + "version": "1.1.1", "license": "MIT", - "optional": true, - "os": [ - "android" + "workspaces": [ + "tests/deps/*", + "tests/projects/*", + "tests/projects/workspace/packages/*" ], - "engines": { - "node": ">=18" + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } } }, - "node_modules/wrangler/node_modules/@esbuild/darwin-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", - "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", - "cpu": [ - "arm64" - ], + "node_modules/volar-service-css": { + "version": "0.0.62", + "resolved": "https://registry.npmjs.org/volar-service-css/-/volar-service-css-0.0.62.tgz", + "integrity": "sha512-JwNyKsH3F8PuzZYuqPf+2e+4CTU8YoyUHEHVnoXNlrLe7wy9U3biomZ56llN69Ris7TTy/+DEX41yVxQpM4qvg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" + "dependencies": { + "vscode-css-languageservice": "^6.3.0", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } } }, - "node_modules/wrangler/node_modules/@esbuild/darwin-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz", - "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", - "cpu": [ - "x64" - ], + "node_modules/volar-service-emmet": { + "version": "0.0.62", + "resolved": "https://registry.npmjs.org/volar-service-emmet/-/volar-service-emmet-0.0.62.tgz", + "integrity": "sha512-U4dxWDBWz7Pi4plpbXf4J4Z/ss6kBO3TYrACxWNsE29abu75QzVS0paxDDhI6bhqpbDFXlpsDhZ9aXVFpnfGRQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@emmetio/css-parser": "^0.4.0", + "@emmetio/html-matcher": "^1.3.0", + "@vscode/emmet-helper": "^2.9.3", + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } } }, - "node_modules/wrangler/node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz", - "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", - "cpu": [ - "arm64" - ], + "node_modules/volar-service-html": { + "version": "0.0.62", + "resolved": "https://registry.npmjs.org/volar-service-html/-/volar-service-html-0.0.62.tgz", + "integrity": "sha512-Zw01aJsZRh4GTGUjveyfEzEqpULQUdQH79KNEiKVYHZyuGtdBRYCHlrus1sueSNMxwwkuF5WnOHfvBzafs8yyQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" + "dependencies": { + "vscode-html-languageservice": "^5.3.0", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } } }, - "node_modules/wrangler/node_modules/@esbuild/freebsd-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz", - "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", - "cpu": [ - "x64" - ], + "node_modules/volar-service-prettier": { + "version": "0.0.62", + "resolved": "https://registry.npmjs.org/volar-service-prettier/-/volar-service-prettier-0.0.62.tgz", + "integrity": "sha512-h2yk1RqRTE+vkYZaI9KYuwpDfOQRrTEMvoHol0yW4GFKc75wWQRrb5n/5abDrzMPrkQbSip8JH2AXbvrRtYh4w==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" + "dependencies": { + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0", + "prettier": "^2.2 || ^3.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + }, + "prettier": { + "optional": true + } } }, - "node_modules/wrangler/node_modules/@esbuild/linux-arm": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz", - "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", - "cpu": [ - "arm" - ], + "node_modules/volar-service-typescript": { + "version": "0.0.62", + "resolved": "https://registry.npmjs.org/volar-service-typescript/-/volar-service-typescript-0.0.62.tgz", + "integrity": "sha512-p7MPi71q7KOsH0eAbZwPBiKPp9B2+qrdHAd6VY5oTo9BUXatsOAdakTm9Yf0DUj6uWBAaOT01BSeVOPwucMV1g==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "path-browserify": "^1.0.1", + "semver": "^7.6.2", + "typescript-auto-import-cache": "^0.3.3", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-nls": "^5.2.0", + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } } }, - "node_modules/wrangler/node_modules/@esbuild/linux-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz", - "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", - "cpu": [ - "arm64" - ], + "node_modules/volar-service-typescript-twoslash-queries": { + "version": "0.0.62", + "resolved": "https://registry.npmjs.org/volar-service-typescript-twoslash-queries/-/volar-service-typescript-twoslash-queries-0.0.62.tgz", + "integrity": "sha512-KxFt4zydyJYYI0kFAcWPTh4u0Ha36TASPZkAnNY784GtgajerUqM80nX/W1d0wVhmcOFfAxkVsf/Ed+tiYU7ng==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "vscode-uri": "^3.0.8" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } } }, - "node_modules/wrangler/node_modules/@esbuild/linux-ia32": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz", - "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", - "cpu": [ - "ia32" - ], + "node_modules/volar-service-yaml": { + "version": "0.0.62", + "resolved": "https://registry.npmjs.org/volar-service-yaml/-/volar-service-yaml-0.0.62.tgz", + "integrity": "sha512-k7gvv7sk3wa+nGll3MaSKyjwQsJjIGCHFjVkl3wjaSP2nouKyn9aokGmqjrl39mi88Oy49giog2GkZH526wjig==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "vscode-uri": "^3.0.8", + "yaml-language-server": "~1.15.0" + }, + "peerDependencies": { + "@volar/language-service": "~2.4.0" + }, + "peerDependenciesMeta": { + "@volar/language-service": { + "optional": true + } } }, - "node_modules/wrangler/node_modules/@esbuild/linux-loong64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz", - "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", - "cpu": [ - "loong64" - ], + "node_modules/vscode-css-languageservice": { + "version": "6.3.8", + "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.3.8.tgz", + "integrity": "sha512-dBk/9ullEjIMbfSYAohGpDOisOVU1x2MQHOeU12ohGJQI7+r0PCimBwaa/pWpxl/vH4f7ibrBfxIZY3anGmHKQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@vscode/l10n": "^0.0.18", + "vscode-languageserver-textdocument": "^1.0.12", + "vscode-languageserver-types": "3.17.5", + "vscode-uri": "^3.1.0" } }, - "node_modules/wrangler/node_modules/@esbuild/linux-mips64el": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz", - "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", - "cpu": [ - "mips64el" - ], + "node_modules/vscode-html-languageservice": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.5.2.tgz", + "integrity": "sha512-QpaUhCjvb7U/qThOzo4V6grwsRE62Jk/vf8BRJZoABlMw3oplLB5uovrvcrLO9vYhkeMiSjyqLnCxbfHzzZqmw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@vscode/l10n": "^0.0.18", + "vscode-languageserver-textdocument": "^1.0.12", + "vscode-languageserver-types": "^3.17.5", + "vscode-uri": "^3.1.0" } }, - "node_modules/wrangler/node_modules/@esbuild/linux-ppc64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz", - "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", - "cpu": [ - "ppc64" - ], + "node_modules/vscode-json-languageservice": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.1.8.tgz", + "integrity": "sha512-0vSpg6Xd9hfV+eZAaYN63xVVMOTmJ4GgHxXnkLCh+9RsQBkWKIghzLhW2B9ebfG+LQQg8uLtsQ2aUKjTgE+QOg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "jsonc-parser": "^3.0.0", + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-languageserver-types": "^3.16.0", + "vscode-nls": "^5.0.0", + "vscode-uri": "^3.0.2" + }, "engines": { - "node": ">=18" + "npm": ">=7.0.0" } }, - "node_modules/wrangler/node_modules/@esbuild/linux-riscv64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz", - "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", - "cpu": [ - "riscv64" - ], + "node_modules/vscode-json-languageservice/node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-jsonrpc": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", + "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">=14.0.0" } }, - "node_modules/wrangler/node_modules/@esbuild/linux-s390x": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz", - "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", - "cpu": [ - "s390x" - ], + "node_modules/vscode-languageserver": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz", + "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "vscode-languageserver-protocol": "3.17.5" + }, + "bin": { + "installServerIntoExtension": "bin/installServerIntoExtension" } }, - "node_modules/wrangler/node_modules/@esbuild/linux-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", - "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", - "cpu": [ - "x64" - ], + "node_modules/vscode-languageserver-protocol": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", + "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "vscode-jsonrpc": "8.2.0", + "vscode-languageserver-types": "3.17.5" } }, - "node_modules/wrangler/node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz", - "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", - "cpu": [ - "arm64" - ], + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", + "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", "dev": true, + "license": "MIT" + }, + "node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-nls": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz", + "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/web-namespaces": { + "version": "2.0.1", "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/wrangler/node_modules/@esbuild/netbsd-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz", - "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", - "cpu": [ - "x64" - ], + "node_modules/webidl-conversions": { + "version": "3.0.1", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], + "dependencies": { + "iconv-lite": "0.6.3" + }, "engines": { "node": ">=18" } }, - "node_modules/wrangler/node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz", - "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", - "cpu": [ - "arm64" - ], + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], "engines": { "node": ">=18" } }, - "node_modules/wrangler/node_modules/@esbuild/openbsd-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz", - "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/whatwg-url": { + "version": "5.0.0", "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, - "node_modules/wrangler/node_modules/@esbuild/sunos-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz", - "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/which-pm-runs": { + "version": "1.1.0", "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], "engines": { - "node": ">=18" + "node": ">=4" } }, - "node_modules/wrangler/node_modules/@esbuild/win32-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz", - "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/widest-line": { + "version": "5.0.0", "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "string-width": "^7.0.0" + }, "engines": { "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/wrangler/node_modules/@esbuild/win32-ia32": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz", - "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", - "cpu": [ - "ia32" - ], + "node_modules/workerd": { + "version": "1.20251004.0", + "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20251004.0.tgz", + "integrity": "sha512-1YajTH54RdrQrO5FY1HuH1t87H3bWjbM4MtOTF6XdPQL8LxVWACC46aGjmhyVJKMQNLECs64d+AYFGxVrFTOAA==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "hasInstallScript": true, + "license": "Apache-2.0", + "bin": { + "workerd": "bin/workerd" + }, "engines": { - "node": ">=18" + "node": ">=16" + }, + "optionalDependencies": { + "@cloudflare/workerd-darwin-64": "1.20251004.0", + "@cloudflare/workerd-darwin-arm64": "1.20251004.0", + "@cloudflare/workerd-linux-64": "1.20251004.0", + "@cloudflare/workerd-linux-arm64": "1.20251004.0", + "@cloudflare/workerd-windows-64": "1.20251004.0" } }, - "node_modules/wrangler/node_modules/@esbuild/win32-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz", - "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", - "cpu": [ - "x64" - ], + "node_modules/wrangler": { + "version": "4.42.1", + "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-4.42.1.tgz", + "integrity": "sha512-Oia5SmGmfUWfz/k5aklrE429VMiMMZkjc1EhF1nrANElCOwBTTBY1shsfhkg9F0vG8ZtHzx1rJvYfaQvct498g==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "license": "MIT OR Apache-2.0", + "dependencies": { + "@cloudflare/kv-asset-handler": "0.4.0", + "@cloudflare/unenv-preset": "2.7.7", + "blake3-wasm": "2.1.5", + "esbuild": "0.25.4", + "miniflare": "4.20251004.0", + "path-to-regexp": "6.3.0", + "unenv": "2.0.0-rc.21", + "workerd": "1.20251004.0" + }, + "bin": { + "wrangler": "bin/wrangler.js", + "wrangler2": "bin/wrangler.js" + }, "engines": { - "node": ">=18" + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@cloudflare/workers-types": "^4.20251004.0" + }, + "peerDependenciesMeta": { + "@cloudflare/workers-types": { + "optional": true + } } }, "node_modules/wrangler/node_modules/esbuild": { @@ -10009,9 +8631,6 @@ }, "node_modules/wrap-ansi": { "version": "9.0.2", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", - "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", @@ -10034,9 +8653,6 @@ }, "node_modules/ws": { "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "dev": true, "license": "MIT", "engines": { "node": ">=10.0.0" @@ -10056,9 +8672,6 @@ }, "node_modules/xxhash-wasm": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz", - "integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==", - "dev": true, "license": "MIT" }, "node_modules/y18n": { @@ -10073,9 +8686,7 @@ }, "node_modules/yaml": { "version": "2.8.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", - "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", - "dev": true, + "devOptional": true, "license": "ISC", "bin": { "yaml": "bin.mjs" @@ -10205,9 +8816,6 @@ }, "node_modules/yargs-parser": { "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -10270,9 +8878,6 @@ }, "node_modules/yocto-queue": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", - "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", - "dev": true, "license": "MIT", "engines": { "node": ">=12.20" @@ -10283,9 +8888,6 @@ }, "node_modules/yocto-spinner": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/yocto-spinner/-/yocto-spinner-0.2.3.tgz", - "integrity": "sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==", - "dev": true, "license": "MIT", "dependencies": { "yoctocolors": "^2.1.1" @@ -10299,9 +8901,6 @@ }, "node_modules/yoctocolors": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", - "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", - "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -10312,9 +8911,6 @@ }, "node_modules/youch": { "version": "4.1.0-beta.10", - "resolved": "https://registry.npmjs.org/youch/-/youch-4.1.0-beta.10.tgz", - "integrity": "sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==", - "dev": true, "license": "MIT", "dependencies": { "@poppinss/colors": "^4.1.5", @@ -10326,9 +8922,6 @@ }, "node_modules/youch-core": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/youch-core/-/youch-core-0.3.3.tgz", - "integrity": "sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==", - "dev": true, "license": "MIT", "dependencies": { "@poppinss/exception": "^1.2.2", @@ -10337,9 +8930,6 @@ }, "node_modules/zod": { "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" @@ -10347,9 +8937,6 @@ }, "node_modules/zod-to-json-schema": { "version": "3.24.6", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz", - "integrity": "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==", - "dev": true, "license": "ISC", "peerDependencies": { "zod": "^3.24.1" @@ -10357,9 +8944,6 @@ }, "node_modules/zod-to-ts": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/zod-to-ts/-/zod-to-ts-1.2.0.tgz", - "integrity": "sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==", - "dev": true, "peerDependencies": { "typescript": "^4.9.4 || ^5.0.2", "zod": "^3" @@ -10367,9 +8951,6 @@ }, "node_modules/zwitch": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "dev": true, "license": "MIT", "funding": { "type": "github", diff --git a/package.json b/package.json index dddf408..3b993d8 100644 --- a/package.json +++ b/package.json @@ -8,36 +8,36 @@ "astrobuild": "astro build", "preview": "astro preview", "pages:dev": "wrangler pages dev --compatibility-date=2024-01-29 -- astro dev", - "pages:deploy": "astro build && wrangler pages deploy ./dist", + "pages:deploy": "BUILD_ENV=production astro build && wrangler pages deploy ./dist", "get_used_mdis": "rg -Io \"mdi-[\\w-]+\" ./build/cache/ | sort | uniq", "upload_caches": "/bin/bash ./build/modules/upload_caches.sh", + "download_caches": "/bin/bash ./build/modules/download_caches.sh", "upload_categories": "/bin/bash ./build/modules/categories/upload_categories.sh", "build_categories": "node --no-warnings=ExperimentalWarning --trace-uncaught --trace-warnings --loader ts-node/esm ./build/modules/categories/build_categories.ts", "clear_recent_changes": "node --no-warnings=ExperimentalWarning --trace-uncaught --trace-warnings --loader ts-node/esm ./build/modules/clear_recent_changes.ts", "clear_cloudflare_cache": "node --no-warnings=ExperimentalWarning --trace-uncaught --trace-warnings --loader ts-node/esm ./build/modules/clear_cloudflare_cache.ts" }, "devDependencies": { - "@astrojs/check": "^0.9.4", - "@astrojs/cloudflare": "^12.6.9", - "@astrojs/internal-helpers": "^0.7.3", - "@astrojs/node": "^9.4.4", "@cloudflare/workers-types": "^4.20240129.0", - "@types/cheerio": "^1.0.0", "@types/html-minifier": "^4.0.5", "@types/minify": "^9.1.4", - "@types/node": "^24.7.0", - "astro": "^5.14.1", - "bottleneck": "^2.19.5", - "chalk": "^5.3.0", - "cheerio": "^1.0.0-rc.12", + "@types/node": "^22.0.0", + "typescript": "^5.3.3", "gmod-wiki-scraper": "github:NullEnt1ty/gmod-wiki-scraper", + "wrangler": "^4.42.0", + "@astrojs/check": "^0.9.4", + "chalk": "^5.3.0", + "cheerio": "^1.1.2", "ky": "^1.2.0", - "sharp": "^0.33.2", + "sharp": "^0.34.4", "ts-node": "^10.9.2", - "typescript": "^5.3.3", - "wrangler": "^4.42.0" + "bottleneck": "^2.19.5", + "astro": "^5.14.1", + "@astrojs/internal-helpers": "^0.7.3", + "html-minifier-next": "^2.1.6" }, "dependencies": { - "html-minifier-next": "^2.1.6" + "@astrojs/cloudflare": "^12.6.9", + "@astrojs/node": "^9.4.4" } } diff --git a/public/.gitkeep b/public/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/components/Sidebar.astro b/src/components/Sidebar.astro index a3baa7b..7df5941 100644 --- a/src/components/Sidebar.astro +++ b/src/components/Sidebar.astro @@ -1 +1 @@ -
Playing
Developers
Getting Started 13
Map Design 2
Models & Animation 5
Game Modes Creation 8
HUD / User Interface 21
Npcs and AI 2
Lua Programming 37
Workshop 4
Other Topics 35
Developer Reference
Globals 327
Classes 45
Libraries 88
Hooks 10
Game Events 29
Panels 128
Enums 99
Structs 62
Shaders 14
\ No newline at end of file +
Player Guides
Developer Guides
Getting Started 10
Lua Programming 29
Game Systems 10
Gamemode Creation 5
HUD and User Interface 15
Scripted Entities and Weapons 9
NPCs and AI 2
Map and Level Design 6
Models, Textures and Animation 7
Addons and Steam Workshop 4
Binary Modules 6
Other Topics 16
Developer Reference
Globals 332
Classes 46
Libraries 88
Hooks 10
Game Events 40
Panels 130
Enumerations 100
Structures 71
Shaders 16
Miscellaneous Reference 30
\ No newline at end of file diff --git a/src/env.d.ts b/src/env.d.ts deleted file mode 100644 index f964fe0..0000000 --- a/src/env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index bae9320..73ab296 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -4,64 +4,64 @@ import Sidebar from "../components/Sidebar.astro"; const { title, description, views, updated } = Astro.props; --- - - - {title} - - - - - - - - - - - - - - - - + + + {title} + + + + + + + + + + + + + + + +
-
+
-
- -
+
+ +
-
+
-

- Garry's Mod Wiki -

+

+ Garry's Mod Wiki +

-
+
-
+
- + - -
+ +
-
- +
+
-

Garry's Mod Wiki

-
+

Garry's Mod Wiki

+
@@ -69,16 +69,16 @@ const { title, description, views, updated } = Astro.props;

This site is a community mirror of the official Garry's Mod wiki.. This site is not maintained by Facepunch Studios.

-

Page content is automatically updated twice a day. Edits and history are not available.

+

Page content is automatically updated four times a day. Edits and history are not available.

Last Parsed: Loading...

-
+
- + diff --git a/tsconfig.json b/tsconfig.json index 633654c..faae315 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,5 +1,7 @@ { "extends": "astro/tsconfigs/strict", + "include": [".astro/types.d.ts", "**/*"], + "exclude": ["dist"], "compilerOptions": { "target": "ES2021", "lib": ["ES2021", "WebWorker"], diff --git a/wrangler.toml b/wrangler.toml index f804b9f..5ebcc46 100644 --- a/wrangler.toml +++ b/wrangler.toml @@ -1 +1,2 @@ name = "gmodwiki" +pages_build_output_dir = "./dist" From 53066b22cb5aac7adb02e3dbe12bfb9005284d52 Mon Sep 17 00:00:00 2001 From: Sarah Sturgeon Date: Tue, 7 Oct 2025 19:29:44 -0700 Subject: [PATCH 02/14] Build descriptions too --- build/modules/pages.ts | 187 +++++++++++++++++++++---------------- build/modules/pages_api.ts | 80 ++++++++-------- 2 files changed, 148 insertions(+), 119 deletions(-) diff --git a/build/modules/pages.ts b/build/modules/pages.ts index b968be6..2ecdd7e 100644 --- a/build/modules/pages.ts +++ b/build/modules/pages.ts @@ -1,91 +1,118 @@ // Downloads and builds all of the gmod pages -import path from "path" -import chalk from "chalk" -import PageAPI from "./pages_api.js" -import { promises as fs } from "fs" -import { getAllPageLinks } from "./get_page_manifest.js" -import type ApiInterface from "./api_interface.js" -import type StaticContentHandler from "./static.js" -import type SearchManager from "./search.js" +import path from "path"; +import { PagesAPI } from "./pages_api.js"; +import { promises as fs } from "fs"; +import { getAllPageLinks } from "./get_page_manifest.js"; +import type { Page } from "./pages_api.js"; +import type ApiInterface from "./api_interface.js"; +import type StaticContentHandler from "./static.js"; +import type SearchManager from "./search.js"; interface PageResponse { - title: string; - wikiName?: string; - wikiIcon?: string; - wikiUrl?: string; - tags: string; - address: string; - createdTime?: string; - updateCount?: number; - markup?: string; - html: string; - footer: string; - revisionId?: number; - pageLinks?: any[]; + title: string; + wikiName?: string; + wikiIcon?: string; + wikiUrl?: string; + tags: string; + address: string; + createdTime?: string; + updateCount?: number; + markup?: string; + html: string; + footer: string; + revisionId?: number; + pageLinks?: any[]; } -// Excluded to keep the bundle size under 25mb (cloudflare limit) -const excludes: Map = new Map([ -]) - -async function buildPage(api: ApiInterface, contentManager: StaticContentHandler, searchManager: SearchManager, pageAPI: PageAPI, link: string) { - if (excludes.has(link)) { - return - } - - const struct: PageResponse = await api.getJSON(`/gmod/${link}`) - // console.log(chalk.green("Building"), link) - - let pageContent = await contentManager.processContent(struct.html, false) - pageContent = pageContent.replace(/<\/head>/g, "") // Remove unnecessary tags - pageContent = pageContent.replace(/<\/body><\/html>/g, "") // Remove unnecessary tags - pageContent = pageContent.replace(/https:\/\/wiki\.facepunch\.com\/gmod\//g, "/") - pageContent = pageContent.replaceAll(/\/gmod\//g, "/") // We've removed the /gmod prefix - pageContent = pageContent.replaceAll(/CopyCode/g, "window.CopyCode") // Because we use astro/rocket loader, we can't access the function without it being on the window - pageContent = pageContent.replaceAll(/href="https:/g, `target="_blank" href="https:`) // Open external links in a new tab - - delete struct.wikiName - delete struct.wikiIcon - delete struct.wikiUrl - delete struct.createdTime - delete struct.markup - delete struct.revisionId - delete struct.updateCount - delete struct.pageLinks - - struct.html = pageContent +// Builds the description that'll be used in the og:meta tag +const buildDescription = (markup: string) => { + let description = markup; - let address = struct.address.length > 0 ? struct.address : "index" - address = address.replaceAll("/gmod/", "/") + description = description.replaceAll(/<[^>]*>/g, ""); // Remove tags + description = description.replaceAll(/\s+/g, " "); // Remove extra whitespace + description = description.trim(); + description = description.substring(0, 200); // Limit to 200 characters - const jsonDestination = `./public/content/${address.toLowerCase()}.json` - const dirPath = path.dirname(jsonDestination) - await fs.mkdir(dirPath, { recursive: true }) + return description; +}; - pageAPI.addPage(struct) - - const jsonContent = JSON.stringify(struct) - await fs.writeFile(jsonDestination, jsonContent) - - searchManager.addBlob(address, struct.html) +// Excluded to keep the bundle size under 25mb (cloudflare limit) +const excludes: Map = new Map([]); + +async function buildPage( + api: ApiInterface, + contentManager: StaticContentHandler, + searchManager: SearchManager, + pageAPI: PagesAPI, + link: string, +) { + if (excludes.has(link)) { + return; + } + + const struct: PageResponse = await api.getJSON(`/gmod/${link}`); + // console.log(chalk.green("Building"), link) + + let pageContent = await contentManager.processContent(struct.html, false); + pageContent = pageContent.replace(/<\/head>/g, ""); // Remove unnecessary tags + pageContent = pageContent.replace(/<\/body><\/html>/g, ""); // Remove unnecessary tags + pageContent = pageContent.replace( + /https:\/\/wiki\.facepunch\.com\/gmod\//g, + "/", + ); + pageContent = pageContent.replaceAll(/\/gmod\//g, "/"); // We've removed the /gmod prefix + pageContent = pageContent.replaceAll(/CopyCode/g, "window.CopyCode"); // Because we use astro/rocket loader, we can't access the function without it being on the window + pageContent = pageContent.replaceAll( + /href="https:/g, + `target="_blank" href="https:`, + ); // Open external links in a new tab + + let address = struct.address.length > 0 ? struct.address : "index"; + address = address.replaceAll("/gmod/", "/"); + + const page: Page = { + title: struct.title, + description: buildDescription(struct.markup || ""), + tags: struct.tags, + address: address, + html: pageContent, + footer: struct.footer, + }; + + pageAPI.addPage(page); + + const jsonDestination = `./public/content/${address.toLowerCase()}.json`; + const dirPath = path.dirname(jsonDestination); + await fs.mkdir(dirPath, { recursive: true }); + + const jsonContent = JSON.stringify(page); + await fs.writeFile(jsonDestination, jsonContent); + + searchManager.addBlob(address, pageContent); } -export async function buildAllPages(api: ApiInterface, contentHandler: StaticContentHandler, searchManager: SearchManager) { - const pageAPI = new PageAPI() - const allLinks = await getAllPageLinks(api) - - // split into 10 chunks - const chunkSize = Math.ceil(allLinks.length / 10) - const chunks = [] - for (let i = 0; i < allLinks.length; i += chunkSize) { - chunks.push(allLinks.slice(i, i + chunkSize)) - } - - for (const chunk of chunks) { - const promises = chunk.map(link => buildPage(api, contentHandler, searchManager, pageAPI, link)) - await Promise.all(promises) - } - - // TODO: Enable and finalize if this could be useful - // await pageAPI.save() +export async function buildAllPages( + api: ApiInterface, + contentHandler: StaticContentHandler, + searchManager: SearchManager, +) { + const pageAPI = new PagesAPI(); + const allLinks = await getAllPageLinks(api); + + // split into 10 chunks + const chunkSize = Math.ceil(allLinks.length / 10); + const chunks = []; + for (let i = 0; i < allLinks.length; i += chunkSize) { + chunks.push(allLinks.slice(i, i + chunkSize)); + } + + for (const chunk of chunks) { + const promises = chunk.map((link) => + buildPage(api, contentHandler, searchManager, pageAPI, link), + ); + await Promise.all(promises); + } + + // TODO: Enable and finalize if this could be useful + // await pageAPI.save() } diff --git a/build/modules/pages_api.ts b/build/modules/pages_api.ts index 2d4f2af..afdd73f 100644 --- a/build/modules/pages_api.ts +++ b/build/modules/pages_api.ts @@ -1,49 +1,51 @@ -import { promises as fs } from "fs" - -interface Page { - title: string; - tags: string; - address: string; - html: string; - footer: string; +import { promises as fs } from "fs"; + +export interface Page { + title: string; + description: string; + tags: string; + address: string; + html: string; + footer: string; } -class PagesAPI { - private pagesByTag: Map = new Map() +export class PagesAPI { + private pagesByTag: Map = new Map(); - getTagArray(tag: string): Page[] { - if (this.pagesByTag.has(tag)) { - const arr = this.pagesByTag.get(tag) as Page[] - return arr - } else { - const arr: Page[] = [] - this.pagesByTag.set(tag, arr) + getTagArray(tag: string): Page[] { + if (this.pagesByTag.has(tag)) { + const arr = this.pagesByTag.get(tag) as Page[]; + return arr; + } else { + const arr: Page[] = []; + this.pagesByTag.set(tag, arr); - return arr - } + return arr; } + } - addPage(page: Page) { - let tags = page.tags.split(" ") - if (tags.length === 0) { - tags = ["untagged"] - } - - for (const tag of tags) { - const arr = this.getTagArray(tag) - arr.push(page) - } + addPage(page: Page) { + let tags = page.tags.split(" "); + if (tags.length === 0) { + tags = ["untagged"]; } - async save() { - const allPages = Array.from(this.pagesByTag.values()).flat() - await fs.writeFile("./public/content/pages/tag-all.json", JSON.stringify(allPages)) - - for (const [tag, pages] of this.pagesByTag) { - const destination = `./public/content/pages/tag-${tag}.json` - await fs.writeFile(destination, JSON.stringify(pages)) - } + for (const tag of tags) { + const arr = this.getTagArray(tag); + arr.push(page); } + } + + async save() { + const allPages = Array.from(this.pagesByTag.values()).flat(); + await fs.writeFile( + "./public/content/pages/tag-all.json", + JSON.stringify(allPages), + ); + + for (const [tag, pages] of this.pagesByTag) { + const destination = `./public/content/pages/tag-${tag}.json`; + await fs.writeFile(destination, JSON.stringify(pages)); + } + } } - -export default PagesAPI From 0b150add742dcde2a9a1a0b77d825b354429c01c Mon Sep 17 00:00:00 2001 From: Sarah Sturgeon Date: Wed, 8 Oct 2025 02:05:51 -0700 Subject: [PATCH 03/14] assorted fixes --- .github/workflows/full_update.yml | 8 ++++---- .github/workflows/update.yml | 8 ++++---- astro.config.mjs | 20 ------------------- build/modules/categories/upload_categories.sh | 6 +++--- build/modules/upload_caches.sh | 4 ++-- 5 files changed, 13 insertions(+), 33 deletions(-) diff --git a/.github/workflows/full_update.yml b/.github/workflows/full_update.yml index ac34e55..0d67fbe 100644 --- a/.github/workflows/full_update.yml +++ b/.github/workflows/full_update.yml @@ -59,9 +59,9 @@ jobs: CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CF_ACCOUNT_ID }} CLOUDFLARE_API_TOKEN: ${{ secrets.CF_API_TOKEN }} run: | - (npx wrangler r2 object put gmodwiki/public_cache.zip --file ./public_cache.zip && rm -v public_cache.zip) & - (npx wrangler r2 object put gmodwiki/build_cache.zip --file ./build_cache.zip && rm -v build_cache.zip) & - (npx wrangler r2 object put gmodwiki/search_index.json --file ./search_index.json && mv ./search_index.json ./public/) & + (npx wrangler r2 object put gmodwiki/public_cache.zip --remote --file ./public_cache.zip && rm -v public_cache.zip) & + (npx wrangler r2 object put gmodwiki/build_cache.zip --remote --file ./build_cache.zip && rm -v build_cache.zip) & + (npx wrangler r2 object put gmodwiki/search_index.json --remote --file ./search_index.json && mv ./search_index.json ./public/) & wait # CF Publish @@ -78,7 +78,7 @@ jobs: CLOUDFLARE_CACHE_API_KEY: ${{ secrets.CF_CACHE_API_TOKEN }} run: | npm run clear_cloudflare_cache - rm --verbose deleted_files.json + rm -f --verbose deleted_files.json - name: Set up Docker Buildx if: ${{ github.event.inputs.skip_image != 'true' }} diff --git a/.github/workflows/update.yml b/.github/workflows/update.yml index ff67acc..d6a8ee0 100644 --- a/.github/workflows/update.yml +++ b/.github/workflows/update.yml @@ -61,9 +61,9 @@ jobs: CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CF_ACCOUNT_ID }} CLOUDFLARE_API_TOKEN: ${{ secrets.CF_API_TOKEN }} run: | - (npx wrangler r2 object put gmodwiki/public_cache.zip --file ./public_cache.zip && rm -v public_cache.zip) & - (npx wrangler r2 object put gmodwiki/build_cache.zip --file ./build_cache.zip && rm -v build_cache.zip) & - (npx wrangler r2 object put gmodwiki/search_index.json --file ./search_index.json && mv ./search_index.json ./public/) & + (npx wrangler r2 object put gmodwiki/public_cache.zip --remote --file ./public_cache.zip && rm -v public_cache.zip) & + (npx wrangler r2 object put gmodwiki/build_cache.zip --remote --file ./build_cache.zip && rm -v build_cache.zip) & + (npx wrangler r2 object put gmodwiki/search_index.json --remote --file ./search_index.json && mv ./search_index.json ./public/) & wait # CF Publish @@ -80,7 +80,7 @@ jobs: CLOUDFLARE_CACHE_API_KEY: ${{ secrets.CF_CACHE_API_TOKEN }} run: | npm run clear_cloudflare_cache - rm --verbose deleted_files.json + rm -f --verbose deleted_files.json - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 diff --git a/astro.config.mjs b/astro.config.mjs index 0e19ebc..69f6845 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -12,26 +12,6 @@ if (buildEnv === "production") { console.log("Building for Cloudflare adapter"); adapter = cloudflare({ imageService: "passthrough", - routes: { - extend: { - include: [{ pattern: "/*" }], - exclude: [ - { pattern: "/content/*" }, - { pattern: "/script.js" }, - { pattern: "/search_index.json" }, - { pattern: "/~pagelist.json" }, - { pattern: "/styles/gmod.css" }, - { pattern: "/wiki/files/*" }, - { pattern: "/rubat/*" }, - { pattern: "/lewis/*" }, - { pattern: "/garry/*" }, - { pattern: "/fonts/*" }, - { pattern: "/*.webp" }, - { pattern: "/cdn-cgi/*" }, - { pattern: "/last_build.txt" }, - ], - }, - }, }); } else { console.log("Building for Node adapter"); diff --git a/build/modules/categories/upload_categories.sh b/build/modules/categories/upload_categories.sh index f0d6b4c..fcffbbf 100755 --- a/build/modules/categories/upload_categories.sh +++ b/build/modules/categories/upload_categories.sh @@ -33,7 +33,7 @@ zip --recurse-paths -9 --quiet --junk-paths contents.zip ./public/categories/con zip --recurse-paths -9 --quiet --junk-paths parsed.zip ./public/categories/parsed & wait -(npx wrangler r2 object put gmodwiki/categories/manifests/all.zip --file ./manifests.zip && rm -v ./manifests.zip) & -(npx wrangler r2 object put gmodwiki/categories/contents/all.zip --file ./contents.zip && rm -v ./contents.zip) & -(npx wrangler r2 object put gmodwiki/categories/parsed/all.zip --file ./parsed.zip && rm -v ./parsed.zip) & +(npx wrangler r2 object put gmodwiki/categories/manifests/all.zip --remote --file ./manifests.zip && rm -v ./manifests.zip) & +(npx wrangler r2 object put gmodwiki/categories/contents/all.zip --remote --file ./contents.zip && rm -v ./contents.zip) & +(npx wrangler r2 object put gmodwiki/categories/parsed/all.zip --remote --file ./parsed.zip && rm -v ./parsed.zip) & wait diff --git a/build/modules/upload_caches.sh b/build/modules/upload_caches.sh index 7a1a5bd..3597fe5 100755 --- a/build/modules/upload_caches.sh +++ b/build/modules/upload_caches.sh @@ -5,6 +5,6 @@ zip --recurse-paths -9 --quiet public_cache.zip ./public & zip --recurse-paths -9 --quiet build_cache.zip ./build/cache & wait -(npx wrangler r2 object put gmodwiki/public_cache.zip --file ./public_cache.zip && rm -v public_cache.zip) & -(npx wrangler r2 object put gmodwiki/build_cache.zip --file ./build_cache.zip && rm -v build_cache.zip) & +(npx wrangler r2 object put gmodwiki/public_cache.zip --remote --file ./public_cache.zip && rm -v public_cache.zip) & +(npx wrangler r2 object put gmodwiki/build_cache.zip --remote --file ./build_cache.zip && rm -v build_cache.zip) & wait From bb634d3f18d7d4857ed402976c8cc4145268f5cf Mon Sep 17 00:00:00 2001 From: Sarah Sturgeon Date: Wed, 8 Oct 2025 09:28:46 -0700 Subject: [PATCH 04/14] Compatability date update --- package.json | 2 +- wrangler.toml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 3b993d8..263c14c 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "build": "node --no-warnings=ExperimentalWarning --loader ts-node/esm ./build/index.ts", "astrobuild": "astro build", "preview": "astro preview", - "pages:dev": "wrangler pages dev --compatibility-date=2024-01-29 -- astro dev", + "pages:dev": "wrangler pages dev ./dist", "pages:deploy": "BUILD_ENV=production astro build && wrangler pages deploy ./dist", "get_used_mdis": "rg -Io \"mdi-[\\w-]+\" ./build/cache/ | sort | uniq", "upload_caches": "/bin/bash ./build/modules/upload_caches.sh", diff --git a/wrangler.toml b/wrangler.toml index 5ebcc46..b08851f 100644 --- a/wrangler.toml +++ b/wrangler.toml @@ -1,2 +1,3 @@ name = "gmodwiki" +compatibility_date = "2025-10-08" pages_build_output_dir = "./dist" From 17db2763655e17ebe07d31ee1de91b359c278fa4 Mon Sep 17 00:00:00 2001 From: Sarah Sturgeon Date: Wed, 8 Oct 2025 11:07:42 -0700 Subject: [PATCH 05/14] wip states playground --- build/fragments/[...slug].astro | 28 +- build/modules/pages.ts | 34 +- build/setup.ts | 512 +++++++++++++++----------- src/components/StatesPlayground.astro | 54 +++ src/pages/States_Playground.astro | 41 +++ 5 files changed, 438 insertions(+), 231 deletions(-) create mode 100644 src/components/StatesPlayground.astro create mode 100644 src/pages/States_Playground.astro diff --git a/build/fragments/[...slug].astro b/build/fragments/[...slug].astro index 168a383..0238b9b 100644 --- a/build/fragments/[...slug].astro +++ b/build/fragments/[...slug].astro @@ -36,16 +36,32 @@ try { json.html = "Failed to load page " + slug + "" + (e ? "

" + e.toString() + "

" : "") } -let title = json.title -let description = json.description -let content = json.html -let footer = json.footer +const serverImage = "" +const clientImage = "" +const sharedImage = "" +const defaultImage = "/wiki/files/353/8d8c63b684d38b4.webp" +const getOpenGraphImage = (tags: string[]) => { + const hasServer = tags.includes("realm-server") + const hasClient = tags.includes("realm-client") + + if (hasServer && hasClient) return sharedImage + if (hasServer) return serverImage + if (hasClient) return clientImage + + return defaultImage +} + +const tags = json.tags +const tagArray = tags ? tags.split(" ").map((tag: string) => tag.trim()) : [] +const ogImage = getOpenGraphImage(tagArray) + +const footer = json.footer const footerInfo = footer.split("
") let views = footerInfo[0] || "0 views" let updated = footerInfo[1] || "" --- - - + + diff --git a/build/modules/pages.ts b/build/modules/pages.ts index 2ecdd7e..242d455 100644 --- a/build/modules/pages.ts +++ b/build/modules/pages.ts @@ -1,5 +1,6 @@ // Downloads and builds all of the gmod pages import path from "path"; +import * as cheerio from "cheerio"; import { PagesAPI } from "./pages_api.js"; import { promises as fs } from "fs"; import { getAllPageLinks } from "./get_page_manifest.js"; @@ -24,16 +25,37 @@ interface PageResponse { pageLinks?: any[]; } +const ellipsis = (str: string, max: number): string => { + if (str.length <= max) { + return str; + } + + const ellipsisChars = "..."; + const trimLength = max - ellipsisChars.length; + + const lastSpaceIndex = str.lastIndexOf(" ", trimLength); + + const cutIndex = lastSpaceIndex > -1 ? lastSpaceIndex : trimLength; + + return str.substring(0, cutIndex) + ellipsisChars; +}; + +const stripMarkdownLinks = (text: string): string => { + return text.replace(/\[([^\]]+)\]\(([^)]+)\)/g, "$1"); +}; + // Builds the description that'll be used in the og:meta tag const buildDescription = (markup: string) => { - let description = markup; + let $ = cheerio.load(markup); + + let summary = $("summary").first().text(); + if (summary.length === 0) { + summary = $("description").first().text(); + } - description = description.replaceAll(/<[^>]*>/g, ""); // Remove tags - description = description.replaceAll(/\s+/g, " "); // Remove extra whitespace - description = description.trim(); - description = description.substring(0, 200); // Limit to 200 characters + summary = stripMarkdownLinks(summary); - return description; + return ellipsis(summary, 200); }; // Excluded to keep the bundle size under 25mb (cloudflare limit) diff --git a/build/setup.ts b/build/setup.ts index df23e0e..8634347 100644 --- a/build/setup.ts +++ b/build/setup.ts @@ -1,104 +1,121 @@ // Sets up the layout and components files -import * as cheerio from "cheerio" -import { promises as fs } from "fs" -import { minify as htmlMinify } from "html-minifier-next" -import type ApiInterface from "./modules/api_interface.js" -import type StaticContentHandler from "./modules/static.js" -import { getAllPagesForCategory } from "./modules/get_page_manifest.js" +import * as cheerio from "cheerio"; +import { promises as fs } from "fs"; +import { minify as htmlMinify } from "html-minifier-next"; +import type ApiInterface from "./modules/api_interface.js"; +import type StaticContentHandler from "./modules/static.js"; +import { getAllPagesForCategory } from "./modules/get_page_manifest.js"; function setupFooters($: cheerio.CheerioAPI) { - const footers = $("div.footer") + const footers = $("div.footer"); - // Contains the section for views / last updated - const firstFooter = footers.first() - firstFooter.html("{views}
{updated}") + // Contains the section for views / last updated + const firstFooter = footers.first(); + firstFooter.html("{views}
{updated}"); - // Contains the section for the links - const secondFooter = footers.last() - secondFooter.remove() + // Contains the section for the links + const secondFooter = footers.last(); + secondFooter.remove(); } function setupContent($: cheerio.CheerioAPI) { - const content = $("div[id='pagecontent']") - content.html("") + const content = $("div[id='pagecontent']"); + content.html(""); } async function setupSidebar($: cheerio.CheerioAPI) { - const sidebar = $("div[id='sidebar']") - let contents = sidebar.html() - if (!contents) throw new Error("No sidebar found - please report this!") - sidebar.html("") - - contents = contents.trim() - contents = contents.replace(/\/gmod\//g, "/") // We don't use the /gmod prefix - contents = contents.replaceAll("meth ", "") // Unused class - contents = contents.replaceAll("memb ", "") // Unused class - contents = contents.replaceAll("ToggleClass", "window.ToggleClass") // Astro/rocket-loader doesn't allow us to reference functions without putting them on the widnwos - contents = contents.replace(/(href=|src=)".*?"/g, (m) => m.replace(/\\+/g, '/')) // For some reason, URLs are being parsed incorrectly, this should fix that. - contents = await htmlMinify(contents, { collapseWhitespace: true, removeComments: true }) - await fs.writeFile("src/components/Sidebar.astro", contents) + const sidebar = $("div[id='sidebar']"); + let contents = sidebar.html(); + if (!contents) throw new Error("No sidebar found - please report this!"); + sidebar.html(""); + + contents = contents.trim(); + contents = contents.replace(/\/gmod\//g, "/"); // We don't use the /gmod prefix + contents = contents.replaceAll("meth ", ""); // Unused class + contents = contents.replaceAll("memb ", ""); // Unused class + contents = contents.replaceAll("ToggleClass", "window.ToggleClass"); // Astro/rocket-loader doesn't allow us to reference functions without putting them on the widnwos + contents = contents.replace(/(href=|src=)".*?"/g, (m) => + m.replace(/\\+/g, "/"), + ); // For some reason, URLs are being parsed incorrectly, this should fix that. + contents = await htmlMinify(contents, { + collapseWhitespace: true, + removeComments: true, + }); + await fs.writeFile("src/components/Sidebar.astro", contents); } async function setupLayout($: cheerio.CheerioAPI) { - let layout = $.html() - layout = layout.replace("", "") // When we insert our element it automatically gets formatted, so we have to fix it in a second pass - layout = layout.replace(/\/gmod\//g, "/") // We don't use the /gmod prefix - layout = layout.replace(/"{title}"/g, "{title}") // When we insert this code from js it wraps our frontmatter variables in quotes so we have to unwrap them again - layout = layout.replace(/"{description}"/g, "{description}") - layout = layout.replace(/(href=|src=)".*?"/g, (m) => m.replace(/\\+/g, '/')) // For some reason, URLs are being parsed incorrectly, this should fix that. - await fs.writeFile("src/layouts/Layout.astro", makeLayoutHeader(layout)) + let layout = $.html(); + layout = layout.replace("", ""); // When we insert our element it automatically gets formatted, so we have to fix it in a second pass + layout = layout.replace(/\/gmod\//g, "/"); // We don't use the /gmod prefix + layout = layout.replace(/"{title}"/g, "{title}"); // When we insert this code from js it wraps our frontmatter variables in quotes so we have to unwrap them again + layout = layout.replace(/"{description}"/g, "{description}"); + layout = layout.replace(/(href=|src=)".*?"/g, (m) => m.replace(/\\+/g, "/")); // For some reason, URLs are being parsed incorrectly, this should fix that. + await fs.writeFile("src/layouts/Layout.astro", makeLayoutHeader(layout)); } async function setupFolders() { - await fs.mkdir("src/pages", { recursive: true }) - await fs.mkdir("public/content", { recursive: true }) + await fs.mkdir("src/pages", { recursive: true }); + await fs.mkdir("public/content", { recursive: true }); } async function setupMainScript() { - await fs.copyFile("build/fragments/script.js", "public/script.js") + await fs.copyFile("build/fragments/script.js", "public/script.js"); } async function setupFragments() { - await fs.copyFile("build/fragments/[...slug].astro", "src/pages/[...slug].astro") + await fs.copyFile( + "build/fragments/[...slug].astro", + "src/pages/[...slug].astro", + ); } function setupPageVariables($: cheerio.CheerioAPI) { - $("title").html("{title}") - $("meta[name='og:title']").attr("content", "{title}") - $("meta[name='og:description']").attr("content", "{description}") // We have to correct these in a second pass - $("ul[id='pagelinks']").html("") + $("title").html("{title}"); + $("meta[name='og:title']").attr("content", "{title}"); + $("meta[name='og:description']").attr("content", "{description}"); // We have to correct these in a second pass + $("meta[name='og:image']").attr("content", "{image}"); // We have to correct these in a second pass + $("ul[id='pagelinks']").html(""); } function setupBrowserHints($: cheerio.CheerioAPI) { - const insertAfter = `meta[name='viewport']` - $(``).insertAfter(insertAfter) - $(``).insertAfter(insertAfter) - $(``).insertAfter(insertAfter) // Some images are hosted on imgur + const insertAfter = `meta[name='viewport']`; + $(``).insertAfter( + insertAfter, + ); + $(``).insertAfter( + insertAfter, + ); + $(``).insertAfter( + insertAfter, + ); // Some images are hosted on imgur } function setupScriptTags($: cheerio.CheerioAPI) { - const scripts = $("script") - - for (let i = 0; i < scripts.length; i++) { - const script = $(scripts[i]) - const src = script.attr("src") - - if (src) { - if (src.startsWith("/cdn-cgi/")) { - script.remove() - } else { - script.replaceWith(``) - } - } else { - script.remove() - } - + const scripts = $("script"); + + for (let i = 0; i < scripts.length; i++) { + const script = $(scripts[i]); + const src = script.attr("src"); + + if (src) { + if (src.startsWith("/cdn-cgi/")) { + script.remove(); + } else { + script.replaceWith(``); + } + } else { + script.remove(); } + } } async function setupDisclaimer($: cheerio.CheerioAPI) { - let disclaimer = await fs.readFile("build/fragments/disclaimer.html", "utf-8") - $(disclaimer).insertAfter("div.footer[id='pagefooter']"); + let disclaimer = await fs.readFile( + "build/fragments/disclaimer.html", + "utf-8", + ); + $(disclaimer).insertAfter("div.footer[id='pagefooter']"); } // Generated from `npm run get_used_mdis` @@ -139,145 +156,187 @@ const mdiWhitelist = [ ".mdi-test-tube", ".mdi-tools", ".mdi-vector-triangle", - ".mdi-view-quilt" -] + ".mdi-view-quilt", +]; function removeDeadStyles(content: string) { - // Unused mdi selectors can be removed - const isBadMdi = (block: string) => { - const isMdi = block.startsWith(".mdi-") - if (!isMdi) return false - - const mdi = block.split(":before")[0].split(/[\s:,]/)[0] - if (!mdiWhitelist.includes(mdi)) { - // console.debug(`Removing unused mdi: ${mdi}`) - return true - } - - return false + // Unused mdi selectors can be removed + const isBadMdi = (block: string) => { + const isMdi = block.startsWith(".mdi-"); + if (!isMdi) return false; + + const mdi = block.split(":before")[0].split(/[\s:,]/)[0]; + if (!mdiWhitelist.includes(mdi)) { + // console.debug(`Removing unused mdi: ${mdi}`) + return true; } - // Classes that are unused - const usesDeadClass = (block: string) => { - const deadClassPrefixes = [ - ".contentbar", - ".card", - ".infocard" - ] - - for (const prefix of deadClassPrefixes) { - if (block.startsWith(prefix)) { - // console.debug(`Removing block for unused class: ${prefix}`) - return true - } - } - - return false - } + return false; + }; - // Anything related to editing or previewing is not needed - const isEdit = (block: string) => { - if (block.startsWith("#edit_")) return true - if (block.startsWith("#preview")) return true - if (block.indexOf(".edit") !== -1) return true - return false - } + // Classes that are unused + const usesDeadClass = (block: string) => { + const deadClassPrefixes = [".contentbar", ".card", ".infocard"]; - const usesBadStyles = (block: string) => { - // This selector exclusively adds a bad rule that errors and doesn't do anything - if (block.indexOf("#sidebar details.level1 > summary {\n padding-left: -16px;") !== -1) { - // console.debug("Removing bad style") - // console.debug(block) - return true - } + for (const prefix of deadClassPrefixes) { + if (block.startsWith(prefix)) { + // console.debug(`Removing block for unused class: ${prefix}`) + return true; + } + } - return false + return false; + }; + + // Anything related to editing or previewing is not needed + const isEdit = (block: string) => { + if (block.startsWith("#edit_")) return true; + if (block.startsWith("#preview")) return true; + if (block.indexOf(".edit") !== -1) return true; + return false; + }; + + const usesBadStyles = (block: string) => { + // This selector exclusively adds a bad rule that errors and doesn't do anything + if ( + block.indexOf( + "#sidebar details.level1 > summary {\n padding-left: -16px;", + ) !== -1 + ) { + // console.debug("Removing bad style") + // console.debug(block) + return true; } - const shouldKeep = (block: string) => { - block = block.trim() + return false; + }; - if (isBadMdi(block)) return false - if (usesDeadClass(block)) return false - if (isEdit(block)) return false - if (usesBadStyles(block)) return false - return true - } + const shouldKeep = (block: string) => { + block = block.trim(); + + if (isBadMdi(block)) return false; + if (usesDeadClass(block)) return false; + if (isEdit(block)) return false; + if (usesBadStyles(block)) return false; + return true; + }; - const blocks = content.split("}\n") - const keptBlocks = blocks.filter(shouldKeep) - return keptBlocks.join("}\n") + const blocks = content.split("}\n"); + const keptBlocks = blocks.filter(shouldKeep); + return keptBlocks.join("}\n"); } function optimizeCss(content: string) { - // Simplifies unnecesarily specific selectors - content = content.replace(/html > body > \.body > \.footer {/g, ".body > .footer {") - content = content.replace(/html > body > \.body > \.content > \.footer {/g, ".content > .footer {") - content = content.replace(/html > body > \.body > \.content \.content\.loading {/g, ".content.loading {") - content = content.replace(/html > body > \.body > \.content \.content {/g, ".content .content {") - content = content.replace(/html > body > \.body > \.content {/g, "body > .body > .content {") - content = content.replace(/html > body > \.body {/g, "body > .body {") - content = content.replace(/html > body a {/g, "body a {") - content = content.replace(/html > body {/g, "body {") - content = content.replace(/html > body > .footer {/g, "body > .footer {") - - // Sidebar - // Makes rules more specific, and make them only apply to open details where applicable - // Reduces the total number of elements selected by css rules by **tens of thousands**! - content = content.replace(/#sidebar \.section > a, #sidebar \.section > details\.level1 > summary > div {/g, "#sidebar .section > a, .level1 > summary > div {") - content = content.replace(/#sidebar \.section > a > i, #sidebar \.section > details\.level1 > summary > div > i {/g, "#sidebar .section i {") - content = content.replace(/#sidebar details\.level2 > ul > li > a {/g, "details[open].level2 > ul > li > a {") - content = content.replace(/#sidebar details\.level2 ul > li > a {/g, "details[open].level2 ul > li > a {") - content = content.replace(/#sidebar details > ul > li {/g, "details[open] > ul > li {") - content = content.replace(/#sidebar details > ul > li:nth\-child\(odd\) {/g, "details[open] > ul > li:nth-child(2n+1) {") - content = content.replace(/#sidebar details a {/g, "details[open] a {") - content = content.replace(/#sidebar details\.level1 > ul > li > a {/g, "details[open].level1 > ul > li > a {") - content = content.replace(/#sidebar details > ul > li > a\.cm:before {/g, "details[open] > ul > li > a.cm:before {") - content = content.replace(/#sidebar details\.level2 > ul > li > a:before {/g, "details[open].level2 > ul > li > a:before {") - - // Style fixes - content = content.replace(/cursor: hand;/g, "cursor: pointer;") // cursor: hand is invalid - content = content.replace(/\s+-moz-osx-font-smoothing: grayscale;/g, "") // This rule is an error in every modern browser - - return content + // Simplifies unnecesarily specific selectors + content = content.replace( + /html > body > \.body > \.footer {/g, + ".body > .footer {", + ); + content = content.replace( + /html > body > \.body > \.content > \.footer {/g, + ".content > .footer {", + ); + content = content.replace( + /html > body > \.body > \.content \.content\.loading {/g, + ".content.loading {", + ); + content = content.replace( + /html > body > \.body > \.content \.content {/g, + ".content .content {", + ); + content = content.replace( + /html > body > \.body > \.content {/g, + "body > .body > .content {", + ); + content = content.replace(/html > body > \.body {/g, "body > .body {"); + content = content.replace(/html > body a {/g, "body a {"); + content = content.replace(/html > body {/g, "body {"); + content = content.replace(/html > body > .footer {/g, "body > .footer {"); + + // Sidebar + // Makes rules more specific, and make them only apply to open details where applicable + // Reduces the total number of elements selected by css rules by **tens of thousands**! + content = content.replace( + /#sidebar \.section > a, #sidebar \.section > details\.level1 > summary > div {/g, + "#sidebar .section > a, .level1 > summary > div {", + ); + content = content.replace( + /#sidebar \.section > a > i, #sidebar \.section > details\.level1 > summary > div > i {/g, + "#sidebar .section i {", + ); + content = content.replace( + /#sidebar details\.level2 > ul > li > a {/g, + "details[open].level2 > ul > li > a {", + ); + content = content.replace( + /#sidebar details\.level2 ul > li > a {/g, + "details[open].level2 ul > li > a {", + ); + content = content.replace( + /#sidebar details > ul > li {/g, + "details[open] > ul > li {", + ); + content = content.replace( + /#sidebar details > ul > li:nth\-child\(odd\) {/g, + "details[open] > ul > li:nth-child(2n+1) {", + ); + content = content.replace(/#sidebar details a {/g, "details[open] a {"); + content = content.replace( + /#sidebar details\.level1 > ul > li > a {/g, + "details[open].level1 > ul > li > a {", + ); + content = content.replace( + /#sidebar details > ul > li > a\.cm:before {/g, + "details[open] > ul > li > a.cm:before {", + ); + content = content.replace( + /#sidebar details\.level2 > ul > li > a:before {/g, + "details[open].level2 > ul > li > a:before {", + ); + + // Style fixes + content = content.replace(/cursor: hand;/g, "cursor: pointer;"); // cursor: hand is invalid + content = content.replace(/\s+-moz-osx-font-smoothing: grayscale;/g, ""); // This rule is an error in every modern browser + + return content; } // Processes a downloaded CSS file, gets remote content, and modifies the file async function processCss(contentHandler: StaticContentHandler) { - const path = "public/styles/gmod.css" - const current = await fs.readFile(path, "utf-8") - let newContent = await contentHandler.processContent(current, true) + const path = "public/styles/gmod.css"; + const current = await fs.readFile(path, "utf-8"); + let newContent = await contentHandler.processContent(current, true); - newContent = newContent.replace(/[\r]/g, ""); + newContent = newContent.replace(/[\r]/g, ""); - // Optimization, hide all list items that aren't expanded - newContent = `${newContent} #sidebar details[open] > ul { display: block; }\n` - newContent = `${newContent} #sidebar details > ul { display: none; }\n` + // Optimization, hide all list items that aren't expanded + newContent = `${newContent} #sidebar details[open] > ul { display: block; }\n`; + newContent = `${newContent} #sidebar details > ul { display: none; }\n`; - // Remove the weird dot matrix thing that breaks Darkreader - newContent = `${newContent} .body > .content, #pagelinks a.active { background-image: none !important; }\n` + // Remove the weird dot matrix thing that breaks Darkreader + newContent = `${newContent} .body > .content, #pagelinks a.active { background-image: none !important; }\n`; - // Add padding to the feature buttons - newContent = `${newContent} ul#pagelinks > li { padding-right: 1rem; }\n` + // Add padding to the feature buttons + newContent = `${newContent} ul#pagelinks > li { padding-right: 1rem; }\n`; - // Add the "Mirror" tag/label to the icon - newContent = `${newContent} #ident > h1 > a:after { content: "Mirror"; color: #F6FAFE; background-color: #0183FF; font-size: 10px; text-transform: uppercase; padding: 1px 4px; margin-left: 8px; display: inline-block; position: relative; top: -4px; }\n` + // Add the "Mirror" tag/label to the icon + newContent = `${newContent} #ident > h1 > a:after { content: "Mirror"; color: #F6FAFE; background-color: #0183FF; font-size: 10px; text-transform: uppercase; padding: 1px 4px; margin-left: 8px; display: inline-block; position: relative; top: -4px; }\n`; - // Fix sidebar focus/hover color styling - newContent = `${newContent} #sidebar .section > a:focus, #sidebar .section > details.level1 > summary > div:focus { background-color: rgba(0, 130, 255, 0.5); }\n` - newContent = `${newContent} #sidebar details > ul > li > a:focus { background-color: rgba(0, 130, 255, 0.5); }\n` - newContent = `${newContent} #searchresults > a:focus, #searchresults > a:hover { background-color: rgba(0, 130, 255, 0.5); }\n` + // Fix sidebar focus/hover color styling + newContent = `${newContent} #sidebar .section > a:focus, #sidebar .section > details.level1 > summary > div:focus { background-color: rgba(0, 130, 255, 0.5); }\n`; + newContent = `${newContent} #sidebar details > ul > li > a:focus { background-color: rgba(0, 130, 255, 0.5); }\n`; + newContent = `${newContent} #searchresults > a:focus, #searchresults > a:hover { background-color: rgba(0, 130, 255, 0.5); }\n`; - // Set up the last parse date - newContent = `${newContent} #last-parse { font-size: 13px; font-weight: bold; padding: 2px; font-family: monospace; }\n` + // Set up the last parse date + newContent = `${newContent} #last-parse { font-size: 13px; font-weight: bold; padding: 2px; font-family: monospace; }\n`; - // Add scrollbar for the body tabs - newContent = `${newContent} .body-tabs { overflow-x: auto; }\n` + // Add scrollbar for the body tabs + newContent = `${newContent} .body-tabs { overflow-x: auto; }\n`; - newContent = removeDeadStyles(newContent) - newContent = optimizeCss(newContent) + newContent = removeDeadStyles(newContent); + newContent = optimizeCss(newContent); - await fs.writeFile(path, newContent) + await fs.writeFile(path, newContent); } const makeLayoutHeader = (content: string) => ` @@ -286,24 +345,34 @@ import Sidebar from "../components/Sidebar.astro"; const { title, description, views, updated } = Astro.props; --- ${content} -` +`; async function setupFeatures($: cheerio.CheerioAPI) { - const pagelinks = $("ul[id='pagelinks']") - pagelinks.append(`
  • Live
  • `) - pagelinks.append(`
  • Copy
  • `) - pagelinks.append(`
  • `) - pagelinks.append(`
  • `) - - $(``).insertAfter(".footer[id='pagefooter']") - - await fs.copyFile("build/fragments/darkmode.js", "public/darkmode.js") + const pagelinks = $("ul[id='pagelinks']"); + pagelinks.append( + `
  • Live
  • `, + ); + pagelinks.append( + `
  • Copy
  • `, + ); + pagelinks.append( + `
  • `, + ); + pagelinks.append( + `
  • `, + ); + + $(``).insertAfter( + ".footer[id='pagefooter']", + ); + + await fs.copyFile("build/fragments/darkmode.js", "public/darkmode.js"); } async function getRemoteFiles(api: ApiInterface) { - const fileName = sanitizeForWindows("~pagelist") - const pagelist = await api.getJSON("/gmod/~pagelist") - await fs.writeFile(`public/${fileName}.json`, JSON.stringify(pagelist)) + const fileName = sanitizeForWindows("~pagelist"); + const pagelist = await api.getJSON("/gmod/~pagelist"); + await fs.writeFile(`public/${fileName}.json`, JSON.stringify(pagelist)); } // Files that should be re-acquired on every build @@ -311,49 +380,54 @@ const uncachedFiles = [ "build/cache/gmod.html", "public/styles/gmod.css", "build/cache/gmod/~pagelist.json", -] +]; async function clearLocalCache() { - console.log("Clearing uncached files...") + console.log("Clearing uncached files..."); for (const file of uncachedFiles) { try { - await fs.unlink(file) + await fs.unlink(file); } catch (e: any) { - console.error(`Failed to delete ${file} (maybe it didn't exist?): ${e.message}`) + console.error( + `Failed to delete ${file} (maybe it didn't exist?): ${e.message}`, + ); } } } -export async function setup(api: ApiInterface, contentHandler: StaticContentHandler) { - await clearLocalCache() - - const rawPage = await api.get("/gmod") - const index = await contentHandler.processContent(rawPage, false) - const $ = cheerio.load(index) - - setupFooters($) - setupContent($) - setupPageVariables($) - setupScriptTags($) - setupBrowserHints($) - await setupDisclaimer($) - await setupSidebar($) - await setupFeatures($) - await setupLayout($) - await processCss(contentHandler) - await setupFolders() - await setupMainScript() - await setupFragments() - await getRemoteFiles(api) - - await fs.writeFile("public/last_build.txt", new Date().getTime().toString()) +export async function setup( + api: ApiInterface, + contentHandler: StaticContentHandler, +) { + await clearLocalCache(); + + const rawPage = await api.get("/gmod"); + const index = await contentHandler.processContent(rawPage, false); + const $ = cheerio.load(index); + + setupFooters($); + setupContent($); + setupPageVariables($); + setupScriptTags($); + setupBrowserHints($); + await setupDisclaimer($); + await setupSidebar($); + await setupFeatures($); + await setupLayout($); + await processCss(contentHandler); + await setupFolders(); + await setupMainScript(); + await setupFragments(); + await getRemoteFiles(api); + + await fs.writeFile("public/last_build.txt", new Date().getTime().toString()); } // Replaces any invalid characters in a string with underscores export function sanitizeForWindows(filename: string): string { - // We don't need to sanitize filenames on non-windows platforms - if (process.platform !== "win32") return filename; + // We don't need to sanitize filenames on non-windows platforms + if (process.platform !== "win32") return filename; - return filename.replace(/[<>:"|?]+/g, '_'); + return filename.replace(/[<>:"|?]+/g, "_"); } diff --git a/src/components/StatesPlayground.astro b/src/components/StatesPlayground.astro new file mode 100644 index 0000000..594dd3f --- /dev/null +++ b/src/components/StatesPlayground.astro @@ -0,0 +1,54 @@ + + +
    +
    +

    Client

    +
    +
    +
    diff --git a/src/pages/States_Playground.astro b/src/pages/States_Playground.astro new file mode 100644 index 0000000..7b6ebce --- /dev/null +++ b/src/pages/States_Playground.astro @@ -0,0 +1,41 @@ +--- +import Layout from "@layouts/Layout.astro"; +import StatesPlayground from "@components/StatesPlayground.astro"; + +const title = "States Playground"; +const description = "Interactive UI to play with / create state icons/images." +const views = "probably not very many"; +const updated = "rarely"; +--- + + +
    +
    +
    This page is provided by Gmodwiki and is not mirrored from the official Wiki
    +
    + +

    + Description + + + + +

    + +
    +

    This is a utility that provides a handy utility for viewing/generating logos/images of the Garry's Mod wiki States colors

    +
    + +

    + Playground + + + + +

    + +
    + +
    +
    +
    From e0725c0e883e1e01e99bc7ff141fe2274bca83d7 Mon Sep 17 00:00:00 2001 From: Sarah Sturgeon Date: Wed, 8 Oct 2025 14:27:17 -0700 Subject: [PATCH 06/14] Fix descriptions, add StatesPlayground, don't recreate static astro files, add state images for og:image tags --- build/assets/states/client-menu.png | Bin 0 -> 4388 bytes build/assets/states/client.png | Bin 0 -> 3923 bytes build/assets/states/menu.png | Bin 0 -> 3890 bytes build/assets/states/server-client-menu.png | Bin 0 -> 4658 bytes build/assets/states/server-client.png | Bin 0 -> 4343 bytes build/assets/states/server.png | Bin 0 -> 3825 bytes build/fragments/websearch.astro | 42 -------- build/fragments/websearch.json.ts | 21 ---- build/modules/build_search_index.ts | 12 +-- build/modules/pages.ts | 18 +++- build/setup.ts | 29 +++--- package-lock.json | 38 ++++++- package.json | 20 ++-- src/components/StatesPlayground.astro | 54 ---------- src/components/StatesPlayground/Modal.astro | 101 ++++++++++++++++++ src/components/StatesPlayground/index.astro | 108 ++++++++++++++++++++ src/layouts/Layout.astro | 6 +- src/pages/States_Playground.astro | 19 ++-- src/pages/[...slug].astro | 40 ++++++-- 19 files changed, 341 insertions(+), 167 deletions(-) create mode 100644 build/assets/states/client-menu.png create mode 100644 build/assets/states/client.png create mode 100644 build/assets/states/menu.png create mode 100644 build/assets/states/server-client-menu.png create mode 100644 build/assets/states/server-client.png create mode 100644 build/assets/states/server.png delete mode 100644 build/fragments/websearch.astro delete mode 100644 build/fragments/websearch.json.ts delete mode 100644 src/components/StatesPlayground.astro create mode 100644 src/components/StatesPlayground/Modal.astro create mode 100644 src/components/StatesPlayground/index.astro diff --git a/build/assets/states/client-menu.png b/build/assets/states/client-menu.png new file mode 100644 index 0000000000000000000000000000000000000000..922998d31689c0cd2ba4d2ec719357e656d42ddb GIT binary patch literal 4388 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 literal 0 HcmV?d00001 diff --git a/build/assets/states/menu.png b/build/assets/states/menu.png new file mode 100644 index 0000000000000000000000000000000000000000..c40176fc11cdf3937df8edbbfa2e0c5a9fed9339 GIT binary patch literal 3890 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 F;y;QD;2Zz| literal 0 HcmV?d00001 diff --git a/build/assets/states/server-client-menu.png b/build/assets/states/server-client-menu.png new file mode 100644 index 0000000000000000000000000000000000000000..bca8eb523d97440a12db53396926c73ca4151de3 GIT binary patch literal 4658 zcmX|FcUV)&*S-l5LKQSP%qc=}lq5@9yu}{r;GH?>TekJ@33{o|$JZ?UJP_52qL>002Bhf(Z$J zGyZ946#Oi=ugC^~qd$ozhSni2%UMo-$J#|dTz|yRc$EbW`rj_WTw!IEG*ciy_aROQ z6YvfAzuc|OkenRfS+Lls9RxIiWHSlDJ+J9GCx6p9pv3XMbc!rG1%(lGL9({1{$@kN zJ0dN@xp&4F>mU6duJb{!QBQ5ZN9WfGhoHZntnT;y%D8eZxbH7XoPOB0Uxua}gZ3%& zW3Bvi$7F$WQtW25fLcC=$G0uDW3(+7C1ss=-FVZvLjPR$Ga;jF5-BUyEJDg;4R_}( z20fl-^_@X2UJ^R?^KrPCe2?;EWu9JPk8J@{x@4Fqe~W$VTvFu5=oh#6A7$u_ukHPa zC_;0gHTmKxja}iJfrlc-4^Pm?5CO#(GBqqL_Rk#j1>S?UWQLg_3P}em8di<@*Y13L zV@jyK{%3WER-4%Ps>`{#1V3PLMSou!w?q~;6I}2w8ILAX+oI!F-1 zmg&8})ktw+35uEme2~a#x}nI^wk39t_bj;wKI!>%pKO&VB0p@uMlT zGPhMnat#epPx_uB24(mD-CQ&G_qeq}It2xqbGn|7$?bAnirVQY8j8NaMhLb$lzQ`e zCqxXv+(Tl>g2bW+hno@FUcTYd-pOrLi7zg1pH5DpkCc_Jun|hj^352H_jY1C&04&obj{1{0|pDV9FJ0ha@u9j)Y5jT5L8j-+Hc-_3I8LR&E^pzrisGZ^kO3h}TMkxBs8+d)-Eo|@T#@Xc zjny1~0qK+-Q}=6|$B8)B=(4~}%jfTvkWTG0 zWJu$OkG97En)3Cm4&}Mz%&9A0+Lv&??Sf#_Vu|VOE|*M&zruK)2emEF%_cRJTH(`E zNvXCuhYzhAtt{AQJgem7QsPBI_Ufa*Ep*o9CbN00x~O{Y$o*VvYZ^&BUpWL|D!YWw z5NF@t-4s{h=bHQDM`AKt^a{5#F&IVO3L7Jjuwd#V#QS91OG!>&3kmp_pG%Ej&E9~ij~P|Vb`naI=FA!^%^aDFCw_HwJlNu6e5D=ZMyv71U6g3 z>qfX25^MZ<{FgBFQ5DrcJ+e&+*^ayZe%(j~yPj)) zLfSJ&h?inMC4A_{$`^`exy)i)zpo(>IgG?a`kXV<8d9hVP{L+ytv8XncYH*$X>4G& zfH}>*!02n{QGCpb#_GCB%jjtY?f6_?*l0#;*eLsvS8LyLKIbA}J>))W)@*z5@nuGW zRi|v^@br&ogtOTDjC)^TKW~~Y=oBieR7rmr?>%t8*|B>PiwZNwq@6QOF#H*3El}eyqiruw*RES8=G_G#bZG zS${_K17m#a5tp}ECmh426M?5MGPNa4< zKE?0J2Gaa4j1Uj~K7`+z|AS#HL1Ht$z7MOgFZs9^dxKePeMe7Q1)w>79r9oSy_xZ& z!FGQ~=W$^EsB6 z;P*OI_L>78pc%aX{TvDm$}C62XN3Ffo?>cSQ)3bmN$3_Q>q%o(m;6C2we7{U3S728 z6<-A0A-bY~!K!|((S$n^rd9F)`WE>Ek`>C=V%}oK(|gy)r~sW3bA3P@0)q{XVyR%m zw8J(l*qM2e8;vDi3rTGTh~c|dFxHHC_N^m$OeL}efdJRJ=ljK=1-o}>EY)PnUqu-~ zbCF4aqqex`hdCh=yZ7=i)`UM<8R(o9ROLlur(^Inl6cbi2}L;L0}zjgk=@Znp%;}*P2J_Tax z;33Vl&Jr69qgJth{Ci8@C7OgWn9Y`~Y?18sK4UM-Vtv%_&}pv`~a{`d2J;L3&aCs`>zf~+<<=TcM{(qTs2@`x!eE3`~Rh`-yfN1d_xPvh%@Lw)Asn9UI;Qq&jE(mIH z{maD@L9~Fi_#c-Fsgm3Oa``9&0v^R1Kd$~}i8k@Q$;JVQ+Hm1925#d#J6(X z^-`{rLSQ|80JyTUMM9deA*jGZ(3avWZx@0AFslgS7Cf_76bOL1t<-3KmUjh6o~ewTQX~oQ38SouMG6f4zU9>Bi3TG|dJ86xpYqDKfy zqP{pk83GV1^ZxxyYFloDkWtz_IPO#^g@AV(zxsaq13VvYac30??9HoH?*#IsI1r0@ zW7owK9$)f=H?s(fcqu{)H{xe{{*^z|!q1K%F>k-u+4|{7A~z77En_Da4@=oVmywm1 zP2Qt}2WGKl&Gh94d;AO$Q4pf&Y`BxiT+&Z;)_^zsBL&u#F^UXXM?> ztPz-q+SJop7gfI0Qod37o~c$ zYm?CC7ouUIHZMTeCd-gN4-MP;CDLO>?!;zCCv$cHCqer?3h%HRm+*@B~lTYIf!!OjNdK$p0e*2#2 zJ}*44;w-;luvvM9AK>_95?1|kyDfcnhXq03l00%lS@d{`64w6Qp!kX|5=)#586P>3 zU@ru{OWMxr`ovk1eKAESD+^WyGf_VK{hQJ1jjrtqG$XD;@K$@t!LJ-kJ6ZF1vZyvd zaC@rK{!aF{rt@_)k`f-(cP>cjEom-_kNzgzdqCfq9iY|ylo4e3I_icVvHkwrO*YXL zeA*qYevWRjdagQiw2sA4@OU#1#^-gJC&JGqlqsCWhzFRCPsz8 z4V6$dGoGjbi9qjCJm#w&BwIh0BPN^~*So|8$>Su+-il`uhnKCX+(uPloh)XZMRZR5 zTfbw)*9Z%!;(fTSEz{a6hpF7h$mNAuZ{HR^D*|n!9zD^ybRSCg67RfR^Kf?8+d>1$ z=%4=dkn&n^vSJLf71(PG&WXb=_TX-JWg4w2$~vo~82x6apV`tcZ>gOL{$g@V;zKc# z@MviI&_enCBun87HBN%O&u^n~T!B{m?^9TxW%`zy@qP{A?p)epWFrl#IXhHXIQPbV*7|B!>* z*TfPRmL?Gwu{uPphm~ZqVvApwR2elvcXp5Mpee59#eB7=wQ`3iH%D``lokgr(q|9y z3D3&17;A4#a~7|VO@nG*HS zx`FtZ2i0ElRq-AwKU9~;SN|w=t7FLKImFDK%5tZ0+DuH4ery;gy-DhDV__^HlqQ;I zeI``;&p)^tztDC_&%bAUR*zTYz6tFJVNUXCY-G;E`}@oCmXawlSof>rufl^aUtSCq zoE18H>TLd7*GjvMQ1PWFNcs>sa|6Ek$Gza%QJ-Q4cc;s9-5p~&9nl>h%w#&t-Akog zms9lIFJMg+d1f+d2D@{d?usvj7v4nYuIaf59TQ>i#F^cC>T@%0GGE)`+1f7K$c)uQ vKt%Lp^#ZR)e->9;qW11Rr{s!bd%wc27GaKhzPthd3j&DeEKMqmu15VI;5vvu815t%eBtU(OOq-iXDH^T2J9??EHD_1okS#99{KM7fH-z!AKTWH zz+k8sBm&Ml{Nh@%UE0Y`fv$&zIwbwB`}oD(!qL zOii;bc-vyyY5Gv4$6mz7Icn$k^5SyI(vL4PKDA$Za;6Iu-C4A&6%{ef{BFjYrO~^A zuLsj8Y?q$sl&iL27JIu=4%O>L%I(vvWKESlqxE$RjNeKZpiZfb*tjws+Gcz9?m?-Fm3Sw*yF}2Df(pYP#*R!tb>L zTzY7IEM=;ltBmQFsNPst^Vo&oVq3hEefOU0WluT?;cniOUtYNJ93}HnU4*J>LP%wR z+ou_reAp|fvT)yjam%LrtRpT-@Bk&#tl8*3I8TZSSz_qx&C+x?3zJZSJd* zMO&qVz`>s)z)dn2*7LeaaC}HEa&eHRf6&W^Bjksi^Y@QfaQ(Y|Za`Tdi?YSW@@`}Z zn(4f1n4+>9w4#TDB3n?NnV^%hv4IWeleLCmeJzx?{;Wy-pqKY}pQO?T@py&(54%%9 z)4Z*AAp~XG$+i(GO{kYThcvQMFJS72I_A-oM?s<)>m-kpclswB~ zg6egVeh^n#@4?u4<-CXqBP}zs^}7Sr$lx`kBoYfsKJ6coh97+VEvj4?G2nM{l$@4p zS@^v*dZq5&1}jZnKZ!#afq1*F8oX5Ok8cJm>_>v1#;jGsRn+3`qtFzGpzn+1SW;B9 z_q@^@)887r?)n*dm&^R`#mipdB(;Nt7-rx*y?ADRds^0jY@K}lJWIOBoeJLPIV&Cn(AIJoE(@)tJ$o6?x?b`i=_|0DUX~Z2{|_c_j#?<2Fe}(jwu#&9i!4u zVXrlr#rmoZ+Pta_S?;%>mS4Y~C%g2(&aA|CMCx{0OfsZ|5ldockYs=3*y+EnIbP#u zfcvgQE50Vs<9UM7(3gQ!afeXW2+&#eYr;}}ai`zhmu{Beu#C+ewcWRY6X*Es=*0%F z`hl0B8l~DpHw}A*=&eil-)+Zl!fgqs)6D^E>fvv@y_;qsEA%2^Hle?)v;^mPbuTPmqUK ztROE0&_v&-P-UXqiQ|G35Eidx)9cYF3%V}^?Zyo1 z6kS!$1>d77pht=sxE;cJZShP0s_V!U2R`}2=-`*(6^kM%h~hRp^gh4P&F^vl^;ho# zOi_`DH~vS63>ow<6@Vx{-?ICzbFPV<5M+`X7~KkL#P?kDlVBoUA>*Iy0)VFfyt4En zkl!-eF39Xpg*a^3VmPj?N4^YMk32*f?Qk*|&ygWh%AG?o2IahxAtuVfzQL1CJSY=+ z3s_zh^$MfXwDBJmg|_+4TYgXpEi?i~^rB+Wl4x{ApHgeTnZ-ifj0!&>O9X*$wi&Mc zgI*uXeQWOqM^Gk}uwc_XZTe&DYQo?s-~1ACEThy;P~{pG@;PpWc5ZFWyI^?V;4Jqo z3^ik23JcC~b@{+H=M=T=hf=rUu5#yv}{A8{6%4H`vFe#Y8A^4JqQ6&h<7^7 zw%E1pYjh?SmwyH$RT+t(%sMgS?YQO$$0nC}OdupVt9Y3>$K}%3Hkh1XAd7n>fAOWl zLa^W2b41$EyUBt*q!CrhC$i@8f}$Tla#0Jqo%VW%-T3p*RRt@kTHf>d6JjW7RrPJzT2F1fBA} z0}mFKxs9-q)iD?-5GE~QBAW6Bj|Y=qiG4mvZpNUYK)CE(Cv-}02M)}e6&qnEhhzAm z4Vb)`lW0m89tYln9bf0bK|BZ=F}B(pfe^c|KqY|0&JHY!!W0LAuBSm3GEokIGTF|| z2cYQ53|LU4EQtps{{n<*zW~+QIuzYtmP$8hh9@SWwd0c@ZN}ZRTEK=t-Em|EV#($AFjP9XwzH-#%6VgglY_MS zgrz|oK+-~!>(LZ^=WP-b8FQYSc=tRGonpUJ?ZrqMl41cY?(wqcV?h-bM%+*}qqd~Q zQw|j2Q%7G_VlgzufTITNPYMdr#yaMWP9f%4&+p?zDL1M@#qcQ2Y@W-EB(gjJAWK^A zafwnSZ)6;4cXfBH!${e=D&-8%(~s=7>3+OU?$d(2F?_ z6y5nn93dI{>zaiAThD$*3EE&*12&R#j(VY5D#s>gW=}u ztxtncrWMD3L(?qKl)VNlYMm`714e4kVJ3%v<)eJ2(xdXxDc3_Ymyx8Y99DAkSKgkB zRC>fXIwjaM^9P(%l*36@|9U)igi4PV5KW0XU+;q?t>$o($G-CPo~Kp>+ldmr^y~fM zq=`H}GCgvCvhXBy`8|?6=Ac`Dm5Ef4$4{n5FHM%BA-g^n@|d#@#T!Wy>}A7&^{d4u zAni{n9}w6W3Jwa=ieyy)QXef$+k(h|E2=F>*dew;V>qyJcG_62hlWL|NlU~<(M}@) z(yUvU<~PWY0XJ2Xo3LwC0HL5etkb%EMOgb2waqL*=8DRZU_I0gq{e$37P z%39fru-T#D(Nc?D^PkODaJh>l5NOJ|=u-1aIpb^36!yT2j^7cIh7oT@9Dfa5m9 zdXUsF8SH!8>2w2a8XGwbvHb{)G}3F`ROj->bv9QN5qQg>=s__OLorh7sh@+k9!SS3vgis_>4J$b&48)jUp zL`Gm4u%;5eUQwxi(Rl6tugyNbYF0$GKH8nc7H=j~*%T>oLUy@}-%Hw>G2sRltwjp& z?5<4yz(Njdr~{8nplHzbG)GTeC#p}2S3K%QUPl_$z5@x!A-ztdU-8_t!zKN9GF;%k z$Y|^w$bd6+yX|!Ns7&M`D|rjmdEwYV;VD!KL>5xp%+DDq3np6|-JfBR_(71xVnZ0< z#7(d`=1;Q)^-IasLD!M!;V)<%R2|}%6jH5o!v4-4HXe;vIOwm7zS_-%fg=cUv1T;u z^ed6nKsiC6{;&D}&x}0+oFfQ;>x6Uh=1I+i{(rdQnlvpbV{|>BVc0S58eduKYUi&G(tRAIs%k1Yd1Ohgpb-n z1#Y@1bhuB+SQOgY3Xw?}Zm}F-9oq0XcwF^vK9d>oRMcf4J+^7jOVY?xss*fwZca3^ zC~DCE-H-U$b}WcnzE$A!GxSbz#iOg`nqj2@$_fXuSQPNRkX2Z)&s2LURK|=v^pRwE zz_@*>Z4&6`1pbI&|3%Dcs}crACiX`|0Y& z^A)8B@%*O9qO#<=m>30}!0yXk=hrG(+}QEAIP6VlY(3VXUki?QHu#g8z~_0#-aW6b z$H^jw*GYWzcYUqnKGxsOtO6WH+lYni4B|A{x#Qa{aKFvy5)YHBk(&&id^k^TLD`ii zrPq)4O7kK~U=*&5DbDJeO;=Ui>b!I`*QO11TvtwlF8|#rF@4)>rfZ9pXYRCKtoG;G zwx#_Rot!A*vw++<*|AL5LyejZzNNN%@-{3gGzt$q^6de02Tx%VOV(B9%y1WSpHOJd z_V1-Vhb6ueF%d%ISLL_&&g3|A%uAFagAC(XEp=8WIwNgQ>&>KMge&4};?R<5^R9lFQ(Fw8a~GaW3qIuNg>ygHKv3~ zmLWv4B-y1hn7Gy_N^UGzK~Zhvp~7bpB=Uyb^~*J*#w(<-EP}74_d8` zoa>n>z|1xEG>^3Y&;{IrvSJ6oB64z+!JP1z$^PnP@X&2YJc zEi<0{;HH{jnPWOnKD!J$S@UZ$j51{)>pMdkx*IXe7Vp(bx5!3SKv(z!!-rG92Yi)@ zhJ__Y7sNUH{aJlL2`Tky#`jESKPxV%%NpJr-u*d_M@0wcfDQ_Z#ad;?aHCrXPcysg z35n5+bN%6ysT5^hH}HPtabm+TpL0+a>P|~&QdJbWBzb>Wh?G&8i{rjL2H7Eqfu|R2G(Ar&J`Um$72_2&Qz)u zYW1h6nA9JEp!l}Ol>49a?@TrdO|-1I*9f*NTo3b3iY7*~DnFf32N6dwr8G6e)~tQY z-yGUq(4j?v!dGw{0h#&E`^U#YL}{c|_qg4ji&L2T(1&s_lBU$^W!JCCCAByuMEjN4 zryGOhN3_U_?2=q;lI5oQTF3Lm91~CtFklLalGrKZsW^s=c zU}v*Gk@PmbOgzL%^o1G-Z+t^wBDKh}JrpvFzyJW|q&R)GQ&cy8=fCinQKL-<_tto$wbYm7AuXhxTQx>7#Uq57*P~pG6o*RHs*YJG2bAlpjIOrdW*#*IqGPI%Y@0ZDBMAtul5{ zYh``(qg~<7q8CmHDWZ)v!0NA!hKK4-4#->Pmj^qN=x(>w3T#ou!pA-k8Qc)^$o9^} zmtFYlK`4i!2RSBUNY##;{#xk28arQDR*^7Yr_Jt*BCO!e7T5u%yP3)ncN5p9mCA)nLvC zZ^o>jzC6T(+!f%TPPLoPOoR?Sz1c+tvTH*Hbm6mZ9iD&)%o}FzY<>MGr(v|EzB5IwV`Vz?L%N+&{;VVSTA&nZgos7!yfWHfSG}pZ`xVe2~>iB(OJ^Yo7)Mj*uu5f zc|MW6iAVVuU@%(qB4bPDg7&a;1TqAP&MLrZF1OQ*Ys9D2QucZ+a7TzA_@_TMORHcv zL5faCtbFDxO+LJtJLX5q=qz{KKjO`wb8 zLEMjv2552;AQF=w9h&4vM z2M+0U>g;dcwfJ}vE&_4Nc5X2!*9TrWBk|V0Ybsat&#MqfABGLxIxA#ffBQXfDpA#l zfAE{QvsbHAufj3I=s#$fRgJxMzi$>?Y5*Y4{w-Daj^VXZrgwzsbGlk^|703`gAphyFUVFac(YWd%FYy!+EF)Mw0dLtkEq zml(s9YE+gm(dnhr)d|cfDlJPYxRH6}i2f1Xzi9du92wKCfts3cG%FGTcwjHH7@nU=VNC8ywKWDI;eV0H1%q~SD6ZogtNvdHSG^Y zS|19GP7S{838Lg-@O7{IzTB{qk_Wwh-?k-;=|`yI%4j40&-%_kpBQBw?7?SrH6=1P zUd^-rUcn@r;}5?!=lLCF&eG1~ld6c!%BAt1DXp(Ae>5VX#Cd+De;TfQe0wD|_Mx$yuNJcaCa<0pM=JbBlC8-W#=p{D5cdAKZzhf+XjaLZ(NLmZFx%wvd6@!lBd+fU3d`MT z6@R(yOE9gDWif4drG8E-z``D`qz}8S^j}=_JDgdrFG;qPZJg7%8*WRXb*P(2RS)Ur z?F&_^@KYqm==in~>CtDcT~izC?=>61#CVKmuTP&f*{4sq?@SK9?T4`!OWM)gf>00j zJqk${86jJbMj?L}g7w3-{OTOv7>S7WVI72Hn5 zl_PA-LXUJzl(>)I9tYB0(|T;hIc7iAhs?1_M~GPncKe%gui>D+hLiVxpN=4;53OLZdnvH4=|y>m!?a?Vpio(QF?P36nF zhh9Y4dva`07E48}{BO2gsgm3C6ZEq95Fs&k&h1j;9s6zen=!{9!bR?UOYXi4%6HiM z`s)rZmL#$jUuj=uU~Q;k{nx(*Wh<4LRu>83tcw>;b64pq5~NMq;}{Sa&pJI+VG0yg zcs<_MnRajv+T~ zo3{6a+%t;lmSO~zPAY@_W>fVzelm3|I-Z)WNO_npwhmQ)3sB|rC#24eYOJO-h4onc z?Y(?MelzC73-gw*T3YaI{1cC`Jqw?>^9SFBeqIT5uFbE**~y ztuHwlUY@MVJgcQBdh@$E%vzA&{*85VYhTP8d&ThPbo9*`$)7!QcmINF)KPw|T}Ts! z4E;3}R%88S>cjjW { - const url = `${Astro.url.protocol}//${Astro.url.host}/websearch.json?query=${query}`; - - const response = await fetch(url); - const data: string[][] = await response.json(); - return data; -} - -const query = Astro.url.searchParams.get("query") || ""; -const response: string[][] = await getSearchResults(query) - -const formatted = response.map((result) => { - const href = result[0] - const context = result[1] - const index = context.toLowerCase().indexOf(query.toLowerCase()) - - const pre = context.substring(0, index) - const match = context.substring(index, index + query.length) - const post = context.substring(index + query.length) - - return { - page: href, - pre: pre, - match: match, - post: post - } -}) - ---- - - -

    Searching for: "{query}"

    - {formatted.map((result) => ( -
    -

    {result.page}

    -
    {result.pre} {result.match} {result.post}
    -
    - ))} -
    diff --git a/build/fragments/websearch.json.ts b/build/fragments/websearch.json.ts deleted file mode 100644 index 6de069e..0000000 --- a/build/fragments/websearch.json.ts +++ /dev/null @@ -1,21 +0,0 @@ -import type { APIRoute } from 'astro' - -export const GET: APIRoute = async ({ params, request }) => { - const url = new URL(request.url) - - const query = url.searchParams.get("query") - if (!query || query.length == 0) return new Response("No query provided", { status: 400 }) - const normalized = query.toLowerCase() - - const domain = url.host - let indexUrl = `${url.origin}/search_index.json` - if (domain === "gmodwiki.com") { - indexUrl = "https://storage.gmodwiki.com/search_index.json" - } - - const response = await fetch(indexUrl) - const index: any = await response.json() - - const results = index[normalized] - return new Response(JSON.stringify(results || [])); -} diff --git a/build/modules/build_search_index.ts b/build/modules/build_search_index.ts index 5a77bcb..682c30f 100644 --- a/build/modules/build_search_index.ts +++ b/build/modules/build_search_index.ts @@ -1,12 +1,10 @@ -import { promises as fs } from "fs" -import type SearchManager from "./search.js" +import { promises as fs } from "fs"; +import type SearchManager from "./search.js"; // Given the search index, builds the search page export async function buildSearchIndex(searchManager: SearchManager) { - const index = searchManager.buildIndex() - const indexValue = JSON.stringify(index) + const index = searchManager.buildIndex(); + const indexValue = JSON.stringify(index); - await fs.writeFile("public/search_index.json", indexValue) - await fs.copyFile("build/fragments/websearch.astro", "src/pages/websearch.astro") - await fs.copyFile("build/fragments/websearch.json.ts", "src/pages/websearch.json.ts") + await fs.writeFile("public/search_index.json", indexValue); } diff --git a/build/modules/pages.ts b/build/modules/pages.ts index 242d455..f40a18a 100644 --- a/build/modules/pages.ts +++ b/build/modules/pages.ts @@ -44,18 +44,26 @@ const stripMarkdownLinks = (text: string): string => { return text.replace(/\[([^\]]+)\]\(([^)]+)\)/g, "$1"); }; -// Builds the description that'll be used in the og:meta tag -const buildDescription = (markup: string) => { +// Builds the description that'll be used in the og:description meta tag +const buildDescription = (markup: string, pageContent: string) => { let $ = cheerio.load(markup); + // Try summary, then description let summary = $("summary").first().text(); if (summary.length === 0) { summary = $("description").first().text(); } - summary = stripMarkdownLinks(summary); + // Fallback to first paragraph of the html + if (summary.length === 0) { + $ = cheerio.load(pageContent); + summary = $("p").first().text(); + } else { + // If we found a summary or description tag, we need to strip markdown + summary = stripMarkdownLinks(summary); + } - return ellipsis(summary, 200); + return ellipsis(summary, 254); }; // Excluded to keep the bundle size under 25mb (cloudflare limit) @@ -94,7 +102,7 @@ async function buildPage( const page: Page = { title: struct.title, - description: buildDescription(struct.markup || ""), + description: buildDescription(struct.markup || "", pageContent), tags: struct.tags, address: address, html: pageContent, diff --git a/build/setup.ts b/build/setup.ts index 8634347..4b31967 100644 --- a/build/setup.ts +++ b/build/setup.ts @@ -4,7 +4,6 @@ import { promises as fs } from "fs"; import { minify as htmlMinify } from "html-minifier-next"; import type ApiInterface from "./modules/api_interface.js"; import type StaticContentHandler from "./modules/static.js"; -import { getAllPagesForCategory } from "./modules/get_page_manifest.js"; function setupFooters($: cheerio.CheerioAPI) { const footers = $("div.footer"); @@ -18,6 +17,7 @@ function setupFooters($: cheerio.CheerioAPI) { secondFooter.remove(); } +// Set up a slot for our dynamic content function setupContent($: cheerio.CheerioAPI) { const content = $("div[id='pagecontent']"); content.html(""); @@ -50,6 +50,7 @@ async function setupLayout($: cheerio.CheerioAPI) { layout = layout.replace(/\/gmod\//g, "/"); // We don't use the /gmod prefix layout = layout.replace(/"{title}"/g, "{title}"); // When we insert this code from js it wraps our frontmatter variables in quotes so we have to unwrap them again layout = layout.replace(/"{description}"/g, "{description}"); + layout = layout.replace(/"{image}"/g, "{image}"); layout = layout.replace(/(href=|src=)".*?"/g, (m) => m.replace(/\\+/g, "/")); // For some reason, URLs are being parsed incorrectly, this should fix that. await fs.writeFile("src/layouts/Layout.astro", makeLayoutHeader(layout)); } @@ -63,18 +64,18 @@ async function setupMainScript() { await fs.copyFile("build/fragments/script.js", "public/script.js"); } -async function setupFragments() { - await fs.copyFile( - "build/fragments/[...slug].astro", - "src/pages/[...slug].astro", - ); +async function setupAssets() { + await fs.cp("build/assets", "public", { recursive: true }); } function setupPageVariables($: cheerio.CheerioAPI) { + // We have to correct these in a second pass $("title").html("{title}"); $("meta[name='og:title']").attr("content", "{title}"); - $("meta[name='og:description']").attr("content", "{description}"); // We have to correct these in a second pass - $("meta[name='og:image']").attr("content", "{image}"); // We have to correct these in a second pass + $("meta[name='og:description']").attr("content", "{description}"); + $("meta[name='og:image']").attr("content", "{image}"); + + // Remove the View/Edit/History links - we put our own stuff there $("ul[id='pagelinks']").html(""); } @@ -86,9 +87,11 @@ function setupBrowserHints($: cheerio.CheerioAPI) { $(``).insertAfter( insertAfter, ); + + // Some images are hosted on imgur $(``).insertAfter( insertAfter, - ); // Some images are hosted on imgur + ); } function setupScriptTags($: cheerio.CheerioAPI) { @@ -341,8 +344,10 @@ async function processCss(contentHandler: StaticContentHandler) { const makeLayoutHeader = (content: string) => ` --- +// This file is auto-generated, do not edit it directly! +// See build/setup.ts for more information import Sidebar from "../components/Sidebar.astro"; -const { title, description, views, updated } = Astro.props; +const { title, description, image, views, updated } = Astro.props; --- ${content} `; @@ -383,7 +388,7 @@ const uncachedFiles = [ ]; async function clearLocalCache() { - console.log("Clearing uncached files..."); + console.log("Clearing uncached files (to force re-acquire them)..."); for (const file of uncachedFiles) { try { @@ -418,7 +423,7 @@ export async function setup( await processCss(contentHandler); await setupFolders(); await setupMainScript(); - await setupFragments(); + await setupAssets(); await getRemoteFiles(api); await fs.writeFile("public/last_build.txt", new Date().getTime().toString()); diff --git a/package-lock.json b/package-lock.json index 970e1ea..403c49f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,9 @@ "version": "0.0.1", "dependencies": { "@astrojs/cloudflare": "^12.6.9", - "@astrojs/node": "^9.4.4" + "@astrojs/node": "^9.4.4", + "downloadjs": "^1.4.7", + "html-to-image": "^1.11.13" }, "devDependencies": { "@astrojs/check": "^0.9.4", @@ -1290,6 +1292,7 @@ "cpu": [ "ppc64" ], + "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1414,6 +1417,7 @@ "cpu": [ "ppc64" ], + "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -1543,6 +1547,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "Apache-2.0 AND LGPL-3.0-or-later", "optional": true, "os": [ @@ -3540,6 +3545,12 @@ "tslib": "^2.0.3" } }, + "node_modules/downloadjs": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/downloadjs/-/downloadjs-1.4.7.tgz", + "integrity": "sha512-LN1gO7+u9xjU5oEScGFKvXhYf7Y/empUIIEAGBs1LzUq/rg5duiDrkuH5A2lQGd5jfMOb9X9usDa2oVXwJ0U/Q==", + "license": "MIT" + }, "node_modules/dset": { "version": "3.1.4", "license": "MIT", @@ -4630,6 +4641,12 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/html-to-image": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/html-to-image/-/html-to-image-1.11.13.tgz", + "integrity": "sha512-cuOPoI7WApyhBElTTb9oqsawRvZ0rHhaHwghRLlTuffoD1B2aDemlCruLeZrUIIdvG7gs9xeELEPm6PhuASqrg==", + "license": "MIT" + }, "node_modules/html-void-elements": { "version": "3.0.0", "license": "MIT", @@ -7019,6 +7036,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -7041,6 +7059,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -7063,6 +7082,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -7079,6 +7099,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -7095,6 +7116,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -7111,6 +7133,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -7127,6 +7150,7 @@ "cpu": [ "s390x" ], + "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -7143,6 +7167,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -7159,6 +7184,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -7175,6 +7201,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -7191,6 +7218,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -7213,6 +7241,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -7235,6 +7264,7 @@ "cpu": [ "s390x" ], + "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -7257,6 +7287,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -7279,6 +7310,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -7301,6 +7333,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -7323,6 +7356,7 @@ "cpu": [ "wasm32" ], + "dev": true, "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", "optional": true, "dependencies": { @@ -7342,6 +7376,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "Apache-2.0 AND LGPL-3.0-or-later", "optional": true, "os": [ @@ -7361,6 +7396,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "Apache-2.0 AND LGPL-3.0-or-later", "optional": true, "os": [ diff --git a/package.json b/package.json index 263c14c..fce3298 100644 --- a/package.json +++ b/package.json @@ -18,26 +18,28 @@ "clear_cloudflare_cache": "node --no-warnings=ExperimentalWarning --trace-uncaught --trace-warnings --loader ts-node/esm ./build/modules/clear_cloudflare_cache.ts" }, "devDependencies": { + "@astrojs/check": "^0.9.4", + "@astrojs/internal-helpers": "^0.7.3", "@cloudflare/workers-types": "^4.20240129.0", "@types/html-minifier": "^4.0.5", "@types/minify": "^9.1.4", "@types/node": "^22.0.0", - "typescript": "^5.3.3", - "gmod-wiki-scraper": "github:NullEnt1ty/gmod-wiki-scraper", - "wrangler": "^4.42.0", - "@astrojs/check": "^0.9.4", + "astro": "^5.14.1", + "bottleneck": "^2.19.5", "chalk": "^5.3.0", "cheerio": "^1.1.2", + "gmod-wiki-scraper": "github:NullEnt1ty/gmod-wiki-scraper", + "html-minifier-next": "^2.1.6", "ky": "^1.2.0", "sharp": "^0.34.4", "ts-node": "^10.9.2", - "bottleneck": "^2.19.5", - "astro": "^5.14.1", - "@astrojs/internal-helpers": "^0.7.3", - "html-minifier-next": "^2.1.6" + "typescript": "^5.3.3", + "wrangler": "^4.42.0" }, "dependencies": { "@astrojs/cloudflare": "^12.6.9", - "@astrojs/node": "^9.4.4" + "@astrojs/node": "^9.4.4", + "downloadjs": "^1.4.7", + "html-to-image": "^1.11.13" } } diff --git a/src/components/StatesPlayground.astro b/src/components/StatesPlayground.astro deleted file mode 100644 index 594dd3f..0000000 --- a/src/components/StatesPlayground.astro +++ /dev/null @@ -1,54 +0,0 @@ - - -
    -
    -

    Client

    -
    -
    -
    diff --git a/src/components/StatesPlayground/Modal.astro b/src/components/StatesPlayground/Modal.astro new file mode 100644 index 0000000..9bbd873 --- /dev/null +++ b/src/components/StatesPlayground/Modal.astro @@ -0,0 +1,101 @@ + + + + + diff --git a/src/components/StatesPlayground/index.astro b/src/components/StatesPlayground/index.astro new file mode 100644 index 0000000..64bfbdd --- /dev/null +++ b/src/components/StatesPlayground/index.astro @@ -0,0 +1,108 @@ + + +
    + +
    +

    Client

    +
    +
    + +
    +

    Server

    +
    +
    + +
    +

    Menu

    + +
    + +
    +

    Server/Client

    +
    +
    + +
    +

    Client/Menu

    +
    +
    + +
    +

    Server/Client/Menu

    +
    +
    + +
    + + + diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index 73ab296..327246a 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -1,7 +1,9 @@ --- +// This file is auto-generated, do not edit it directly! +// See build/setup.ts for more information import Sidebar from "../components/Sidebar.astro"; -const { title, description, views, updated } = Astro.props; +const { title, description, image, views, updated } = Astro.props; --- @@ -20,7 +22,7 @@ const { title, description, views, updated } = Astro.props; - + diff --git a/src/pages/States_Playground.astro b/src/pages/States_Playground.astro index 7b6ebce..eabfcf9 100644 --- a/src/pages/States_Playground.astro +++ b/src/pages/States_Playground.astro @@ -1,14 +1,15 @@ --- import Layout from "@layouts/Layout.astro"; -import StatesPlayground from "@components/StatesPlayground.astro"; +import Modal from "../components/StatesPlayground/Modal.astro"; +import StatesPlayground from "../components/StatesPlayground/index.astro"; const title = "States Playground"; const description = "Interactive UI to play with / create state icons/images." -const views = "probably not very many"; -const updated = "rarely"; +const views = "Page Views: probably not very many"; +const updated = "Updated: rarely"; --- - +
    This page is provided by Gmodwiki and is not mirrored from the official Wiki
    @@ -22,9 +23,9 @@ const updated = "rarely"; -
    -

    This is a utility that provides a handy utility for viewing/generating logos/images of the Garry's Mod wiki States colors

    -
    +

    This is a utility that provides a handy utility for viewing/generating images of the Garry's Mod wiki States colors

    +

    It generates the State icons in the exact same way as the Garry's Mod wiki, and allows you to resize & download them to use however you like

    +

    (Read more about States on the States page)

    Playground @@ -34,8 +35,10 @@ const updated = "rarely";

    -
    +
    +

    Click on one of the icons to download it in the size/format that you prefer

    +
    diff --git a/src/pages/[...slug].astro b/src/pages/[...slug].astro index 168a383..52c8f18 100644 --- a/src/pages/[...slug].astro +++ b/src/pages/[...slug].astro @@ -36,16 +36,44 @@ try { json.html = "Failed to load page " + slug + "" + (e ? "

    " + e.toString() + "

    " : "") } -let title = json.title -let description = json.description -let content = json.html -let footer = json.footer +const images = { + server: "/states/server.png", + client: "/states/client.png", + menu: "/states/menu.png", + "server-client": "/states/server-client.png", + "client-menu": "/states/client-menu.png", + "server-client-menu": "/states/server-client-menu.png", + + "default": "/garry/822e60dc-c931-43e4-800f-cbe010b3d4cc.webp" +} + +const getOpenGraphImage = (tags: string[]) => { + const hasServer = tags.includes("realm-server") + const hasClient = tags.includes("realm-client") + const hasMenu = tags.includes("realm-menu") + + if (hasServer && hasClient && hasMenu) return images["server-client-menu"] + if (hasServer && hasClient) return images["server-client"] + if (hasClient && hasMenu) return images["client-menu"] + + if (hasServer) return images["server"] + if (hasClient) return images["client"] + if (hasMenu) return images["menu"] + + return images["default"] +} + +const tags = json.tags +const tagArray = tags ? tags.split(" ").map((tag: string) => tag.trim()) : [] +const ogImage = getOpenGraphImage(tagArray) + +const footer = json.footer const footerInfo = footer.split("
    ") let views = footerInfo[0] || "0 views" let updated = footerInfo[1] || "" --- - - + + From a4e243ae42bc8723e7a916c233b94986ac582c82 Mon Sep 17 00:00:00 2001 From: Sarah Sturgeon Date: Wed, 8 Oct 2025 14:35:37 -0700 Subject: [PATCH 07/14] Remove unused fragment --- build/fragments/[...slug].astro | 67 --------------------------------- 1 file changed, 67 deletions(-) delete mode 100644 build/fragments/[...slug].astro diff --git a/build/fragments/[...slug].astro b/build/fragments/[...slug].astro deleted file mode 100644 index 0238b9b..0000000 --- a/build/fragments/[...slug].astro +++ /dev/null @@ -1,67 +0,0 @@ ---- -import Layout from "@layouts/Layout.astro" - -const slug = Astro.params.slug || "index" -let json: any = { title: "Failed to load page", description: "Failed to load page", html: "", footer: "0 views
    " } -const fourohfour = ` -
    - -

    Not Found

    -

    This page is missing.

    -
    -` - -try { - // This slug endpoint shouldn't ever handle a .json file (unless it's not present) - // This happens if a link in a page isn't mirrored - if (slug.endsWith(".json")) { - json.title = "Page Not Found" - json.description = "Page Not Found" - json.html = fourohfour - return new Response(JSON.stringify(json), { status: 404 }) - } - - const resource = `${Astro.url.protocol}//${Astro.url.host}/content/${slug.toLowerCase()}.json` - const response = await fetch(resource) - if (response.status === 404) { - // Otherwise, we return a formatted 404 page. This happens if someone visits a missing page directly. - // TODO: Can we just not catch this case and let the 404 response handle it? - json.title = "Page Not Found" - json.description = "Page Not Found" - json.html = fourohfour - } else { - json = await response.json() - } -} catch (e) { - json.html = "Failed to load page " + slug + "" + (e ? "

    " + e.toString() + "

    " : "") -} - -const serverImage = "" -const clientImage = "" -const sharedImage = "" -const defaultImage = "/wiki/files/353/8d8c63b684d38b4.webp" - -const getOpenGraphImage = (tags: string[]) => { - const hasServer = tags.includes("realm-server") - const hasClient = tags.includes("realm-client") - - if (hasServer && hasClient) return sharedImage - if (hasServer) return serverImage - if (hasClient) return clientImage - - return defaultImage -} - -const tags = json.tags -const tagArray = tags ? tags.split(" ").map((tag: string) => tag.trim()) : [] -const ogImage = getOpenGraphImage(tagArray) - -const footer = json.footer -const footerInfo = footer.split("
    ") -let views = footerInfo[0] || "0 views" -let updated = footerInfo[1] || "" ---- - - - - From 9119627620337e9d1e287d4bb7a789d739daaf0f Mon Sep 17 00:00:00 2001 From: Sarah Sturgeon Date: Wed, 8 Oct 2025 14:35:47 -0700 Subject: [PATCH 08/14] Fix back button navigation issue --- build/fragments/script.js | 858 +++++++++++++++++++------------------- 1 file changed, 433 insertions(+), 425 deletions(-) diff --git a/build/fragments/script.js b/build/fragments/script.js index 1123772..86697fc 100644 --- a/build/fragments/script.js +++ b/build/fragments/script.js @@ -3,286 +3,284 @@ var Edit; var Preview; var Decorator; class Navigate { - static Init() { - this.pageContent = document.getElementById("pagecontent"); - this.pageTitle = document.getElementById("pagetitle"); - this.pageFooter = document.getElementById("pagefooter"); - this.pageTitle2 = document.getElementById("tabs_page_title"); - this.sideBar = document.getElementById("sidebar"); - this.liveButton = document.getElementById("live-button") - this.links = this.sideBar.getElementsByTagName("a"); - this.details = this.sideBar.getElementsByTagName("details"); + static Init() { + this.pageContent = document.getElementById("pagecontent"); + this.pageTitle = document.getElementById("pagetitle"); + this.pageFooter = document.getElementById("pagefooter"); + this.pageTitle2 = document.getElementById("tabs_page_title"); + this.sideBar = document.getElementById("sidebar"); + this.liveButton = document.getElementById("live-button"); + this.links = this.sideBar.getElementsByTagName("a"); + this.details = this.sideBar.getElementsByTagName("details"); + } + + static ToPage(address, push = true) { + if (this.pageContent == null) { + window.location.href = address; + return true; } - static ToPage(address, push = true) { - if (!address.startsWith("/")) - address = `/${address}`; - - if (this.pageContent == null) { - window.location.href = address; - return true; + address = address.replaceAll(window.location.origin, ""); + + if (!address.startsWith("/")) address = `/${address}`; + + if (address === "" || address === "/" || address === "//") + address = "/index"; + + var newData; + this.pageTitle2.innerText = "Loading.."; + this.pageContent.parentElement.classList.add("loading"); + + fetch(`/content${address.toLowerCase()}.json`, { method: "GET" }) + .then((r) => r.json()) + .then((json) => { + newData = json; + }) + .catch((e) => { + newData = { + html: + "Failed to load page " + + address + + "" + + (e ? "

    " + e.toString() + "

    " : ""), + title: "Failed to load page", + footer: "", + }; + + console.warn("Failed to fetch " + address); + }) + .then(() => { + if (push) { + history.pushState({}, "", address); } - address = address.replaceAll(window.location.origin, ""); - - if (address === "" || address === "/" || address === "//") - address = "/index"; - - var newData; - this.pageTitle2.innerText = "Loading.."; - this.pageContent.parentElement.classList.add("loading"); - - fetch(`/content${address.toLowerCase()}.json`, { method: 'GET' }) - .then(r => r.json()) - .then(json => { - newData = json; - }).catch((e) => { - newData = { html: "Failed to load page " + address + "" + (e ? "

    " + e.toString() + "

    " : ""), title: "Failed to load page", footer: "" }; - - console.warn("Failed to fetch " + address); - }).then(() => { - if (push) { - history.pushState({}, "", address); + requestAnimationFrame(() => { + window.scrollTo(0, 0); + this.UpdatePage(newData); + this.pageContent.parentElement.classList.remove("loading"); + + requestAnimationFrame(() => { + this.UpdateSidebar(); + if (window.innerWidth <= 780) { + var e = document.getElementById("sidebar"); + e.classList.remove("visible"); } - - requestAnimationFrame(() => { - window.scrollTo(0, 0); - this.UpdatePage(newData); - this.pageContent.parentElement.classList.remove("loading"); - - requestAnimationFrame(() => { - this.UpdateSidebar(); - if (window.innerWidth <= 780) { - var e = document.getElementById("sidebar"); - e.classList.remove("visible"); - } - }); - }) + }); }); + }); - return false; - } - - static UpdatePage(json) { - requestAnimationFrame(() => { - this.pageContent.innerHTML = json.html; - this.pageTitle.innerText = json.title; - this.pageFooter.innerHTML = json.footer; - this.pageTitle2.innerText = ""; - this.liveButton.href = `https://wiki.facepunch.com/gmod${window.location.pathname}` - this.liveButton.target = "_blank" - - requestAnimationFrame(() => { - var a = document.createElement("a"); - a.classList.add("parent"); - a.text = "Home"; - a.href = "/"; - this.pageTitle2.appendChild(a); - this.pageTitle2.append("/"); - var a2 = document.createElement("a"); - a2.text = json.title; - a2.href = `/${json.address}`; - this.pageTitle2.appendChild(a2); - var title = json.title + " - Garry's Mod Wiki"; - title = title.replace("Garry's Mod Wiki - ", "") // Fix for the home page - document.title = title - }) - }) - } - - static UpdateSidebar() { - let links = this.links; - let address = location.href; - if (address.indexOf("#") > 0) - address = address.substring(0, address.indexOf("#")); - - for (var i = 0; i < links.length; i++) { - var a = links[i]; - - if (a.href == address) { - a.classList.add("active"); - var parent = a.parentElement; - while (parent != null) { - if (parent.tagName == "DETAILS") { - var d = parent; - d.open = true; - } - parent = parent.parentElement; - } - } else { - if (a.classList.contains("active")) { - a.classList.remove("active"); - } - } + return false; + } + static UpdatePage(json) { + requestAnimationFrame(() => { + this.pageContent.innerHTML = json.html; + this.pageTitle.innerText = json.title; + this.pageFooter.innerHTML = json.footer; + this.pageTitle2.innerText = ""; + this.liveButton.href = `https://wiki.facepunch.com/gmod${window.location.pathname}`; + this.liveButton.target = "_blank"; + + requestAnimationFrame(() => { + var a = document.createElement("a"); + a.classList.add("parent"); + a.text = "Home"; + a.href = "/"; + this.pageTitle2.appendChild(a); + this.pageTitle2.append("/"); + var a2 = document.createElement("a"); + a2.text = json.title; + a2.href = `/${json.address}`; + this.pageTitle2.appendChild(a2); + var title = json.title + " - Garry's Mod Wiki"; + title = title.replace("Garry's Mod Wiki - ", ""); // Fix for the home page + document.title = title; + }); + }); + } + + static UpdateSidebar() { + let links = this.links; + let address = location.href; + if (address.indexOf("#") > 0) + address = address.substring(0, address.indexOf("#")); + + for (var i = 0; i < links.length; i++) { + var a = links[i]; + + if (a.href == address) { + a.classList.add("active"); + var parent = a.parentElement; + while (parent != null) { + if (parent.tagName == "DETAILS") { + var d = parent; + d.open = true; + } + parent = parent.parentElement; } - var details = this.details; - for (var i = 0; i < details.length; i++) { - if (a.classList.contains("active")) { - a.classList.remove("active"); - } + } else { + if (a.classList.contains("active")) { + a.classList.remove("active"); } + } + } + var details = this.details; + for (var i = 0; i < details.length; i++) { + if (a.classList.contains("active")) { + a.classList.remove("active"); + } } + } - static OnNavigated(event) { - let address = document.location.href; - if (address.indexOf("#") > 0) - address = address.substring(0, address.indexOf("#")); + static OnNavigated(event) { + let address = document.location.href; + if (address.indexOf("#") > 0) + address = address.substring(0, address.indexOf("#")); - this.ToPage(address, false); - } + this.ToPage(address, false); + } - static Install() { - this.Init(); - window.onpopstate = e => this.OnNavigated(e); + static Install() { + this.Init(); + window.onpopstate = (e) => this.OnNavigated(e); - if (this.pageContent == null) return true; + if (this.pageContent == null) return true; - var thisHost = window.location.host; - this.sideBar.addEventListener("click", (e) => { - var a = e.target; + var thisHost = window.location.host; + this.sideBar.addEventListener("click", (e) => { + var a = e.target; - if (a.host != thisHost) - return; + if (a.host != thisHost) return; - let val = a.getAttribute("href"); - if (val == null || val == "") - return; + let val = a.getAttribute("href"); + if (val == null || val == "") return; - if (val.indexOf("#") >= 0 || val.indexOf("~") >= 0) - return; + if (val.indexOf("#") >= 0 || val.indexOf("~") >= 0) return; - if (!(e.ctrlKey || e.shiftKey || e.altKey)) { - Navigate.ToPage(val); - e.preventDefault(); - } - }); + if (!(e.ctrlKey || e.shiftKey || e.altKey)) { + Navigate.ToPage(val); + e.preventDefault(); + } + }); - this.pageContent.addEventListener("click", (e) => { - var a = e.target; + this.pageContent.addEventListener("click", (e) => { + var a = e.target; - if (a.host != thisHost) - return; + if (a.host != thisHost) return; - if (a.tagName !== "A") - return; + if (a.tagName !== "A") return; - let val = a.getAttribute("href"); - if (val == null || val == "") - return; + let val = a.getAttribute("href"); + if (val == null || val == "") return; - if (val.indexOf("#") >= 0 || val.indexOf("~") >= 0) - return; + if (val.indexOf("#") >= 0 || val.indexOf("~") >= 0) return; - if (!(e.ctrlKey || e.shiftKey || e.altKey)) { - Navigate.ToPage(val); - e.preventDefault(); - } - }); - } + if (!(e.ctrlKey || e.shiftKey || e.altKey)) { + Navigate.ToPage(val); + e.preventDefault(); + } + }); + } } Navigate.cache = {}; - class Parser { - constructor(rules) { - this.parseRE = null; - this.ruleSrc = []; - this.ruleMap = {}; - this.add(rules); - } - add(rules) { - for (var rule in rules) { - var s = rules[rule].source; - this.ruleSrc.push(s); - this.ruleMap[rule] = new RegExp('^(' + s + ')$', "i"); - } - this.parseRE = new RegExp(this.ruleSrc.join('|'), 'gmi'); + constructor(rules) { + this.parseRE = null; + this.ruleSrc = []; + this.ruleMap = {}; + this.add(rules); + } + add(rules) { + for (var rule in rules) { + var s = rules[rule].source; + this.ruleSrc.push(s); + this.ruleMap[rule] = new RegExp("^(" + s + ")$", "i"); } - ; - tokenize(input) { - return input.match(this.parseRE); + this.parseRE = new RegExp(this.ruleSrc.join("|"), "gmi"); + } + tokenize(input) { + return input.match(this.parseRE); + } + identify(token) { + for (var rule in this.ruleMap) { + if (this.ruleMap[rule].test(token)) { + return rule; + } } - ; - identify(token) { - for (var rule in this.ruleMap) { - if (this.ruleMap[rule].test(token)) { - return rule; - } - } - } - ; + } } -; - class TextareaDecorator { - constructor(textarea, display, parser) { - this.input = textarea; - this.output = display; - this.parser = parser; + constructor(textarea, display, parser) { + this.input = textarea; + this.output = display; + this.parser = parser; + } + color(input, output, parser) { + var oldTokens = output.childNodes; + var newTokens = parser.tokenize(input); + var firstDiff, lastDiffNew, lastDiffOld; + for ( + firstDiff = 0; + firstDiff < newTokens.length && firstDiff < oldTokens.length; + firstDiff++ + ) + if (newTokens[firstDiff] !== oldTokens[firstDiff].textContent) break; + while (newTokens.length < oldTokens.length) + output.removeChild(oldTokens[firstDiff]); + for ( + lastDiffNew = newTokens.length - 1, lastDiffOld = oldTokens.length - 1; + firstDiff < lastDiffOld; + lastDiffNew--, lastDiffOld-- + ) + if (newTokens[lastDiffNew] !== oldTokens[lastDiffOld].textContent) break; + for (; firstDiff <= lastDiffOld; firstDiff++) { + oldTokens[firstDiff].className = parser.identify(newTokens[firstDiff]); + oldTokens[firstDiff].textContent = oldTokens[firstDiff].innerText = + newTokens[firstDiff]; } - color(input, output, parser) { - var oldTokens = output.childNodes; - var newTokens = parser.tokenize(input); - var firstDiff, lastDiffNew, lastDiffOld; - for (firstDiff = 0; firstDiff < newTokens.length && firstDiff < oldTokens.length; firstDiff++) - if (newTokens[firstDiff] !== oldTokens[firstDiff].textContent) - break; - while (newTokens.length < oldTokens.length) - output.removeChild(oldTokens[firstDiff]); - for (lastDiffNew = newTokens.length - 1, lastDiffOld = oldTokens.length - 1; firstDiff < lastDiffOld; lastDiffNew--, lastDiffOld--) - if (newTokens[lastDiffNew] !== oldTokens[lastDiffOld].textContent) - break; - for (; firstDiff <= lastDiffOld; firstDiff++) { - oldTokens[firstDiff].className = parser.identify(newTokens[firstDiff]); - oldTokens[firstDiff].textContent = oldTokens[firstDiff].innerText = newTokens[firstDiff]; - } - for (var insertionPt = oldTokens[firstDiff] || null; firstDiff <= lastDiffNew; firstDiff++) { - var span = document.createElement("span"); - span.className = parser.identify(newTokens[firstDiff]); - span.textContent = span.innerText = newTokens[firstDiff]; - output.insertBefore(span, insertionPt); - } + for ( + var insertionPt = oldTokens[firstDiff] || null; + firstDiff <= lastDiffNew; + firstDiff++ + ) { + var span = document.createElement("span"); + span.className = parser.identify(newTokens[firstDiff]); + span.textContent = span.innerText = newTokens[firstDiff]; + output.insertBefore(span, insertionPt); } - ; - update() { - var input = textarea.value; - if (input) { - this.color(input, this.output, this.parser); - } - else { - this.output.innerHTML = ''; - } + } + update() { + var input = textarea.value; + if (input) { + this.color(input, this.output, this.parser); + } else { + this.output.innerHTML = ""; } + } } - - -window.ToggleClass = function(element, classname) { - var e = document.getElementById(element); - if (e.classList.contains(classname)) - e.classList.remove(classname); - else - e.classList.add(classname); -} - - -window.CopyCode = function(event) { - var code = event.target.closest("div.code").innerText; - navigator.clipboard.writeText(code).then(() => { - var btn = event.target.closest("copy"); - var icn = btn.querySelector(".mdi"); - icn.classList.replace("mdi-content-copy", "mdi-check"); - btn.classList.add("copied"); - clearTimeout(icn.copyTimeout); - icn.copyTimeout = setTimeout(function () { - icn.classList.replace("mdi-check", "mdi-content-copy"); - btn.classList.remove("copied"); - }, 5000); - }) - event.preventDefault() -} - +window.ToggleClass = function (element, classname) { + var e = document.getElementById(element); + if (e.classList.contains(classname)) e.classList.remove(classname); + else e.classList.add(classname); +}; + +window.CopyCode = function (event) { + var code = event.target.closest("div.code").innerText; + navigator.clipboard.writeText(code).then(() => { + var btn = event.target.closest("copy"); + var icn = btn.querySelector(".mdi"); + icn.classList.replace("mdi-content-copy", "mdi-check"); + btn.classList.add("copied"); + clearTimeout(icn.copyTimeout); + icn.copyTimeout = setTimeout(function () { + icn.classList.replace("mdi-check", "mdi-content-copy"); + btn.classList.remove("copied"); + }, 5000); + }); + event.preventDefault(); +}; var SearchInput; var SearchResults; @@ -291,219 +289,229 @@ var MaxResultCount = 200; var ResultCount = 0; var SearchDelay = null; function InitSearch() { - SearchInput = document.getElementById("search"); - SearchResults = document.getElementById("searchresults"); - SidebarContents = document.getElementById("contents"); - SearchInput.addEventListener("input", e => { - clearTimeout(SearchDelay); - SearchDelay = setTimeout(UpdateSearch, 10); - }); - SearchInput.addEventListener("keyup", e => { - if (e.keyCode == 13) { - window.location.href = "/websearch?query=" + SearchInput.value; - } - }); + SearchInput = document.getElementById("search"); + SearchResults = document.getElementById("searchresults"); + SidebarContents = document.getElementById("contents"); + SearchInput.addEventListener("input", (e) => { + clearTimeout(SearchDelay); + SearchDelay = setTimeout(UpdateSearch, 10); + }); + SearchInput.addEventListener("keyup", (e) => { + if (e.keyCode == 13) { + window.location.href = "/websearch?query=" + SearchInput.value; + } + }); } function UpdateSearch(limitResults = true) { - const limitedResultCount = 500 - - if (limitResults) - MaxResultCount = limitedResultCount; - else - MaxResultCount = 2000; - var child = SearchResults.lastElementChild; - while (child) { - SearchResults.removeChild(child); - child = SearchResults.lastElementChild; - } - var string = SearchInput.value; - var tags = []; - var searchTerms = string.split(" "); - searchTerms.forEach(str => { - if (str.startsWith("is:") || str.startsWith("not:")) { - tags.push(str); - string = string.replace(str, ""); - } - }); - if (string.length < 2) { - SidebarContents.classList.remove("searching"); - SearchResults.classList.remove("searching"); - var sidebar = document.getElementById("sidebar"); - var active = sidebar.getElementsByClassName("active"); - if (active.length == 1) { - active[0].scrollIntoView({ block: "center" }); - } - return; - } - SidebarContents.classList.add("searching"); - SearchResults.classList.add("searching"); - ResultCount = 0; - Titles = []; - TitleCount = 0; - SectionHeader = null; - if (string.toUpperCase() == string && string.indexOf("_") != -1) { - string = string.substring(0, string.indexOf("_")); - } - var parts = string.split(' '); - var q = ""; - for (var i in parts) { - if (parts[i].length < 1) - continue; - var t = parts[i].replace(/([^a-zA-Z0-9_-])/g, "\\$1"); - q += ".*(" + t + ")"; + const limitedResultCount = 500; + + if (limitResults) MaxResultCount = limitedResultCount; + else MaxResultCount = 2000; + var child = SearchResults.lastElementChild; + while (child) { + SearchResults.removeChild(child); + child = SearchResults.lastElementChild; + } + var string = SearchInput.value; + var tags = []; + var searchTerms = string.split(" "); + searchTerms.forEach((str) => { + if (str.startsWith("is:") || str.startsWith("not:")) { + tags.push(str); + string = string.replace(str, ""); } - q += ".*"; - var regex = new RegExp(q, 'gi'); - SearchRecursive(regex, SidebarContents, tags); - if (limitResults && ResultCount > MaxResultCount) { - var moreresults = document.createElement('a'); - moreresults.href = "#"; - moreresults.classList.add('noresults'); - moreresults.innerHTML = (ResultCount - limitedResultCount) + ' more results - show more?'; - moreresults.onclick = (e) => { UpdateSearch(false); return false; }; - SearchResults.append(moreresults); - } - if (SearchResults.children.length == 0) { - var noresults = document.createElement('span'); - noresults.classList.add('noresults'); - noresults.innerHTML = 'No results.
    Press Enter to search the wiki.'; - SearchResults.appendChild(noresults); + }); + if (string.length < 2) { + SidebarContents.classList.remove("searching"); + SearchResults.classList.remove("searching"); + var sidebar = document.getElementById("sidebar"); + var active = sidebar.getElementsByClassName("active"); + if (active.length == 1) { + active[0].scrollIntoView({ block: "center" }); } + return; + } + SidebarContents.classList.add("searching"); + SearchResults.classList.add("searching"); + ResultCount = 0; + Titles = []; + TitleCount = 0; + SectionHeader = null; + if (string.toUpperCase() == string && string.indexOf("_") != -1) { + string = string.substring(0, string.indexOf("_")); + } + var parts = string.split(" "); + var q = ""; + for (var i in parts) { + if (parts[i].length < 1) continue; + var t = parts[i].replace(/([^a-zA-Z0-9_-])/g, "\\$1"); + q += ".*(" + t + ")"; + } + q += ".*"; + var regex = new RegExp(q, "gi"); + SearchRecursive(regex, SidebarContents, tags); + if (limitResults && ResultCount > MaxResultCount) { + var moreresults = document.createElement("a"); + moreresults.href = "#"; + moreresults.classList.add("noresults"); + moreresults.innerHTML = + ResultCount - limitedResultCount + " more results - show more?"; + moreresults.onclick = (e) => { + UpdateSearch(false); + return false; + }; + SearchResults.append(moreresults); + } + if (SearchResults.children.length == 0) { + var noresults = document.createElement("span"); + noresults.classList.add("noresults"); + noresults.innerHTML = "No results.
    Press Enter to search the wiki."; + SearchResults.appendChild(noresults); + } } var SectionHeader; var TitleCount = 0; var Titles = []; function SearchRecursive(str, el, tags) { - var title = null; - if (el.children.length > 0 && el.children[0].tagName == "SUMMARY") { - title = el.children[0].children[0]; - Titles.push(title); - TitleCount++; - } - var children = el.children; - for (var i = 0; i < children.length; i++) { - var child = children[i]; - if (child.className == "sectionheader") - SectionHeader = child; - if (child.tagName == "A") { - if (child.parentElement.tagName == "SUMMARY") - continue; - var txt = child.getAttribute("search"); - if (txt == null) - continue; - var found = txt.match(str); - if (found && tags.length > 0) { - var niceTags = { "server": "rs", "sv": "rs", - "client": "rc", "cl": "rc", - "menu": "rm", "mn": "rm", - "deprecated": "depr", "internal": "intrn", - }; - tags.forEach(str => { - var classSearch = str.split(":").slice(1)[0]; - if (niceTags[classSearch]) - classSearch = niceTags[classSearch]; - if (str.startsWith("is:") && classSearch != null && !child.classList.contains(classSearch)) { - found = null; - } - if (str.startsWith("not:") && classSearch != null && child.classList.contains(classSearch)) { - found = null; - } - }); - } - if (found) { - if (ResultCount < MaxResultCount) { - AddSearchTitle(); - var copy = child.cloneNode(true); - copy.onclick = e => Navigate.ToPage(copy.href, true); - copy.classList.add("node" + TitleCount); - SearchResults.appendChild(copy); - } - ResultCount++; - } + var title = null; + if (el.children.length > 0 && el.children[0].tagName == "SUMMARY") { + title = el.children[0].children[0]; + Titles.push(title); + TitleCount++; + } + var children = el.children; + for (var i = 0; i < children.length; i++) { + var child = children[i]; + if (child.className == "sectionheader") SectionHeader = child; + if (child.tagName == "A") { + if (child.parentElement.tagName == "SUMMARY") continue; + var txt = child.getAttribute("search"); + if (txt == null) continue; + var found = txt.match(str); + if (found && tags.length > 0) { + var niceTags = { + server: "rs", + sv: "rs", + client: "rc", + cl: "rc", + menu: "rm", + mn: "rm", + deprecated: "depr", + internal: "intrn", + }; + tags.forEach((str) => { + var classSearch = str.split(":").slice(1)[0]; + if (niceTags[classSearch]) classSearch = niceTags[classSearch]; + if ( + str.startsWith("is:") && + classSearch != null && + !child.classList.contains(classSearch) + ) { + found = null; + } + if ( + str.startsWith("not:") && + classSearch != null && + child.classList.contains(classSearch) + ) { + found = null; + } + }); + } + if (found) { + if (ResultCount < MaxResultCount) { + AddSearchTitle(); + var copy = child.cloneNode(true); + copy.onclick = (e) => Navigate.ToPage(copy.href, true); + copy.classList.add("node" + TitleCount); + SearchResults.appendChild(copy); } - SearchRecursive(str, child, tags); + ResultCount++; + } } - if (title != null) { - TitleCount--; - if (Titles[Titles.length - 1] == title) { - Titles.pop(); - } + SearchRecursive(str, child, tags); + } + if (title != null) { + TitleCount--; + if (Titles[Titles.length - 1] == title) { + Titles.pop(); } + } } function AddSearchTitle() { - if (Titles.length == 0) - return; - if (SectionHeader != null) { - var copy = SectionHeader.cloneNode(true); - SearchResults.appendChild(copy); - SectionHeader = null; - } - for (var i = 0; i < Titles.length; i++) { - var cpy = Titles[i].cloneNode(true); - if (cpy.href) { - cpy.onclick = e => Navigate.ToPage(cpy.href, true); - } - cpy.className = "node" + ((TitleCount - Titles.length) + i); - SearchResults.appendChild(cpy); + if (Titles.length == 0) return; + if (SectionHeader != null) { + var copy = SectionHeader.cloneNode(true); + SearchResults.appendChild(copy); + SectionHeader = null; + } + for (var i = 0; i < Titles.length; i++) { + var cpy = Titles[i].cloneNode(true); + if (cpy.href) { + cpy.onclick = (e) => Navigate.ToPage(cpy.href, true); } - Titles = []; + cpy.className = "node" + (TitleCount - Titles.length + i); + SearchResults.appendChild(cpy); + } + Titles = []; } -window.addEventListener('keydown', (e) => { - if (e.keyCode != 191) - return; - const tagName = document.activeElement.tagName; - if (tagName == "INPUT") - return; - if (tagName == "TEXTAREA") - return; - SearchInput.focus(); - SearchInput.value = ""; - e.preventDefault(); +window.addEventListener("keydown", (e) => { + if (e.keyCode != 191) return; + const tagName = document.activeElement.tagName; + if (tagName == "INPUT") return; + if (tagName == "TEXTAREA") return; + SearchInput.focus(); + SearchInput.value = ""; + e.preventDefault(); }); function getTimeSince(utcTimestamp) { - const now = new Date().getTime(); - const diffInMilliseconds = now - utcTimestamp; - const diffInHours = Math.floor(diffInMilliseconds / (1000 * 60 * 60)); - const days = Math.floor(diffInHours / 24); - const hours = Math.floor(diffInHours % 24); - - let result = ""; - if (days > 0) result += `${days} day${days > 1 ? 's' : ''}`; - if (hours > 0) result += `${result ? ', ' : ''}${hours} hour${hours > 1 ? 's' : ''}`; - return (result || "<1 hour") + " ago"; + const now = new Date().getTime(); + const diffInMilliseconds = now - utcTimestamp; + const diffInHours = Math.floor(diffInMilliseconds / (1000 * 60 * 60)); + const days = Math.floor(diffInHours / 24); + const hours = Math.floor(diffInHours % 24); + + let result = ""; + if (days > 0) result += `${days} day${days > 1 ? "s" : ""}`; + if (hours > 0) + result += `${result ? ", " : ""}${hours} hour${hours > 1 ? "s" : ""}`; + return (result || "<1 hour") + " ago"; } function setupLastParsed() { const lastParseElement = document.getElementById("last-parse"); - fetch("/last_build.txt", { method: "GET" }).then(r => { - r.text().then(t => lastParseElement.textContent = getTimeSince(parseInt(t, 10))); - }).catch(e => { - console.warn("Failed to fetch last parsed date", e); - lastParseElement.textContent = "Unknown"; - }) + fetch("/last_build.txt", { method: "GET" }) + .then((r) => { + r.text().then( + (t) => (lastParseElement.textContent = getTimeSince(parseInt(t, 10))), + ); + }) + .catch((e) => { + console.warn("Failed to fetch last parsed date", e); + lastParseElement.textContent = "Unknown"; + }); } window.addEventListener("load", () => { - requestAnimationFrame(() => { - var sidebar = document.getElementById( "sidebar" ) - var active = sidebar.getElementsByClassName( "active" ) - if ( active.length == 1 ) - { - active[0].scrollIntoView( { smooth: true, block: "center" } ) - } + requestAnimationFrame(() => { + var sidebar = document.getElementById("sidebar"); + var active = sidebar.getElementsByClassName("active"); + if (active.length == 1) { + active[0].scrollIntoView({ smooth: true, block: "center" }); + } - var liveButton = document.getElementById("live-button") - liveButton.href = `https://wiki.facepunch.com/gmod${window.location.pathname}` - liveButton.target = "_blank" + var liveButton = document.getElementById("live-button"); + liveButton.href = `https://wiki.facepunch.com/gmod${window.location.pathname}`; + liveButton.target = "_blank"; - requestAnimationFrame(() => { - InitSearch() - Navigate.Install() - setupLastParsed() - }); + requestAnimationFrame(() => { + InitSearch(); + Navigate.Install(); + setupLastParsed(); }); -}) + }); +}); From bc1fb01b2bdb585fa5236e153d14a7d8b65af2ff Mon Sep 17 00:00:00 2001 From: Sarah Sturgeon Date: Wed, 8 Oct 2025 14:35:55 -0700 Subject: [PATCH 09/14] Improve the deploy command --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fce3298..1b37b13 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "astrobuild": "astro build", "preview": "astro preview", "pages:dev": "wrangler pages dev ./dist", - "pages:deploy": "BUILD_ENV=production astro build && wrangler pages deploy ./dist", + "pages:deploy": "BUILD_ENV=production astro build && wrangler pages deploy --project-name=gmodwiki ./dist", "get_used_mdis": "rg -Io \"mdi-[\\w-]+\" ./build/cache/ | sort | uniq", "upload_caches": "/bin/bash ./build/modules/upload_caches.sh", "download_caches": "/bin/bash ./build/modules/download_caches.sh", From cecee4ba5c39ade46917621b869623f2e25e7e47 Mon Sep 17 00:00:00 2001 From: Sarah Sturgeon Date: Wed, 8 Oct 2025 14:54:18 -0700 Subject: [PATCH 10/14] Resize state images --- build/assets/states/client-menu.png | Bin 4388 -> 874 bytes build/assets/states/client.png | Bin 3923 -> 777 bytes build/assets/states/menu.png | Bin 3890 -> 786 bytes build/assets/states/server-client-menu.png | Bin 4658 -> 871 bytes build/assets/states/server-client.png | Bin 4343 -> 864 bytes build/assets/states/server.png | Bin 3825 -> 762 bytes 6 files changed, 0 insertions(+), 0 deletions(-) diff --git a/build/assets/states/client-menu.png b/build/assets/states/client-menu.png index 922998d31689c0cd2ba4d2ec719357e656d42ddb..762b0de24c7f5ebff8b92fa9d3e8a517a93047ae 100644 GIT binary patch literal 874 zcmV-w1C{)VP)Gm z{_U=ey9b-~amG6Fvlah#nDw*x{Wt8t1dM&ianPA3J*ywnm#f9Zw&jmr?M#c}N#9@` z2C;?5VqsRhr?JrcId|q}B~S@uQDbVF`$va8M@BIFR;v{d_g}^fJEs2Ha&I~~oh*)B z0*PztRmRy}&HxZYTn9-wj#GR@ADFpQ5t0b|2RY*p3JtIW8}=L}$xa@G!%#F3nJC2F z7?HT3fW zwT@U{?1uqa2&=d7WVG7w%ZdRGx1R+f*9=HJtghmRYBrB0#U!HxGk!>DO+B3FVrGcV z2Y`I{4E|{L!a~?L0SvCx3dy&V@M$&<_`C5EE9GfaT-Gkaq^xahd6~10&xN(3}QD%D8$YO zfN+RiBV!B14vcLO(HL7HA~Ci@L}46(h`=}op~g50p~N^2p~6T3p}TA;JEhE!wc8kd@Ifv&+N(;Dj_X=a8omP{L2#3re(&LAe3@w#6t z)R~{Oc_j?wTn7s;dKNL`PSUJ`f|bF1#TPxh3`j!rUE~}d3Cc|#wittTpVI@8(B@m+ zu=*A=?kCSGDBwEg9gc=k^9E#Ys<~59vaj)fenGjZ!>(pQ>FNlseEbXYzfCa!eyJ^( zdR(|VrCT_{z6&@|53zxd`VtbwTfrB9L+xi%lg07M?hcv{HScvnHoraM5K(ffFwa5B zUT!;`{`7CairbuwsTT5|bUE8)J^%m!07*qoM6N<$g6!dv A+W-In literal 4388 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 BWNQEb literal 3923 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 diff --git a/build/assets/states/menu.png b/build/assets/states/menu.png index c40176fc11cdf3937df8edbbfa2e0c5a9fed9339..929978b1b0ca3b91343310ce8ebfe3485026e2ba 100644 GIT binary patch literal 786 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2o;fFx~WYaSX|DejDYREgUGa_x)6r zTt~+xA})nbwVLv}#I8F{K6zYafx?aefh`YKNwdc8T={NIhuE$a+~SK2JeSRE`^T_S zo;z^Gj)H|6POO?8TUHi6s}i~u;Cp$-Nt;J4Gh-+1e15n1T&?lLyV@&`E*0Hs8^hVl zxoC$%-=lAdN*mXQ#-#86EPh1axKlOh_@WJa6I9nsoog`h{&H*}rAM;4DauMAlI56`S{HSn+dExL1e#jlgM z!alGmb#FW}%oS15{UPwmFYWDGu6QjK%gmRptyw9(9A@A0BK!8RcP{+)U{{U#)2GDNUF%TcsTIA)^P`{5C@o4m?Q=6zb+Qjvy@$di}4=gzMnHW?&+R?*zu3ie|7UdwL@PvzVeXlbE)xdsfc}` z&l&gg-+m^g|Fhd0l^d12L^!;>CvI4m$m|~Dy%w zL;FUb?XHU(FWEm-sNTPby(=iRI=%>())X z9RKiepzG_Ejj2_=+oE-!TTNUtvuBfT{DakwrmL%ZPp#gzVB(~>ir?&l`=`!uE~&Gd zT)#on|L_bpuQxi&RMIYlzxf{J?Ehg#UBZDh8D$y%?T>P;^A}0ZJnZ7P)wAl*q&Ln^gS%U)!C+0=2x9OOt*`m0jv^-?^hXv8uDM_vE6u6Q;~RmUAu$Q8ayX zV@i@@Kl2L?Fa1@kzAUJcZ1(h)NUv(nY;e8lzHFx1^k~fw(yKQK$EaVlvjV1d22WQ% Jmvv4FO#oj+Y2W|= literal 3890 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 F;y;QD;2Zz| diff --git a/build/assets/states/server-client-menu.png b/build/assets/states/server-client-menu.png index bca8eb523d97440a12db53396926c73ca4151de3..17a13d1e4706c66a89acf502a42bfa8efcd369f5 100644 GIT binary patch literal 871 zcmV-t1DO1YP)6k^xPLqU*&Cocwd>QdcOq82*T!NA>v zOM--dKxB1@0wXY2#R#l}5aq7p&V2jMkjv`+7~P%sc4lCiWoO>J?`OVm-do;01e$V_sW3XSTQNQum`f?GQKp4V(0BN^ z1(}bj5BSS)rHE=^IPQm>mD?618B^DIr#c0Z+{{vXBec5SI5GfdhcbFVk7rF0h6bTWIAy`6w(9>K|t!Ri~%(@97 z83@rG0A5UV)2L<*j?y*}gQf*B1zyKwAzsI9fp{5{2k|PVAjFH9q7biPN~&d%qPx<6>}C6nhdp)uDs{p{2sxqDX6zKhP5wSAhMfSrOk|c+8a&b z^oz}#p0`Y+Gtu40Cp`ngI+teV53hR|XpW@Ea^oww-h{`N6W}wVNO;a=m^Y~CH=8bN zU$@6qa^Xy9qURDJ-QhxQqCqxY^9LWV3OXK6C5pwdqZL41ueurxUFia(Gkl?wyypdI x&NsdPm^249%l*)29unSyj+4z-|E}2G$ba5uZNr_qYp?(S002ovPDHLkV1gr@ll}kz literal 4658 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 Date: Wed, 8 Oct 2025 16:16:15 -0700 Subject: [PATCH 11/14] Improvements to meta/link tags, add searchmanifest, assorted fixes --- build/assets/~searchmanifest | 15 +++++++++++++++ build/fragments/layoutScript.ts | 4 ++++ build/setup.ts | 32 ++++++++++++++++++++++++++++---- src/layouts/Layout.astro | 11 ++++++++--- src/pages/[...slug].astro | 7 ++++--- 5 files changed, 59 insertions(+), 10 deletions(-) create mode 100644 build/assets/~searchmanifest create mode 100644 build/fragments/layoutScript.ts diff --git a/build/assets/~searchmanifest b/build/assets/~searchmanifest new file mode 100644 index 0000000..79edfce --- /dev/null +++ b/build/assets/~searchmanifest @@ -0,0 +1,15 @@ + + + + GMod Wiki Mirror + A reliable and fast Mirror of the official Garry's Mod Lua Wiki, with delightful improvements aimed at developers + UTF-8 + wiki games game gmod garrys mod glua lua api + + https://gmodwiki.com/garry/822e60dc-c931-43e4-800f-cbe010b3d4cc.png + https://gmodwiki.com/garry/822e60dc-c931-43e4-800f-cbe010b3d4cc.png + + + + + diff --git a/build/fragments/layoutScript.ts b/build/fragments/layoutScript.ts new file mode 100644 index 0000000..e2294c4 --- /dev/null +++ b/build/fragments/layoutScript.ts @@ -0,0 +1,4 @@ +const logo = "/garry/822e60dc-c931-43e4-800f-cbe010b3d4cc.webp"; + +const ogLogo = `${Astro.url.protocol}//${Astro.url.host}${logo}`; +const fullUrl = `${Astro.url.protocol}//${Astro.url.host}${Astro.url.pathname}`; diff --git a/build/setup.ts b/build/setup.ts index 4b31967..142e736 100644 --- a/build/setup.ts +++ b/build/setup.ts @@ -51,8 +51,18 @@ async function setupLayout($: cheerio.CheerioAPI) { layout = layout.replace(/"{title}"/g, "{title}"); // When we insert this code from js it wraps our frontmatter variables in quotes so we have to unwrap them again layout = layout.replace(/"{description}"/g, "{description}"); layout = layout.replace(/"{image}"/g, "{image}"); + layout = layout.replace(/"{ogLogo}"/g, "{ogLogo}"); + layout = layout.replace(/"{fullUrl}"/g, "{fullUrl}"); layout = layout.replace(/(href=|src=)".*?"/g, (m) => m.replace(/\\+/g, "/")); // For some reason, URLs are being parsed incorrectly, this should fix that. - await fs.writeFile("src/layouts/Layout.astro", makeLayoutHeader(layout)); + + const layoutHeadScript = await fs.readFile( + "build/fragments/layoutScript.ts", + "utf-8", + ); + await fs.writeFile( + "src/layouts/Layout.astro", + makeLayoutHeader(layoutHeadScript, layout), + ); } async function setupFolders() { @@ -69,11 +79,17 @@ async function setupAssets() { } function setupPageVariables($: cheerio.CheerioAPI) { - // We have to correct these in a second pass + // We have to correct these variables in a second pass $("title").html("{title}"); $("meta[name='og:title']").attr("content", "{title}"); $("meta[name='og:description']").attr("content", "{description}"); - $("meta[name='og:image']").attr("content", "{image}"); + + const ogImageTag = $("meta[name='og:image']"); + ogImageTag.attr("content", "{image}"); + + // Add new meta tags + $(``).insertAfter(ogImageTag); + $(``).insertAfter(ogImageTag); // Remove the View/Edit/History links - we put our own stuff there $("ul[id='pagelinks']").html(""); @@ -92,6 +108,13 @@ function setupBrowserHints($: cheerio.CheerioAPI) { $(``).insertAfter( insertAfter, ); + + // Update some link tags + const searchLink = $(`link[rel='search']`); + searchLink.attr("title", "GMod Wiki Mirror"); + + const iconLink = $(`link[rel='icon']`); + iconLink.attr("type", "image/webp"); } function setupScriptTags($: cheerio.CheerioAPI) { @@ -342,12 +365,13 @@ async function processCss(contentHandler: StaticContentHandler) { await fs.writeFile(path, newContent); } -const makeLayoutHeader = (content: string) => ` +const makeLayoutHeader = (headScript: string, content: string) => ` --- // This file is auto-generated, do not edit it directly! // See build/setup.ts for more information import Sidebar from "../components/Sidebar.astro"; const { title, description, image, views, updated } = Astro.props; +${headScript} --- ${content} `; diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index 327246a..d1d7f84 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -4,15 +4,20 @@ // See build/setup.ts for more information import Sidebar from "../components/Sidebar.astro"; const { title, description, image, views, updated } = Astro.props; +const logo = "/garry/822e60dc-c931-43e4-800f-cbe010b3d4cc.webp"; + +const ogLogo = `${Astro.url.protocol}//${Astro.url.host}${logo}`; +const fullUrl = `${Astro.url.protocol}//${Astro.url.host}${Astro.url.pathname}`; + --- {title} - + - + @@ -22,7 +27,7 @@ const { title, description, image, views, updated } = Astro.props; - + diff --git a/src/pages/[...slug].astro b/src/pages/[...slug].astro index 52c8f18..9b73dfe 100644 --- a/src/pages/[...slug].astro +++ b/src/pages/[...slug].astro @@ -67,13 +67,14 @@ const getOpenGraphImage = (tags: string[]) => { const tags = json.tags const tagArray = tags ? tags.split(" ").map((tag: string) => tag.trim()) : [] const ogImage = getOpenGraphImage(tagArray) +const ogImageUrl = `${Astro.url.protocol}//${Astro.url.host}${ogImage}` const footer = json.footer const footerInfo = footer.split("
    ") -let views = footerInfo[0] || "0 views" -let updated = footerInfo[1] || "" +const views = footerInfo[0] || "0 views" +const updated = footerInfo[1] || "" --- - + From e460bb13bf68ead215fef579e9624e94d0ff8914 Mon Sep 17 00:00:00 2001 From: Sarah Sturgeon Date: Wed, 8 Oct 2025 16:25:59 -0700 Subject: [PATCH 12/14] Shrink state assets --- build/assets/states/client-menu.png | Bin 874 -> 534 bytes build/assets/states/client.png | Bin 777 -> 449 bytes build/assets/states/menu.png | Bin 786 -> 449 bytes build/assets/states/server-client-menu.png | Bin 871 -> 536 bytes build/assets/states/server-client.png | Bin 864 -> 512 bytes build/assets/states/server.png | Bin 762 -> 437 bytes 6 files changed, 0 insertions(+), 0 deletions(-) diff --git a/build/assets/states/client-menu.png b/build/assets/states/client-menu.png index 762b0de24c7f5ebff8b92fa9d3e8a517a93047ae..6f50341af1fd4fbe89a6251ca597ce850bd63503 100644 GIT binary patch literal 534 zcmV+x0_pvUP)<+@8(SO?CDpi^<`{?srZZrUUTZkh+C{ zvyu8U^lpH*eNarc7jWTMRBRH2reDAi+cjw!99bma9i7= z_1^V=M752D4<1hje9mdzZi-vwR>9LXk3LofMdrTIlGhWO0uq?l+NdJ zb-wQxDQF`$M?{N(P`Gm z{_U=ey9b-~amG6Fvlah#nDw*x{Wt8t1dM&ianPA3J*ywnm#f9Zw&jmr?M#c}N#9@` z2C;?5VqsRhr?JrcId|q}B~S@uQDbVF`$va8M@BIFR;v{d_g}^fJEs2Ha&I~~oh*)B z0*PztRmRy}&HxZYTn9-wj#GR@ADFpQ5t0b|2RY*p3JtIW8}=L}$xa@G!%#F3nJC2F z7?HT3fW zwT@U{?1uqa2&=d7WVG7w%ZdRGx1R+f*9=HJtghmRYBrB0#U!HxGk!>DO+B3FVrGcV z2Y`I{4E|{L!a~?L0SvCx3dy&V@M$&<_`C5EE9GfaT-Gkaq^xahd6~10&xN(3}QD%D8$YO zfN+RiBV!B14vcLO(HL7HA~Ci@L}46(h`=}op~g50p~N^2p~6T3p}TA;JEhE!wc8kd@Ifv&+N(;Dj_X=a8omP{L2#3re(&LAe3@w#6t z)R~{Oc_j?wTn7s;dKNL`PSUJ`f|bF1#TPxh3`j!rUE~}d3Cc|#wittTpVI@8(B@m+ zu=*A=?kCSGDBwEg9gc=k^9E#Ys<~59vaj)fenGjZ!>(pQ>FNlseEbXYzfCa!eyJ^( zdR(|VrCT_{z6&@|53zxd`VtbwTfrB9L+xi%lg07M?hcv{HScvnHoraM5K(ffFwa5B zUT!;`{`7CairbuwsTT5|bUE8)J^%m!07*qoM6N<$g6!dv A+W-In diff --git a/build/assets/states/client.png b/build/assets/states/client.png index ef2b7d9063f2fbdb7577e63e56991687489885d1..48c1721818eefdd11a9356990aeb8b3f4210af9e 100644 GIT binary patch literal 449 zcmV;y0Y3hTP)-3I$z6Q$dRVLqP`@p{))g zf`S&oR9ntVMF|BVeVAm)+g{$?_uYLj@V*1Jtmi{YRy*}6CX5qdM2-hqV|?x(i1-S` zXUWgnQQtIGy?O9%O13d0WLp6B`vmtD#!OFA#A@1d4t^4v#C$@DG8=m!Ec!xH3}WJ3 z3eFNHsR3Rm?KWfNMcP?KytdLr`u(A-Gl#oVBh{$WjYynm3qdhhx~_MDGbj~|4Uu?F z5l1Oa$Tx-9JeP|eQ$kQoVxkL|_(h0&6fxA&m>y9sm{LHvOQfzvLhQB~6Nh%$vDC5D zfhiFGT!Bg33LKr(Q9O(C9KND#o0kL{4NYU$Tz(sYh^){3u{r2yd@a7KJB+Ty1ia}T z$TWR*#nu-XS}qJ?5qdtAb@IQHM9DUHWP(@@l3XT=-L&<-(sUqRB6oxVur1$u|FeKU rM;I?jr6{Byy2XqM0*2)*kfH4h&(okTyV2J000000NkvXXu0mjf=UTg} literal 777 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2o;fFkSF;aSX|Dej9Z@TR2c)-c6I6 zcbgVXQR+}tI~dHeS48x@ljxOhmB8u%ft-WE`dn47mR7A+iu$miUF)U-httG=jE~kg zYlPUmI2I8o;v)DmPiXVwl&xE(F3&h?_ek&k+(~!M@1HTh|HgWcWQ*A964`53w!Z`z z-!dLD$&Y8}cpZJS^vk>ly0`bUFR@ga6PR@^=Z`^66sPd)y*1$tb=_Z#eG*t0lVw@2 zEi^nHz<9vh_WqiWX)RJ6XT%-WPbiyI+i%zyDtqj~ddr=wd|X6dKXPDO^Yj6)%b7h@ zOal4^Y_nE9%`bVoD6qD7Y0=Y@%UrtJteh6a%y! zkhDd*aqH{Jp)0jKs%M_bxqD6ZQ=wE?ecvnnAO7{b8}8omXOO=Zveviu@Q0(SpDtZE z_o+Sh{{iOhKU}P*pSra?MrqkX-3=C14L&uUl!)ONxOBBVZPGIdU$$`P5kA-G#)RYN z`=;8Rw>RUk3TQd>srLQskZV!}og&<~1eNw^U0JM9pkguOMC8x-*jVTKGyAr2eNtze z_Q2C9eW#(mpyu74rP-!W742V%KE9eC64kN5SmJ!hyuWTL8LDj_?!uD4ZzWYpxm)n$ z&WMf--_gDF=Uiv|4?9+Vp4u$;)bHJwqCNZ1&E9kFxLJ7MN^{ThUk~r-^QaYucUl}5 zV%IwV|42+>!Lk|sZ`FI|q%C&b-}JHLv&X?(M~?YC4Kw~-Ka0UA|HFnzm)pl@Z?|rU zo}i(-=1WJ8(;VhS%WdYD@MnE{`$SRBDSP8SW-CTX_FgY1Z(tH<@O1TaS?83{1OWE) BWNQEb diff --git a/build/assets/states/menu.png b/build/assets/states/menu.png index 929978b1b0ca3b91343310ce8ebfe3485026e2ba..e13feedb44e02ed92097133ae0dd936723d5e259 100644 GIT binary patch literal 449 zcmV;y0Y3hTP)1|V6vA>e!mUNC*l5S;PU8r)%b(Sd#rLd&x#lJiuTZCi!5tpU{O&H*}rAM;4DauMAlI56`S{HSn+dExL1e#jlgM z!alGmb#FW}%oS15{UPwmFYWDGu6QjK%gmRptyw9(9A@A0BK!8RcP{+)U{{U#)2GDNUF%TcsTIA)^P`{5C@o4m?Q=6zb+Qjvy@$di}4=gzMnHW?&+R?*zu3ie|7UdwL@PvzVeXlbE)xdsfc}` z&l&gg-+m^g|Fhd0l^d12L^!;>CvI4m$m|~Dy%w zL;FUb?XHU(FWEm-sNTPby(=iRI=%>())X z9RKiepzG_Ejj2_=+oE-!TTNUtvuBfT{DakwrmL%ZPp#gzVB(~>ir?&l`=`!uE~&Gd zT)#on|L_bpuQxi&RMIYlzxf{J?Ehg#UBZDh8D$y%?T>P;^A}0ZJnZ7P)wAl*q&Ln^gS%U)!C+0=2x9OOt*`m0jv^-?^hXv8uDM_vE6u6Q;~RmUAu$Q8ayX zV@i@@Kl2L?Fa1@kzAUJcZ1(h)NUv(nY;e8lzHFx1^k~fw(yKQK$EaVlvjV1d22WQ% Jmvv4FO#oj+Y2W|= diff --git a/build/assets/states/server-client-menu.png b/build/assets/states/server-client-menu.png index 17a13d1e4706c66a89acf502a42bfa8efcd369f5..cf043e667546102bb7454f26cf7bea37494b9264 100644 GIT binary patch literal 536 zcmV+z0_XjSP)9+Xu@K!R16(3_&3`0EZRtyl3H#9 zCJ_ciD81+FdyO{NQoVbt!-ljUkU&Y_QOL@ZH&S8 z9mky!VD_t6*n@c2i~c#(H}dpf}#u1T8$eKRnM0%;LkH^H_o0vd0WmNhtRi>Pk`Zx1~Iq2dLjEsbF9z6H1{Py{ib z@+Nt`7mT3gm}YVImhd{|Jt2T$Gq44j=kO}!ed2*S&B9IM_ZrLz%U_bq{(+&iLhGN$ z^0MR$SAsRwX}khEjaR`=;=f?0@IPTE@VcWi4(zEU+jHOGpb6MP$rT9 z!WHiK%TA!qo<9=Nd|#|kUBc)QC9U{X!WbZp@T>;-MKE2o{oq`*(HVj(s}|q(`r}Yl aw0#4~q}fN*683fg00006k^xPLqU*&Cocwd>QdcOq82*T!NA>v zOM--dKxB1@0wXY2#R#l}5aq7p&V2jMkjv`+7~P%sc4lCiWoO>J?`OVm-do;01e$V_sW3XSTQNQum`f?GQKp4V(0BN^ z1(}bj5BSS)rHE=^IPQm>mD?618B^DIr#c0Z+{{vXBec5SI5GfdhcbFVk7rF0h6bTWIAy`6w(9>K|t!Ri~%(@97 z83@rG0A5UV)2L<*j?y*}gQf*B1zyKwAzsI9fp{5{2k|PVAjFH9q7biPN~&d%qPx<6>}C6nhdp)uDs{p{2sxqDX6zKhP5wSAhMfSrOk|c+8a&b z^oz}#p0`Y+Gtu40Cp`ngI+teV53hR|XpW@Ea^oww-h{`N6W}wVNO;a=m^Y~CH=8bN zU$@6qa^Xy9qURDJ-QhxQqCqxY^9LWV3OXK6C5pwdqZL41ueurxUFia(Gkl?wyypdI x&NsdPm^249%l*)29unSyj+4z-|E}2G$ba5uZNr_qYp?(S002ovPDHLkV1gr@ll}kz diff --git a/build/assets/states/server-client.png b/build/assets/states/server-client.png index 9805043062371bbebc43bc1800e5005ae7ae7303..f9abc4c66e093ae630167f36f782fc94e968c8e3 100644 GIT binary patch literal 512 zcmV+b0{{JqP)!g z483bGj|^!Gw7Z}uK|qVGAZKwnVj=Gm-k-ZCSRHRT>M}logLs`G3t~R4Z}a!P+3B@8 zg>!EQi)sCm0A{-VUJl_|ETr`pjt=+wqd0&+Hemk1=9gmpQy6aCno3*>R*6f)s&GrN z3fwYm7q4tTcb*2gSRX5NT5w?4P0`naaSH4hn-39?fAgJYTXVX(QcE~Y#ygcP?DCfgH$ z(lQGTBz{j4`INqo2OF!_`_iimrB+$R$#P+KCRm_J-;Kf)Lr zix)m0RI6b^m;<6oK4;_5MmYp6Q?I=z0}*IDw0#2(8LNuW2POId0000Q_@8;WYy2x$vJZ}F%Mx{!3zT;w;i+T}1ikpV z$${|yLT@h}ZZi>x4ikVFBxsB%B*^cKI3y^H5=amjWe~qHN+Etu0LmeLjf^i4KQO*Q zRAYRFsKodVQH2Qvq5=~bL>dz)L=qD?L<*w?L;|A?#4AQCh!>1@kXkWXLTbTi3#k_4 zX@Sn$B2s0&D_UxD7wBqSGOer(nO0>n&XQ>@i`X*dRTrfc#$Cj&_OU{B>1A6N!-Obw zr0}3;hEwj6O{*r_CYZ1Mpl7!WnNEc-5aA;=spX@t!w{XdyBiaKpXw&fcbxK|d|EXT z9ZWmSzR$-kx8_yI#E8{l81@_fETSg0c+^E3jn1~%!pC)x|Lqn-q>C-F?Bl}a*|>!x z8SdeMddLmJ;@40n-~s^kwZ^lzl9lUppx3pDIYEoYWL{Ts3P zHYaB`OGHi+(p5g}6f32+KyO35D`;;l^R!s^l8{2D^hmTB3_8V)5A(1d;AeFm3U9qE q=NaeQ`vd2B2{t}!J@>op&YnMDiBcHx6PmIB0000W;?kp2;0~koaop=i~KZ3C4+2+wVC=xznL$SLri%W^wG&V|8RUhUu zO~C_guu@jzKu$2H!PPNDMsVm?%z4oH+puc2?nKz=m_-91!Yv;q3##UBis-rqhc-mS zw_w!VD`6PdX3+y)OUJKIa;f_D@Omg_dI&m}&a*8Me9uKVXtNN`Y}kd>h1ID!P+YFm ztZgUG&+1%$i^R`Rj#~$4EHjTIp&$t46n*HlIi!?#D=DNmi>@W&x_-&9!d$JK#v;Jg zEQBQjEO?ckAWlamv)+|iucRq1S!>U?&DAi0#D&5q40uOuFaPHO{(i#5RW7)!KAJX| fCmA%7)}!qUr3<2n7FPLb00000NkvXXu0mjf&ym3u literal 762 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2o;fFdg)CaSX|Dej9Z@Ti8*gF8|s# zvzr`pUXCLE^ORmJT~Q&nYC)XJ%3IA%3t0X4YP>k<{WZ+>Ruj8z$W0bUfvz9y9sBtf z1$=zq7}!!JcxK7kYd4>#t8A0HJmV~1;b9-Xn<>w0Kkxg#*Sx**@Rf`^Q@-At^=W~? zTjhm1%f1_5ZgWdpyGMK>|AzU>%Ob^Q8Xnv4@BZ_0){L0%sT;2>Z#nLZk(B5&DqI$-{%DK1;EF@Z3%%l(%IL2-vQBYP)1}O$ zeNEzDuXbJDt+sJN-veVQzMqdvJ6AYKW~xl~P1>HiOQ65y=a-Puk55;Kf0Yxx#KX07 zweCFAof>8>ODAO7Kiw#p@JGc+_jSnhy53nYvW3>Ky*x2Z{_xT-Vp7k}iz=;Jp#SKh zd!u?@!lY=iz3LZTI`(Y{zo7Bw3BUW3`pXwI zABk)fVVoW{jY(Sanx>Ft$uyq1N z)$E-+i6|w_X`OtYUfJm;CXE!IQ?1yZkRKoEKi7w63mD zO+)@m#JPhR3U=vAingX}j%iHa6@32J{XB-dm;TN>&aUv Date: Fri, 10 Oct 2025 03:53:59 -0700 Subject: [PATCH 13/14] Fix 7z and animated images --- build/modules/static.ts | 299 ++++++++++++++++++++++------------------ 1 file changed, 163 insertions(+), 136 deletions(-) diff --git a/build/modules/static.ts b/build/modules/static.ts index 52f8389..17e3ea5 100644 --- a/build/modules/static.ts +++ b/build/modules/static.ts @@ -1,179 +1,206 @@ // Finds, acquires, writes, and stubs any static content found in a given html file -import path from "path" -import sharp from "sharp" -import chalk from "chalk" -import * as cheerio from "cheerio" -import { promises as fs } from "fs" -import type ApiInterface from "./api_interface.js" +import path from "path"; +import sharp from "sharp"; +import chalk from "chalk"; +import * as cheerio from "cheerio"; +import isAnimated from "@frsource/is-animated"; +import { promises as fs } from "fs"; +import type ApiInterface from "./api_interface.js"; + +/** + * Finds and extracts static content (images, css, js, fonts) from HTML and CSS files, + * downloads them locally, potentially optimizes them, and rewrites the URLs to point to our hosted copies. + */ async function fileExists(path: string) { - try { - await fs.access(path) - return true - } catch { - return false - } + try { + await fs.access(path); + return true; + } catch { + return false; + } } const fileWhitelist = new Map([ - [".png", true], - [".jpg", true], - [".svg", true], - [".jpeg", true], - [".gif", true], - [".webp", true], - [".ico", true], - [".css", true], - [".js", true], - [".woff", true], - [".woff2", true], - [".ttf", true], - [".eot", true], - [".otf", true], -]) + [".png", true], + [".jpg", true], + [".svg", true], + [".jpeg", true], + [".gif", true], + [".webp", true], + [".ico", true], + [".css", true], + [".js", true], + [".woff", true], + [".woff2", true], + [".ttf", true], + [".eot", true], + [".otf", true], + [".7z", true], +]); const isImage = new Map([ - [".png", true], - [".jpg", true], - [".svg", true], - [".jpeg", true], - [".gif", true], - [".webp", true] -]) - + [".png", true], + [".jpg", true], + [".svg", true], + [".jpeg", true], + [".gif", true], + [".webp", true], +]); const hostWhitelist = new Map([ - ["files.facepunch.com", true], - ["wiki.facepunch.com", true], -]) + ["files.facepunch.com", true], + ["wiki.facepunch.com", true], +]); class StaticContentHandler { - private host: string - private api: ApiInterface - private cache: Map - - constructor(host: string, api: ApiInterface) { - this.host = host - this.api = api - this.cache = new Map() + private host: string; + private api: ApiInterface; + private cache: Map; + + constructor(host: string, api: ApiInterface) { + this.host = host; + this.api = api; + this.cache = new Map(); + } + + private async optimizeImage( + data: Buffer, + options: sharp.SharpOptions, + ): Promise { + const webpOptions: sharp.WebpOptions = { + effort: 6, + quality: 85, + smartDeblock: true, + smartSubsample: true, + }; + + return await sharp(data, options).webp(webpOptions).toBuffer(); + } + + private async downloadContent(url: string): Promise { + const resolvedUrl = this.resolveUrl(url); + + if (this.cache.has(resolvedUrl)) { + const cached = this.cache.get(resolvedUrl); + if (cached) return cached; } - private async optimizeImage(data: Buffer): Promise { - return await sharp(data).webp({ quality: 80 }).toBuffer() - } - - private async downloadContent(url: string): Promise { - const resolvedUrl = this.resolveUrl(url) - - if (this.cache.has(resolvedUrl)) { - const cached = this.cache.get(resolvedUrl) - if (cached) return cached - } + const urlPath = new URL(resolvedUrl).pathname; + const directoryStructure = path.dirname(urlPath); + const fullPath = `public/${directoryStructure}`; - const urlPath = new URL(resolvedUrl).pathname; - const directoryStructure = path.dirname(urlPath) - const fullPath = `public/${directoryStructure}` + const fileName = path.basename(resolvedUrl).split("?")[0]; + const fileExtension = path.extname(fileName).toLowerCase(); + let filePath = path.join(fullPath, fileName).replaceAll("\\", "/"); + let newURL = `/${filePath}`.replaceAll("public/", ""); - const fileName = path.basename(resolvedUrl).split('?')[0] - const fileExtension = path.extname(fileName).toLowerCase() - let filePath = path.join(fullPath, fileName).replaceAll("\\", "/"); - let newURL = `/${filePath}`.replaceAll("public/", "") + // We replace all images with webp + if (isImage.has(fileExtension)) { + filePath = filePath.replaceAll(fileExtension, ".webp"); + newURL = newURL.replaceAll(fileExtension, ".webp"); + } - // We replace all images with webp - if (isImage.has(fileExtension)) { - filePath = filePath.replaceAll(fileExtension, ".webp") - newURL = newURL.replaceAll(fileExtension, ".webp") - } + if (fileExtension !== ".css" && (await fileExists(filePath))) { + this.cache.set(resolvedUrl, newURL); + return newURL; + } - if (fileExtension !== ".css" && await fileExists(filePath)) { - this.cache.set(resolvedUrl, newURL) - return newURL; - } + await fs.mkdir(fullPath, { recursive: true }); - await fs.mkdir(fullPath, { recursive: true }) + let data = await this.api.getRawFull(resolvedUrl); + if (isImage.has(fileExtension)) { + const options: sharp.SharpOptions = {}; + if (isAnimated(data)) { + options.animated = true; + } - let data = await this.api.getRawFull(resolvedUrl) - if (isImage.has(fileExtension)) { - console.log(chalk.green("Optimizing"), resolvedUrl) - data = await this.optimizeImage(data) - } + data = await this.optimizeImage(data, options); + } - await fs.writeFile(filePath, data) + await fs.writeFile(filePath, data); - this.cache.set(resolvedUrl, newURL) - return newURL - } + this.cache.set(resolvedUrl, newURL); + return newURL; + } - private resolveUrl(url: string): string { - if (url.startsWith('//')) { - return `https:${url}` - } else if (url.startsWith('/')) { - return `${this.host}${url}` - } else if (url.startsWith('../../')) { - return `${this.host}/${url}` - } - return url + private resolveUrl(url: string): string { + if (url.startsWith("//")) { + return `https:${url}`; + } else if (url.startsWith("/")) { + return `${this.host}${url}`; + } else if (url.startsWith("../../")) { + return `${this.host}/${url}`; } + return url; + } - private async processHtml(content: string): Promise { - const $ = cheerio.load(content) - const elements = $("img[src], link[href], script[src], a[href]") - - for (let i = 0; i < elements.length; i++) { - const element = elements[i] + // Looks for and processes static content in HTML files + private async processHtml(content: string): Promise { + const $ = cheerio.load(content); + const elements = $("img[src], link[href], script[src], a[href]"); - const $el = $(element) - const url = $el.attr("src") || $el.attr("href") - if (!url) continue + for (let i = 0; i < elements.length; i++) { + const element = elements[i]; - const extension = path.extname(url.split('?')[0]).toLowerCase() - if (!fileWhitelist.has(extension)) continue + const $el = $(element); + const url = $el.attr("src") || $el.attr("href"); + if (!url) continue; - const resolvedUrl = this.resolveUrl(url) + const extension = path.extname(url.split("?")[0]).toLowerCase(); + if (!fileWhitelist.has(extension)) { + continue; + } - const host = new URL(resolvedUrl).hostname - if (!hostWhitelist.has(host)) continue + const resolvedUrl = this.resolveUrl(url); - const newURL = await this.downloadContent(resolvedUrl) - if (!newURL) continue + const host = new URL(resolvedUrl).hostname; + if (!hostWhitelist.has(host)) continue; - if ($el.attr("src") !== undefined) { - $el.attr("src", newURL) - } - if ($el.attr("href") !== undefined) { - $el.attr("href", newURL) - } - } + const newURL = await this.downloadContent(resolvedUrl); + if (!newURL) continue; - return $.html() + if ($el.attr("src") !== undefined) { + $el.attr("src", newURL); + } + if ($el.attr("href") !== undefined) { + $el.attr("href", newURL); + } } - private async processCss(content: string): Promise { - const urlRegex = /url\((?!['"]?:)['"]?([^'")]*)['"]?\)/g - let modifiedContent = content + return $.html(); + } - let match; - while ((match = urlRegex.exec(content)) !== null) { - const url = match[1] - if (!url) continue + // Looks for and processes static content in CSS files + private async processCss(content: string): Promise { + const urlRegex = /url\((?!['"]?:)['"]?([^'")]*)['"]?\)/g; + let modifiedContent = content; - const resolvedUrl = this.resolveUrl(url); - const newURL = await this.downloadContent(resolvedUrl) - if (!newURL) continue + let match; + while ((match = urlRegex.exec(content)) !== null) { + const url = match[1]; + if (!url) continue; - modifiedContent = modifiedContent.replaceAll(url, newURL) - } + const resolvedUrl = this.resolveUrl(url); + const newURL = await this.downloadContent(resolvedUrl); + if (!newURL) continue; - return modifiedContent + modifiedContent = modifiedContent.replaceAll(url, newURL); } - public async processContent(content: string, isCss: boolean = false): Promise { - if (isCss) { - return await this.processCss(content) - } else { - return await this.processHtml(content) - } + return modifiedContent; + } + + public async processContent( + content: string, + isCss: boolean = false, + ): Promise { + if (isCss) { + return await this.processCss(content); + } else { + return await this.processHtml(content); } + } } -export default StaticContentHandler +export default StaticContentHandler; From 2ce17733ee1a6692452a3ed62bbc378a92ea12ac Mon Sep 17 00:00:00 2001 From: Sarah Sturgeon Date: Fri, 10 Oct 2025 03:54:52 -0700 Subject: [PATCH 14/14] Split build modules up more, probably some improvements, too --- build/modules/css.ts | 228 + build/modules/layout.ts | 40 + build/modules/sidebar.ts | 76 + build/setup.ts | 285 +- package-lock.json | 14 + package.json | 1 + src/components/Sidebar.astro | 33486 ++++++++++++++++++++++++++++++++- 7 files changed, 33853 insertions(+), 277 deletions(-) create mode 100644 build/modules/css.ts create mode 100644 build/modules/layout.ts create mode 100644 build/modules/sidebar.ts diff --git a/build/modules/css.ts b/build/modules/css.ts new file mode 100644 index 0000000..626f333 --- /dev/null +++ b/build/modules/css.ts @@ -0,0 +1,228 @@ +import { promises as fs } from "fs"; +import type StaticContentHandler from "./static.js"; + +/** + * Processes the CSS file to optimize it, set up custom styles, and remove unused styles. + */ + +// Generated from `npm run get_used_mdis` +const mdiWhitelist = [ + ".mdi-account", + ".mdi-book", + ".mdi-bookshelf", + ".mdi-calendar", + ".mdi-code-braces", + ".mdi-code-not-equal", + ".mdi-content-copy", + ".mdi-controller-classic-outline", + ".mdi-cube-outline", + ".mdi-database", + ".mdi-file", + ".mdi-file-download", + ".mdi-fire", + ".mdi-floor-plan", + ".mdi-format-list-numbered", + ".mdi-gamepad-circle-down", + ".mdi-gamepad-variant", + ".mdi-github-box", + ".mdi-history", + ".mdi-hook", + ".mdi-image-broken-variant", + ".mdi-language-lua", + ".mdi-library-shelves", + ".mdi-link-variant", + ".mdi-menu", + ".mdi-pencil", + ".mdi-robot", + ".mdi-security", + ".mdi-server", + ".mdi-source-branch", + ".mdi-source-pull", + ".mdi-steam", + ".mdi-television-guide", + ".mdi-test-tube", + ".mdi-tools", + ".mdi-vector-triangle", + ".mdi-view-quilt", +]; + +function removeDeadStyles(cssContent: string) { + // Unused mdi selectors can be removed + const isBadMdi = (block: string) => { + const isMdi = block.startsWith(".mdi-"); + if (!isMdi) return false; + + const mdi = block.split(":before")[0].split(/[\s:,]/)[0]; + if (!mdiWhitelist.includes(mdi)) { + // console.debug(`Removing unused mdi: ${mdi}`) + return true; + } + + return false; + }; + + // Classes that are unused + const usesDeadClass = (block: string) => { + const deadClassPrefixes = [".contentbar", ".card", ".infocard"]; + + for (const prefix of deadClassPrefixes) { + if (block.startsWith(prefix)) { + // console.debug(`Removing block for unused class: ${prefix}`) + return true; + } + } + + return false; + }; + + // Anything related to editing or previewing is not needed + const isEdit = (block: string) => { + if (block.startsWith("#edit_")) return true; + if (block.startsWith("#preview")) return true; + if (block.indexOf(".edit") !== -1) return true; + return false; + }; + + const usesBadStyles = (block: string) => { + // This selector exclusively adds a bad rule that errors and doesn't do anything + if ( + block.indexOf( + "#sidebar details.level1 > summary {\n padding-left: -16px;", + ) !== -1 + ) { + // console.debug("Removing bad style") + // console.debug(block) + return true; + } + + return false; + }; + + const shouldKeep = (block: string) => { + block = block.trim(); + + if (isBadMdi(block)) return false; + if (usesDeadClass(block)) return false; + if (isEdit(block)) return false; + if (usesBadStyles(block)) return false; + return true; + }; + + const blocks = cssContent.split("}\n"); + const keptBlocks = blocks.filter(shouldKeep); + return keptBlocks.join("}\n"); +} + +// Takes the contents of a CSS file +function optimizeCss(content: string) { + // Simplifies unnecesarily specific selectors + content = content.replace( + /html > body > \.body > \.footer {/g, + ".body > .footer {", + ); + content = content.replace( + /html > body > \.body > \.content > \.footer {/g, + ".content > .footer {", + ); + content = content.replace( + /html > body > \.body > \.content \.content\.loading {/g, + ".content.loading {", + ); + content = content.replace( + /html > body > \.body > \.content \.content {/g, + ".content .content {", + ); + content = content.replace( + /html > body > \.body > \.content {/g, + "body > .body > .content {", + ); + content = content.replace(/html > body > \.body {/g, "body > .body {"); + content = content.replace(/html > body a {/g, "body a {"); + content = content.replace(/html > body {/g, "body {"); + content = content.replace(/html > body > .footer {/g, "body > .footer {"); + + // Sidebar + // Makes rules more specific, and make them only apply to open details where applicable + // Reduces the total number of elements selected by css rules by **tens of thousands**! + content = content.replace( + /#sidebar \.section > a, #sidebar \.section > details\.level1 > summary > div {/g, + "#sidebar .section > a, .level1 > summary > div {", + ); + content = content.replace( + /#sidebar \.section > a > i, #sidebar \.section > details\.level1 > summary > div > i {/g, + "#sidebar .section i {", + ); + content = content.replace( + /#sidebar details\.level2 > ul > li > a {/g, + "details[open].level2 > ul > li > a {", + ); + content = content.replace( + /#sidebar details\.level2 ul > li > a {/g, + "details[open].level2 ul > li > a {", + ); + content = content.replace( + /#sidebar details > ul > li {/g, + "details[open] > ul > li {", + ); + content = content.replace( + /#sidebar details > ul > li:nth\-child\(odd\) {/g, + "details[open] > ul > li:nth-child(2n+1) {", + ); + content = content.replace(/#sidebar details a {/g, "details[open] a {"); + content = content.replace( + /#sidebar details\.level1 > ul > li > a {/g, + "details[open].level1 > ul > li > a {", + ); + content = content.replace( + /#sidebar details > ul > li > a\.cm:before {/g, + "details[open] > ul > li > a.cm:before {", + ); + content = content.replace( + /#sidebar details\.level2 > ul > li > a:before {/g, + "details[open].level2 > ul > li > a:before {", + ); + + // Style fixes + content = content.replace(/cursor: hand;/g, "cursor: pointer;"); // cursor: hand is invalid + content = content.replace(/\s+-moz-osx-font-smoothing: grayscale;/g, ""); // This rule is an error in every modern browser + + return content; +} + +// Processes a downloaded CSS file, gets remote content, and modifies the file +export async function processCss(contentHandler: StaticContentHandler) { + const path = "public/styles/gmod.css"; + const current = await fs.readFile(path, "utf-8"); + let newContent = await contentHandler.processContent(current, true); + + newContent = newContent.replace(/[\r]/g, ""); + + // Optimization, hide all list items that aren't expanded + newContent = `${newContent} #sidebar details[open] > ul { display: block; }\n`; + newContent = `${newContent} #sidebar details > ul { display: none; }\n`; + + // Remove the weird dot matrix thing that breaks Darkreader + newContent = `${newContent} .body > .content, #pagelinks a.active { background-image: none !important; }\n`; + + // Add padding to the feature buttons + newContent = `${newContent} ul#pagelinks > li { padding-right: 1rem; }\n`; + + // Add the "Mirror" tag/label to the icon + newContent = `${newContent} #ident > h1 > a:after { content: "Mirror"; color: #F6FAFE; background-color: #0183FF; font-size: 10px; text-transform: uppercase; padding: 1px 4px; margin-left: 8px; display: inline-block; position: relative; top: -4px; }\n`; + + // Fix sidebar focus/hover color styling + newContent = `${newContent} #sidebar .section > a:focus, #sidebar .section > details.level1 > summary > div:focus { background-color: rgba(0, 130, 255, 0.5); }\n`; + newContent = `${newContent} #sidebar details > ul > li > a:focus { background-color: rgba(0, 130, 255, 0.5); }\n`; + newContent = `${newContent} #searchresults > a:focus, #searchresults > a:hover { background-color: rgba(0, 130, 255, 0.5); }\n`; + + // Set up the last parse date + newContent = `${newContent} #last-parse { font-size: 13px; font-weight: bold; padding: 2px; font-family: monospace; }\n`; + + // Add scrollbar for the body tabs + newContent = `${newContent} .body-tabs { overflow-x: auto; }\n`; + + newContent = removeDeadStyles(newContent); + newContent = optimizeCss(newContent); + + await fs.writeFile(path, newContent); +} diff --git a/build/modules/layout.ts b/build/modules/layout.ts new file mode 100644 index 0000000..a9fd0a4 --- /dev/null +++ b/build/modules/layout.ts @@ -0,0 +1,40 @@ +import * as cheerio from "cheerio"; +import { promises as fs } from "fs"; + +/** + * Sets up the main layout file by processing the HTML content, + * This module creates the src/layouts/Layout.astro file. + * Fixes some issues with earlier text replacements and inserts frontmatter. + */ + +const makeLayoutHeader = (headScript: string, content: string) => ` +--- +// This file is auto-generated, do not edit it directly! +// See build/setup.ts for more information +import Sidebar from "../components/Sidebar.astro"; +const { title, description, image, views, updated } = Astro.props; +${headScript} +--- +${content} +`; + +export async function setupLayout($: cheerio.CheerioAPI) { + let layout = $.html(); + layout = layout.replace("", ""); // When we insert our element it automatically gets formatted, so we have to fix it in a second pass + layout = layout.replace(/\/gmod\//g, "/"); // We don't use the /gmod prefix + layout = layout.replace(/"{title}"/g, "{title}"); // When we insert this code from js it wraps our frontmatter variables in quotes so we have to unwrap them again + layout = layout.replace(/"{description}"/g, "{description}"); + layout = layout.replace(/"{image}"/g, "{image}"); + layout = layout.replace(/"{ogLogo}"/g, "{ogLogo}"); + layout = layout.replace(/"{fullUrl}"/g, "{fullUrl}"); + layout = layout.replace(/(href=|src=)".*?"/g, (m) => m.replace(/\\+/g, "/")); // For some reason, URLs are being parsed incorrectly, this should fix that. + + const layoutHeadScript = await fs.readFile( + "build/fragments/layoutScript.ts", + "utf-8", + ); + await fs.writeFile( + "src/layouts/Layout.astro", + makeLayoutHeader(layoutHeadScript, layout), + ); +} diff --git a/build/modules/sidebar.ts b/build/modules/sidebar.ts new file mode 100644 index 0000000..869003c --- /dev/null +++ b/build/modules/sidebar.ts @@ -0,0 +1,76 @@ +import * as cheerio from "cheerio"; +import { promises as fs } from "fs"; +import type { Element } from "domhandler"; + +/* + * Extracts the sidebar from the main page content and + * turns it into a component. + * Also modifies it a bit to fix links, remove unused classes, etc. + */ + +const unusedClasses = new Set(["meth", "memb", "global"]); + +const removeUnusedClasses = ( + $: cheerio.CheerioAPI, + sidebar: cheerio.Cheerio, +) => { + const elementsToProcess = sidebar.find("[class]"); + + elementsToProcess.each((_, el) => { + const element = $(el); + if (element === undefined) { + return; + } + + const elementClass = element.attr("class"); + if (elementClass === undefined) { + return; + } + + const currentClasses = elementClass.trim().split(/\s+/); + const newClasses = currentClasses.filter( + (cls: string) => !unusedClasses.has(cls), + ); + + if (newClasses.length > 0) { + element.attr("class", newClasses.join(" ")); + } else { + element.removeAttr("class"); + } + }); +}; + +export async function setupSidebar($: cheerio.CheerioAPI) { + const sidebar = $("div[id='sidebar']"); + if (sidebar.length === 0) { + throw new Error("No sidebar found - please report this!"); + } + + removeUnusedClasses($, sidebar); + + // Now store the raw contents of the sidebar so we can replace it with a component we'll make + let contents = sidebar.html(); + if (contents === null) { + throw new Error("Sidebar has no contents - please report this!"); + } + + // Overwrite the sidebar html with the component we're making + sidebar.html(""); + + contents = contents.trim(); + + // We don't use the /gmod prefix, so we want to remove it from all links + // (This is kinda dumb, is there a smarter way to handle it?) + contents = contents.replace(/\/gmod\//g, "/"); + + // Astro/rocket-loader doesn't allow us to reference functions without putting them on the widnwos + contents = contents.replaceAll("ToggleClass", "window.ToggleClass"); + + // For some reason, URLs are being parsed incorrectly, this should fix that. + // TODO: Verify this and explain it better.. + contents = contents.replace(/(href=|src=)".*?"/g, (m) => + m.replace(/\\+/g, "/"), + ); + + await fs.writeFile("src/components/Sidebar.astro", contents); +} diff --git a/build/setup.ts b/build/setup.ts index 142e736..351cb18 100644 --- a/build/setup.ts +++ b/build/setup.ts @@ -1,9 +1,16 @@ // Sets up the layout and components files import * as cheerio from "cheerio"; import { promises as fs } from "fs"; -import { minify as htmlMinify } from "html-minifier-next"; -import type ApiInterface from "./modules/api_interface.js"; +import { setupSidebar } from "./modules/sidebar.js"; +import { setupLayout } from "./modules/layout.js"; +import { processCss } from "./modules/css.js"; + import type StaticContentHandler from "./modules/static.js"; +import type ApiInterface from "./modules/api_interface.js"; + +/** + * Main builder entrypoint. Calls all of the other setup/builder functions + */ function setupFooters($: cheerio.CheerioAPI) { const footers = $("div.footer"); @@ -23,48 +30,6 @@ function setupContent($: cheerio.CheerioAPI) { content.html(""); } -async function setupSidebar($: cheerio.CheerioAPI) { - const sidebar = $("div[id='sidebar']"); - let contents = sidebar.html(); - if (!contents) throw new Error("No sidebar found - please report this!"); - sidebar.html(""); - - contents = contents.trim(); - contents = contents.replace(/\/gmod\//g, "/"); // We don't use the /gmod prefix - contents = contents.replaceAll("meth ", ""); // Unused class - contents = contents.replaceAll("memb ", ""); // Unused class - contents = contents.replaceAll("ToggleClass", "window.ToggleClass"); // Astro/rocket-loader doesn't allow us to reference functions without putting them on the widnwos - contents = contents.replace(/(href=|src=)".*?"/g, (m) => - m.replace(/\\+/g, "/"), - ); // For some reason, URLs are being parsed incorrectly, this should fix that. - contents = await htmlMinify(contents, { - collapseWhitespace: true, - removeComments: true, - }); - await fs.writeFile("src/components/Sidebar.astro", contents); -} - -async function setupLayout($: cheerio.CheerioAPI) { - let layout = $.html(); - layout = layout.replace("", ""); // When we insert our element it automatically gets formatted, so we have to fix it in a second pass - layout = layout.replace(/\/gmod\//g, "/"); // We don't use the /gmod prefix - layout = layout.replace(/"{title}"/g, "{title}"); // When we insert this code from js it wraps our frontmatter variables in quotes so we have to unwrap them again - layout = layout.replace(/"{description}"/g, "{description}"); - layout = layout.replace(/"{image}"/g, "{image}"); - layout = layout.replace(/"{ogLogo}"/g, "{ogLogo}"); - layout = layout.replace(/"{fullUrl}"/g, "{fullUrl}"); - layout = layout.replace(/(href=|src=)".*?"/g, (m) => m.replace(/\\+/g, "/")); // For some reason, URLs are being parsed incorrectly, this should fix that. - - const layoutHeadScript = await fs.readFile( - "build/fragments/layoutScript.ts", - "utf-8", - ); - await fs.writeFile( - "src/layouts/Layout.astro", - makeLayoutHeader(layoutHeadScript, layout), - ); -} - async function setupFolders() { await fs.mkdir("src/pages", { recursive: true }); await fs.mkdir("public/content", { recursive: true }); @@ -144,238 +109,6 @@ async function setupDisclaimer($: cheerio.CheerioAPI) { $(disclaimer).insertAfter("div.footer[id='pagefooter']"); } -// Generated from `npm run get_used_mdis` -const mdiWhitelist = [ - ".mdi-account", - ".mdi-book", - ".mdi-bookshelf", - ".mdi-calendar", - ".mdi-code-braces", - ".mdi-code-not-equal", - ".mdi-content-copy", - ".mdi-controller-classic-outline", - ".mdi-cube-outline", - ".mdi-database", - ".mdi-file", - ".mdi-file-download", - ".mdi-fire", - ".mdi-floor-plan", - ".mdi-format-list-numbered", - ".mdi-gamepad-circle-down", - ".mdi-gamepad-variant", - ".mdi-github-box", - ".mdi-history", - ".mdi-hook", - ".mdi-image-broken-variant", - ".mdi-language-lua", - ".mdi-library-shelves", - ".mdi-link-variant", - ".mdi-menu", - ".mdi-pencil", - ".mdi-robot", - ".mdi-security", - ".mdi-server", - ".mdi-source-branch", - ".mdi-source-pull", - ".mdi-steam", - ".mdi-television-guide", - ".mdi-test-tube", - ".mdi-tools", - ".mdi-vector-triangle", - ".mdi-view-quilt", -]; - -function removeDeadStyles(content: string) { - // Unused mdi selectors can be removed - const isBadMdi = (block: string) => { - const isMdi = block.startsWith(".mdi-"); - if (!isMdi) return false; - - const mdi = block.split(":before")[0].split(/[\s:,]/)[0]; - if (!mdiWhitelist.includes(mdi)) { - // console.debug(`Removing unused mdi: ${mdi}`) - return true; - } - - return false; - }; - - // Classes that are unused - const usesDeadClass = (block: string) => { - const deadClassPrefixes = [".contentbar", ".card", ".infocard"]; - - for (const prefix of deadClassPrefixes) { - if (block.startsWith(prefix)) { - // console.debug(`Removing block for unused class: ${prefix}`) - return true; - } - } - - return false; - }; - - // Anything related to editing or previewing is not needed - const isEdit = (block: string) => { - if (block.startsWith("#edit_")) return true; - if (block.startsWith("#preview")) return true; - if (block.indexOf(".edit") !== -1) return true; - return false; - }; - - const usesBadStyles = (block: string) => { - // This selector exclusively adds a bad rule that errors and doesn't do anything - if ( - block.indexOf( - "#sidebar details.level1 > summary {\n padding-left: -16px;", - ) !== -1 - ) { - // console.debug("Removing bad style") - // console.debug(block) - return true; - } - - return false; - }; - - const shouldKeep = (block: string) => { - block = block.trim(); - - if (isBadMdi(block)) return false; - if (usesDeadClass(block)) return false; - if (isEdit(block)) return false; - if (usesBadStyles(block)) return false; - return true; - }; - - const blocks = content.split("}\n"); - const keptBlocks = blocks.filter(shouldKeep); - return keptBlocks.join("}\n"); -} - -function optimizeCss(content: string) { - // Simplifies unnecesarily specific selectors - content = content.replace( - /html > body > \.body > \.footer {/g, - ".body > .footer {", - ); - content = content.replace( - /html > body > \.body > \.content > \.footer {/g, - ".content > .footer {", - ); - content = content.replace( - /html > body > \.body > \.content \.content\.loading {/g, - ".content.loading {", - ); - content = content.replace( - /html > body > \.body > \.content \.content {/g, - ".content .content {", - ); - content = content.replace( - /html > body > \.body > \.content {/g, - "body > .body > .content {", - ); - content = content.replace(/html > body > \.body {/g, "body > .body {"); - content = content.replace(/html > body a {/g, "body a {"); - content = content.replace(/html > body {/g, "body {"); - content = content.replace(/html > body > .footer {/g, "body > .footer {"); - - // Sidebar - // Makes rules more specific, and make them only apply to open details where applicable - // Reduces the total number of elements selected by css rules by **tens of thousands**! - content = content.replace( - /#sidebar \.section > a, #sidebar \.section > details\.level1 > summary > div {/g, - "#sidebar .section > a, .level1 > summary > div {", - ); - content = content.replace( - /#sidebar \.section > a > i, #sidebar \.section > details\.level1 > summary > div > i {/g, - "#sidebar .section i {", - ); - content = content.replace( - /#sidebar details\.level2 > ul > li > a {/g, - "details[open].level2 > ul > li > a {", - ); - content = content.replace( - /#sidebar details\.level2 ul > li > a {/g, - "details[open].level2 ul > li > a {", - ); - content = content.replace( - /#sidebar details > ul > li {/g, - "details[open] > ul > li {", - ); - content = content.replace( - /#sidebar details > ul > li:nth\-child\(odd\) {/g, - "details[open] > ul > li:nth-child(2n+1) {", - ); - content = content.replace(/#sidebar details a {/g, "details[open] a {"); - content = content.replace( - /#sidebar details\.level1 > ul > li > a {/g, - "details[open].level1 > ul > li > a {", - ); - content = content.replace( - /#sidebar details > ul > li > a\.cm:before {/g, - "details[open] > ul > li > a.cm:before {", - ); - content = content.replace( - /#sidebar details\.level2 > ul > li > a:before {/g, - "details[open].level2 > ul > li > a:before {", - ); - - // Style fixes - content = content.replace(/cursor: hand;/g, "cursor: pointer;"); // cursor: hand is invalid - content = content.replace(/\s+-moz-osx-font-smoothing: grayscale;/g, ""); // This rule is an error in every modern browser - - return content; -} - -// Processes a downloaded CSS file, gets remote content, and modifies the file -async function processCss(contentHandler: StaticContentHandler) { - const path = "public/styles/gmod.css"; - const current = await fs.readFile(path, "utf-8"); - let newContent = await contentHandler.processContent(current, true); - - newContent = newContent.replace(/[\r]/g, ""); - - // Optimization, hide all list items that aren't expanded - newContent = `${newContent} #sidebar details[open] > ul { display: block; }\n`; - newContent = `${newContent} #sidebar details > ul { display: none; }\n`; - - // Remove the weird dot matrix thing that breaks Darkreader - newContent = `${newContent} .body > .content, #pagelinks a.active { background-image: none !important; }\n`; - - // Add padding to the feature buttons - newContent = `${newContent} ul#pagelinks > li { padding-right: 1rem; }\n`; - - // Add the "Mirror" tag/label to the icon - newContent = `${newContent} #ident > h1 > a:after { content: "Mirror"; color: #F6FAFE; background-color: #0183FF; font-size: 10px; text-transform: uppercase; padding: 1px 4px; margin-left: 8px; display: inline-block; position: relative; top: -4px; }\n`; - - // Fix sidebar focus/hover color styling - newContent = `${newContent} #sidebar .section > a:focus, #sidebar .section > details.level1 > summary > div:focus { background-color: rgba(0, 130, 255, 0.5); }\n`; - newContent = `${newContent} #sidebar details > ul > li > a:focus { background-color: rgba(0, 130, 255, 0.5); }\n`; - newContent = `${newContent} #searchresults > a:focus, #searchresults > a:hover { background-color: rgba(0, 130, 255, 0.5); }\n`; - - // Set up the last parse date - newContent = `${newContent} #last-parse { font-size: 13px; font-weight: bold; padding: 2px; font-family: monospace; }\n`; - - // Add scrollbar for the body tabs - newContent = `${newContent} .body-tabs { overflow-x: auto; }\n`; - - newContent = removeDeadStyles(newContent); - newContent = optimizeCss(newContent); - - await fs.writeFile(path, newContent); -} - -const makeLayoutHeader = (headScript: string, content: string) => ` ---- -// This file is auto-generated, do not edit it directly! -// See build/setup.ts for more information -import Sidebar from "../components/Sidebar.astro"; -const { title, description, image, views, updated } = Astro.props; -${headScript} ---- -${content} -`; - async function setupFeatures($: cheerio.CheerioAPI) { const pagelinks = $("ul[id='pagelinks']"); pagelinks.append( diff --git a/package-lock.json b/package-lock.json index 403c49f..436fa19 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "@astrojs/check": "^0.9.4", "@astrojs/internal-helpers": "^0.7.3", "@cloudflare/workers-types": "^4.20240129.0", + "@frsource/is-animated": "^1.0.5", "@types/html-minifier": "^4.0.5", "@types/minify": "^9.1.4", "@types/node": "^22.0.0", @@ -1169,6 +1170,19 @@ "node": ">=18" } }, + "node_modules/@frsource/is-animated": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@frsource/is-animated/-/is-animated-1.0.5.tgz", + "integrity": "sha512-d4JZUisl3JGZbBZrgneFZcq67MpEIugCung8pChwygE/FZUR3CnRKxePrw66YSpUbkmRrSSpAtNWO1xnRXwmNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.0.0" + }, + "funding": { + "url": "https://buymeacoffee.com/frsource" + } + }, "node_modules/@img/colour": { "version": "1.0.0", "devOptional": true, diff --git a/package.json b/package.json index 1b37b13..48a6458 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "@astrojs/check": "^0.9.4", "@astrojs/internal-helpers": "^0.7.3", "@cloudflare/workers-types": "^4.20240129.0", + "@frsource/is-animated": "^1.0.5", "@types/html-minifier": "^4.0.5", "@types/minify": "^9.1.4", "@types/node": "^22.0.0", diff --git a/src/components/Sidebar.astro b/src/components/Sidebar.astro index 7df5941..0f0caba 100644 --- a/src/components/Sidebar.astro +++ b/src/components/Sidebar.astro @@ -1 +1,33485 @@ -
    Player Guides
    Developer Guides
    Getting Started 10
    Lua Programming 29
    Game Systems 10
    Gamemode Creation 5
    HUD and User Interface 15
    Scripted Entities and Weapons 9
    NPCs and AI 2
    Map and Level Design 6
    Models, Textures and Animation 7
    Addons and Steam Workshop 4
    Binary Modules 6
    Other Topics 16
    Developer Reference
    Globals 332
    Classes 46
    Libraries 88
    Hooks 10
    Game Events 40
    Panels 130
    Enumerations 100
    Structures 71
    Shaders 16
    Miscellaneous Reference 30
    \ No newline at end of file +
    + +
    +
    + + + +
    +

    + Garry's Mod Wiki +

    +
    + +
    + +
    + +
    + +
    + +
    Player Guides
    + +
    Developer Guides
    +
    +
    + +
    + + Getting Started 10 +
    +
    + + +
    +
    + +
    + + Lua Programming 29 +
    +
    + + +
    +
    + +
    + + Game Systems 10 +
    +
    + + +
    +
    + +
    + + Gamemode Creation 5 +
    +
    + + +
    +
    + +
    + + HUD and User Interface 15 +
    +
    + + +
    +
    + +
    + + Scripted Entities and Weapons 9 +
    +
    + + +
    +
    + +
    + + NPCs and AI 2 +
    +
    + + +
    +
    + +
    + + Map and Level Design 6 +
    +
    + + +
    +
    + +
    + + Models, Textures and Animation 7 +
    +
    + + +
    +
    + +
    + + Addons and Steam Workshop 4 +
    +
    + + +
    +
    + +
    + + Binary Modules 6 +
    +
    + + +
    +
    + +
    + + Other Topics 16 +
    +
    + + +
    +
    +
    Developer Reference
    +
    +
    + +
    + + Globals 332 +
    +
    + + +
    +
    + +
    + + Classes 46 +
    +
    + + +
    +
    + +
    + + Libraries 88 +
    +
    + + +
    +
    + +
    + + Hooks 10 +
    +
    + + +
    +
    + +
    + + Game Events 40 +
    +
    + + +
    +
    + +
    + + Panels 130 +
    +
    + + +
    +
    + +
    + + Enumerations 100 +
    +
    + + +
    +
    + +
    + + Structures 71 +
    +
    + + +
    +
    + +
    + + Shaders 17 +
    +
    + + +
    +
    + +
    + + Miscellaneous Reference 30 +
    +
    + + +
    +
    +
    +
    \ No newline at end of file