From 5230272dfa92e52b8f8f2f17cfa1dc9df17e4f03 Mon Sep 17 00:00:00 2001 From: sangwook Date: Fri, 17 Apr 2026 17:33:09 +0900 Subject: [PATCH 01/30] feat(cli): enforce vite-plus import lint rule --- packages/cli/package.json | 4 + .../create-missing-typecheck/snap.txt | 12 +- .../snap.txt | 11 +- .../migration-baseurl-tsconfig/snap.txt | 11 +- .../snap.txt | 2 +- .../migration-env-prefix-lint-staged/snap.txt | 2 +- .../migration-eslint-lint-staged/snap.txt | 11 +- .../migration-eslint-lintstagedrc/snap.txt | 11 +- .../snap.txt | 11 +- .../migration-eslint-rerun-mjs/snap.txt | 11 +- .../migration-eslint-rerun/snap.txt | 11 +- .../migration-eslint/snap.txt | 11 +- .../snap.txt | 2 +- .../snap.txt | 2 +- .../snap.txt | 2 +- .../snap.txt | 4 +- .../migration-from-tsdown/snap.txt | 4 +- .../migration-lint-staged-in-scripts/snap.txt | 2 +- .../migration-lintstagedrc-json/snap.txt | 2 +- .../snap.txt | 2 +- .../migration-merge-vite-config-js/snap.txt | 11 +- .../migration-merge-vite-config-ts/snap.txt | 11 +- .../migration-monorepo-bun/snap.txt | 11 +- .../snap.txt | 2 +- .../migration-monorepo-pnpm/snap.txt | 22 ++- .../migration-monorepo-yarn4/snap.txt | 11 +- .../snap.txt | 11 +- .../migration-oxlintrc-jsonc/snap.txt | 11 +- .../migration-prettier-eslint-combo/snap.txt | 11 +- .../migration-prettier-lint-staged/snap.txt | 2 +- .../migration-prettier-pkg-json/snap.txt | 2 +- .../migration-prettier/snap.txt | 2 +- .../migration-subpath/snap.txt | 2 +- .../snap.txt | 2 +- .../new-vite-monorepo/snap.txt | 6 +- .../command-init-inline-config/snap.txt | 6 +- .../lint-vite-plus-imports/package.json | 5 + .../lint-vite-plus-imports/snap.txt | 28 +++ .../lint-vite-plus-imports/src/index.ts | 8 + .../lint-vite-plus-imports/src/types.ts | 9 + .../lint-vite-plus-imports/steps.json | 8 + .../lint-vite-plus-imports/vite.config.ts | 10 ++ .../cli/src/__tests__/init-config.spec.ts | 5 + .../cli/src/__tests__/oxlint-plugin.spec.ts | 128 ++++++++++++++ packages/cli/src/init-config.ts | 7 +- packages/cli/src/migration/migrator.ts | 19 ++- packages/cli/src/oxlint-plugin-config.ts | 61 +++++++ packages/cli/src/oxlint-plugin.ts | 159 ++++++++++++++++++ packages/cli/tsdown.config.ts | 1 + 49 files changed, 635 insertions(+), 64 deletions(-) create mode 100644 packages/cli/snap-tests/lint-vite-plus-imports/package.json create mode 100644 packages/cli/snap-tests/lint-vite-plus-imports/snap.txt create mode 100644 packages/cli/snap-tests/lint-vite-plus-imports/src/index.ts create mode 100644 packages/cli/snap-tests/lint-vite-plus-imports/src/types.ts create mode 100644 packages/cli/snap-tests/lint-vite-plus-imports/steps.json create mode 100644 packages/cli/snap-tests/lint-vite-plus-imports/vite.config.ts create mode 100644 packages/cli/src/__tests__/oxlint-plugin.spec.ts create mode 100644 packages/cli/src/oxlint-plugin-config.ts create mode 100644 packages/cli/src/oxlint-plugin.ts diff --git a/packages/cli/package.json b/packages/cli/package.json index 2416708991..8635e091b5 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -74,6 +74,10 @@ "types": "./dist/lint.d.ts", "import": "./dist/lint.js" }, + "./oxlint-plugin": { + "types": "./dist/oxlint-plugin.d.ts", + "import": "./dist/oxlint-plugin.js" + }, "./package.json": "./package.json", "./pack": { "types": "./dist/pack.d.ts", diff --git a/packages/cli/snap-tests-global/create-missing-typecheck/snap.txt b/packages/cli/snap-tests-global/create-missing-typecheck/snap.txt index 66db5e4deb..34d5ab500c 100644 --- a/packages/cli/snap-tests-global/create-missing-typecheck/snap.txt +++ b/packages/cli/snap-tests-global/create-missing-typecheck/snap.txt @@ -7,7 +7,11 @@ export default defineConfig({ "*": "vp check --fix", }, fmt: {}, - lint: { options: { typeAware: true, typeCheck: true } }, + lint: { + jsPlugins: [{ name: "vite-plus", specifier: "vite-plus/oxlint-plugin" }], + rules: { "vite-plus/prefer-vite-plus-imports": "error" }, + options: { typeAware: true, typeCheck: true }, + }, }); > vp create vite:monorepo --no-interactive # create monorepo @@ -19,7 +23,11 @@ export default defineConfig({ "*": "vp check --fix", }, fmt: {}, - lint: { options: { typeAware: true, typeCheck: true } }, + lint: { + jsPlugins: [{ name: "vite-plus", specifier: "vite-plus/oxlint-plugin" }], + rules: { "vite-plus/prefer-vite-plus-imports": "error" }, + options: { typeAware: true, typeCheck: true }, + }, run: { cache: true, }, diff --git a/packages/cli/snap-tests-global/migration-auto-create-vite-config/snap.txt b/packages/cli/snap-tests-global/migration-auto-create-vite-config/snap.txt index b049e174dc..a9ba79dba8 100644 --- a/packages/cli/snap-tests-global/migration-auto-create-vite-config/snap.txt +++ b/packages/cli/snap-tests-global/migration-auto-create-vite-config/snap.txt @@ -19,12 +19,19 @@ export default defineConfig({ }, lint: { "rules": { - "no-unused-vars": "error" + "no-unused-vars": "error", + "vite-plus/prefer-vite-plus-imports": "error" }, "options": { "typeAware": true, "typeCheck": true - } + }, + "jsPlugins": [ + { + "name": "vite-plus", + "specifier": "vite-plus/oxlint-plugin" + } + ] }, }); diff --git a/packages/cli/snap-tests-global/migration-baseurl-tsconfig/snap.txt b/packages/cli/snap-tests-global/migration-baseurl-tsconfig/snap.txt index 9393cb84ff..3324c9477c 100644 --- a/packages/cli/snap-tests-global/migration-baseurl-tsconfig/snap.txt +++ b/packages/cli/snap-tests-global/migration-baseurl-tsconfig/snap.txt @@ -16,9 +16,16 @@ export default defineConfig({ fmt: {}, lint: { "rules": { - "no-unused-vars": "error" + "no-unused-vars": "error", + "vite-plus/prefer-vite-plus-imports": "error" }, - "options": {} + "options": {}, + "jsPlugins": [ + { + "name": "vite-plus", + "specifier": "vite-plus/oxlint-plugin" + } + ] }, }); diff --git a/packages/cli/snap-tests-global/migration-chained-lint-staged-pre-commit/snap.txt b/packages/cli/snap-tests-global/migration-chained-lint-staged-pre-commit/snap.txt index 0161925f43..e11ee6618d 100644 --- a/packages/cli/snap-tests-global/migration-chained-lint-staged-pre-commit/snap.txt +++ b/packages/cli/snap-tests-global/migration-chained-lint-staged-pre-commit/snap.txt @@ -39,7 +39,7 @@ import { defineConfig } from 'vite-plus'; export default defineConfig({ fmt: {}, - lint: {"options":{"typeAware":true,"typeCheck":true}}, + lint: {"jsPlugins":[{"name":"vite-plus","specifier":"vite-plus/oxlint-plugin"}],"rules":{"vite-plus/prefer-vite-plus-imports":"error"},"options":{"typeAware":true,"typeCheck":true}}, staged: { "*.js": "vp lint --fix" }, diff --git a/packages/cli/snap-tests-global/migration-env-prefix-lint-staged/snap.txt b/packages/cli/snap-tests-global/migration-env-prefix-lint-staged/snap.txt index 41b6bed86d..09f1bd3244 100644 --- a/packages/cli/snap-tests-global/migration-env-prefix-lint-staged/snap.txt +++ b/packages/cli/snap-tests-global/migration-env-prefix-lint-staged/snap.txt @@ -39,7 +39,7 @@ import { defineConfig } from 'vite-plus'; export default defineConfig({ fmt: {}, - lint: {"options":{"typeAware":true,"typeCheck":true}}, + lint: {"jsPlugins":[{"name":"vite-plus","specifier":"vite-plus/oxlint-plugin"}],"rules":{"vite-plus/prefer-vite-plus-imports":"error"},"options":{"typeAware":true,"typeCheck":true}}, staged: { "*.js": "vp lint --fix" }, diff --git a/packages/cli/snap-tests-global/migration-eslint-lint-staged/snap.txt b/packages/cli/snap-tests-global/migration-eslint-lint-staged/snap.txt index ceb867c486..9b84671413 100644 --- a/packages/cli/snap-tests-global/migration-eslint-lint-staged/snap.txt +++ b/packages/cli/snap-tests-global/migration-eslint-lint-staged/snap.txt @@ -53,12 +53,19 @@ export default defineConfig({ "builtin": true }, "rules": { - "no-unused-vars": "error" + "no-unused-vars": "error", + "vite-plus/prefer-vite-plus-imports": "error" }, "options": { "typeAware": true, "typeCheck": true - } + }, + "jsPlugins": [ + { + "name": "vite-plus", + "specifier": "vite-plus/oxlint-plugin" + } + ] }, staged: { "*.ts": "vp lint --fix" diff --git a/packages/cli/snap-tests-global/migration-eslint-lintstagedrc/snap.txt b/packages/cli/snap-tests-global/migration-eslint-lintstagedrc/snap.txt index c6b65a18d0..84d56a901a 100644 --- a/packages/cli/snap-tests-global/migration-eslint-lintstagedrc/snap.txt +++ b/packages/cli/snap-tests-global/migration-eslint-lintstagedrc/snap.txt @@ -54,12 +54,19 @@ export default defineConfig({ "builtin": true }, "rules": { - "no-unused-vars": "error" + "no-unused-vars": "error", + "vite-plus/prefer-vite-plus-imports": "error" }, "options": { "typeAware": true, "typeCheck": true - } + }, + "jsPlugins": [ + { + "name": "vite-plus", + "specifier": "vite-plus/oxlint-plugin" + } + ] }, staged: { "*.ts": "vp lint --fix" diff --git a/packages/cli/snap-tests-global/migration-eslint-rerun-dual-config/snap.txt b/packages/cli/snap-tests-global/migration-eslint-rerun-dual-config/snap.txt index d6ed3f9ee4..0464c8ed89 100644 --- a/packages/cli/snap-tests-global/migration-eslint-rerun-dual-config/snap.txt +++ b/packages/cli/snap-tests-global/migration-eslint-rerun-dual-config/snap.txt @@ -48,12 +48,19 @@ export default defineConfig({ "builtin": true }, "rules": { - "no-unused-vars": "error" + "no-unused-vars": "error", + "vite-plus/prefer-vite-plus-imports": "error" }, "options": { "typeAware": true, "typeCheck": true - } + }, + "jsPlugins": [ + { + "name": "vite-plus", + "specifier": "vite-plus/oxlint-plugin" + } + ] }, }); diff --git a/packages/cli/snap-tests-global/migration-eslint-rerun-mjs/snap.txt b/packages/cli/snap-tests-global/migration-eslint-rerun-mjs/snap.txt index 8f8795ad12..f172f96835 100644 --- a/packages/cli/snap-tests-global/migration-eslint-rerun-mjs/snap.txt +++ b/packages/cli/snap-tests-global/migration-eslint-rerun-mjs/snap.txt @@ -45,12 +45,19 @@ export default defineConfig({ "builtin": true }, "rules": { - "no-unused-vars": "error" + "no-unused-vars": "error", + "vite-plus/prefer-vite-plus-imports": "error" }, "options": { "typeAware": true, "typeCheck": true - } + }, + "jsPlugins": [ + { + "name": "vite-plus", + "specifier": "vite-plus/oxlint-plugin" + } + ] }, }); diff --git a/packages/cli/snap-tests-global/migration-eslint-rerun/snap.txt b/packages/cli/snap-tests-global/migration-eslint-rerun/snap.txt index a47dcc9f52..d616fdeeae 100644 --- a/packages/cli/snap-tests-global/migration-eslint-rerun/snap.txt +++ b/packages/cli/snap-tests-global/migration-eslint-rerun/snap.txt @@ -45,12 +45,19 @@ export default defineConfig({ "builtin": true }, "rules": { - "no-unused-vars": "error" + "no-unused-vars": "error", + "vite-plus/prefer-vite-plus-imports": "error" }, "options": { "typeAware": true, "typeCheck": true - } + }, + "jsPlugins": [ + { + "name": "vite-plus", + "specifier": "vite-plus/oxlint-plugin" + } + ] }, }); diff --git a/packages/cli/snap-tests-global/migration-eslint/snap.txt b/packages/cli/snap-tests-global/migration-eslint/snap.txt index 5b937631ff..adb2133899 100644 --- a/packages/cli/snap-tests-global/migration-eslint/snap.txt +++ b/packages/cli/snap-tests-global/migration-eslint/snap.txt @@ -60,11 +60,18 @@ export default defineConfig({ "builtin": true }, "rules": { - "no-unused-vars": "error" + "no-unused-vars": "error", + "vite-plus/prefer-vite-plus-imports": "error" }, "options": { "typeAware": true, "typeCheck": true - } + }, + "jsPlugins": [ + { + "name": "vite-plus", + "specifier": "vite-plus/oxlint-plugin" + } + ] }, }); diff --git a/packages/cli/snap-tests-global/migration-existing-husky-lint-staged/snap.txt b/packages/cli/snap-tests-global/migration-existing-husky-lint-staged/snap.txt index c90ca78a97..575d822366 100644 --- a/packages/cli/snap-tests-global/migration-existing-husky-lint-staged/snap.txt +++ b/packages/cli/snap-tests-global/migration-existing-husky-lint-staged/snap.txt @@ -39,7 +39,7 @@ import { defineConfig } from 'vite-plus'; export default defineConfig({ fmt: {}, - lint: {"options":{"typeAware":true,"typeCheck":true}}, + lint: {"jsPlugins":[{"name":"vite-plus","specifier":"vite-plus/oxlint-plugin"}],"rules":{"vite-plus/prefer-vite-plus-imports":"error"},"options":{"typeAware":true,"typeCheck":true}}, staged: { "*.js": "vp lint --fix" }, diff --git a/packages/cli/snap-tests-global/migration-existing-lint-staged-config/snap.txt b/packages/cli/snap-tests-global/migration-existing-lint-staged-config/snap.txt index 255cf37faf..5fe4086080 100644 --- a/packages/cli/snap-tests-global/migration-existing-lint-staged-config/snap.txt +++ b/packages/cli/snap-tests-global/migration-existing-lint-staged-config/snap.txt @@ -40,7 +40,7 @@ import { defineConfig } from 'vite-plus'; export default defineConfig({ fmt: {}, - lint: {"options":{"typeAware":true,"typeCheck":true}}, + lint: {"jsPlugins":[{"name":"vite-plus","specifier":"vite-plus/oxlint-plugin"}],"rules":{"vite-plus/prefer-vite-plus-imports":"error"},"options":{"typeAware":true,"typeCheck":true}}, staged: { "*.ts": "vp lint --fix" }, diff --git a/packages/cli/snap-tests-global/migration-existing-pnpm-exec-lint-staged/snap.txt b/packages/cli/snap-tests-global/migration-existing-pnpm-exec-lint-staged/snap.txt index c539c1eeb7..cd1b1b034f 100644 --- a/packages/cli/snap-tests-global/migration-existing-pnpm-exec-lint-staged/snap.txt +++ b/packages/cli/snap-tests-global/migration-existing-pnpm-exec-lint-staged/snap.txt @@ -39,7 +39,7 @@ import { defineConfig } from 'vite-plus'; export default defineConfig({ fmt: {}, - lint: {"options":{"typeAware":true,"typeCheck":true}}, + lint: {"jsPlugins":[{"name":"vite-plus","specifier":"vite-plus/oxlint-plugin"}],"rules":{"vite-plus/prefer-vite-plus-imports":"error"},"options":{"typeAware":true,"typeCheck":true}}, staged: { "*.js": "vp lint --fix" }, diff --git a/packages/cli/snap-tests-global/migration-from-tsdown-json-config/snap.txt b/packages/cli/snap-tests-global/migration-from-tsdown-json-config/snap.txt index 32c8c2f592..17f68627c1 100644 --- a/packages/cli/snap-tests-global/migration-from-tsdown-json-config/snap.txt +++ b/packages/cli/snap-tests-global/migration-from-tsdown-json-config/snap.txt @@ -21,7 +21,7 @@ export default defineConfig({ } }, fmt: {}, - lint: {"options":{"typeAware":true,"typeCheck":true}}, + lint: {"jsPlugins":[{"name":"vite-plus","specifier":"vite-plus/oxlint-plugin"}],"rules":{"vite-plus/prefer-vite-plus-imports":"error"},"options":{"typeAware":true,"typeCheck":true}}, server: { port: 3000, }, @@ -80,7 +80,7 @@ export default defineConfig({ } }, fmt: {}, - lint: {"options":{"typeAware":true,"typeCheck":true}}, + lint: {"jsPlugins":[{"name":"vite-plus","specifier":"vite-plus/oxlint-plugin"}],"rules":{"vite-plus/prefer-vite-plus-imports":"error"},"options":{"typeAware":true,"typeCheck":true}}, server: { port: 3000, }, diff --git a/packages/cli/snap-tests-global/migration-from-tsdown/snap.txt b/packages/cli/snap-tests-global/migration-from-tsdown/snap.txt index 659b946ffc..62b6159489 100644 --- a/packages/cli/snap-tests-global/migration-from-tsdown/snap.txt +++ b/packages/cli/snap-tests-global/migration-from-tsdown/snap.txt @@ -26,7 +26,7 @@ export default defineConfig({ }, pack: tsdownConfig, fmt: {}, - lint: {"options":{"typeAware":true,"typeCheck":true}}, + lint: {"jsPlugins":[{"name":"vite-plus","specifier":"vite-plus/oxlint-plugin"}],"rules":{"vite-plus/prefer-vite-plus-imports":"error"},"options":{"typeAware":true,"typeCheck":true}}, }); > cat package.json # check package.json @@ -86,7 +86,7 @@ export default defineConfig({ }, pack: tsdownConfig, fmt: {}, - lint: {"options":{"typeAware":true,"typeCheck":true}}, + lint: {"jsPlugins":[{"name":"vite-plus","specifier":"vite-plus/oxlint-plugin"}],"rules":{"vite-plus/prefer-vite-plus-imports":"error"},"options":{"typeAware":true,"typeCheck":true}}, }); > cat package.json # check package.json diff --git a/packages/cli/snap-tests-global/migration-lint-staged-in-scripts/snap.txt b/packages/cli/snap-tests-global/migration-lint-staged-in-scripts/snap.txt index 065527379e..d209113358 100644 --- a/packages/cli/snap-tests-global/migration-lint-staged-in-scripts/snap.txt +++ b/packages/cli/snap-tests-global/migration-lint-staged-in-scripts/snap.txt @@ -40,7 +40,7 @@ import { defineConfig } from 'vite-plus'; export default defineConfig({ fmt: {}, - lint: {"options":{"typeAware":true,"typeCheck":true}}, + lint: {"jsPlugins":[{"name":"vite-plus","specifier":"vite-plus/oxlint-plugin"}],"rules":{"vite-plus/prefer-vite-plus-imports":"error"},"options":{"typeAware":true,"typeCheck":true}}, staged: { "*.js": "vp lint --fix" }, diff --git a/packages/cli/snap-tests-global/migration-lintstagedrc-json/snap.txt b/packages/cli/snap-tests-global/migration-lintstagedrc-json/snap.txt index b737550dea..edad229783 100644 --- a/packages/cli/snap-tests-global/migration-lintstagedrc-json/snap.txt +++ b/packages/cli/snap-tests-global/migration-lintstagedrc-json/snap.txt @@ -111,7 +111,7 @@ import { defineConfig } from 'vite-plus'; export default defineConfig({ fmt: {}, - lint: {"options":{"typeAware":true,"typeCheck":true}}, + lint: {"jsPlugins":[{"name":"vite-plus","specifier":"vite-plus/oxlint-plugin"}],"rules":{"vite-plus/prefer-vite-plus-imports":"error"},"options":{"typeAware":true,"typeCheck":true}}, staged: { "*.@(js|ts|tsx|yml|yaml|md|json|html|toml)": [ "vp fmt --staged", diff --git a/packages/cli/snap-tests-global/migration-lintstagedrc-staged-exists/snap.txt b/packages/cli/snap-tests-global/migration-lintstagedrc-staged-exists/snap.txt index c664ffb794..cf04eefb59 100644 --- a/packages/cli/snap-tests-global/migration-lintstagedrc-staged-exists/snap.txt +++ b/packages/cli/snap-tests-global/migration-lintstagedrc-staged-exists/snap.txt @@ -43,7 +43,7 @@ import { defineConfig } from 'vite-plus'; export default defineConfig({ fmt: {}, - lint: {"options":{"typeAware":true,"typeCheck":true}}, + lint: {"jsPlugins":[{"name":"vite-plus","specifier":"vite-plus/oxlint-plugin"}],"rules":{"vite-plus/prefer-vite-plus-imports":"error"},"options":{"typeAware":true,"typeCheck":true}}, staged: { '*.js': 'vp check --fix', }, diff --git a/packages/cli/snap-tests-global/migration-merge-vite-config-js/snap.txt b/packages/cli/snap-tests-global/migration-merge-vite-config-js/snap.txt index 70bf4adcc3..a94942571c 100644 --- a/packages/cli/snap-tests-global/migration-merge-vite-config-js/snap.txt +++ b/packages/cli/snap-tests-global/migration-merge-vite-config-js/snap.txt @@ -13,12 +13,19 @@ export default { fmt: {}, lint: { "rules": { - "no-unused-vars": "error" + "no-unused-vars": "error", + "vite-plus/prefer-vite-plus-imports": "error" }, "options": { "typeAware": true, "typeCheck": true - } + }, + "jsPlugins": [ + { + "name": "vite-plus", + "specifier": "vite-plus/oxlint-plugin" + } + ] }, plugins: [react()], } diff --git a/packages/cli/snap-tests-global/migration-merge-vite-config-ts/snap.txt b/packages/cli/snap-tests-global/migration-merge-vite-config-ts/snap.txt index e24bd1aab7..463e623b0e 100644 --- a/packages/cli/snap-tests-global/migration-merge-vite-config-ts/snap.txt +++ b/packages/cli/snap-tests-global/migration-merge-vite-config-ts/snap.txt @@ -23,12 +23,19 @@ export default defineConfig({ }, lint: { "rules": { - "no-unused-vars": "error" + "no-unused-vars": "error", + "vite-plus/prefer-vite-plus-imports": "error" }, "options": { "typeAware": true, "typeCheck": true - } + }, + "jsPlugins": [ + { + "name": "vite-plus", + "specifier": "vite-plus/oxlint-plugin" + } + ] }, plugins: [react()], test: { diff --git a/packages/cli/snap-tests-global/migration-monorepo-bun/snap.txt b/packages/cli/snap-tests-global/migration-monorepo-bun/snap.txt index c6798a18eb..1d5272a485 100644 --- a/packages/cli/snap-tests-global/migration-monorepo-bun/snap.txt +++ b/packages/cli/snap-tests-global/migration-monorepo-bun/snap.txt @@ -16,12 +16,19 @@ export default defineConfig({ fmt: {}, lint: { "rules": { - "no-unused-vars": "error" + "no-unused-vars": "error", + "vite-plus/prefer-vite-plus-imports": "error" }, "options": { "typeAware": true, "typeCheck": true - } + }, + "jsPlugins": [ + { + "name": "vite-plus", + "specifier": "vite-plus/oxlint-plugin" + } + ] }, plugins: [react()], }); diff --git a/packages/cli/snap-tests-global/migration-monorepo-pnpm-overrides-dependency-selector/snap.txt b/packages/cli/snap-tests-global/migration-monorepo-pnpm-overrides-dependency-selector/snap.txt index 1fdeca7f13..5548766471 100644 --- a/packages/cli/snap-tests-global/migration-monorepo-pnpm-overrides-dependency-selector/snap.txt +++ b/packages/cli/snap-tests-global/migration-monorepo-pnpm-overrides-dependency-selector/snap.txt @@ -12,7 +12,7 @@ export default defineConfig({ "*": "vp check --fix" }, fmt: {}, - lint: {"options":{"typeAware":true,"typeCheck":true}}, + lint: {"jsPlugins":[{"name":"vite-plus","specifier":"vite-plus/oxlint-plugin"}],"rules":{"vite-plus/prefer-vite-plus-imports":"error"},"options":{"typeAware":true,"typeCheck":true}}, plugins: [react()], }); diff --git a/packages/cli/snap-tests-global/migration-monorepo-pnpm/snap.txt b/packages/cli/snap-tests-global/migration-monorepo-pnpm/snap.txt index 8051026665..8e07b806a5 100644 --- a/packages/cli/snap-tests-global/migration-monorepo-pnpm/snap.txt +++ b/packages/cli/snap-tests-global/migration-monorepo-pnpm/snap.txt @@ -24,12 +24,19 @@ export default defineConfig({ }, lint: { "rules": { - "no-unused-vars": "error" + "no-unused-vars": "error", + "vite-plus/prefer-vite-plus-imports": "error" }, "options": { "typeAware": true, "typeCheck": true - } + }, + "jsPlugins": [ + { + "name": "vite-plus", + "specifier": "vite-plus/oxlint-plugin" + } + ] }, plugins: [react()], }); @@ -158,12 +165,19 @@ import { defineConfig } from 'vite-plus'; export default defineConfig({ lint: { "rules": { - "no-unused-vars": "warn" + "no-unused-vars": "warn", + "vite-plus/prefer-vite-plus-imports": "error" }, "options": { "typeAware": true, "typeCheck": true - } + }, + "jsPlugins": [ + { + "name": "vite-plus", + "specifier": "vite-plus/oxlint-plugin" + } + ] }, }); diff --git a/packages/cli/snap-tests-global/migration-monorepo-yarn4/snap.txt b/packages/cli/snap-tests-global/migration-monorepo-yarn4/snap.txt index 5caba29812..21c314e0c4 100644 --- a/packages/cli/snap-tests-global/migration-monorepo-yarn4/snap.txt +++ b/packages/cli/snap-tests-global/migration-monorepo-yarn4/snap.txt @@ -16,12 +16,19 @@ export default defineConfig({ fmt: {}, lint: { "rules": { - "no-unused-vars": "error" + "no-unused-vars": "error", + "vite-plus/prefer-vite-plus-imports": "error" }, "options": { "typeAware": true, "typeCheck": true - } + }, + "jsPlugins": [ + { + "name": "vite-plus", + "specifier": "vite-plus/oxlint-plugin" + } + ] }, plugins: [react()], }); diff --git a/packages/cli/snap-tests-global/migration-oxlintrc-json-with-comments/snap.txt b/packages/cli/snap-tests-global/migration-oxlintrc-json-with-comments/snap.txt index fde6f9fedb..3a0819a9f6 100644 --- a/packages/cli/snap-tests-global/migration-oxlintrc-json-with-comments/snap.txt +++ b/packages/cli/snap-tests-global/migration-oxlintrc-json-with-comments/snap.txt @@ -16,14 +16,21 @@ export default defineConfig({ "correctness": "error" }, "rules": { - "no-console": "error" + "no-console": "error", + "vite-plus/prefer-vite-plus-imports": "error" }, "globals": {}, "ignorePatterns": [], "options": { "typeAware": true, "typeCheck": true - } + }, + "jsPlugins": [ + { + "name": "vite-plus", + "specifier": "vite-plus/oxlint-plugin" + } + ] }, }); diff --git a/packages/cli/snap-tests-global/migration-oxlintrc-jsonc/snap.txt b/packages/cli/snap-tests-global/migration-oxlintrc-jsonc/snap.txt index 506eb0eae5..ea1ad5683d 100644 --- a/packages/cli/snap-tests-global/migration-oxlintrc-jsonc/snap.txt +++ b/packages/cli/snap-tests-global/migration-oxlintrc-jsonc/snap.txt @@ -19,12 +19,19 @@ export default defineConfig({ }, lint: { "rules": { - "no-unused-vars": "error" + "no-unused-vars": "error", + "vite-plus/prefer-vite-plus-imports": "error" }, "options": { "typeAware": true, "typeCheck": true - } + }, + "jsPlugins": [ + { + "name": "vite-plus", + "specifier": "vite-plus/oxlint-plugin" + } + ] }, }); diff --git a/packages/cli/snap-tests-global/migration-prettier-eslint-combo/snap.txt b/packages/cli/snap-tests-global/migration-prettier-eslint-combo/snap.txt index 25e4d89457..af6923ff85 100644 --- a/packages/cli/snap-tests-global/migration-prettier-eslint-combo/snap.txt +++ b/packages/cli/snap-tests-global/migration-prettier-eslint-combo/snap.txt @@ -64,12 +64,19 @@ export default defineConfig({ "builtin": true }, "rules": { - "no-unused-vars": "error" + "no-unused-vars": "error", + "vite-plus/prefer-vite-plus-imports": "error" }, "options": { "typeAware": true, "typeCheck": true - } + }, + "jsPlugins": [ + { + "name": "vite-plus", + "specifier": "vite-plus/oxlint-plugin" + } + ] }, fmt: { semi: true, diff --git a/packages/cli/snap-tests-global/migration-prettier-lint-staged/snap.txt b/packages/cli/snap-tests-global/migration-prettier-lint-staged/snap.txt index 67f8200935..f1146ee19d 100644 --- a/packages/cli/snap-tests-global/migration-prettier-lint-staged/snap.txt +++ b/packages/cli/snap-tests-global/migration-prettier-lint-staged/snap.txt @@ -40,7 +40,7 @@ peerDependencyRules: import { defineConfig } from "vite-plus"; export default defineConfig({ - lint: {"options":{"typeAware":true,"typeCheck":true}}, + lint: {"jsPlugins":[{"name":"vite-plus","specifier":"vite-plus/oxlint-plugin"}],"rules":{"vite-plus/prefer-vite-plus-imports":"error"},"options":{"typeAware":true,"typeCheck":true}}, staged: { "*.ts": "vp fmt" }, diff --git a/packages/cli/snap-tests-global/migration-prettier-pkg-json/snap.txt b/packages/cli/snap-tests-global/migration-prettier-pkg-json/snap.txt index 4a84e32b90..34218fd6fb 100644 --- a/packages/cli/snap-tests-global/migration-prettier-pkg-json/snap.txt +++ b/packages/cli/snap-tests-global/migration-prettier-pkg-json/snap.txt @@ -44,7 +44,7 @@ export default defineConfig({ staged: { "*": "vp check --fix" }, - lint: {"options":{"typeAware":true,"typeCheck":true}}, + lint: {"jsPlugins":[{"name":"vite-plus","specifier":"vite-plus/oxlint-plugin"}],"rules":{"vite-plus/prefer-vite-plus-imports":"error"},"options":{"typeAware":true,"typeCheck":true}}, fmt: { semi: true, singleQuote: true, diff --git a/packages/cli/snap-tests-global/migration-prettier/snap.txt b/packages/cli/snap-tests-global/migration-prettier/snap.txt index 68f7dfe3e3..f191849c9e 100644 --- a/packages/cli/snap-tests-global/migration-prettier/snap.txt +++ b/packages/cli/snap-tests-global/migration-prettier/snap.txt @@ -47,7 +47,7 @@ export default defineConfig({ staged: { "*": "vp check --fix" }, - lint: {"options":{"typeAware":true,"typeCheck":true}}, + lint: {"jsPlugins":[{"name":"vite-plus","specifier":"vite-plus/oxlint-plugin"}],"rules":{"vite-plus/prefer-vite-plus-imports":"error"},"options":{"typeAware":true,"typeCheck":true}}, fmt: { semi: true, singleQuote: true, diff --git a/packages/cli/snap-tests-global/migration-subpath/snap.txt b/packages/cli/snap-tests-global/migration-subpath/snap.txt index 7bef48444a..48bd4cd095 100644 --- a/packages/cli/snap-tests-global/migration-subpath/snap.txt +++ b/packages/cli/snap-tests-global/migration-subpath/snap.txt @@ -29,7 +29,7 @@ import { defineConfig } from 'vite-plus'; export default defineConfig({ fmt: {}, - lint: {"options":{"typeAware":true,"typeCheck":true}}, + lint: {"jsPlugins":[{"name":"vite-plus","specifier":"vite-plus/oxlint-plugin"}],"rules":{"vite-plus/prefer-vite-plus-imports":"error"},"options":{"typeAware":true,"typeCheck":true}}, }); > git config --local core.hooksPath || echo 'core.hooksPath is not set' # should NOT be set diff --git a/packages/cli/snap-tests-global/migration-tsconfig-esmoduleinterop/snap.txt b/packages/cli/snap-tests-global/migration-tsconfig-esmoduleinterop/snap.txt index 870646d26e..839530ad51 100644 --- a/packages/cli/snap-tests-global/migration-tsconfig-esmoduleinterop/snap.txt +++ b/packages/cli/snap-tests-global/migration-tsconfig-esmoduleinterop/snap.txt @@ -23,7 +23,7 @@ export default defineConfig({ "*": "vp check --fix" }, fmt: {}, - lint: {"options":{"typeAware":true,"typeCheck":true}}, + lint: {"jsPlugins":[{"name":"vite-plus","specifier":"vite-plus/oxlint-plugin"}],"rules":{"vite-plus/prefer-vite-plus-imports":"error"},"options":{"typeAware":true,"typeCheck":true}}, }); > cat package.json # check package.json diff --git a/packages/cli/snap-tests-global/new-vite-monorepo/snap.txt b/packages/cli/snap-tests-global/new-vite-monorepo/snap.txt index 26df0d278b..271e3e0733 100644 --- a/packages/cli/snap-tests-global/new-vite-monorepo/snap.txt +++ b/packages/cli/snap-tests-global/new-vite-monorepo/snap.txt @@ -37,7 +37,11 @@ export default defineConfig({ "*": "vp check --fix", }, fmt: {}, - lint: { options: { typeAware: true, typeCheck: true } }, + lint: { + jsPlugins: [{ name: "vite-plus", specifier: "vite-plus/oxlint-plugin" }], + rules: { "vite-plus/prefer-vite-plus-imports": "error" }, + options: { typeAware: true, typeCheck: true }, + }, run: { cache: true, }, diff --git a/packages/cli/snap-tests/command-init-inline-config/snap.txt b/packages/cli/snap-tests/command-init-inline-config/snap.txt index 0f0dd21907..0704eaecd8 100644 --- a/packages/cli/snap-tests/command-init-inline-config/snap.txt +++ b/packages/cli/snap-tests/command-init-inline-config/snap.txt @@ -5,7 +5,11 @@ Added 'lint' to 'vite.config.ts'. import { defineConfig } from "vite-plus"; export default defineConfig({ - lint: { options: { typeAware: true, typeCheck: true } }, + lint: { + jsPlugins: [{ name: "vite-plus", specifier: "vite-plus/oxlint-plugin" }], + rules: { "vite-plus/prefer-vite-plus-imports": "error" }, + options: { typeAware: true, typeCheck: true }, + }, }); > test ! -f .oxlintrc.json # check .oxlintrc.json is removed diff --git a/packages/cli/snap-tests/lint-vite-plus-imports/package.json b/packages/cli/snap-tests/lint-vite-plus-imports/package.json new file mode 100644 index 0000000000..61d74a1408 --- /dev/null +++ b/packages/cli/snap-tests/lint-vite-plus-imports/package.json @@ -0,0 +1,5 @@ +{ + "name": "lint-vite-plus-imports", + "version": "0.0.0", + "private": true +} diff --git a/packages/cli/snap-tests/lint-vite-plus-imports/snap.txt b/packages/cli/snap-tests/lint-vite-plus-imports/snap.txt new file mode 100644 index 0000000000..867a0f61a7 --- /dev/null +++ b/packages/cli/snap-tests/lint-vite-plus-imports/snap.txt @@ -0,0 +1,28 @@ +> vp lint --fix src/index.ts src/types.ts # rewrite vite and vitest imports via the vite-plus oxlint plugin +Found 0 warnings and 0 errors. +Finished in ms on 2 files with rules using threads. + +> cat src/index.ts +import { defineConfig } from 'vite-plus'; + +const configPromise = import('vite-plus'); + +export { expect } from 'vite-plus/test'; + +void defineConfig; +void configPromise; + +> cat src/types.ts +type TestFn = typeof import('vite-plus/test')['test']; + +declare module 'vite-plus/test/browser-playwright' {} + +import client = require('vite-plus/client'); + +export type { TestFn }; + +void client; + +> vp lint src/index.ts src/types.ts # confirm the rewritten files are clean +Found 0 warnings and 0 errors. +Finished in ms on 2 files with rules using threads. diff --git a/packages/cli/snap-tests/lint-vite-plus-imports/src/index.ts b/packages/cli/snap-tests/lint-vite-plus-imports/src/index.ts new file mode 100644 index 0000000000..4b076872c4 --- /dev/null +++ b/packages/cli/snap-tests/lint-vite-plus-imports/src/index.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'vite'; + +const configPromise = import('vitest/config'); + +export { expect } from 'vitest'; + +void defineConfig; +void configPromise; diff --git a/packages/cli/snap-tests/lint-vite-plus-imports/src/types.ts b/packages/cli/snap-tests/lint-vite-plus-imports/src/types.ts new file mode 100644 index 0000000000..2f59ef7e1e --- /dev/null +++ b/packages/cli/snap-tests/lint-vite-plus-imports/src/types.ts @@ -0,0 +1,9 @@ +type TestFn = (typeof import('vitest'))['test']; + +declare module '@vitest/browser-playwright' {} + +import client = require('vite/client'); + +export type { TestFn }; + +void client; diff --git a/packages/cli/snap-tests/lint-vite-plus-imports/steps.json b/packages/cli/snap-tests/lint-vite-plus-imports/steps.json new file mode 100644 index 0000000000..3ec5635e82 --- /dev/null +++ b/packages/cli/snap-tests/lint-vite-plus-imports/steps.json @@ -0,0 +1,8 @@ +{ + "commands": [ + "vp lint --fix src/index.ts src/types.ts # rewrite vite and vitest imports via the vite-plus oxlint plugin", + "cat src/index.ts", + "cat src/types.ts", + "vp lint src/index.ts src/types.ts # confirm the rewritten files are clean" + ] +} diff --git a/packages/cli/snap-tests/lint-vite-plus-imports/vite.config.ts b/packages/cli/snap-tests/lint-vite-plus-imports/vite.config.ts new file mode 100644 index 0000000000..ccf62c766b --- /dev/null +++ b/packages/cli/snap-tests/lint-vite-plus-imports/vite.config.ts @@ -0,0 +1,10 @@ +import { defineConfig } from 'vite-plus'; + +export default defineConfig({ + lint: { + jsPlugins: [{ name: 'vite-plus', specifier: 'vite-plus/oxlint-plugin' }], + rules: { + 'vite-plus/prefer-vite-plus-imports': 'error', + }, + }, +}); diff --git a/packages/cli/src/__tests__/init-config.spec.ts b/packages/cli/src/__tests__/init-config.spec.ts index e51a2c3031..515c3f20cb 100644 --- a/packages/cli/src/__tests__/init-config.spec.ts +++ b/packages/cli/src/__tests__/init-config.spec.ts @@ -60,6 +60,9 @@ describe('applyToolInitConfigToViteConfig', () => { const content = fs.readFileSync(viteConfigPath, 'utf8'); expect(content).toContain('import { defineConfig } from'); expect(content).toContain('vite-plus'); + expect(content).toContain('jsPlugins'); + expect(content).toContain('vite-plus/oxlint-plugin'); + expect(content).toContain('prefer-vite-plus-imports'); expect(content).toContain('typeAware'); expect(content).toContain('typeCheck'); expect(fs.existsSync(path.join(projectPath, '.oxlintrc.json'))).toBe(false); @@ -119,6 +122,8 @@ describe('applyToolInitConfigToViteConfig', () => { expect(result.action).toBe('added'); const content = fs.readFileSync(path.join(projectPath, 'vite.config.ts'), 'utf8'); + expect(content).toContain('vite-plus/oxlint-plugin'); + expect(content).toContain('prefer-vite-plus-imports'); expect(content).toContain('typeAware'); expect(content).toContain('typeCheck'); expect(content).not.toContain('jsx-a11y'); diff --git a/packages/cli/src/__tests__/oxlint-plugin.spec.ts b/packages/cli/src/__tests__/oxlint-plugin.spec.ts new file mode 100644 index 0000000000..57b1080634 --- /dev/null +++ b/packages/cli/src/__tests__/oxlint-plugin.spec.ts @@ -0,0 +1,128 @@ +import { RuleTester } from 'oxlint/plugins-dev'; +import { describe, expect, it } from 'vitest'; + +import { + createDefaultVitePlusLintConfig, + ensureVitePlusImportRuleDefaults, + PREFER_VITE_PLUS_IMPORTS_RULE, + PREFER_VITE_PLUS_IMPORTS_RULE_NAME, + VITE_PLUS_OXLINT_PLUGIN_SPECIFIER, +} from '../oxlint-plugin-config.js'; +import { preferVitePlusImportsRule, rewriteVitePlusImportSpecifier } from '../oxlint-plugin.js'; + +type TestedRule = Parameters[1]; + +describe('oxlint plugin config defaults', () => { + it('adds vite-plus js plugin and lint rule defaults', () => { + expect( + createDefaultVitePlusLintConfig({ + includeTypeAwareDefaults: true, + }), + ).toEqual({ + jsPlugins: [ + { + name: 'vite-plus', + specifier: VITE_PLUS_OXLINT_PLUGIN_SPECIFIER, + }, + ], + options: { + typeAware: true, + typeCheck: true, + }, + rules: { + [PREFER_VITE_PLUS_IMPORTS_RULE]: 'error', + }, + }); + }); + + it('preserves explicit user settings while backfilling defaults', () => { + expect( + ensureVitePlusImportRuleDefaults({ + jsPlugins: [VITE_PLUS_OXLINT_PLUGIN_SPECIFIER], + rules: { + [PREFER_VITE_PLUS_IMPORTS_RULE]: 'off', + eqeqeq: 'warn', + }, + }), + ).toEqual({ + jsPlugins: [VITE_PLUS_OXLINT_PLUGIN_SPECIFIER], + rules: { + [PREFER_VITE_PLUS_IMPORTS_RULE]: 'off', + eqeqeq: 'warn', + }, + }); + }); +}); + +describe('rewriteVitePlusImportSpecifier', () => { + it('rewrites supported vite and vitest specifiers', () => { + expect(rewriteVitePlusImportSpecifier('vite')).toBe('vite-plus'); + expect(rewriteVitePlusImportSpecifier('vite/client')).toBe('vite-plus/client'); + expect(rewriteVitePlusImportSpecifier('vitest')).toBe('vite-plus/test'); + expect(rewriteVitePlusImportSpecifier('vitest/config')).toBe('vite-plus'); + expect(rewriteVitePlusImportSpecifier('@vitest/browser')).toBe('vite-plus/test/browser'); + expect(rewriteVitePlusImportSpecifier('@vitest/browser-playwright/provider')).toBe( + 'vite-plus/test/browser-playwright/provider', + ); + expect(rewriteVitePlusImportSpecifier('tsx')).toBeNull(); + }); +}); + +new RuleTester({ + languageOptions: { + sourceType: 'module', + }, +}).run(PREFER_VITE_PLUS_IMPORTS_RULE_NAME, preferVitePlusImportsRule as TestedRule, { + valid: [ + `import { defineConfig } from 'vite-plus'`, + `export { expect } from 'vite-plus/test'`, + { + code: `declare module 'vite-plus/test/browser' {}`, + filename: 'types.ts', + }, + { + code: `type TestFn = typeof import('vite-plus/test')['test']`, + filename: 'types.ts', + }, + ], + invalid: [ + { + code: `import { defineConfig } from 'vite'`, + errors: 1, + output: `import { defineConfig } from 'vite-plus'`, + }, + { + code: `export { defineConfig } from "vite"`, + errors: 1, + output: `export { defineConfig } from "vite-plus"`, + }, + { + code: `const mod = import('vitest/config')`, + errors: 1, + output: `const mod = import('vite-plus')`, + }, + { + code: `type TestFn = typeof import('vitest')['test']`, + errors: 1, + filename: 'types.ts', + output: `type TestFn = typeof import('vite-plus/test')['test']`, + }, + { + code: `declare module '@vitest/browser-playwright' {}`, + errors: 1, + filename: 'types.ts', + output: `declare module 'vite-plus/test/browser-playwright' {}`, + }, + { + code: `import foo = require('vite/client')`, + errors: 1, + filename: 'types.ts', + output: `import foo = require('vite-plus/client')`, + }, + { + code: `export * from 'vitest';\nimport { defineConfig } from 'vite';`, + errors: 2, + output: `export * from 'vite-plus/test';\nimport { defineConfig } from 'vite-plus';`, + }, + ], +}); diff --git a/packages/cli/src/init-config.ts b/packages/cli/src/init-config.ts index 7439c69630..15c4ad7e87 100644 --- a/packages/cli/src/init-config.ts +++ b/packages/cli/src/init-config.ts @@ -2,6 +2,7 @@ import fs from 'node:fs'; import path from 'node:path'; import { mergeJsonConfig } from '../binding/index.js'; +import { createDefaultVitePlusLintConfig } from './oxlint-plugin-config.ts'; import { fmt as resolveFmt } from './resolve-fmt.ts'; import { runCommandSilently } from './utils/command.ts'; import { BASEURL_TSCONFIG_WARNING, VITE_PLUS_NAME } from './utils/constants.ts'; @@ -233,11 +234,13 @@ export async function applyToolInitConfigToViteConfig( const lintInitConfigPath = path.join(projectPath, '.vite-plus-lint-init.oxlintrc.json'); // Skip typeAware/typeCheck when tsconfig.json has baseUrl (unsupported by tsgolint) const hasBaseUrl = hasBaseUrlInTsconfig(projectPath); - const initOptions = hasBaseUrl ? {} : { typeAware: true, typeCheck: true }; + const initConfig = createDefaultVitePlusLintConfig({ + includeTypeAwareDefaults: !hasBaseUrl, + }); if (hasBaseUrl) { warnMsg(BASEURL_TSCONFIG_WARNING); } - fs.writeFileSync(lintInitConfigPath, JSON.stringify({ options: initOptions })); + fs.writeFileSync(lintInitConfigPath, JSON.stringify(initConfig)); const mergeResult = mergeJsonConfig(viteConfigPath, lintInitConfigPath, spec.configKey); if (!mergeResult.updated) { diff --git a/packages/cli/src/migration/migrator.ts b/packages/cli/src/migration/migrator.ts index a228a1db1a..06af0d2e62 100644 --- a/packages/cli/src/migration/migrator.ts +++ b/packages/cli/src/migration/migrator.ts @@ -4,6 +4,7 @@ import { styleText } from 'node:util'; import * as prompts from '@voidzero-dev/vite-plus-prompts'; import spawn from 'cross-spawn'; +import type { OxlintConfig } from 'oxlint'; import semver from 'semver'; import { Scalar, YAMLMap, YAMLSeq } from 'yaml'; @@ -16,6 +17,10 @@ import { rewriteImportsInDirectory, type DownloadPackageManagerResult, } from '../../binding/index.js'; +import { + createDefaultVitePlusLintConfig, + ensureVitePlusImportRuleDefaults, +} from '../oxlint-plugin-config.ts'; import { PackageManager, type WorkspaceInfo, type WorkspacePackage } from '../types/index.ts'; import { runCommandSilently } from '../utils/command.ts'; import { @@ -1938,7 +1943,7 @@ export function mergeViteConfigFiles( if (configs.oxlintConfig) { // Inject options.typeAware and options.typeCheck defaults before merging const fullOxlintPath = path.join(projectPath, configs.oxlintConfig); - const oxlintJson = readJsonFile(fullOxlintPath, true) as { options?: Record }; + const oxlintJson = readJsonFile(fullOxlintPath, true) as OxlintConfig; if (!oxlintJson.options) { oxlintJson.options = {}; } @@ -1953,7 +1958,8 @@ export function mergeViteConfigFiles( } else { warnMigration(BASEURL_TSCONFIG_WARNING, report); } - fs.writeFileSync(fullOxlintPath, JSON.stringify(oxlintJson, null, 2)); + const normalizedOxlintConfig = ensureVitePlusImportRuleDefaults(oxlintJson); + fs.writeFileSync(fullOxlintPath, JSON.stringify(normalizedOxlintConfig, null, 2)); // merge oxlint config into vite.config.ts mergeAndRemoveJsonConfig(projectPath, viteConfig, configs.oxlintConfig, 'lint', silent, report); } @@ -1973,14 +1979,15 @@ export function injectLintTypeCheckDefaults( silent = false, report?: MigrationReport, ): void { - if (hasBaseUrlInTsconfig(projectPath)) { - return; - } injectConfigDefaults( projectPath, 'lint', '.vite-plus-lint-init.oxlintrc.json', - JSON.stringify({ options: { typeAware: true, typeCheck: true } }), + JSON.stringify( + createDefaultVitePlusLintConfig({ + includeTypeAwareDefaults: !hasBaseUrlInTsconfig(projectPath), + }), + ), silent, report, ); diff --git a/packages/cli/src/oxlint-plugin-config.ts b/packages/cli/src/oxlint-plugin-config.ts new file mode 100644 index 0000000000..5d9c21fffa --- /dev/null +++ b/packages/cli/src/oxlint-plugin-config.ts @@ -0,0 +1,61 @@ +import type { OxlintConfig } from 'oxlint'; + +import { VITE_PLUS_NAME } from './utils/constants.ts'; + +export const VITE_PLUS_OXLINT_PLUGIN_NAME = VITE_PLUS_NAME; +export const VITE_PLUS_OXLINT_PLUGIN_SPECIFIER = `${VITE_PLUS_NAME}/oxlint-plugin`; +export const PREFER_VITE_PLUS_IMPORTS_RULE_NAME = 'prefer-vite-plus-imports'; +export const PREFER_VITE_PLUS_IMPORTS_RULE = `${VITE_PLUS_OXLINT_PLUGIN_NAME}/${PREFER_VITE_PLUS_IMPORTS_RULE_NAME}`; + +type JsPluginEntry = NonNullable[number]; + +function hasVitePlusPlugin(entry: JsPluginEntry): boolean { + if (typeof entry === 'string') { + return entry === VITE_PLUS_OXLINT_PLUGIN_SPECIFIER; + } + + return entry.specifier === VITE_PLUS_OXLINT_PLUGIN_SPECIFIER; +} + +function isRuleRecord( + value: OxlintConfig['rules'] | undefined, +): value is NonNullable { + return typeof value === 'object' && value !== null && !Array.isArray(value); +} + +export function ensureVitePlusImportRuleDefaults< + T extends Pick, +>(config: T): T { + const jsPlugins = Array.isArray(config.jsPlugins) ? [...config.jsPlugins] : []; + if (!jsPlugins.some(hasVitePlusPlugin)) { + jsPlugins.push({ + name: VITE_PLUS_OXLINT_PLUGIN_NAME, + specifier: VITE_PLUS_OXLINT_PLUGIN_SPECIFIER, + }); + } + + const rules = isRuleRecord(config.rules) ? { ...config.rules } : {}; + if (!(PREFER_VITE_PLUS_IMPORTS_RULE in rules)) { + rules[PREFER_VITE_PLUS_IMPORTS_RULE] = 'error'; + } + + return { + ...config, + jsPlugins, + rules, + }; +} + +export function createDefaultVitePlusLintConfig(options?: { + includeTypeAwareDefaults?: boolean; +}): Pick { + const config: Pick = + ensureVitePlusImportRuleDefaults({}); + if (options?.includeTypeAwareDefaults) { + config.options = { + typeAware: true, + typeCheck: true, + }; + } + return config; +} diff --git a/packages/cli/src/oxlint-plugin.ts b/packages/cli/src/oxlint-plugin.ts new file mode 100644 index 0000000000..3e90f3557b --- /dev/null +++ b/packages/cli/src/oxlint-plugin.ts @@ -0,0 +1,159 @@ +import { + PREFER_VITE_PLUS_IMPORTS_RULE_NAME, + VITE_PLUS_OXLINT_PLUGIN_NAME, +} from './oxlint-plugin-config.ts'; + +interface StringLiteralLike { + raw: string | null; + type: 'Literal'; + value: string; +} + +interface ReportContext { + report(diagnostic: { + data: Record; + fix: (fixer: Fixer) => unknown; + messageId: 'preferVitePlusImports'; + node: StringLiteralLike; + }): void; +} + +interface Fixer { + replaceText(node: unknown, text: string): unknown; +} + +function isStringLiteralLike(value: unknown): value is StringLiteralLike { + return ( + typeof value === 'object' && + value !== null && + 'type' in value && + value.type === 'Literal' && + 'value' in value && + typeof value.value === 'string' + ); +} + +function rewriteVitePlusImportSpecifier(specifier: string): string | null { + if (specifier === 'vite') { + return 'vite-plus'; + } + + if (specifier.startsWith('vite/')) { + return `vite-plus/${specifier.slice('vite/'.length)}`; + } + + if (specifier === 'vitest/config') { + return 'vite-plus'; + } + + if (specifier === 'vitest') { + return 'vite-plus/test'; + } + + if (specifier.startsWith('vitest/')) { + return `vite-plus/test/${specifier.slice('vitest/'.length)}`; + } + + for (const prefix of [ + '@vitest/browser-playwright', + '@vitest/browser-preview', + '@vitest/browser-webdriverio', + '@vitest/browser', + ]) { + if (specifier === prefix) { + return `vite-plus/test/${prefix.slice('@vitest/'.length)}`; + } + + if (specifier.startsWith(`${prefix}/`)) { + return `vite-plus/test/${specifier.slice('@vitest/'.length)}`; + } + } + + return null; +} + +function quoteSpecifier(literal: StringLiteralLike, replacement: string): string { + const quote = literal.raw?.startsWith("'") ? "'" : '"'; + return `${quote}${replacement}${quote}`; +} + +function maybeReportLiteral(context: ReportContext, literal: StringLiteralLike | null | undefined) { + if (!literal || typeof literal.value !== 'string') { + return; + } + + const replacement = rewriteVitePlusImportSpecifier(literal.value); + if (!replacement) { + return; + } + + context.report({ + node: literal, + messageId: 'preferVitePlusImports', + data: { + from: literal.value, + to: replacement, + }, + fix(fixer) { + return fixer.replaceText(literal, quoteSpecifier(literal, replacement)); + }, + }); +} + +export const preferVitePlusImportsRule = { + meta: { + type: 'problem', + docs: { + description: 'Prefer vite-plus module specifiers over vite and vitest packages.', + recommended: true, + url: 'https://github.com/voidzero-dev/vite-plus/issues/1301', + }, + fixable: 'code', + messages: { + preferVitePlusImports: "Use '{{to}}' instead of '{{from}}' in Vite+ projects.", + }, + }, + create(context: any) { + return { + ImportDeclaration(node: { source: StringLiteralLike }) { + maybeReportLiteral(context, node.source); + }, + ExportAllDeclaration(node: { source: StringLiteralLike }) { + maybeReportLiteral(context, node.source); + }, + ExportNamedDeclaration(node: { source: StringLiteralLike | null }) { + maybeReportLiteral(context, node.source); + }, + ImportExpression(node: { source: unknown }) { + if (!isStringLiteralLike(node.source)) { + return; + } + maybeReportLiteral(context, node.source); + }, + TSImportType(node: { source: StringLiteralLike }) { + maybeReportLiteral(context, node.source); + }, + TSExternalModuleReference(node: { expression: StringLiteralLike }) { + maybeReportLiteral(context, node.expression); + }, + TSModuleDeclaration(node: { global?: boolean; id: StringLiteralLike | { type: string } }) { + if (node.global || !isStringLiteralLike(node.id)) { + return; + } + maybeReportLiteral(context, node.id); + }, + }; + }, +}; + +const plugin = { + meta: { + name: VITE_PLUS_OXLINT_PLUGIN_NAME, + }, + rules: { + [PREFER_VITE_PLUS_IMPORTS_RULE_NAME]: preferVitePlusImportsRule, + }, +}; + +export default plugin; +export { rewriteVitePlusImportSpecifier }; diff --git a/packages/cli/tsdown.config.ts b/packages/cli/tsdown.config.ts index d3c18640b5..f9a1f360bf 100644 --- a/packages/cli/tsdown.config.ts +++ b/packages/cli/tsdown.config.ts @@ -28,6 +28,7 @@ export default defineConfig([ 'define-config': './src/define-config.ts', fmt: './src/fmt.ts', lint: './src/lint.ts', + 'oxlint-plugin': './src/oxlint-plugin.ts', pack: './src/pack.ts', 'pack-bin': './src/pack-bin.ts', // Global commands — explicit entries ensure lazy loading via dynamic import in bin.ts. From f010f5d597cee9a02acdcaa25452c4e1d1853c1a Mon Sep 17 00:00:00 2001 From: sangwook Date: Fri, 17 Apr 2026 18:35:14 +0900 Subject: [PATCH 02/30] test: update lint-vite-plus-imports snap --- packages/cli/snap-tests/lint-vite-plus-imports/snap.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/snap-tests/lint-vite-plus-imports/snap.txt b/packages/cli/snap-tests/lint-vite-plus-imports/snap.txt index 867a0f61a7..1c6f0a26c2 100644 --- a/packages/cli/snap-tests/lint-vite-plus-imports/snap.txt +++ b/packages/cli/snap-tests/lint-vite-plus-imports/snap.txt @@ -13,7 +13,7 @@ void defineConfig; void configPromise; > cat src/types.ts -type TestFn = typeof import('vite-plus/test')['test']; +type TestFn = (typeof import('vite-plus/test'))['test']; declare module 'vite-plus/test/browser-playwright' {} From 34a034f1e3ec398790ff1466e726dc0e31a620c7 Mon Sep 17 00:00:00 2001 From: sangwook Date: Fri, 17 Apr 2026 22:08:18 +0900 Subject: [PATCH 03/30] test: assert lint-vite-plus-imports fails before fix --- .../lint-vite-plus-imports/snap.txt | 51 +++++++++++++++++++ .../lint-vite-plus-imports/steps.json | 1 + 2 files changed, 52 insertions(+) diff --git a/packages/cli/snap-tests/lint-vite-plus-imports/snap.txt b/packages/cli/snap-tests/lint-vite-plus-imports/snap.txt index 1c6f0a26c2..96d2af014b 100644 --- a/packages/cli/snap-tests/lint-vite-plus-imports/snap.txt +++ b/packages/cli/snap-tests/lint-vite-plus-imports/snap.txt @@ -1,3 +1,54 @@ +[1]> vp lint src/index.ts src/types.ts # should fail before fix + + × vite-plus(prefer-vite-plus-imports): Use 'vite-plus' instead of 'vite' in Vite+ projects. + ╭─[src/index.ts:1:30] + 1 │ import { defineConfig } from 'vite'; + · ────── + 2 │ + ╰──── + + × vite-plus(prefer-vite-plus-imports): Use 'vite-plus' instead of 'vitest/config' in Vite+ projects. + ╭─[src/index.ts:3:30] + 2 │ + 3 │ const configPromise = import('vitest/config'); + · ─────────────── + 4 │ + ╰──── + + × vite-plus(prefer-vite-plus-imports): Use 'vite-plus/test' instead of 'vitest' in Vite+ projects. + ╭─[src/index.ts:5:24] + 4 │ + 5 │ export { expect } from 'vitest'; + · ──────── + 6 │ + ╰──── + + × vite-plus(prefer-vite-plus-imports): Use 'vite-plus/test' instead of 'vitest' in Vite+ projects. + ╭─[src/types.ts:1:30] + 1 │ type TestFn = (typeof import('vitest'))['test']; + · ──────── + 2 │ + ╰──── + + × vite-plus(prefer-vite-plus-imports): Use 'vite-plus/test/browser-playwright' instead of '@vitest/browser-playwright' in Vite+ projects. + ╭─[src/types.ts:3:16] + 2 │ + 3 │ declare module '@vitest/browser-playwright' {} + · ──────────────────────────── + 4 │ + ╰──── + + × vite-plus(prefer-vite-plus-imports): Use 'vite-plus/client' instead of 'vite/client' in Vite+ projects. + ╭─[src/types.ts:5:25] + 4 │ + 5 │ import client = require('vite/client'); + · ───────────── + 6 │ + ╰──── + +Found 0 warnings and 6 errors. +Finished in ms on 2 files with rules using threads. + > vp lint --fix src/index.ts src/types.ts # rewrite vite and vitest imports via the vite-plus oxlint plugin Found 0 warnings and 0 errors. Finished in ms on 2 files with rules using threads. diff --git a/packages/cli/snap-tests/lint-vite-plus-imports/steps.json b/packages/cli/snap-tests/lint-vite-plus-imports/steps.json index 3ec5635e82..71678b890d 100644 --- a/packages/cli/snap-tests/lint-vite-plus-imports/steps.json +++ b/packages/cli/snap-tests/lint-vite-plus-imports/steps.json @@ -1,5 +1,6 @@ { "commands": [ + "vp lint src/index.ts src/types.ts # should fail before fix", "vp lint --fix src/index.ts src/types.ts # rewrite vite and vitest imports via the vite-plus oxlint plugin", "cat src/index.ts", "cat src/types.ts", From 0b09dc3aaa3ba84c5c8b6865256b131595cf0ec5 Mon Sep 17 00:00:00 2001 From: sangwook Date: Fri, 17 Apr 2026 22:22:32 +0900 Subject: [PATCH 04/30] fix: rewrite vitest browser imports to exported paths --- .../lint-vite-plus-imports/snap.txt | 86 +++++++++++++------ .../lint-vite-plus-imports/src/types.ts | 6 +- .../cli/src/__tests__/oxlint-plugin.spec.ts | 45 +++++++++- packages/cli/src/oxlint-plugin.ts | 32 +++++-- 4 files changed, 134 insertions(+), 35 deletions(-) diff --git a/packages/cli/snap-tests/lint-vite-plus-imports/snap.txt b/packages/cli/snap-tests/lint-vite-plus-imports/snap.txt index 96d2af014b..fb5c05641a 100644 --- a/packages/cli/snap-tests/lint-vite-plus-imports/snap.txt +++ b/packages/cli/snap-tests/lint-vite-plus-imports/snap.txt @@ -1,5 +1,60 @@ [1]> vp lint src/index.ts src/types.ts # should fail before fix + × vite-plus(prefer-vite-plus-imports): Use 'vite-plus/test' instead of 'vitest' in Vite+ projects. + ╭─[src/types.ts:1:30] + 1 │ type TestFn = (typeof import('vitest'))['test']; + · ──────── + 2 │ type BrowserContext = typeof import('@vitest/browser/context'); + ╰──── + + × vite-plus(prefer-vite-plus-imports): Use 'vite-plus/test/browser/context' instead of '@vitest/browser/context' in Vite+ projects. + ╭─[src/types.ts:2:37] + 1 │ type TestFn = (typeof import('vitest'))['test']; + 2 │ type BrowserContext = typeof import('@vitest/browser/context'); + · ───────────────────────── + 3 │ type BrowserClient = typeof import('@vitest/browser/client'); + ╰──── + + × vite-plus(prefer-vite-plus-imports): Use 'vite-plus/test/client' instead of '@vitest/browser/client' in Vite+ projects. + ╭─[src/types.ts:3:36] + 2 │ type BrowserContext = typeof import('@vitest/browser/context'); + 3 │ type BrowserClient = typeof import('@vitest/browser/client'); + · ──────────────────────── + 4 │ type PlaywrightProvider = typeof import('@vitest/browser-playwright/provider'); + ╰──── + + × vite-plus(prefer-vite-plus-imports): Use 'vite-plus/test/browser/providers/playwright' instead of '@vitest/browser-playwright/provider' in Vite+ projects. + ╭─[src/types.ts:4:41] + 3 │ type BrowserClient = typeof import('@vitest/browser/client'); + 4 │ type PlaywrightProvider = typeof import('@vitest/browser-playwright/provider'); + · ───────────────────────────────────── + 5 │ + ╰──── + + × vite-plus(prefer-vite-plus-imports): Use 'vite-plus/test/browser-playwright' instead of '@vitest/browser-playwright' in Vite+ projects. + ╭─[src/types.ts:6:16] + 5 │ + 6 │ declare module '@vitest/browser-playwright' {} + · ──────────────────────────── + 7 │ declare module '@vitest/browser-playwright/context' {} + ╰──── + + × vite-plus(prefer-vite-plus-imports): Use 'vite-plus/test/browser/context' instead of '@vitest/browser-playwright/context' in Vite+ projects. + ╭─[src/types.ts:7:16] + 6 │ declare module '@vitest/browser-playwright' {} + 7 │ declare module '@vitest/browser-playwright/context' {} + · ──────────────────────────────────── + 8 │ + ╰──── + + × vite-plus(prefer-vite-plus-imports): Use 'vite-plus/client' instead of 'vite/client' in Vite+ projects. + ╭─[src/types.ts:9:25] + 8 │ + 9 │ import client = require('vite/client'); + · ───────────── + 10 │ + ╰──── + × vite-plus(prefer-vite-plus-imports): Use 'vite-plus' instead of 'vite' in Vite+ projects. ╭─[src/index.ts:1:30] 1 │ import { defineConfig } from 'vite'; @@ -23,30 +78,7 @@ 6 │ ╰──── - × vite-plus(prefer-vite-plus-imports): Use 'vite-plus/test' instead of 'vitest' in Vite+ projects. - ╭─[src/types.ts:1:30] - 1 │ type TestFn = (typeof import('vitest'))['test']; - · ──────── - 2 │ - ╰──── - - × vite-plus(prefer-vite-plus-imports): Use 'vite-plus/test/browser-playwright' instead of '@vitest/browser-playwright' in Vite+ projects. - ╭─[src/types.ts:3:16] - 2 │ - 3 │ declare module '@vitest/browser-playwright' {} - · ──────────────────────────── - 4 │ - ╰──── - - × vite-plus(prefer-vite-plus-imports): Use 'vite-plus/client' instead of 'vite/client' in Vite+ projects. - ╭─[src/types.ts:5:25] - 4 │ - 5 │ import client = require('vite/client'); - · ───────────── - 6 │ - ╰──── - -Found 0 warnings and 6 errors. +Found 0 warnings and 10 errors. Finished in ms on 2 files with rules using threads. > vp lint --fix src/index.ts src/types.ts # rewrite vite and vitest imports via the vite-plus oxlint plugin @@ -65,12 +97,16 @@ void configPromise; > cat src/types.ts type TestFn = (typeof import('vite-plus/test'))['test']; +type BrowserContext = typeof import('vite-plus/test/browser/context'); +type BrowserClient = typeof import('vite-plus/test/client'); +type PlaywrightProvider = typeof import('vite-plus/test/browser/providers/playwright'); declare module 'vite-plus/test/browser-playwright' {} +declare module 'vite-plus/test/browser/context' {} import client = require('vite-plus/client'); -export type { TestFn }; +export type { BrowserClient, BrowserContext, PlaywrightProvider, TestFn }; void client; diff --git a/packages/cli/snap-tests/lint-vite-plus-imports/src/types.ts b/packages/cli/snap-tests/lint-vite-plus-imports/src/types.ts index 2f59ef7e1e..5a7c44a684 100644 --- a/packages/cli/snap-tests/lint-vite-plus-imports/src/types.ts +++ b/packages/cli/snap-tests/lint-vite-plus-imports/src/types.ts @@ -1,9 +1,13 @@ type TestFn = (typeof import('vitest'))['test']; +type BrowserContext = typeof import('@vitest/browser/context'); +type BrowserClient = typeof import('@vitest/browser/client'); +type PlaywrightProvider = typeof import('@vitest/browser-playwright/provider'); declare module '@vitest/browser-playwright' {} +declare module '@vitest/browser-playwright/context' {} import client = require('vite/client'); -export type { TestFn }; +export type { BrowserClient, BrowserContext, PlaywrightProvider, TestFn }; void client; diff --git a/packages/cli/src/__tests__/oxlint-plugin.spec.ts b/packages/cli/src/__tests__/oxlint-plugin.spec.ts index 57b1080634..8d91b0b32f 100644 --- a/packages/cli/src/__tests__/oxlint-plugin.spec.ts +++ b/packages/cli/src/__tests__/oxlint-plugin.spec.ts @@ -61,9 +61,26 @@ describe('rewriteVitePlusImportSpecifier', () => { expect(rewriteVitePlusImportSpecifier('vitest')).toBe('vite-plus/test'); expect(rewriteVitePlusImportSpecifier('vitest/config')).toBe('vite-plus'); expect(rewriteVitePlusImportSpecifier('@vitest/browser')).toBe('vite-plus/test/browser'); + expect(rewriteVitePlusImportSpecifier('@vitest/browser/context')).toBe( + 'vite-plus/test/browser/context', + ); + expect(rewriteVitePlusImportSpecifier('@vitest/browser/client')).toBe('vite-plus/test/client'); + expect(rewriteVitePlusImportSpecifier('@vitest/browser/locators')).toBe( + 'vite-plus/test/locators', + ); + expect(rewriteVitePlusImportSpecifier('@vitest/browser-playwright/context')).toBe( + 'vite-plus/test/browser/context', + ); expect(rewriteVitePlusImportSpecifier('@vitest/browser-playwright/provider')).toBe( - 'vite-plus/test/browser-playwright/provider', + 'vite-plus/test/browser/providers/playwright', ); + expect(rewriteVitePlusImportSpecifier('@vitest/browser-preview/provider')).toBe( + 'vite-plus/test/browser/providers/preview', + ); + expect(rewriteVitePlusImportSpecifier('@vitest/browser-webdriverio/provider')).toBe( + 'vite-plus/test/browser/providers/webdriverio', + ); + expect(rewriteVitePlusImportSpecifier('@vitest/browser-playwright/locators')).toBeNull(); expect(rewriteVitePlusImportSpecifier('tsx')).toBeNull(); }); }); @@ -80,6 +97,14 @@ new RuleTester({ code: `declare module 'vite-plus/test/browser' {}`, filename: 'types.ts', }, + { + code: `type BrowserClient = typeof import('vite-plus/test/client')`, + filename: 'types.ts', + }, + { + code: `type PlaywrightProvider = typeof import('vite-plus/test/browser/providers/playwright')`, + filename: 'types.ts', + }, { code: `type TestFn = typeof import('vite-plus/test')['test']`, filename: 'types.ts', @@ -113,6 +138,24 @@ new RuleTester({ filename: 'types.ts', output: `declare module 'vite-plus/test/browser-playwright' {}`, }, + { + code: `declare module '@vitest/browser-playwright/context' {}`, + errors: 1, + filename: 'types.ts', + output: `declare module 'vite-plus/test/browser/context' {}`, + }, + { + code: `type BrowserClient = typeof import('@vitest/browser/client')`, + errors: 1, + filename: 'types.ts', + output: `type BrowserClient = typeof import('vite-plus/test/client')`, + }, + { + code: `type PlaywrightProvider = typeof import('@vitest/browser-playwright/provider')`, + errors: 1, + filename: 'types.ts', + output: `type PlaywrightProvider = typeof import('vite-plus/test/browser/providers/playwright')`, + }, { code: `import foo = require('vite/client')`, errors: 1, diff --git a/packages/cli/src/oxlint-plugin.ts b/packages/cli/src/oxlint-plugin.ts index 3e90f3557b..b0cd4a66ba 100644 --- a/packages/cli/src/oxlint-plugin.ts +++ b/packages/cli/src/oxlint-plugin.ts @@ -54,18 +54,34 @@ function rewriteVitePlusImportSpecifier(specifier: string): string | null { return `vite-plus/test/${specifier.slice('vitest/'.length)}`; } - for (const prefix of [ - '@vitest/browser-playwright', - '@vitest/browser-preview', - '@vitest/browser-webdriverio', - '@vitest/browser', - ]) { + if (specifier === '@vitest/browser') { + return 'vite-plus/test/browser'; + } + + const browserSubpathRewrites: Record = { + '@vitest/browser/context': 'vite-plus/test/browser/context', + '@vitest/browser/client': 'vite-plus/test/client', + '@vitest/browser/locators': 'vite-plus/test/locators', + }; + if (specifier in browserSubpathRewrites) { + return browserSubpathRewrites[specifier]; + } + + for (const [prefix, provider] of [ + ['@vitest/browser-playwright', 'playwright'], + ['@vitest/browser-preview', 'preview'], + ['@vitest/browser-webdriverio', 'webdriverio'], + ] as const) { if (specifier === prefix) { return `vite-plus/test/${prefix.slice('@vitest/'.length)}`; } - if (specifier.startsWith(`${prefix}/`)) { - return `vite-plus/test/${specifier.slice('@vitest/'.length)}`; + if (specifier === `${prefix}/context`) { + return 'vite-plus/test/browser/context'; + } + + if (specifier === `${prefix}/provider`) { + return `vite-plus/test/browser/providers/${provider}`; } } From cb546fcb2f95f4e0c20ac83d6692e0de1a04f258 Mon Sep 17 00:00:00 2001 From: sangwook Date: Fri, 17 Apr 2026 22:32:52 +0900 Subject: [PATCH 05/30] test: update lint-vite-plus-imports snap --- .../lint-vite-plus-imports/snap.txt | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/packages/cli/snap-tests/lint-vite-plus-imports/snap.txt b/packages/cli/snap-tests/lint-vite-plus-imports/snap.txt index fb5c05641a..7c3c1befcc 100644 --- a/packages/cli/snap-tests/lint-vite-plus-imports/snap.txt +++ b/packages/cli/snap-tests/lint-vite-plus-imports/snap.txt @@ -1,5 +1,28 @@ [1]> vp lint src/index.ts src/types.ts # should fail before fix + × vite-plus(prefer-vite-plus-imports): Use 'vite-plus' instead of 'vite' in Vite+ projects. + ╭─[src/index.ts:1:30] + 1 │ import { defineConfig } from 'vite'; + · ────── + 2 │ + ╰──── + + × vite-plus(prefer-vite-plus-imports): Use 'vite-plus' instead of 'vitest/config' in Vite+ projects. + ╭─[src/index.ts:3:30] + 2 │ + 3 │ const configPromise = import('vitest/config'); + · ─────────────── + 4 │ + ╰──── + + × vite-plus(prefer-vite-plus-imports): Use 'vite-plus/test' instead of 'vitest' in Vite+ projects. + ╭─[src/index.ts:5:24] + 4 │ + 5 │ export { expect } from 'vitest'; + · ──────── + 6 │ + ╰──── + × vite-plus(prefer-vite-plus-imports): Use 'vite-plus/test' instead of 'vitest' in Vite+ projects. ╭─[src/types.ts:1:30] 1 │ type TestFn = (typeof import('vitest'))['test']; @@ -55,29 +78,6 @@ 10 │ ╰──── - × vite-plus(prefer-vite-plus-imports): Use 'vite-plus' instead of 'vite' in Vite+ projects. - ╭─[src/index.ts:1:30] - 1 │ import { defineConfig } from 'vite'; - · ────── - 2 │ - ╰──── - - × vite-plus(prefer-vite-plus-imports): Use 'vite-plus' instead of 'vitest/config' in Vite+ projects. - ╭─[src/index.ts:3:30] - 2 │ - 3 │ const configPromise = import('vitest/config'); - · ─────────────── - 4 │ - ╰──── - - × vite-plus(prefer-vite-plus-imports): Use 'vite-plus/test' instead of 'vitest' in Vite+ projects. - ╭─[src/index.ts:5:24] - 4 │ - 5 │ export { expect } from 'vitest'; - · ──────── - 6 │ - ╰──── - Found 0 warnings and 10 errors. Finished in ms on 2 files with rules using threads. From af64e9befa46b654767efe67f3abb132348c6437 Mon Sep 17 00:00:00 2001 From: sangwook Date: Fri, 17 Apr 2026 22:51:28 +0900 Subject: [PATCH 06/30] refactor oxlint plugin typing --- packages/cli/src/oxlint-plugin.ts | 49 +++++++++++++++---------------- 1 file changed, 23 insertions(+), 26 deletions(-) diff --git a/packages/cli/src/oxlint-plugin.ts b/packages/cli/src/oxlint-plugin.ts index b0cd4a66ba..4fd44b9065 100644 --- a/packages/cli/src/oxlint-plugin.ts +++ b/packages/cli/src/oxlint-plugin.ts @@ -1,25 +1,22 @@ +import type { RuleTester } from 'oxlint/plugins-dev'; + import { PREFER_VITE_PLUS_IMPORTS_RULE_NAME, VITE_PLUS_OXLINT_PLUGIN_NAME, } from './oxlint-plugin-config.ts'; -interface StringLiteralLike { - raw: string | null; - type: 'Literal'; - value: string; -} - -interface ReportContext { - report(diagnostic: { - data: Record; - fix: (fixer: Fixer) => unknown; - messageId: 'preferVitePlusImports'; - node: StringLiteralLike; - }): void; -} +type OxlintRule = Parameters[1]; +type CreateFn = Exclude; +type OxlintVisitor = ReturnType; +type ReportContext = Parameters[0]; +type VisitorNode = Parameters>[0]; -interface Fixer { - replaceText(node: unknown, text: string): unknown; +type StringLiteralLike = VisitorNode<'ImportDeclaration'>['source']; +interface OxlintPlugin { + meta: { + name: string; + }; + rules: Record; } function isStringLiteralLike(value: unknown): value is StringLiteralLike { @@ -116,7 +113,7 @@ function maybeReportLiteral(context: ReportContext, literal: StringLiteralLike | }); } -export const preferVitePlusImportsRule = { +export const preferVitePlusImportsRule: OxlintRule = { meta: { type: 'problem', docs: { @@ -129,30 +126,30 @@ export const preferVitePlusImportsRule = { preferVitePlusImports: "Use '{{to}}' instead of '{{from}}' in Vite+ projects.", }, }, - create(context: any) { + create(context: ReportContext) { return { - ImportDeclaration(node: { source: StringLiteralLike }) { + ImportDeclaration(node: VisitorNode<'ImportDeclaration'>) { maybeReportLiteral(context, node.source); }, - ExportAllDeclaration(node: { source: StringLiteralLike }) { + ExportAllDeclaration(node: VisitorNode<'ExportAllDeclaration'>) { maybeReportLiteral(context, node.source); }, - ExportNamedDeclaration(node: { source: StringLiteralLike | null }) { + ExportNamedDeclaration(node: VisitorNode<'ExportNamedDeclaration'>) { maybeReportLiteral(context, node.source); }, - ImportExpression(node: { source: unknown }) { + ImportExpression(node: VisitorNode<'ImportExpression'>) { if (!isStringLiteralLike(node.source)) { return; } maybeReportLiteral(context, node.source); }, - TSImportType(node: { source: StringLiteralLike }) { + TSImportType(node: VisitorNode<'TSImportType'>) { maybeReportLiteral(context, node.source); }, - TSExternalModuleReference(node: { expression: StringLiteralLike }) { + TSExternalModuleReference(node: VisitorNode<'TSExternalModuleReference'>) { maybeReportLiteral(context, node.expression); }, - TSModuleDeclaration(node: { global?: boolean; id: StringLiteralLike | { type: string } }) { + TSModuleDeclaration(node: VisitorNode<'TSModuleDeclaration'>) { if (node.global || !isStringLiteralLike(node.id)) { return; } @@ -162,7 +159,7 @@ export const preferVitePlusImportsRule = { }, }; -const plugin = { +const plugin: OxlintPlugin = { meta: { name: VITE_PLUS_OXLINT_PLUGIN_NAME, }, From de31855e2f7993a67031eac14ece582eb557447b Mon Sep 17 00:00:00 2001 From: sangwook Date: Fri, 17 Apr 2026 22:58:39 +0900 Subject: [PATCH 07/30] use createOnce for oxlint rule --- packages/cli/src/oxlint-plugin.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/src/oxlint-plugin.ts b/packages/cli/src/oxlint-plugin.ts index 4fd44b9065..454c2862b5 100644 --- a/packages/cli/src/oxlint-plugin.ts +++ b/packages/cli/src/oxlint-plugin.ts @@ -126,7 +126,7 @@ export const preferVitePlusImportsRule: OxlintRule = { preferVitePlusImports: "Use '{{to}}' instead of '{{from}}' in Vite+ projects.", }, }, - create(context: ReportContext) { + createOnce(context: ReportContext) { return { ImportDeclaration(node: VisitorNode<'ImportDeclaration'>) { maybeReportLiteral(context, node.source); From f2adf8c7f1b8baea4785ccc168aaec55ed43730c Mon Sep 17 00:00:00 2001 From: sangwook Date: Fri, 17 Apr 2026 23:01:22 +0900 Subject: [PATCH 08/30] test: update lint-vite-plus-imports snap --- .../lint-vite-plus-imports/snap.txt | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/packages/cli/snap-tests/lint-vite-plus-imports/snap.txt b/packages/cli/snap-tests/lint-vite-plus-imports/snap.txt index 7c3c1befcc..fb5c05641a 100644 --- a/packages/cli/snap-tests/lint-vite-plus-imports/snap.txt +++ b/packages/cli/snap-tests/lint-vite-plus-imports/snap.txt @@ -1,28 +1,5 @@ [1]> vp lint src/index.ts src/types.ts # should fail before fix - × vite-plus(prefer-vite-plus-imports): Use 'vite-plus' instead of 'vite' in Vite+ projects. - ╭─[src/index.ts:1:30] - 1 │ import { defineConfig } from 'vite'; - · ────── - 2 │ - ╰──── - - × vite-plus(prefer-vite-plus-imports): Use 'vite-plus' instead of 'vitest/config' in Vite+ projects. - ╭─[src/index.ts:3:30] - 2 │ - 3 │ const configPromise = import('vitest/config'); - · ─────────────── - 4 │ - ╰──── - - × vite-plus(prefer-vite-plus-imports): Use 'vite-plus/test' instead of 'vitest' in Vite+ projects. - ╭─[src/index.ts:5:24] - 4 │ - 5 │ export { expect } from 'vitest'; - · ──────── - 6 │ - ╰──── - × vite-plus(prefer-vite-plus-imports): Use 'vite-plus/test' instead of 'vitest' in Vite+ projects. ╭─[src/types.ts:1:30] 1 │ type TestFn = (typeof import('vitest'))['test']; @@ -78,6 +55,29 @@ 10 │ ╰──── + × vite-plus(prefer-vite-plus-imports): Use 'vite-plus' instead of 'vite' in Vite+ projects. + ╭─[src/index.ts:1:30] + 1 │ import { defineConfig } from 'vite'; + · ────── + 2 │ + ╰──── + + × vite-plus(prefer-vite-plus-imports): Use 'vite-plus' instead of 'vitest/config' in Vite+ projects. + ╭─[src/index.ts:3:30] + 2 │ + 3 │ const configPromise = import('vitest/config'); + · ─────────────── + 4 │ + ╰──── + + × vite-plus(prefer-vite-plus-imports): Use 'vite-plus/test' instead of 'vitest' in Vite+ projects. + ╭─[src/index.ts:5:24] + 4 │ + 5 │ export { expect } from 'vitest'; + · ──────── + 6 │ + ╰──── + Found 0 warnings and 10 errors. Finished in ms on 2 files with rules using threads. From 757f0adebf8e589627e06bc11f82c7c39aa6607c Mon Sep 17 00:00:00 2001 From: sangwook Date: Fri, 17 Apr 2026 23:11:04 +0900 Subject: [PATCH 09/30] test: remove unnecessary oxlint rule cast --- packages/cli/src/__tests__/oxlint-plugin.spec.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/cli/src/__tests__/oxlint-plugin.spec.ts b/packages/cli/src/__tests__/oxlint-plugin.spec.ts index 8d91b0b32f..45a5d1bb44 100644 --- a/packages/cli/src/__tests__/oxlint-plugin.spec.ts +++ b/packages/cli/src/__tests__/oxlint-plugin.spec.ts @@ -10,8 +10,6 @@ import { } from '../oxlint-plugin-config.js'; import { preferVitePlusImportsRule, rewriteVitePlusImportSpecifier } from '../oxlint-plugin.js'; -type TestedRule = Parameters[1]; - describe('oxlint plugin config defaults', () => { it('adds vite-plus js plugin and lint rule defaults', () => { expect( @@ -89,7 +87,7 @@ new RuleTester({ languageOptions: { sourceType: 'module', }, -}).run(PREFER_VITE_PLUS_IMPORTS_RULE_NAME, preferVitePlusImportsRule as TestedRule, { +}).run(PREFER_VITE_PLUS_IMPORTS_RULE_NAME, preferVitePlusImportsRule, { valid: [ `import { defineConfig } from 'vite-plus'`, `export { expect } from 'vite-plus/test'`, From 0549f73d58e35fe310b6c868d98705c9743de55b Mon Sep 17 00:00:00 2001 From: sangwook Date: Fri, 17 Apr 2026 23:28:28 +0900 Subject: [PATCH 10/30] test: update lint-vite-plus-imports snap --- .../lint-vite-plus-imports/snap.txt | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/packages/cli/snap-tests/lint-vite-plus-imports/snap.txt b/packages/cli/snap-tests/lint-vite-plus-imports/snap.txt index fb5c05641a..7c3c1befcc 100644 --- a/packages/cli/snap-tests/lint-vite-plus-imports/snap.txt +++ b/packages/cli/snap-tests/lint-vite-plus-imports/snap.txt @@ -1,5 +1,28 @@ [1]> vp lint src/index.ts src/types.ts # should fail before fix + × vite-plus(prefer-vite-plus-imports): Use 'vite-plus' instead of 'vite' in Vite+ projects. + ╭─[src/index.ts:1:30] + 1 │ import { defineConfig } from 'vite'; + · ────── + 2 │ + ╰──── + + × vite-plus(prefer-vite-plus-imports): Use 'vite-plus' instead of 'vitest/config' in Vite+ projects. + ╭─[src/index.ts:3:30] + 2 │ + 3 │ const configPromise = import('vitest/config'); + · ─────────────── + 4 │ + ╰──── + + × vite-plus(prefer-vite-plus-imports): Use 'vite-plus/test' instead of 'vitest' in Vite+ projects. + ╭─[src/index.ts:5:24] + 4 │ + 5 │ export { expect } from 'vitest'; + · ──────── + 6 │ + ╰──── + × vite-plus(prefer-vite-plus-imports): Use 'vite-plus/test' instead of 'vitest' in Vite+ projects. ╭─[src/types.ts:1:30] 1 │ type TestFn = (typeof import('vitest'))['test']; @@ -55,29 +78,6 @@ 10 │ ╰──── - × vite-plus(prefer-vite-plus-imports): Use 'vite-plus' instead of 'vite' in Vite+ projects. - ╭─[src/index.ts:1:30] - 1 │ import { defineConfig } from 'vite'; - · ────── - 2 │ - ╰──── - - × vite-plus(prefer-vite-plus-imports): Use 'vite-plus' instead of 'vitest/config' in Vite+ projects. - ╭─[src/index.ts:3:30] - 2 │ - 3 │ const configPromise = import('vitest/config'); - · ─────────────── - 4 │ - ╰──── - - × vite-plus(prefer-vite-plus-imports): Use 'vite-plus/test' instead of 'vitest' in Vite+ projects. - ╭─[src/index.ts:5:24] - 4 │ - 5 │ export { expect } from 'vitest'; - · ──────── - 6 │ - ╰──── - Found 0 warnings and 10 errors. Finished in ms on 2 files with rules using threads. From 7159de6aeb7ffe37b5318524e62c2e70a7e43788 Mon Sep 17 00:00:00 2001 From: sangwook Date: Tue, 21 Apr 2026 20:12:13 +0900 Subject: [PATCH 11/30] fix: use oxlint plugin helpers --- packages/cli/package.json | 1 + packages/cli/src/oxlint-plugin.ts | 47 +++++++++++-------------------- pnpm-workspace.yaml | 1 + 3 files changed, 19 insertions(+), 30 deletions(-) diff --git a/packages/cli/package.json b/packages/cli/package.json index 8635e091b5..4de1d33eb9 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -333,6 +333,7 @@ }, "dependencies": { "@oxc-project/types": "catalog:", + "@oxlint/plugins": "catalog:", "@voidzero-dev/vite-plus-core": "workspace:*", "@voidzero-dev/vite-plus-test": "workspace:*", "oxfmt": "catalog:", diff --git a/packages/cli/src/oxlint-plugin.ts b/packages/cli/src/oxlint-plugin.ts index 454c2862b5..2fb0dc7001 100644 --- a/packages/cli/src/oxlint-plugin.ts +++ b/packages/cli/src/oxlint-plugin.ts @@ -1,25 +1,12 @@ -import type { RuleTester } from 'oxlint/plugins-dev'; +import { definePlugin, defineRule } from '@oxlint/plugins'; +import type { Context, ESTree } from '@oxlint/plugins'; import { PREFER_VITE_PLUS_IMPORTS_RULE_NAME, VITE_PLUS_OXLINT_PLUGIN_NAME, } from './oxlint-plugin-config.ts'; -type OxlintRule = Parameters[1]; -type CreateFn = Exclude; -type OxlintVisitor = ReturnType; -type ReportContext = Parameters[0]; -type VisitorNode = Parameters>[0]; - -type StringLiteralLike = VisitorNode<'ImportDeclaration'>['source']; -interface OxlintPlugin { - meta: { - name: string; - }; - rules: Record; -} - -function isStringLiteralLike(value: unknown): value is StringLiteralLike { +function isStringLiteralLike(value: unknown): value is ESTree.StringLiteral { return ( typeof value === 'object' && value !== null && @@ -85,12 +72,12 @@ function rewriteVitePlusImportSpecifier(specifier: string): string | null { return null; } -function quoteSpecifier(literal: StringLiteralLike, replacement: string): string { +function quoteSpecifier(literal: ESTree.StringLiteral, replacement: string): string { const quote = literal.raw?.startsWith("'") ? "'" : '"'; return `${quote}${replacement}${quote}`; } -function maybeReportLiteral(context: ReportContext, literal: StringLiteralLike | null | undefined) { +function maybeReportLiteral(context: Context, literal: ESTree.StringLiteral | null | undefined) { if (!literal || typeof literal.value !== 'string') { return; } @@ -113,7 +100,7 @@ function maybeReportLiteral(context: ReportContext, literal: StringLiteralLike | }); } -export const preferVitePlusImportsRule: OxlintRule = { +export const preferVitePlusImportsRule = defineRule({ meta: { type: 'problem', docs: { @@ -126,30 +113,30 @@ export const preferVitePlusImportsRule: OxlintRule = { preferVitePlusImports: "Use '{{to}}' instead of '{{from}}' in Vite+ projects.", }, }, - createOnce(context: ReportContext) { + createOnce(context: Context) { return { - ImportDeclaration(node: VisitorNode<'ImportDeclaration'>) { + ImportDeclaration(node) { maybeReportLiteral(context, node.source); }, - ExportAllDeclaration(node: VisitorNode<'ExportAllDeclaration'>) { + ExportAllDeclaration(node) { maybeReportLiteral(context, node.source); }, - ExportNamedDeclaration(node: VisitorNode<'ExportNamedDeclaration'>) { + ExportNamedDeclaration(node) { maybeReportLiteral(context, node.source); }, - ImportExpression(node: VisitorNode<'ImportExpression'>) { + ImportExpression(node) { if (!isStringLiteralLike(node.source)) { return; } maybeReportLiteral(context, node.source); }, - TSImportType(node: VisitorNode<'TSImportType'>) { + TSImportType(node) { maybeReportLiteral(context, node.source); }, - TSExternalModuleReference(node: VisitorNode<'TSExternalModuleReference'>) { + TSExternalModuleReference(node) { maybeReportLiteral(context, node.expression); }, - TSModuleDeclaration(node: VisitorNode<'TSModuleDeclaration'>) { + TSModuleDeclaration(node) { if (node.global || !isStringLiteralLike(node.id)) { return; } @@ -157,16 +144,16 @@ export const preferVitePlusImportsRule: OxlintRule = { }, }; }, -}; +}); -const plugin: OxlintPlugin = { +const plugin = definePlugin({ meta: { name: VITE_PLUS_OXLINT_PLUGIN_NAME, }, rules: { [PREFER_VITE_PLUS_IMPORTS_RULE_NAME]: preferVitePlusImportsRule, }, -}; +}); export default plugin; export { rewriteVitePlusImportSpecifier }; diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 45acf7acd9..fb128b2f21 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -19,6 +19,7 @@ catalog: '@oxc-node/core': ^0.1.0 '@oxc-project/runtime': =0.129.0 '@oxc-project/types': =0.129.0 + '@oxlint/plugins': =1.60.0 '@pnpm/find-workspace-packages': ^6.0.9 '@rollup/plugin-commonjs': ^29.0.0 '@rollup/plugin-json': ^6.1.0 From b1976b6729ecd7d7b4320f09ad7c38ec45a5e6e9 Mon Sep 17 00:00:00 2001 From: sangwook Date: Tue, 21 Apr 2026 20:34:08 +0900 Subject: [PATCH 12/30] fix: expose oxlint plugin for sync resolution --- packages/cli/package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/cli/package.json b/packages/cli/package.json index 4de1d33eb9..0a2a015c60 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -76,7 +76,9 @@ }, "./oxlint-plugin": { "types": "./dist/oxlint-plugin.d.ts", - "import": "./dist/oxlint-plugin.js" + "module-sync": "./dist/oxlint-plugin.js", + "import": "./dist/oxlint-plugin.js", + "default": "./dist/oxlint-plugin.js" }, "./package.json": "./package.json", "./pack": { From f28f58ce4aab3e250573cee21853a990375aa928 Mon Sep 17 00:00:00 2001 From: sangwook Date: Tue, 21 Apr 2026 20:47:51 +0900 Subject: [PATCH 13/30] fix: prioritize oxlint plugin runtime export --- packages/cli/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/cli/package.json b/packages/cli/package.json index 0a2a015c60..ca556c9b2d 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -75,10 +75,10 @@ "import": "./dist/lint.js" }, "./oxlint-plugin": { - "types": "./dist/oxlint-plugin.d.ts", "module-sync": "./dist/oxlint-plugin.js", "import": "./dist/oxlint-plugin.js", - "default": "./dist/oxlint-plugin.js" + "default": "./dist/oxlint-plugin.js", + "types": "./dist/oxlint-plugin.d.ts" }, "./package.json": "./package.json", "./pack": { From 3d3eaa1596f223ae54af026e496d46ab5de3e206 Mon Sep 17 00:00:00 2001 From: sangwook Date: Tue, 21 Apr 2026 22:03:33 +0900 Subject: [PATCH 14/30] fix: simplify oxlint literal guard --- packages/cli/src/oxlint-plugin.ts | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/packages/cli/src/oxlint-plugin.ts b/packages/cli/src/oxlint-plugin.ts index 2fb0dc7001..580fca7e50 100644 --- a/packages/cli/src/oxlint-plugin.ts +++ b/packages/cli/src/oxlint-plugin.ts @@ -6,15 +6,10 @@ import { VITE_PLUS_OXLINT_PLUGIN_NAME, } from './oxlint-plugin-config.ts'; -function isStringLiteralLike(value: unknown): value is ESTree.StringLiteral { - return ( - typeof value === 'object' && - value !== null && - 'type' in value && - value.type === 'Literal' && - 'value' in value && - typeof value.value === 'string' - ); +function isStringLiteralLike( + value: ESTree.Expression | ESTree.TSModuleDeclaration['id'], +): value is ESTree.StringLiteral { + return value.type === 'Literal'; } function rewriteVitePlusImportSpecifier(specifier: string): string | null { From 70aae26eeda562586e3d50355fdcd8e7a7801aab Mon Sep 17 00:00:00 2001 From: sangwook Date: Tue, 21 Apr 2026 22:45:04 +0900 Subject: [PATCH 15/30] fix: add node condition to oxlint-plugin exports --- packages/cli/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/cli/package.json b/packages/cli/package.json index ca556c9b2d..ab05a5162e 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -76,6 +76,7 @@ }, "./oxlint-plugin": { "module-sync": "./dist/oxlint-plugin.js", + "node": "./dist/oxlint-plugin.js", "import": "./dist/oxlint-plugin.js", "default": "./dist/oxlint-plugin.js", "types": "./dist/oxlint-plugin.d.ts" From f7ff7f7e01d91e71a96368d62232256711a4494a Mon Sep 17 00:00:00 2001 From: sangwook Date: Thu, 23 Apr 2026 19:33:53 +0900 Subject: [PATCH 16/30] fix ci lockfile for pinned rolldown --- pnpm-lock.yaml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1f5d95db19..2cbf4bec44 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,6 +15,12 @@ catalogs: '@babel/preset-typescript': specifier: ^7.24.7 version: 7.28.5 + '@emnapi/core': + specifier: ^1.9.2 + version: 1.10.0 + '@emnapi/runtime': + specifier: ^1.9.2 + version: 1.10.0 '@napi-rs/cli': specifier: ^3.6.1 version: 3.6.1 @@ -870,10 +876,10 @@ importers: rolldown/packages/browser: dependencies: '@emnapi/core': - specifier: 1.10.0 + specifier: 'catalog:' version: 1.10.0 '@emnapi/runtime': - specifier: 1.10.0 + specifier: 'catalog:' version: 1.10.0 '@napi-rs/wasm-runtime': specifier: 'catalog:' From 00f6873f9e47f6d11d144338d47997d6a3f8b295 Mon Sep 17 00:00:00 2001 From: sangwook Date: Thu, 23 Apr 2026 19:57:51 +0900 Subject: [PATCH 17/30] fix: update @oxlint/plugins to version 1.61.0 in lockfiles --- pnpm-workspace.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index fb128b2f21..8b868f8d80 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -19,7 +19,7 @@ catalog: '@oxc-node/core': ^0.1.0 '@oxc-project/runtime': =0.129.0 '@oxc-project/types': =0.129.0 - '@oxlint/plugins': =1.60.0 + '@oxlint/plugins': =1.61.0 '@pnpm/find-workspace-packages': ^6.0.9 '@rollup/plugin-commonjs': ^29.0.0 '@rollup/plugin-json': ^6.1.0 From b839c2064f20f2ebd037acf0084b4489ad3d503f Mon Sep 17 00:00:00 2001 From: sangwook Date: Thu, 23 Apr 2026 22:55:24 +0900 Subject: [PATCH 18/30] fix: update formatting commands in configuration scripts --- .../snap-tests-global/create-framework-shim-astro/snap.txt | 4 ++-- .../snap-tests-global/create-framework-shim-astro/steps.json | 4 +++- .../cli/snap-tests-global/create-framework-shim-vue/snap.txt | 4 ++-- .../snap-tests-global/create-framework-shim-vue/steps.json | 4 +++- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/packages/cli/snap-tests-global/create-framework-shim-astro/snap.txt b/packages/cli/snap-tests-global/create-framework-shim-astro/snap.txt index d62b59d6d0..7b260aa48a 100644 --- a/packages/cli/snap-tests-global/create-framework-shim-astro/snap.txt +++ b/packages/cli/snap-tests-global/create-framework-shim-astro/snap.txt @@ -3,6 +3,6 @@ /// > cd my-astro-app && vp install -- --no-frozen-lockfile # install dependencies -> cd my-astro-app && vp check --fix # fix generated formatting and ensure no errors +> cd my-astro-app && sed -i.bak -e '/jsPlugins/d' -e '/rules:/d' -e '/options:/d' vite.config.ts && vp check --fix # fix generated formatting and ensure no errors pass: Formatting completed for checked files (ms) -pass: Found no warnings, lint errors, or type errors in 6 files (ms, threads) +pass: Found no warnings or lint errors in 6 files (ms, threads) diff --git a/packages/cli/snap-tests-global/create-framework-shim-astro/steps.json b/packages/cli/snap-tests-global/create-framework-shim-astro/steps.json index fe1a1ed028..f89e534e2e 100644 --- a/packages/cli/snap-tests-global/create-framework-shim-astro/steps.json +++ b/packages/cli/snap-tests-global/create-framework-shim-astro/steps.json @@ -10,6 +10,8 @@ "command": "cd my-astro-app && vp install -- --no-frozen-lockfile # install dependencies", "ignoreOutput": true }, - "cd my-astro-app && vp check --fix # fix generated formatting and ensure no errors" + { + "command": "cd my-astro-app && sed -i.bak -e '/jsPlugins/d' -e '/rules:/d' -e '/options:/d' vite.config.ts && vp check --fix # fix generated formatting and ensure no errors" + } ] } diff --git a/packages/cli/snap-tests-global/create-framework-shim-vue/snap.txt b/packages/cli/snap-tests-global/create-framework-shim-vue/snap.txt index 4fbc187dac..30f3a72ccf 100644 --- a/packages/cli/snap-tests-global/create-framework-shim-vue/snap.txt +++ b/packages/cli/snap-tests-global/create-framework-shim-vue/snap.txt @@ -7,6 +7,6 @@ declare module '*.vue' { } > cd vite-plus-application && vp install # install dependencies -> cd vite-plus-application && vp check --fix # fix generated formatting and ensure no errors +> cd vite-plus-application && sed -i.bak -e '/jsPlugins/d' -e '/rules:/d' -e '/options:/d' vite.config.ts && vp check --fix # fix generated formatting and ensure no errors pass: Formatting completed for checked files (ms) -pass: Found no warnings, lint errors, or type errors in 5 files (ms, threads) +pass: Found no warnings or lint errors in 5 files (ms, threads) diff --git a/packages/cli/snap-tests-global/create-framework-shim-vue/steps.json b/packages/cli/snap-tests-global/create-framework-shim-vue/steps.json index 708a24f8b9..ca52fb75d3 100644 --- a/packages/cli/snap-tests-global/create-framework-shim-vue/steps.json +++ b/packages/cli/snap-tests-global/create-framework-shim-vue/steps.json @@ -10,6 +10,8 @@ "command": "cd vite-plus-application && vp install # install dependencies", "ignoreOutput": true }, - "cd vite-plus-application && vp check --fix # fix generated formatting and ensure no errors" + { + "command": "cd vite-plus-application && sed -i.bak -e '/jsPlugins/d' -e '/rules:/d' -e '/options:/d' vite.config.ts && vp check --fix # fix generated formatting and ensure no errors" + } ] } From 8eb4b8de453fb8809df5cf0cf1194cab0bc35b99 Mon Sep 17 00:00:00 2001 From: sangwook Date: Thu, 23 Apr 2026 23:00:11 +0900 Subject: [PATCH 19/30] test: update snap tests to match new oxlint-plugin config --- .../new-create-vite-migrates-eslint-prettier/snap.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/cli/snap-tests-global/new-create-vite-migrates-eslint-prettier/snap.txt b/packages/cli/snap-tests-global/new-create-vite-migrates-eslint-prettier/snap.txt index dd2e928386..ae1bcd139f 100644 --- a/packages/cli/snap-tests-global/new-create-vite-migrates-eslint-prettier/snap.txt +++ b/packages/cli/snap-tests-global/new-create-vite-migrates-eslint-prettier/snap.txt @@ -125,6 +125,15 @@ export default defineConfig({ typeAware: true, typeCheck: true, }, + jsPlugins: [ + { + name: "vite-plus", + specifier: "vite-plus/oxlint-plugin", + }, + ], + rules: { + "vite-plus/prefer-vite-plus-imports": "error", + }, }, plugins: [react()], }); From cab257346addabdcc4409c01f220423f5749f339 Mon Sep 17 00:00:00 2001 From: sangwook Date: Fri, 24 Apr 2026 13:34:17 +0900 Subject: [PATCH 20/30] test: fix global snap test checkout resolution --- .../create-framework-shim-astro/snap.txt | 4 +- .../create-framework-shim-astro/steps.json | 5 +- .../create-framework-shim-vue/snap.txt | 4 +- .../create-framework-shim-vue/steps.json | 5 +- packages/tools/src/snap-test.ts | 196 +++++++++++++++++- 5 files changed, 197 insertions(+), 17 deletions(-) diff --git a/packages/cli/snap-tests-global/create-framework-shim-astro/snap.txt b/packages/cli/snap-tests-global/create-framework-shim-astro/snap.txt index 7b260aa48a..d62b59d6d0 100644 --- a/packages/cli/snap-tests-global/create-framework-shim-astro/snap.txt +++ b/packages/cli/snap-tests-global/create-framework-shim-astro/snap.txt @@ -3,6 +3,6 @@ /// > cd my-astro-app && vp install -- --no-frozen-lockfile # install dependencies -> cd my-astro-app && sed -i.bak -e '/jsPlugins/d' -e '/rules:/d' -e '/options:/d' vite.config.ts && vp check --fix # fix generated formatting and ensure no errors +> cd my-astro-app && vp check --fix # fix generated formatting and ensure no errors pass: Formatting completed for checked files (ms) -pass: Found no warnings or lint errors in 6 files (ms, threads) +pass: Found no warnings, lint errors, or type errors in 6 files (ms, threads) diff --git a/packages/cli/snap-tests-global/create-framework-shim-astro/steps.json b/packages/cli/snap-tests-global/create-framework-shim-astro/steps.json index f89e534e2e..d3d6e15a95 100644 --- a/packages/cli/snap-tests-global/create-framework-shim-astro/steps.json +++ b/packages/cli/snap-tests-global/create-framework-shim-astro/steps.json @@ -1,5 +1,6 @@ { "ignoredPlatforms": ["win32"], + "linkCheckoutPackages": true, "commands": [ { "command": "vp create astro --no-interactive -- my-astro-app --yes --skip-houston --template basics # create Astro app", @@ -10,8 +11,6 @@ "command": "cd my-astro-app && vp install -- --no-frozen-lockfile # install dependencies", "ignoreOutput": true }, - { - "command": "cd my-astro-app && sed -i.bak -e '/jsPlugins/d' -e '/rules:/d' -e '/options:/d' vite.config.ts && vp check --fix # fix generated formatting and ensure no errors" - } + "cd my-astro-app && vp check --fix # fix generated formatting and ensure no errors" ] } diff --git a/packages/cli/snap-tests-global/create-framework-shim-vue/snap.txt b/packages/cli/snap-tests-global/create-framework-shim-vue/snap.txt index 30f3a72ccf..4fbc187dac 100644 --- a/packages/cli/snap-tests-global/create-framework-shim-vue/snap.txt +++ b/packages/cli/snap-tests-global/create-framework-shim-vue/snap.txt @@ -7,6 +7,6 @@ declare module '*.vue' { } > cd vite-plus-application && vp install # install dependencies -> cd vite-plus-application && sed -i.bak -e '/jsPlugins/d' -e '/rules:/d' -e '/options:/d' vite.config.ts && vp check --fix # fix generated formatting and ensure no errors +> cd vite-plus-application && vp check --fix # fix generated formatting and ensure no errors pass: Formatting completed for checked files (ms) -pass: Found no warnings or lint errors in 5 files (ms, threads) +pass: Found no warnings, lint errors, or type errors in 5 files (ms, threads) diff --git a/packages/cli/snap-tests-global/create-framework-shim-vue/steps.json b/packages/cli/snap-tests-global/create-framework-shim-vue/steps.json index ca52fb75d3..0a21bd8b3b 100644 --- a/packages/cli/snap-tests-global/create-framework-shim-vue/steps.json +++ b/packages/cli/snap-tests-global/create-framework-shim-vue/steps.json @@ -1,5 +1,6 @@ { "ignoredPlatforms": ["win32"], + "linkCheckoutPackages": true, "commands": [ { "command": "vp create vite:application --no-interactive -- --template vue-ts # create Vue+TS app", @@ -10,8 +11,6 @@ "command": "cd vite-plus-application && vp install # install dependencies", "ignoreOutput": true }, - { - "command": "cd vite-plus-application && sed -i.bak -e '/jsPlugins/d' -e '/rules:/d' -e '/options:/d' vite.config.ts && vp check --fix # fix generated formatting and ensure no errors" - } + "cd vite-plus-application && vp check --fix # fix generated formatting and ensure no errors" ] } diff --git a/packages/tools/src/snap-test.ts b/packages/tools/src/snap-test.ts index f4925d0cb7..134f83a771 100755 --- a/packages/tools/src/snap-test.ts +++ b/packages/tools/src/snap-test.ts @@ -1,7 +1,6 @@ import { randomUUID } from 'node:crypto'; -import fs, { readFileSync } from 'node:fs'; +import fs from 'node:fs'; import fsPromises from 'node:fs/promises'; -import { open } from 'node:fs/promises'; import { cpus, homedir, tmpdir } from 'node:os'; import path from 'node:path'; import { setTimeout } from 'node:timers/promises'; @@ -92,6 +91,167 @@ function selectShard(items: T[], index: number, total: number): T[] { const NPM_GLOBAL_PREFIX_DIR = 'npm-global-lib-for-snap-tests'; +function resolveGlobalCliScriptsDir(casesDir: string): string { + const candidates = [ + // `packages/cli/snap-tests-global` -> `packages/cli/dist` + path.join(path.dirname(casesDir), 'dist'), + // Fallback for the common `pnpm -F vite-plus snap-test-global` cwd. + path.resolve('dist'), + ]; + + const scriptsDir = candidates.find((dir) => fs.existsSync(path.join(dir, 'bin.js'))); + if (!scriptsDir) { + throw new Error( + `Unable to find built Vite+ CLI scripts for global snap tests. Tried:\n${candidates + .map((dir) => `- ${dir}`) + .join('\n')}`, + ); + } + + return scriptsDir; +} + +function resolveRepoRoot(casesDir: string): string { + return path.resolve(path.dirname(casesDir), '..', '..'); +} + +function resolveGlobalCliBinary(binDir: string): string { + const binaryName = process.platform === 'win32' ? 'vp.exe' : 'vp'; + const binaryPath = path.join(path.resolve(expandHome(binDir)), binaryName); + if (!fs.existsSync(binaryPath)) { + throw new Error(`Unable to find global snap test vp binary at ${binaryPath}`); + } + + return fs.realpathSync(binaryPath); +} + +function resolveBuiltGlobalCliBinary(casesDir: string): string { + const binaryName = process.platform === 'win32' ? 'vp.exe' : 'vp'; + const repoRoot = resolveRepoRoot(casesDir); + const targetDirs = [ + ...(process.env.CARGO_TARGET_DIR ? [process.env.CARGO_TARGET_DIR] : []), + path.join(repoRoot, 'target'), + ]; + const candidates = targetDirs.flatMap((targetDir) => { + const directCandidates = [ + path.join(targetDir, 'release', binaryName), + path.join(targetDir, 'debug', binaryName), + ]; + if (!fs.existsSync(targetDir)) { + return directCandidates; + } + + return [ + ...directCandidates, + ...fs + .readdirSync(targetDir, { withFileTypes: true }) + .filter((entry) => entry.isDirectory()) + .flatMap((entry) => [ + path.join(targetDir, entry.name, 'release', binaryName), + path.join(targetDir, entry.name, 'debug', binaryName), + ]), + ]; + }); + const binaryPath = candidates.find((candidate) => fs.existsSync(candidate)); + if (!binaryPath) { + throw new Error( + `Unable to find built Vite+ global CLI binary for global snap tests. Tried:\n${candidates + .map((candidate) => `- ${candidate}`) + .join('\n')}\nRun \`cargo build -p vite_global_cli --release\` before snap-test-global.`, + ); + } + + return fs.realpathSync(binaryPath); +} + +function newestMtimeMs(filePath: string): number { + const stats = fs.statSync(filePath); + if (!stats.isDirectory()) { + return stats.mtimeMs; + } + + return fs + .readdirSync(filePath) + .reduce( + (newest, entry) => Math.max(newest, newestMtimeMs(path.join(filePath, entry))), + stats.mtimeMs, + ); +} + +function fileContentsEqual(a: string, b: string): boolean { + return fs.readFileSync(a).equals(fs.readFileSync(b)); +} + +function assertGlobalCliBinaryMatchesCheckout(binDir: string, casesDir: string): void { + const repoRoot = resolveRepoRoot(casesDir); + const builtBinary = resolveBuiltGlobalCliBinary(casesDir); + const sourcePaths = [ + path.join(repoRoot, 'Cargo.toml'), + path.join(repoRoot, 'Cargo.lock'), + path.join(repoRoot, 'crates', 'vite_global_cli', 'src'), + path.join(repoRoot, 'crates', 'vite_shared', 'src'), + ]; + const shouldCheckMtime = process.env.GITHUB_ACTIONS !== 'true'; + const newestSourceMtime = shouldCheckMtime ? Math.max(...sourcePaths.map(newestMtimeMs)) : 0; + if (shouldCheckMtime && fs.statSync(builtBinary).mtimeMs + 1000 < newestSourceMtime) { + throw new Error( + `Built Vite+ global CLI binary is older than the current checkout: ${builtBinary}\n` + + 'Run `cargo build -p vite_global_cli --release` before snap-test-global.', + ); + } + + const globalBinary = resolveGlobalCliBinary(binDir); + if (fileContentsEqual(globalBinary, builtBinary)) { + return; + } + + throw new Error( + `Global snap tests would use a stale vp binary from ${globalBinary}.\n` + + `Expected it to match the current checkout build at ${builtBinary}.\n` + + 'Run `pnpm bootstrap-cli` or `pnpm bootstrap-cli:ci` before snap-test-global.', + ); +} + +function replaceInstalledCheckoutPackages(rootDir: string, repoRoot: string): void { + const stack = [rootDir]; + const symlinkType = process.platform === 'win32' ? 'junction' : 'dir'; + const replacements = new Map([ + ['node_modules/vite-plus', path.join(repoRoot, 'packages', 'cli')], + ['node_modules/vite', path.join(repoRoot, 'packages', 'core')], + ['node_modules/vitest', path.join(repoRoot, 'packages', 'test')], + ['node_modules/@voidzero-dev/vite-plus-core', path.join(repoRoot, 'packages', 'core')], + ['node_modules/@voidzero-dev/vite-plus-test', path.join(repoRoot, 'packages', 'test')], + ]); + + while (stack.length > 0) { + const dir = stack.pop()!; + for (const [relativePackagePath, checkoutPackageDir] of replacements) { + const candidate = path.join(dir, relativePackagePath); + if (fs.existsSync(candidate) && fs.realpathSync(candidate) !== checkoutPackageDir) { + fs.rmSync(candidate, { recursive: true, force: true }); + fs.symlinkSync(checkoutPackageDir, candidate, symlinkType); + } + } + + const isNodeModulesPath = dir.split(path.sep).includes('node_modules'); + const isPnpmStorePath = dir.split(path.sep).includes('.pnpm'); + for (const entry of fs.readdirSync(dir, { withFileTypes: true })) { + if (!entry.isDirectory() || entry.name === '.git' || entry.name === '.bin') { + continue; + } + if ( + isNodeModulesPath && + !isPnpmStorePath && + entry.name !== '.pnpm' && + entry.name !== '@voidzero-dev' + ) { + continue; + } + stack.push(path.join(dir, entry.name)); + } + } +} + export async function snapTest() { const { positionals, values } = parseArgs({ allowPositionals: true, @@ -203,13 +363,18 @@ export async function snapTest() { const selectedCases = shard ? selectShard(validCaseNames, shard.index, shard.total) : validCaseNames; + const globalCliScriptsDir = values['bin-dir'] ? resolveGlobalCliScriptsDir(casesDir) : undefined; + if (values['bin-dir']) { + assertGlobalCliBinaryMatchesCheckout(values['bin-dir'], casesDir); + } const serialTasks: (() => Promise)[] = []; const parallelTasks: (() => Promise)[] = []; for (const caseName of selectedCases) { const stepsPath = path.join(casesDir, caseName, 'steps.json'); - const steps: Steps = JSON.parse(readFileSync(stepsPath, 'utf-8')); - const task = () => runTestCase(caseName, tempTmpDir, casesDir, values['bin-dir']); + const steps: Steps = JSON.parse(fs.readFileSync(stepsPath, 'utf-8')); + const task = () => + runTestCase(caseName, tempTmpDir, casesDir, values['bin-dir'], globalCliScriptsDir); if (steps.serial) { serialTasks.push(task); } else { @@ -258,6 +423,11 @@ interface Steps { ignoredPlatforms?: (string | PlatformFilter)[]; env: Record; commands: (string | Command)[]; + /** + * If true, installed Vite+ packages in the test project are relinked to the + * current checkout after each successful command. + */ + linkCheckoutPackages?: boolean; /** * Commands to run after the test completes, regardless of success or failure. * Useful for cleanup tasks like killing background processes. @@ -323,7 +493,13 @@ function shouldSkipPlatform(ignoredPlatforms: (string | PlatformFilter)[]): bool return false; } -async function runTestCase(name: string, tempTmpDir: string, casesDir: string, binDir?: string) { +async function runTestCase( + name: string, + tempTmpDir: string, + casesDir: string, + binDir?: string, + globalCliScriptsDir?: string, +) { const steps: Steps = JSON.parse( await fsPromises.readFile(`${casesDir}/${name}/steps.json`, 'utf-8'), ); @@ -363,6 +539,9 @@ async function runTestCase(name: string, tempTmpDir: string, casesDir: string, b VP_SKIP_INSTALL: '1', // make sure npm install global packages to the temporary directory NPM_CONFIG_PREFIX: path.join(tempTmpDir, NPM_GLOBAL_PREFIX_DIR), + // Global CLI snap tests execute the Rust binary from --bin-dir, but the JS + // entry should come from this checkout instead of a stale ~/.vite-plus install. + ...(globalCliScriptsDir ? { VITE_GLOBAL_CLI_JS_SCRIPTS_DIR: globalCliScriptsDir } : {}), // A test case can override/unset environment variables above. // For example, VP_CLI_TEST/CI can be unset to test the real-world outputs. @@ -410,7 +589,7 @@ async function runTestCase(name: string, tempTmpDir: string, casesDir: string, b // it seems not to have stable ordering of stdout/stderr chunks. // To ensure stable ordering, we redirect outputs to a file instead. const outputStreamPath = path.join(caseTmpDir, 'output.log'); - const outputStream = await open(outputStreamPath, 'w'); + const outputStream = await fsPromises.open(outputStreamPath, 'w'); const exitCode = await Promise.race([ execute(stripComments(cmd.command), [], { @@ -432,8 +611,11 @@ async function runTestCase(name: string, tempTmpDir: string, casesDir: string, b ]); await outputStream.close(); + if (exitCode === 0 && globalCliScriptsDir && steps.linkCheckoutPackages) { + replaceInstalledCheckoutPackages(caseTmpDir, resolveRepoRoot(casesDir)); + } - let output = readFileSync(outputStreamPath, 'utf-8'); + let output = fs.readFileSync(outputStreamPath, 'utf-8'); let commandLine = `> ${cmd.command}`; if (exitCode !== 0) { From 8e84fd193fd53848de90cb046ec96f9fc7c2c621 Mon Sep 17 00:00:00 2001 From: sangwook Date: Fri, 24 Apr 2026 13:41:02 +0900 Subject: [PATCH 21/30] fix: correct indentation in error message for snap-test --- packages/tools/src/snap-test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/tools/src/snap-test.ts b/packages/tools/src/snap-test.ts index 134f83a771..639fc046f7 100755 --- a/packages/tools/src/snap-test.ts +++ b/packages/tools/src/snap-test.ts @@ -196,7 +196,7 @@ function assertGlobalCliBinaryMatchesCheckout(binDir: string, casesDir: string): if (shouldCheckMtime && fs.statSync(builtBinary).mtimeMs + 1000 < newestSourceMtime) { throw new Error( `Built Vite+ global CLI binary is older than the current checkout: ${builtBinary}\n` + - 'Run `cargo build -p vite_global_cli --release` before snap-test-global.', + 'Run `cargo build -p vite_global_cli --release` before snap-test-global.', ); } From eef7ef0e05c52e225c447363b0796bbd21e95ad4 Mon Sep 17 00:00:00 2001 From: sangwook Date: Fri, 24 Apr 2026 13:41:02 +0900 Subject: [PATCH 22/30] fix: correct indentation in error message for snap-test --- packages/tools/src/snap-test.ts | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/packages/tools/src/snap-test.ts b/packages/tools/src/snap-test.ts index 639fc046f7..c0c6654b41 100755 --- a/packages/tools/src/snap-test.ts +++ b/packages/tools/src/snap-test.ts @@ -133,24 +133,23 @@ function resolveBuiltGlobalCliBinary(casesDir: string): string { path.join(repoRoot, 'target'), ]; const candidates = targetDirs.flatMap((targetDir) => { - const directCandidates = [ + const targetCandidates = [ path.join(targetDir, 'release', binaryName), path.join(targetDir, 'debug', binaryName), ]; if (!fs.existsSync(targetDir)) { - return directCandidates; + return targetCandidates; } - return [ - ...directCandidates, - ...fs - .readdirSync(targetDir, { withFileTypes: true }) - .filter((entry) => entry.isDirectory()) - .flatMap((entry) => [ + for (const entry of fs.readdirSync(targetDir, { withFileTypes: true })) { + if (entry.isDirectory()) { + targetCandidates.push( path.join(targetDir, entry.name, 'release', binaryName), path.join(targetDir, entry.name, 'debug', binaryName), - ]), - ]; + ); + } + } + return targetCandidates; }); const binaryPath = candidates.find((candidate) => fs.existsSync(candidate)); if (!binaryPath) { From 7a80fba8280863d17d752d02399713f8cf48d6b7 Mon Sep 17 00:00:00 2001 From: sangwook Date: Fri, 24 Apr 2026 13:51:18 +0900 Subject: [PATCH 23/30] test: handle Windows global CLI shim in snap tests --- packages/tools/src/snap-test.ts | 78 ++++++++++++++++++++++++++------- 1 file changed, 63 insertions(+), 15 deletions(-) diff --git a/packages/tools/src/snap-test.ts b/packages/tools/src/snap-test.ts index c0c6654b41..17f63030f2 100755 --- a/packages/tools/src/snap-test.ts +++ b/packages/tools/src/snap-test.ts @@ -125,44 +125,72 @@ function resolveGlobalCliBinary(binDir: string): string { return fs.realpathSync(binaryPath); } -function resolveBuiltGlobalCliBinary(casesDir: string): string { +function resolveInstalledGlobalCliTargetBinary(binDir: string): string { const binaryName = process.platform === 'win32' ? 'vp.exe' : 'vp'; + const binaryPath = path.join( + path.resolve(expandHome(binDir)), + '..', + 'current', + 'bin', + binaryName, + ); + if (!fs.existsSync(binaryPath)) { + throw new Error(`Unable to find installed global snap test vp binary at ${binaryPath}`); + } + + return fs.realpathSync(binaryPath); +} + +function resolveBuiltGlobalCliArtifact( + casesDir: string, + binaryName: string, + packageName: string, +): string { const repoRoot = resolveRepoRoot(casesDir); - const targetDirs = [ - ...(process.env.CARGO_TARGET_DIR ? [process.env.CARGO_TARGET_DIR] : []), - path.join(repoRoot, 'target'), - ]; - const candidates = targetDirs.flatMap((targetDir) => { - const targetCandidates = [ + const targetDirs = [path.join(repoRoot, 'target')]; + if (process.env.CARGO_TARGET_DIR) { + targetDirs.unshift(process.env.CARGO_TARGET_DIR); + } + const candidates: string[] = []; + for (const targetDir of targetDirs) { + candidates.push( path.join(targetDir, 'release', binaryName), path.join(targetDir, 'debug', binaryName), - ]; + ); if (!fs.existsSync(targetDir)) { - return targetCandidates; + continue; } for (const entry of fs.readdirSync(targetDir, { withFileTypes: true })) { if (entry.isDirectory()) { - targetCandidates.push( + candidates.push( path.join(targetDir, entry.name, 'release', binaryName), path.join(targetDir, entry.name, 'debug', binaryName), ); } } - return targetCandidates; - }); + } const binaryPath = candidates.find((candidate) => fs.existsSync(candidate)); if (!binaryPath) { throw new Error( - `Unable to find built Vite+ global CLI binary for global snap tests. Tried:\n${candidates + `Unable to find built Vite+ global CLI ${binaryName} for global snap tests. Tried:\n${candidates .map((candidate) => `- ${candidate}`) - .join('\n')}\nRun \`cargo build -p vite_global_cli --release\` before snap-test-global.`, + .join('\n')}\nRun \`cargo build -p ${packageName} --release\` before snap-test-global.`, ); } return fs.realpathSync(binaryPath); } +function resolveBuiltGlobalCliBinary(casesDir: string): string { + const binaryName = process.platform === 'win32' ? 'vp.exe' : 'vp'; + return resolveBuiltGlobalCliArtifact(casesDir, binaryName, 'vite_global_cli'); +} + +function resolveBuiltGlobalCliShim(casesDir: string): string { + return resolveBuiltGlobalCliArtifact(casesDir, 'vp-shim.exe', 'vite_trampoline'); +} + function newestMtimeMs(filePath: string): number { const stats = fs.statSync(filePath); if (!stats.isDirectory()) { @@ -200,10 +228,30 @@ function assertGlobalCliBinaryMatchesCheckout(binDir: string, casesDir: string): } const globalBinary = resolveGlobalCliBinary(binDir); - if (fileContentsEqual(globalBinary, builtBinary)) { + if (process.platform !== 'win32' && fileContentsEqual(globalBinary, builtBinary)) { return; } + if (process.platform === 'win32') { + const builtShim = resolveBuiltGlobalCliShim(casesDir); + const installedTargetBinary = resolveInstalledGlobalCliTargetBinary(binDir); + if ( + fileContentsEqual(globalBinary, builtShim) && + fileContentsEqual(installedTargetBinary, builtBinary) + ) { + return; + } + + throw new Error( + `Global snap tests would use stale Windows vp binaries.\n` + + `Entrypoint: ${globalBinary}\n` + + `Expected entrypoint to match the current checkout shim at ${builtShim}.\n` + + `Installed target: ${installedTargetBinary}\n` + + `Expected target to match the current checkout build at ${builtBinary}.\n` + + 'Run `pnpm bootstrap-cli` or `pnpm bootstrap-cli:ci` before snap-test-global.', + ); + } + throw new Error( `Global snap tests would use a stale vp binary from ${globalBinary}.\n` + `Expected it to match the current checkout build at ${builtBinary}.\n` + From 9e23116eecbd192d3ee54dc0dc886e5e02894994 Mon Sep 17 00:00:00 2001 From: sangwook Date: Fri, 24 Apr 2026 23:04:49 +0900 Subject: [PATCH 24/30] fix: update @emnapi/core and @emnapi/runtime specifiers in lockfiles --- pnpm-lock.yaml | 10 ++-------- pnpm-workspace.yaml | 2 -- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2cbf4bec44..1f5d95db19 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,12 +15,6 @@ catalogs: '@babel/preset-typescript': specifier: ^7.24.7 version: 7.28.5 - '@emnapi/core': - specifier: ^1.9.2 - version: 1.10.0 - '@emnapi/runtime': - specifier: ^1.9.2 - version: 1.10.0 '@napi-rs/cli': specifier: ^3.6.1 version: 3.6.1 @@ -876,10 +870,10 @@ importers: rolldown/packages/browser: dependencies: '@emnapi/core': - specifier: 'catalog:' + specifier: 1.10.0 version: 1.10.0 '@emnapi/runtime': - specifier: 'catalog:' + specifier: 1.10.0 version: 1.10.0 '@napi-rs/wasm-runtime': specifier: 'catalog:' diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 8b868f8d80..314dfde064 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -9,8 +9,6 @@ catalog: '@babel/preset-env': ^7.24.7 '@babel/preset-typescript': ^7.24.7 '@clack/core': ^1.0.0 - '@emnapi/core': ^1.9.2 - '@emnapi/runtime': ^1.9.2 '@iconify/vue': ^5.0.0 '@napi-rs/cli': ^3.6.1 '@napi-rs/wasm-runtime': ^1.1.4 From 3df5cc31262d0c949deaf175439594e161d7043f Mon Sep 17 00:00:00 2001 From: sangwook Date: Thu, 7 May 2026 07:25:19 +0900 Subject: [PATCH 25/30] fix: update dependencies and lockfile entries to latest versions --- pnpm-lock.yaml | 643 ++++++++++++++++++++++++++++++------------------- 1 file changed, 400 insertions(+), 243 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1f5d95db19..d6bba36ed0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -36,6 +36,9 @@ catalogs: '@oxc-project/types': specifier: '=0.129.0' version: 0.129.0 + '@oxlint/plugins': + specifier: '=1.61.0' + version: 1.61.0 '@rollup/plugin-commonjs': specifier: ^29.0.0 version: 29.0.0 @@ -331,6 +334,9 @@ importers: '@oxc-project/types': specifier: 'catalog:' version: 0.129.0 + '@oxlint/plugins': + specifier: 'catalog:' + version: 1.61.0 '@voidzero-dev/vite-plus-core': specifier: workspace:* version: link:../core @@ -586,7 +592,7 @@ importers: version: 1.3.0 tsdown: specifier: 'catalog:' - version: 0.21.10(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.21.10)(@tsdown/exe@0.21.10)(@typescript/native-preview@7.0.0-dev.20260122.2)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(oxc-resolver@11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(publint@0.3.18)(typescript@6.0.2)(unplugin-unused@0.5.6) + version: 0.21.10(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.21.10)(@tsdown/exe@0.21.10)(@typescript/native-preview@7.0.0-dev.20260122.2)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(publint@0.3.18)(typescript@6.0.2)(unplugin-unused@0.5.6) packages/test: dependencies: @@ -807,7 +813,7 @@ importers: version: 6.0.2 vite-plus: specifier: ^0.1.13 - version: 0.1.13(@arethetypeswrong/core@0.18.2)(@edge-runtime/vm@5.0.0)(@opentelemetry/api@1.9.0)(@tsdown/css@0.21.4)(@tsdown/exe@0.21.4)(@types/node@24.10.3)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(esbuild@0.27.4)(happy-dom@20.0.10)(jiti@2.6.1)(jsdom@27.2.0)(less@4.4.2)(publint@0.3.18)(sass-embedded@1.99.0(source-map-js@1.2.1))(sass@1.99.0)(stylus@0.64.0)(sugarss@5.0.1(postcss@8.5.10))(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(unplugin-unused@0.5.6)(vite@packages+core)(yaml@2.8.2) + version: 0.1.13(@arethetypeswrong/core@0.18.2)(@edge-runtime/vm@5.0.0)(@opentelemetry/api@1.9.0)(@tsdown/css@0.21.4)(@tsdown/exe@0.21.4)(@types/node@24.10.3)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(esbuild@0.27.4)(happy-dom@20.0.10)(jiti@2.6.1)(jsdom@27.2.0)(less@4.4.2)(publint@0.3.18)(sass-embedded@1.99.0(source-map-js@1.2.1))(sass@1.99.0)(stylus@0.64.0)(sugarss@5.0.1(postcss@8.5.14))(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.2)(unplugin-unused@0.5.6)(vite@packages+core)(yaml@2.8.2) rolldown/packages/bench: dependencies: @@ -1083,8 +1089,8 @@ importers: specifier: ^8.18.1 version: 8.18.1 '@vitejs/release-scripts': - specifier: ^1.6.0 - version: 1.6.0(conventional-commits-filter@5.0.0) + specifier: ^1.7.0 + version: 1.7.0(conventional-commits-filter@5.0.0) eslint: specifier: ^9.39.4 version: 9.39.4(jiti@2.6.1) @@ -1107,8 +1113,8 @@ importers: specifier: ^16.4.0 version: 16.4.0 oxfmt: - specifier: ^0.45.0 - version: 0.45.0 + specifier: ^0.46.0 + version: 0.46.0 picocolors: specifier: ^1.1.1 version: 1.1.1 @@ -1131,7 +1137,7 @@ importers: specifier: ~6.0.2 version: 6.0.2 typescript-eslint: - specifier: ^8.58.2 + specifier: ^8.59.0 version: 8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2) vite: specifier: workspace:@voidzero-dev/vite-plus-core@* @@ -1155,8 +1161,8 @@ importers: specifier: ^1.2.0 version: 1.2.0 tsdown: - specifier: ^0.21.9 - version: 0.21.10(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.21.10)(@tsdown/exe@0.21.10)(@typescript/native-preview@7.0.0-dev.20260122.2)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(oxc-resolver@11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(publint@0.3.18)(typescript@6.0.2)(unplugin-unused@0.5.6) + specifier: ^0.21.10 + version: 0.21.10(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.21.10)(@tsdown/exe@0.21.10)(@typescript/native-preview@7.0.0-dev.20260122.2)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(publint@0.3.18)(typescript@6.0.2)(unplugin-unused@0.5.6) vite/packages/plugin-legacy: dependencies: @@ -1207,8 +1213,8 @@ importers: specifier: ^1.1.1 version: 1.1.1 tsdown: - specifier: ^0.21.9 - version: 0.21.10(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.21.10)(@tsdown/exe@0.21.10)(@typescript/native-preview@7.0.0-dev.20260122.2)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(oxc-resolver@11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(publint@0.3.18)(typescript@6.0.2)(unplugin-unused@0.5.6) + specifier: ^0.21.10 + version: 0.21.10(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.21.10)(@tsdown/exe@0.21.10)(@typescript/native-preview@7.0.0-dev.20260122.2)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(publint@0.3.18)(typescript@6.0.2)(unplugin-unused@0.5.6) vite: specifier: workspace:@voidzero-dev/vite-plus-core@* version: link:../../../packages/core @@ -1231,8 +1237,8 @@ importers: specifier: ^4.0.4 version: 4.0.4 postcss: - specifier: ^8.5.10 - version: 8.5.10 + specifier: ^8.5.12 + version: 8.5.14 rolldown: specifier: workspace:rolldown@* version: link:../../../rolldown/packages/rolldown @@ -1241,7 +1247,7 @@ importers: version: 0.64.0 sugarss: specifier: ^5.0.0 - version: 5.0.1(postcss@8.5.10) + version: 5.0.1(postcss@8.5.14) tinyglobby: specifier: ^0.2.16 version: 0.2.16 @@ -1283,17 +1289,17 @@ importers: specifier: ^1.2.3 version: 1.2.3 '@vitejs/devtools': - specifier: ^0.1.14 + specifier: ^0.1.15 version: 0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core) '@vitest/utils': - specifier: 4.1.4 - version: 4.1.4 + specifier: 4.1.5 + version: 4.1.5 artichokie: specifier: ^0.4.3 version: 0.4.3 baseline-browser-mapping: - specifier: ^2.10.20 - version: 2.10.20 + specifier: ^2.10.23 + version: 2.10.27 cac: specifier: ^7.0.0 version: 7.0.0 @@ -1364,20 +1370,20 @@ importers: specifier: ^2.0.3 version: 2.0.3 periscopic: - specifier: ^4.0.2 - version: 4.0.2 + specifier: ^4.0.3 + version: 4.0.3 picocolors: specifier: ^1.1.1 version: 1.1.1 postcss-import: specifier: ^16.1.1 - version: 16.1.1(postcss@8.5.10) + version: 16.1.1(postcss@8.5.14) postcss-load-config: specifier: ^6.0.1 - version: 6.0.1(jiti@2.6.1)(postcss@8.5.10)(tsx@4.21.0)(yaml@2.8.2) + version: 6.0.1(jiti@2.6.1)(postcss@8.5.14)(tsx@4.21.0)(yaml@2.8.2) postcss-modules: specifier: ^6.0.1 - version: 6.0.1(postcss@8.5.10) + version: 6.0.1(postcss@8.5.14) premove: specifier: ^4.0.0 version: 4.0.0 @@ -1386,7 +1392,7 @@ importers: version: 2.0.3 rolldown-plugin-dts: specifier: ^0.23.2 - version: 0.23.2(@typescript/native-preview@7.0.0-dev.20260122.2)(oxc-resolver@11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rolldown@rolldown+packages+rolldown)(typescript@6.0.2) + version: 0.23.2(@typescript/native-preview@7.0.0-dev.20260122.2)(oxc-resolver@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2))(rolldown@rolldown+packages+rolldown)(typescript@6.0.2) rollup: specifier: ^4.59.0 version: 4.59.0 @@ -1406,8 +1412,8 @@ importers: specifier: ^3.1.0 version: 3.1.0 terser: - specifier: ^5.46.1 - version: 5.46.1 + specifier: ^5.46.2 + version: 5.46.2 ufo: specifier: ^1.6.3 version: 1.6.3 @@ -2087,12 +2093,12 @@ packages: '@clack/prompts@1.2.0': resolution: {integrity: sha512-4jmztR9fMqPMjz6H/UZXj0zEmE43ha1euENwkckKKel4XpSfokExPo5AiVStdHSAlHekz4d0CA/r45Ok1E4D3w==} - '@conventional-changelog/git-client@2.5.1': - resolution: {integrity: sha512-lAw7iA5oTPWOLjiweb7DlGEMDEvzqzLLa6aWOly2FSZ64IwLE8T458rC+o+WvI31Doz6joM7X2DoNog7mX8r4A==} + '@conventional-changelog/git-client@2.7.0': + resolution: {integrity: sha512-j7A8/LBEQ+3rugMzPXoKYzyUPpw/0CBQCyvtTR7Lmu4olG4yRC/Tfkq79Mr3yuPs0SUitlO2HwGP3gitMJnRFw==} engines: {node: '>=18'} peerDependencies: conventional-commits-filter: ^5.0.0 - conventional-commits-parser: ^6.1.0 + conventional-commits-parser: ^6.4.0 peerDependenciesMeta: conventional-commits-filter: optional: true @@ -3938,8 +3944,8 @@ packages: cpu: [arm] os: [android] - '@oxfmt/binding-android-arm-eabi@0.45.0': - resolution: {integrity: sha512-A/UMxFob1fefCuMeGxQBulGfFE38g2Gm23ynr3u6b+b7fY7/ajGbNsa3ikMIkGMLJW/TRoQaMoP1kME7S+815w==} + '@oxfmt/binding-android-arm-eabi@0.46.0': + resolution: {integrity: sha512-b1doV4WRcJU+BESSlCvCjV+5CEr/T6h0frArAdV26Nir+gGNFNaylvDiiMPfF1pxeV0txZEs38ojzJaxBYg+ng==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] @@ -3956,8 +3962,8 @@ packages: cpu: [arm64] os: [android] - '@oxfmt/binding-android-arm64@0.45.0': - resolution: {integrity: sha512-L63z4uZmHjgvvqvMJD7mwff8aSBkM0+X4uFr6l6U5t6+Qc9DCLVZWIunJ7Gm4fn4zHPdSq6FFQnhu9yqqobxIg==} + '@oxfmt/binding-android-arm64@0.46.0': + resolution: {integrity: sha512-v6+HhjsoV3GO0u2u9jLSAZrvWfTraDxKofUIQ7/ktS7tzS+epVsxdHmeM+XxuNcAY/nWxxU1Sg4JcGTNRXraBA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] @@ -3974,8 +3980,8 @@ packages: cpu: [arm64] os: [darwin] - '@oxfmt/binding-darwin-arm64@0.45.0': - resolution: {integrity: sha512-UV34dd623FzqT+outIGndsCA/RBB+qgB3XVQhgmmJ9PJwa37NzPC9qzgKeOhPKxVk2HW+JKldQrVL54zs4Noww==} + '@oxfmt/binding-darwin-arm64@0.46.0': + resolution: {integrity: sha512-3eeooJGrqGIlI5MyryDZsAcKXSmKIgAD4yYtfRrRJzXZ0UTFZtiSveIur56YPrGMYZwT4XyVhHsMqrNwr1XeFA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] @@ -3992,8 +3998,8 @@ packages: cpu: [x64] os: [darwin] - '@oxfmt/binding-darwin-x64@0.45.0': - resolution: {integrity: sha512-pMNJv0CMa1pDefVPeNbuQxibh8ITpWDFEhMC/IBB9Zlu76EbgzYwrzI4Cb11mqX2+rIYN70UTrh3z06TM59ptQ==} + '@oxfmt/binding-darwin-x64@0.46.0': + resolution: {integrity: sha512-QG8BDM0CXWbu84k2SKmCqfEddPQPFiBicwtYnLqHRWZZl57HbtOLRMac/KTq2NO4AEc4ICCBpFxJIV9zcqYfkQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] @@ -4010,8 +4016,8 @@ packages: cpu: [x64] os: [freebsd] - '@oxfmt/binding-freebsd-x64@0.45.0': - resolution: {integrity: sha512-xTcRoxbbo61sW2+ZRPeH+vp/o9G8gkdhiVumFU+TpneiPm14c79l6GFlxPXlCE9bNWikigbsrvJw46zCVAQFfg==} + '@oxfmt/binding-freebsd-x64@0.46.0': + resolution: {integrity: sha512-9DdCqS/n2ncu/Chazvt3cpgAjAmIGQDz7hFKSrNItMApyV/Ja9mz3hD4JakIE3nS8PW9smEbPWnb389QLBY4nw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] @@ -4028,8 +4034,8 @@ packages: cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm-gnueabihf@0.45.0': - resolution: {integrity: sha512-hWL8Hdni+3U1mPFx1UtWeGp3tNb6EhBAUHRMbKUxVkOp3WwoJbpVO2bfUVbS4PfpledviXXNHSTl1veTa6FhkQ==} + '@oxfmt/binding-linux-arm-gnueabihf@0.46.0': + resolution: {integrity: sha512-Dgs7VeE2jT0LHMhw6tPEt0xQYe54kBqHEovmWsv4FVQlegCOvlIJNx0S8n4vj8WUtpT+Z6BD2HhKJPLglLxvZg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] @@ -4046,8 +4052,8 @@ packages: cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm-musleabihf@0.45.0': - resolution: {integrity: sha512-6Blt/0OBT7vvfQpqYuYbpbFLPqSiaYpEJzUUWhinPEuADypDbtV1+LdjM0vYBNGPvnj85ex7lTerEX6JGcPt9w==} + '@oxfmt/binding-linux-arm-musleabihf@0.46.0': + resolution: {integrity: sha512-Zxn3adhTH13JKnU4xXJj8FeEfF680XjXh3gSShKl57HCMBRde2tUJTgogV/1MSHA80PJEVrDa7r66TLVq3Ia7Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] @@ -4065,8 +4071,8 @@ packages: os: [linux] libc: [glibc] - '@oxfmt/binding-linux-arm64-gnu@0.45.0': - resolution: {integrity: sha512-jLjoLfe+hGfjhA8hNBSdw85yCA8ePKq7ME4T+g6P9caQXvmt6IhE2X7iVjnVdkmYUWEzZrxlh4p6RkDmAMJY/A==} + '@oxfmt/binding-linux-arm64-gnu@0.46.0': + resolution: {integrity: sha512-+TWipjrgVM8D7aIdDD0tlr3teLTTvQTn7QTE5BpT10H1Fj82gfdn9X6nn2sDgx/MepuSCfSnzFNJq2paLL0OiA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] @@ -4086,8 +4092,8 @@ packages: os: [linux] libc: [musl] - '@oxfmt/binding-linux-arm64-musl@0.45.0': - resolution: {integrity: sha512-XQKXZIKYJC3GQJ8FnD3iMntpw69Wd9kDDK/Xt79p6xnFYlGGxSNv2vIBvRTDg5CKByWFWWZLCRDOXoP/m6YN4g==} + '@oxfmt/binding-linux-arm64-musl@0.46.0': + resolution: {integrity: sha512-aAUPBWJ1lGwwnxZUEDLJ94+Iy6MuwJwPxUgO4sCA5mEEyDk7b+cDQ+JpX1VR150Zoyd+D49gsrUzpUK5h587Eg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] @@ -4107,8 +4113,8 @@ packages: os: [linux] libc: [glibc] - '@oxfmt/binding-linux-ppc64-gnu@0.45.0': - resolution: {integrity: sha512-+g5RiG+xOkdrCWkKodv407nTvMq4vYM18Uox2MhZBm/YoqFxxJpWKsloskFFG5NU13HGPw1wzYjjOVcyd9moCA==} + '@oxfmt/binding-linux-ppc64-gnu@0.46.0': + resolution: {integrity: sha512-ufBCJukyFX/UDrokP/r6BGDoTInnsDs7bxyzKAgMiZlt2Qu8GPJSJ6Zm6whIiJzKk0naxA8ilwmbO1LMw6Htxw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] @@ -4128,8 +4134,8 @@ packages: os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-gnu@0.45.0': - resolution: {integrity: sha512-V7dXKoSyEbWAkkSF4JJNtF+NJZDmJoSarSoP30WCsB3X636Rehd3CvxBj49FIJxEBFWhvcUjGSHVeU8Erck1bQ==} + '@oxfmt/binding-linux-riscv64-gnu@0.46.0': + resolution: {integrity: sha512-eqtlC2YmPqjun76R1gVfGLuKWx7NuEnLEAudZ7n6ipSKbCZTqIKSs1b5Y8K/JHZsRpLkeSmAAjig5HOIg8fQzQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] @@ -4149,8 +4155,8 @@ packages: os: [linux] libc: [musl] - '@oxfmt/binding-linux-riscv64-musl@0.45.0': - resolution: {integrity: sha512-Vdelft1sAEYojVGgcODEFXSWYQYlIvoyIGWebKCuUibd1tvS1TjTx413xG2ZLuHpYj45CkN/ztMLMX6jrgqpgg==} + '@oxfmt/binding-linux-riscv64-musl@0.46.0': + resolution: {integrity: sha512-yccVOO2nMXkQLGgy0He3EQEwKD7NF0zEk+/OWmroznkqXyJdN6bfK0LtNnr6/14Bh3FjpYq7bP33l/VloCnxpA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] @@ -4170,8 +4176,8 @@ packages: os: [linux] libc: [glibc] - '@oxfmt/binding-linux-s390x-gnu@0.45.0': - resolution: {integrity: sha512-RR7xKgNpqwENnK0aYCGYg0JycY2n93J0reNjHyes+I9Gq52dH95x+CBlnlAQHCPfz6FGnKA9HirgUl14WO6o7w==} + '@oxfmt/binding-linux-s390x-gnu@0.46.0': + resolution: {integrity: sha512-aAf7fG23OQCey6VRPj9IeCraoYtpgtx0ZyJ1CXkPyT1wjzBE7c3xtuxHe/AdHaJfVVb/SXpSk8Gl1LzyQupSqw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] @@ -4191,8 +4197,8 @@ packages: os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-gnu@0.45.0': - resolution: {integrity: sha512-U/QQ0+BQNSHxjuXR/utvXnQ50Vu5kUuqEomZvQ1/3mhgbBiMc2WU9q5kZ5WwLp3gnFIx9ibkveoRSe2EZubkqg==} + '@oxfmt/binding-linux-x64-gnu@0.46.0': + resolution: {integrity: sha512-q0JPsTMyJNjYrBvYFDz4WbVsafNZaPCZv4RnFypRotLqpKROtBZcEaXQW4eb9YmvLU3NckVemLJnzkSZSdmOxw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] @@ -4212,8 +4218,8 @@ packages: os: [linux] libc: [musl] - '@oxfmt/binding-linux-x64-musl@0.45.0': - resolution: {integrity: sha512-o5TLOUCF0RWQjsIS06yVC+kFgp092/yLe6qBGSUvtnmTVw9gxjpdQSXc3VN5Cnive4K11HNstEZF8ROKHfDFSw==} + '@oxfmt/binding-linux-x64-musl@0.46.0': + resolution: {integrity: sha512-7LsLY9Cw57GPkhSR+duI3mt9baRczK/DtHYSldQ4BEU92da9igBQNl4z7Vq5U9NNPsh1FmpKvv1q9WDtiUQR1A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] @@ -4232,8 +4238,8 @@ packages: cpu: [arm64] os: [openharmony] - '@oxfmt/binding-openharmony-arm64@0.45.0': - resolution: {integrity: sha512-RnGcV3HgPuOjsGx/k9oyRNKmOp+NBLGzZTdPDYbc19r7NGeYPplnUU/BfU35bX2Y/O4ejvHxcfkvW2WoYL/gsg==} + '@oxfmt/binding-openharmony-arm64@0.46.0': + resolution: {integrity: sha512-lHiBOz8Duaku7JtRNLlps3j++eOaICPZSd8FCVmTDM4DFOPT71Bjn7g6iar1z7StXlKRweUKxWUs4sA+zWGDXg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] @@ -4250,8 +4256,8 @@ packages: cpu: [arm64] os: [win32] - '@oxfmt/binding-win32-arm64-msvc@0.45.0': - resolution: {integrity: sha512-v3Vj7iKKsUFwt9w5hsqIIoErKVoENC6LoqfDlteOQ5QMDCXihlqLoxpmviUhXnNncg4zV6U9BPwlBbwa+qm4wg==} + '@oxfmt/binding-win32-arm64-msvc@0.46.0': + resolution: {integrity: sha512-/5ktYUliP89RhgC37DBH1x20U5zPSZMy3cMEcO0j3793rbHP9MWsknBwQB6eozRzWmYrh0IFM/p20EbPvDlYlg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] @@ -4268,8 +4274,8 @@ packages: cpu: [ia32] os: [win32] - '@oxfmt/binding-win32-ia32-msvc@0.45.0': - resolution: {integrity: sha512-N8yotPBX6ph0H3toF4AEpdCeVPrdcSetj+8eGiZGsrLsng3bs/Q5HPu4bbSxip5GBPx5hGbGHrZwH4+rcrjhHA==} + '@oxfmt/binding-win32-ia32-msvc@0.46.0': + resolution: {integrity: sha512-3WTnoiuIr8XvV0DIY7SN+1uJSwKf4sPpcbHfobcRT9JutGcLaef/miyBB87jxd3aqH+mS0+G5lsgHuXLUwjjpQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] @@ -4286,8 +4292,8 @@ packages: cpu: [x64] os: [win32] - '@oxfmt/binding-win32-x64-msvc@0.45.0': - resolution: {integrity: sha512-w5MMTRCK1dpQeRA+HHqXQXyN33DlG/N2LOYxJmaT4fJjcmZrbNnqw7SmIk7I2/a2493PPLZ+2E/Ar6t2iKVMug==} + '@oxfmt/binding-win32-x64-msvc@0.46.0': + resolution: {integrity: sha512-IXxiQpkYnOwNfP23vzwSfhdpxJzyiPTY7eTn6dn3DsriKddESzM8i6kfq9R7CD/PUJwCvQT22NgtygBeug3KoA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -4602,6 +4608,10 @@ packages: cpu: [x64] os: [win32] + '@oxlint/plugins@1.61.0': + resolution: {integrity: sha512-nkOyZEF1vH527CkdQtOp1HMrVFEM4ResURvI2JFeGoup+h+43J/k/FgdOR9b9Isxg+Yae7qVDa7y3nssE8b3TQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@package-json/types@0.0.12': resolution: {integrity: sha512-uu43FGU34B5VM9mCNjXCwLaGHYjXdNincqKLaraaCW+7S2+SmiBg1Nv8bPnmschrIfZmfKNY9f3fC376MRrObw==} @@ -4971,8 +4981,12 @@ packages: resolution: {integrity: sha512-3nWd8irxvDI6v856wpPCHZ+08iQR0oHTZfzAZmnbsLzf+Sf1odraP6uKOHDZToXq3RPRV/LbqGVlSCogm9cJjg==} engines: {node: '>=18'} - '@simple-libs/stream-utils@1.1.0': - resolution: {integrity: sha512-6rsHTjodIn/t90lv5snQjRPVtOosM7Vp0AKdrObymq45ojlgVwnpAqdc+0OBBrpEiy31zZ6/TKeIVqV1HwvnuQ==} + '@simple-libs/hosted-git-info@1.0.2': + resolution: {integrity: sha512-aAmGQdMH+ZinytKuA2832u0ATeOFNYNk4meBEXtB5xaPotUgggYNhq5tYU/v17wEbmTW5P9iHNqNrFyrhnqBAg==} + engines: {node: '>=18'} + + '@simple-libs/stream-utils@1.2.0': + resolution: {integrity: sha512-KxXvfapcixpz6rVEB6HPjOUZT22yN6v0vI0urQSk1L8MlEWPDFCZkhw2xmkyoTGYeFw7tWTZd7e3lVzRZRN/EA==} engines: {node: '>=18'} '@sindresorhus/merge-streams@4.0.0': @@ -5418,8 +5432,8 @@ packages: peerDependencies: vite: workspace:@voidzero-dev/vite-plus-core@* - '@vitejs/release-scripts@1.6.0': - resolution: {integrity: sha512-XV+w22Fvn+wqDtEkz8nQIJzvmRVSh90c2xvOO7cX9fkX8+39ZJpYRiXDIRJG1JRnF8khm1rHjulid+l+khc7TQ==} + '@vitejs/release-scripts@1.7.0': + resolution: {integrity: sha512-4C+eoDs6yp/6kmnfOtuOWK+Dq0W3ws0eCs9k7w50P4YD7z+gMRUIyDbs0sGsJ4GjxN1WsS3qNfTT7ZpimtgeyA==} '@vitest/browser-playwright@4.1.5': resolution: {integrity: sha512-CWy0lBQJq97nionyJJdnaU4961IXTl43a7UCu5nHy51IoKxAt6PVIJLo+76rVl7KOOgcWHNkG4kbJu/pW7knvA==} @@ -5471,9 +5485,6 @@ packages: vite: optional: true - '@vitest/pretty-format@4.1.4': - resolution: {integrity: sha512-ddmDHU0gjEUyEVLxtZa7xamrpIefdEETu3nZjWtHeZX4QxqJ7tRxSteHVXJOcr8jhiLoGAhkK4WJ3WqBpjx42A==} - '@vitest/pretty-format@4.1.5': resolution: {integrity: sha512-7I3q6l5qr03dVfMX2wCo9FxwSJbPdwKjy2uu/YPpU3wfHvIL4QHwVRp57OfGrDFeUJ8/8QdfBKIV12FTtLn00g==} @@ -5491,9 +5502,6 @@ packages: peerDependencies: vitest: workspace:@voidzero-dev/vite-plus-test@* - '@vitest/utils@4.1.4': - resolution: {integrity: sha512-13QMT+eysM5uVGa1rG4kegGYNp6cnQcsTc67ELFbhNLQO+vgsygtYJx2khvdt4gVQqSSpC/KT5FZZxUpP3Oatw==} - '@vitest/utils@4.1.5': resolution: {integrity: sha512-76wdkrmfXfqGjueGgnb45ITPyUi1ycZ4IHgC2bhPDUfWHklY/q3MdLOAB+TF1e6xfl8NxNY0ZYaPCFNWSsw3Ug==} @@ -5929,6 +5937,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + baseline-browser-mapping@2.10.27: + resolution: {integrity: sha512-zEs/ufmZoUd7WftKpKyXaT6RFxpQ5Qm9xytKRHvJfxFV9DFJkZph9RvJ1LcOUi0Z1ZVijMte65JbILeV+8QQEA==} + engines: {node: '>=6.0.0'} + hasBin: true + basic-ftp@5.0.5: resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} engines: {node: '>=10.0.0'} @@ -6178,21 +6191,21 @@ packages: resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} engines: {node: ^14.18.0 || >=16.10.0} - conventional-changelog-conventionalcommits@9.1.0: - resolution: {integrity: sha512-MnbEysR8wWa8dAEvbj5xcBgJKQlX/m0lhS8DsyAAWDHdfs2faDJxTgzRYlRYpXSe7UiKrIIlB4TrBKU9q9DgkA==} + conventional-changelog-conventionalcommits@9.3.1: + resolution: {integrity: sha512-dTYtpIacRpcZgrvBYvBfArMmK2xvIpv2TaxM0/ZI5CBtNUzvF2x0t15HsbRABWprS6UPmvj+PzHVjSx4qAVKyw==} engines: {node: '>=18'} conventional-changelog-preset-loader@5.0.0: resolution: {integrity: sha512-SetDSntXLk8Jh1NOAl1Gu5uLiCNSYenB5tm0YVeZKePRIgDW9lQImromTwLa3c/Gae298tsgOM+/CYT9XAl0NA==} engines: {node: '>=18'} - conventional-changelog-writer@8.2.0: - resolution: {integrity: sha512-Y2aW4596l9AEvFJRwFGJGiQjt2sBYTjPD18DdvxX9Vpz0Z7HQ+g1Z+6iYDAm1vR3QOJrDBkRHixHK/+FhkR6Pw==} + conventional-changelog-writer@8.4.0: + resolution: {integrity: sha512-HHBFkk1EECxxmCi4CTu091iuDpQv5/OavuCUAuZmrkWpmYfyD816nom1CvtfXJ/uYfAAjavgHvXHX291tSLK8g==} engines: {node: '>=18'} hasBin: true - conventional-changelog@7.1.1: - resolution: {integrity: sha512-rlqa8Lgh8YzT3Akruk05DR79j5gN9NCglHtJZwpi6vxVeaoagz+84UAtKQj/sT+RsfGaZkt3cdFCjcN6yjr5sw==} + conventional-changelog@7.2.0: + resolution: {integrity: sha512-BEdgG+vPl53EVlTTk9sZ96aagFp0AQ5pw/ggiQMy2SClLbTo1r0l+8dSg79gkLOO5DS1Lswuhp5fWn6RwE+ivg==} engines: {node: '>=18'} hasBin: true @@ -6200,8 +6213,8 @@ packages: resolution: {integrity: sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==} engines: {node: '>=18'} - conventional-commits-parser@6.2.1: - resolution: {integrity: sha512-20pyHgnO40rvfI0NGF/xiEoFMkXDtkF8FwHvk5BokoFoCuTQRI8vrNCNFWUOfuolKJMm1tPCHc8GgYEtr1XRNA==} + conventional-commits-parser@6.4.0: + resolution: {integrity: sha512-tvRg7FIBNlyPzjdG8wWRlPHQJJHI7DylhtRGeU9Lq+JuoPh5BKpPRX83ZdLrvXuOSu5Eo/e7SzOQhU4Hd2Miuw==} engines: {node: '>=18'} hasBin: true @@ -6696,10 +6709,6 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} - execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} - execa@9.6.1: resolution: {integrity: sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==} engines: {node: ^18.19.0 || >=20.5.0} @@ -6909,10 +6918,6 @@ packages: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} - get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} - get-stream@9.0.1: resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} engines: {node: '>=18'} @@ -7047,10 +7052,6 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} - human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} - human-signals@8.0.1: resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} engines: {node: '>=18.18.0'} @@ -7219,10 +7220,6 @@ packages: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-stream@4.0.1: resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} engines: {node: '>=18'} @@ -7576,9 +7573,6 @@ packages: resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} engines: {node: '>=18'} - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} @@ -7600,10 +7594,6 @@ packages: engines: {node: '>=4'} hasBin: true - mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - mimic-function@5.0.1: resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} @@ -7732,10 +7722,6 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - npm-run-path@5.3.0: - resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - npm-run-path@6.0.0: resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} engines: {node: '>=18'} @@ -7783,10 +7769,6 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} - onetime@7.0.0: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} @@ -7827,8 +7809,8 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - oxfmt@0.45.0: - resolution: {integrity: sha512-0o/COoN9fY50bjVeM7PQsNgbhndKurBIeTIcspW033OumksjJJmIVDKjAk5HMwU/GHTxSOdGDdhJ6BRzGPmsHg==} + oxfmt@0.46.0: + resolution: {integrity: sha512-CopwJOwPAjZ9p76fCvz+mSOJTw9/NY3cSksZK3VO/bUQ8UoEcketNgUuYS0UB3p+R9XnXe7wGGXUmyFxc7QxJA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -7973,8 +7955,8 @@ packages: perfect-debounce@2.1.0: resolution: {integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==} - periscopic@4.0.2: - resolution: {integrity: sha512-sqpQDUy8vgB7ycLkendSKS6HnVz1Rneoc3Rc+ZBUCe2pbqlVuCC5vF52l0NJ1aiMg/r1qfYF9/myz8CZeI2rjA==} + periscopic@4.0.3: + resolution: {integrity: sha512-iD/CnjEI6TJYwqLXmEVByEbT1RwUGSW3W51t/uWf+2Ag7FMHLqJ1XNhawGaXBf9/gZr+DhF3bTGLOw+03GJnzg==} picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -8097,6 +8079,10 @@ packages: resolution: {integrity: sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.14: + resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==} + engines: {node: ^10 || ^12 || >=14} + powershell-utils@0.1.0: resolution: {integrity: sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==} engines: {node: '>=20'} @@ -8766,10 +8752,6 @@ packages: resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} engines: {node: '>=10'} - strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - strip-final-newline@4.0.0: resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} engines: {node: '>=18'} @@ -8855,6 +8837,11 @@ packages: engines: {node: '>=10'} hasBin: true + terser@5.46.2: + resolution: {integrity: sha512-uxfo9fPcSgLDYob/w1FuL0c99MWiJDnv+5qXSQc5+Ki5NjVNsYi66INnMFBjf6uFz6OnX12piJQPF4IpjJTNTw==} + engines: {node: '>=10'} + hasBin: true + text-decoder@1.2.3: resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} @@ -10364,14 +10351,14 @@ snapshots: fast-wrap-ansi: 0.1.6 sisteransi: 1.0.5 - '@conventional-changelog/git-client@2.5.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.1)': + '@conventional-changelog/git-client@2.7.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)': dependencies: '@simple-libs/child-process-utils': 1.0.1 - '@simple-libs/stream-utils': 1.1.0 + '@simple-libs/stream-utils': 1.2.0 semver: 7.7.4 optionalDependencies: conventional-commits-filter: 5.0.0 - conventional-commits-parser: 6.2.1 + conventional-commits-parser: 6.4.0 '@csstools/color-helpers@5.1.0': {} @@ -11774,6 +11761,14 @@ snapshots: - '@emnapi/runtime' optional: true + '@oxc-resolver/binding-wasm32-wasi@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': + dependencies: + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + optional: true + '@oxc-resolver/binding-win32-arm64-msvc@11.19.1': optional: true @@ -11850,7 +11845,7 @@ snapshots: '@oxfmt/binding-android-arm-eabi@0.41.0': optional: true - '@oxfmt/binding-android-arm-eabi@0.45.0': + '@oxfmt/binding-android-arm-eabi@0.46.0': optional: true '@oxfmt/binding-android-arm-eabi@0.48.0': @@ -11859,7 +11854,7 @@ snapshots: '@oxfmt/binding-android-arm64@0.41.0': optional: true - '@oxfmt/binding-android-arm64@0.45.0': + '@oxfmt/binding-android-arm64@0.46.0': optional: true '@oxfmt/binding-android-arm64@0.48.0': @@ -11868,7 +11863,7 @@ snapshots: '@oxfmt/binding-darwin-arm64@0.41.0': optional: true - '@oxfmt/binding-darwin-arm64@0.45.0': + '@oxfmt/binding-darwin-arm64@0.46.0': optional: true '@oxfmt/binding-darwin-arm64@0.48.0': @@ -11877,7 +11872,7 @@ snapshots: '@oxfmt/binding-darwin-x64@0.41.0': optional: true - '@oxfmt/binding-darwin-x64@0.45.0': + '@oxfmt/binding-darwin-x64@0.46.0': optional: true '@oxfmt/binding-darwin-x64@0.48.0': @@ -11886,7 +11881,7 @@ snapshots: '@oxfmt/binding-freebsd-x64@0.41.0': optional: true - '@oxfmt/binding-freebsd-x64@0.45.0': + '@oxfmt/binding-freebsd-x64@0.46.0': optional: true '@oxfmt/binding-freebsd-x64@0.48.0': @@ -11895,7 +11890,7 @@ snapshots: '@oxfmt/binding-linux-arm-gnueabihf@0.41.0': optional: true - '@oxfmt/binding-linux-arm-gnueabihf@0.45.0': + '@oxfmt/binding-linux-arm-gnueabihf@0.46.0': optional: true '@oxfmt/binding-linux-arm-gnueabihf@0.48.0': @@ -11904,7 +11899,7 @@ snapshots: '@oxfmt/binding-linux-arm-musleabihf@0.41.0': optional: true - '@oxfmt/binding-linux-arm-musleabihf@0.45.0': + '@oxfmt/binding-linux-arm-musleabihf@0.46.0': optional: true '@oxfmt/binding-linux-arm-musleabihf@0.48.0': @@ -11913,7 +11908,7 @@ snapshots: '@oxfmt/binding-linux-arm64-gnu@0.41.0': optional: true - '@oxfmt/binding-linux-arm64-gnu@0.45.0': + '@oxfmt/binding-linux-arm64-gnu@0.46.0': optional: true '@oxfmt/binding-linux-arm64-gnu@0.48.0': @@ -11922,7 +11917,7 @@ snapshots: '@oxfmt/binding-linux-arm64-musl@0.41.0': optional: true - '@oxfmt/binding-linux-arm64-musl@0.45.0': + '@oxfmt/binding-linux-arm64-musl@0.46.0': optional: true '@oxfmt/binding-linux-arm64-musl@0.48.0': @@ -11931,7 +11926,7 @@ snapshots: '@oxfmt/binding-linux-ppc64-gnu@0.41.0': optional: true - '@oxfmt/binding-linux-ppc64-gnu@0.45.0': + '@oxfmt/binding-linux-ppc64-gnu@0.46.0': optional: true '@oxfmt/binding-linux-ppc64-gnu@0.48.0': @@ -11940,7 +11935,7 @@ snapshots: '@oxfmt/binding-linux-riscv64-gnu@0.41.0': optional: true - '@oxfmt/binding-linux-riscv64-gnu@0.45.0': + '@oxfmt/binding-linux-riscv64-gnu@0.46.0': optional: true '@oxfmt/binding-linux-riscv64-gnu@0.48.0': @@ -11949,7 +11944,7 @@ snapshots: '@oxfmt/binding-linux-riscv64-musl@0.41.0': optional: true - '@oxfmt/binding-linux-riscv64-musl@0.45.0': + '@oxfmt/binding-linux-riscv64-musl@0.46.0': optional: true '@oxfmt/binding-linux-riscv64-musl@0.48.0': @@ -11958,7 +11953,7 @@ snapshots: '@oxfmt/binding-linux-s390x-gnu@0.41.0': optional: true - '@oxfmt/binding-linux-s390x-gnu@0.45.0': + '@oxfmt/binding-linux-s390x-gnu@0.46.0': optional: true '@oxfmt/binding-linux-s390x-gnu@0.48.0': @@ -11967,7 +11962,7 @@ snapshots: '@oxfmt/binding-linux-x64-gnu@0.41.0': optional: true - '@oxfmt/binding-linux-x64-gnu@0.45.0': + '@oxfmt/binding-linux-x64-gnu@0.46.0': optional: true '@oxfmt/binding-linux-x64-gnu@0.48.0': @@ -11976,7 +11971,7 @@ snapshots: '@oxfmt/binding-linux-x64-musl@0.41.0': optional: true - '@oxfmt/binding-linux-x64-musl@0.45.0': + '@oxfmt/binding-linux-x64-musl@0.46.0': optional: true '@oxfmt/binding-linux-x64-musl@0.48.0': @@ -11985,7 +11980,7 @@ snapshots: '@oxfmt/binding-openharmony-arm64@0.41.0': optional: true - '@oxfmt/binding-openharmony-arm64@0.45.0': + '@oxfmt/binding-openharmony-arm64@0.46.0': optional: true '@oxfmt/binding-openharmony-arm64@0.48.0': @@ -11994,7 +11989,7 @@ snapshots: '@oxfmt/binding-win32-arm64-msvc@0.41.0': optional: true - '@oxfmt/binding-win32-arm64-msvc@0.45.0': + '@oxfmt/binding-win32-arm64-msvc@0.46.0': optional: true '@oxfmt/binding-win32-arm64-msvc@0.48.0': @@ -12003,7 +11998,7 @@ snapshots: '@oxfmt/binding-win32-ia32-msvc@0.41.0': optional: true - '@oxfmt/binding-win32-ia32-msvc@0.45.0': + '@oxfmt/binding-win32-ia32-msvc@0.46.0': optional: true '@oxfmt/binding-win32-ia32-msvc@0.48.0': @@ -12012,7 +12007,7 @@ snapshots: '@oxfmt/binding-win32-x64-msvc@0.41.0': optional: true - '@oxfmt/binding-win32-x64-msvc@0.45.0': + '@oxfmt/binding-win32-x64-msvc@0.46.0': optional: true '@oxfmt/binding-win32-x64-msvc@0.48.0': @@ -12168,6 +12163,8 @@ snapshots: '@oxlint/binding-win32-x64-msvc@1.63.0': optional: true + '@oxlint/plugins@1.61.0': {} + '@package-json/types@0.0.12': {} '@parcel/watcher-android-arm64@2.5.1': @@ -12459,12 +12456,12 @@ snapshots: '@simple-libs/child-process-utils@1.0.1': dependencies: - '@simple-libs/stream-utils': 1.1.0 + '@simple-libs/stream-utils': 1.2.0 '@types/node': 22.19.11 - '@simple-libs/stream-utils@1.1.0': - dependencies: - '@types/node': 22.19.11 + '@simple-libs/hosted-git-info@1.0.2': {} + + '@simple-libs/stream-utils@1.2.0': {} '@sindresorhus/merge-streams@4.0.0': {} @@ -12504,16 +12501,34 @@ snapshots: - tsx - yaml - '@tsdown/css@0.21.4(jiti@2.6.1)(postcss-import@16.1.1(postcss@8.5.10))(postcss-modules@6.0.1(postcss@8.5.10))(postcss@8.5.10)(sass-embedded@1.99.0(source-map-js@1.2.1))(sass@1.99.0)(tsdown@0.21.4)(tsx@4.21.0)(yaml@2.8.2)': + '@tsdown/css@0.21.10(jiti@2.6.1)(postcss-import@16.1.1(postcss@8.5.14))(postcss-modules@6.0.1(postcss@8.5.14))(postcss@8.5.14)(sass-embedded@1.99.0(source-map-js@1.2.1))(sass@1.99.0)(tsdown@0.21.10)(tsx@4.21.0)(yaml@2.8.2)': dependencies: lightningcss: 1.32.0 - postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.10)(tsx@4.21.0)(yaml@2.8.2) + postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.14)(tsx@4.21.0)(yaml@2.8.2) + rolldown: link:rolldown/packages/rolldown + tsdown: 0.21.10(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.21.10)(@tsdown/exe@0.21.10)(@typescript/native-preview@7.0.0-dev.20260122.2)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(oxc-resolver@11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(publint@0.3.18)(typescript@6.0.2)(unplugin-unused@0.5.6) + optionalDependencies: + postcss: 8.5.14 + postcss-import: 16.1.1(postcss@8.5.14) + postcss-modules: 6.0.1(postcss@8.5.14) + sass: 1.99.0 + sass-embedded: 1.99.0(source-map-js@1.2.1) + transitivePeerDependencies: + - jiti + - tsx + - yaml + optional: true + + '@tsdown/css@0.21.4(jiti@2.6.1)(postcss-import@16.1.1(postcss@8.5.14))(postcss-modules@6.0.1(postcss@8.5.14))(postcss@8.5.14)(sass-embedded@1.99.0(source-map-js@1.2.1))(sass@1.99.0)(tsdown@0.21.4)(tsx@4.21.0)(yaml@2.8.2)': + dependencies: + lightningcss: 1.32.0 + postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.14)(tsx@4.21.0)(yaml@2.8.2) rolldown: link:rolldown/packages/rolldown tsdown: 0.21.4(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.21.4)(@tsdown/exe@0.21.4)(@typescript/native-preview@7.0.0-dev.20260122.2)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(oxc-resolver@11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(publint@0.3.18)(typescript@6.0.2)(unplugin-unused@0.5.6) optionalDependencies: - postcss: 8.5.10 - postcss-import: 16.1.1(postcss@8.5.10) - postcss-modules: 6.0.1(postcss@8.5.10) + postcss: 8.5.14 + postcss-import: 16.1.1(postcss@8.5.14) + postcss-modules: 6.0.1(postcss@8.5.14) sass: 1.99.0 sass-embedded: 1.99.0(source-map-js@1.2.1) transitivePeerDependencies: @@ -12993,16 +13008,16 @@ snapshots: - uploadthing - utf-8-validate - '@vitejs/release-scripts@1.6.0(conventional-commits-filter@5.0.0)': + '@vitejs/release-scripts@1.7.0(conventional-commits-filter@5.0.0)': dependencies: - conventional-changelog: 7.1.1(conventional-commits-filter@5.0.0) - conventional-changelog-conventionalcommits: 9.1.0 - execa: 8.0.1 + conventional-changelog: 7.2.0(conventional-commits-filter@5.0.0) + conventional-changelog-conventionalcommits: 9.3.1 mri: 1.2.0 picocolors: 1.1.1 prompts: 2.4.2 publint: 0.3.18 semver: 7.7.4 + tinyexec: 1.1.2 transitivePeerDependencies: - conventional-commits-filter @@ -13108,10 +13123,6 @@ snapshots: optionalDependencies: vite: link:packages/core - '@vitest/pretty-format@4.1.4': - dependencies: - tinyrainbow: 3.1.0 - '@vitest/pretty-format@4.1.5': dependencies: tinyrainbow: 3.1.0 @@ -13141,27 +13152,21 @@ snapshots: tinyrainbow: 3.1.0 vitest: 4.1.5(@edge-runtime/vm@5.0.0)(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(@vitest/browser-playwright@4.1.5(playwright@1.57.0)(vite@packages+core)(vitest@4.1.5))(@vitest/browser-preview@4.1.5(vite@packages+core)(vitest@4.1.5))(@vitest/browser-webdriverio@4.1.5(vite@packages+core)(vitest@4.1.5)(webdriverio@9.20.1))(@vitest/coverage-istanbul@4.1.5(vitest@4.1.5))(@vitest/coverage-v8@4.1.5(@vitest/browser@4.1.5)(vitest@4.1.5))(@vitest/ui@4.1.5(vitest@4.1.5))(happy-dom@20.0.10)(jsdom@27.2.0)(vite@packages+core) - '@vitest/utils@4.1.4': - dependencies: - '@vitest/pretty-format': 4.1.4 - convert-source-map: 2.0.0 - tinyrainbow: 3.1.0 - '@vitest/utils@4.1.5': dependencies: '@vitest/pretty-format': 4.1.5 convert-source-map: 2.0.0 tinyrainbow: 3.1.0 - '@voidzero-dev/vite-plus-core@0.1.13(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.21.4)(@tsdown/exe@0.21.4)(@types/node@24.10.3)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(esbuild@0.27.4)(jiti@2.6.1)(less@4.4.2)(publint@0.3.18)(sass-embedded@1.99.0(source-map-js@1.2.1))(sass@1.99.0)(stylus@0.64.0)(sugarss@5.0.1(postcss@8.5.10))(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(unplugin-unused@0.5.6)(yaml@2.8.2)': + '@voidzero-dev/vite-plus-core@0.1.13(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.21.4)(@tsdown/exe@0.21.4)(@types/node@24.10.3)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(esbuild@0.27.4)(jiti@2.6.1)(less@4.4.2)(publint@0.3.18)(sass-embedded@1.99.0(source-map-js@1.2.1))(sass@1.99.0)(stylus@0.64.0)(sugarss@5.0.1(postcss@8.5.14))(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.2)(unplugin-unused@0.5.6)(yaml@2.8.2)': dependencies: '@oxc-project/runtime': 0.120.0 '@oxc-project/types': 0.120.0 lightningcss: 1.32.0 - postcss: 8.5.10 + postcss: 8.5.14 optionalDependencies: '@arethetypeswrong/core': 0.18.2 - '@tsdown/css': 0.21.4(jiti@2.6.1)(postcss-import@16.1.1(postcss@8.5.10))(postcss-modules@6.0.1(postcss@8.5.10))(postcss@8.5.10)(sass-embedded@1.99.0(source-map-js@1.2.1))(sass@1.99.0)(tsdown@0.21.4)(tsx@4.21.0)(yaml@2.8.2) + '@tsdown/css': 0.21.4(jiti@2.6.1)(postcss-import@16.1.1(postcss@8.5.14))(postcss-modules@6.0.1(postcss@8.5.14))(postcss@8.5.14)(sass-embedded@1.99.0(source-map-js@1.2.1))(sass@1.99.0)(tsdown@0.21.4)(tsx@4.21.0)(yaml@2.8.2) '@tsdown/exe': 0.21.4(tsdown@0.21.4) '@types/node': 24.10.3 '@vitejs/devtools': 0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core) @@ -13173,8 +13178,8 @@ snapshots: sass: 1.99.0 sass-embedded: 1.99.0(source-map-js@1.2.1) stylus: 0.64.0 - sugarss: 5.0.1(postcss@8.5.10) - terser: 5.46.1 + sugarss: 5.0.1(postcss@8.5.14) + terser: 5.46.2 tsx: 4.21.0 typescript: 6.0.2 unplugin-unused: 0.5.6 @@ -13192,11 +13197,11 @@ snapshots: '@voidzero-dev/vite-plus-linux-x64-gnu@0.1.13': optional: true - '@voidzero-dev/vite-plus-test@0.1.13(@arethetypeswrong/core@0.18.2)(@edge-runtime/vm@5.0.0)(@opentelemetry/api@1.9.0)(@tsdown/css@0.21.4)(@tsdown/exe@0.21.4)(@types/node@24.10.3)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(esbuild@0.27.4)(happy-dom@20.0.10)(jiti@2.6.1)(jsdom@27.2.0)(less@4.4.2)(publint@0.3.18)(sass-embedded@1.99.0(source-map-js@1.2.1))(sass@1.99.0)(stylus@0.64.0)(sugarss@5.0.1(postcss@8.5.10))(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(unplugin-unused@0.5.6)(vite@packages+core)(yaml@2.8.2)': + '@voidzero-dev/vite-plus-test@0.1.13(@arethetypeswrong/core@0.18.2)(@edge-runtime/vm@5.0.0)(@opentelemetry/api@1.9.0)(@tsdown/css@0.21.4)(@tsdown/exe@0.21.4)(@types/node@24.10.3)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(esbuild@0.27.4)(happy-dom@20.0.10)(jiti@2.6.1)(jsdom@27.2.0)(less@4.4.2)(publint@0.3.18)(sass-embedded@1.99.0(source-map-js@1.2.1))(sass@1.99.0)(stylus@0.64.0)(sugarss@5.0.1(postcss@8.5.14))(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.2)(unplugin-unused@0.5.6)(vite@packages+core)(yaml@2.8.2)': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@voidzero-dev/vite-plus-core': 0.1.13(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.21.4)(@tsdown/exe@0.21.4)(@types/node@24.10.3)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(esbuild@0.27.4)(jiti@2.6.1)(less@4.4.2)(publint@0.3.18)(sass-embedded@1.99.0(source-map-js@1.2.1))(sass@1.99.0)(stylus@0.64.0)(sugarss@5.0.1(postcss@8.5.10))(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(unplugin-unused@0.5.6)(yaml@2.8.2) + '@voidzero-dev/vite-plus-core': 0.1.13(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.21.4)(@tsdown/exe@0.21.4)(@types/node@24.10.3)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(esbuild@0.27.4)(jiti@2.6.1)(less@4.4.2)(publint@0.3.18)(sass-embedded@1.99.0(source-map-js@1.2.1))(sass@1.99.0)(stylus@0.64.0)(sugarss@5.0.1(postcss@8.5.14))(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.2)(unplugin-unused@0.5.6)(yaml@2.8.2) es-module-lexer: 1.7.0 obug: 2.1.1 pixelmatch: 7.1.0 @@ -13273,7 +13278,7 @@ snapshots: '@vue/shared': 3.5.33 estree-walker: 2.0.2 magic-string: 0.30.21 - postcss: 8.5.10 + postcss: 8.5.14 source-map-js: 1.2.1 '@vue/compiler-ssr@3.5.33': @@ -13613,6 +13618,8 @@ snapshots: baseline-browser-mapping@2.10.20: {} + baseline-browser-mapping@2.10.27: {} + basic-ftp@5.0.5: {} before-after-hook@4.0.0: {} @@ -13882,26 +13889,28 @@ snapshots: consola@3.4.2: {} - conventional-changelog-conventionalcommits@9.1.0: + conventional-changelog-conventionalcommits@9.3.1: dependencies: compare-func: 2.0.0 conventional-changelog-preset-loader@5.0.0: {} - conventional-changelog-writer@8.2.0: + conventional-changelog-writer@8.4.0: dependencies: + '@simple-libs/stream-utils': 1.2.0 conventional-commits-filter: 5.0.0 handlebars: 4.7.8 meow: 13.2.0 semver: 7.7.4 - conventional-changelog@7.1.1(conventional-commits-filter@5.0.0): + conventional-changelog@7.2.0(conventional-commits-filter@5.0.0): dependencies: - '@conventional-changelog/git-client': 2.5.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.1) + '@conventional-changelog/git-client': 2.7.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0) + '@simple-libs/hosted-git-info': 1.0.2 '@types/normalize-package-data': 2.4.4 conventional-changelog-preset-loader: 5.0.0 - conventional-changelog-writer: 8.2.0 - conventional-commits-parser: 6.2.1 + conventional-changelog-writer: 8.4.0 + conventional-commits-parser: 6.4.0 fd-package-json: 2.0.0 meow: 13.2.0 normalize-package-data: 7.0.1 @@ -13910,8 +13919,9 @@ snapshots: conventional-commits-filter@5.0.0: {} - conventional-commits-parser@6.2.1: + conventional-commits-parser@6.4.0: dependencies: + '@simple-libs/stream-utils': 1.2.0 meow: 13.2.0 convert-source-map@2.0.0: {} @@ -14115,6 +14125,10 @@ snapshots: optionalDependencies: oxc-resolver: 11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + dts-resolver@2.1.3(oxc-resolver@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)): + optionalDependencies: + oxc-resolver: 11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + eastasianwidth@0.2.0: {} edge-paths@3.0.5: @@ -14427,18 +14441,6 @@ snapshots: events@3.3.0: {} - execa@8.0.1: - dependencies: - cross-spawn: 7.0.6 - get-stream: 8.0.1 - human-signals: 5.0.0 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.3.0 - onetime: 6.0.0 - signal-exit: 4.1.0 - strip-final-newline: 3.0.0 - execa@9.6.1: dependencies: '@sindresorhus/merge-streams': 4.0.0 @@ -14661,8 +14663,6 @@ snapshots: dependencies: pump: 3.0.3 - get-stream@8.0.1: {} - get-stream@9.0.1: dependencies: '@sec-ant/readable-stream': 0.4.1 @@ -14826,8 +14826,6 @@ snapshots: transitivePeerDependencies: - supports-color - human-signals@5.0.0: {} - human-signals@8.0.1: {} husky@9.1.7: {} @@ -14843,6 +14841,11 @@ snapshots: icss-utils@5.1.0(postcss@8.5.10): dependencies: postcss: 8.5.10 + optional: true + + icss-utils@5.1.0(postcss@8.5.14): + dependencies: + postcss: 8.5.14 ieee754@1.2.1: {} @@ -14943,8 +14946,6 @@ snapshots: is-stream@2.0.1: {} - is-stream@3.0.0: {} - is-stream@4.0.1: {} is-unicode-supported@0.1.0: {} @@ -15301,8 +15302,6 @@ snapshots: meow@13.2.0: {} - merge-stream@2.0.0: {} - merge2@1.4.1: {} micromatch@4.0.8: @@ -15319,8 +15318,6 @@ snapshots: mime@1.6.0: optional: true - mimic-fn@4.0.0: {} - mimic-function@5.0.1: {} minimatch@10.2.4: @@ -15445,10 +15442,6 @@ snapshots: normalize-path@3.0.0: {} - npm-run-path@5.3.0: - dependencies: - path-key: 4.0.0 - npm-run-path@6.0.0: dependencies: path-key: 4.0.0 @@ -15505,10 +15498,6 @@ snapshots: dependencies: wrappy: 1.0.2 - onetime@6.0.0: - dependencies: - mimic-fn: 4.0.0 - onetime@7.0.0: dependencies: mimic-function: 5.0.1 @@ -15642,6 +15631,33 @@ snapshots: - '@emnapi/core' - '@emnapi/runtime' + oxc-resolver@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2): + optionalDependencies: + '@oxc-resolver/binding-android-arm-eabi': 11.19.1 + '@oxc-resolver/binding-android-arm64': 11.19.1 + '@oxc-resolver/binding-darwin-arm64': 11.19.1 + '@oxc-resolver/binding-darwin-x64': 11.19.1 + '@oxc-resolver/binding-freebsd-x64': 11.19.1 + '@oxc-resolver/binding-linux-arm-gnueabihf': 11.19.1 + '@oxc-resolver/binding-linux-arm-musleabihf': 11.19.1 + '@oxc-resolver/binding-linux-arm64-gnu': 11.19.1 + '@oxc-resolver/binding-linux-arm64-musl': 11.19.1 + '@oxc-resolver/binding-linux-ppc64-gnu': 11.19.1 + '@oxc-resolver/binding-linux-riscv64-gnu': 11.19.1 + '@oxc-resolver/binding-linux-riscv64-musl': 11.19.1 + '@oxc-resolver/binding-linux-s390x-gnu': 11.19.1 + '@oxc-resolver/binding-linux-x64-gnu': 11.19.1 + '@oxc-resolver/binding-linux-x64-musl': 11.19.1 + '@oxc-resolver/binding-openharmony-arm64': 11.19.1 + '@oxc-resolver/binding-wasm32-wasi': 11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + '@oxc-resolver/binding-win32-arm64-msvc': 11.19.1 + '@oxc-resolver/binding-win32-ia32-msvc': 11.19.1 + '@oxc-resolver/binding-win32-x64-msvc': 11.19.1 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + optional: true + oxc-transform@0.129.0: optionalDependencies: '@oxc-transform/binding-android-arm-eabi': 0.129.0 @@ -15689,29 +15705,29 @@ snapshots: '@oxfmt/binding-win32-ia32-msvc': 0.41.0 '@oxfmt/binding-win32-x64-msvc': 0.41.0 - oxfmt@0.45.0: + oxfmt@0.46.0: dependencies: tinypool: 2.1.0 optionalDependencies: - '@oxfmt/binding-android-arm-eabi': 0.45.0 - '@oxfmt/binding-android-arm64': 0.45.0 - '@oxfmt/binding-darwin-arm64': 0.45.0 - '@oxfmt/binding-darwin-x64': 0.45.0 - '@oxfmt/binding-freebsd-x64': 0.45.0 - '@oxfmt/binding-linux-arm-gnueabihf': 0.45.0 - '@oxfmt/binding-linux-arm-musleabihf': 0.45.0 - '@oxfmt/binding-linux-arm64-gnu': 0.45.0 - '@oxfmt/binding-linux-arm64-musl': 0.45.0 - '@oxfmt/binding-linux-ppc64-gnu': 0.45.0 - '@oxfmt/binding-linux-riscv64-gnu': 0.45.0 - '@oxfmt/binding-linux-riscv64-musl': 0.45.0 - '@oxfmt/binding-linux-s390x-gnu': 0.45.0 - '@oxfmt/binding-linux-x64-gnu': 0.45.0 - '@oxfmt/binding-linux-x64-musl': 0.45.0 - '@oxfmt/binding-openharmony-arm64': 0.45.0 - '@oxfmt/binding-win32-arm64-msvc': 0.45.0 - '@oxfmt/binding-win32-ia32-msvc': 0.45.0 - '@oxfmt/binding-win32-x64-msvc': 0.45.0 + '@oxfmt/binding-android-arm-eabi': 0.46.0 + '@oxfmt/binding-android-arm64': 0.46.0 + '@oxfmt/binding-darwin-arm64': 0.46.0 + '@oxfmt/binding-darwin-x64': 0.46.0 + '@oxfmt/binding-freebsd-x64': 0.46.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.46.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.46.0 + '@oxfmt/binding-linux-arm64-gnu': 0.46.0 + '@oxfmt/binding-linux-arm64-musl': 0.46.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.46.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.46.0 + '@oxfmt/binding-linux-riscv64-musl': 0.46.0 + '@oxfmt/binding-linux-s390x-gnu': 0.46.0 + '@oxfmt/binding-linux-x64-gnu': 0.46.0 + '@oxfmt/binding-linux-x64-musl': 0.46.0 + '@oxfmt/binding-openharmony-arm64': 0.46.0 + '@oxfmt/binding-win32-arm64-msvc': 0.46.0 + '@oxfmt/binding-win32-ia32-msvc': 0.46.0 + '@oxfmt/binding-win32-x64-msvc': 0.46.0 oxfmt@0.48.0: dependencies: @@ -15912,7 +15928,7 @@ snapshots: perfect-debounce@2.1.0: {} - periscopic@4.0.2: + periscopic@4.0.3: dependencies: '@types/estree': 1.0.8 is-reference: 3.0.3 @@ -15969,6 +15985,14 @@ snapshots: postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.11 + optional: true + + postcss-import@16.1.1(postcss@8.5.14): + dependencies: + postcss: 8.5.14 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.11 postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.10)(tsx@4.21.0)(yaml@2.8.2): dependencies: @@ -15979,9 +16003,23 @@ snapshots: tsx: 4.21.0 yaml: 2.8.2 + postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.14)(tsx@4.21.0)(yaml@2.8.2): + dependencies: + lilconfig: 3.1.3 + optionalDependencies: + jiti: 2.6.1 + postcss: 8.5.14 + tsx: 4.21.0 + yaml: 2.8.2 + postcss-modules-extract-imports@3.1.0(postcss@8.5.10): dependencies: postcss: 8.5.10 + optional: true + + postcss-modules-extract-imports@3.1.0(postcss@8.5.14): + dependencies: + postcss: 8.5.14 postcss-modules-local-by-default@4.2.0(postcss@8.5.10): dependencies: @@ -15989,16 +16027,36 @@ snapshots: postcss: 8.5.10 postcss-selector-parser: 7.1.0 postcss-value-parser: 4.2.0 + optional: true + + postcss-modules-local-by-default@4.2.0(postcss@8.5.14): + dependencies: + icss-utils: 5.1.0(postcss@8.5.14) + postcss: 8.5.14 + postcss-selector-parser: 7.1.0 + postcss-value-parser: 4.2.0 postcss-modules-scope@3.2.1(postcss@8.5.10): dependencies: postcss: 8.5.10 postcss-selector-parser: 7.1.0 + optional: true + + postcss-modules-scope@3.2.1(postcss@8.5.14): + dependencies: + postcss: 8.5.14 + postcss-selector-parser: 7.1.0 postcss-modules-values@4.0.0(postcss@8.5.10): dependencies: icss-utils: 5.1.0(postcss@8.5.10) postcss: 8.5.10 + optional: true + + postcss-modules-values@4.0.0(postcss@8.5.14): + dependencies: + icss-utils: 5.1.0(postcss@8.5.14) + postcss: 8.5.14 postcss-modules@6.0.1(postcss@8.5.10): dependencies: @@ -16011,6 +16069,19 @@ snapshots: postcss-modules-scope: 3.2.1(postcss@8.5.10) postcss-modules-values: 4.0.0(postcss@8.5.10) string-hash: 1.1.3 + optional: true + + postcss-modules@6.0.1(postcss@8.5.14): + dependencies: + generic-names: 4.0.0 + icss-utils: 5.1.0(postcss@8.5.14) + lodash.camelcase: 4.3.0 + postcss: 8.5.14 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.14) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.14) + postcss-modules-scope: 3.2.1(postcss@8.5.14) + postcss-modules-values: 4.0.0(postcss@8.5.14) + string-hash: 1.1.3 postcss-selector-parser@7.1.0: dependencies: @@ -16025,6 +16096,12 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.14: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + powershell-utils@0.1.0: {} prelude-ls@1.2.1: {} @@ -16294,6 +16371,44 @@ snapshots: transitivePeerDependencies: - oxc-resolver + rolldown-plugin-dts@0.23.2(@typescript/native-preview@7.0.0-dev.20260122.2)(oxc-resolver@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2))(rolldown@rolldown+packages+rolldown)(typescript@6.0.2): + dependencies: + '@babel/generator': 8.0.0-rc.3 + '@babel/helper-validator-identifier': 8.0.0-rc.3 + '@babel/parser': 8.0.0-rc.3 + '@babel/types': 8.0.0-rc.3 + ast-kit: 3.0.0-beta.1 + birpc: 4.0.0 + dts-resolver: 2.1.3(oxc-resolver@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)) + get-tsconfig: 4.13.7 + obug: 2.1.1 + picomatch: 4.0.4 + rolldown: link:rolldown/packages/rolldown + optionalDependencies: + '@typescript/native-preview': 7.0.0-dev.20260122.2 + typescript: 6.0.2 + transitivePeerDependencies: + - oxc-resolver + + rolldown-plugin-dts@0.23.2(@typescript/native-preview@7.0.0-dev.20260122.2)(rolldown@rolldown+packages+rolldown)(typescript@6.0.2): + dependencies: + '@babel/generator': 8.0.0-rc.3 + '@babel/helper-validator-identifier': 8.0.0-rc.3 + '@babel/parser': 8.0.0-rc.3 + '@babel/types': 8.0.0-rc.3 + ast-kit: 3.0.0-beta.1 + birpc: 4.0.0 + dts-resolver: 2.1.3(oxc-resolver@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)) + get-tsconfig: 4.13.7 + obug: 2.1.1 + picomatch: 4.0.4 + rolldown: link:rolldown/packages/rolldown + optionalDependencies: + '@typescript/native-preview': 7.0.0-dev.20260122.2 + typescript: 6.0.2 + transitivePeerDependencies: + - oxc-resolver + rollup-plugin-license@3.7.1(picomatch@4.0.4)(rollup@4.59.0): dependencies: commenting: 1.1.0 @@ -16692,8 +16807,6 @@ snapshots: strip-comments@2.0.1: {} - strip-final-newline@3.0.0: {} - strip-final-newline@4.0.0: {} strip-json-comments@3.1.1: {} @@ -16722,6 +16835,10 @@ snapshots: dependencies: postcss: 8.5.10 + sugarss@5.0.1(postcss@8.5.14): + dependencies: + postcss: 8.5.14 + superjson@2.2.6: dependencies: copy-anything: 4.0.5 @@ -16782,6 +16899,13 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 + terser@5.46.2: + dependencies: + '@jridgewell/source-map': 0.3.11 + acorn: 8.16.0 + commander: 2.20.3 + source-map-support: 0.5.21 + text-decoder@1.2.3: dependencies: b4a: 1.7.3 @@ -16858,7 +16982,40 @@ snapshots: unrun: 0.2.37 optionalDependencies: '@arethetypeswrong/core': 0.18.2 - '@tsdown/css': 0.21.10(jiti@2.6.1)(postcss-import@16.1.1(postcss@8.5.10))(postcss-modules@6.0.1(postcss@8.5.10))(postcss@8.5.10)(sass-embedded@1.99.0(source-map-js@1.2.1))(sass@1.99.0)(tsdown@0.21.10)(tsx@4.21.0)(yaml@2.8.2) + '@tsdown/css': 0.21.10(jiti@2.6.1)(postcss-import@16.1.1(postcss@8.5.14))(postcss-modules@6.0.1(postcss@8.5.14))(postcss@8.5.14)(sass-embedded@1.99.0(source-map-js@1.2.1))(sass@1.99.0)(tsdown@0.21.10)(tsx@4.21.0)(yaml@2.8.2) + '@tsdown/exe': 0.21.10(tsdown@0.21.10) + '@vitejs/devtools': 0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core) + publint: 0.3.18 + typescript: 6.0.2 + unplugin-unused: 0.5.6 + transitivePeerDependencies: + - '@ts-macro/tsc' + - '@typescript/native-preview' + - oxc-resolver + - synckit + - vue-tsc + + tsdown@0.21.10(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.21.10)(@tsdown/exe@0.21.10)(@typescript/native-preview@7.0.0-dev.20260122.2)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(publint@0.3.18)(typescript@6.0.2)(unplugin-unused@0.5.6): + dependencies: + ansis: 4.2.0 + cac: 7.0.0 + defu: 6.1.7 + empathic: 2.0.0 + hookable: 6.1.1 + import-without-cache: 0.3.3 + obug: 2.1.1 + picomatch: 4.0.4 + rolldown: link:rolldown/packages/rolldown + rolldown-plugin-dts: 0.23.2(@typescript/native-preview@7.0.0-dev.20260122.2)(rolldown@rolldown+packages+rolldown)(typescript@6.0.2) + semver: 7.7.4 + tinyexec: 1.1.2 + tinyglobby: 0.2.16 + tree-kill: 1.2.2 + unconfig-core: 7.5.0 + unrun: 0.2.37 + optionalDependencies: + '@arethetypeswrong/core': 0.18.2 + '@tsdown/css': 0.21.10(jiti@2.6.1)(postcss-import@16.1.1(postcss@8.5.14))(postcss-modules@6.0.1(postcss@8.5.14))(postcss@8.5.14)(sass-embedded@1.99.0(source-map-js@1.2.1))(sass@1.99.0)(tsdown@0.21.10)(tsx@4.21.0)(yaml@2.8.2) '@tsdown/exe': 0.21.10(tsdown@0.21.10) '@vitejs/devtools': 0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core) publint: 0.3.18 @@ -16891,7 +17048,7 @@ snapshots: unrun: 0.2.37 optionalDependencies: '@arethetypeswrong/core': 0.18.2 - '@tsdown/css': 0.21.4(jiti@2.6.1)(postcss-import@16.1.1(postcss@8.5.10))(postcss-modules@6.0.1(postcss@8.5.10))(postcss@8.5.10)(sass-embedded@1.99.0(source-map-js@1.2.1))(sass@1.99.0)(tsdown@0.21.4)(tsx@4.21.0)(yaml@2.8.2) + '@tsdown/css': 0.21.4(jiti@2.6.1)(postcss-import@16.1.1(postcss@8.5.14))(postcss-modules@6.0.1(postcss@8.5.14))(postcss@8.5.14)(sass-embedded@1.99.0(source-map-js@1.2.1))(sass@1.99.0)(tsdown@0.21.4)(tsx@4.21.0)(yaml@2.8.2) '@tsdown/exe': 0.21.4(tsdown@0.21.4) '@vitejs/devtools': 0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core) publint: 0.3.18 @@ -17106,11 +17263,11 @@ snapshots: vary@1.1.2: {} - vite-plus@0.1.13(@arethetypeswrong/core@0.18.2)(@edge-runtime/vm@5.0.0)(@opentelemetry/api@1.9.0)(@tsdown/css@0.21.4)(@tsdown/exe@0.21.4)(@types/node@24.10.3)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(esbuild@0.27.4)(happy-dom@20.0.10)(jiti@2.6.1)(jsdom@27.2.0)(less@4.4.2)(publint@0.3.18)(sass-embedded@1.99.0(source-map-js@1.2.1))(sass@1.99.0)(stylus@0.64.0)(sugarss@5.0.1(postcss@8.5.10))(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(unplugin-unused@0.5.6)(vite@packages+core)(yaml@2.8.2): + vite-plus@0.1.13(@arethetypeswrong/core@0.18.2)(@edge-runtime/vm@5.0.0)(@opentelemetry/api@1.9.0)(@tsdown/css@0.21.4)(@tsdown/exe@0.21.4)(@types/node@24.10.3)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(esbuild@0.27.4)(happy-dom@20.0.10)(jiti@2.6.1)(jsdom@27.2.0)(less@4.4.2)(publint@0.3.18)(sass-embedded@1.99.0(source-map-js@1.2.1))(sass@1.99.0)(stylus@0.64.0)(sugarss@5.0.1(postcss@8.5.14))(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.2)(unplugin-unused@0.5.6)(vite@packages+core)(yaml@2.8.2): dependencies: '@oxc-project/types': 0.120.0 - '@voidzero-dev/vite-plus-core': 0.1.13(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.21.4)(@tsdown/exe@0.21.4)(@types/node@24.10.3)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(esbuild@0.27.4)(jiti@2.6.1)(less@4.4.2)(publint@0.3.18)(sass-embedded@1.99.0(source-map-js@1.2.1))(sass@1.99.0)(stylus@0.64.0)(sugarss@5.0.1(postcss@8.5.10))(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(unplugin-unused@0.5.6)(yaml@2.8.2) - '@voidzero-dev/vite-plus-test': 0.1.13(@arethetypeswrong/core@0.18.2)(@edge-runtime/vm@5.0.0)(@opentelemetry/api@1.9.0)(@tsdown/css@0.21.4)(@tsdown/exe@0.21.4)(@types/node@24.10.3)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(esbuild@0.27.4)(happy-dom@20.0.10)(jiti@2.6.1)(jsdom@27.2.0)(less@4.4.2)(publint@0.3.18)(sass-embedded@1.99.0(source-map-js@1.2.1))(sass@1.99.0)(stylus@0.64.0)(sugarss@5.0.1(postcss@8.5.10))(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.2)(unplugin-unused@0.5.6)(vite@packages+core)(yaml@2.8.2) + '@voidzero-dev/vite-plus-core': 0.1.13(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.21.4)(@tsdown/exe@0.21.4)(@types/node@24.10.3)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(esbuild@0.27.4)(jiti@2.6.1)(less@4.4.2)(publint@0.3.18)(sass-embedded@1.99.0(source-map-js@1.2.1))(sass@1.99.0)(stylus@0.64.0)(sugarss@5.0.1(postcss@8.5.14))(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.2)(unplugin-unused@0.5.6)(yaml@2.8.2) + '@voidzero-dev/vite-plus-test': 0.1.13(@arethetypeswrong/core@0.18.2)(@edge-runtime/vm@5.0.0)(@opentelemetry/api@1.9.0)(@tsdown/css@0.21.4)(@tsdown/exe@0.21.4)(@types/node@24.10.3)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(esbuild@0.27.4)(happy-dom@20.0.10)(jiti@2.6.1)(jsdom@27.2.0)(less@4.4.2)(publint@0.3.18)(sass-embedded@1.99.0(source-map-js@1.2.1))(sass@1.99.0)(stylus@0.64.0)(sugarss@5.0.1(postcss@8.5.14))(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.2)(unplugin-unused@0.5.6)(vite@packages+core)(yaml@2.8.2) cac: 7.0.0 cross-spawn: 7.0.6 oxfmt: 0.41.0 From b249edfe6636594afacc71e272fdf21936c8ac6b Mon Sep 17 00:00:00 2001 From: sangwook Date: Thu, 7 May 2026 07:29:29 +0900 Subject: [PATCH 26/30] fix: update pnpm-lock.yaml to reflect new oxc-resolver and @emnapi/core/runtime versions --- pnpm-lock.yaml | 118 ++----------------------------------------------- 1 file changed, 4 insertions(+), 114 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d6bba36ed0..6fd176071a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -592,7 +592,7 @@ importers: version: 1.3.0 tsdown: specifier: 'catalog:' - version: 0.21.10(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.21.10)(@tsdown/exe@0.21.10)(@typescript/native-preview@7.0.0-dev.20260122.2)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(publint@0.3.18)(typescript@6.0.2)(unplugin-unused@0.5.6) + version: 0.21.10(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.21.10)(@tsdown/exe@0.21.10)(@typescript/native-preview@7.0.0-dev.20260122.2)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(oxc-resolver@11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(publint@0.3.18)(typescript@6.0.2)(unplugin-unused@0.5.6) packages/test: dependencies: @@ -1162,7 +1162,7 @@ importers: version: 1.2.0 tsdown: specifier: ^0.21.10 - version: 0.21.10(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.21.10)(@tsdown/exe@0.21.10)(@typescript/native-preview@7.0.0-dev.20260122.2)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(publint@0.3.18)(typescript@6.0.2)(unplugin-unused@0.5.6) + version: 0.21.10(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.21.10)(@tsdown/exe@0.21.10)(@typescript/native-preview@7.0.0-dev.20260122.2)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(oxc-resolver@11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(publint@0.3.18)(typescript@6.0.2)(unplugin-unused@0.5.6) vite/packages/plugin-legacy: dependencies: @@ -1214,7 +1214,7 @@ importers: version: 1.1.1 tsdown: specifier: ^0.21.10 - version: 0.21.10(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.21.10)(@tsdown/exe@0.21.10)(@typescript/native-preview@7.0.0-dev.20260122.2)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(publint@0.3.18)(typescript@6.0.2)(unplugin-unused@0.5.6) + version: 0.21.10(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.21.10)(@tsdown/exe@0.21.10)(@typescript/native-preview@7.0.0-dev.20260122.2)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(oxc-resolver@11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(publint@0.3.18)(typescript@6.0.2)(unplugin-unused@0.5.6) vite: specifier: workspace:@voidzero-dev/vite-plus-core@* version: link:../../../packages/core @@ -1392,7 +1392,7 @@ importers: version: 2.0.3 rolldown-plugin-dts: specifier: ^0.23.2 - version: 0.23.2(@typescript/native-preview@7.0.0-dev.20260122.2)(oxc-resolver@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2))(rolldown@rolldown+packages+rolldown)(typescript@6.0.2) + version: 0.23.2(@typescript/native-preview@7.0.0-dev.20260122.2)(oxc-resolver@11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rolldown@rolldown+packages+rolldown)(typescript@6.0.2) rollup: specifier: ^4.59.0 version: 4.59.0 @@ -11761,14 +11761,6 @@ snapshots: - '@emnapi/runtime' optional: true - '@oxc-resolver/binding-wasm32-wasi@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': - dependencies: - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - optional: true - '@oxc-resolver/binding-win32-arm64-msvc@11.19.1': optional: true @@ -14125,10 +14117,6 @@ snapshots: optionalDependencies: oxc-resolver: 11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) - dts-resolver@2.1.3(oxc-resolver@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)): - optionalDependencies: - oxc-resolver: 11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - eastasianwidth@0.2.0: {} edge-paths@3.0.5: @@ -15631,33 +15619,6 @@ snapshots: - '@emnapi/core' - '@emnapi/runtime' - oxc-resolver@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2): - optionalDependencies: - '@oxc-resolver/binding-android-arm-eabi': 11.19.1 - '@oxc-resolver/binding-android-arm64': 11.19.1 - '@oxc-resolver/binding-darwin-arm64': 11.19.1 - '@oxc-resolver/binding-darwin-x64': 11.19.1 - '@oxc-resolver/binding-freebsd-x64': 11.19.1 - '@oxc-resolver/binding-linux-arm-gnueabihf': 11.19.1 - '@oxc-resolver/binding-linux-arm-musleabihf': 11.19.1 - '@oxc-resolver/binding-linux-arm64-gnu': 11.19.1 - '@oxc-resolver/binding-linux-arm64-musl': 11.19.1 - '@oxc-resolver/binding-linux-ppc64-gnu': 11.19.1 - '@oxc-resolver/binding-linux-riscv64-gnu': 11.19.1 - '@oxc-resolver/binding-linux-riscv64-musl': 11.19.1 - '@oxc-resolver/binding-linux-s390x-gnu': 11.19.1 - '@oxc-resolver/binding-linux-x64-gnu': 11.19.1 - '@oxc-resolver/binding-linux-x64-musl': 11.19.1 - '@oxc-resolver/binding-openharmony-arm64': 11.19.1 - '@oxc-resolver/binding-wasm32-wasi': 11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - '@oxc-resolver/binding-win32-arm64-msvc': 11.19.1 - '@oxc-resolver/binding-win32-ia32-msvc': 11.19.1 - '@oxc-resolver/binding-win32-x64-msvc': 11.19.1 - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - optional: true - oxc-transform@0.129.0: optionalDependencies: '@oxc-transform/binding-android-arm-eabi': 0.129.0 @@ -16371,44 +16332,6 @@ snapshots: transitivePeerDependencies: - oxc-resolver - rolldown-plugin-dts@0.23.2(@typescript/native-preview@7.0.0-dev.20260122.2)(oxc-resolver@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2))(rolldown@rolldown+packages+rolldown)(typescript@6.0.2): - dependencies: - '@babel/generator': 8.0.0-rc.3 - '@babel/helper-validator-identifier': 8.0.0-rc.3 - '@babel/parser': 8.0.0-rc.3 - '@babel/types': 8.0.0-rc.3 - ast-kit: 3.0.0-beta.1 - birpc: 4.0.0 - dts-resolver: 2.1.3(oxc-resolver@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)) - get-tsconfig: 4.13.7 - obug: 2.1.1 - picomatch: 4.0.4 - rolldown: link:rolldown/packages/rolldown - optionalDependencies: - '@typescript/native-preview': 7.0.0-dev.20260122.2 - typescript: 6.0.2 - transitivePeerDependencies: - - oxc-resolver - - rolldown-plugin-dts@0.23.2(@typescript/native-preview@7.0.0-dev.20260122.2)(rolldown@rolldown+packages+rolldown)(typescript@6.0.2): - dependencies: - '@babel/generator': 8.0.0-rc.3 - '@babel/helper-validator-identifier': 8.0.0-rc.3 - '@babel/parser': 8.0.0-rc.3 - '@babel/types': 8.0.0-rc.3 - ast-kit: 3.0.0-beta.1 - birpc: 4.0.0 - dts-resolver: 2.1.3(oxc-resolver@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)) - get-tsconfig: 4.13.7 - obug: 2.1.1 - picomatch: 4.0.4 - rolldown: link:rolldown/packages/rolldown - optionalDependencies: - '@typescript/native-preview': 7.0.0-dev.20260122.2 - typescript: 6.0.2 - transitivePeerDependencies: - - oxc-resolver - rollup-plugin-license@3.7.1(picomatch@4.0.4)(rollup@4.59.0): dependencies: commenting: 1.1.0 @@ -16995,39 +16918,6 @@ snapshots: - synckit - vue-tsc - tsdown@0.21.10(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.21.10)(@tsdown/exe@0.21.10)(@typescript/native-preview@7.0.0-dev.20260122.2)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(publint@0.3.18)(typescript@6.0.2)(unplugin-unused@0.5.6): - dependencies: - ansis: 4.2.0 - cac: 7.0.0 - defu: 6.1.7 - empathic: 2.0.0 - hookable: 6.1.1 - import-without-cache: 0.3.3 - obug: 2.1.1 - picomatch: 4.0.4 - rolldown: link:rolldown/packages/rolldown - rolldown-plugin-dts: 0.23.2(@typescript/native-preview@7.0.0-dev.20260122.2)(rolldown@rolldown+packages+rolldown)(typescript@6.0.2) - semver: 7.7.4 - tinyexec: 1.1.2 - tinyglobby: 0.2.16 - tree-kill: 1.2.2 - unconfig-core: 7.5.0 - unrun: 0.2.37 - optionalDependencies: - '@arethetypeswrong/core': 0.18.2 - '@tsdown/css': 0.21.10(jiti@2.6.1)(postcss-import@16.1.1(postcss@8.5.14))(postcss-modules@6.0.1(postcss@8.5.14))(postcss@8.5.14)(sass-embedded@1.99.0(source-map-js@1.2.1))(sass@1.99.0)(tsdown@0.21.10)(tsx@4.21.0)(yaml@2.8.2) - '@tsdown/exe': 0.21.10(tsdown@0.21.10) - '@vitejs/devtools': 0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core) - publint: 0.3.18 - typescript: 6.0.2 - unplugin-unused: 0.5.6 - transitivePeerDependencies: - - '@ts-macro/tsc' - - '@typescript/native-preview' - - oxc-resolver - - synckit - - vue-tsc - tsdown@0.21.4(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.21.4)(@tsdown/exe@0.21.4)(@typescript/native-preview@7.0.0-dev.20260122.2)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(oxc-resolver@11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(publint@0.3.18)(typescript@6.0.2)(unplugin-unused@0.5.6): dependencies: ansis: 4.2.0 From 021398ead140823f0eda4963841fa15e69f678d6 Mon Sep 17 00:00:00 2001 From: sangwook Date: Thu, 7 May 2026 07:32:00 +0900 Subject: [PATCH 27/30] fix: update tsdown specifier in pnpm-lock.yaml --- pnpm-lock.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6fd176071a..35a4f5a2ae 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1161,7 +1161,7 @@ importers: specifier: ^1.2.0 version: 1.2.0 tsdown: - specifier: ^0.21.10 + specifier: ^0.21.9 version: 0.21.10(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.21.10)(@tsdown/exe@0.21.10)(@typescript/native-preview@7.0.0-dev.20260122.2)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(oxc-resolver@11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(publint@0.3.18)(typescript@6.0.2)(unplugin-unused@0.5.6) vite/packages/plugin-legacy: From adbad4050e3e4f4f216a11f15acc5626c2b0f2a3 Mon Sep 17 00:00:00 2001 From: sangwook Date: Thu, 7 May 2026 07:42:10 +0900 Subject: [PATCH 28/30] fix: update pnpm-lock.yaml and Cargo.lock to adjust dependency specifiers and remove unused dashmap --- Cargo.lock | 1 - pnpm-lock.yaml | 14 +++++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a6c0abcbf8..191d123be4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5351,7 +5351,6 @@ name = "rolldown_devtools" version = "0.1.0" dependencies = [ "blake3", - "dashmap", "rolldown_devtools_action", "rustc-hash", "serde", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 35a4f5a2ae..2ccd07086b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1213,7 +1213,7 @@ importers: specifier: ^1.1.1 version: 1.1.1 tsdown: - specifier: ^0.21.10 + specifier: ^0.21.9 version: 0.21.10(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.21.10)(@tsdown/exe@0.21.10)(@typescript/native-preview@7.0.0-dev.20260122.2)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(oxc-resolver@11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(publint@0.3.18)(typescript@6.0.2)(unplugin-unused@0.5.6) vite: specifier: workspace:@voidzero-dev/vite-plus-core@* @@ -1237,7 +1237,7 @@ importers: specifier: ^4.0.4 version: 4.0.4 postcss: - specifier: ^8.5.12 + specifier: ^8.5.10 version: 8.5.14 rolldown: specifier: workspace:rolldown@* @@ -1289,16 +1289,16 @@ importers: specifier: ^1.2.3 version: 1.2.3 '@vitejs/devtools': - specifier: ^0.1.15 + specifier: ^0.1.14 version: 0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core) '@vitest/utils': - specifier: 4.1.5 + specifier: 4.1.4 version: 4.1.5 artichokie: specifier: ^0.4.3 version: 0.4.3 baseline-browser-mapping: - specifier: ^2.10.23 + specifier: ^2.10.20 version: 2.10.27 cac: specifier: ^7.0.0 @@ -1370,7 +1370,7 @@ importers: specifier: ^2.0.3 version: 2.0.3 periscopic: - specifier: ^4.0.3 + specifier: ^4.0.2 version: 4.0.3 picocolors: specifier: ^1.1.1 @@ -1412,7 +1412,7 @@ importers: specifier: ^3.1.0 version: 3.1.0 terser: - specifier: ^5.46.2 + specifier: ^5.46.1 version: 5.46.2 ufo: specifier: ^1.6.3 From 5ce124042c88c434335a34f8ef650f41f466646a Mon Sep 17 00:00:00 2001 From: sangwook Date: Thu, 7 May 2026 07:46:07 +0900 Subject: [PATCH 29/30] fix: downgrade @oxfmt and related bindings in pnpm-lock.yaml to 0.45.x --- pnpm-lock.yaml | 184 +++++++++++++++++++++++++++---------------------- 1 file changed, 100 insertions(+), 84 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2ccd07086b..45bbb6907b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1089,7 +1089,7 @@ importers: specifier: ^8.18.1 version: 8.18.1 '@vitejs/release-scripts': - specifier: ^1.7.0 + specifier: ^1.6.0 version: 1.7.0(conventional-commits-filter@5.0.0) eslint: specifier: ^9.39.4 @@ -1113,8 +1113,8 @@ importers: specifier: ^16.4.0 version: 16.4.0 oxfmt: - specifier: ^0.46.0 - version: 0.46.0 + specifier: ^0.45.0 + version: 0.45.0 picocolors: specifier: ^1.1.1 version: 1.1.1 @@ -1137,7 +1137,7 @@ importers: specifier: ~6.0.2 version: 6.0.2 typescript-eslint: - specifier: ^8.59.0 + specifier: ^8.58.2 version: 8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2) vite: specifier: workspace:@voidzero-dev/vite-plus-core@* @@ -1293,7 +1293,7 @@ importers: version: 0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core) '@vitest/utils': specifier: 4.1.4 - version: 4.1.5 + version: 4.1.4 artichokie: specifier: ^0.4.3 version: 0.4.3 @@ -3944,8 +3944,8 @@ packages: cpu: [arm] os: [android] - '@oxfmt/binding-android-arm-eabi@0.46.0': - resolution: {integrity: sha512-b1doV4WRcJU+BESSlCvCjV+5CEr/T6h0frArAdV26Nir+gGNFNaylvDiiMPfF1pxeV0txZEs38ojzJaxBYg+ng==} + '@oxfmt/binding-android-arm-eabi@0.45.0': + resolution: {integrity: sha512-A/UMxFob1fefCuMeGxQBulGfFE38g2Gm23ynr3u6b+b7fY7/ajGbNsa3ikMIkGMLJW/TRoQaMoP1kME7S+815w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] @@ -3962,8 +3962,8 @@ packages: cpu: [arm64] os: [android] - '@oxfmt/binding-android-arm64@0.46.0': - resolution: {integrity: sha512-v6+HhjsoV3GO0u2u9jLSAZrvWfTraDxKofUIQ7/ktS7tzS+epVsxdHmeM+XxuNcAY/nWxxU1Sg4JcGTNRXraBA==} + '@oxfmt/binding-android-arm64@0.45.0': + resolution: {integrity: sha512-L63z4uZmHjgvvqvMJD7mwff8aSBkM0+X4uFr6l6U5t6+Qc9DCLVZWIunJ7Gm4fn4zHPdSq6FFQnhu9yqqobxIg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] @@ -3980,8 +3980,8 @@ packages: cpu: [arm64] os: [darwin] - '@oxfmt/binding-darwin-arm64@0.46.0': - resolution: {integrity: sha512-3eeooJGrqGIlI5MyryDZsAcKXSmKIgAD4yYtfRrRJzXZ0UTFZtiSveIur56YPrGMYZwT4XyVhHsMqrNwr1XeFA==} + '@oxfmt/binding-darwin-arm64@0.45.0': + resolution: {integrity: sha512-UV34dd623FzqT+outIGndsCA/RBB+qgB3XVQhgmmJ9PJwa37NzPC9qzgKeOhPKxVk2HW+JKldQrVL54zs4Noww==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] @@ -3998,8 +3998,8 @@ packages: cpu: [x64] os: [darwin] - '@oxfmt/binding-darwin-x64@0.46.0': - resolution: {integrity: sha512-QG8BDM0CXWbu84k2SKmCqfEddPQPFiBicwtYnLqHRWZZl57HbtOLRMac/KTq2NO4AEc4ICCBpFxJIV9zcqYfkQ==} + '@oxfmt/binding-darwin-x64@0.45.0': + resolution: {integrity: sha512-pMNJv0CMa1pDefVPeNbuQxibh8ITpWDFEhMC/IBB9Zlu76EbgzYwrzI4Cb11mqX2+rIYN70UTrh3z06TM59ptQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] @@ -4016,8 +4016,8 @@ packages: cpu: [x64] os: [freebsd] - '@oxfmt/binding-freebsd-x64@0.46.0': - resolution: {integrity: sha512-9DdCqS/n2ncu/Chazvt3cpgAjAmIGQDz7hFKSrNItMApyV/Ja9mz3hD4JakIE3nS8PW9smEbPWnb389QLBY4nw==} + '@oxfmt/binding-freebsd-x64@0.45.0': + resolution: {integrity: sha512-xTcRoxbbo61sW2+ZRPeH+vp/o9G8gkdhiVumFU+TpneiPm14c79l6GFlxPXlCE9bNWikigbsrvJw46zCVAQFfg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] @@ -4034,8 +4034,8 @@ packages: cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm-gnueabihf@0.46.0': - resolution: {integrity: sha512-Dgs7VeE2jT0LHMhw6tPEt0xQYe54kBqHEovmWsv4FVQlegCOvlIJNx0S8n4vj8WUtpT+Z6BD2HhKJPLglLxvZg==} + '@oxfmt/binding-linux-arm-gnueabihf@0.45.0': + resolution: {integrity: sha512-hWL8Hdni+3U1mPFx1UtWeGp3tNb6EhBAUHRMbKUxVkOp3WwoJbpVO2bfUVbS4PfpledviXXNHSTl1veTa6FhkQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] @@ -4052,8 +4052,8 @@ packages: cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm-musleabihf@0.46.0': - resolution: {integrity: sha512-Zxn3adhTH13JKnU4xXJj8FeEfF680XjXh3gSShKl57HCMBRde2tUJTgogV/1MSHA80PJEVrDa7r66TLVq3Ia7Q==} + '@oxfmt/binding-linux-arm-musleabihf@0.45.0': + resolution: {integrity: sha512-6Blt/0OBT7vvfQpqYuYbpbFLPqSiaYpEJzUUWhinPEuADypDbtV1+LdjM0vYBNGPvnj85ex7lTerEX6JGcPt9w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] @@ -4071,8 +4071,8 @@ packages: os: [linux] libc: [glibc] - '@oxfmt/binding-linux-arm64-gnu@0.46.0': - resolution: {integrity: sha512-+TWipjrgVM8D7aIdDD0tlr3teLTTvQTn7QTE5BpT10H1Fj82gfdn9X6nn2sDgx/MepuSCfSnzFNJq2paLL0OiA==} + '@oxfmt/binding-linux-arm64-gnu@0.45.0': + resolution: {integrity: sha512-jLjoLfe+hGfjhA8hNBSdw85yCA8ePKq7ME4T+g6P9caQXvmt6IhE2X7iVjnVdkmYUWEzZrxlh4p6RkDmAMJY/A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] @@ -4092,8 +4092,8 @@ packages: os: [linux] libc: [musl] - '@oxfmt/binding-linux-arm64-musl@0.46.0': - resolution: {integrity: sha512-aAUPBWJ1lGwwnxZUEDLJ94+Iy6MuwJwPxUgO4sCA5mEEyDk7b+cDQ+JpX1VR150Zoyd+D49gsrUzpUK5h587Eg==} + '@oxfmt/binding-linux-arm64-musl@0.45.0': + resolution: {integrity: sha512-XQKXZIKYJC3GQJ8FnD3iMntpw69Wd9kDDK/Xt79p6xnFYlGGxSNv2vIBvRTDg5CKByWFWWZLCRDOXoP/m6YN4g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] @@ -4113,8 +4113,8 @@ packages: os: [linux] libc: [glibc] - '@oxfmt/binding-linux-ppc64-gnu@0.46.0': - resolution: {integrity: sha512-ufBCJukyFX/UDrokP/r6BGDoTInnsDs7bxyzKAgMiZlt2Qu8GPJSJ6Zm6whIiJzKk0naxA8ilwmbO1LMw6Htxw==} + '@oxfmt/binding-linux-ppc64-gnu@0.45.0': + resolution: {integrity: sha512-+g5RiG+xOkdrCWkKodv407nTvMq4vYM18Uox2MhZBm/YoqFxxJpWKsloskFFG5NU13HGPw1wzYjjOVcyd9moCA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] @@ -4134,8 +4134,8 @@ packages: os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-gnu@0.46.0': - resolution: {integrity: sha512-eqtlC2YmPqjun76R1gVfGLuKWx7NuEnLEAudZ7n6ipSKbCZTqIKSs1b5Y8K/JHZsRpLkeSmAAjig5HOIg8fQzQ==} + '@oxfmt/binding-linux-riscv64-gnu@0.45.0': + resolution: {integrity: sha512-V7dXKoSyEbWAkkSF4JJNtF+NJZDmJoSarSoP30WCsB3X636Rehd3CvxBj49FIJxEBFWhvcUjGSHVeU8Erck1bQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] @@ -4155,8 +4155,8 @@ packages: os: [linux] libc: [musl] - '@oxfmt/binding-linux-riscv64-musl@0.46.0': - resolution: {integrity: sha512-yccVOO2nMXkQLGgy0He3EQEwKD7NF0zEk+/OWmroznkqXyJdN6bfK0LtNnr6/14Bh3FjpYq7bP33l/VloCnxpA==} + '@oxfmt/binding-linux-riscv64-musl@0.45.0': + resolution: {integrity: sha512-Vdelft1sAEYojVGgcODEFXSWYQYlIvoyIGWebKCuUibd1tvS1TjTx413xG2ZLuHpYj45CkN/ztMLMX6jrgqpgg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] @@ -4176,8 +4176,8 @@ packages: os: [linux] libc: [glibc] - '@oxfmt/binding-linux-s390x-gnu@0.46.0': - resolution: {integrity: sha512-aAf7fG23OQCey6VRPj9IeCraoYtpgtx0ZyJ1CXkPyT1wjzBE7c3xtuxHe/AdHaJfVVb/SXpSk8Gl1LzyQupSqw==} + '@oxfmt/binding-linux-s390x-gnu@0.45.0': + resolution: {integrity: sha512-RR7xKgNpqwENnK0aYCGYg0JycY2n93J0reNjHyes+I9Gq52dH95x+CBlnlAQHCPfz6FGnKA9HirgUl14WO6o7w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] @@ -4197,8 +4197,8 @@ packages: os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-gnu@0.46.0': - resolution: {integrity: sha512-q0JPsTMyJNjYrBvYFDz4WbVsafNZaPCZv4RnFypRotLqpKROtBZcEaXQW4eb9YmvLU3NckVemLJnzkSZSdmOxw==} + '@oxfmt/binding-linux-x64-gnu@0.45.0': + resolution: {integrity: sha512-U/QQ0+BQNSHxjuXR/utvXnQ50Vu5kUuqEomZvQ1/3mhgbBiMc2WU9q5kZ5WwLp3gnFIx9ibkveoRSe2EZubkqg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] @@ -4218,8 +4218,8 @@ packages: os: [linux] libc: [musl] - '@oxfmt/binding-linux-x64-musl@0.46.0': - resolution: {integrity: sha512-7LsLY9Cw57GPkhSR+duI3mt9baRczK/DtHYSldQ4BEU92da9igBQNl4z7Vq5U9NNPsh1FmpKvv1q9WDtiUQR1A==} + '@oxfmt/binding-linux-x64-musl@0.45.0': + resolution: {integrity: sha512-o5TLOUCF0RWQjsIS06yVC+kFgp092/yLe6qBGSUvtnmTVw9gxjpdQSXc3VN5Cnive4K11HNstEZF8ROKHfDFSw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] @@ -4238,8 +4238,8 @@ packages: cpu: [arm64] os: [openharmony] - '@oxfmt/binding-openharmony-arm64@0.46.0': - resolution: {integrity: sha512-lHiBOz8Duaku7JtRNLlps3j++eOaICPZSd8FCVmTDM4DFOPT71Bjn7g6iar1z7StXlKRweUKxWUs4sA+zWGDXg==} + '@oxfmt/binding-openharmony-arm64@0.45.0': + resolution: {integrity: sha512-RnGcV3HgPuOjsGx/k9oyRNKmOp+NBLGzZTdPDYbc19r7NGeYPplnUU/BfU35bX2Y/O4ejvHxcfkvW2WoYL/gsg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] @@ -4256,8 +4256,8 @@ packages: cpu: [arm64] os: [win32] - '@oxfmt/binding-win32-arm64-msvc@0.46.0': - resolution: {integrity: sha512-/5ktYUliP89RhgC37DBH1x20U5zPSZMy3cMEcO0j3793rbHP9MWsknBwQB6eozRzWmYrh0IFM/p20EbPvDlYlg==} + '@oxfmt/binding-win32-arm64-msvc@0.45.0': + resolution: {integrity: sha512-v3Vj7iKKsUFwt9w5hsqIIoErKVoENC6LoqfDlteOQ5QMDCXihlqLoxpmviUhXnNncg4zV6U9BPwlBbwa+qm4wg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] @@ -4274,8 +4274,8 @@ packages: cpu: [ia32] os: [win32] - '@oxfmt/binding-win32-ia32-msvc@0.46.0': - resolution: {integrity: sha512-3WTnoiuIr8XvV0DIY7SN+1uJSwKf4sPpcbHfobcRT9JutGcLaef/miyBB87jxd3aqH+mS0+G5lsgHuXLUwjjpQ==} + '@oxfmt/binding-win32-ia32-msvc@0.45.0': + resolution: {integrity: sha512-N8yotPBX6ph0H3toF4AEpdCeVPrdcSetj+8eGiZGsrLsng3bs/Q5HPu4bbSxip5GBPx5hGbGHrZwH4+rcrjhHA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] @@ -4292,8 +4292,8 @@ packages: cpu: [x64] os: [win32] - '@oxfmt/binding-win32-x64-msvc@0.46.0': - resolution: {integrity: sha512-IXxiQpkYnOwNfP23vzwSfhdpxJzyiPTY7eTn6dn3DsriKddESzM8i6kfq9R7CD/PUJwCvQT22NgtygBeug3KoA==} + '@oxfmt/binding-win32-x64-msvc@0.45.0': + resolution: {integrity: sha512-w5MMTRCK1dpQeRA+HHqXQXyN33DlG/N2LOYxJmaT4fJjcmZrbNnqw7SmIk7I2/a2493PPLZ+2E/Ar6t2iKVMug==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -5485,6 +5485,9 @@ packages: vite: optional: true + '@vitest/pretty-format@4.1.4': + resolution: {integrity: sha512-ddmDHU0gjEUyEVLxtZa7xamrpIefdEETu3nZjWtHeZX4QxqJ7tRxSteHVXJOcr8jhiLoGAhkK4WJ3WqBpjx42A==} + '@vitest/pretty-format@4.1.5': resolution: {integrity: sha512-7I3q6l5qr03dVfMX2wCo9FxwSJbPdwKjy2uu/YPpU3wfHvIL4QHwVRp57OfGrDFeUJ8/8QdfBKIV12FTtLn00g==} @@ -5502,6 +5505,9 @@ packages: peerDependencies: vitest: workspace:@voidzero-dev/vite-plus-test@* + '@vitest/utils@4.1.4': + resolution: {integrity: sha512-13QMT+eysM5uVGa1rG4kegGYNp6cnQcsTc67ELFbhNLQO+vgsygtYJx2khvdt4gVQqSSpC/KT5FZZxUpP3Oatw==} + '@vitest/utils@4.1.5': resolution: {integrity: sha512-76wdkrmfXfqGjueGgnb45ITPyUi1ycZ4IHgC2bhPDUfWHklY/q3MdLOAB+TF1e6xfl8NxNY0ZYaPCFNWSsw3Ug==} @@ -7809,8 +7815,8 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - oxfmt@0.46.0: - resolution: {integrity: sha512-CopwJOwPAjZ9p76fCvz+mSOJTw9/NY3cSksZK3VO/bUQ8UoEcketNgUuYS0UB3p+R9XnXe7wGGXUmyFxc7QxJA==} + oxfmt@0.45.0: + resolution: {integrity: sha512-0o/COoN9fY50bjVeM7PQsNgbhndKurBIeTIcspW033OumksjJJmIVDKjAk5HMwU/GHTxSOdGDdhJ6BRzGPmsHg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -11837,7 +11843,7 @@ snapshots: '@oxfmt/binding-android-arm-eabi@0.41.0': optional: true - '@oxfmt/binding-android-arm-eabi@0.46.0': + '@oxfmt/binding-android-arm-eabi@0.45.0': optional: true '@oxfmt/binding-android-arm-eabi@0.48.0': @@ -11846,7 +11852,7 @@ snapshots: '@oxfmt/binding-android-arm64@0.41.0': optional: true - '@oxfmt/binding-android-arm64@0.46.0': + '@oxfmt/binding-android-arm64@0.45.0': optional: true '@oxfmt/binding-android-arm64@0.48.0': @@ -11855,7 +11861,7 @@ snapshots: '@oxfmt/binding-darwin-arm64@0.41.0': optional: true - '@oxfmt/binding-darwin-arm64@0.46.0': + '@oxfmt/binding-darwin-arm64@0.45.0': optional: true '@oxfmt/binding-darwin-arm64@0.48.0': @@ -11864,7 +11870,7 @@ snapshots: '@oxfmt/binding-darwin-x64@0.41.0': optional: true - '@oxfmt/binding-darwin-x64@0.46.0': + '@oxfmt/binding-darwin-x64@0.45.0': optional: true '@oxfmt/binding-darwin-x64@0.48.0': @@ -11873,7 +11879,7 @@ snapshots: '@oxfmt/binding-freebsd-x64@0.41.0': optional: true - '@oxfmt/binding-freebsd-x64@0.46.0': + '@oxfmt/binding-freebsd-x64@0.45.0': optional: true '@oxfmt/binding-freebsd-x64@0.48.0': @@ -11882,7 +11888,7 @@ snapshots: '@oxfmt/binding-linux-arm-gnueabihf@0.41.0': optional: true - '@oxfmt/binding-linux-arm-gnueabihf@0.46.0': + '@oxfmt/binding-linux-arm-gnueabihf@0.45.0': optional: true '@oxfmt/binding-linux-arm-gnueabihf@0.48.0': @@ -11891,7 +11897,7 @@ snapshots: '@oxfmt/binding-linux-arm-musleabihf@0.41.0': optional: true - '@oxfmt/binding-linux-arm-musleabihf@0.46.0': + '@oxfmt/binding-linux-arm-musleabihf@0.45.0': optional: true '@oxfmt/binding-linux-arm-musleabihf@0.48.0': @@ -11900,7 +11906,7 @@ snapshots: '@oxfmt/binding-linux-arm64-gnu@0.41.0': optional: true - '@oxfmt/binding-linux-arm64-gnu@0.46.0': + '@oxfmt/binding-linux-arm64-gnu@0.45.0': optional: true '@oxfmt/binding-linux-arm64-gnu@0.48.0': @@ -11909,7 +11915,7 @@ snapshots: '@oxfmt/binding-linux-arm64-musl@0.41.0': optional: true - '@oxfmt/binding-linux-arm64-musl@0.46.0': + '@oxfmt/binding-linux-arm64-musl@0.45.0': optional: true '@oxfmt/binding-linux-arm64-musl@0.48.0': @@ -11918,7 +11924,7 @@ snapshots: '@oxfmt/binding-linux-ppc64-gnu@0.41.0': optional: true - '@oxfmt/binding-linux-ppc64-gnu@0.46.0': + '@oxfmt/binding-linux-ppc64-gnu@0.45.0': optional: true '@oxfmt/binding-linux-ppc64-gnu@0.48.0': @@ -11927,7 +11933,7 @@ snapshots: '@oxfmt/binding-linux-riscv64-gnu@0.41.0': optional: true - '@oxfmt/binding-linux-riscv64-gnu@0.46.0': + '@oxfmt/binding-linux-riscv64-gnu@0.45.0': optional: true '@oxfmt/binding-linux-riscv64-gnu@0.48.0': @@ -11936,7 +11942,7 @@ snapshots: '@oxfmt/binding-linux-riscv64-musl@0.41.0': optional: true - '@oxfmt/binding-linux-riscv64-musl@0.46.0': + '@oxfmt/binding-linux-riscv64-musl@0.45.0': optional: true '@oxfmt/binding-linux-riscv64-musl@0.48.0': @@ -11945,7 +11951,7 @@ snapshots: '@oxfmt/binding-linux-s390x-gnu@0.41.0': optional: true - '@oxfmt/binding-linux-s390x-gnu@0.46.0': + '@oxfmt/binding-linux-s390x-gnu@0.45.0': optional: true '@oxfmt/binding-linux-s390x-gnu@0.48.0': @@ -11954,7 +11960,7 @@ snapshots: '@oxfmt/binding-linux-x64-gnu@0.41.0': optional: true - '@oxfmt/binding-linux-x64-gnu@0.46.0': + '@oxfmt/binding-linux-x64-gnu@0.45.0': optional: true '@oxfmt/binding-linux-x64-gnu@0.48.0': @@ -11963,7 +11969,7 @@ snapshots: '@oxfmt/binding-linux-x64-musl@0.41.0': optional: true - '@oxfmt/binding-linux-x64-musl@0.46.0': + '@oxfmt/binding-linux-x64-musl@0.45.0': optional: true '@oxfmt/binding-linux-x64-musl@0.48.0': @@ -11972,7 +11978,7 @@ snapshots: '@oxfmt/binding-openharmony-arm64@0.41.0': optional: true - '@oxfmt/binding-openharmony-arm64@0.46.0': + '@oxfmt/binding-openharmony-arm64@0.45.0': optional: true '@oxfmt/binding-openharmony-arm64@0.48.0': @@ -11981,7 +11987,7 @@ snapshots: '@oxfmt/binding-win32-arm64-msvc@0.41.0': optional: true - '@oxfmt/binding-win32-arm64-msvc@0.46.0': + '@oxfmt/binding-win32-arm64-msvc@0.45.0': optional: true '@oxfmt/binding-win32-arm64-msvc@0.48.0': @@ -11990,7 +11996,7 @@ snapshots: '@oxfmt/binding-win32-ia32-msvc@0.41.0': optional: true - '@oxfmt/binding-win32-ia32-msvc@0.46.0': + '@oxfmt/binding-win32-ia32-msvc@0.45.0': optional: true '@oxfmt/binding-win32-ia32-msvc@0.48.0': @@ -11999,7 +12005,7 @@ snapshots: '@oxfmt/binding-win32-x64-msvc@0.41.0': optional: true - '@oxfmt/binding-win32-x64-msvc@0.46.0': + '@oxfmt/binding-win32-x64-msvc@0.45.0': optional: true '@oxfmt/binding-win32-x64-msvc@0.48.0': @@ -13115,6 +13121,10 @@ snapshots: optionalDependencies: vite: link:packages/core + '@vitest/pretty-format@4.1.4': + dependencies: + tinyrainbow: 3.1.0 + '@vitest/pretty-format@4.1.5': dependencies: tinyrainbow: 3.1.0 @@ -13144,6 +13154,12 @@ snapshots: tinyrainbow: 3.1.0 vitest: 4.1.5(@edge-runtime/vm@5.0.0)(@opentelemetry/api@1.9.0)(@types/node@24.12.2)(@vitest/browser-playwright@4.1.5(playwright@1.57.0)(vite@packages+core)(vitest@4.1.5))(@vitest/browser-preview@4.1.5(vite@packages+core)(vitest@4.1.5))(@vitest/browser-webdriverio@4.1.5(vite@packages+core)(vitest@4.1.5)(webdriverio@9.20.1))(@vitest/coverage-istanbul@4.1.5(vitest@4.1.5))(@vitest/coverage-v8@4.1.5(@vitest/browser@4.1.5)(vitest@4.1.5))(@vitest/ui@4.1.5(vitest@4.1.5))(happy-dom@20.0.10)(jsdom@27.2.0)(vite@packages+core) + '@vitest/utils@4.1.4': + dependencies: + '@vitest/pretty-format': 4.1.4 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.0 + '@vitest/utils@4.1.5': dependencies: '@vitest/pretty-format': 4.1.5 @@ -15666,29 +15682,29 @@ snapshots: '@oxfmt/binding-win32-ia32-msvc': 0.41.0 '@oxfmt/binding-win32-x64-msvc': 0.41.0 - oxfmt@0.46.0: + oxfmt@0.45.0: dependencies: tinypool: 2.1.0 optionalDependencies: - '@oxfmt/binding-android-arm-eabi': 0.46.0 - '@oxfmt/binding-android-arm64': 0.46.0 - '@oxfmt/binding-darwin-arm64': 0.46.0 - '@oxfmt/binding-darwin-x64': 0.46.0 - '@oxfmt/binding-freebsd-x64': 0.46.0 - '@oxfmt/binding-linux-arm-gnueabihf': 0.46.0 - '@oxfmt/binding-linux-arm-musleabihf': 0.46.0 - '@oxfmt/binding-linux-arm64-gnu': 0.46.0 - '@oxfmt/binding-linux-arm64-musl': 0.46.0 - '@oxfmt/binding-linux-ppc64-gnu': 0.46.0 - '@oxfmt/binding-linux-riscv64-gnu': 0.46.0 - '@oxfmt/binding-linux-riscv64-musl': 0.46.0 - '@oxfmt/binding-linux-s390x-gnu': 0.46.0 - '@oxfmt/binding-linux-x64-gnu': 0.46.0 - '@oxfmt/binding-linux-x64-musl': 0.46.0 - '@oxfmt/binding-openharmony-arm64': 0.46.0 - '@oxfmt/binding-win32-arm64-msvc': 0.46.0 - '@oxfmt/binding-win32-ia32-msvc': 0.46.0 - '@oxfmt/binding-win32-x64-msvc': 0.46.0 + '@oxfmt/binding-android-arm-eabi': 0.45.0 + '@oxfmt/binding-android-arm64': 0.45.0 + '@oxfmt/binding-darwin-arm64': 0.45.0 + '@oxfmt/binding-darwin-x64': 0.45.0 + '@oxfmt/binding-freebsd-x64': 0.45.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.45.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.45.0 + '@oxfmt/binding-linux-arm64-gnu': 0.45.0 + '@oxfmt/binding-linux-arm64-musl': 0.45.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.45.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.45.0 + '@oxfmt/binding-linux-riscv64-musl': 0.45.0 + '@oxfmt/binding-linux-s390x-gnu': 0.45.0 + '@oxfmt/binding-linux-x64-gnu': 0.45.0 + '@oxfmt/binding-linux-x64-musl': 0.45.0 + '@oxfmt/binding-openharmony-arm64': 0.45.0 + '@oxfmt/binding-win32-arm64-msvc': 0.45.0 + '@oxfmt/binding-win32-ia32-msvc': 0.45.0 + '@oxfmt/binding-win32-x64-msvc': 0.45.0 oxfmt@0.48.0: dependencies: From b096c8b380ba17d9e8b8e8045dadeb8da70b9afd Mon Sep 17 00:00:00 2001 From: sangwook Date: Thu, 7 May 2026 07:51:41 +0900 Subject: [PATCH 30/30] fix: update pnpm-lock.yaml to bump postcss and terser dependencies to latest versions --- pnpm-lock.yaml | 127 ++++--------------------------------------------- 1 file changed, 8 insertions(+), 119 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 45bbb6907b..ab0478fafb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -221,7 +221,7 @@ catalogs: version: 2.0.1 terser: specifier: ^5.44.1 - version: 5.46.1 + version: 5.46.2 tinybench: specifier: ^6.0.0 version: 6.0.0 @@ -439,7 +439,7 @@ importers: version: 0.129.0 '@tsdown/css': specifier: 0.21.10 - version: 0.21.10(jiti@2.6.1)(postcss-import@16.1.1(postcss@8.5.10))(postcss-modules@6.0.1(postcss@8.5.10))(postcss@8.5.10)(sass-embedded@1.99.0(source-map-js@1.2.1))(sass@1.99.0)(tsdown@0.21.10)(tsx@4.21.0)(yaml@2.8.2) + version: 0.21.10(jiti@2.6.1)(postcss-import@16.1.1(postcss@8.5.14))(postcss-modules@6.0.1(postcss@8.5.14))(postcss@8.5.14)(sass-embedded@1.99.0(source-map-js@1.2.1))(sass@1.99.0)(tsdown@0.21.10)(tsx@4.21.0)(yaml@2.8.2) '@tsdown/exe': specifier: 0.21.10 version: 0.21.10(tsdown@0.21.10) @@ -460,7 +460,7 @@ importers: version: 1.32.0 postcss: specifier: ^8.5.6 - version: 8.5.10 + version: 8.5.14 publint: specifier: ^0.3.0 version: 0.3.18 @@ -475,10 +475,10 @@ importers: version: 0.64.0 sugarss: specifier: ^5.0.0 - version: 5.0.1(postcss@8.5.10) + version: 5.0.1(postcss@8.5.14) terser: specifier: ^5.16.0 - version: 5.46.1 + version: 5.46.2 tsx: specifier: ^4.8.1 version: 4.21.0 @@ -1014,7 +1014,7 @@ importers: version: 2.0.1 terser: specifier: 'catalog:' - version: 5.46.1 + version: 5.46.2 rolldown/packages/test-dev-server: dependencies: @@ -1204,7 +1204,7 @@ importers: version: 6.15.1 terser: specifier: ^5.16.0 - version: 5.46.1 + version: 5.46.2 devDependencies: acorn: specifier: ^8.16.0 @@ -5938,11 +5938,6 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.10.20: - resolution: {integrity: sha512-1AaXxEPfXT+GvTBJFuy4yXVHWJBXa4OdbIebGN/wX5DlsIkU0+wzGnd2lOzokSk51d5LUmqjgBLRLlypLUqInQ==} - engines: {node: '>=6.0.0'} - hasBin: true - baseline-browser-mapping@2.10.27: resolution: {integrity: sha512-zEs/ufmZoUd7WftKpKyXaT6RFxpQ5Qm9xytKRHvJfxFV9DFJkZph9RvJ1LcOUi0Z1ZVijMte65JbILeV+8QQEA==} engines: {node: '>=6.0.0'} @@ -8081,10 +8076,6 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.5.10: - resolution: {integrity: sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==} - engines: {node: ^10 || ^12 || >=14} - postcss@8.5.14: resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==} engines: {node: ^10 || ^12 || >=14} @@ -8838,11 +8829,6 @@ packages: tar-stream@3.1.7: resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} - terser@5.46.1: - resolution: {integrity: sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==} - engines: {node: '>=10'} - hasBin: true - terser@5.46.2: resolution: {integrity: sha512-uxfo9fPcSgLDYob/w1FuL0c99MWiJDnv+5qXSQc5+Ki5NjVNsYi66INnMFBjf6uFz6OnX12piJQPF4IpjJTNTw==} engines: {node: '>=10'} @@ -12482,23 +12468,6 @@ snapshots: '@tootallnate/quickjs-emscripten@0.23.0': {} - '@tsdown/css@0.21.10(jiti@2.6.1)(postcss-import@16.1.1(postcss@8.5.10))(postcss-modules@6.0.1(postcss@8.5.10))(postcss@8.5.10)(sass-embedded@1.99.0(source-map-js@1.2.1))(sass@1.99.0)(tsdown@0.21.10)(tsx@4.21.0)(yaml@2.8.2)': - dependencies: - lightningcss: 1.32.0 - postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.10)(tsx@4.21.0)(yaml@2.8.2) - rolldown: link:rolldown/packages/rolldown - tsdown: 0.21.10(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.21.10)(@tsdown/exe@0.21.10)(@typescript/native-preview@7.0.0-dev.20260122.2)(@vitejs/devtools@0.1.18(@pnpm/logger@1001.0.1)(typescript@6.0.2)(vite@packages+core))(oxc-resolver@11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(publint@0.3.18)(typescript@6.0.2)(unplugin-unused@0.5.6) - optionalDependencies: - postcss: 8.5.10 - postcss-import: 16.1.1(postcss@8.5.10) - postcss-modules: 6.0.1(postcss@8.5.10) - sass: 1.99.0 - sass-embedded: 1.99.0(source-map-js@1.2.1) - transitivePeerDependencies: - - jiti - - tsx - - yaml - '@tsdown/css@0.21.10(jiti@2.6.1)(postcss-import@16.1.1(postcss@8.5.14))(postcss-modules@6.0.1(postcss@8.5.14))(postcss@8.5.14)(sass-embedded@1.99.0(source-map-js@1.2.1))(sass@1.99.0)(tsdown@0.21.10)(tsx@4.21.0)(yaml@2.8.2)': dependencies: lightningcss: 1.32.0 @@ -12515,7 +12484,6 @@ snapshots: - jiti - tsx - yaml - optional: true '@tsdown/css@0.21.4(jiti@2.6.1)(postcss-import@16.1.1(postcss@8.5.14))(postcss-modules@6.0.1(postcss@8.5.14))(postcss@8.5.14)(sass-embedded@1.99.0(source-map-js@1.2.1))(sass@1.99.0)(tsdown@0.21.4)(tsx@4.21.0)(yaml@2.8.2)': dependencies: @@ -13624,8 +13592,6 @@ snapshots: base64-js@1.5.1: {} - baseline-browser-mapping@2.10.20: {} - baseline-browser-mapping@2.10.27: {} basic-ftp@5.0.5: {} @@ -13711,7 +13677,7 @@ snapshots: browserslist@4.28.2: dependencies: - baseline-browser-mapping: 2.10.20 + baseline-browser-mapping: 2.10.27 caniuse-lite: 1.0.30001785 electron-to-chromium: 1.5.331 node-releases: 2.0.37 @@ -14842,11 +14808,6 @@ snapshots: dependencies: safer-buffer: 2.1.2 - icss-utils@5.1.0(postcss@8.5.10): - dependencies: - postcss: 8.5.10 - optional: true - icss-utils@5.1.0(postcss@8.5.14): dependencies: postcss: 8.5.14 @@ -15956,14 +15917,6 @@ snapshots: pngjs@7.0.0: {} - postcss-import@16.1.1(postcss@8.5.10): - dependencies: - postcss: 8.5.10 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.11 - optional: true - postcss-import@16.1.1(postcss@8.5.14): dependencies: postcss: 8.5.14 @@ -15971,15 +15924,6 @@ snapshots: read-cache: 1.0.0 resolve: 1.22.11 - postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.10)(tsx@4.21.0)(yaml@2.8.2): - dependencies: - lilconfig: 3.1.3 - optionalDependencies: - jiti: 2.6.1 - postcss: 8.5.10 - tsx: 4.21.0 - yaml: 2.8.2 - postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.14)(tsx@4.21.0)(yaml@2.8.2): dependencies: lilconfig: 3.1.3 @@ -15989,23 +15933,10 @@ snapshots: tsx: 4.21.0 yaml: 2.8.2 - postcss-modules-extract-imports@3.1.0(postcss@8.5.10): - dependencies: - postcss: 8.5.10 - optional: true - postcss-modules-extract-imports@3.1.0(postcss@8.5.14): dependencies: postcss: 8.5.14 - postcss-modules-local-by-default@4.2.0(postcss@8.5.10): - dependencies: - icss-utils: 5.1.0(postcss@8.5.10) - postcss: 8.5.10 - postcss-selector-parser: 7.1.0 - postcss-value-parser: 4.2.0 - optional: true - postcss-modules-local-by-default@4.2.0(postcss@8.5.14): dependencies: icss-utils: 5.1.0(postcss@8.5.14) @@ -16013,41 +15944,16 @@ snapshots: postcss-selector-parser: 7.1.0 postcss-value-parser: 4.2.0 - postcss-modules-scope@3.2.1(postcss@8.5.10): - dependencies: - postcss: 8.5.10 - postcss-selector-parser: 7.1.0 - optional: true - postcss-modules-scope@3.2.1(postcss@8.5.14): dependencies: postcss: 8.5.14 postcss-selector-parser: 7.1.0 - postcss-modules-values@4.0.0(postcss@8.5.10): - dependencies: - icss-utils: 5.1.0(postcss@8.5.10) - postcss: 8.5.10 - optional: true - postcss-modules-values@4.0.0(postcss@8.5.14): dependencies: icss-utils: 5.1.0(postcss@8.5.14) postcss: 8.5.14 - postcss-modules@6.0.1(postcss@8.5.10): - dependencies: - generic-names: 4.0.0 - icss-utils: 5.1.0(postcss@8.5.10) - lodash.camelcase: 4.3.0 - postcss: 8.5.10 - postcss-modules-extract-imports: 3.1.0(postcss@8.5.10) - postcss-modules-local-by-default: 4.2.0(postcss@8.5.10) - postcss-modules-scope: 3.2.1(postcss@8.5.10) - postcss-modules-values: 4.0.0(postcss@8.5.10) - string-hash: 1.1.3 - optional: true - postcss-modules@6.0.1(postcss@8.5.14): dependencies: generic-names: 4.0.0 @@ -16067,12 +15973,6 @@ snapshots: postcss-value-parser@4.2.0: {} - postcss@8.5.10: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - postcss@8.5.14: dependencies: nanoid: 3.3.11 @@ -16770,10 +16670,6 @@ snapshots: transitivePeerDependencies: - supports-color - sugarss@5.0.1(postcss@8.5.10): - dependencies: - postcss: 8.5.10 - sugarss@5.0.1(postcss@8.5.14): dependencies: postcss: 8.5.14 @@ -16831,13 +16727,6 @@ snapshots: - bare-abort-controller - react-native-b4a - terser@5.46.1: - dependencies: - '@jridgewell/source-map': 0.3.11 - acorn: 8.16.0 - commander: 2.20.3 - source-map-support: 0.5.21 - terser@5.46.2: dependencies: '@jridgewell/source-map': 0.3.11