diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index aea6f96..01af39b 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -19,7 +19,7 @@ jobs:
       - name: Set node
         uses: actions/setup-node@v4
         with:
-          node-version-file: '.nvmrc'
+          node-version-file: .nvmrc
           cache: pnpm
           registry-url: 'https://registry.npmjs.org'
 
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 812ddeb..cc76f46 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -43,6 +43,11 @@
     "xml",
     "gql",
     "graphql",
-    "astro"
+    "astro",
+    "css",
+    "less",
+    "scss",
+    "pcss",
+    "postcss"
   ]
 }
diff --git a/README.md b/README.md
index 50793a7..aff907b 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
 # @uni-helper/uni-env
 
-在 uni-app 中优雅的判断当前环境
+在 uni-app 中优雅地判断当前环境。
 
 [![npm version][npm-version-src]][npm-version-href]
 [![npm downloads][npm-downloads-src]][npm-downloads-href]
diff --git a/eslint.config.js b/eslint.config.js
index 43ada6a..6a1a5cb 100644
--- a/eslint.config.js
+++ b/eslint.config.js
@@ -1,5 +1,3 @@
 import antfu from '@antfu/eslint-config'
 
-export default antfu({
-  vue: false,
-})
+export default antfu()
diff --git a/package.json b/package.json
index 2e2685a..d616903 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
   "name": "@uni-helper/uni-env",
   "type": "module",
   "version": "0.1.2",
-  "packageManager": "pnpm@9.1.2",
+  "packageManager": "pnpm@9.4.0",
   "description": "",
   "author": "KeJun",
   "license": "MIT",
@@ -49,13 +49,13 @@
     "std-env": "^3.7.0"
   },
   "devDependencies": {
-    "@antfu/eslint-config": "^2.18.1",
-    "@types/node": "^20.12.12",
+    "@antfu/eslint-config": "^2.21.1",
+    "@types/node": "^20.14.5",
     "bumpp": "^9.4.1",
     "eslint": "^8.57.0",
     "esno": "^4.7.0",
     "typescript": "^5.4.5",
     "unbuild": "^2.0.0",
-    "vitest": "^1.6.0"
+    "vitest": "^2.0.0"
   }
 }
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 6611185..69a4664 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -13,11 +13,11 @@ importers:
         version: 3.7.0
     devDependencies:
       '@antfu/eslint-config':
-        specifier: ^2.18.1
-        version: 2.18.1(@vue/compiler-sfc@3.4.27)(eslint@8.57.0)(typescript@5.4.5)(vitest@1.6.0(@types/node@20.12.12))
+        specifier: ^2.21.1
+        version: 2.21.1(@vue/compiler-sfc@3.4.27)(eslint@8.57.0)(typescript@5.4.5)(vitest@2.0.5(@types/node@20.14.5))
       '@types/node':
-        specifier: ^20.12.12
-        version: 20.12.12
+        specifier: ^20.14.5
+        version: 20.14.5
       bumpp:
         specifier: ^9.4.1
         version: 9.4.1
@@ -34,8 +34,8 @@ importers:
         specifier: ^2.0.0
         version: 2.0.0(typescript@5.4.5)
       vitest:
-        specifier: ^1.6.0
-        version: 1.6.0(@types/node@20.12.12)
+        specifier: ^2.0.0
+        version: 2.0.5(@types/node@20.14.5)
 
 packages:
 
@@ -47,16 +47,20 @@ packages:
     resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==}
     engines: {node: '>=6.0.0'}
 
-  '@antfu/eslint-config@2.18.1':
-    resolution: {integrity: sha512-6LkzQa96SHt47ZCvAcLJbQLUXmcpl9wI+eo5OeyB2YhHbsUBX7ufT0r4x6fx6Ci2694HRNLl8wY42LUvwidduw==}
+  '@ampproject/remapping@2.3.0':
+    resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
+    engines: {node: '>=6.0.0'}
+
+  '@antfu/eslint-config@2.21.1':
+    resolution: {integrity: sha512-CG7U7nihU73zufrxe5Rr4pxsHrW60GXl9yzRpRY+ImGQ2CVhd0eb3fqJYdNwDJBgKgqHGWX4p1ovYvno/jfWHA==}
     hasBin: true
     peerDependencies:
       '@eslint-react/eslint-plugin': ^1.5.8
       '@prettier/plugin-xml': ^3.4.1
       '@unocss/eslint-plugin': '>=0.50.0'
-      astro-eslint-parser: ^0.16.3
+      astro-eslint-parser: ^1.0.2
       eslint: '>=8.40.0'
-      eslint-plugin-astro: ^0.31.4
+      eslint-plugin-astro: ^1.2.0
       eslint-plugin-format: '>=0.1.0'
       eslint-plugin-react-hooks: ^4.6.0
       eslint-plugin-react-refresh: ^0.4.4
@@ -207,8 +211,8 @@ packages:
     bundledDependencies:
       - is-unicode-supported
 
-  '@es-joy/jsdoccomment@0.43.0':
-    resolution: {integrity: sha512-Q1CnsQrytI3TlCB1IVWXWeqUIPGVEKGaE7IbVdt13Nq/3i0JESAkQQERrfiQkmlpijl+++qyqPgaS31Bvc1jRQ==}
+  '@es-joy/jsdoccomment@0.43.1':
+    resolution: {integrity: sha512-I238eDtOolvCuvtxrnqtlBaw0BwdQuYqK7eA6XIonicMdOOOb75mqdIzkGDUbS04+1Di007rgm9snFRNeVrOog==}
     engines: {node: '>=16'}
 
   '@esbuild/aix-ppc64@0.20.2':
@@ -642,6 +646,7 @@ packages:
   '@humanwhocodes/config-array@0.11.14':
     resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==}
     engines: {node: '>=10.10.0'}
+    deprecated: Use @eslint/config-array instead
 
   '@humanwhocodes/module-importer@1.0.1':
     resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
@@ -649,10 +654,7 @@ packages:
 
   '@humanwhocodes/object-schema@2.0.3':
     resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
-
-  '@jest/schemas@29.6.3':
-    resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+    deprecated: Use @eslint/object-schema instead
 
   '@jridgewell/gen-mapping@0.1.1':
     resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==}
@@ -662,6 +664,10 @@ packages:
     resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==}
     engines: {node: '>=6.0.0'}
 
+  '@jridgewell/gen-mapping@0.3.5':
+    resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
+    engines: {node: '>=6.0.0'}
+
   '@jridgewell/resolve-uri@3.1.0':
     resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
     engines: {node: '>=6.0.0'}
@@ -670,6 +676,10 @@ packages:
     resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
     engines: {node: '>=6.0.0'}
 
+  '@jridgewell/set-array@1.2.1':
+    resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
+    engines: {node: '>=6.0.0'}
+
   '@jridgewell/sourcemap-codec@1.4.14':
     resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
 
@@ -679,6 +689,9 @@ packages:
   '@jridgewell/trace-mapping@0.3.17':
     resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==}
 
+  '@jridgewell/trace-mapping@0.3.25':
+    resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
+
   '@jsdevtools/ez-spawn@3.0.4':
     resolution: {integrity: sha512-f5DRIOZf7wxogefH03RjMPMdBF7ADTWUMoOs9kaJo06EfwF+aFhMZMDZxHg/Xe12hptN9xoZjGso2fdjapBRIA==}
     engines: {node: '>=10'}
@@ -829,9 +842,6 @@ packages:
     cpu: [x64]
     os: [win32]
 
-  '@sinclair/typebox@0.27.8':
-    resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
-
   '@stylistic/eslint-plugin-js@2.1.0':
     resolution: {integrity: sha512-gdXUjGNSsnY6nPyqxu6lmDTtVrwCOjun4x8PUn0x04d5ucLI74N3MT1Q0UhdcOR9No3bo5PGDyBgXK+KmD787A==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -876,8 +886,8 @@ packages:
   '@types/mdast@3.0.13':
     resolution: {integrity: sha512-HjiGiWedR0DVFkeNljpa6Lv4/IZU1+30VY5d747K7lBudFc3R0Ibr6yJ9lN3BE28VnZyDfLF/VB1Ql1ZIbKrmg==}
 
-  '@types/node@20.12.12':
-    resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==}
+  '@types/node@20.14.5':
+    resolution: {integrity: sha512-aoRR+fJkZT2l0aGOJhuA8frnCSoNX6W7U2mpNq63+BxBIj5BQFt8rHy627kijCmm63ijdSdwvGgpUsU6MBsZZA==}
 
   '@types/normalize-package-data@2.4.2':
     resolution: {integrity: sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A==}
@@ -888,8 +898,8 @@ packages:
   '@types/unist@2.0.8':
     resolution: {integrity: sha512-d0XxK3YTObnWVp6rZuev3c49+j4Lo8g4L1ZRm9z5L0xpoZycUPshHgczK5gsUMaZOstjVYYi09p5gYvUtfChYw==}
 
-  '@typescript-eslint/eslint-plugin@7.10.0':
-    resolution: {integrity: sha512-PzCr+a/KAef5ZawX7nbyNwBDtM1HdLIT53aSA2DDlxmxMngZ43O8SIePOeX8H5S+FHXeI6t97mTt/dDdzY4Fyw==}
+  '@typescript-eslint/eslint-plugin@7.13.1':
+    resolution: {integrity: sha512-kZqi+WZQaZfPKnsflLJQCz6Ze9FFSMfXrrIOcyargekQxG37ES7DJNpJUE9Q/X5n3yTIP/WPutVNzgknQ7biLg==}
     engines: {node: ^18.18.0 || >=20.0.0}
     peerDependencies:
       '@typescript-eslint/parser': ^7.0.0
@@ -899,8 +909,8 @@ packages:
       typescript:
         optional: true
 
-  '@typescript-eslint/parser@7.10.0':
-    resolution: {integrity: sha512-2EjZMA0LUW5V5tGQiaa2Gys+nKdfrn2xiTIBLR4fxmPmVSvgPcKNW+AE/ln9k0A4zDUti0J/GZXMDupQoI+e1w==}
+  '@typescript-eslint/parser@7.13.1':
+    resolution: {integrity: sha512-1ELDPlnLvDQ5ybTSrMhRTFDfOQEOXNM+eP+3HT/Yq7ruWpciQw+Avi73pdEbA4SooCawEWo3dtYbF68gN7Ed1A==}
     engines: {node: ^18.18.0 || >=20.0.0}
     peerDependencies:
       eslint: ^8.56.0
@@ -909,12 +919,12 @@ packages:
       typescript:
         optional: true
 
-  '@typescript-eslint/scope-manager@7.10.0':
-    resolution: {integrity: sha512-7L01/K8W/VGl7noe2mgH0K7BE29Sq6KAbVmxurj8GGaPDZXPr8EEQ2seOeAS+mEV9DnzxBQB6ax6qQQ5C6P4xg==}
+  '@typescript-eslint/scope-manager@7.13.1':
+    resolution: {integrity: sha512-adbXNVEs6GmbzaCpymHQ0MB6E4TqoiVbC0iqG3uijR8ZYfpAXMGttouQzF4Oat3P2GxDVIrg7bMI/P65LiQZdg==}
     engines: {node: ^18.18.0 || >=20.0.0}
 
-  '@typescript-eslint/type-utils@7.10.0':
-    resolution: {integrity: sha512-D7tS4WDkJWrVkuzgm90qYw9RdgBcrWmbbRkrLA4d7Pg3w0ttVGDsvYGV19SH8gPR5L7OtcN5J1hTtyenO9xE9g==}
+  '@typescript-eslint/type-utils@7.13.1':
+    resolution: {integrity: sha512-aWDbLu1s9bmgPGXSzNCxELu+0+HQOapV/y+60gPXafR8e2g1Bifxzevaa+4L2ytCWm+CHqpELq4CSoN9ELiwCg==}
     engines: {node: ^18.18.0 || >=20.0.0}
     peerDependencies:
       eslint: ^8.56.0
@@ -923,12 +933,12 @@ packages:
       typescript:
         optional: true
 
