Преглед изворни кода

build: migrate formatting pipeline to oxfmt

xingyu4j пре 3 месеци
родитељ
комит
6dabb848a5

+ 0 - 23
.prettierignore

@@ -1,23 +0,0 @@
-dist
-dev-dist
-.local
-.claude
-.agent
-.agents
-.codex
-.output.js
-node_modules
-.nvmrc
-coverage
-CODEOWNERS
-.nitro
-.output
-
-
-**/*.svg
-**/*.sh
-
-public
-.npmrc
-*-lock.yaml
-skills-lock.json

+ 0 - 1
.prettierrc.mjs

@@ -1 +0,0 @@
-export { default } from '@vben/prettier-config';

+ 0 - 1
internal/lint-configs/eslint-config/package.json

@@ -42,7 +42,6 @@
     "eslint-plugin-oxlint": "catalog:",
     "eslint-plugin-perfectionist": "catalog:",
     "eslint-plugin-pnpm": "catalog:",
-    "eslint-plugin-prettier": "catalog:",
     "eslint-plugin-unicorn": "catalog:",
     "eslint-plugin-unused-imports": "catalog:",
     "eslint-plugin-vue": "catalog:",

+ 0 - 1
internal/lint-configs/eslint-config/src/configs/index.ts

@@ -8,7 +8,6 @@ export * from './node';
 export * from './oxlint';
 export * from './perfectionist';
 export * from './pnpm';
-export * from './prettier';
 export * from './turbo';
 export * from './typescript';
 export * from './unicorn';

+ 0 - 17
internal/lint-configs/eslint-config/src/configs/prettier.ts

@@ -1,17 +0,0 @@
-import type { Linter } from 'eslint';
-
-import { interopDefault } from '../util';
-
-export async function prettier(): Promise<Linter.Config[]> {
-  const pluginPrettier = await interopDefault(import('eslint-plugin-prettier'));
-  return [
-    {
-      plugins: {
-        prettier: pluginPrettier,
-      },
-      rules: {
-        'prettier/prettier': 'error',
-      },
-    },
-  ];
-}

+ 0 - 2
internal/lint-configs/eslint-config/src/index.ts

