From b270525ec09feacc17872105fc9c7fc9fd257c75 Mon Sep 17 00:00:00 2001
From: eryue0220
Date: Thu, 27 Aug 2026 18:55:32 +0800
Subject: [PATCH] add vite exmaple
---
.github/workflows/pages.yml | 3 +
env.d.ts | 16 +
package.json | 6 +-
pnpm-lock.yaml | 673 +++++++++++++++++++++++++++++--
src/env.d.ts | 13 -
src/lib/examples.ts | 5 +-
src/lib/playground-app.ts | 2 +-
src/lib/playgrounds.ts | 67 ++-
src/pages/examples/default.astro | 2 +-
src/pages/examples/vite.astro | 67 +++
src/pages/guide/get-started.md | 4 +-
src/pages/index.astro | 2 +-
test/examples.test.ts | 17 +
test/playgrounds.test.ts | 41 ++
tsconfig.json | 4 +-
vitest.config.ts | 7 +
16 files changed, 871 insertions(+), 58 deletions(-)
create mode 100644 env.d.ts
delete mode 100644 src/env.d.ts
create mode 100644 src/pages/examples/vite.astro
create mode 100644 test/examples.test.ts
create mode 100644 test/playgrounds.test.ts
create mode 100644 vitest.config.ts
diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml
index 97f89ba..70f5b42 100644
--- a/.github/workflows/pages.yml
+++ b/.github/workflows/pages.yml
@@ -42,6 +42,9 @@ jobs:
- name: Lint and format
run: pnpm lint && pnpm format:check
+ - name: Test
+ run: pnpm test
+
- name: Build website
run: pnpm build
diff --git a/env.d.ts b/env.d.ts
new file mode 100644
index 0000000..9c646ca
--- /dev/null
+++ b/env.d.ts
@@ -0,0 +1,16 @@
+///
+
+interface ImportMetaEnv {
+ BASE_URL: string;
+ MODE: string;
+ DEV: boolean;
+ PROD: boolean;
+ SSR: boolean;
+ readonly SITE: string;
+}
+
+interface ImportMeta {
+ readonly env: ImportMetaEnv;
+}
+
+declare module '*.css' {}
diff --git a/package.json b/package.json
index a6b6f88..29c4376 100644
--- a/package.json
+++ b/package.json
@@ -15,6 +15,7 @@
"lint:fix": "eslint . --fix",
"format": "prettier . --write",
"format:check": "prettier . --check",
+ "test": "vitest run",
"prepare": "husky"
},
"lint-staged": {
@@ -25,7 +26,7 @@
"*.{json,md,yml,yaml,css}": "prettier --write"
},
"dependencies": {
- "@postcss-go/core": "^0.0.3",
+ "@postcss-go/core": "^0.0.5",
"@tailwindcss/vite": "^4.3.3",
"astro": "^7.2.4",
"autoprefixer": "^10.5.4",
@@ -46,6 +47,7 @@
"prettier-plugin-astro": "^0.14.1",
"tailwindcss": "^4.3.3",
"typescript": "^6.0.3",
- "typescript-eslint": "^8.61.0"
+ "typescript-eslint": "^8.61.0",
+ "vitest": "^3.2.4"
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 0bda979..1becdad 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -9,8 +9,8 @@ importers:
.:
dependencies:
'@postcss-go/core':
- specifier: ^0.0.3
- version: 0.0.3
+ specifier: ^0.0.5
+ version: 0.0.5
'@tailwindcss/vite':
specifier: ^4.3.3
version: 4.3.3(vite@8.2.2(esbuild@0.28.2)(jiti@2.7.0)(yaml@2.9.0))
@@ -69,6 +69,9 @@ importers:
typescript-eslint:
specifier: ^8.61.0
version: 8.67.0(eslint@10.9.0(jiti@2.7.0))(typescript@6.0.3)
+ vitest:
+ specifier: ^3.2.4
+ version: 3.2.7(jiti@2.7.0)(lightningcss@1.33.0)(yaml@2.9.0)
packages:
@@ -674,6 +677,12 @@ packages:
'@jridgewell/trace-mapping@0.3.31':
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+ '@napi-rs/lzma-linux-x64-gnu@1.5.1':
+ resolution: {integrity: sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==}
+ engines: {node: ^22.20 || ^24.12 || >=25}
+ cpu: [x64]
+ os: [linux]
+
'@napi-rs/wasm-runtime@1.2.3':
resolution: {integrity: sha512-UMduMbqO5s5zF2NkNacMT/yK5Y5QiKvWr2+50bzIIxFDwVJ2h49b+oyjaCGPhJxd2/gC2x39EHv/gHVuu36x2Q==}
engines: {node: ^20.19.0 || ^22.13.0 || >=23.5.0}
@@ -687,38 +696,38 @@ packages:
'@oxc-project/types@0.147.0':
resolution: {integrity: sha512-IJ3s6ltHLp45S0bh7phkX+gJO7A1Wuz2EaqpAhb8WjqDwbzMiWKHhyyT42tskaWjEYXtHtVCPpnBJVT9+dcRLg==}
- '@postcss-go/core@0.0.3':
- resolution: {integrity: sha512-7WqKAPdi5j7JYAPoPhySmlEZkyHNskKweOVnS2GDq+I3qpd0294QN54p2tBrZUu5c6kr9LopCED8LWiNYEGbhQ==}
+ '@postcss-go/core@0.0.5':
+ resolution: {integrity: sha512-Vs34NCpx+TZXr/rbjJ2C3p0NiZhCiL2LkbQLYguS2ml59ll+2zGDxfY71GiKrBuatWFLw2o42lhMdBIAIjU1lg==}
engines: {node: '>=18'}
hasBin: true
- '@postcss-go/native-darwin-arm64@0.0.3':
- resolution: {integrity: sha512-k+BFg5qd+zQOqNiix2gn47L0WNwlnBVMmaeLbTd0W+uDn2bAyQZ2iXDChBP0hWTxE2BRcwrjE/rmKXaVNPzRmA==}
+ '@postcss-go/native-darwin-arm64@0.0.5':
+ resolution: {integrity: sha512-7GQw+nWVsoBYUDEYYNmdj5iE8fIq5ObxQBX+u/wizlpHCviq72cHtjiy05aawKNB4Vshm+Dk7JoQ8bjgpATHqQ==}
cpu: [arm64]
os: [darwin]
- '@postcss-go/native-darwin-x64@0.0.3':
- resolution: {integrity: sha512-PmMOebiU9/n0Uxv5xEedDpggR6yI6DX7vmxl9gbL4/xCSwOoU1EWeSom/x5DoAskw8PCrvtv+siSOB6LBhA5ow==}
+ '@postcss-go/native-darwin-x64@0.0.5':
+ resolution: {integrity: sha512-bViVXwITdJ9m2XHDN3BPQPvERN9I7BjGHR40C+jGjTiw/dU6Q/e4Fy7JVBpkjvSY5HXpQk6lN2w4toHMYleE4A==}
cpu: [x64]
os: [darwin]
- '@postcss-go/native-linux-arm64-gnu@0.0.3':
- resolution: {integrity: sha512-AodLmgdyOBgOpuYIJRT0L5VafWdEHzBt0NylxDmNXSuNZ40IX1jG62Ut65DHLzSQpWnnVtpZ/YaIf70reyLchg==}
+ '@postcss-go/native-linux-arm64-gnu@0.0.5':
+ resolution: {integrity: sha512-EktI2dxWR1F1AcB/Vqv1a1mHCbWBWx3Cmoini7nUyxOm/exl1/I3rhuizM1RGB21CZoVsqtU/fMWp89/cp44Dg==}
cpu: [arm64]
os: [linux]
- '@postcss-go/native-linux-x64-gnu@0.0.3':
- resolution: {integrity: sha512-3o/lZtWKofM8mMifgOdAlIDHjaelSNsO7MxVpNWDIkpNdvbzx14ylCaJUynD5+gsPLiqqjjIn9ug6+XtEnWCzw==}
+ '@postcss-go/native-linux-x64-gnu@0.0.5':
+ resolution: {integrity: sha512-VEiJvyR2euHolkDJXgNqbre4/GXzN9ZiruDEL2lxEuAw830OZuTvUl4gd65m91YmBO71Cbe3ZOu9lEUH6LfM8g==}
cpu: [x64]
os: [linux]
- '@postcss-go/native-win32-arm64-msvc@0.0.3':
- resolution: {integrity: sha512-A2fgzcW+5y9va3bW0bGLBLvs+/dccs1X3TfIv+/qr+JXTmc4FpRwcPSvIiOMtdm+TpzhOjHhjxUdSQZPvkepaw==}
+ '@postcss-go/native-win32-arm64-msvc@0.0.5':
+ resolution: {integrity: sha512-5AAk+q8oecS3NWK2c4v6bAVoIvnmVOtSO2Qe7s8oBxfN07D9mK0agDfWt+7vb0FasEzv9b28X5UVRjDiiTnoDg==}
cpu: [arm64]
os: [win32]
- '@postcss-go/native-win32-x64-msvc@0.0.3':
- resolution: {integrity: sha512-2BFlKTtQVqPqs5lQiwzbVpJ+AKapCnTxkofQ06tnwseOCS17e/j/JSjUJ9AU8UKQMyNY6rhfblTMvsLufROBGw==}
+ '@postcss-go/native-win32-x64-msvc@0.0.5':
+ resolution: {integrity: sha512-IBvqJeYkPxAvh9APj/H+X/zj/FnvIy9ZHluiaQrD4xh9lpUGpoAZvk3Mux1+fuCDaz+e5rwvzbZLC66tURkodA==}
cpu: [x64]
os: [win32]
@@ -815,6 +824,131 @@ packages:
'@rolldown/pluginutils@1.0.1':
resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==}
+ '@rollup/rollup-android-arm-eabi@4.63.0':
+ resolution: {integrity: sha512-70TeIFezKKy65LgAVyQh+w94/gjWhvPWaLaGGeMEgVrPkQhuj/M5bAYYZzIFUj9Y69oHyTm5Um/R6gcLh4A8JA==}
+ cpu: [arm]
+ os: [android]
+
+ '@rollup/rollup-android-arm64@4.63.0':
+ resolution: {integrity: sha512-YC86tYIHK6M1IV+wbzO+Bxk8RCBr6ZyWYgWxUCzaZD8mc8rrFoIJDNzDrkHBYRc/wKdrsIXmm6/F7NzrAO+OrA==}
+ cpu: [arm64]
+ os: [android]
+
+ '@rollup/rollup-darwin-arm64@4.63.0':
+ resolution: {integrity: sha512-oI+ECtUcli0y0fi4xpW82GdPIXdTkI8G8DSjG2LRuw09fPAGykaWYH/hXxiKuTxiAjiPSTIIuYUqof5Z2hShWw==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rollup/rollup-darwin-x64@4.63.0':
+ resolution: {integrity: sha512-NwV+1s7TiKrMe4owHyKB/dTLD7ZJD0YEBEhIz+hvav1Cu1GReJjF+rsdNwjzENQeIAbE/CoNiaAc5Vz2h5DPAA==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rollup/rollup-freebsd-arm64@4.63.0':
+ resolution: {integrity: sha512-tWtHBTu5gOPK4u4Urtk4qAHW3zZ9rQAmbssO8gp7ELvGTGI3aCiq6NqyTQ0PCIg7KbHJF2UkGDDs77YZGxfjCA==}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@rollup/rollup-freebsd-x64@4.63.0':
+ resolution: {integrity: sha512-2qPoJiwTvtHQ27NnYvTnsgk8laXWYuVmNESG8WFZBcEPKLfZ3I27qBJarjVRQtwGeYyRfq5ZowHXih9lm2BItw==}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.63.0':
+ resolution: {integrity: sha512-FQwsTRvLNuHoTdICABJQfbPUSEueISGmnpT06tXTMpfprf5NiKLSXKA0A+w45wJnCmZAnzgqBwbt6ARFuyOi5w==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm-musleabihf@4.63.0':
+ resolution: {integrity: sha512-BBVTXziw8mY1a4ZbWME9tZyfzqXCDPqaC7Z3heQ29p5dkvXzwL0NwelO8zLa8c3RBKvl3YTuSnBgsBhYBtwjIw==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-gnu@4.63.0':
+ resolution: {integrity: sha512-w2Iyy9+RqKwx3d9qWMKsJg0FfRBsY0/pXNv0mCQ3ueRvJI6+QAScfD4nrMlzFLs2HNVW6Ew+mtZfDl9b7Ew5/Q==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-musl@4.63.0':
+ resolution: {integrity: sha512-YK++KtrFRHYE0P6/RtYEAy9t8F37znP+K03RrIuLPYOL6SVlObRumf/0OE4V/h63xL9DwkWbNssZfmA9hawuDA==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-loong64-gnu@4.63.0':
+ resolution: {integrity: sha512-aBfOG6fP7YkkPmTqPwufRJeFyz7WPpECv9XNbnsk9+vg7rxdih0lbtEel7jcRng4LZrrmU3FfitCFyEj4BWDWg==}
+ cpu: [loong64]
+ os: [linux]
+
+ '@rollup/rollup-linux-loong64-musl@4.63.0':
+ resolution: {integrity: sha512-LGaHEOeHNAag9VuS1Crs5DFg4RrU9MPi2nVnNJk9DTePx/B6RRYKVmrIXt2h7YOJlwjaFJ6lwtFDliZxScTLrQ==}
+ cpu: [loong64]
+ os: [linux]
+
+ '@rollup/rollup-linux-ppc64-gnu@4.63.0':
+ resolution: {integrity: sha512-jClvk+J0FC3b7Udvegiw5/4hErbHtmsNsQgENnKXDWtNCJXsJYZH5WURvu7imDOO38xYml24eeh5x3A04ppwCw==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@rollup/rollup-linux-ppc64-musl@4.63.0':
+ resolution: {integrity: sha512-0OJlaGK+8+B777Ql5okIpD7ua5Ro9+VB9Ve0OKa28OQJZ1RbuUBVNHK/e3pr4BROqsyPl1JrPO1ZxJseCNffcA==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-gnu@4.63.0':
+ resolution: {integrity: sha512-Ygsx+HoNH7afwi1bTIXbnTvVnsO+zurPLSYxybV1hHFVU72OWOCl6v05ql/z0hkpAPx+DK7Kn9Bi7MayCcjLTA==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-musl@4.63.0':
+ resolution: {integrity: sha512-pDQxtMGb+OvG3fLwR2OkZlSd47hW+kWg4BYMG/++sR6RqorQccwPTDsxda5hPwiIeIErAnCF9ma3SAU06bdQtQ==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-s390x-gnu@4.63.0':
+ resolution: {integrity: sha512-0BnUG9mS8I4SSHr3XsxVhuCMEiu+rX61xxZF5vujso4LaiAGFZFxvDjg6Xn6tLPNTUAfuCvQYas4LMQMVsKRSQ==}
+ cpu: [s390x]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-gnu@4.63.0':
+ resolution: {integrity: sha512-Adu/VttB1dpPNW+FEacrZ+xVm9tFty84+RrFzsqlFaPxoJB+9XXyDGtp5dCOoBwGBIEVH0To7lExFXEx0BIF4A==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-musl@4.63.0':
+ resolution: {integrity: sha512-NQ3bDvjUbFKmP23671xUlXtKmqVsUBd6M4PQCvbmNtOy06hnQIdKHy8oG/6S3R/S6He1JgPk6A5VT+prAJMYEw==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-openbsd-x64@4.63.0':
+ resolution: {integrity: sha512-u2eDAl4+0aFvA13GxlGBtTI3SS3sdgwgtV0HyjZ0QaQVCgNE+jqNGey+GtxWiq+wxr/UycAx/OnfJzApCFamvA==}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@rollup/rollup-openharmony-arm64@4.63.0':
+ resolution: {integrity: sha512-XvRb5vfW3wAZQ+ZUG21AnHHDKtNcw99eigzEhjr//NZ3u7SoBaPP0seSc7FgP7p1epAEdAoZckMW9WY/+4w70w==}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rollup/rollup-win32-arm64-msvc@4.63.0':
+ resolution: {integrity: sha512-iZPmniy4kNBf5yo2RezbkYNNK5HPbXE9+g+twnbqSng7dtLEJy1SKoxiE/ni4FDacjyuZpEeb9U054N4EoKHYw==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rollup/rollup-win32-ia32-msvc@4.63.0':
+ resolution: {integrity: sha512-mFBBd+LF37fnE8JnYUOH+imj0aPFPK30vpar4ehJkgnLj9sZn8ZxiRENmLtgIwxK7TC8klF6N57fxdNBwQoqOA==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-gnu@4.63.0':
+ resolution: {integrity: sha512-ujeqEY3B+zbGn3Z4Q03cUBG/LGWnBJncVT36WER31LcOsQk9+1dmINKKtvmmfChUvRbK1G0R8OhMWFgHgaZtAw==}
+ cpu: [x64]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-msvc@4.63.0':
+ resolution: {integrity: sha512-hncn90N4sOky0L2LKE5oESKLbxCPeVo4eLA2LSMoDzM+879ml4WSr+Rr4DWknNIVVvS1Hirkc9hx02W6YxS8rQ==}
+ cpu: [x64]
+ os: [win32]
+
'@shikijs/core@4.4.3':
resolution: {integrity: sha512-QCR4q2ZO/ILJEuwiBMel4wdcTDb1JGwfjKTxPDF6x8ixOaluPrVqIn06C99AcRPhmYlBR56d/Fb+GN58GzExpg==}
engines: {node: '>=20'}
@@ -939,6 +1073,12 @@ packages:
'@tybys/wasm-util@0.10.3':
resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==}
+ '@types/chai@5.2.3':
+ resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==}
+
+ '@types/deep-eql@4.0.2':
+ resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
+
'@types/esrecurse@4.3.1':
resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==}
@@ -1028,6 +1168,35 @@ packages:
'@ungap/structured-clone@1.3.4':
resolution: {integrity: sha512-JL+CF0GeLHyPWI0rXu7UnxgiuOm9UQWzadi0OYOJNhNO2q6EZElpwlgXkNkfU1PzANDHq3YcwKVZprdvS+BrbQ==}
+ '@vitest/expect@3.2.7':
+ resolution: {integrity: sha512-E8eBXaKibuvH2pSZErOjdVb5vF4PbKYcrnluBTYxEk1l/VhhwZg1kZQsdtjq+CsF5CFydf2Rdkz7jDHKSisi3w==}
+
+ '@vitest/mocker@3.2.7':
+ resolution: {integrity: sha512-Trr0hYO9CM3Wj6ksWHRhK9IZpIY6wTMO5u/MqXurMxT57sWBaOPEtP3Oq60ihZuh5JsiagKfz95OcxdEP6dBrA==}
+ peerDependencies:
+ msw: ^2.4.9
+ vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0
+ peerDependenciesMeta:
+ msw:
+ optional: true
+ vite:
+ optional: true
+
+ '@vitest/pretty-format@3.2.7':
+ resolution: {integrity: sha512-KUHlwqVu0sRlhCdyPdQ/wBoTfRahjUky1MubOmYw9fWfIZy1gNoHpuaaQBPAaMaVYdQYHJLurzj8ECCj5OwTqA==}
+
+ '@vitest/runner@3.2.7':
+ resolution: {integrity: sha512-sB9y4ovltoQP+WaUPwmSxO9WIg9Ig694Di5PalVPsYHklAdE027mehpWF2SQSVq+k6sFgaivbTjTJwZLSHbedA==}
+
+ '@vitest/snapshot@3.2.7':
+ resolution: {integrity: sha512-7C+MwShwtBSI5Buwoyg3s/iY1eHL9PKAf+O1wVh/TdnjXUtkoL/9YQtre90i4MtNXM6edP1wJ2zOBpfCyhIS7g==}
+
+ '@vitest/spy@3.2.7':
+ resolution: {integrity: sha512-Q2eQGI6d2L/hBtZ0qNuKcAGid68XK6cv1xsoaIma6PaJhHPoqcEJhYpXZ/5myCMqkNgtP6UKuBhbc0nHKnrkuQ==}
+
+ '@vitest/utils@3.2.7':
+ resolution: {integrity: sha512-x6BDOd7dyo3PFLY3I9/HJ25X/6OurhGXk2/B9gOZNPF7XDVjeBK4k01lQE5uvDpbuheErh91qYuE1E2OEjK3Rw==}
+
acorn-jsx@5.3.2:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
@@ -1060,6 +1229,10 @@ packages:
resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
engines: {node: '>= 0.4'}
+ assertion-error@2.0.1:
+ resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
+ engines: {node: '>=12'}
+
astro-eslint-parser@3.1.0:
resolution: {integrity: sha512-lS5qlx401Q1ZUhQ44XQnM4uT2qI6hA0H+vstrd841xGVxunFOs0ut3DWJGYHK1l7mxRxQdDi1j53pfE7/AyGlA==}
engines: {node: ^22.22.3 || ^24.16.0 || >=26.3.0}
@@ -1117,12 +1290,20 @@ packages:
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
+ cac@6.7.14:
+ resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
+ engines: {node: '>=8'}
+
caniuse-lite@1.0.30001809:
resolution: {integrity: sha512-xxWVywk6a6Arlk+hymeycyn/VgqEfLDxupvhH/xiY5SJ/18kmi9o6MiO320DCUzypORHLtvh0I4i04tUhCNHNQ==}
ccount@2.0.1:
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
+ chai@5.3.3:
+ resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==}
+ engines: {node: '>=18'}
+
chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
@@ -1133,6 +1314,10 @@ packages:
character-entities-legacy@3.0.0:
resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
+ check-error@2.1.3:
+ resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==}
+ engines: {node: '>= 16'}
+
chokidar@3.6.0:
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
engines: {node: '>= 8.10.0'}
@@ -1218,6 +1403,10 @@ packages:
supports-color:
optional: true
+ deep-eql@5.0.2:
+ resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
+ engines: {node: '>=6'}
+
deep-is@0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
@@ -1280,6 +1469,9 @@ packages:
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
engines: {node: '>=0.12'}
+ es-module-lexer@1.7.0:
+ resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
+
es-module-lexer@2.3.2:
resolution: {integrity: sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==}
@@ -1356,6 +1548,9 @@ packages:
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
engines: {node: '>=4.0'}
+ estree-walker@3.0.3:
+ resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
+
esutils@2.0.3:
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
engines: {node: '>=0.10.0'}
@@ -1363,6 +1558,10 @@ packages:
eventemitter3@5.0.4:
resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==}
+ expect-type@1.4.0:
+ resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==}
+ engines: {node: '>=12.0.0'}
+
extend@3.0.2:
resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
@@ -1531,6 +1730,9 @@ packages:
resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==}
hasBin: true
+ js-tokens@9.0.1:
+ resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==}
+
js-yaml@4.3.1:
resolution: {integrity: sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==}
hasBin: true
@@ -1707,6 +1909,9 @@ packages:
resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==}
engines: {node: '>= 0.6.0'}
+ loupe@3.2.1:
+ resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==}
+
lru-cache@11.5.2:
resolution: {integrity: sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==}
engines: {node: 20 || >=22}
@@ -1846,6 +2051,13 @@ packages:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'}
+ pathe@2.0.3:
+ resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
+
+ pathval@2.0.1:
+ resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==}
+ engines: {node: '>= 14.16'}
+
piccolore@0.1.3:
resolution: {integrity: sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==}
@@ -1947,6 +2159,11 @@ packages:
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
+ rollup@4.63.0:
+ resolution: {integrity: sha512-T5vnZ2y4QqC3/4P+w2+JO+Q/OVdnPsv4XcSYJYMEn0R9/jjl5AgLwO9LAZMzP2lN71O6pypn91rB7lDstUkfrQ==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+
s.color@0.0.15:
resolution: {integrity: sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA==}
@@ -1986,6 +2203,9 @@ packages:
resolution: {integrity: sha512-Mb/GvXPHBAXdgGIcnfU5L3ldpn1XcxrGkPHwqgRx17/I2XRfqlFKk2vGkHWINn1kdXvzJZeuO3is6I9KLPFm0g==}
engines: {node: '>=20'}
+ siginfo@2.0.0:
+ resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
+
sisteransi@1.0.5:
resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
@@ -2004,6 +2224,12 @@ packages:
space-separated-tokens@2.0.2:
resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
+ stackback@0.0.2:
+ resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
+
+ std-env@3.10.0:
+ resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==}
+
string-argv@0.3.2:
resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
engines: {node: '>=0.6.19'}
@@ -2011,6 +2237,9 @@ packages:
stringify-entities@4.0.4:
resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
+ strip-literal@3.1.0:
+ resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==}
+
suf-log@2.5.3:
resolution: {integrity: sha512-KvC8OPjzdNOe+xQ4XWJV2whQA0aM1kGVczMQ8+dStAO6KfEB140JEVQ9dE76ONZ0/Ylf67ni4tILPJB41U0eow==}
@@ -2033,10 +2262,16 @@ packages:
tiny-inflate@1.0.3:
resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==}
+ tinybench@2.9.0:
+ resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
+
tinyclip@0.1.15:
resolution: {integrity: sha512-uo33abH+Ays0xYaDysoBt494Hb3hsEczMpcC0MwFl773pazORx4fmvKhclhR1wonUbB6vvpRsvVMwnhfqeMc+A==}
engines: {node: ^16.14.0 || >= 17.3.0}
+ tinyexec@0.3.2:
+ resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
+
tinyexec@1.3.0:
resolution: {integrity: sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==}
engines: {node: '>=18'}
@@ -2045,6 +2280,18 @@ packages:
resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==}
engines: {node: '>=12.0.0'}
+ tinypool@1.1.1:
+ resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+
+ tinyrainbow@2.0.0:
+ resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==}
+ engines: {node: '>=14.0.0'}
+
+ tinyspy@4.0.4:
+ resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==}
+ engines: {node: '>=14.0.0'}
+
to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
@@ -2194,6 +2441,51 @@ packages:
vfile@6.0.3:
resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
+ vite-node@3.2.4:
+ resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==}
+ engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
+ hasBin: true
+
+ vite@7.3.6:
+ resolution: {integrity: sha512-4XP60spRGjSZFf1qYH+dJIkK2znL3zQfl9KkOV9MkkRR/3Dls0dxaBsQPTloEc5BLXWPL9vsOxopxyKoMmDueg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^20.19.0 || >=22.12.0
+ jiti: '>=1.21.0'
+ less: ^4.0.0
+ lightningcss: ^1.21.0
+ sass: ^1.70.0
+ sass-embedded: ^1.70.0
+ stylus: '>=0.54.8'
+ sugarss: ^5.0.0
+ terser: ^5.16.0
+ tsx: ^4.8.1
+ yaml: ^2.4.2
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ jiti:
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ tsx:
+ optional: true
+ yaml:
+ optional: true
+
vite@8.2.2:
resolution: {integrity: sha512-cFKLV/PRgAUlIRm5WjMjJ86jrftzpqcgH+Us+DS8mI3CDNiH30Whrz8uHL3+MOLPAgqbMBAqWdAHAphOAM+z/Q==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -2245,11 +2537,44 @@ packages:
vite:
optional: true
+ vitest@3.2.7:
+ resolution: {integrity: sha512-KrxIJ62Fd89gfysR4WotlgZABiz2dqFPgqGzX7s+CwsqLFomRH7777ZcrOD6+WVAh7khPQP41A+BKbpcJFrdEg==}
+ engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
+ hasBin: true
+ peerDependencies:
+ '@edge-runtime/vm': '*'
+ '@types/debug': ^4.1.12
+ '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
+ '@vitest/browser': 3.2.7
+ '@vitest/ui': 3.2.7
+ happy-dom: '*'
+ jsdom: '*'
+ peerDependenciesMeta:
+ '@edge-runtime/vm':
+ optional: true
+ '@types/debug':
+ optional: true
+ '@types/node':
+ optional: true
+ '@vitest/browser':
+ optional: true
+ '@vitest/ui':
+ optional: true
+ happy-dom:
+ optional: true
+ jsdom:
+ optional: true
+
which@2.0.2:
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
engines: {node: '>= 8'}
hasBin: true
+ why-is-node-running@2.3.0:
+ resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
word-wrap@1.2.5:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
@@ -2756,6 +3081,9 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.5
+ '@napi-rs/lzma-linux-x64-gnu@1.5.1':
+ optional: true
+
'@napi-rs/wasm-runtime@1.2.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)':
dependencies:
'@emnapi/core': 1.11.1
@@ -2767,7 +3095,7 @@ snapshots:
'@oxc-project/types@0.147.0': {}
- '@postcss-go/core@0.0.3':
+ '@postcss-go/core@0.0.5':
dependencies:
chokidar: 3.6.0
dependency-graph: 1.0.0
@@ -2778,29 +3106,29 @@ snapshots:
source-map-js: 1.2.1
tinyglobby: 0.2.17
optionalDependencies:
- '@postcss-go/native-darwin-arm64': 0.0.3
- '@postcss-go/native-darwin-x64': 0.0.3
- '@postcss-go/native-linux-arm64-gnu': 0.0.3
- '@postcss-go/native-linux-x64-gnu': 0.0.3
- '@postcss-go/native-win32-arm64-msvc': 0.0.3
- '@postcss-go/native-win32-x64-msvc': 0.0.3
+ '@postcss-go/native-darwin-arm64': 0.0.5
+ '@postcss-go/native-darwin-x64': 0.0.5
+ '@postcss-go/native-linux-arm64-gnu': 0.0.5
+ '@postcss-go/native-linux-x64-gnu': 0.0.5
+ '@postcss-go/native-win32-arm64-msvc': 0.0.5
+ '@postcss-go/native-win32-x64-msvc': 0.0.5
- '@postcss-go/native-darwin-arm64@0.0.3':
+ '@postcss-go/native-darwin-arm64@0.0.5':
optional: true
- '@postcss-go/native-darwin-x64@0.0.3':
+ '@postcss-go/native-darwin-x64@0.0.5':
optional: true
- '@postcss-go/native-linux-arm64-gnu@0.0.3':
+ '@postcss-go/native-linux-arm64-gnu@0.0.5':
optional: true
- '@postcss-go/native-linux-x64-gnu@0.0.3':
+ '@postcss-go/native-linux-x64-gnu@0.0.5':
optional: true
- '@postcss-go/native-win32-arm64-msvc@0.0.3':
+ '@postcss-go/native-win32-arm64-msvc@0.0.5':
optional: true
- '@postcss-go/native-win32-x64-msvc@0.0.3':
+ '@postcss-go/native-win32-x64-msvc@0.0.5':
optional: true
'@rolldown/binding-android-arm-eabi@1.2.6':
@@ -2850,6 +3178,81 @@ snapshots:
'@rolldown/pluginutils@1.0.1': {}
+ '@rollup/rollup-android-arm-eabi@4.63.0':
+ optional: true
+
+ '@rollup/rollup-android-arm64@4.63.0':
+ optional: true
+
+ '@rollup/rollup-darwin-arm64@4.63.0':
+ optional: true
+
+ '@rollup/rollup-darwin-x64@4.63.0':
+ optional: true
+
+ '@rollup/rollup-freebsd-arm64@4.63.0':
+ optional: true
+
+ '@rollup/rollup-freebsd-x64@4.63.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.63.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm-musleabihf@4.63.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-gnu@4.63.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-musl@4.63.0':
+ optional: true
+
+ '@rollup/rollup-linux-loong64-gnu@4.63.0':
+ optional: true
+
+ '@rollup/rollup-linux-loong64-musl@4.63.0':
+ optional: true
+
+ '@rollup/rollup-linux-ppc64-gnu@4.63.0':
+ optional: true
+
+ '@rollup/rollup-linux-ppc64-musl@4.63.0':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-gnu@4.63.0':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-musl@4.63.0':
+ optional: true
+
+ '@rollup/rollup-linux-s390x-gnu@4.63.0':
+ optional: true
+
+ '@rollup/rollup-linux-x64-gnu@4.63.0':
+ optional: true
+
+ '@rollup/rollup-linux-x64-musl@4.63.0':
+ optional: true
+
+ '@rollup/rollup-openbsd-x64@4.63.0':
+ optional: true
+
+ '@rollup/rollup-openharmony-arm64@4.63.0':
+ optional: true
+
+ '@rollup/rollup-win32-arm64-msvc@4.63.0':
+ optional: true
+
+ '@rollup/rollup-win32-ia32-msvc@4.63.0':
+ optional: true
+
+ '@rollup/rollup-win32-x64-gnu@4.63.0':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.63.0':
+ optional: true
+
'@shikijs/core@4.4.3':
dependencies:
'@shikijs/primitive': 4.4.3
@@ -2963,6 +3366,13 @@ snapshots:
tslib: 2.8.1
optional: true
+ '@types/chai@5.2.3':
+ dependencies:
+ '@types/deep-eql': 4.0.2
+ assertion-error: 2.0.1
+
+ '@types/deep-eql@4.0.2': {}
+
'@types/esrecurse@4.3.1': {}
'@types/estree-jsx@1.0.5':
@@ -3083,6 +3493,48 @@ snapshots:
'@ungap/structured-clone@1.3.4': {}
+ '@vitest/expect@3.2.7':
+ dependencies:
+ '@types/chai': 5.2.3
+ '@vitest/spy': 3.2.7
+ '@vitest/utils': 3.2.7
+ chai: 5.3.3
+ tinyrainbow: 2.0.0
+
+ '@vitest/mocker@3.2.7(vite@7.3.6(jiti@2.7.0)(lightningcss@1.33.0)(yaml@2.9.0))':
+ dependencies:
+ '@vitest/spy': 3.2.7
+ estree-walker: 3.0.3
+ magic-string: 0.30.21
+ optionalDependencies:
+ vite: 7.3.6(jiti@2.7.0)(lightningcss@1.33.0)(yaml@2.9.0)
+
+ '@vitest/pretty-format@3.2.7':
+ dependencies:
+ tinyrainbow: 2.0.0
+
+ '@vitest/runner@3.2.7':
+ dependencies:
+ '@vitest/utils': 3.2.7
+ pathe: 2.0.3
+ strip-literal: 3.1.0
+
+ '@vitest/snapshot@3.2.7':
+ dependencies:
+ '@vitest/pretty-format': 3.2.7
+ magic-string: 0.30.21
+ pathe: 2.0.3
+
+ '@vitest/spy@3.2.7':
+ dependencies:
+ tinyspy: 4.0.4
+
+ '@vitest/utils@3.2.7':
+ dependencies:
+ '@vitest/pretty-format': 3.2.7
+ loupe: 3.2.1
+ tinyrainbow: 2.0.0
+
acorn-jsx@5.3.2(acorn@8.18.0):
dependencies:
acorn: 8.18.0
@@ -3113,6 +3565,8 @@ snapshots:
aria-query@5.3.2: {}
+ assertion-error@2.0.1: {}
+
astro-eslint-parser@3.1.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1):
dependencies:
'@astrojs/compiler-rs': 0.4.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)
@@ -3257,10 +3711,20 @@ snapshots:
node-releases: 2.0.53
update-browserslist-db: 1.3.1(browserslist@4.28.8)
+ cac@6.7.14: {}
+
caniuse-lite@1.0.30001809: {}
ccount@2.0.1: {}
+ chai@5.3.3:
+ dependencies:
+ assertion-error: 2.0.1
+ check-error: 2.1.3
+ deep-eql: 5.0.2
+ loupe: 3.2.1
+ pathval: 2.0.1
+
chalk@4.1.2:
dependencies:
ansi-styles: 4.3.0
@@ -3270,6 +3734,8 @@ snapshots:
character-entities-legacy@3.0.0: {}
+ check-error@2.1.3: {}
+
chokidar@3.6.0:
dependencies:
anymatch: 3.1.3
@@ -3348,6 +3814,8 @@ snapshots:
dependencies:
ms: 2.1.3
+ deep-eql@5.0.2: {}
+
deep-is@0.1.4: {}
defu@6.1.7: {}
@@ -3401,6 +3869,8 @@ snapshots:
entities@4.5.0: {}
+ es-module-lexer@1.7.0: {}
+
es-module-lexer@2.3.2: {}
esbuild@0.28.2:
@@ -3523,10 +3993,16 @@ snapshots:
estraverse@5.3.0: {}
+ estree-walker@3.0.3:
+ dependencies:
+ '@types/estree': 1.0.9
+
esutils@2.0.3: {}
eventemitter3@5.0.4: {}
+ expect-type@1.4.0: {}
+
extend@3.0.2: {}
fast-deep-equal@3.1.3: {}
@@ -3676,6 +4152,8 @@ snapshots:
jiti@2.7.0: {}
+ js-tokens@9.0.1: {}
+
js-yaml@4.3.1:
dependencies:
argparse: 2.0.1
@@ -3809,6 +4287,8 @@ snapshots:
loglevel@1.9.2: {}
+ loupe@3.2.1: {}
+
lru-cache@11.5.2: {}
magic-string@0.30.21:
@@ -3947,6 +4427,10 @@ snapshots:
path-key@3.1.1: {}
+ pathe@2.0.3: {}
+
+ pathval@2.0.1: {}
+
piccolore@0.1.3: {}
picocolors@1.1.1: {}
@@ -4044,6 +4528,38 @@ snapshots:
'@rolldown/binding-win32-arm64-msvc': 1.2.6
'@rolldown/binding-win32-x64-msvc': 1.2.6
+ rollup@4.63.0:
+ dependencies:
+ '@types/estree': 1.0.9
+ optionalDependencies:
+ '@napi-rs/lzma-linux-x64-gnu': 1.5.1
+ '@rollup/rollup-android-arm-eabi': 4.63.0
+ '@rollup/rollup-android-arm64': 4.63.0
+ '@rollup/rollup-darwin-arm64': 4.63.0
+ '@rollup/rollup-darwin-x64': 4.63.0
+ '@rollup/rollup-freebsd-arm64': 4.63.0
+ '@rollup/rollup-freebsd-x64': 4.63.0
+ '@rollup/rollup-linux-arm-gnueabihf': 4.63.0
+ '@rollup/rollup-linux-arm-musleabihf': 4.63.0
+ '@rollup/rollup-linux-arm64-gnu': 4.63.0
+ '@rollup/rollup-linux-arm64-musl': 4.63.0
+ '@rollup/rollup-linux-loong64-gnu': 4.63.0
+ '@rollup/rollup-linux-loong64-musl': 4.63.0
+ '@rollup/rollup-linux-ppc64-gnu': 4.63.0
+ '@rollup/rollup-linux-ppc64-musl': 4.63.0
+ '@rollup/rollup-linux-riscv64-gnu': 4.63.0
+ '@rollup/rollup-linux-riscv64-musl': 4.63.0
+ '@rollup/rollup-linux-s390x-gnu': 4.63.0
+ '@rollup/rollup-linux-x64-gnu': 4.63.0
+ '@rollup/rollup-linux-x64-musl': 4.63.0
+ '@rollup/rollup-openbsd-x64': 4.63.0
+ '@rollup/rollup-openharmony-arm64': 4.63.0
+ '@rollup/rollup-win32-arm64-msvc': 4.63.0
+ '@rollup/rollup-win32-ia32-msvc': 4.63.0
+ '@rollup/rollup-win32-x64-gnu': 4.63.0
+ '@rollup/rollup-win32-x64-msvc': 4.63.0
+ fsevents: 2.3.3
+
s.color@0.0.15: {}
sass-formatter@0.7.9:
@@ -4121,6 +4637,8 @@ snapshots:
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.5
+ siginfo@2.0.0: {}
+
sisteransi@1.0.5: {}
slash@5.1.0: {}
@@ -4131,6 +4649,10 @@ snapshots:
space-separated-tokens@2.0.2: {}
+ stackback@0.0.2: {}
+
+ std-env@3.10.0: {}
+
string-argv@0.3.2: {}
stringify-entities@4.0.4:
@@ -4138,6 +4660,10 @@ snapshots:
character-entities-html4: 2.1.0
character-entities-legacy: 3.0.0
+ strip-literal@3.1.0:
+ dependencies:
+ js-tokens: 9.0.1
+
suf-log@2.5.3:
dependencies:
s.color: 0.0.15
@@ -4162,8 +4688,12 @@ snapshots:
tiny-inflate@1.0.3: {}
+ tinybench@2.9.0: {}
+
tinyclip@0.1.15: {}
+ tinyexec@0.3.2: {}
+
tinyexec@1.3.0: {}
tinyglobby@0.2.17:
@@ -4171,6 +4701,12 @@ snapshots:
fdir: 6.5.0(picomatch@4.0.7)
picomatch: 4.0.7
+ tinypool@1.1.1: {}
+
+ tinyrainbow@2.0.0: {}
+
+ tinyspy@4.0.4: {}
+
to-regex-range@5.0.1:
dependencies:
is-number: 7.0.0
@@ -4283,6 +4819,41 @@ snapshots:
'@types/unist': 3.0.3
vfile-message: 4.0.3
+ vite-node@3.2.4(jiti@2.7.0)(lightningcss@1.33.0)(yaml@2.9.0):
+ dependencies:
+ cac: 6.7.14
+ debug: 4.4.3
+ es-module-lexer: 1.7.0
+ pathe: 2.0.3
+ vite: 7.3.6(jiti@2.7.0)(lightningcss@1.33.0)(yaml@2.9.0)
+ transitivePeerDependencies:
+ - '@types/node'
+ - jiti
+ - less
+ - lightningcss
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - tsx
+ - yaml
+
+ vite@7.3.6(jiti@2.7.0)(lightningcss@1.33.0)(yaml@2.9.0):
+ dependencies:
+ esbuild: 0.28.2
+ fdir: 6.5.0(picomatch@4.0.7)
+ picomatch: 4.0.7
+ postcss: 8.5.26
+ rollup: 4.63.0
+ tinyglobby: 0.2.17
+ optionalDependencies:
+ fsevents: 2.3.3
+ jiti: 2.7.0
+ lightningcss: 1.33.0
+ yaml: 2.9.0
+
vite@8.2.2(esbuild@0.28.2)(jiti@2.7.0)(yaml@2.9.0):
dependencies:
lightningcss: 1.33.0
@@ -4300,10 +4871,54 @@ snapshots:
optionalDependencies:
vite: 8.2.2(esbuild@0.28.2)(jiti@2.7.0)(yaml@2.9.0)
+ vitest@3.2.7(jiti@2.7.0)(lightningcss@1.33.0)(yaml@2.9.0):
+ dependencies:
+ '@types/chai': 5.2.3
+ '@vitest/expect': 3.2.7
+ '@vitest/mocker': 3.2.7(vite@7.3.6(jiti@2.7.0)(lightningcss@1.33.0)(yaml@2.9.0))
+ '@vitest/pretty-format': 3.2.7
+ '@vitest/runner': 3.2.7
+ '@vitest/snapshot': 3.2.7
+ '@vitest/spy': 3.2.7
+ '@vitest/utils': 3.2.7
+ chai: 5.3.3
+ debug: 4.4.3
+ expect-type: 1.4.0
+ magic-string: 0.30.21
+ pathe: 2.0.3
+ picomatch: 4.0.7
+ std-env: 3.10.0
+ tinybench: 2.9.0
+ tinyexec: 0.3.2
+ tinyglobby: 0.2.17
+ tinypool: 1.1.1
+ tinyrainbow: 2.0.0
+ vite: 7.3.6(jiti@2.7.0)(lightningcss@1.33.0)(yaml@2.9.0)
+ vite-node: 3.2.4(jiti@2.7.0)(lightningcss@1.33.0)(yaml@2.9.0)
+ why-is-node-running: 2.3.0
+ transitivePeerDependencies:
+ - jiti
+ - less
+ - lightningcss
+ - msw
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - tsx
+ - yaml
+
which@2.0.2:
dependencies:
isexe: 2.0.0
+ why-is-node-running@2.3.0:
+ dependencies:
+ siginfo: 2.0.0
+ stackback: 0.0.2
+
word-wrap@1.2.5: {}
xxhash-wasm@1.1.0: {}
diff --git a/src/env.d.ts b/src/env.d.ts
deleted file mode 100644
index 0a51d3b..0000000
--- a/src/env.d.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-///
-
-declare module '*?url' {
- const value: string;
- export default value;
-}
-
-declare module '*?worker' {
- const WorkerFactory: {
- new (): Worker;
- };
- export default WorkerFactory;
-}
diff --git a/src/lib/examples.ts b/src/lib/examples.ts
index 7db1043..4dc6f62 100644
--- a/src/lib/examples.ts
+++ b/src/lib/examples.ts
@@ -17,7 +17,10 @@ export function exampleGroups(base: string): ExampleGroup[] {
},
{
label: 'Frameworks',
- items: [{ label: 'webpack', href: `${base}examples/webpack/`, key: 'webpack' }],
+ items: [
+ { label: 'Vite', href: `${base}examples/vite/`, key: 'vite' },
+ { label: 'webpack', href: `${base}examples/webpack/`, key: 'webpack' },
+ ],
},
];
}
diff --git a/src/lib/playground-app.ts b/src/lib/playground-app.ts
index 00082ae..96e6200 100644
--- a/src/lib/playground-app.ts
+++ b/src/lib/playground-app.ts
@@ -79,7 +79,7 @@ ${css}
}
export function bootPlayground(root: HTMLElement) {
- const id = root.dataset.presetId ?? 'webpack';
+ const id = root.dataset.presetId ?? 'default';
const preset = playgroundPreset(id);
const inputFile = playgroundInputFile(preset);
const inputHost = root.querySelector('[data-editor="input"]');
diff --git a/src/lib/playgrounds.ts b/src/lib/playgrounds.ts
index ad822a0..da0c9e1 100644
--- a/src/lib/playgrounds.ts
+++ b/src/lib/playgrounds.ts
@@ -36,18 +36,25 @@ export function playgroundInputFile(preset: PlaygroundPreset): PlaygroundFile {
export const PLAYGROUND_LINKS: PlaygroundLink[] = [
{ id: 'default', label: 'Default' },
+ { id: 'vite', label: 'Vite' },
{ id: 'webpack', label: 'webpack' },
];
export function playgroundGroups(base: string) {
+ const link = (id: string, label: string) => ({
+ label,
+ href: `${base}playground/${id}/`,
+ key: id,
+ });
+
return [
+ {
+ label: 'Usage',
+ items: [link('default', 'Default')],
+ },
{
label: 'Frameworks',
- items: PLAYGROUND_LINKS.map((item) => ({
- label: item.label,
- href: `${base}playground/${item.id}/`,
- key: item.id,
- })),
+ items: [link('vite', 'Vite'), link('webpack', 'webpack')],
},
];
}
@@ -66,6 +73,12 @@ const postcssConfig = `export default {
},
};`;
+const viteConfig = `import postcssGo from '@postcss-go/vite-loader';
+
+export default {
+ plugins: [postcssGo()],
+};`;
+
const webpackConfig = `export default {
module: {
rules: [
@@ -100,6 +113,19 @@ const demoInput = `.hero {
}
`;
+const viteInput = `.hero {
+ display: flex;
+ gap: 0.5rem;
+ min-height: 100vh;
+ align-items: center;
+ justify-content: center;
+
+ & h1 span {
+ color: #c8ff3d;
+ }
+}
+`;
+
const webpackInput = `.hero {
display: flex;
gap: 0.5rem;
@@ -137,12 +163,41 @@ export const PLAYGROUND_PRESETS: Record = {
],
previewHtml: `PostCSS, rebuilt. Get started `,
},
+ vite: {
+ id: 'vite',
+ title: 'Vite',
+ description: 'CSS as @postcss-go/vite-loader would hand to the engine.',
+ exampleId: 'vite',
+ plugins: { nested: true, autoprefixer: true },
+ files: [
+ {
+ id: 'postcss',
+ filename: 'postcss.config.js',
+ language: 'javascript',
+ content: postcssConfig,
+ },
+ {
+ id: 'vite',
+ filename: 'vite.config.js',
+ language: 'javascript',
+ content: viteConfig,
+ },
+ {
+ id: 'css',
+ filename: 'src/styles.css',
+ language: 'css',
+ content: viteInput,
+ input: true,
+ },
+ ],
+ previewHtml: `Vite + PostCSS `,
+ },
webpack: {
id: 'webpack',
title: 'webpack',
description: 'CSS as @postcss-go/webpack-loader would hand to the engine.',
exampleId: 'webpack',
- plugins: { nested: true, autoprefixer: false },
+ plugins: { nested: true, autoprefixer: true },
files: [
{
id: 'postcss',
diff --git a/src/pages/examples/default.astro b/src/pages/examples/default.astro
index 0721ce7..0e85d3b 100644
--- a/src/pages/examples/default.astro
+++ b/src/pages/examples/default.astro
@@ -48,7 +48,7 @@ await writeFile('dist/index.css', result.css);`;
The default setup is a postcss.config.js plus the postcss-go CLI. No bundler
is required. The same config file is what Vite, Next.js, and other tools already look for.
-
+
Install
diff --git a/src/pages/examples/vite.astro b/src/pages/examples/vite.astro
new file mode 100644
index 0000000..ec956b5
--- /dev/null
+++ b/src/pages/examples/vite.astro
@@ -0,0 +1,67 @@
+---
+import ExamplesLayout from '../../layouts/ExamplesLayout.astro';
+import CodeSample from '../../components/CodeSample.astro';
+import PlaygroundCta from '../../components/PlaygroundCta.astro';
+
+const install = 'pnpm add -D @postcss-go/core @postcss-go/vite-loader autoprefixer vite';
+const config = `export default {
+ plugins: {
+ autoprefixer: {},
+ },
+};`;
+const viteConfig = `import postcssGo from '@postcss-go/vite-loader';
+
+export default {
+ plugins: [postcssGo()],
+};`;
+const viteConfigInline = `import postcssGo from '@postcss-go/vite-loader';
+import autoprefixer from 'autoprefixer';
+
+export default {
+ plugins: [
+ postcssGo({
+ postcssOptions: {
+ config: false,
+ plugins: [autoprefixer()],
+ },
+ }),
+ ],
+};`;
+const css = `.button {
+ display: flex;
+ gap: 0.5rem;
+}`;
+const scripts = `{
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build",
+ "build:css": "postcss-go src/**/*.css --base src --dir dist/css --no-map"
+ }
+}`;
+---
+
+
+ Vite
+
+ Add @postcss-go/vite-loader to your Vite plugins. It runs before Vite's built-in CSS
+ pipeline, calls the Go engine directly, and does not depend on postcss. By default
+ it discovers postcss.config.js from each input file, same as the CLI.
+
+
+
+
+
+
+ Pass postcssOptions inline when you want to disable config lookup or set plugins in the
+ Vite config. postcssOptions can also be a function that receives mode,
+ env, file, and the Vite config.
+
+
+
+
+ Unless css.postcss is already set, the plugin clears Vite's PostCSS plugin list so the
+ same postcss.config.* is not run twice. You can still run the CLI for a bundler-free
+ CSS pass:
+
+
+
diff --git a/src/pages/guide/get-started.md b/src/pages/guide/get-started.md
index f16b00d..820af4a 100644
--- a/src/pages/guide/get-started.md
+++ b/src/pages/guide/get-started.md
@@ -50,8 +50,8 @@ file or environment:
terminal Copy
pnpm postcss-go src/index.css -o dist/index.css
-For the default config, see [Examples](../../examples/default/). For webpack,
-see the [webpack example](../../examples/webpack/).
+For the default config, see [Examples](../../examples/default/). For Vite and webpack,
+see the [Vite example](../../examples/vite/) and [webpack example](../../examples/webpack/).
For a gradual migration, see the [migration and compatibility guide](../migration/).
For browsers, import `@postcss-go/core/wasm` and follow the
[Browser and WASM](../browser-wasm/) guide.
diff --git a/src/pages/index.astro b/src/pages/index.astro
index 128875c..c538d0a 100644
--- a/src/pages/index.astro
+++ b/src/pages/index.astro
@@ -70,7 +70,7 @@ import BenchmarkChart from '../components/BenchmarkChart.astro';
Examples
- Playground
MIT licensed
diff --git a/test/examples.test.ts b/test/examples.test.ts
new file mode 100644
index 0000000..1a33c74
--- /dev/null
+++ b/test/examples.test.ts
@@ -0,0 +1,17 @@
+import { describe, expect, it } from 'vitest';
+
+import { exampleGroups } from '../src/lib/examples';
+
+describe('exampleGroups', () => {
+ it('includes Vite in Frameworks', () => {
+ const groups = exampleGroups('/');
+ const frameworks = groups.find((group) => group.label === 'Frameworks');
+ expect(frameworks?.items.map((item) => item.key)).toEqual(['vite', 'webpack']);
+ });
+
+ it('builds framework hrefs from the site base', () => {
+ const groups = exampleGroups('/postcss-go/');
+ const vite = groups.flatMap((group) => group.items).find((item) => item.key === 'vite');
+ expect(vite?.href).toBe('/postcss-go/examples/vite/');
+ });
+});
diff --git a/test/playgrounds.test.ts b/test/playgrounds.test.ts
new file mode 100644
index 0000000..4a27c37
--- /dev/null
+++ b/test/playgrounds.test.ts
@@ -0,0 +1,41 @@
+import { describe, expect, it } from 'vitest';
+
+import {
+ PLAYGROUND_LINKS,
+ PLAYGROUND_PRESETS,
+ playgroundGroups,
+ playgroundInputFile,
+ playgroundPreset,
+} from '../src/lib/playgrounds';
+
+describe('playgrounds', () => {
+ it('lists the Vite preset', () => {
+ expect(PLAYGROUND_LINKS.map((item) => item.id)).toEqual(['default', 'vite', 'webpack']);
+ });
+
+ it('builds playground nav links from the site base', () => {
+ const groups = playgroundGroups('/postcss-go/');
+ const defaultLink = groups[0]?.items.find((item) => item.key === 'default');
+ const vite = groups[1]?.items.find((item) => item.key === 'vite');
+ expect(defaultLink?.href).toBe('/postcss-go/playground/default/');
+ expect(vite?.href).toBe('/postcss-go/playground/vite/');
+ });
+
+ it('links the Vite preset to the Vite example', () => {
+ expect(PLAYGROUND_PRESETS.vite.exampleId).toBe('vite');
+ });
+
+ it('includes Vite config and CSS input files', () => {
+ const preset = playgroundPreset('vite');
+ expect(preset.files.map((file) => file.filename)).toEqual([
+ 'postcss.config.js',
+ 'vite.config.js',
+ 'src/styles.css',
+ ]);
+ expect(playgroundInputFile(preset).filename).toBe('src/styles.css');
+ });
+
+ it('falls back to the default preset for unknown ids', () => {
+ expect(playgroundPreset('missing').id).toBe('default');
+ });
+});
diff --git a/tsconfig.json b/tsconfig.json
index 8bf91d3..384cc2d 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,5 +1,5 @@
{
- "extends": "astro/tsconfigs/strict",
- "include": [".astro/types.d.ts", "**/*"],
+ "extends": "./node_modules/astro/tsconfigs/strict.json",
+ "include": [".astro/types.d.ts", "env.d.ts", "**/*"],
"exclude": ["dist"]
}
diff --git a/vitest.config.ts b/vitest.config.ts
new file mode 100644
index 0000000..43e56f4
--- /dev/null
+++ b/vitest.config.ts
@@ -0,0 +1,7 @@
+import { defineConfig } from 'vitest/config';
+
+export default defineConfig({
+ test: {
+ include: ['test/**/*.test.ts'],
+ },
+});