-  '@typescript-eslint/types@7.10.0':
-    resolution: {integrity: sha512-7fNj+Ya35aNyhuqrA1E/VayQX9Elwr8NKZ4WueClR3KwJ7Xx9jcCdOrLW04h51de/+gNbyFMs+IDxh5xIwfbNg==}
+  '@typescript-eslint/types@7.13.1':
+    resolution: {integrity: sha512-7K7HMcSQIAND6RBL4kDl24sG/xKM13cA85dc7JnmQXw2cBDngg7c19B++JzvJHRG3zG36n9j1i451GBzRuHchw==}
     engines: {node: ^18.18.0 || >=20.0.0}
 
-  '@typescript-eslint/typescript-estree@7.10.0':
-    resolution: {integrity: sha512-LXFnQJjL9XIcxeVfqmNj60YhatpRLt6UhdlFwAkjNc6jSUlK8zQOl1oktAP8PlWFzPQC1jny/8Bai3/HPuvN5g==}
+  '@typescript-eslint/typescript-estree@7.13.1':
+    resolution: {integrity: sha512-uxNr51CMV7npU1BxZzYjoVz9iyjckBduFBP0S5sLlh1tXYzHzgZ3BR9SVsNed+LmwKrmnqN3Kdl5t7eZ5TS1Yw==}
     engines: {node: ^18.18.0 || >=20.0.0}
     peerDependencies:
       typescript: '*'
@@ -936,33 +946,36 @@ packages:
       typescript:
         optional: true
 
-  '@typescript-eslint/utils@7.10.0':
-    resolution: {integrity: sha512-olzif1Fuo8R8m/qKkzJqT7qwy16CzPRWBvERS0uvyc+DHd8AKbO4Jb7kpAvVzMmZm8TrHnI7hvjN4I05zow+tg==}
+  '@typescript-eslint/utils@7.13.1':
+    resolution: {integrity: sha512-h5MzFBD5a/Gh/fvNdp9pTfqJAbuQC4sCN2WzuXme71lqFJsZtLbjxfSk4r3p02WIArOF9N94pdsLiGutpDbrXQ==}
     engines: {node: ^18.18.0 || >=20.0.0}
     peerDependencies:
       eslint: ^8.56.0
 
-  '@typescript-eslint/visitor-keys@7.10.0':
-    resolution: {integrity: sha512-9ntIVgsi6gg6FIq9xjEO4VQJvwOqA3jaBFQJ/6TK5AvEup2+cECI6Fh7QiBxmfMHXU0V0J4RyPeOU1VDNzl9cg==}
+  '@typescript-eslint/visitor-keys@7.13.1':
+    resolution: {integrity: sha512-k/Bfne7lrP7hcb7m9zSsgcBmo+8eicqqfNAJ7uUY+jkTFpKeH2FSkWpFRtimBxgkyvqfu9jTPRbYOvud6isdXA==}
     engines: {node: ^18.18.0 || >=20.0.0}
 
   '@ungap/structured-clone@1.2.0':
     resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
 
-  '@vitest/expect@1.6.0':
-    resolution: {integrity: sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==}
+  '@vitest/expect@2.0.5':
+    resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==}
 
-  '@vitest/runner@1.6.0':
-    resolution: {integrity: sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg==}
+  '@vitest/pretty-format@2.0.5':
+    resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==}
 
-  '@vitest/snapshot@1.6.0':
-    resolution: {integrity: sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ==}
+  '@vitest/runner@2.0.5':
+    resolution: {integrity: sha512-TfRfZa6Bkk9ky4tW0z20WKXFEwwvWhRY+84CnSEtq4+3ZvDlJyY32oNTJtM7AW9ihW90tX/1Q78cb6FjoAs+ig==}
 
-  '@vitest/spy@1.6.0':
-    resolution: {integrity: sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==}
+  '@vitest/snapshot@2.0.5':
+    resolution: {integrity: sha512-SgCPUeDFLaM0mIUHfaArq8fD2WbaXG/zVXjRupthYfYGzc8ztbFbu6dUNOblBG7XLMR1kEhS/DNnfCZ2IhdDew==}
 
-  '@vitest/utils@1.6.0':
-    resolution: {integrity: sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==}
+  '@vitest/spy@2.0.5':
+    resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==}
+
+  '@vitest/utils@2.0.5':
+    resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==}
 
   '@vue/compiler-core@3.4.27':
     resolution: {integrity: sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==}
@@ -984,10 +997,6 @@ packages:
     peerDependencies:
       acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
 
-  acorn-walk@8.3.2:
-    resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==}
-    engines: {node: '>=0.4.0'}
-
   acorn@8.10.0:
     resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==}
     engines: {node: '>=0.4.0'}
@@ -1013,10 +1022,6 @@ packages:
     resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
     engines: {node: '>=8'}
 
-  ansi-styles@5.2.0:
-    resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
-    engines: {node: '>=10'}
-
   anymatch@3.1.3:
     resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
     engines: {node: '>= 8'}
@@ -1032,8 +1037,9 @@ packages:
     resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
     engines: {node: '>=8'}
 
-  assertion-error@1.1.0:
-    resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+  assertion-error@2.0.1:
+    resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
+    engines: {node: '>=12'}
 
   balanced-match@1.0.2:
     resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
@@ -1094,9 +1100,9 @@ packages:
   caniuse-lite@1.0.30001621:
     resolution: {integrity: sha512-+NLXZiviFFKX0fk8Piwv3PfLPGtRqJeq2TiNoUff/qB5KJgwecJTvCXDpmlyP/eCI/GUEmp/h/y5j0yckiiZrA==}
 
-  chai@4.3.10:
-    resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==}
-    engines: {node: '>=4'}
+  chai@5.1.1:
+    resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==}
+    engines: {node: '>=12'}
 
   chalk@2.4.2:
     resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
@@ -1119,8 +1125,9 @@ packages:
   character-reference-invalid@1.1.4:
     resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==}
 
-  check-error@1.0.3:
-    resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+  check-error@2.1.1:
+    resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==}
+    engines: {node: '>= 16'}
 
   chokidar@3.6.0:
     resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
@@ -1161,10 +1168,6 @@ packages:
   color-name@1.1.4:
     resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
 
-  comment-parser@1.4.0:
-    resolution: {integrity: sha512-QLyTNiZ2KDOibvFPlZ6ZngVsZ/0gYnE6uTXi5aoDg8ed3AkJAz4sEje3Y8a29hQ1s6A99MZXe47fLAXQ1rTqaw==}
-    engines: {node: '>= 12.0.0'}
-
   comment-parser@1.4.1:
     resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==}
     engines: {node: '>= 12.0.0'}
@@ -1214,8 +1217,17 @@ packages:
       supports-color:
         optional: true
 
-  deep-eql@4.1.3:
-    resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
+  debug@4.3.6:
+    resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==}
+    engines: {node: '>=6.0'}
+    peerDependencies:
+      supports-color: '*'
+    peerDependenciesMeta:
+      supports-color:
+        optional: true
+
+  deep-eql@5.0.2:
+    resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
     engines: {node: '>=6'}
 
   deep-is@0.1.4:
@@ -1234,10 +1246,6 @@ packages:
   destr@2.0.1:
     resolution: {integrity: sha512-M1Ob1zPSIvlARiJUkKqvAZ3VAqQY6Jcuth/pBKQ2b1dX/Qx0OnJ8Vux6J2H5PTMQeRzWrrbTu70VxBfv/OPDJA==}
 
-  diff-sequences@29.6.3:
-    resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
   dir-glob@3.0.1:
     resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
     engines: {node: '>=8'}
@@ -1259,8 +1267,8 @@ packages:
   emoji-regex@8.0.0:
     resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
 
-  enhanced-resolve@5.16.1:
-    resolution: {integrity: sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==}
+  enhanced-resolve@5.17.0:
+    resolution: {integrity: sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==}
     engines: {node: '>=10.13.0'}
 
   entities@4.5.0:
@@ -1285,10 +1293,6 @@ packages:
     engines: {node: '>=12'}
     hasBin: true
 
-  escalade@3.1.1:
-    resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
-    engines: {node: '>=6'}
-
   escalade@3.1.2:
     resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
     engines: {node: '>=6'}
@@ -1321,8 +1325,8 @@ packages:
     peerDependencies:
       eslint: '*'
 
-  eslint-plugin-antfu@2.2.0:
-    resolution: {integrity: sha512-QHzHYP+fyfhSkIdcuT9JZ4rCPuJOoHRE27gglPYHlJ6lxB7pO9i45yAy4aurx/rleBuEC27U4c//1Nwtbasj4Q==}
+  eslint-plugin-antfu@2.3.3:
+    resolution: {integrity: sha512-TAgYNuc20QyKw8NXtpzR3LeMTTv1qAJVKkjCVzjRSGiSR1EetEY7LRgQVhcgP/C1FnI87isQERAIkKvkYyLq0Q==}
     peerDependencies:
       eslint: '*'
 
@@ -1343,20 +1347,20 @@ packages:
     peerDependencies:
       eslint: '>=4.19.1'
 
-  eslint-plugin-import-x@0.5.0:
-    resolution: {integrity: sha512-C7R8Z4IzxmsoOPMtSzwuOBW5FH6iRlxHR6iTks+MzVlrk3r3TUxokkWTx3ypdj9nGOEP+CG/5e6ebZzHbxgbbQ==}
+  eslint-plugin-import-x@0.5.1:
+    resolution: {integrity: sha512-2JK8bbFOLes+gG6tgdnM8safCxMAj4u2wjX8X1BRFPfnY7Ct2hFYESoIcVwABX/DDcdpQFLGtKmzbNEWJZD9iQ==}
     engines: {node: '>=16'}
     peerDependencies:
       eslint: ^8.56.0 || ^9.0.0-0
 
-  eslint-plugin-jsdoc@48.2.6:
-    resolution: {integrity: sha512-GNk9jtpYmoEVeD/U6yYYmd6T8vSOoPs7CL8ZeX85iD8P3qifDdLQGze6+cw9boobDthmYnnxvIoHrhuSffj09g==}
+  eslint-plugin-jsdoc@48.2.12:
+    resolution: {integrity: sha512-sO9sKkJx5ovWoRk9hV0YiNzXQ4Z6j27CqE/po2E3wddZVuy9wvKPSTiIhpxMTrP/qURvKayJIDB2+o9kyCW1Fw==}
     engines: {node: '>=18'}
     peerDependencies:
       eslint: ^7.0.0 || ^8.0.0 || ^9.0.0
 
-  eslint-plugin-jsonc@2.15.1:
-    resolution: {integrity: sha512-PVFrqIJa8BbM/e828RSn0SwB/Z5ye+2LDuy2XqG6AymNgPsfApRRcznsbxP7VrjdLEU4Nb+g9n/d6opyp0jp9A==}
+  eslint-plugin-jsonc@2.16.0:
+    resolution: {integrity: sha512-Af/ZL5mgfb8FFNleH6KlO4/VdmDuTqmM+SPnWcdoWywTetv7kq+vQe99UyQb9XO3b0OWLVuTH7H0d/PXYCMdSg==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     peerDependencies:
       eslint: '>=6.0.0'
@@ -1367,8 +1371,8 @@ packages:
     peerDependencies:
       eslint: '>=8'
 
-  eslint-plugin-n@17.7.0:
-    resolution: {integrity: sha512-4Jg4ZKVE4VjHig2caBqPHYNW5na84RVufUuipFLJbgM/G57O6FdpUKJbHakCDJb/yjQuyqVzYWRtU3HNYaZUwg==}
+  eslint-plugin-n@17.9.0:
+    resolution: {integrity: sha512-CPSaXDXdrT4nsrOrO4mT4VB6FMUkoySRkHWuuJJHVqsIEjIeZgMY1H7AzSwPbDScikBmLN82KeM1u7ixV7PzGg==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
       eslint: '>=8.23.0'
@@ -1598,9 +1602,6 @@ packages:
     resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
     engines: {node: '>=16'}
 
-  get-tsconfig@4.7.2:
-    resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==}
-
   get-tsconfig@4.7.5:
     resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==}
 
@@ -1618,10 +1619,12 @@ packages:
 
   glob@7.2.3:
     resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+    deprecated: Glob versions prior to v9 are no longer supported
 
   glob@8.0.3:
     resolution: {integrity: sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==}
     engines: {node: '>=12'}
+    deprecated: Glob versions prior to v9 are no longer supported
 
   globals@11.12.0:
     resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
@@ -1639,8 +1642,8 @@ packages:
     resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
     engines: {node: '>=18'}
 
-  globals@15.3.0:
-    resolution: {integrity: sha512-cCdyVjIUVTtX8ZsPkq1oCsOsLmGIswqnjZYMJJTGaNApj1yHtLSymKhwH51ttirREn75z3p4k051clwg7rvNKA==}
+  globals@15.6.0:
+    resolution: {integrity: sha512-UzcJi88Hw//CurUIRa9Jxb0vgOCcuD/MNjwmXp633cyaRKkCWACkoqHCtfZv43b1kqXGg/fpOa8bwgacCeXsVg==}
     engines: {node: '>=18'}
 
   globby@11.1.0:
@@ -1701,6 +1704,7 @@ packages:
 
   inflight@1.0.6:
     resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+    deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
 
   inherits@2.0.4:
     resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
@@ -1775,9 +1779,6 @@ packages:
   js-tokens@4.0.0:
     resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
 
-  js-tokens@9.0.0:
-    resolution: {integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==}
-
   js-yaml@4.1.0:
     resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
     hasBin: true
@@ -1863,20 +1864,12 @@ packages:
   lodash@4.17.21:
     resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
 
-  loupe@2.3.6:
-    resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==}
-    deprecated: Please upgrade to 2.3.7 which fixes GHSA-4q6p-r6v2-jvc5
-
-  loupe@2.3.7:
-    resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
+  loupe@3.1.1:
+    resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==}
 
   lru-cache@5.1.1:
     resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
 