@@ -11,7 +11,6 @@ import {
   oxcCompat,
   perfectionist,
   pnpm,
-  prettier,
   turbo,
   typescript,
   unicorn,
@@ -33,7 +32,6 @@ async function defineConfig(config: FlatConfig[] = []) {
     vue(),
     javascript(),
     ignores(),
-    prettier(),
     typescript(),
     jsonc(),
     disableds(),

+ 7 - 0
internal/lint-configs/oxfmt-config/build.config.ts

@@ -0,0 +1,7 @@
+import { defineBuildConfig } from 'unbuild';
+
+export default defineBuildConfig({
+  clean: true,
+  declaration: true,
+  entries: ['src/index'],
+});

+ 11 - 6
internal/lint-configs/prettier-config/package.json → internal/lint-configs/oxfmt-config/package.json

@@ -1,5 +1,5 @@
 {
-  "name": "@vben/prettier-config",
+  "name": "@vben/oxfmt-config",
   "version": "5.6.0",
   "private": true,
   "homepage": "https://github.com/vbenjs/vue-vben-admin",
@@ -7,21 +7,26 @@
   "repository": {
     "type": "git",
     "url": "git+https://github.com/vbenjs/vue-vben-admin.git",
-    "directory": "internal/lint-configs/prettier-config"
+    "directory": "internal/lint-configs/oxfmt-config"
   },
   "license": "MIT",
   "type": "module",
+  "scripts": {
+    "stub": "pnpm unbuild --stub"
+  },
   "files": [
     "dist"
   ],
-  "main": "./index.mjs",
-  "module": "./index.mjs",
+  "main": "./dist/index.mjs",
+  "module": "./dist/index.mjs",
+  "types": "./dist/index.d.ts",
   "exports": {
     ".": {
-      "default": "./index.mjs"
+      "types": "./dist/index.d.ts",
+      "import": "./dist/index.mjs"
     }
   },
   "dependencies": {
-    "prettier": "catalog:"
+    "oxfmt": "catalog:"
   }
 }

+ 22 - 0
internal/lint-configs/oxfmt-config/src/index.ts

@@ -0,0 +1,22 @@
+import { defineConfig as defineOxfmtConfig } from 'oxfmt';
+
+type OxfmtConfig = Parameters<typeof defineOxfmtConfig>[0];
+
+const oxfmtConfig = defineOxfmtConfig({
+  printWidth: 80,
+  proseWrap: 'never',
+  semi: true,
+  singleQuote: true,
+  sortPackageJson: false,
+  trailingComma: 'all',
+});
+
+function defineConfig(config: OxfmtConfig = {}) {
+  return defineOxfmtConfig({
+    ...oxfmtConfig,
+    ...config,
+  });
+}
+
+export { defineConfig, oxfmtConfig };
+export type { OxfmtConfig };

+ 6 - 0
internal/lint-configs/oxfmt-config/tsconfig.json

@@ -0,0 +1,6 @@
+{
+  "$schema": "https://json.schemastore.org/tsconfig",
+  "extends": "@vben/tsconfig/node.json",
+  "include": ["src"],
+  "exclude": ["node_modules"]
+}

+ 0 - 17
internal/lint-configs/prettier-config/index.mjs

@@ -1,17 +0,0 @@
-export default {
-  endOfLine: 'auto',
-  overrides: [
-    {
-      files: ['*.json5'],
-      options: {
-        quoteProps: 'preserve',
-        singleQuote: false,
-      },
-    },
-  ],
-  printWidth: 80,
-  proseWrap: 'never',
-  semi: true,
-  singleQuote: true,
-  trailingComma: 'all',
-};

+ 1 - 7
internal/lint-configs/stylelint-config/index.mjs

@@ -36,12 +36,7 @@ export default {
       files: ['*.scss', '**/*.scss'],
     },
   ],
-  plugins: [
-    'stylelint-order',
-    '@stylistic/stylelint-plugin',
-    'stylelint-prettier',
-    'stylelint-scss',
-  ],
+  plugins: ['stylelint-order', '@stylistic/stylelint-plugin', 'stylelint-scss'],
   rules: {
     'at-rule-no-deprecated': null,
     'at-rule-no-unknown': [
@@ -106,7 +101,6 @@ export default {
       ],
       { severity: 'error' },
     ],
-    'prettier/prettier': true,
     'rule-empty-line-before': [
       'always',
       {

+ 1 - 3
internal/lint-configs/stylelint-config/package.json

@@ -31,13 +31,11 @@
     "postcss": "catalog:",
     "postcss-html": "catalog:",
     "postcss-scss": "catalog:",
-    "prettier": "catalog:",
     "stylelint": "catalog:",
     "stylelint-config-recommended": "catalog:",
     "stylelint-config-recommended-scss": "catalog:",
     "stylelint-config-recommended-vue": "catalog:",
     "stylelint-config-standard": "catalog:",
-    "stylelint-order": "catalog:",
-    "stylelint-prettier": "catalog:"
+    "stylelint-order": "catalog:"
   }
 }

+ 6 - 6
lefthook.yml

@@ -47,22 +47,22 @@ pre-commit:
     code-workspace:
       run: pnpm vsh code-workspace --auto-commit
     lint-md:
-      run: pnpm prettier --cache --ignore-unknown --write {staged_files}
+      run: pnpm oxfmt {staged_files}
       glob: '*.md'
     lint-vue:
-      run: pnpm prettier --write {staged_files} && pnpm oxlint --fix {staged_files} && pnpm eslint --cache --fix {staged_files} && pnpm stylelint --fix --allow-empty-input {staged_files}
+      run: pnpm oxfmt {staged_files} && pnpm oxlint --fix {staged_files} && pnpm eslint --cache --fix {staged_files} && pnpm stylelint --fix --allow-empty-input {staged_files}
       glob: '*.vue'
     lint-js:
-      run: pnpm prettier --cache --ignore-unknown --write {staged_files} && pnpm oxlint --fix {staged_files} && pnpm eslint --cache --fix {staged_files}
+      run: pnpm oxfmt {staged_files} && pnpm oxlint --fix {staged_files} && pnpm eslint --cache --fix {staged_files}
       glob: '*.{js,jsx,ts,tsx}'
     lint-style:
-      run: pnpm prettier --cache --ignore-unknown --write {staged_files} && pnpm stylelint --fix --allow-empty-input {staged_files}
+      run: pnpm oxfmt {staged_files} && pnpm stylelint --fix --allow-empty-input {staged_files}
       glob: '*.{scss,less,styl,html,vue,css}'
     lint-package:
-      run: pnpm prettier --cache --write {staged_files}
+      run: pnpm oxfmt {staged_files}
       glob: 'package.json'
     lint-json:
-      run: pnpm prettier --cache --write --parser json {staged_files}
+      run: pnpm oxfmt {staged_files}
       glob: '{!(package)*.json,*.code-snippets,.!(browserslist)*rc}'
 
 post-merge:

+ 26 - 0
oxfmt.config.ts

@@ -0,0 +1,26 @@
+import { defineConfig } from '@vben/oxfmt-config';
+
+export default defineConfig({
+  ignorePatterns: [
+    'dist',
+    'dev-dist',
+    '.local',
+    '.claude',
+    '.agent',
+    '.agents',
+    '.codex',
+    '.output.js',
+    'node_modules',
+    '.nvmrc',
+    'coverage',
+    'CODEOWNERS',
+    '.nitro',
+    '.output',
+    '**/*.svg',
+    '**/*.sh',
+    'public',
+    '.npmrc',
+    '*-lock.yaml',
+    'skills-lock.json',
+  ],
+});

+ 2 - 1
package.json

@@ -72,8 +72,8 @@
     "@types/node": "catalog:",
     "@vben/commitlint-config": "workspace:*",
     "@vben/eslint-config": "workspace:*",
+    "@vben/oxfmt-config": "workspace:*",
     "@vben/oxlint-config": "workspace:*",
-    "@vben/prettier-config": "workspace:*",
     "@vben/stylelint-config": "workspace:*",
     "@vben/tsconfig": "workspace:*",
     "@vben/turbo-run": "workspace:*",
@@ -87,6 +87,7 @@
     "happy-dom": "catalog:",
     "is-ci": "catalog:",
     "lefthook": "catalog:",
+    "oxfmt": "catalog:",
     "oxlint": "catalog:",
     "playwright": "catalog:",
     "rimraf": "catalog:",

+ 229 - 84
pnpm-lock.yaml

@@ -237,9 +237,6 @@ catalogs:
     eslint-plugin-pnpm:
       specifier: ^1.6.0
       version: 1.6.0
-    eslint-plugin-prettier:
-      specifier: ^5.5.5
-      version: 5.5.5
     eslint-plugin-unicorn:
       specifier: ^63.0.0
       version: 63.0.0
@@ -306,6 +303,9 @@ catalogs:
     ora:
       specifier: ^9.3.0
       version: 9.3.0
+    oxfmt:
+      specifier: ^0.40.0
+      version: 0.40.0
     oxlint:
       specifier: ^1.55.0
       version: 1.55.0
@@ -327,9 +327,6 @@ catalogs:
     postcss-scss:
       specifier: ^4.0.9
       version: 4.0.9
-    prettier:
-      specifier: ^3.8.1
-      version: 3.8.1
     publint:
       specifier: ^0.3.18
       version: 0.3.18
@@ -387,9 +384,6 @@ catalogs:
     stylelint-order:
       specifier: ^8.0.0
       version: 8.0.0
-    stylelint-prettier:
-      specifier: ^5.0.3
-      version: 5.0.3
     stylelint-scss:
       specifier: ^7.0.0
       version: 7.0.0
@@ -523,12 +517,12 @@ importers:
       '@vben/eslint-config':
         specifier: workspace:*
         version: link:internal/lint-configs/eslint-config
+      '@vben/oxfmt-config':
+        specifier: workspace:*
+        version: link:internal/lint-configs/oxfmt-config
       '@vben/oxlint-config':
         specifier: workspace:*
         version: link:internal/lint-configs/oxlint-config
-      '@vben/prettier-config':
-        specifier: workspace:*
-        version: link:internal/lint-configs/prettier-config
       '@vben/stylelint-config':
         specifier: workspace:*
         version: link:internal/lint-configs/stylelint-config
@@ -568,6 +562,9 @@ importers:
       lefthook:
         specifier: 'catalog:'
         version: 2.1.4
+      oxfmt:
+        specifier: 'catalog:'
+        version: 0.40.0
       oxlint:
         specifier: 'catalog:'
         version: 1.55.0
@@ -1055,9 +1052,6 @@ importers:
       eslint-plugin-pnpm:
         specifier: 'catalog:'
         version: 1.6.0(eslint@10.0.3(jiti@2.6.1))
-      eslint-plugin-prettier:
-        specifier: 'catalog:'
-        version: 5.5.5(eslint@10.0.3(jiti@2.6.1))(prettier@3.8.1)
       eslint-plugin-unicorn:
         specifier: 'catalog:'
         version: 63.0.0(eslint@10.0.3(jiti@2.6.1))
@@ -1080,6 +1074,12 @@ importers:
         specifier: 'catalog:'
         version: 2.0.0
 
+  internal/lint-configs/oxfmt-config:
+    dependencies:
+      oxfmt:
+        specifier: 'catalog:'
+        version: 0.40.0
+
   internal/lint-configs/oxlint-config:
     dependencies:
       eslint-plugin-better-tailwindcss:
@@ -1089,12 +1089,6 @@ importers:
         specifier: 'catalog:'
         version: 1.55.0
 
-  internal/lint-configs/prettier-config:
-    dependencies:
-      prettier:
-        specifier: 'catalog:'
-        version: 3.8.1
-
   internal/lint-configs/stylelint-config:
     dependencies:
       '@stylistic/stylelint-plugin':
@@ -1116,9 +1110,6 @@ importers:
       postcss-scss:
         specifier: 'catalog:'
         version: 4.0.9(postcss@8.5.8)
-      prettier:
-        specifier: 'catalog:'
-        version: 3.8.1
       stylelint:
         specifier: 'catalog:'
         version: 17.4.0(typescript@5.9.3)
@@ -1137,9 +1128,6 @@ importers:
       stylelint-order:
         specifier: 'catalog:'
         version: 8.0.0(stylelint@17.4.0(typescript@5.9.3))
-      stylelint-prettier:
-        specifier: 'catalog:'
-        version: 5.0.3(prettier@3.8.1)(stylelint@17.4.0(typescript@5.9.3))
 
   internal/node-utils:
     dependencies:
@@ -1170,9 +1158,6 @@ importers:
       pkg-types:
         specifier: 'catalog:'
         version: 2.3.0
-      prettier:
-        specifier: 'catalog:'
-        version: 3.8.1
       rimraf:
         specifier: 'catalog:'
         version: 6.1.3
@@ -3726,6 +3711,128 @@ packages:
   '@oxc-project/types@0.115.0':
     resolution: {integrity: sha512-4n91DKnebUS4yjUHl2g3/b2T+IUdCfmoZGhmwsovZCDaJSs+QkVAM+0AqqTxHSsHfeiMuueT75cZaZcT/m0pSw==}
 
+  '@oxfmt/binding-android-arm-eabi@0.40.0':
+    resolution: {integrity: sha512-S6zd5r1w/HmqR8t0CTnGjFTBLDq2QKORPwriCHxo4xFNuhmOTABGjPaNvCJJVnrKBLsohOeiDX3YqQfJPF+FXw==}
+    engines: {node: ^20.19.0 || >=22.12.0}
+    cpu: [arm]
+    os: [android]
+
+  '@oxfmt/binding-android-arm64@0.40.0':
+    resolution: {integrity: sha512-/mbS9UUP/5Vbl2D6osIdcYiP0oie63LKMoTyGj5hyMCK/SFkl3EhtyRAfdjPvuvHC0SXdW6ePaTKkBSq1SNcIw==}
+    engines: {node: ^20.19.0 || >=22.12.0}
+    cpu: [arm64]
+    os: [android]
+
+  '@oxfmt/binding-darwin-arm64@0.40.0':
+    resolution: {integrity: sha512-wRt8fRdfLiEhnRMBonlIbKrJWixoEmn6KCjKE9PElnrSDSXETGZfPb8ee+nQNTobXkCVvVLytp2o0obAsxl78Q==}
+    engines: {node: ^20.19.0 || >=22.12.0}
+    cpu: [arm64]
+    os: [darwin]
+
+  '@oxfmt/binding-darwin-x64@0.40.0':
+    resolution: {integrity: sha512-fzowhqbOE/NRy+AE5ob0+Y4X243WbWzDb00W+pKwD7d9tOqsAFbtWUwIyqqCoCLxj791m2xXIEeLH/3uz7zCCg==}
+    engines: {node: ^20.19.0 || >=22.12.0}
+    cpu: [x64]
+    os: [darwin]
+
+  '@oxfmt/binding-freebsd-x64@0.40.0':
+    resolution: {integrity: sha512-agZ9ITaqdBjcerRRFEHB8s0OyVcQW8F9ZxsszjxzeSthQ4fcN2MuOtQFWec1ed8/lDa50jSLHVE2/xPmTgtCfQ==}
+    engines: {node: ^20.19.0 || >=22.12.0}
+    cpu: [x64]
+    os: [freebsd]
+
+  '@oxfmt/binding-linux-arm-gnueabihf@0.40.0':
+    resolution: {integrity: sha512-ZM2oQ47p28TP1DVIp7HL1QoMUgqlBFHey0ksHct7tMXoU5BqjNvPWw7888azzMt25lnyPODVuye1wvNbvVUFOA==}
+    engines: {node: ^20.19.0 || >=22.12.0}
+    cpu: [arm]
+    os: [linux]
+
+  '@oxfmt/binding-linux-arm-musleabihf@0.40.0':
+    resolution: {integrity: sha512-RBFPAxRAIsMisKM47Oe6Lwdv6agZYLz02CUhVCD1sOv5ajAcRMrnwCFBPWwGXpazToW2mjnZxFos8TuFjTU15A==}
+    engines: {node: ^20.19.0 || >=22.12.0}
+    cpu: [arm]
+    os: [linux]
+
+  '@oxfmt/binding-linux-arm64-gnu@0.40.0':
+    resolution: {integrity: sha512-Nb2XbQ+wV3W2jSIihXdPj7k83eOxeSgYP3N/SRXvQ6ZYPIk6Q86qEh5Gl/7OitX3bQoQrESqm1yMLvZV8/J7dA==}
+    engines: {node: ^20.19.0 || >=22.12.0}
+    cpu: [arm64]
+    os: [linux]
+    libc: [glibc]
+
+  '@oxfmt/binding-linux-arm64-musl@0.40.0':
+    resolution: {integrity: sha512-tGmWhLD/0YMotCdfezlT6tC/MJG/wKpo4vnQ3Cq+4eBk/BwNv7EmkD0VkD5F/dYkT3b8FNU01X2e8vvJuWoM1w==}
+    engines: {node: ^20.19.0 || >=22.12.0}
+    cpu: [arm64]
+    os: [linux]
+    libc: [musl]
+
+  '@oxfmt/binding-linux-ppc64-gnu@0.40.0':
+    resolution: {integrity: sha512-rVbFyM3e7YhkVnp0IVYjaSHfrBWcTRWb60LEcdNAJcE2mbhTpbqKufx0FrhWfoxOrW/+7UJonAOShoFFLigDqQ==}
+    engines: {node: ^20.19.0 || >=22.12.0}
+    cpu: [ppc64]
+    os: [linux]
+    libc: [glibc]
+
+  '@oxfmt/binding-linux-riscv64-gnu@0.40.0':
+    resolution: {integrity: sha512-3ZqBw14JtWeEoLiioJcXSJz8RQyPE+3jLARnYM1HdPzZG4vk+Ua8CUupt2+d+vSAvMyaQBTN2dZK+kbBS/j5mA==}
+    engines: {node: ^20.19.0 || >=22.12.0}
+    cpu: [riscv64]
+    os: [linux]
+    libc: [glibc]
+
+  '@oxfmt/binding-linux-riscv64-musl@0.40.0':
+    resolution: {integrity: sha512-JJ4PPSdcbGBjPvb+O7xYm2FmAsKCyuEMYhqatBAHMp/6TA6rVlf9Z/sYPa4/3Bommb+8nndm15SPFRHEPU5qFA==}
+    engines: {node: ^20.19.0 || >=22.12.0}
+    cpu: [riscv64]
+    os: [linux]
+    libc: [musl]
+
+  '@oxfmt/binding-linux-s390x-gnu@0.40.0':
+    resolution: {integrity: sha512-Kp0zNJoX9Ik77wUya2tpBY3W9f40VUoMQLWVaob5SgCrblH/t2xr/9B2bWHfs0WCefuGmqXcB+t0Lq77sbBmZw==}
+    engines: {node: ^20.19.0 || >=22.12.0}
+    cpu: [s390x]
+    os: [linux]
+    libc: [glibc]
+
+  '@oxfmt/binding-linux-x64-gnu@0.40.0':
+    resolution: {integrity: sha512-7YTCNzleWTaQTqNGUNQ66qVjpoV6DjbCOea+RnpMBly2bpzrI/uu7Rr+2zcgRfNxyjXaFTVQKaRKjqVdeUfeVA==}
+    engines: {node: ^20.19.0 || >=22.12.0}
+    cpu: [x64]
+    os: [linux]
+    libc: [glibc]
+
+  '@oxfmt/binding-linux-x64-musl@0.40.0':
+    resolution: {integrity: sha512-hWnSzJ0oegeOwfOEeejYXfBqmnRGHusgtHfCPzmvJvHTwy1s3Neo59UKc1CmpE3zxvrCzJoVHos0rr97GHMNPw==}
+    engines: {node: ^20.19.0 || >=22.12.0}
+    cpu: [x64]
+    os: [linux]
+    libc: [musl]
+
+  '@oxfmt/binding-openharmony-arm64@0.40.0':
+    resolution: {integrity: sha512-28sJC1lR4qtBJGzSRRbPnSW3GxU2+4YyQFE6rCmsUYqZ5XYH8jg0/w+CvEzQ8TuAQz5zLkcA25nFQGwoU0PT3Q==}
+    engines: {node: ^20.19.0 || >=22.12.0}
+    cpu: [arm64]
+    os: [openharmony]
+
+  '@oxfmt/binding-win32-arm64-msvc@0.40.0':
+    resolution: {integrity: sha512-cDkRnyT0dqwF5oIX1Cv59HKCeZQFbWWdUpXa3uvnHFT2iwYSSZspkhgjXjU6iDp5pFPaAEAe9FIbMoTgkTmKPg==}
+    engines: {node: ^20.19.0 || >=22.12.0}
+    cpu: [arm64]
+    os: [win32]
+
+  '@oxfmt/binding-win32-ia32-msvc@0.40.0':
+    resolution: {integrity: sha512-7rPemBJjqm5Gkv6ZRCPvK8lE6AqQ/2z31DRdWazyx2ZvaSgL7QGofHXHNouRpPvNsT9yxRNQJgigsWkc+0qg4w==}
+    engines: {node: ^20.19.0 || >=22.12.0}
+    cpu: [ia32]
+    os: [win32]
+
+  '@oxfmt/binding-win32-x64-msvc@0.40.0':
+    resolution: {integrity: sha512-/Zmj0yTYSvmha6TG1QnoLqVT7ZMRDqXvFXXBQpIjteEwx9qvUYMBH2xbiOFhDeMUJkGwC3D6fdKsFtaqUvkwNA==}
+    engines: {node: ^20.19.0 || >=22.12.0}
+    cpu: [x64]
+    os: [win32]
+
   '@oxlint/binding-android-arm-eabi@1.55.0':
     resolution: {integrity: sha512-NhvgAhncTSOhRahQSCnkK/4YIGPjTmhPurQQ2dwt2IvwCMTvZRW5vF2K10UBOxFve4GZDMw6LtXZdC2qeuYIVQ==}
     engines: {node: ^20.19.0 || >=22.12.0}
@@ -6665,20 +6772,6 @@ packages:
     peerDependencies:
       eslint: ^9.0.0 || ^10.0.0
 
-  eslint-plugin-prettier@5.5.5:
-    resolution: {integrity: sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==}
-    engines: {node: ^14.18.0 || >=16.0.0}
-    peerDependencies:
-      '@types/eslint': '>=8.0.0'
-      eslint: '>=8.0.0'
-      eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0'
-      prettier: '>=3.0.0'
-    peerDependenciesMeta:
-      '@types/eslint':
-        optional: true
-      eslint-config-prettier:
-        optional: true
-
   eslint-plugin-turbo@2.8.16:
     resolution: {integrity: sha512-fhvTLe0PnyV72npfBi/IwwVMzkTnUw9MxS2S2Q0Oo1aed7woAtHwSL5DEdTTV6tXZSKbqRHaIbjV6rwx+1iRYA==}
     peerDependencies:
@@ -6830,9 +6923,6 @@ packages:
   fast-deep-equal@3.1.3:
     resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
 
-  fast-diff@1.3.0:
-    resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==}
-
   fast-equals@6.0.0:
     resolution: {integrity: sha512-PFhhIGgdM79r5Uztdj9Zb6Tt1zKafqVfdMGwVca1z5z6fbX7DmsySSuJd8HiP6I1j505DCS83cLxo5rmSNeVEA==}
     engines: {node: '>=6.0.0'}
@@ -8543,6 +8633,11 @@ packages:
     resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
     engines: {node: '>= 0.4'}
 
+  oxfmt@0.40.0:
+    resolution: {integrity: sha512-g0C3I7xUj4b4DcagevM9kgH6+pUHytikxUcn3/VUkvzTNaaXBeyZqb7IBsHwojeXm4mTBEC/aBjBTMVUkZwWUQ==}
+    engines: {node: ^20.19.0 || >=22.12.0}
+    hasBin: true
+
   oxlint@1.55.0:
     resolution: {integrity: sha512-T+FjepiyWpaZMhekqRpH8Z3I4vNM610p6w+Vjfqgj5TZUxHXl7N8N5IPvmOU8U4XdTRxqtNNTh9Y4hLtr7yvFg==}
     engines: {node: ^20.19.0 || >=22.12.0}
@@ -9003,20 +9098,11 @@ packages:
     resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
     engines: {node: '>= 0.8.0'}
 
-  prettier-linter-helpers@1.0.1:
-    resolution: {integrity: sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==}
-    engines: {node: '>=6.0.0'}
-
   prettier@2.8.8:
     resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
     engines: {node: '>=10.13.0'}
     hasBin: true
 
-  prettier@3.8.1:
-    resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==}
-    engines: {node: '>=14'}
-    hasBin: true
-
   pretty-bytes@5.6.0:
     resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==}
     engines: {node: '>=6'}
