From aa54e730523355caaa78ec3da3d7f02a6813406d Mon Sep 17 00:00:00 2001 From: Wendelin Date: Fri, 23 Aug 2024 15:28:22 +0200 Subject: [PATCH] 3.0.0 migrate to nodejs --- homedocs/.mise.toml | 3 +- homedocs/CHANGELOG.md | 4 + homedocs/Dockerfile | 9 +- homedocs/build.yaml | 10 +- homedocs/config.yaml | 8 +- homedocs/run.sh | 2 +- homedocs/server/.gitignore | 64 +- homedocs/server/.npmrc | 1 + homedocs/server/README.md | 17 +- homedocs/server/biome.json | 51 +- homedocs/server/bun.lockb | Bin 103289 -> 0 bytes homedocs/server/bunfig.toml | 9 - homedocs/server/package-lock.json | 3734 +++++++++++++++++ homedocs/server/package.json | 54 +- homedocs/server/scripts/build.ts | 22 +- homedocs/server/scripts/buildCssDev.ts | 3 + homedocs/server/scripts/tailwind.ts | 8 +- homedocs/server/src/fileWatcher.ts | 4 +- .../src/htmlBuilder/{index.ts => index.tsx} | 111 +- homedocs/server/src/htmlBuilder/navigation.ts | 15 +- homedocs/server/src/htmlBuilder/types.ts | 2 +- homedocs/server/src/index.ts | 28 +- .../server/src/markdown/markdownParser.ts | 40 +- homedocs/server/src/templates/404.tsx | 6 +- homedocs/server/src/templates/layout.tsx | 21 +- homedocs/server/src/templates/merged/page.tsx | 67 +- homedocs/server/src/templates/navigation.tsx | 39 +- homedocs/server/src/utils/file.ts | 15 + homedocs/server/src/utils/logger.ts | 12 +- homedocs/server/src/webserver.ts | 56 - homedocs/server/src/webserver.tsx | 47 + homedocs/server/tsconfig.json | 21 +- 32 files changed, 4118 insertions(+), 365 deletions(-) create mode 100644 homedocs/server/.npmrc delete mode 100755 homedocs/server/bun.lockb delete mode 100644 homedocs/server/bunfig.toml create mode 100644 homedocs/server/package-lock.json create mode 100644 homedocs/server/scripts/buildCssDev.ts rename homedocs/server/src/htmlBuilder/{index.ts => index.tsx} (52%) create mode 100644 homedocs/server/src/utils/file.ts delete mode 100644 homedocs/server/src/webserver.ts create mode 100644 homedocs/server/src/webserver.tsx diff --git a/homedocs/.mise.toml b/homedocs/.mise.toml index 352f5a3..6a0493c 100644 --- a/homedocs/.mise.toml +++ b/homedocs/.mise.toml @@ -1,3 +1,2 @@ [tools] -node = "20" -bun = "1.1.12" +node = "22" diff --git a/homedocs/CHANGELOG.md b/homedocs/CHANGELOG.md index 96885c5..d9379e3 100644 --- a/homedocs/CHANGELOG.md +++ b/homedocs/CHANGELOG.md @@ -1,5 +1,9 @@ +## 3.0.0 + +- migration to nodejs 22 with hono server + ## 2.0.6 - fix run command for bun server diff --git a/homedocs/Dockerfile b/homedocs/Dockerfile index c22cb85..a88a9e2 100644 --- a/homedocs/Dockerfile +++ b/homedocs/Dockerfile @@ -2,17 +2,14 @@ ARG BUILD_FROM FROM $BUILD_FROM # install dependencies -RUN apt-get update && apt-get install -y unzip - -# Install Bun -RUN curl -fsSL https://bun.sh/install | bash -s "bun-v1.1.24" +RUN apk add nodejs-current npm # Copy server into image COPY server /server WORKDIR /server -RUN ~/.bun/bin/bun install -RUN ~/.bun/bin/bun run build +RUN npm install +RUN npm run build # copy and setup run script COPY run.sh / diff --git a/homedocs/build.yaml b/homedocs/build.yaml index 10ccc75..ea23507 100644 --- a/homedocs/build.yaml +++ b/homedocs/build.yaml @@ -1,10 +1,10 @@ # https://developers.home-assistant.io/docs/add-ons/configuration#add-on-dockerfile build_from: - aarch64: "ghcr.io/home-assistant/aarch64-base-debian:bookworm" - amd64: "ghcr.io/home-assistant/amd64-base-debian:bookworm" - # armhf: "ghcr.io/home-assistant/armhf-base:3.19" - # armv7: "ghcr.io/home-assistant/armv7-base:3.19" - # i386: "ghcr.io/home-assistant/i386-base:3.19" + aarch64: "ghcr.io/home-assistant/aarch64-base:3.20" + amd64: "ghcr.io/home-assistant/amd64-base:3.20" + armhf: "ghcr.io/home-assistant/armhf-base:3.20" + armv7: "ghcr.io/home-assistant/armv7-base:3.20" + i386: "ghcr.io/home-assistant/i386-base:3.20" labels: org.opencontainers.image.title: "Homedocs (Beta)" org.opencontainers.image.description: "Document stuff with Markdown" diff --git a/homedocs/config.yaml b/homedocs/config.yaml index 86284e9..86cc638 100644 --- a/homedocs/config.yaml +++ b/homedocs/config.yaml @@ -1,15 +1,15 @@ name: Homedocs (Beta) description: Document stuff with Markdown -version: "2.0.6" +version: "3.0.0" slug: homedocs_beta init: false url: https://github.com/wendevlin/homeassistant-addons/tree/beta/homedocs arch: - aarch64 - amd64 - # - armhf - # - armv7 - # - i386 + - armhf + - armv7 + - i386 startup: services map: - config:rw diff --git a/homedocs/run.sh b/homedocs/run.sh index f8fadbd..7199ffd 100644 --- a/homedocs/run.sh +++ b/homedocs/run.sh @@ -19,4 +19,4 @@ fi # BUILD_TIMEOUT_IN_SECONDS=$(bashio::config 'buildTimeoutInSeconds') # start the webserver -DOCS_BASE_PATH=/config/homedocs ~/.bun/bin/bun run start:production \ No newline at end of file +DOCS_BASE_PATH=/config/homedocs node dist/index.cjs \ No newline at end of file diff --git a/homedocs/server/.gitignore b/homedocs/server/.gitignore index a1b5817..aa6f8dd 100644 --- a/homedocs/server/.gitignore +++ b/homedocs/server/.gitignore @@ -1,44 +1,30 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# next.js -/.next/ -/out/ - -# production -/build - -# misc -.DS_Store -*.pem - -# debug +# dev +.yarn/ +!.yarn/releases +.vscode/* +!.vscode/launch.json +!.vscode/*.code-snippets +.idea/workspace.xml +.idea/usage.statistics.xml +.idea/shelf + +# deps +node_modules/ + +# env +.env +.env.production + +# logs +logs/ +*.log npm-debug.log* yarn-debug.log* yarn-error.log* +pnpm-debug.log* +lerna-debug.log* -# local env files -.env.local -.env.development.local -.env.test.local -.env.production.local - -# vercel -.vercel - -**/*.trace -**/*.zip -**/*.tar.gz -**/*.tgz -**/*.log -package-lock.json -**/*.bun +# misc +.DS_Store -dist \ No newline at end of file +dist diff --git a/homedocs/server/.npmrc b/homedocs/server/.npmrc new file mode 100644 index 0000000..449691b --- /dev/null +++ b/homedocs/server/.npmrc @@ -0,0 +1 @@ +save-exact=true \ No newline at end of file diff --git a/homedocs/server/README.md b/homedocs/server/README.md index 688c87e..e12b31d 100644 --- a/homedocs/server/README.md +++ b/homedocs/server/README.md @@ -1,15 +1,8 @@ -# Elysia with Bun runtime - -## Getting Started -To get started with this template, simply paste this command into your terminal: -```bash -bun create elysia ./elysia-example ``` - -## Development -To start the development server run: -```bash -bun run dev +npm install +npm run dev ``` -Open http://localhost:3000/ with your browser to see the result. \ No newline at end of file +``` +open http://localhost:3000 +``` diff --git a/homedocs/server/biome.json b/homedocs/server/biome.json index 9ab8743..4a12694 100644 --- a/homedocs/server/biome.json +++ b/homedocs/server/biome.json @@ -1,26 +1,29 @@ { - "$schema": "https://biomejs.dev/schemas/1.7.3/schema.json", - "organizeImports": { - "enabled": true - }, - "linter": { - "enabled": true, - "rules": { - "recommended": true, - "style": { - "noUselessElse": "off", - "noNonNullAssertion": "off" - }, - "correctness": { - "useJsxKeyInIterable": "off" - } - } - }, - "javascript": { - "formatter": { - "semicolons": "asNeeded", - "quoteStyle": "single", - "trailingComma": "all" - } - } + "$schema": "https://biomejs.dev/schemas/1.8.3/schema.json", + "organizeImports": { + "enabled": true + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "style": { + "noUselessElse": "off", + "noNonNullAssertion": "off" + }, + "correctness": { + "useJsxKeyInIterable": "off" + }, + "security": { + "noDangerouslySetInnerHtml": "off" + } + } + }, + "javascript": { + "formatter": { + "semicolons": "asNeeded", + "quoteStyle": "single", + "trailingCommas": "all" + } + } } diff --git a/homedocs/server/bun.lockb b/homedocs/server/bun.lockb deleted file mode 100755 index 9f781d9d35e7d1afaa77a1fe45babf03e9da029f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 103289 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 z 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 J{{#Q|e*o3wFR}mt diff --git a/homedocs/server/bunfig.toml b/homedocs/server/bunfig.toml deleted file mode 100644 index d711346..0000000 --- a/homedocs/server/bunfig.toml +++ /dev/null @@ -1,9 +0,0 @@ -# Reduce memory usage at the cost of performance -smol = true -telemetry = false - -[install] -exact = true - -# Reduce memory usage at the cost of performance -smol = true \ No newline at end of file diff --git a/homedocs/server/package-lock.json b/homedocs/server/package-lock.json new file mode 100644 index 0000000..f5b8af5 --- /dev/null +++ b/homedocs/server/package-lock.json @@ -0,0 +1,3734 @@ +{ + "name": "hono", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "hono", + "dependencies": { + "@hono/node-server": "1.12.1", + "@tailwindcss/typography": "0.5.14", + "autoprefixer": "10.4.20", + "chokidar": "3.6.0", + "cssnano": "7.0.5", + "daisyui": "4.12.10", + "glob": "11.0.0", + "hono": "4.5.8", + "markdown-it": "14.1.0", + "markdown-it-emoji": "3.0.0", + "mime": "4.0.4", + "pino": "9.3.2", + "pino-pretty": "11.2.2", + "postcss": "8.4.41", + "rimraf": "6.0.1", + "tailwindcss": "3.4.10", + "zod": "3.23.8" + }, + "devDependencies": { + "@biomejs/biome": "1.8.3", + "@types/chokidar": "2.1.3", + "@types/markdown-it": "14.1.2", + "@types/markdown-it-emoji": "3.0.1", + "@types/node": "22.5.0", + "@types/tailwindcss": "3.1.0", + "esbuild": "0.23.1", + "tsx": "4.17.0" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@biomejs/biome": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-1.8.3.tgz", + "integrity": "sha512-/uUV3MV+vyAczO+vKrPdOW0Iaet7UnJMU4bNMinggGJTAnBPjCoLEYcyYtYHNnUNYlv4xZMH6hVIQCAozq8d5w==", + "dev": true, + "hasInstallScript": true, + "license": "MIT OR Apache-2.0", + "bin": { + "biome": "bin/biome" + }, + "engines": { + "node": ">=14.21.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/biome" + }, + "optionalDependencies": { + "@biomejs/cli-darwin-arm64": "1.8.3", + "@biomejs/cli-darwin-x64": "1.8.3", + "@biomejs/cli-linux-arm64": "1.8.3", + "@biomejs/cli-linux-arm64-musl": "1.8.3", + "@biomejs/cli-linux-x64": "1.8.3", + "@biomejs/cli-linux-x64-musl": "1.8.3", + "@biomejs/cli-win32-arm64": "1.8.3", + "@biomejs/cli-win32-x64": "1.8.3" + } + }, + "node_modules/@biomejs/cli-darwin-arm64": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.8.3.tgz", + "integrity": "sha512-9DYOjclFpKrH/m1Oz75SSExR8VKvNSSsLnVIqdnKexj6NwmiMlKk94Wa1kZEdv6MCOHGHgyyoV57Cw8WzL5n3A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-darwin-x64": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.8.3.tgz", + "integrity": "sha512-UeW44L/AtbmOF7KXLCoM+9PSgPo0IDcyEUfIoOXYeANaNXXf9mLUwV1GeF2OWjyic5zj6CnAJ9uzk2LT3v/wAw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-arm64": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.8.3.tgz", + "integrity": "sha512-fed2ji8s+I/m8upWpTJGanqiJ0rnlHOK3DdxsyVLZQ8ClY6qLuPc9uehCREBifRJLl/iJyQpHIRufLDeotsPtw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-arm64-musl": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.8.3.tgz", + "integrity": "sha512-9yjUfOFN7wrYsXt/T/gEWfvVxKlnh3yBpnScw98IF+oOeCYb5/b/+K7YNqKROV2i1DlMjg9g/EcN9wvj+NkMuQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-x64": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-1.8.3.tgz", + "integrity": "sha512-I8G2QmuE1teISyT8ie1HXsjFRz9L1m5n83U1O6m30Kw+kPMPSKjag6QGUn+sXT8V+XWIZxFFBoTDEDZW2KPDDw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-x64-musl": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.8.3.tgz", + "integrity": "sha512-UHrGJX7PrKMKzPGoEsooKC9jXJMa28TUSMjcIlbDnIO4EAavCoVmNQaIuUSH0Ls2mpGMwUIf+aZJv657zfWWjA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-win32-arm64": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.8.3.tgz", + "integrity": "sha512-J+Hu9WvrBevfy06eU1Na0lpc7uR9tibm9maHynLIoAjLZpQU3IW+OKHUtyL8p6/3pT2Ju5t5emReeIS2SAxhkQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-win32-x64": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-1.8.3.tgz", + "integrity": "sha512-/PJ59vA1pnQeKahemaQf4Nyj7IKUvGQSc3Ze1uIGi+Wvr1xF7rGobSrAAG01T/gUDG21vkDsZYM03NAmPiVkqg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", + "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", + "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", + "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", + "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", + "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", + "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", + "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", + "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", + "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", + "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", + "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", + "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", + "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", + "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", + "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", + "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", + "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", + "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", + "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", + "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", + "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", + "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", + "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", + "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@hono/node-server": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.12.1.tgz", + "integrity": "sha512-C9l+08O8xtXB7Ppmy8DjBFH1hYji7JKzsU32Yt1poIIbdPp6S7aOI8IldDHD9YFJ55lv2c21ovNrmxatlHfhAg==", + "license": "MIT", + "engines": { + "node": ">=18.14.1" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "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/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "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==", + "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==", + "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==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@tailwindcss/typography": { + "version": "0.5.14", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.14.tgz", + "integrity": "sha512-ZvOCjUbsJBjL9CxQBn+VEnFpouzuKhxh2dH8xMIWHILL+HfOYtlAkWcyoon8LlzE53d2Yo6YO6pahKKNW3q1YQ==", + "license": "MIT", + "dependencies": { + "lodash.castarray": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "postcss-selector-parser": "6.0.10" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } + }, + "node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "license": "ISC", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/chokidar": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@types/chokidar/-/chokidar-2.1.3.tgz", + "integrity": "sha512-6qK3xoLLAhQVTucQGHTySwOVA1crHRXnJeLwqK6KIFkkKa2aoMFXh+WEi8PotxDtvN6MQJLyYN9ag9P6NLV81w==", + "deprecated": "This is a stub types definition. chokidar provides its own type definitions, so you do not need this installed.", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "*" + } + }, + "node_modules/@types/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/markdown-it": { + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/linkify-it": "^5", + "@types/mdurl": "^2" + } + }, + "node_modules/@types/markdown-it-emoji": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/markdown-it-emoji/-/markdown-it-emoji-3.0.1.tgz", + "integrity": "sha512-cz1j8R35XivBqq9mwnsrP2fsz2yicLhB8+PDtuVkKOExwEdsVBNI+ROL3sbhtR5occRZ66vT0QnwFZCqdjf3pA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/markdown-it": "^14" + } + }, + "node_modules/@types/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.5.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.0.tgz", + "integrity": "sha512-DkFrJOe+rfdHTqqMg0bSNlGlQ85hSoh2TPzZyhHsXnMtligRWpxUySiyw8FY14ITt24HVCiQPWxS3KO/QlGmWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/tailwindcss": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/tailwindcss/-/tailwindcss-3.1.0.tgz", + "integrity": "sha512-JxPzrm609hzvF4nmOI3StLjbBEP3WWQxDDJESqR1nh94h7gyyy3XSl0hn5RBMJ9mPudlLjtaXs5YEBtLw7CnPA==", + "deprecated": "This is a stub types definition. tailwindcss provides its own type definitions, so you do not need this installed.", + "dev": true, + "license": "MIT", + "dependencies": { + "tailwindcss": "*" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "license": "MIT" + }, + "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==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "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==", + "license": "Python-2.0" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "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==", + "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/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "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" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001651", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz", + "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "license": "MIT" + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-declaration-sorter": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", + "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", + "license": "ISC", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "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" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-selector-tokenizer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.8.0.tgz", + "integrity": "sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "fastparse": "^1.1.2" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "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==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.0.5.tgz", + "integrity": "sha512-Aq0vqBLtpTT5Yxj+hLlLfNPFuRQCDIjx5JQAhhaedQKLNDvDGeVziF24PS+S1f0Z5KCxWvw0QVI3VNHNBITxVQ==", + "license": "MIT", + "dependencies": { + "cssnano-preset-default": "^7.0.5", + "lilconfig": "^3.1.2" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/cssnano-preset-default": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.5.tgz", + "integrity": "sha512-Jbzja0xaKwc5JzxPQoc+fotKpYtWEu4wQLMQe29CM0FjjdRjA4omvbGHl2DTGgARKxSTpPssBsok+ixv8uTBqw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "css-declaration-sorter": "^7.2.0", + "cssnano-utils": "^5.0.0", + "postcss-calc": "^10.0.1", + "postcss-colormin": "^7.0.2", + "postcss-convert-values": "^7.0.3", + "postcss-discard-comments": "^7.0.2", + "postcss-discard-duplicates": "^7.0.1", + "postcss-discard-empty": "^7.0.0", + "postcss-discard-overridden": "^7.0.0", + "postcss-merge-longhand": "^7.0.3", + "postcss-merge-rules": "^7.0.3", + "postcss-minify-font-values": "^7.0.0", + "postcss-minify-gradients": "^7.0.0", + "postcss-minify-params": "^7.0.2", + "postcss-minify-selectors": "^7.0.3", + "postcss-normalize-charset": "^7.0.0", + "postcss-normalize-display-values": "^7.0.0", + "postcss-normalize-positions": "^7.0.0", + "postcss-normalize-repeat-style": "^7.0.0", + "postcss-normalize-string": "^7.0.0", + "postcss-normalize-timing-functions": "^7.0.0", + "postcss-normalize-unicode": "^7.0.2", + "postcss-normalize-url": "^7.0.0", + "postcss-normalize-whitespace": "^7.0.0", + "postcss-ordered-values": "^7.0.1", + "postcss-reduce-initial": "^7.0.2", + "postcss-reduce-transforms": "^7.0.0", + "postcss-svgo": "^7.0.1", + "postcss-unique-selectors": "^7.0.2" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/cssnano-utils": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-5.0.0.tgz", + "integrity": "sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ==", + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "license": "CC0-1.0" + }, + "node_modules/culori": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/culori/-/culori-3.3.0.tgz", + "integrity": "sha512-pHJg+jbuFsCjz9iclQBqyL3B2HLCBF71BwVNujUYEvCeQMvV97R59MNK3R2+jgJ3a1fcZgI9B3vYgz8lzr/BFQ==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/daisyui": { + "version": "4.12.10", + "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-4.12.10.tgz", + "integrity": "sha512-jp1RAuzbHhGdXmn957Z2XsTZStXGHzFfF0FgIOZj3Wv9sH7OZgLfXTRZNfKVYxltGUOBsG1kbWAdF5SrqjebvA==", + "license": "MIT", + "dependencies": { + "css-selector-tokenizer": "^0.8", + "culori": "^3", + "picocolors": "^1", + "postcss-js": "^4" + }, + "engines": { + "node": ">=16.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/daisyui" + } + }, + "node_modules/dateformat": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "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==", + "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==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "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==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "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/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz", + "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==", + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", + "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.23.1", + "@esbuild/android-arm": "0.23.1", + "@esbuild/android-arm64": "0.23.1", + "@esbuild/android-x64": "0.23.1", + "@esbuild/darwin-arm64": "0.23.1", + "@esbuild/darwin-x64": "0.23.1", + "@esbuild/freebsd-arm64": "0.23.1", + "@esbuild/freebsd-x64": "0.23.1", + "@esbuild/linux-arm": "0.23.1", + "@esbuild/linux-arm64": "0.23.1", + "@esbuild/linux-ia32": "0.23.1", + "@esbuild/linux-loong64": "0.23.1", + "@esbuild/linux-mips64el": "0.23.1", + "@esbuild/linux-ppc64": "0.23.1", + "@esbuild/linux-riscv64": "0.23.1", + "@esbuild/linux-s390x": "0.23.1", + "@esbuild/linux-x64": "0.23.1", + "@esbuild/netbsd-x64": "0.23.1", + "@esbuild/openbsd-arm64": "0.23.1", + "@esbuild/openbsd-x64": "0.23.1", + "@esbuild/sunos-x64": "0.23.1", + "@esbuild/win32-arm64": "0.23.1", + "@esbuild/win32-ia32": "0.23.1", + "@esbuild/win32-x64": "0.23.1" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/fast-copy": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.2.tgz", + "integrity": "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-redact": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", + "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "license": "MIT" + }, + "node_modules/fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.7.6", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.6.tgz", + "integrity": "sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz", + "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/help-me": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz", + "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==", + "license": "MIT" + }, + "node_modules/hono": { + "version": "4.5.8", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.5.8.tgz", + "integrity": "sha512-pqpSlcdqGkpTTRpLYU1PnCz52gVr0zVR9H5GzMyJWuKQLLEBQxh96q45QizJ2PPX8NATtz2mu31/PKW/Jt+90Q==", + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "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": "BSD-3-Clause" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.1.tgz", + "integrity": "sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/lodash.castarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", + "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.0.tgz", + "integrity": "sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==", + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/markdown-it-emoji": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/markdown-it-emoji/-/markdown-it-emoji-3.0.0.tgz", + "integrity": "sha512-+rUD93bXHubA4arpEZO3q80so0qgoFJEKRkRbjKX8RTdca89v2kfyF+xR3i2sQTwql9tpPZPOQN5B+PunspXRg==", + "license": "MIT" + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "license": "CC0-1.0" + }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.4.tgz", + "integrity": "sha512-v8yqInVjhXyqP6+Kw4fV3ZzeMRqEW6FotRsKXjRS5VMTNIuXsdRoAvklpoRgSqXm6o9VNH4/C0mgedko9DdLsQ==", + "funding": [ + "https://github.com/sponsors/broofa" + ], + "license": "MIT", + "bin": { + "mime": "bin/cli.js" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/minimatch": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "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==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/on-exit-leak-free": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pino": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/pino/-/pino-9.3.2.tgz", + "integrity": "sha512-WtARBjgZ7LNEkrGWxMBN/jvlFiE17LTbBoH0konmBU684Kd0uIiDwBXlcTCW7iJnA6HfIKwUssS/2AC6cDEanw==", + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.1.1", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^1.2.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^4.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^4.0.1", + "thread-stream": "^3.0.0" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-abstract-transport": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz", + "integrity": "sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==", + "license": "MIT", + "dependencies": { + "readable-stream": "^4.0.0", + "split2": "^4.0.0" + } + }, + "node_modules/pino-pretty": { + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-11.2.2.tgz", + "integrity": "sha512-2FnyGir8nAJAqD3srROdrF1J5BIcMT4nwj7hHSc60El6Uxlym00UbCCd8pYIterstVBFlMyF1yFV8XdGIPbj4A==", + "license": "MIT", + "dependencies": { + "colorette": "^2.0.7", + "dateformat": "^4.6.3", + "fast-copy": "^3.0.2", + "fast-safe-stringify": "^2.1.1", + "help-me": "^5.0.0", + "joycon": "^3.1.1", + "minimist": "^1.2.6", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^1.0.0", + "pump": "^3.0.0", + "readable-stream": "^4.0.0", + "secure-json-parse": "^2.4.0", + "sonic-boom": "^4.0.1", + "strip-json-comments": "^3.1.1" + }, + "bin": { + "pino-pretty": "bin.js" + } + }, + "node_modules/pino-std-serializers": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz", + "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==", + "license": "MIT" + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.4.41", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", + "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-calc": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.0.2.tgz", + "integrity": "sha512-DT/Wwm6fCKgpYVI7ZEWuPJ4az8hiEHtCUeYjZXqU7Ou4QqYh1Df2yCQ7Ca6N7xqKPFkxN3fhf+u9KSoOCJNAjg==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12 || ^20.9 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.38" + } + }, + "node_modules/postcss-colormin": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.2.tgz", + "integrity": "sha512-YntRXNngcvEvDbEjTdRWGU606eZvB5prmHG4BF0yLmVpamXbpsRJzevyy6MZVyuecgzI2AWAlvFi8DAeCqwpvA==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-api": "^3.0.0", + "colord": "^2.9.3", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-convert-values": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.3.tgz", + "integrity": "sha512-yJhocjCs2SQer0uZ9lXTMOwDowbxvhwFVrZeS6NPEij/XXthl73ggUmfwVvJM+Vaj5gtCKJV1jiUu4IhAUkX/Q==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-comments": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.2.tgz", + "integrity": "sha512-/Hje9Ls1IYcB9duELO/AyDUJI6aQVY3h5Rj1ziXgaLYCTi1iVBLnjg/TS0D6NszR/kDG6I86OwLmAYe+bvJjiQ==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.1.tgz", + "integrity": "sha512-oZA+v8Jkpu1ct/xbbrntHRsfLGuzoP+cpt0nJe5ED2FQF8n8bJtn7Bo28jSmBYwqgqnqkuSXJfSUEE7if4nClQ==", + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-empty": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.0.tgz", + "integrity": "sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==", + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.0.tgz", + "integrity": "sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w==", + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-merge-longhand": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.3.tgz", + "integrity": "sha512-8waYomFxshdv6M9Em3QRM9MettRLDRcH2JQi2l0Z1KlYD/vhal3gbkeSES0NuACXOlZBB0V/B0AseHZaklzWOA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^7.0.3" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-merge-rules": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.3.tgz", + "integrity": "sha512-2eSas2p3voPxNfdI5sQrvIkMaeUHpVc3EezgVs18hz/wRTQAC9U99tp9j3W5Jx9/L3qHkEDvizEx/LdnmumIvQ==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^5.0.0", + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.0.tgz", + "integrity": "sha512-2ckkZtgT0zG8SMc5aoNwtm5234eUx1GGFJKf2b1bSp8UflqaeFzR50lid4PfqVI9NtGqJ2J4Y7fwvnP/u1cQog==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.0.tgz", + "integrity": "sha512-pdUIIdj/C93ryCHew0UgBnL2DtUS3hfFa5XtERrs4x+hmpMYGhbzo6l/Ir5de41O0GaKVpK1ZbDNXSY6GkXvtg==", + "license": "MIT", + "dependencies": { + "colord": "^2.9.3", + "cssnano-utils": "^5.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-minify-params": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.2.tgz", + "integrity": "sha512-nyqVLu4MFl9df32zTsdcLqCFfE/z2+f8GE1KHPxWOAmegSo6lpV2GNy5XQvrzwbLmiU7d+fYay4cwto1oNdAaQ==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "cssnano-utils": "^5.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.3.tgz", + "integrity": "sha512-SxTgUQSgBk6wEqzQZKEv1xQYIp9UBju6no9q+npohzSdhuSICQdkqmD1UMKkZWItS3olJSJMDDEY9WOJ5oGJew==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.0.tgz", + "integrity": "sha512-ABisNUXMeZeDNzCQxPxBCkXexvBrUHV+p7/BXOY+ulxkcjUZO0cp8ekGBwvIh2LbCwnWbyMPNJVtBSdyhM2zYQ==", + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.0.tgz", + "integrity": "sha512-lnFZzNPeDf5uGMPYgGOw7v0BfB45+irSRz9gHQStdkkhiM0gTfvWkWB5BMxpn0OqgOQuZG/mRlZyJxp0EImr2Q==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.0.tgz", + "integrity": "sha512-I0yt8wX529UKIGs2y/9Ybs2CelSvItfmvg/DBIjTnoUSrPxSV7Z0yZ8ShSVtKNaV/wAY+m7bgtyVQLhB00A1NQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.0.tgz", + "integrity": "sha512-o3uSGYH+2q30ieM3ppu9GTjSXIzOrRdCUn8UOMGNw7Af61bmurHTWI87hRybrP6xDHvOe5WlAj3XzN6vEO8jLw==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-string": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-7.0.0.tgz", + "integrity": "sha512-w/qzL212DFVOpMy3UGyxrND+Kb0fvCiBBujiaONIihq7VvtC7bswjWgKQU/w4VcRyDD8gpfqUiBQ4DUOwEJ6Qg==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.0.tgz", + "integrity": "sha512-tNgw3YV0LYoRwg43N3lTe3AEWZ66W7Dh7lVEpJbHoKOuHc1sLrzMLMFjP8SNULHaykzsonUEDbKedv8C+7ej6g==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.2.tgz", + "integrity": "sha512-ztisabK5C/+ZWBdYC+Y9JCkp3M9qBv/XFvDtSw0d/XwfT3UaKeW/YTm/MD/QrPNxuecia46vkfEhewjwcYFjkg==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-url": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-7.0.0.tgz", + "integrity": "sha512-+d7+PpE+jyPX1hDQZYG+NaFD+Nd2ris6r8fPTBAjE8z/U41n/bib3vze8x7rKs5H1uEw5ppe9IojewouHk0klQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.0.tgz", + "integrity": "sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-ordered-values": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-7.0.1.tgz", + "integrity": "sha512-irWScWRL6nRzYmBOXReIKch75RRhNS86UPUAxXdmW/l0FcAsg0lvAXQCby/1lymxn/o0gVa6Rv/0f03eJOwHxw==", + "license": "MIT", + "dependencies": { + "cssnano-utils": "^5.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.2.tgz", + "integrity": "sha512-pOnu9zqQww7dEKf62Nuju6JgsW2V0KRNBHxeKohU+JkHd/GAH5uvoObqFLqkeB2n20mr6yrlWDvo5UBU5GnkfA==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.0.tgz", + "integrity": "sha512-pnt1HKKZ07/idH8cpATX/ujMbtOGhUfE+m8gbqwJE05aTaNw8gbo34a2e3if0xc0dlu75sUOiqvwCGY3fzOHew==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.0.1.tgz", + "integrity": "sha512-0WBUlSL4lhD9rA5k1e5D8EN5wCEyZD6HJk0jIvRxl+FDVOMlJ7DePHYWGGVc5QRqrJ3/06FTXM0bxjmJpmTPSA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^3.3.2" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >= 18" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.2.tgz", + "integrity": "sha512-CjSam+7Vf8cflJQsHrMS0P2hmy9u0+n/P001kb5eAszLmhjMqrt/i5AqQuNFihhViwDvEAezqTmXqaYXL2ugMw==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-warning": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.0.tgz", + "integrity": "sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw==", + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "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/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "license": "MIT" + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readable-stream": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", + "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", + "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", + "license": "ISC", + "dependencies": { + "glob": "^11.0.0", + "package-json-from-dist": "^1.0.0" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "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": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "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/safe-stable-stringify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/secure-json-parse": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==", + "license": "BSD-3-Clause" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sonic-boom": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.0.1.tgz", + "integrity": "sha512-hTSD/6JMLyT4r9zeof6UtuBDpjJ9sO08/nmS5djaA9eozT9oOlNdpXSnzcgj4FTqpk3nkLrs61l4gip9r1HCrQ==", + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "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==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/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==", + "license": "MIT" + }, + "node_modules/string-width-cjs/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==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylehacks": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.3.tgz", + "integrity": "sha512-4DqtecvI/Nd+2BCvW9YEF6lhBN5UM50IJ1R3rnEAhBwbCKf4VehRf+uqvnVArnBayjYD/WtT3g0G/HSRxWfTRg==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/sucrase/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==", + "license": "ISC" + }, + "node_modules/sucrase/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svgo": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", + "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", + "license": "MIT", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^5.1.0", + "css-tree": "^2.3.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.10.tgz", + "integrity": "sha512-KWZkVPm7yJRhdu4SRSl9d4AK2wM3a50UsvgHZO7xY77NQr2V+fIrEuoDGQcbvswWvFGbS2f6e+jC/6WJm1Dl0w==", + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/tailwindcss/node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "real-require": "^0.2.0" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "license": "Apache-2.0" + }, + "node_modules/tsx": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.17.0.tgz", + "integrity": "sha512-eN4mnDA5UMKDt4YZixo9tBioibaMBpoxBkD+rIPAjVmYERSG0/dWEY1CEFuV89CgASlKL499q8AhmkMnnjtOJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.23.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "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==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/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==", + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/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==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/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==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", + "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/zod": { + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/homedocs/server/package.json b/homedocs/server/package.json index 598b4f4..0f7d3be 100644 --- a/homedocs/server/package.json +++ b/homedocs/server/package.json @@ -1,38 +1,38 @@ { - "name": "server", - "version": "1.0.50", + "name": "hono", + "type": "module", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "dev": "bun run --watch src/index.ts", - "start": "bun src/index.ts", - "start:production": "NODE_ENV=production bun src/index.ts", - "build": "bun run --bun scripts/build.ts", - "biome:fix": "biome check --apply src" + "dev": "tsx scripts/buildCssDev.ts && tsx watch src/index.ts", + "build": "tsx scripts/build.ts", + "biome": "biome check --fix src" }, "dependencies": { - "@kitajs/html": "4.1.0", - "@kitajs/ts-html-plugin": "4.0.1", + "@hono/node-server": "1.12.1", "chokidar": "3.6.0", - "elysia": "1.0.22", - "glob": "10.4.1", + "glob": "11.0.0", + "hono": "4.5.8", "markdown-it": "14.1.0", "markdown-it-emoji": "3.0.0", - "pino": "9.1.0", - "pino-pretty": "11.1.0", - "zod": "3.23.8" + "mime": "4.0.4", + "pino": "9.3.2", + "pino-pretty": "11.2.2", + "rimraf": "6.0.1", + "zod": "3.23.8", + "postcss": "8.4.41", + "tailwindcss": "3.4.10", + "autoprefixer": "10.4.20", + "cssnano": "7.0.5", + "daisyui": "4.12.10", + "@tailwindcss/typography": "0.5.14" }, "devDependencies": { - "@biomejs/biome": "1.7.3", - "@tailwindcss/typography": "0.5.13", + "@biomejs/biome": "1.8.3", "@types/chokidar": "2.1.3", - "@types/markdown-it": "14.1.1", + "@types/markdown-it": "14.1.2", "@types/markdown-it-emoji": "3.0.1", - "autoprefixer": "10.4.19", - "bun-types": "1.1.10", - "cssnano": "7.0.1", - "daisyui": "4.11.1", - "postcss": "8.4.38", - "tailwindcss": "3.4.3" - }, - "module": "src/index.js" -} \ No newline at end of file + "@types/node": "22.5.0", + "@types/tailwindcss": "3.1.0", + "esbuild": "0.23.1", + "tsx": "4.17.0" + } +} diff --git a/homedocs/server/scripts/build.ts b/homedocs/server/scripts/build.ts index 80b5ee2..3b33133 100644 --- a/homedocs/server/scripts/build.ts +++ b/homedocs/server/scripts/build.ts @@ -1,4 +1,4 @@ -// import { build } from "bun" +import { build } from 'esbuild' import logger from "../src/utils/logger" import { buildCss } from "./tailwind" @@ -8,11 +8,19 @@ await buildCss() logger.info('CSS build finished ✓') // build the server -// TODO use optimized bun build -// await Bun.build({ -// entrypoints: ['./src/index.ts'], -// outdir: './dist', -// target: 'bun', -// }) +const buildOutput = await build({ + entryPoints: ['./src/index.ts'], + outfile: './dist/index.cjs', + platform: 'node', + bundle: true, +}) + +buildOutput.errors.forEach(error => { + logger.error(error.text) +}) + +buildOutput.warnings.forEach(warning => { + logger.warn(warning.text) +}) logger.info('Server build finished ✓') \ No newline at end of file diff --git a/homedocs/server/scripts/buildCssDev.ts b/homedocs/server/scripts/buildCssDev.ts new file mode 100644 index 0000000..8c97cb8 --- /dev/null +++ b/homedocs/server/scripts/buildCssDev.ts @@ -0,0 +1,3 @@ +import { buildCss } from "./tailwind"; + +await buildCss() diff --git a/homedocs/server/scripts/tailwind.ts b/homedocs/server/scripts/tailwind.ts index d5b6400..da7221e 100644 --- a/homedocs/server/scripts/tailwind.ts +++ b/homedocs/server/scripts/tailwind.ts @@ -1,9 +1,11 @@ import postcss from 'postcss' +import { readFile } from 'node:fs/promises' import autoprefixer from 'autoprefixer' import tw, { type Config } from 'tailwindcss' import typography from '@tailwindcss/typography' import daisyui from 'daisyui' import cssnano from 'cssnano' +import { safeWriteFileToPath } from '../src/utils/file' const tailwindConfig: Config = { content: ["./src/**/*.tsx"], @@ -33,9 +35,7 @@ const tailwindConfig: Config = { * @returns {Promise} A promise that resolves when the CSS file is built. */ export const buildCss = async () => { - const sourceText = await Bun.file('./src/css/main.css').text() - const tailwind = tw(tailwindConfig) - const autoprefixerPlugin = autoprefixer() + const sourceText = await readFile('./src/css/main.css') const { css } = await postcss([ tw(tailwindConfig), autoprefixer(), @@ -49,5 +49,5 @@ export const buildCss = async () => { } ) - await Bun.write('./dist/main.css', css) + await safeWriteFileToPath('./dist/main.css', css) }; \ No newline at end of file diff --git a/homedocs/server/src/fileWatcher.ts b/homedocs/server/src/fileWatcher.ts index f2f7406..058c61d 100644 --- a/homedocs/server/src/fileWatcher.ts +++ b/homedocs/server/src/fileWatcher.ts @@ -3,9 +3,9 @@ import { buildDocs } from './htmlBuilder' import environmentVariables from './utils/environmentVariables' import logger from './utils/logger' -let timeout: Timer | null = null +let timeout: NodeJS.Timeout | null = null -const triggerNewBuild = async () => { +export const triggerNewBuild = async () => { if (timeout) { clearTimeout(timeout) } diff --git a/homedocs/server/src/htmlBuilder/index.ts b/homedocs/server/src/htmlBuilder/index.tsx similarity index 52% rename from homedocs/server/src/htmlBuilder/index.ts rename to homedocs/server/src/htmlBuilder/index.tsx index 9a8c187..3d83dd8 100644 --- a/homedocs/server/src/htmlBuilder/index.ts +++ b/homedocs/server/src/htmlBuilder/index.tsx @@ -1,30 +1,38 @@ -import { $, FileSink } from 'bun' -import layout from '../templates/layout' -import { generateNavigation } from '../templates/navigation' +import { appendFile, writeFile } from 'node:fs/promises' +import { rimraf } from 'rimraf' +import Layout from '../templates/layout' +import layoutBottom from '../templates/merged/layoutBottom' +import layoutTop from '../templates/merged/layoutTop' +import Page from '../templates/merged/page' +import { Navigation } from '../templates/navigation' import environmentVariables from '../utils/environmentVariables' +import { safeWriteFileToPath } from '../utils/file' +import logger from '../utils/logger' import { generateNavForFolder } from './navigation' import type { Breadcrumb, NavigationEntry } from './types' -import layoutTop from '../templates/merged/layoutTop' -import layoutBottom from '../templates/merged/layoutBottom' -import page from '../templates/merged/page' -import logger from '../utils/logger' + +const MERGED_DOC_PATH = './dist/mergedDocs.html' const buildHtml = async ( navigationEntry: NavigationEntry, fullNavigationStructure: NavigationEntry[], ) => { - const html = layout( - navigationEntry.title, - navigationEntry.htmlContent!, - generateNavigation( - fullNavigationStructure, - navigationEntry.pathPrefix!, - navigationEntry, - ), - navigationEntry.pathPrefix!, - ).toString() + const html = ( + + + + ) + const fileName = `./dist/docs/${navigationEntry.path || 'index'}.html` - await Bun.write(fileName, `${html}`) + + await safeWriteFileToPath(fileName, `${html}`) logger.info(`Built ${fileName}`) } @@ -49,44 +57,41 @@ export const buildDocs = async () => { ) // remove old files - await $`rm -rf ./dist/docs`.quiet() + await rimraf('./dist/docs') await buildLevel(navigationStructure, navigationStructure) } -const buildLevelInOnePage = ( - writer: FileSink, +const buildLevelInOnePage = async ( navigationStructure: NavigationEntry[], breadcrumbs: Breadcrumb[] = [], ) => { for (const navigationEntry of navigationStructure) { if (typeof navigationEntry.htmlContent === 'string') { - writer.write(page( - navigationEntry.title, - navigationEntry.htmlContent, - [ - ...breadcrumbs, - { - name: navigationEntry.title, - isFolder: false, - }, - ], - ).toString()) - writer.flush() + const renderedPage = ( + + ) + + await appendFile(MERGED_DOC_PATH, renderedPage.toString()) } if (navigationEntry.children) { - buildLevelInOnePage( - writer, - navigationEntry.children, - [ - ...breadcrumbs, - { - name: navigationEntry.title, - isFolder: navigationEntry.htmlContent === undefined, - }, - ], - ) + await buildLevelInOnePage(navigationEntry.children, [ + ...breadcrumbs, + { + name: navigationEntry.title, + isFolder: navigationEntry.htmlContent === undefined, + }, + ]) } } } @@ -96,21 +101,15 @@ export const buildDocsInOnePage = async () => { environmentVariables.docsBasePath, ) - await Bun.$`rm ./dist/mergedDocs.html`.quiet() + await rimraf(MERGED_DOC_PATH) - const file = Bun.file('./dist/mergedDocs.html') - const writer = file.writer(); + await safeWriteFileToPath(MERGED_DOC_PATH, '') - writer.write(layoutTop) - writer.flush() + await appendFile(MERGED_DOC_PATH, layoutTop) - buildLevelInOnePage(writer, navigationStructure) + await buildLevelInOnePage(navigationStructure) - writer.write(layoutBottom) - writer.flush() - writer.end() + await appendFile(MERGED_DOC_PATH, layoutBottom) - return file + return MERGED_DOC_PATH } - -await buildDocsInOnePage() \ No newline at end of file diff --git a/homedocs/server/src/htmlBuilder/navigation.ts b/homedocs/server/src/htmlBuilder/navigation.ts index a44c030..15c875c 100644 --- a/homedocs/server/src/htmlBuilder/navigation.ts +++ b/homedocs/server/src/htmlBuilder/navigation.ts @@ -84,20 +84,19 @@ export const generateNavForFolder = async ( .sort((a, b) => { if (a.mainIndex) { return -1 - } else if (b.mainIndex) { + } + if (b.mainIndex) { return 1 - } else { - return a.title.localeCompare(b.title) } + return a.title.localeCompare(b.title) }) .map(({ mainIndex, children, ...rest }) => { if (!children?.length) { return rest - } else { - return { - ...rest, - children, - } + } + return { + ...rest, + children, } }) } diff --git a/homedocs/server/src/htmlBuilder/types.ts b/homedocs/server/src/htmlBuilder/types.ts index 9808550..482dd36 100644 --- a/homedocs/server/src/htmlBuilder/types.ts +++ b/homedocs/server/src/htmlBuilder/types.ts @@ -11,4 +11,4 @@ export type NavigationEntry = { export type Breadcrumb = { name: string isFolder: boolean -} \ No newline at end of file +} diff --git a/homedocs/server/src/index.ts b/homedocs/server/src/index.ts index 33a29b9..053dee0 100644 --- a/homedocs/server/src/index.ts +++ b/homedocs/server/src/index.ts @@ -1,28 +1,16 @@ +import { serve } from '@hono/node-server' + import { buildCss } from '../scripts/tailwind' import { startWatcher } from './fileWatcher' import logger from './utils/logger' import { webserver } from './webserver' -// 2 parts -// 1. markdown to html watcher -// 2. webserver - -// 1. markdown files werden in html umgewandelt mit markdown-it oder remark -// 1. dann wird html in vue file integriert und gebaut -// 1. alles muss relative parts haben, css gibt es nur im root und wirkt korrekt relativ aufgelöst -// 1. bilder werden dazu kopiert und relativ verlinkt - -// if dev mode only rebuild css -if (process.env.NODE_ENV !== 'production') { - logger.info('Homedocs is running in development mode') - await buildCss() - logger.info('Css built') -} - startWatcher() -// await buildDocs() -// logger.info('Initial docs built') -webserver.listen(3000) +serve({ + hostname: '0.0.0.0', + fetch: webserver.fetch, + port: 3000, +}) -logger.info(`🦊 Elysia is running at ${webserver.server?.url}`) +logger.info(' Server is running at port 3000') diff --git a/homedocs/server/src/markdown/markdownParser.ts b/homedocs/server/src/markdown/markdownParser.ts index 7da9157..9183a14 100644 --- a/homedocs/server/src/markdown/markdownParser.ts +++ b/homedocs/server/src/markdown/markdownParser.ts @@ -1,3 +1,4 @@ +import { readFile } from 'node:fs/promises' import markdownit from 'markdown-it' import type Markdownit from 'markdown-it' import { full as emoji } from 'markdown-it-emoji' @@ -17,26 +18,31 @@ const md = markdownit({ .use(frontMatterPlugin) as MarkdownIt export const parseFile = async (filePath: string, filename: string) => { - const markdownContentFile = Bun.file(filePath) - const markdownContent = await markdownContentFile.text() - const htmlContent = md.render(markdownContent, { filePath }) + try { + const markdownContentFile = await readFile(filePath) + const markdownContent = markdownContentFile.toString() + const htmlContent = md.render(markdownContent, { filePath }) - let title = filename + let title = filename - if (title.endsWith('.md')) { - title = - filePath === 'docs/index.md' - ? 'Homedocs' - : filename.substring(0, filename.length - 3) - } + if (title.endsWith('.md')) { + title = + filePath === 'docs/index.md' + ? 'Homedocs' + : filename.substring(0, filename.length - 3) + } - if (md.frontMatterData?.title) { - title = md.frontMatterData.title - } - md.frontMatterData = {} // reset frontmatter data + if (md.frontMatterData?.title) { + title = md.frontMatterData.title + } + md.frontMatterData = {} // reset frontmatter data - return { - title, - content: htmlContent, + return { + title, + content: htmlContent, + } + } catch (error) { + console.error(`markdownParser::parseFile: Error reading file: ${filePath}`) + throw error } } diff --git a/homedocs/server/src/templates/404.tsx b/homedocs/server/src/templates/404.tsx index 5261761..8603cdb 100644 --- a/homedocs/server/src/templates/404.tsx +++ b/homedocs/server/src/templates/404.tsx @@ -1,4 +1,6 @@ -export default (path: string) => ( +import type { FC } from 'hono/jsx' + +const Page: FC<{ path: string }> = ({ path }) => ( Homedocs - 404 Not Found @@ -25,3 +27,5 @@ export default (path: string) => ( ) + +export default Page diff --git a/homedocs/server/src/templates/layout.tsx b/homedocs/server/src/templates/layout.tsx index cb4b88f..6bd4351 100644 --- a/homedocs/server/src/templates/layout.tsx +++ b/homedocs/server/src/templates/layout.tsx @@ -1,9 +1,9 @@ -export default ( - title: string, - content: string, - navigation: JSX.Element, - pathPrefix: string, -) => ( +import type { JSXNode } from 'hono/jsx' +import type { FC, PropsWithChildren } from 'hono/jsx' + +const layout: FC< + PropsWithChildren<{ content: string; pathPrefix: string }> +> = ({ content, children, pathPrefix }) => ( Homedocs @@ -38,7 +38,10 @@ export default (
-
{content}
+
) + +export default layout diff --git a/homedocs/server/src/templates/merged/page.tsx b/homedocs/server/src/templates/merged/page.tsx index 209df73..fc5ec57 100644 --- a/homedocs/server/src/templates/merged/page.tsx +++ b/homedocs/server/src/templates/merged/page.tsx @@ -1,28 +1,43 @@ -import { Breadcrumb } from "../../htmlBuilder/types"; +import type { FC } from 'hono/jsx' +import type { Breadcrumb } from '../../htmlBuilder/types' -export default ( - title: string, - content: string, - breadcrumbs: Breadcrumb[], -) => ( -
- -
- {content} -
-
-
+const Page: FC<{ content: string; breadcrumbs: Breadcrumb[] }> = ({ + content, + breadcrumbs, +}) => ( +
+ +
+
+
) + +export default Page diff --git a/homedocs/server/src/templates/navigation.tsx b/homedocs/server/src/templates/navigation.tsx index ac016a5..1950207 100644 --- a/homedocs/server/src/templates/navigation.tsx +++ b/homedocs/server/src/templates/navigation.tsx @@ -1,15 +1,16 @@ +import type { FC } from 'hono/jsx' import type { NavigationEntry } from '../htmlBuilder/types' -const subNavigation = ( - navigation: NavigationEntry[], - pathPrefix: string, - active: NavigationEntry, -) => ( +const SubNavigation: FC<{ + navigation: NavigationEntry[] + pathPrefix: string + active: NavigationEntry +}> = ({ navigation, pathPrefix, active }) => ( <> {navigation.map(({ title, children, path }) => (
  • {path === undefined ? ( - +
      {subNavigation(children, pathPrefix, active)}
    +
      + +
    ) : ( '' )} @@ -41,12 +48,16 @@ const subNavigation = ( ) -export const generateNavigation = ( - navigation: NavigationEntry[], - pathPrefix: string, - active: NavigationEntry, -) => ( +export const Navigation: FC<{ + navigation: NavigationEntry[] + pathPrefix: string + active: NavigationEntry +}> = ({ navigation, pathPrefix, active }) => ( ) diff --git a/homedocs/server/src/utils/file.ts b/homedocs/server/src/utils/file.ts new file mode 100644 index 0000000..ac3d2e4 --- /dev/null +++ b/homedocs/server/src/utils/file.ts @@ -0,0 +1,15 @@ +import { access, mkdir, writeFile } from 'node:fs/promises' +import path from 'node:path' + +export const safeWriteFileToPath = async ( + pathAndFileName: string, + data: string, +) => { + try { + const passedPath = path.dirname(path.resolve(pathAndFileName)) + await mkdir(passedPath, { recursive: true }) + await writeFile(path.resolve(pathAndFileName), data) + } catch (error) { + console.error('Error writing safe file', error) + } +} diff --git a/homedocs/server/src/utils/logger.ts b/homedocs/server/src/utils/logger.ts index 916fe2b..563465a 100644 --- a/homedocs/server/src/utils/logger.ts +++ b/homedocs/server/src/utils/logger.ts @@ -1,9 +1,11 @@ import pino from 'pino' import pinoPretty from 'pino-pretty' -const logger = pino(pinoPretty({ - translateTime: 'yyyy-mm-dd HH:MM:ss.l', - ignore: 'pid,level,hostname' -})) +const logger = pino( + pinoPretty({ + translateTime: 'yyyy-mm-dd HH:MM:ss.l', + ignore: 'pid,level,hostname', + }), +) -export default logger \ No newline at end of file +export default logger diff --git a/homedocs/server/src/webserver.ts b/homedocs/server/src/webserver.ts deleted file mode 100644 index 83b9eb7..0000000 --- a/homedocs/server/src/webserver.ts +++ /dev/null @@ -1,56 +0,0 @@ -import type { BunFile } from 'bun' -import { Elysia } from 'elysia' -import notFoundPage from './templates/404' -import environmentVariables from './utils/environmentVariables' -import { buildDocsInOnePage } from './htmlBuilder' - -export const webserver = new Elysia({ - serve: { - hostname: '0.0.0.0', - }, -}).get('*', async ({ path, set }) => { - let status = 200 - let responseData: BunFile | string | Promise = '' - - const fileName = path.split('/').pop() ?? '' - if (fileName === 'main.css') { - return Bun.file('./dist/main.css') - } else if (fileName === 'robots.txt') { - return Bun.file('./public/robots.txt') - } else if (fileName.startsWith('favicon')) { - return Bun.file('./public/favicon.svg') - } else if (path === '/html-export') { - return buildDocsInOnePage() - } else if ( - fileName.includes('.') && - (fileName.split('.').pop()?.length ?? 0) > 1 - ) { - const file = Bun.file(`${environmentVariables.docsBasePath}/${path}`) - if (!(await file.exists())) { - status = 404 - } else { - responseData = file - } - } else { - let htmlFile = Bun.file(`./dist/docs/${path}.html`) - - if (!(await htmlFile.exists())) { - htmlFile = Bun.file(`./dist/docs/${path}/index.html`) - if (!(await htmlFile.exists())) { - status = 404 - } else { - responseData = htmlFile - } - } else { - responseData = htmlFile - } - } - - set.status = status - - if (status === 404) { - responseData = notFoundPage(path) - set.headers['Content-Type'] = 'text/html' - } - return responseData -}) diff --git a/homedocs/server/src/webserver.tsx b/homedocs/server/src/webserver.tsx new file mode 100644 index 0000000..7c8a76f --- /dev/null +++ b/homedocs/server/src/webserver.tsx @@ -0,0 +1,47 @@ +import { readFile } from 'node:fs/promises' +import { Hono } from 'hono' +import mime from 'mime' +import { buildDocsInOnePage } from './htmlBuilder' +import NotFoundPage from './templates/404' +import environmentVariables from './utils/environmentVariables' + +export const webserver = new Hono() + +webserver.get('*', async (c) => { + const path = c.req.path + + const fileName = path.split('/').pop() ?? '' + let filePath = '' + if (fileName === 'main.css') { + filePath = './dist/main.css' + } else if (fileName === 'robots.txt') { + filePath = './public/robots.txt' + } else if (fileName.startsWith('favicon')) { + filePath = './public/favicon.svg' + } else if (path === '/html-export') { + filePath = await buildDocsInOnePage() + } else if ( + fileName.includes('.') && + (fileName.split('.').pop()?.length ?? 0) > 1 + ) { + filePath = `${environmentVariables.docsBasePath}/${path}` + } else if (path === '/') { + filePath = './dist/docs/index.html' + } else { + filePath = `./dist/docs/${path}.html` + } + + try { + const fileContent = await readFile(filePath) + + // Get the MIME type based on the file extension + const mimeType = mime.getType(filePath) || 'application/octet-stream' + + c.header('Content-Type', mimeType) + return c.body(fileContent) + } catch (error) { + console.error('webserver error') + console.error(error) + return c.html(, 404) + } +}) diff --git a/homedocs/server/tsconfig.json b/homedocs/server/tsconfig.json index 4b11059..667b7e7 100644 --- a/homedocs/server/tsconfig.json +++ b/homedocs/server/tsconfig.json @@ -1,15 +1,14 @@ { "compilerOptions": { - "target": "ES2021", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ - "module": "ES2022", /* Specify what module code is generated. */ - "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ - "types": ["bun-types"], /* Specify type package names to be included without being referenced in a source file. */ - "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ - "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ - "strict": true, /* Enable all strict type-checking options. */ - "skipLibCheck": true, /* Skip type checking all .d.ts files. */ + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "Bundler", + "strict": true, + "skipLibCheck": true, + "types": [ + "node" + ], "jsx": "react-jsx", - "jsxImportSource": "@kitajs/html", - "plugins": [{ "name": "@kitajs/ts-html-plugin" }] + "jsxImportSource": "hono/jsx", } -} +} \ No newline at end of file