-  lru-cache@6.0.0:
-    resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
-    engines: {node: '>=10'}
-
   magic-string@0.27.0:
     resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==}
     engines: {node: '>=12'}
@@ -2034,10 +2027,6 @@ packages:
     resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
 
-  p-limit@5.0.0:
-    resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==}
-    engines: {node: '>=18'}
-
   p-locate@4.1.0:
     resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
     engines: {node: '>=8'}
@@ -2102,15 +2091,13 @@ packages:
   pathe@1.1.2:
     resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
 
-  pathval@1.1.1:
-    resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+  pathval@2.0.0:
+    resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==}
+    engines: {node: '>= 14.16'}
 
   perfect-debounce@1.0.0:
     resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==}
 
-  picocolors@1.0.0:
-    resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
-
   picocolors@1.0.1:
     resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==}
 
@@ -2148,10 +2135,6 @@ packages:
     resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==}
     engines: {node: ^14.13.1 || >=16.0.0}
 
-  pretty-format@29.7.0:
-    resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
   prompts@2.4.2:
     resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
     engines: {node: '>= 6'}
@@ -2166,9 +2149,6 @@ packages:
   rc9@2.1.1:
     resolution: {integrity: sha512-lNeOl38Ws0eNxpO3+wD1I9rkHGQyj1NU1jlzv4go2CtEnEQEUfqnIvZG7W+bC/aXdJ27n5x/yUjb6RoT9tko+Q==}
 
-  react-is@18.2.0:
-    resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
-
   read-pkg-up@7.0.1:
     resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
     engines: {node: '>=8'}
@@ -2218,6 +2198,7 @@ packages:
 
   rimraf@3.0.2:
     resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
+    deprecated: Rimraf versions prior to v4 are no longer supported
     hasBin: true
 
   rollup-plugin-dts@6.1.0:
@@ -2255,11 +2236,6 @@ packages:
     resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
     hasBin: true
 
-  semver@7.5.4:
-    resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
-    engines: {node: '>=10'}
-    hasBin: true
-
   semver@7.6.2:
     resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==}
     engines: {node: '>=10'}
@@ -2340,9 +2316,6 @@ packages:
     resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
     engines: {node: '>=8'}
 
-  strip-literal@2.1.0:
-    resolution: {integrity: sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==}
-
   supports-color@5.5.0:
     resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
     engines: {node: '>=4'}
@@ -2373,12 +2346,16 @@ packages:
   tinybench@2.8.0:
     resolution: {integrity: sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==}
 
-  tinypool@0.8.4:
-    resolution: {integrity: sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==}
+  tinypool@1.0.0:
+    resolution: {integrity: sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==}
+    engines: {node: ^18.0.0 || >=20.0.0}
+
+  tinyrainbow@1.2.0:
+    resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==}
     engines: {node: '>=14.0.0'}
 
-  tinyspy@2.2.0:
-    resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==}
+  tinyspy@3.0.0:
+    resolution: {integrity: sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==}
     engines: {node: '>=14.0.0'}
 
   to-fast-properties@2.0.0:
@@ -2480,8 +2457,8 @@ packages:
   validate-npm-package-license@3.0.4:
     resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
 
-  vite-node@1.6.0:
-    resolution: {integrity: sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==}
+  vite-node@2.0.5:
+    resolution: {integrity: sha512-LdsW4pxj0Ot69FAoXZ1yTnA9bjGohr2yNBU7QKRxpz8ITSkhuDl6h3zS/tvgz4qrNjeRnvrWeXQ8ZF7Um4W00Q==}
     engines: {node: ^18.0.0 || >=20.0.0}
     hasBin: true
 
@@ -2513,15 +2490,15 @@ packages:
       terser:
         optional: true
 
-  vitest@1.6.0:
-    resolution: {integrity: sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA==}
+  vitest@2.0.5:
+    resolution: {integrity: sha512-8GUxONfauuIdeSl5f9GTgVEpg5BTOlplET4WEDaeY2QBiN8wSm68vxN/tb5z405OwppfoCavnwXafiaYBC/xOA==}
     engines: {node: ^18.0.0 || >=20.0.0}
     hasBin: true
     peerDependencies:
       '@edge-runtime/vm': '*'
       '@types/node': ^18.0.0 || >=20.0.0
-      '@vitest/browser': 1.6.0
-      '@vitest/ui': 1.6.0
+      '@vitest/browser': 2.0.5
+      '@vitest/ui': 2.0.5
       happy-dom: '*'
       jsdom: '*'
     peerDependenciesMeta:
@@ -2538,8 +2515,8 @@ packages:
       jsdom:
         optional: true
 
-  vue-eslint-parser@9.4.2:
-    resolution: {integrity: sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==}
+  vue-eslint-parser@9.4.3:
+    resolution: {integrity: sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==}
     engines: {node: ^14.17.0 || >=16.0.0}
     peerDependencies:
       eslint: '>=6.0.0'
@@ -2549,8 +2526,8 @@ packages:
     engines: {node: '>= 8'}
     hasBin: true
 
-  why-is-node-running@2.2.2:
-    resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==}
+  why-is-node-running@2.3.0:
+    resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
     engines: {node: '>=8'}
     hasBin: true
 
@@ -2575,8 +2552,8 @@ packages:
   yallist@4.0.0:
     resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
 
-  yaml-eslint-parser@1.2.2:
-    resolution: {integrity: sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg==}
+  yaml-eslint-parser@1.2.3:
+    resolution: {integrity: sha512-4wZWvE398hCP7O8n3nXKu/vdq1HcH01ixYlCREaJL5NUMwQ0g3MaGFUBNSlmBtKmhbtVG/Cm6lyYmSVTEVil8A==}
     engines: {node: ^14.17.0 || >=16.0.0}
 
   yaml@2.3.3:
@@ -2608,43 +2585,48 @@ snapshots:
       '@jridgewell/gen-mapping': 0.1.1
       '@jridgewell/trace-mapping': 0.3.17
 
-  '@antfu/eslint-config@2.18.1(@vue/compiler-sfc@3.4.27)(eslint@8.57.0)(typescript@5.4.5)(vitest@1.6.0(@types/node@20.12.12))':
+  '@ampproject/remapping@2.3.0':
+    dependencies:
+      '@jridgewell/gen-mapping': 0.3.5
+      '@jridgewell/trace-mapping': 0.3.25
+
+  '@antfu/eslint-config@2.21.1(@vue/compiler-sfc@3.4.27)(eslint@8.57.0)(typescript@5.4.5)(vitest@2.0.5(@types/node@20.14.5))':
     dependencies:
       '@antfu/install-pkg': 0.3.3
       '@clack/prompts': 0.7.0
       '@stylistic/eslint-plugin': 2.1.0(eslint@8.57.0)(typescript@5.4.5)
-      '@typescript-eslint/eslint-plugin': 7.10.0(@typescript-eslint/parser@7.10.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)
-      '@typescript-eslint/parser': 7.10.0(eslint@8.57.0)(typescript@5.4.5)
+      '@typescript-eslint/eslint-plugin': 7.13.1(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)
+      '@typescript-eslint/parser': 7.13.1(eslint@8.57.0)(typescript@5.4.5)
       eslint: 8.57.0
       eslint-config-flat-gitignore: 0.1.5
       eslint-flat-config-utils: 0.2.5
       eslint-merge-processors: 0.1.0(eslint@8.57.0)
-      eslint-plugin-antfu: 2.2.0(eslint@8.57.0)
+      eslint-plugin-antfu: 2.3.3(eslint@8.57.0)
       eslint-plugin-command: 0.2.3(eslint@8.57.0)
       eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0)
-      eslint-plugin-import-x: 0.5.0(eslint@8.57.0)(typescript@5.4.5)
-      eslint-plugin-jsdoc: 48.2.6(eslint@8.57.0)
-      eslint-plugin-jsonc: 2.15.1(eslint@8.57.0)
+      eslint-plugin-import-x: 0.5.1(eslint@8.57.0)(typescript@5.4.5)
+      eslint-plugin-jsdoc: 48.2.12(eslint@8.57.0)
+      eslint-plugin-jsonc: 2.16.0(eslint@8.57.0)
       eslint-plugin-markdown: 5.0.0(eslint@8.57.0)
-      eslint-plugin-n: 17.7.0(eslint@8.57.0)
+      eslint-plugin-n: 17.9.0(eslint@8.57.0)
       eslint-plugin-no-only-tests: 3.1.0
-      eslint-plugin-perfectionist: 2.10.0(eslint@8.57.0)(typescript@5.4.5)(vue-eslint-parser@9.4.2(eslint@8.57.0))
+      eslint-plugin-perfectionist: 2.10.0(eslint@8.57.0)(typescript@5.4.5)(vue-eslint-parser@9.4.3(eslint@8.57.0))
       eslint-plugin-regexp: 2.6.0(eslint@8.57.0)
       eslint-plugin-toml: 0.11.0(eslint@8.57.0)
       eslint-plugin-unicorn: 53.0.0(eslint@8.57.0)