@@ -9855,13 +9941,6 @@ packages:
     peerDependencies:
       stylelint: ^16.18.0 || ^17.0.0
 
-  stylelint-prettier@5.0.3:
-    resolution: {integrity: sha512-B6V0oa35ekRrKZlf+6+jA+i50C4GXJ7X1PPmoCqSUoXN6BrNF6NhqqhanvkLjqw2qgvrS0wjdpeC+Tn06KN3jw==}
-    engines: {node: '>=18.12.0'}
-    peerDependencies:
-      prettier: '>=3.0.0'
-      stylelint: '>=16.0.0'
-
   stylelint-scss@7.0.0:
     resolution: {integrity: sha512-H88kCC+6Vtzj76NsC8rv6x/LW8slBzIbyeSjsKVlS+4qaEJoDrcJR4L+8JdrR2ORdTscrBzYWiiT2jq6leYR1Q==}
     engines: {node: '>=20.19.0'}
@@ -10017,6 +10096,10 @@ packages:
     resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
     engines: {node: '>=12.0.0'}
 
+  tinypool@2.1.0:
+    resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==}
+    engines: {node: ^20.0.0 || >=22.0.0}
+
   tinyrainbow@3.1.0:
     resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==}
     engines: {node: '>=14.0.0'}
@@ -13056,6 +13139,63 @@ snapshots:
 
   '@oxc-project/types@0.115.0': {}
 