-      eslint-plugin-unused-imports: 3.2.0(@typescript-eslint/eslint-plugin@7.10.0(@typescript-eslint/parser@7.10.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)
-      eslint-plugin-vitest: 0.5.4(@typescript-eslint/eslint-plugin@7.10.0(@typescript-eslint/parser@7.10.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)(vitest@1.6.0(@types/node@20.12.12))
+      eslint-plugin-unused-imports: 3.2.0(@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)
+      eslint-plugin-vitest: 0.5.4(@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)(vitest@2.0.5(@types/node@20.14.5))
       eslint-plugin-vue: 9.26.0(eslint@8.57.0)
       eslint-plugin-yml: 1.14.0(eslint@8.57.0)
       eslint-processor-vue-blocks: 0.1.2(@vue/compiler-sfc@3.4.27)(eslint@8.57.0)
-      globals: 15.3.0
+      globals: 15.6.0
       jsonc-eslint-parser: 2.4.0
       local-pkg: 0.5.0
       parse-gitignore: 2.0.0
       picocolors: 1.0.1
       toml-eslint-parser: 0.9.3
-      vue-eslint-parser: 9.4.2(eslint@8.57.0)
-      yaml-eslint-parser: 1.2.2
+      vue-eslint-parser: 9.4.3(eslint@8.57.0)
+      yaml-eslint-parser: 1.2.3
       yargs: 17.7.2
     transitivePeerDependencies:
       - '@vue/compiler-sfc'
@@ -2723,7 +2705,7 @@ snapshots:
       '@babel/helper-module-imports': 7.22.15
       '@babel/helper-simple-access': 7.22.5
       '@babel/helper-split-export-declaration': 7.22.6
-      '@babel/helper-validator-identifier': 7.22.20
+      '@babel/helper-validator-identifier': 7.24.5
 
   '@babel/helper-simple-access@7.22.5':
     dependencies:
@@ -2751,7 +2733,7 @@ snapshots:
 
   '@babel/highlight@7.22.20':
     dependencies:
-      '@babel/helper-validator-identifier': 7.22.20
+      '@babel/helper-validator-identifier': 7.24.5
       chalk: 2.4.2
       js-tokens: 4.0.0
 
@@ -2803,11 +2785,11 @@ snapshots:
       picocolors: 1.0.1
       sisteransi: 1.0.5
 
-  '@es-joy/jsdoccomment@0.43.0':
+  '@es-joy/jsdoccomment@0.43.1':
     dependencies:
       '@types/eslint': 8.56.10
       '@types/estree': 1.0.5
-      '@typescript-eslint/types': 7.10.0
+      '@typescript-eslint/types': 7.13.1
       comment-parser: 1.4.1
       esquery: 1.5.0
       jsdoc-type-pratt-parser: 4.0.0
@@ -3042,7 +3024,7 @@ snapshots:
       debug: 4.3.4
       espree: 10.0.1
       globals: 14.0.0
-      ignore: 5.2.4
+      ignore: 5.3.1
       import-fresh: 3.3.0
       js-yaml: 4.1.0
       minimatch: 3.1.2
@@ -3064,10 +3046,6 @@ snapshots:
 
   '@humanwhocodes/object-schema@2.0.3': {}
 
-  '@jest/schemas@29.6.3':
-    dependencies:
-      '@sinclair/typebox': 0.27.8
-
   '@jridgewell/gen-mapping@0.1.1':
     dependencies:
       '@jridgewell/set-array': 1.1.2
@@ -3079,10 +3057,18 @@ snapshots:
       '@jridgewell/sourcemap-codec': 1.4.15
       '@jridgewell/trace-mapping': 0.3.17
 
+  '@jridgewell/gen-mapping@0.3.5':
+    dependencies:
+      '@jridgewell/set-array': 1.2.1
+      '@jridgewell/sourcemap-codec': 1.4.15
+      '@jridgewell/trace-mapping': 0.3.25
+
   '@jridgewell/resolve-uri@3.1.0': {}
 
   '@jridgewell/set-array@1.1.2': {}
 
+  '@jridgewell/set-array@1.2.1': {}
+
   '@jridgewell/sourcemap-codec@1.4.14': {}
 
   '@jridgewell/sourcemap-codec@1.4.15': {}
@@ -3092,6 +3078,11 @@ snapshots:
       '@jridgewell/resolve-uri': 3.1.0
       '@jridgewell/sourcemap-codec': 1.4.14
 
+  '@jridgewell/trace-mapping@0.3.25':
+    dependencies:
+      '@jridgewell/resolve-uri': 3.1.0
+      '@jridgewell/sourcemap-codec': 1.4.15
+
   '@jsdevtools/ez-spawn@3.0.4':
     dependencies:
       call-me-maybe: 1.0.1
@@ -3208,8 +3199,6 @@ snapshots:
   '@rollup/rollup-win32-x64-msvc@4.18.0':
     optional: true
 
-  '@sinclair/typebox@0.27.8': {}
-
   '@stylistic/eslint-plugin-js@2.1.0(eslint@8.57.0)':
     dependencies:
       '@types/eslint': 8.56.10
@@ -3229,7 +3218,7 @@ snapshots:
   '@stylistic/eslint-plugin-plus@2.1.0(eslint@8.57.0)(typescript@5.4.5)':
     dependencies:
       '@types/eslint': 8.56.10
-      '@typescript-eslint/utils': 7.10.0(eslint@8.57.0)(typescript@5.4.5)
+      '@typescript-eslint/utils': 7.13.1(eslint@8.57.0)(typescript@5.4.5)
       eslint: 8.57.0
     transitivePeerDependencies:
       - supports-color
@@ -3239,7 +3228,7 @@ snapshots:
     dependencies:
       '@stylistic/eslint-plugin-js': 2.1.0(eslint@8.57.0)
       '@types/eslint': 8.56.10
-      '@typescript-eslint/utils': 7.10.0(eslint@8.57.0)(typescript@5.4.5)
+      '@typescript-eslint/utils': 7.13.1(eslint@8.57.0)(typescript@5.4.5)
       eslint: 8.57.0
     transitivePeerDependencies:
       - supports-color
@@ -3259,7 +3248,7 @@ snapshots:
 
   '@types/eslint@8.56.10':
     dependencies:
-      '@types/estree': 1.0.0
+      '@types/estree': 1.0.5
       '@types/json-schema': 7.0.13
 
   '@types/estree@1.0.0': {}
@@ -3272,7 +3261,7 @@ snapshots:
     dependencies:
       '@types/unist': 2.0.8
 
-  '@types/node@20.12.12':
+  '@types/node@20.14.5':
     dependencies:
       undici-types: 5.26.5
 
@@ -3282,14 +3271,14 @@ snapshots:
 
   '@types/unist@2.0.8': {}
 
-  '@typescript-eslint/eslint-plugin@7.10.0(@typescript-eslint/parser@7.10.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)':
+  '@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)':
     dependencies:
       '@eslint-community/regexpp': 4.10.0
-      '@typescript-eslint/parser': 7.10.0(eslint@8.57.0)(typescript@5.4.5)
-      '@typescript-eslint/scope-manager': 7.10.0
-      '@typescript-eslint/type-utils': 7.10.0(eslint@8.57.0)(typescript@5.4.5)
-      '@typescript-eslint/utils': 7.10.0(eslint@8.57.0)(typescript@5.4.5)
-      '@typescript-eslint/visitor-keys': 7.10.0
+      '@typescript-eslint/parser': 7.13.1(eslint@8.57.0)(typescript@5.4.5)
+      '@typescript-eslint/scope-manager': 7.13.1
+      '@typescript-eslint/type-utils': 7.13.1(eslint@8.57.0)(typescript@5.4.5)
+      '@typescript-eslint/utils': 7.13.1(eslint@8.57.0)(typescript@5.4.5)
+      '@typescript-eslint/visitor-keys': 7.13.1
       eslint: 8.57.0
       graphemer: 1.4.0
       ignore: 5.3.1
@@ -3300,12 +3289,12 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/parser@7.10.0(eslint@8.57.0)(typescript@5.4.5)':
+  '@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.4.5)':
     dependencies:
-      '@typescript-eslint/scope-manager': 7.10.0
-      '@typescript-eslint/types': 7.10.0
-      '@typescript-eslint/typescript-estree': 7.10.0(typescript@5.4.5)
-      '@typescript-eslint/visitor-keys': 7.10.0
+      '@typescript-eslint/scope-manager': 7.13.1
+      '@typescript-eslint/types': 7.13.1
+      '@typescript-eslint/typescript-estree': 7.13.1(typescript@5.4.5)
+      '@typescript-eslint/visitor-keys': 7.13.1
       debug: 4.3.4
       eslint: 8.57.0
     optionalDependencies:
@@ -3313,15 +3302,15 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/scope-manager@7.10.0':
+  '@typescript-eslint/scope-manager@7.13.1':
     dependencies:
-      '@typescript-eslint/types': 7.10.0
-      '@typescript-eslint/visitor-keys': 7.10.0
+      '@typescript-eslint/types': 7.13.1
+      '@typescript-eslint/visitor-keys': 7.13.1
 
-  '@typescript-eslint/type-utils@7.10.0(eslint@8.57.0)(typescript@5.4.5)':
+  '@typescript-eslint/type-utils@7.13.1(eslint@8.57.0)(typescript@5.4.5)':
     dependencies:
-      '@typescript-eslint/typescript-estree': 7.10.0(typescript@5.4.5)
-      '@typescript-eslint/utils': 7.10.0(eslint@8.57.0)(typescript@5.4.5)
+      '@typescript-eslint/typescript-estree': 7.13.1(typescript@5.4.5)
+      '@typescript-eslint/utils': 7.13.1(eslint@8.57.0)(typescript@5.4.5)
       debug: 4.3.4
       eslint: 8.57.0
       ts-api-utils: 1.3.0(typescript@5.4.5)
@@ -3330,12 +3319,12 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/types@7.10.0': {}
+  '@typescript-eslint/types@7.13.1': {}
 
-  '@typescript-eslint/typescript-estree@7.10.0(typescript@5.4.5)':
+  '@typescript-eslint/typescript-estree@7.13.1(typescript@5.4.5)':
     dependencies:
-      '@typescript-eslint/types': 7.10.0
-      '@typescript-eslint/visitor-keys': 7.10.0
+      '@typescript-eslint/types': 7.13.1
+      '@typescript-eslint/visitor-keys': 7.13.1
       debug: 4.3.4
       globby: 11.1.0
       is-glob: 4.0.3
@@ -3347,52 +3336,56 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/utils@7.10.0(eslint@8.57.0)(typescript@5.4.5)':
+  '@typescript-eslint/utils@7.13.1(eslint@8.57.0)(typescript@5.4.5)':
     dependencies:
       '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
-      '@typescript-eslint/scope-manager': 7.10.0
-      '@typescript-eslint/types': 7.10.0
-      '@typescript-eslint/typescript-estree': 7.10.0(typescript@5.4.5)
+      '@typescript-eslint/scope-manager': 7.13.1
+      '@typescript-eslint/types': 7.13.1
+      '@typescript-eslint/typescript-estree': 7.13.1(typescript@5.4.5)
       eslint: 8.57.0
     transitivePeerDependencies:
       - supports-color
       - typescript
 
-  '@typescript-eslint/visitor-keys@7.10.0':
+  '@typescript-eslint/visitor-keys@7.13.1':
     dependencies:
-      '@typescript-eslint/types': 7.10.0
+      '@typescript-eslint/types': 7.13.1
       eslint-visitor-keys: 3.4.3
 
   '@ungap/structured-clone@1.2.0': {}
 
-  '@vitest/expect@1.6.0':
+  '@vitest/expect@2.0.5':
     dependencies:
-      '@vitest/spy': 1.6.0
-      '@vitest/utils': 1.6.0
-      chai: 4.3.10
+      '@vitest/spy': 2.0.5
+      '@vitest/utils': 2.0.5
+      chai: 5.1.1
+      tinyrainbow: 1.2.0
 
-  '@vitest/runner@1.6.0':
+  '@vitest/pretty-format@2.0.5':
     dependencies:
-      '@vitest/utils': 1.6.0
-      p-limit: 5.0.0
-      pathe: 1.1.1
+      tinyrainbow: 1.2.0
 
-  '@vitest/snapshot@1.6.0':
+  '@vitest/runner@2.0.5':
     dependencies:
-      magic-string: 0.30.5
-      pathe: 1.1.1
-      pretty-format: 29.7.0
+      '@vitest/utils': 2.0.5
+      pathe: 1.1.2
 
-  '@vitest/spy@1.6.0':
+  '@vitest/snapshot@2.0.5':
     dependencies:
-      tinyspy: 2.2.0
+      '@vitest/pretty-format': 2.0.5
+      magic-string: 0.30.10
+      pathe: 1.1.2
 
-  '@vitest/utils@1.6.0':
+  '@vitest/spy@2.0.5':
     dependencies:
-      diff-sequences: 29.6.3
+      tinyspy: 3.0.0
+
+  '@vitest/utils@2.0.5':
+    dependencies:
+      '@vitest/pretty-format': 2.0.5
       estree-walker: 3.0.3
-      loupe: 2.3.7
-      pretty-format: 29.7.0
+      loupe: 3.1.1
+      tinyrainbow: 1.2.0
 
   '@vue/compiler-core@3.4.27':
     dependencies:
@@ -3434,8 +3427,6 @@ snapshots:
     dependencies:
       acorn: 8.11.3
 
-  acorn-walk@8.3.2: {}
-
   acorn@8.10.0: {}
 
   acorn@8.11.3: {}
@@ -3457,8 +3448,6 @@ snapshots:
     dependencies:
       color-convert: 2.0.1
 
-  ansi-styles@5.2.0: {}
-
   anymatch@3.1.3:
     dependencies:
       normalize-path: 3.0.0
@@ -3470,7 +3459,7 @@ snapshots:
 
   array-union@2.1.0: {}
 
-  assertion-error@1.1.0: {}
+  assertion-error@2.0.1: {}
 
   balanced-match@1.0.2: {}
 
@@ -3543,15 +3532,13 @@ snapshots:
 
   caniuse-lite@1.0.30001621: {}
 
-  chai@4.3.10:
+  chai@5.1.1:
     dependencies:
-      assertion-error: 1.1.0
-      check-error: 1.0.3
-      deep-eql: 4.1.3
-      get-func-name: 2.0.2
-      loupe: 2.3.6
-      pathval: 1.1.1
-      type-detect: 4.0.8
+      assertion-error: 2.0.1
+      check-error: 2.1.1
+      deep-eql: 5.0.2
+      loupe: 3.1.1
+      pathval: 2.0.0
 
   chalk@2.4.2:
     dependencies:
@@ -3572,9 +3559,7 @@ snapshots:
 
   character-reference-invalid@1.1.4: {}
 
-  check-error@1.0.3:
-    dependencies:
-      get-func-name: 2.0.2
+  check-error@2.1.1: {}
 
   chokidar@3.6.0:
     dependencies:
@@ -3622,8 +3607,6 @@ snapshots:
 
   color-name@1.1.4: {}
 
-  comment-parser@1.4.0: {}
-
   comment-parser@1.4.1: {}
 
   commondir@1.0.1: {}
@@ -3656,9 +3639,11 @@ snapshots:
     dependencies:
       ms: 2.1.2
 
-  deep-eql@4.1.3:
+  debug@4.3.6:
     dependencies:
-      type-detect: 4.0.8
+      ms: 2.1.2
+
+  deep-eql@5.0.2: {}
 
   deep-is@0.1.4: {}
 
@@ -3670,8 +3655,6 @@ snapshots:
 
   destr@2.0.1: {}
 
-  diff-sequences@29.6.3: {}
-
   dir-glob@3.0.1:
     dependencies:
       path-type: 4.0.0
@@ -3688,7 +3671,7 @@ snapshots:
 
   emoji-regex@8.0.0: {}
 
-  enhanced-resolve@5.16.1:
+  enhanced-resolve@5.17.0:
     dependencies:
       graceful-fs: 4.2.10
       tapable: 2.2.1
@@ -3775,8 +3758,6 @@ snapshots:
       '@esbuild/win32-ia32': 0.20.2
       '@esbuild/win32-x64': 0.20.2
 
-  escalade@3.1.1: {}
-
   escalade@3.1.2: {}
 
   escape-string-regexp@1.0.5: {}
@@ -3786,7 +3767,7 @@ snapshots:
   eslint-compat-utils@0.5.0(eslint@8.57.0):
     dependencies:
       eslint: 8.57.0
-      semver: 7.5.4
+      semver: 7.6.2
 
   eslint-config-flat-gitignore@0.1.5:
     dependencies:
@@ -3810,20 +3791,20 @@ snapshots:
     dependencies:
       eslint: 8.57.0
 
-  eslint-plugin-antfu@2.2.0(eslint@8.57.0):
+  eslint-plugin-antfu@2.3.3(eslint@8.57.0):
     dependencies:
       '@antfu/utils': 0.7.8
       eslint: 8.57.0
 
   eslint-plugin-command@0.2.3(eslint@8.57.0):
     dependencies:
-      '@es-joy/jsdoccomment': 0.43.0
+      '@es-joy/jsdoccomment': 0.43.1
       eslint: 8.57.0
 
   eslint-plugin-es-x@7.6.0(eslint@8.57.0):
     dependencies:
       '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
-      '@eslint-community/regexpp': 4.9.1
+      '@eslint-community/regexpp': 4.10.0
       eslint: 8.57.0
       eslint-compat-utils: 0.5.0(eslint@8.57.0)
 
@@ -3831,11 +3812,11 @@ snapshots:
     dependencies:
       escape-string-regexp: 1.0.5
       eslint: 8.57.0
-      ignore: 5.2.4
+      ignore: 5.3.1
 
-  eslint-plugin-import-x@0.5.0(eslint@8.57.0)(typescript@5.4.5):
+  eslint-plugin-import-x@0.5.1(eslint@8.57.0)(typescript@5.4.5):
     dependencies:
-      '@typescript-eslint/utils': 7.10.0(eslint@8.57.0)(typescript@5.4.5)
+      '@typescript-eslint/utils': 7.13.1(eslint@8.57.0)(typescript@5.4.5)
       debug: 4.3.4
       doctrine: 3.0.0
       eslint: 8.57.0
@@ -3844,13 +3825,14 @@ snapshots:
       is-glob: 4.0.3
       minimatch: 9.0.4
       semver: 7.6.2
+      tslib: 2.6.2
     transitivePeerDependencies:
       - supports-color
       - typescript
 
-  eslint-plugin-jsdoc@48.2.6(eslint@8.57.0):
+  eslint-plugin-jsdoc@48.2.12(eslint@8.57.0):
     dependencies:
-      '@es-joy/jsdoccomment': 0.43.0
+      '@es-joy/jsdoccomment': 0.43.1
       are-docs-informative: 0.0.2
       comment-parser: 1.4.1
       debug: 4.3.4
@@ -3862,7 +3844,7 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  eslint-plugin-jsonc@2.15.1(eslint@8.57.0):
+  eslint-plugin-jsonc@2.16.0(eslint@8.57.0):
     dependencies:
       '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
       eslint: 8.57.0
@@ -3880,28 +3862,28 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  eslint-plugin-n@17.7.0(eslint@8.57.0):
+  eslint-plugin-n@17.9.0(eslint@8.57.0):
     dependencies:
       '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
-      enhanced-resolve: 5.16.1
+      enhanced-resolve: 5.17.0
       eslint: 8.57.0
       eslint-plugin-es-x: 7.6.0(eslint@8.57.0)
-      get-tsconfig: 4.7.2
-      globals: 15.3.0
-      ignore: 5.2.4
+      get-tsconfig: 4.7.5
+      globals: 15.6.0
+      ignore: 5.3.1
       minimatch: 9.0.4
-      semver: 7.5.4
+      semver: 7.6.2
 
   eslint-plugin-no-only-tests@3.1.0: {}
 
-  eslint-plugin-perfectionist@2.10.0(eslint@8.57.0)(typescript@5.4.5)(vue-eslint-parser@9.4.2(eslint@8.57.0)):
+  eslint-plugin-perfectionist@2.10.0(eslint@8.57.0)(typescript@5.4.5)(vue-eslint-parser@9.4.3(eslint@8.57.0)):
     dependencies:
-      '@typescript-eslint/utils': 7.10.0(eslint@8.57.0)(typescript@5.4.5)
+      '@typescript-eslint/utils': 7.13.1(eslint@8.57.0)(typescript@5.4.5)
       eslint: 8.57.0
       minimatch: 9.0.4
       natural-compare-lite: 1.4.0
     optionalDependencies:
-      vue-eslint-parser: 9.4.2(eslint@8.57.0)
+      vue-eslint-parser: 9.4.3(eslint@8.57.0)
     transitivePeerDependencies:
       - supports-color
       - typescript
@@ -3909,8 +3891,8 @@ snapshots:
   eslint-plugin-regexp@2.6.0(eslint@8.57.0):
     dependencies:
       '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
-      '@eslint-community/regexpp': 4.9.1
-      comment-parser: 1.4.0
+      '@eslint-community/regexpp': 4.10.0
+      comment-parser: 1.4.1
       eslint: 8.57.0
       jsdoc-type-pratt-parser: 4.0.0
       refa: 0.12.1
@@ -3949,20 +3931,20 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@7.10.0(@typescript-eslint/parser@7.10.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0):
+  eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0):
     dependencies:
       eslint: 8.57.0
       eslint-rule-composer: 0.3.0
     optionalDependencies:
-      '@typescript-eslint/eslint-plugin': 7.10.0(@typescript-eslint/parser@7.10.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)
+      '@typescript-eslint/eslint-plugin': 7.13.1(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)
 
-  eslint-plugin-vitest@0.5.4(@typescript-eslint/eslint-plugin@7.10.0(@typescript-eslint/parser@7.10.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)(vitest@1.6.0(@types/node@20.12.12)):
+  eslint-plugin-vitest@0.5.4(@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)(vitest@2.0.5(@types/node@20.14.5)):
     dependencies:
-      '@typescript-eslint/utils': 7.10.0(eslint@8.57.0)(typescript@5.4.5)
+      '@typescript-eslint/utils': 7.13.1(eslint@8.57.0)(typescript@5.4.5)
       eslint: 8.57.0
     optionalDependencies:
-      '@typescript-eslint/eslint-plugin': 7.10.0(@typescript-eslint/parser@7.10.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)
-      vitest: 1.6.0(@types/node@20.12.12)
+      '@typescript-eslint/eslint-plugin': 7.13.1(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)
+      vitest: 2.0.5(@types/node@20.14.5)
     transitivePeerDependencies:
       - supports-color
       - typescript
@@ -3976,7 +3958,7 @@ snapshots:
       nth-check: 2.1.1
       postcss-selector-parser: 6.1.0
       semver: 7.6.2
-      vue-eslint-parser: 9.4.2(eslint@8.57.0)
+      vue-eslint-parser: 9.4.3(eslint@8.57.0)
       xml-name-validator: 4.0.0
     transitivePeerDependencies:
       - supports-color
@@ -3988,7 +3970,7 @@ snapshots:
       eslint-compat-utils: 0.5.0(eslint@8.57.0)
       lodash: 4.17.21
       natural-compare: 1.4.0
-      yaml-eslint-parser: 1.2.2
+      yaml-eslint-parser: 1.2.3
     transitivePeerDependencies:
       - supports-color
 
@@ -4081,7 +4063,7 @@ snapshots:
 
   estree-walker@3.0.3:
     dependencies:
-      '@types/estree': 1.0.0
+      '@types/estree': 1.0.5
 
   esutils@2.0.3: {}
 
@@ -4182,10 +4164,6 @@ snapshots:
 
   get-stream@8.0.1: {}
 
-  get-tsconfig@4.7.2:
-    dependencies:
-      resolve-pkg-maps: 1.0.0
-
   get-tsconfig@4.7.5:
     dependencies:
       resolve-pkg-maps: 1.0.0
@@ -4238,14 +4216,14 @@ snapshots:
 
   globals@14.0.0: {}
 
-  globals@15.3.0: {}
+  globals@15.6.0: {}
 
   globby@11.1.0:
     dependencies:
       array-union: 2.1.0
       dir-glob: 3.0.1
-      fast-glob: 3.3.1
-      ignore: 5.2.4
+      fast-glob: 3.3.2
+      ignore: 5.3.1
       merge2: 1.4.1
       slash: 3.0.0
 
@@ -4348,8 +4326,6 @@ snapshots:
 
   js-tokens@4.0.0: {}
 
-  js-tokens@9.0.0: {}
-
   js-yaml@4.1.0:
     dependencies:
       argparse: 2.0.1
@@ -4374,10 +4350,10 @@ snapshots:
 
   jsonc-eslint-parser@2.4.0:
     dependencies:
-      acorn: 8.10.0
+      acorn: 8.11.3
       eslint-visitor-keys: 3.4.3
       espree: 9.6.1
-      semver: 7.5.4
+      semver: 7.6.2
 
   jsonc-parser@3.2.0: {}
 
@@ -4421,11 +4397,7 @@ snapshots:
 
   lodash@4.17.21: {}
 
-  loupe@2.3.6:
-    dependencies:
-      get-func-name: 2.0.2
-
-  loupe@2.3.7:
+  loupe@3.1.1:
     dependencies:
       get-func-name: 2.0.2
 
@@ -4433,10 +4405,6 @@ snapshots:
     dependencies:
       yallist: 3.1.1
 
-  lru-cache@6.0.0:
-    dependencies:
-      yallist: 4.0.0
-
   magic-string@0.27.0:
     dependencies:
       '@jridgewell/sourcemap-codec': 1.4.15
@@ -4606,10 +4574,6 @@ snapshots:
     dependencies:
       yocto-queue: 1.0.0
 
-  p-limit@5.0.0:
-    dependencies:
-      yocto-queue: 1.0.0
-
   p-locate@4.1.0:
     dependencies:
       p-limit: 2.3.0
@@ -4664,12 +4628,10 @@ snapshots:
 
   pathe@1.1.2: {}
 
-  pathval@1.1.1: {}
+  pathval@2.0.0: {}
 
   perfect-debounce@1.0.0: {}
 
-  picocolors@1.0.0: {}
-
   picocolors@1.0.1: {}
 
   picomatch@2.3.1: {}
@@ -4698,19 +4660,13 @@ snapshots:
   postcss@8.4.38:
     dependencies:
       nanoid: 3.3.7
-      picocolors: 1.0.0
+      picocolors: 1.0.1
       source-map-js: 1.2.0
 
   prelude-ls@1.2.1: {}
 
   pretty-bytes@6.1.1: {}
 
-  pretty-format@29.7.0:
-    dependencies:
-      '@jest/schemas': 29.6.3
-      ansi-styles: 5.2.0
-      react-is: 18.2.0
-
   prompts@2.4.2:
     dependencies:
       kleur: 3.0.3
@@ -4726,8 +4682,6 @@ snapshots:
       destr: 2.0.1
       flat: 5.0.2
 
-  react-is@18.2.0: {}
-
   read-pkg-up@7.0.1:
     dependencies:
       find-up: 4.1.0
@@ -4747,11 +4701,11 @@ snapshots:
 
   refa@0.12.1:
     dependencies:
-      '@eslint-community/regexpp': 4.9.1
+      '@eslint-community/regexpp': 4.10.0
 
   regexp-ast-analysis@0.7.1:
     dependencies:
-      '@eslint-community/regexpp': 4.9.1
+      '@eslint-community/regexpp': 4.10.0
       refa: 0.12.1
 
   regexp-tree@0.1.27: {}
@@ -4818,7 +4772,7 @@ snapshots:
 
   scslre@0.3.0:
     dependencies:
-      '@eslint-community/regexpp': 4.9.1
+      '@eslint-community/regexpp': 4.10.0
       refa: 0.12.1
       regexp-ast-analysis: 0.7.1
 
@@ -4828,10 +4782,6 @@ snapshots:
 
   semver@6.3.1: {}
 
-  semver@7.5.4:
-    dependencies:
-      lru-cache: 6.0.0
-
   semver@7.6.2: {}
 
   shebang-command@2.0.0:
@@ -4895,10 +4845,6 @@ snapshots:
 
   strip-json-comments@3.1.1: {}
 
-  strip-literal@2.1.0:
-    dependencies:
-      js-tokens: 9.0.0
-
   supports-color@5.5.0:
     dependencies:
       has-flag: 3.0.0
@@ -4928,9 +4874,11 @@ snapshots:
 
   tinybench@2.8.0: {}
 
-  tinypool@0.8.4: {}
+  tinypool@1.0.0: {}
+
+  tinyrainbow@1.2.0: {}
 
-  tinyspy@2.2.0: {}
+  tinyspy@3.0.0: {}
 
   to-fast-properties@2.0.0: {}
 
@@ -5030,14 +4978,14 @@ snapshots:
   update-browserslist-db@1.0.13(browserslist@4.22.1):
     dependencies:
       browserslist: 4.22.1
-      escalade: 3.1.1
-      picocolors: 1.0.0
+      escalade: 3.1.2
+      picocolors: 1.0.1
 
   update-browserslist-db@1.0.13(browserslist@4.23.0):
     dependencies:
       browserslist: 4.23.0
-      escalade: 3.1.1
-      picocolors: 1.0.0
+      escalade: 3.1.2
+      picocolors: 1.0.1
 
   uri-js@4.4.1:
     dependencies:
@@ -5050,13 +4998,13 @@ snapshots:
       spdx-correct: 3.2.0
       spdx-expression-parse: 3.0.1
 
-  vite-node@1.6.0(@types/node@20.12.12):
+  vite-node@2.0.5(@types/node@20.14.5):
     dependencies:
       cac: 6.7.14
-      debug: 4.3.4
-      pathe: 1.1.1
-      picocolors: 1.0.0
-      vite: 5.2.11(@types/node@20.12.12)
+      debug: 4.3.6
+      pathe: 1.1.2
+      tinyrainbow: 1.2.0
+      vite: 5.2.11(@types/node@20.14.5)
     transitivePeerDependencies:
       - '@types/node'
       - less
@@ -5067,39 +5015,38 @@ snapshots:
       - supports-color
       - terser
 
-  vite@5.2.11(@types/node@20.12.12):
+  vite@5.2.11(@types/node@20.14.5):
     dependencies:
       esbuild: 0.20.2
       postcss: 8.4.38
       rollup: 4.18.0
     optionalDependencies:
-      '@types/node': 20.12.12
+      '@types/node': 20.14.5
       fsevents: 2.3.3
 
-  vitest@1.6.0(@types/node@20.12.12):
-    dependencies:
-      '@vitest/expect': 1.6.0
-      '@vitest/runner': 1.6.0
-      '@vitest/snapshot': 1.6.0
-      '@vitest/spy': 1.6.0
-      '@vitest/utils': 1.6.0
-      acorn-walk: 8.3.2
-      chai: 4.3.10
-      debug: 4.3.4
+  vitest@2.0.5(@types/node@20.14.5):
+    dependencies:
+      '@ampproject/remapping': 2.3.0
+      '@vitest/expect': 2.0.5
+      '@vitest/pretty-format': 2.0.5
+      '@vitest/runner': 2.0.5
+      '@vitest/snapshot': 2.0.5
+      '@vitest/spy': 2.0.5
+      '@vitest/utils': 2.0.5
+      chai: 5.1.1
+      debug: 4.3.6
       execa: 8.0.1
-      local-pkg: 0.5.0
-      magic-string: 0.30.5
-      pathe: 1.1.1
-      picocolors: 1.0.0
+      magic-string: 0.30.10
+      pathe: 1.1.2
       std-env: 3.7.0
-      strip-literal: 2.1.0
       tinybench: 2.8.0
-      tinypool: 0.8.4
-      vite: 5.2.11(@types/node@20.12.12)
-      vite-node: 1.6.0(@types/node@20.12.12)
-      why-is-node-running: 2.2.2
+      tinypool: 1.0.0
+      tinyrainbow: 1.2.0
+      vite: 5.2.11(@types/node@20.14.5)
+      vite-node: 2.0.5(@types/node@20.14.5)
+      why-is-node-running: 2.3.0
     optionalDependencies:
-      '@types/node': 20.12.12
+      '@types/node': 20.14.5
     transitivePeerDependencies:
       - less
       - lightningcss
@@ -5109,7 +5056,7 @@ snapshots:
       - supports-color
       - terser
 
-  vue-eslint-parser@9.4.2(eslint@8.57.0):
+  vue-eslint-parser@9.4.3(eslint@8.57.0):
     dependencies:
       debug: 4.3.4
       eslint: 8.57.0
@@ -5118,7 +5065,7 @@ snapshots:
       espree: 9.6.1
       esquery: 1.5.0
       lodash: 4.17.21
-      semver: 7.5.4
+      semver: 7.6.2
     transitivePeerDependencies:
       - supports-color
 
@@ -5126,7 +5073,7 @@ snapshots:
     dependencies:
       isexe: 2.0.0
 
-  why-is-node-running@2.2.2:
+  why-is-node-running@2.3.0:
     dependencies:
       siginfo: 2.0.0
       stackback: 0.0.2
@@ -5147,7 +5094,7 @@ snapshots:
 
   yallist@4.0.0: {}
 
-  yaml-eslint-parser@1.2.2:
+  yaml-eslint-parser@1.2.3:
     dependencies:
       eslint-visitor-keys: 3.4.3
       lodash: 4.17.21
@@ -5160,7 +5107,7 @@ snapshots:
   yargs@17.7.2:
     dependencies:
       cliui: 8.0.1
-      escalade: 3.1.1
+      escalade: 3.1.2
       get-caller-file: 2.0.5
       require-directory: 2.1.1
       string-width: 4.2.3
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
deleted file mode 100644
index b6e39cd..0000000
--- a/pnpm-workspace.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-packages:
-  - playground
-  - examples/*
diff --git a/src/_constant.ts b/src/_constant.ts
deleted file mode 100644
index dfa867f..0000000
--- a/src/_constant.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-export const builtInPlatforms = [
-  'app',
-  'app-plus',
-  'h5',
-  'mp-360',
-  'mp-alipay',
-  'mp-baidu',
-  'mp-jd',
-  'mp-kuaishou',
-  'mp-lark',
-  'mp-qq',
-  'mp-toutiao',
-  'mp-weixin',
-  'quickapp-webview',
-  'quickapp-webview-huawei',
-  'quickapp-webview-union',
-] as const
diff --git a/src/compiler.ts b/src/compiler.ts
deleted file mode 100644
index a0d9673..0000000
--- a/src/compiler.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { env } from 'std-env'
-
-/** Value of `process.env.UNI_COMPILER` */
-export const compiler = env.UNI_COMPILER as 'vue' | 'nvue'
-
-/** Value of `process.env.UNI_NVUE_COMPILER` */
-export const nvueCompiler = env.UNI_NVUE_COMPILER as
-  | 'uni-app'
-  | 'vue'
-  | undefined
-
-/** Value of `process.env.UNI_NVUE_STYLE_COMPILER` */
-export const nvueStyleCompiler = env.UNI_NVUE_STYLE_COMPILER as
-  | 'uni-app'
-  | undefined
-
-/** Value of `process.env.UNI_COMPILER_VERSION` */
-export const compilerVersion = env.UNI_COMPILER_VERSION as string
-
-/** Value of `process.env.UNI_COMPILER_VERSION_TYPE` */
-export const compilerVersionType = env.UNI_COMPILER_VERSION_TYPE as
-  | 'a'
-  | 'r'
diff --git a/src/const.ts b/src/const.ts
deleted file mode 100644
index 9914e0f..0000000
--- a/src/const.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-import { env } from 'std-env'
-import { parseJSON } from './_utils'
-
-/** Value of `process.env.UNI_CLI_CONTEXT` */
-export const cliContext = env.UNI_CLI_CONTEXT as string
-
-/** Value of `process.env.UNI_INPUT_DIR` */
-export const inputDir = env.UNI_INPUT_DIR as string
-
-/** Value of `process.env.UNI_OUTPUT_DIR` */
-export const outputDir = env.UNI_OUTPUT_DIR as string
-
-/** Value of `process.env.STAT_TITLE_JSON` */
-export const statTitleJson = parseJSON<Record<string, string>>(
-  env.STAT_TITLE_JSON,
-)
-
-/** Value of `process.env.UNI_CUSTOM_CONTEXT` */
-export const customContext = env.UNI_CUSTOM_CONTEXT
-
-/** Value of `process.env.UNI_CUSTOM_SCRIPT` */
-export const customScript = env.UNI_CUSTOM_SCRIPT
-
-/** Value of `process.env.UNI_CUSTOM_DEFINE` */
-export const customDefine = env.UNI_CUSTOM_DEFINE
-
-/** Value of `process.env.UNI_SUBPACKAGE` */
-export const subpackage = env.UNI_SUBPACKAGE
-/** Value of `process.env.UNI_RENDERER` */
-export const renderer = env.UNI_RENDERER as 'native' | undefined
-
-/** Value of `process.env.UNI_RENDERER_NATIVE` */
-export const rendererNative = env.UNI_RENDERER_NATIVE as
-  | 'appService'
-  | 'pages'
-  | undefined
diff --git a/src/flags.ts b/src/flags.ts
deleted file mode 100644
index 54b9af7..0000000
--- a/src/flags.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import { env } from 'std-env'
-import { toBoolean } from './_utils'
-
-/** Detect if `VUE_APP_DARK_MODE` environment variable is set */
-export const hasDarkMode = toBoolean(env.VUE_APP_DARK_MODE)
-
-/** Detect if `SOURCEMAP` environment variable is set */
-export const hasSourcemap = toBoolean(env.SOURCEMAP)
-
-/** Detect if `UNI_MP_PLUGIN` environment variable is set */
-export const isMpPlugin = toBoolean(env.UNI_MP_PLUGIN)
-/** Detect if `UNI_MINIMIZE` environment variable is set */
-export const isMinimize = toBoolean(env.UNI_MINIMIZE)
-
-/** Detect if `UNI_SSR_CLIENT` environment variable is set  */
-export const isSSRClient = toBoolean(env.UNI_SSR_CLIENT)
-
-/** Detect if `UNI_SSR_SERVER` environment variable is set  */
-export const isSSRServer = toBoolean(env.UNI_SSR_SERVER)
diff --git a/src/index.ts b/src/index.ts
index ed10b2d..b766294 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,5 +1,544 @@
-export * from './platform'
-export * from './flags'
-export * from './compiler'
-export * from './const'
-export * from './types'
+import { env } from 'std-env'
+import { parseJSON, toBoolean } from './utils'
+
+export type OptionalBooleanString = 'true' | 'false' | undefined
+export type OptionalString = string | undefined
+
+/**
+ * `process.env.UNI_PLATFORM`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L9}
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-uni-app.d.ts#L24}
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-uni-app.d.ts#L192-L209}
+ */
+export type BuiltInPlatform = 'h5' | 'web' | 'app' | 'app-plus' | 'mp-360' | 'mp-alipay' | 'mp-baidu' | 'mp-qq' | 'mp-toutiao' | 'mp-weixin' | 'mp-kuaishou' | 'mp-lark' | 'mp-jd' | 'mp-xhs' | 'quickapp-webview' | 'quickapp-webview-huawei' | 'quickapp-webview-union'
+
+export const builtInPlatforms = ['h5', 'web', 'app', 'app-plus', 'mp-360', 'mp-alipay', 'mp-baidu', 'mp-qq', 'mp-toutiao', 'mp-weixin', 'mp-kuaishou', 'mp-lark', 'mp-jd', 'mp-xhs', 'quickapp-webview', 'quickapp-webview-huawei', 'quickapp-webview-union'] as BuiltInPlatform[]
+
+/**
+ * `process.env.UNI_PLATFORM`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L9}
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-uni-app.d.ts#L24}
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-uni-app.d.ts#L192-L209}
+ */
+export const platform = env.UNI_PLATFORM as BuiltInPlatform
+
+/**
+ * `process.env.UNI_APP_PLATFORM`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L10}
+ */
+export type AppPlatform = 'android' | 'ios' | undefined
+
+/**
+ * `process.env.UNI_APP_PLATFORM`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L10}
+ */
+export const appPlatform = env.UNI_APP_PLATFORM as AppPlatform
+
+/**
+ * `process.env.UNI_SUB_PLATFORM`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L11}
+ */
+export type SubPlatform = 'quickapp-webview-huawei' | 'quickapp-webview-union' | undefined
+
+/**
+ * `process.env.UNI_SUB_PLATFORM`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L11}
+ */
+export const subPlatform = env.UNI_SUB_PLATFORM as SubPlatform
+
+/**
+ * `process.env.UNI_UTS_PLATFORM`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L12}
+ */
+export type UtsPlatform = BuiltInPlatform | 'app-android' | 'app-ios' | 'web'
+
+/**
+ * `process.env.UNI_UTS_PLATFORM`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L12}
+ */
+export const utsPlatform = env.UNI_UTS_PLATFORM as UtsPlatform
+
+/** Detect if `process.env.UNI_PLATFORM` is `h5` */
+export const isH5 = platform === 'h5'
+
+/** Detect if `process.env.UNI_PLATFORM` is `web` */
+export const isWeb = platform === 'web'
+
+/** Detect if `process.env.UNI_PLATFORM` is `app` */
+export const isApp = platform === 'app'
+
+/** Detect if `process.env.UNI_PLATFORM` is `app-plus` */
+export const isAppPlus = platform === 'app-plus'
+
+/** Detect if `process.env.UNI_APP_PLATFORM` is `android` or if `process.env.UNI_UTS_PLATFORM` is `app-android` */
+export const isAppAndroid = appPlatform === 'android' || utsPlatform === 'app-android'
+
+/** Detect if `process.env.UNI_APP_PLATFORM` is `ios` or if `process.env.UNI_UTS_PLATFORM` is `app-ios` */
+export const isAppIOS = appPlatform === 'ios' || utsPlatform === 'app-ios'
+
+/** Detect if `process.env.UNI_PLATFORM` is `mp-*` */
+export const isMp = /^mp-/i.test(platform)
+
+/** Detect if `process.env.UNI_PLATFORM` is `mp-weixin` */
+export const isMpWeixin = platform === 'mp-weixin'
+
+/** Detect if `process.env.UNI_PLATFORM` is `mp-alipay` */
+export const isMpAlipay = platform === 'mp-alipay'
+
+/** Detect if `process.env.UNI_PLATFORM` is `mp-baidu` */
+export const isMpBaidu = platform === 'mp-baidu'
+
+/** Detect if `process.env.UNI_PLATFORM` is `mp-kuaishou` */
+export const isMpKuaishou = platform === 'mp-kuaishou'
+
+/** Detect if `process.env.UNI_PLATFORM` is `mp-qq` */
+export const isMpQQ = platform === 'mp-qq'
+
+/** Detect if `process.env.UNI_PLATFORM` is `mp-toutiao` */
+export const isMpToutiao = platform === 'mp-toutiao'
+
+/** Detect if `process.env.UNI_PLATFORM` is `quickapp-webview*` */
+export const isQuickapp = /^quickapp-webview/i.test(platform)
+
+/** Detect if `process.env.UNI_PLATFORM` is `quickapp-webview-union` */
+export const isQuickappUnion = platform === 'quickapp-webview-union'
+
+/** Detect if `process.env.UNI_PLATFORM` is `quickapp-webview-huawei` */
+export const isQuickappHuawei = platform === 'quickapp-webview-huawei'
+
+/**
+ * `process.env.UNI_UTS_JS_CODE_FORMAT`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L14}
+ */
+export type UtsJsCodeFormat = 'cjs' | 'es' | undefined
+
+/**
+ * `process.env.UNI_UTS_JS_CODE_FORMAT`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L14}
+ */
+export const utsJsCodeFormat = env.UNI_UTS_JS_CODE_FORMAT as UtsJsCodeFormat
+
+/**
+ * `process.env.UNI_UTS_MODULE_TYPE`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L15}
+ */
+export type UtsModuleType = 'built-in' | '' | undefined
+
+/**
+ * `process.env.UNI_UTS_MODULE_TYPE`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L15}
+ */
+export const utsModuleType = env.UNI_UTS_MODULE_TYPE as UtsModuleType
+
+/**
+ * `process.env.UNI_UTS_MODULE_PREFIX`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L16}
+ */
+export const utsModulePrefix = env.UNI_UTS_MODULE_PREFIX as OptionalString
+
+/**
+ * `process.env.UNI_UTS_TARGET_LANGUAGE`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L17}
+ */
+export type UtsTargetLanguage = 'javascript' | 'kotlin' | 'swift' | undefined
+
+/**
+ * `process.env.UNI_UTS_TARGET_LANGUAGE`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L17}
+ */
+export const utsTargetLanguage = env.UNI_UTS_TARGET_LANGUAGE as UtsTargetLanguage
+
+/**
+ * `process.env.UNI_INPUT_DIR`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L19}
+ */
+export const inputDir = env.UNI_INPUT_DIR as OptionalString
+
+/**
+ * `process.env.UNI_OUTPUT_DIR`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L20}
+ */
+export const outputDir = env.UNI_OUTPUT_DIR as OptionalString
+
+/**
+ * `process.env.UNI_CLI_CONTEXT`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L21}
+ */
+export const cliContext = env.UNI_CLI_CONTEXT as OptionalString
+
+/**
+ * `process.env.UNI_SUBPACKAGE`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L22}
+ */
+export const subpackage = env.UNI_SUBPACKAGE as OptionalString
+
+/**
+ * `process.env.UNI_MP_PLUGIN`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L23}
+ */
+export const mpPlugin = env.UNI_MP_PLUGIN as OptionalBooleanString
+
+/** Detect if `process.env.UNI_MP_PLUGIN` is set */
+export const isMpPlugin = toBoolean(env.UNI_MP_PLUGIN)
+
+/**
+ * `process.env.UNI_COMPILER_VERSION`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L24}
+ */
+export const compilerVersion = env.UNI_COMPILER_VERSION as OptionalString
+
+/**
+ * `process.env.UNI_COMPILER_VERSION`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L25}
+ */
+export type CompilerVersionType = 'a' | 'r' | undefined
+
+/**
+ * `process.env.UNI_COMPILER_VERSION`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L25}
+ */
+export const compilerVersionType = env.UNI_COMPILER_VERSION_TYPE as CompilerVersionType
+
+/**
+ * `process.env.UNI_HBUILDERX_PLUGINS`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L26}
+ */
+export const hbuilderxPlugins = env.UNI_HBUILDERX_PLUGINS as OptionalString
+
+/**
+ * `process.env.UNI_RENDERER`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L27}
+ */
+export type Renderer = 'native' | undefined
+
+/**
+ * `process.env.UNI_RENDERER`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L27}
+ */
+export const renderer = env.UNI_RENDERER as Renderer
+
+/**
+ * `process.env.UNI_NVUE_COMPILER`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L28}
+ */
+export type NVueCompiler = 'uni-app' | 'weex' | 'vue' | 'vite' | undefined
+
+/**
+ * `process.env.UNI_NVUE_COMPILER`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L28}
+ */
+export const nvueCompiler = env.UNI_NVUE_COMPILER as NVueCompiler
+
+/**
+ * `process.env.UNI_NVUE_STYLE_COMPILER`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L29}
+ */
+export type NVueStyleCompiler = 'uni-app' | 'weex' | undefined
+
+/**
+ * `process.env.UNI_NVUE_STYLE_COMPILER`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L29}
+ */
+export const nvueStyleCompiler = env.UNI_NVUE_STYLE_COMPILER as NVueStyleCompiler
+
+/**
+ * `process.env.UNI_APP_CODE_SPLITING`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L30}
+ */
+export const appCodeSpliting = env.UNI_APP_CODE_SPLITING as OptionalBooleanString
+
+/**
+ * `process.env.UNI_AUTOMATOR_WS_ENDPOINT`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L31}
+ */
+export const automatorWsEndpoint = env.UNI_AUTOMATOR_WS_ENDPOINT as OptionalString
+
+/**
+ * `process.env.UNI_AUTOMATOR_APP_WEBVIEW`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L32}
+ */
+export const automatorAppWebview = env.UNI_AUTOMATOR_APP_WEBVIEW as OptionalString
+
+/**
+ * `process.env.UNI_AUTOMATOR_APP_WEBVIEW_SRC`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L33}
+ */
+export const automatorAppWebviewSrc = env.UNI_AUTOMATOR_APP_WEBVIEW_SRC as OptionalString
+
+/**
+ * `process.env.UNI_H5_BASE`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L34}
+ */
+export const h5Base = env.UNI_H5_BASE as OptionalString
+
+/**
+ * `process.env.UNI_H5_BROWSER`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L35}
+ */
+export type H5Browser = 'builtin' | undefined
+
+/**
+ * `process.env.UNI_H5_BROWSER`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L35}
+ */
+export const h5Browser = env.UNI_H5_BROWSER as H5Browser
+
+/**
+ * `process.env.UNI_CUSTOM_SCRIPT`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L36}
+ */
+export const customScript = env.UNI_CUSTOM_SCRIPT as OptionalString
+
+/**
+ * `process.env.UNI_CUSTOM_DEFINE`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L37}
+ */
+export const customDefine = env.UNI_CUSTOM_DEFINE as OptionalString
+
+/**
+ * `process.env.UNI_CUSTOM_CONTEXT`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L38}
+ */
+export const customContext = env.UNI_CUSTOM_CONTEXT as OptionalString
+
+/**
+ * `process.env.UNI_MINIMIZE`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L39}
+ */
+export const minimize = env.UNI_MINIMIZE as OptionalBooleanString
+
+/** Detect if `process.env.UNI_MINIMIZE` is set */
+export const isMinimize = toBoolean(env.UNI_MINIMIZE)
+
+/**
+ * `process.env.UNI_UVUE`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L40}
+ */
+export const uvue = env.UNI_UVUE as OptionalBooleanString
+
+/** Detect if `process.env.UNI_UVUE` is set */
+export const isUVue = toBoolean(env.UNI_MINIMIZE)
+
+/**
+ * `process.env.UNI_UVUE_TARGET_LANGUAGE`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L41}
+ */
+export type UVueTargetLanguage = 'kotlin' | 'swift' | 'javascript' | undefined
+
+/**
+ * `process.env.UNI_UVUE_TARGET_LANGUAGE`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L41}
+ */
+export const uvueTargetLanguage = env.UNI_UVUE_TARGET_LANGUAGE as UVueTargetLanguage
+
+/**
+ * `process.env.UNI_COMPILER`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L42}
+ */
+export type Compiler = 'vue' | 'nvue' | undefined
+
+/**
+ * `process.env.UNI_COMPILER`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L42}
+ */
+export const compiler = env.UNI_COMPILER as Compiler
+
+/**
+ * `process.env.UNI_RENDERER_NATIVE`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L43}
+ */
+export type RendererNative = 'appService' | 'pages' | undefined
+
+/**
+ * `process.env.UNI_RENDERER_NATIVE`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L43}
+ */
+export const rendererNative = env.UNI_RENDERER_NATIVE as RendererNative
+
+/**
+ * `process.env.UNI_NVUE_APP_STYLES`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L44}
+ */
+export const nvueAppStyles = env.UNI_NVUE_APP_STYLES as OptionalString
+
+/**
+ * `process.env.UNI_APP_CHANGED_FILES`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L45}
+ */
+export const appChangedFiles = env.UNI_APP_CHANGED_FILES as OptionalString
+
+/**
+ * `process.env.UNI_APP_CHANGED_PAGES`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L46}
+ */
+export const appChangedPages = env.UNI_APP_CHANGED_PAGES as OptionalString
+
+/**
+ * `process.env.VUE_APP_DARK_MODE`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L47}
+ */
+export const darkMode = env.VUE_APP_DARK_MODE as OptionalBooleanString
+
+/** Detect if `process.env.VUE_APP_DARK_MODE` is set */
+export const hasDarkMode = toBoolean(env.VUE_APP_DARK_MODE)
+
+/**
+ * `process.env.HX_USE_BASE_TYPE`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L48}
+ */
+export type HxUseBaseType = 'standard' | 'custom' | undefined
+
+/**
+ * `process.env.HX_USE_BASE_TYPE`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L48}
+ */
+export const hxUseBaseType = env.HX_USE_BASE_TYPE as HxUseBaseType
+
+/**
+ * `process.env.HX_DEPENDENCIES_DIR`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L49}
+ */
+export const hxDependenciesDir = env.HX_DEPENDENCIES_DIR as OptionalString
+
+/**
+ * `process.env.UNI_APP_X`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L55}
+ */
+export const appX = env.UNI_APP_X as OptionalBooleanString
+
+/** Detect if `process.env.UNI_APP_X` is set */
+export const isAppX = toBoolean(env.UNI_APP_X)
+
+/**
+ * `process.env.UNI_APP_X_CACHE_DIR`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L56}
+ */
+export const appXCacheDir = env.UNI_APP_X_CACHE_DIR as OptionalString
+
+/**
+ * `process.env.HX_VERSION`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L58}
+ */
+export const hxVersion = env.HX_VERSION as OptionalString
+
+/**
+ * `process.env.UNI_APP_X_PAGE_COUNT`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L60}
+ */
+export const appXPageCount = env.UNI_APP_X_PAGE_COUNT as OptionalString
+
+/**
+ * `process.env.UNI_APP_X_TSC`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L61}
+ */
+export const appXTsc = env.UNI_APP_X_TSC as OptionalString
+
+/**
+ * `process.env.UNI_APP_X_SINGLE_THREAD`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L62}
+ */
+export const appXSingleThread = env.UNI_APP_X_SINGLE_THREAD as OptionalString
+
+/**
+ * `process.env.UNI_APP_X_SETUP`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L63}
+ */
+export const appXSetup = env.UNI_APP_X_SETUP as OptionalString
+
+/**
+ * `process.env.UNI_APP_X_UVUE_SCRIPT_ENGINE`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L64}
+ */
+export type AppXUVueScriptEngine = 'native' | 'js' | undefined
+
+/**
+ * `process.env.UNI_APP_X_UVUE_SCRIPT_ENGINE`
+ *
+ * @link {https://github.com/dcloudio/uni-app/blob/v3.0.0-4010520240507001/packages/shims-node.d.ts#L64}
+ */
+export const appXUVueScriptEngine = env.UNI_APP_X_UVUE_SCRIPT_ENGINE as AppXUVueScriptEngine
+
+// Extra
+/** `process.env.STAT_TITLE_JSON` */
+export const statTitleJson = parseJSON<Record<string, string>>(env.STAT_TITLE_JSON)
+
+/** `process.env.SOURCEMAP` */
+export const sourcemap = env.SOURCEMAP as OptionalBooleanString
+
+/** Detect if `process.env.SOURCEMAP` is set */
+export const hasSourcemap = toBoolean(env.SOURCEMAP)
+
+/** `process.env.UNI_SSR_CLIENT` */
+export const ssrClient = env.UNI_SSR_CLIENT as OptionalBooleanString
+
+/** Detect if `process.env.UNI_SSR_CLIENT` is set  */
+export const isSSRClient = toBoolean(env.UNI_SSR_CLIENT)
+
+/** `process.env.UNI_SSR_SERVER` */
+export const ssrServer = env.UNI_SSR_SERVER as OptionalBooleanString
+
+/** Detect if `process.env.UNI_SSR_SERVER` is set  */
+export const isSSRServer = toBoolean(env.UNI_SSR_SERVER)
diff --git a/src/platform.ts b/src/platform.ts
deleted file mode 100644
index 88a3bdf..0000000
--- a/src/platform.ts
+++ /dev/null
@@ -1,58 +0,0 @@
-import { env } from 'std-env'
-import type { AppPlatform, BuiltInPlatForm, SubPlatform, UtsPlatform } from './types'
-
-export { builtInPlatforms } from './_constant'
-
-/** Value of `process.env.UNI_PLATFORM` */
-export const platform = env.UNI_PLATFORM as BuiltInPlatForm
-
-/** Value of `process.env.UNI_UTS_PLATFORM` */
-export const utsPlatform = env.UNI_UTS_PLATFORM as UtsPlatform
-
-/** Value of `process.env.UNI_APP_PLATFORM` */
-export const appPlatform = env.UNI_APP_PLATFORM as AppPlatform
-
-/** Value of `process.env.UNI_SUB_PLATFORM` */
-export const subPlatform = env.UNI_SUB_PLATFORM as SubPlatform
-
-/** Detect if `process.env.UNI_PLATFORM` is `H5` */
-export const isH5 = platform === 'h5'
-
-/** Detect if `process.env.UNI_PLATFORM` is `APP` */
-export const isApp = platform === 'app'
-
-/** Detect if `process.env.UNI_APP_PLATFORM` is `android` or if `process.env.UNI_UTS_PLATFORM` is "app-android" */
-export const isAppAndroid = appPlatform === 'android' || utsPlatform === 'app-android'
-
-/** Detect if `process.env.UNI_APP_PLATFORM` is `ios` or if `process.env.UNI_UTS_PLATFORM` is "app-ios" */
-export const isAppIOS = appPlatform === 'ios' || utsPlatform === 'app-ios'
-
-/** Detect if `process.env.UNI_PLATFORM` is `小程序` */
-export const isMp = /^mp-/i.test(platform)
-
-/** Detect if `process.env.UNI_PLATFORM` is `微信小程序` */
-export const isMpWeixin = platform === 'mp-weixin'
-
-/** Detect if `process.env.UNI_PLATFORM` is `支付宝小程序` */
-export const isMpAlipay = platform === 'mp-alipay'
-
-/** Detect if `process.env.UNI_PLATFORM` is `百度小程序` */
-export const isMpBaidu = platform === 'mp-baidu'
-
-/** Detect if `process.env.UNI_PLATFORM` is `快手小程序` */
-export const isMpKuaishou = platform === 'mp-kuaishou'
-
-/** Detect if `process.env.UNI_PLATFORM` is `QQ小程序` */
-export const isMpQQ = platform === 'mp-qq'
-
-/** Detect if `process.env.UNI_PLATFORM` is `头条小程序` */
-export const isMpToutiao = platform === 'mp-toutiao'
-
-/** Detect if `process.env.UNI_PLATFORM` is `快应用` */
-export const isQuickapp = /^quickapp-webview/i.test(platform)
-
-/** Detect if `process.env.UNI_PLATFORM` is `快应用联盟` */
-export const isQuickappUnion = platform === 'quickapp-webview-union'
-
-/** Detect if `process.env.UNI_PLATFORM` is `快应用华为` */
-export const isQuickappHuawei = platform === 'quickapp-webview-huawei'
diff --git a/src/types.ts b/src/types.ts
deleted file mode 100644
index 568e3ea..0000000
--- a/src/types.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import type { builtInPlatforms } from './_constant'
-
-export type BuiltInPlatForm = typeof builtInPlatforms[number]
-
-export type UtsPlatform = BuiltInPlatForm
-  | 'app-android'
-  | 'app-ios'
-  | 'web'
-export type AppPlatform = 'android'
-  | 'ios'
-  | undefined
-export type SubPlatform =
-  'quickapp-webview-huawei'
-  | 'quickapp-webview-union'
-  | undefined
diff --git a/src/_utils.ts b/src/utils.ts
similarity index 100%
rename from src/_utils.ts
rename to src/utils.ts
diff --git a/test/index.test.ts b/test/index.test.ts
index 1dcd4a1..c0c4a0a 100644
--- a/test/index.test.ts
+++ b/test/index.test.ts
@@ -7,11 +7,13 @@ describe('uni-env', () => {
       [
         "builtInPlatforms",
         "platform",
-        "utsPlatform",
         "appPlatform",
         "subPlatform",
+        "utsPlatform",
         "isH5",
+        "isWeb",
         "isApp",
+        "isAppPlus",
         "isAppAndroid",
         "isAppIOS",
         "isMp",
@@ -24,27 +26,61 @@ describe('uni-env', () => {
         "isQuickapp",
         "isQuickappUnion",
         "isQuickappHuawei",
-        "hasDarkMode",
-        "hasSourcemap",
+        "utsJsCodeFormat",
+        "utsModuleType",
+        "utsModulePrefix",
+        "utsTargetLanguage",
+        "inputDir",
+        "outputDir",
+        "cliContext",
+        "subpackage",
+        "mpPlugin",
         "isMpPlugin",
-        "isMinimize",
-        "isSSRClient",
-        "isSSRServer",
-        "compiler",
-        "nvueCompiler",
-        "nvueStyleCompiler",
         "compilerVersion",
         "compilerVersionType",
-        "cliContext",
-        "inputDir",
-        "outputDir",
-        "statTitleJson",
-        "customContext",
+        "hbuilderxPlugins",
+        "renderer",
+        "nvueCompiler",
+        "nvueStyleCompiler",
+        "appCodeSpliting",
+        "automatorWsEndpoint",
+        "automatorAppWebview",
+        "automatorAppWebviewSrc",
+        "h5Base",
+        "h5Browser",
         "customScript",
         "customDefine",
-        "subpackage",
-        "renderer",
+        "customContext",
+        "minimize",
+        "isMinimize",
+        "uvue",
+        "isUVue",
+        "uvueTargetLanguage",
+        "compiler",
         "rendererNative",
+        "nvueAppStyles",
+        "appChangedFiles",
+        "appChangedPages",
+        "darkMode",
+        "hasDarkMode",
+        "hxUseBaseType",
+        "hxDependenciesDir",
+        "appX",
+        "isAppX",
+        "appXCacheDir",
+        "hxVersion",
+        "appXPageCount",
+        "appXTsc",
+        "appXSingleThread",
+        "appXSetup",
+        "appXUVueScriptEngine",
+        "statTitleJson",
+        "sourcemap",
+        "hasSourcemap",
+        "ssrClient",
+        "isSSRClient",
+        "ssrServer",
+        "isSSRServer",
       ]
     `)
   })
diff --git a/tsconfig.json b/tsconfig.json
index 98b3818..3f5fd5e 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,9 +1,9 @@
 {
   "compilerOptions": {
-    "target": "es2018",
+    "target": "esnext",
     "lib": ["esnext"],
     "module": "esnext",
-    "moduleResolution": "node",
+    "moduleResolution": "Bundler",
     "resolveJsonModule": true,
     "strict": true,
     "strictNullChecks": true,