+  '@oxfmt/binding-android-arm-eabi@0.40.0':
+    optional: true
+
+  '@oxfmt/binding-android-arm64@0.40.0':
+    optional: true
+
+  '@oxfmt/binding-darwin-arm64@0.40.0':
+    optional: true
+
+  '@oxfmt/binding-darwin-x64@0.40.0':
+    optional: true
+
+  '@oxfmt/binding-freebsd-x64@0.40.0':
+    optional: true
+
+  '@oxfmt/binding-linux-arm-gnueabihf@0.40.0':
+    optional: true
+
+  '@oxfmt/binding-linux-arm-musleabihf@0.40.0':
+    optional: true
+
+  '@oxfmt/binding-linux-arm64-gnu@0.40.0':
+    optional: true
+
+  '@oxfmt/binding-linux-arm64-musl@0.40.0':
+    optional: true
+
+  '@oxfmt/binding-linux-ppc64-gnu@0.40.0':
+    optional: true
+
+  '@oxfmt/binding-linux-riscv64-gnu@0.40.0':
+    optional: true
+
+  '@oxfmt/binding-linux-riscv64-musl@0.40.0':
+    optional: true
+
+  '@oxfmt/binding-linux-s390x-gnu@0.40.0':
+    optional: true
+
+  '@oxfmt/binding-linux-x64-gnu@0.40.0':
+    optional: true
+
+  '@oxfmt/binding-linux-x64-musl@0.40.0':
+    optional: true
+
+  '@oxfmt/binding-openharmony-arm64@0.40.0':
+    optional: true
+
+  '@oxfmt/binding-win32-arm64-msvc@0.40.0':
+    optional: true
+
+  '@oxfmt/binding-win32-ia32-msvc@0.40.0':
+    optional: true
+
+  '@oxfmt/binding-win32-x64-msvc@0.40.0':
+    optional: true
+
   '@oxlint/binding-android-arm-eabi@1.55.0':
     optional: true
 
@@ -16153,13 +16293,6 @@ snapshots:
       yaml: 2.8.2
       yaml-eslint-parser: 2.0.0
 
-  eslint-plugin-prettier@5.5.5(eslint@10.0.3(jiti@2.6.1))(prettier@3.8.1):
-    dependencies:
-      eslint: 10.0.3(jiti@2.6.1)
-      prettier: 3.8.1
-      prettier-linter-helpers: 1.0.1
-      synckit: 0.11.12
-
   eslint-plugin-turbo@2.8.16(eslint@10.0.3(jiti@2.6.1))(turbo@2.8.16):
     dependencies:
       dotenv: 16.0.3
@@ -16360,8 +16493,6 @@ snapshots:
 
   fast-deep-equal@3.1.3: {}
 
-  fast-diff@1.3.0: {}
-
   fast-equals@6.0.0: {}
 
   fast-fifo@1.3.2: {}
@@ -18129,6 +18260,30 @@ snapshots:
       object-keys: 1.1.1
       safe-push-apply: 1.0.0
 
+  oxfmt@0.40.0:
+    dependencies:
+      tinypool: 2.1.0
+    optionalDependencies:
+      '@oxfmt/binding-android-arm-eabi': 0.40.0
+      '@oxfmt/binding-android-arm64': 0.40.0
+      '@oxfmt/binding-darwin-arm64': 0.40.0
+      '@oxfmt/binding-darwin-x64': 0.40.0
+      '@oxfmt/binding-freebsd-x64': 0.40.0
+      '@oxfmt/binding-linux-arm-gnueabihf': 0.40.0
+      '@oxfmt/binding-linux-arm-musleabihf': 0.40.0
+      '@oxfmt/binding-linux-arm64-gnu': 0.40.0
+      '@oxfmt/binding-linux-arm64-musl': 0.40.0
+      '@oxfmt/binding-linux-ppc64-gnu': 0.40.0
+      '@oxfmt/binding-linux-riscv64-gnu': 0.40.0
+      '@oxfmt/binding-linux-riscv64-musl': 0.40.0
+      '@oxfmt/binding-linux-s390x-gnu': 0.40.0
+      '@oxfmt/binding-linux-x64-gnu': 0.40.0
+      '@oxfmt/binding-linux-x64-musl': 0.40.0
+      '@oxfmt/binding-openharmony-arm64': 0.40.0
+      '@oxfmt/binding-win32-arm64-msvc': 0.40.0
+      '@oxfmt/binding-win32-ia32-msvc': 0.40.0
+      '@oxfmt/binding-win32-x64-msvc': 0.40.0
+
   oxlint@1.55.0:
     optionalDependencies:
       '@oxlint/binding-android-arm-eabi': 1.55.0
@@ -18550,14 +18705,8 @@ snapshots:
 
   prelude-ls@1.2.1: {}
 
-  prettier-linter-helpers@1.0.1:
-    dependencies:
-      fast-diff: 1.3.0
-
   prettier@2.8.8: {}
 
-  prettier@3.8.1: {}
-
   pretty-bytes@5.6.0: {}
 
   pretty-bytes@6.1.1: {}
@@ -19451,12 +19600,6 @@ snapshots:
       postcss-sorting: 10.0.0(postcss@8.5.8)
       stylelint: 17.4.0(typescript@5.9.3)
 
-  stylelint-prettier@5.0.3(prettier@3.8.1)(stylelint@17.4.0(typescript@5.9.3)):
-    dependencies:
-      prettier: 3.8.1
-      prettier-linter-helpers: 1.0.1
-      stylelint: 17.4.0(typescript@5.9.3)
-
   stylelint-scss@7.0.0(stylelint@17.4.0(typescript@5.9.3)):
     dependencies:
       css-tree: 3.2.1
@@ -19670,6 +19813,8 @@ snapshots:
       fdir: 6.5.0(picomatch@4.0.3)
       picomatch: 4.0.3
 
+  tinypool@2.1.0: {}
+
   tinyrainbow@3.1.0: {}
 
   tippy.js@6.3.7:

+ 1 - 5
pnpm-workspace.yaml

@@ -63,7 +63,6 @@ catalog:
   '@vite-pwa/vitepress': ^1.1.0
   '@vitejs/plugin-vue': ^6.0.5
   '@vitejs/plugin-vue-jsx': ^5.1.5
-  '@vitest/eslint-plugin': ^1.6.11
   '@vue/shared': ^3.5.30
   '@vue/test-utils': ^2.4.6
   '@vueuse/core': ^14.2.1
@@ -98,13 +97,11 @@ catalog:
   eslint-config-turbo: ^2.8.16
   eslint-plugin-better-tailwindcss: ^4.3.2
   eslint-plugin-command: ^3.5.2
-  eslint-plugin-import-x: ^4.16.2
   eslint-plugin-jsonc: ^3.1.2
   eslint-plugin-n: ^17.24.0
   eslint-plugin-oxlint: ^1.55.0
   eslint-plugin-perfectionist: ^5.6.0
   eslint-plugin-pnpm: ^1.6.0
-  eslint-plugin-prettier: ^5.5.5
   eslint-plugin-unicorn: ^63.0.0
   eslint-plugin-unused-imports: ^4.4.1
   eslint-plugin-vue: ^10.8.0
@@ -127,6 +124,7 @@ catalog:
   nitropack: ^2.13.1
   nprogress: ^0.2.0
   ora: ^9.3.0
+  oxfmt: ^0.40.0
   oxlint: ^1.55.0
   pinia: ^3.0.4
   pinia-plugin-persistedstate: ^4.7.1
@@ -135,7 +133,6 @@ catalog:
   postcss: ^8.5.8
   postcss-html: ^1.8.1
   postcss-scss: ^4.0.9
-  prettier: ^3.8.1
   publint: ^0.3.18
   qrcode: ^1.5.4
   qs: ^6.15.0
@@ -155,7 +152,6 @@ catalog:
   stylelint-config-recommended-vue: ^1.6.1
   stylelint-config-standard: ^40.0.0
   stylelint-order: ^8.0.0
-  stylelint-prettier: ^5.0.3
   stylelint-scss: ^7.0.0
   tailwind-merge: ^3.5.0
   tailwindcss: ^4.2.1

+ 1 - 1
scripts/vsh/src/check-dep/index.ts

@@ -22,8 +22,8 @@ const DEFAULT_CONFIG = {
     '@vben/commitlint-config',
     '@vben/eslint-config',
     '@vben/node-utils',
+    '@vben/oxfmt-config',
     '@vben/oxlint-config',
-    '@vben/prettier-config',
     '@vben/stylelint-config',
     '@vben/tsconfig',
     '@vben/vite-config',

+ 2 - 2
scripts/vsh/src/lint/index.ts

@@ -16,7 +16,7 @@ async function runLint({ format }: LintCommandOptions) {
     await execaCommand(`stylelint "**/*.{vue,css,less,scss}" --cache --fix`, {
       stdio: 'inherit',
     });
-    await execaCommand(`prettier . --write --cache --log-level warn`, {
+    await execaCommand(`oxfmt .`, {
       stdio: 'inherit',
     });
     await execaCommand(`oxlint . --fix`, {
@@ -31,7 +31,7 @@ async function runLint({ format }: LintCommandOptions) {
     execaCommand(`eslint . --cache`, {
       stdio: 'inherit',
     }),
-    execaCommand(`prettier . --ignore-unknown --check --cache`, {
+    execaCommand(`oxfmt --check .`, {
       stdio: 'inherit',
     }),
     execaCommand(`stylelint "**/*.{vue,css,less,scss}" --cache`, {

+ 2 - 2
vben-admin.code-workspace

@@ -41,8 +41,8 @@
       "path": "internal/lint-configs/oxlint-config",
     },
     {
-      "name": "@vben/prettier-config",
-      "path": "internal/lint-configs/prettier-config",
+      "name": "@vben/oxfmt-config",
+      "path": "internal/lint-configs/oxfmt-config",
     },
     {
       "name": "@vben/stylelint-config",

+ 1 - 1
vitest.config.ts

@@ -22,7 +22,7 @@ export default defineConfig({
       '**/.{idea,git,cache,output,temp}/**',
       '**/node_modules/**',
       '**/{stylelint,eslint}.config.*',
-      '.prettierrc.mjs',
+      'oxfmt.config.ts',
     ],
   },
 });