From e5380b3ec61e400c7fe1a2053c04fad0a198fe16 Mon Sep 17 00:00:00 2001 From: Nex Date: Tue, 24 Oct 2023 14:28:22 +0800 Subject: [PATCH] feat: add vue-i18n and Vue Macros --- .fes.js | 20 +- README.md | 2 +- locales/README.md | 7 + locales/en.yml | 1 + locales/zh-CN.yml | 1 + package.json | 7 +- pnpm-lock.yaml | 1142 +++++++++++++++++++++++++++++------ src/app.tsx | 9 +- src/modules/README.md | 11 + src/modules/i18n.ts | 58 ++ src/modules/pinia.ts | 10 + src/pages/home.vue | 18 +- src/types.ts | 3 + src/types/auto-imports.d.ts | 576 ++++++++++++++++++ tsconfig.json | 16 +- 15 files changed, 1690 insertions(+), 191 deletions(-) create mode 100644 locales/README.md create mode 100644 locales/en.yml create mode 100644 locales/zh-CN.yml create mode 100644 src/modules/README.md create mode 100644 src/modules/i18n.ts create mode 100644 src/modules/pinia.ts create mode 100644 src/types.ts diff --git a/.fes.js b/.fes.js index cfb1cb7..237c78b 100644 --- a/.fes.js +++ b/.fes.js @@ -1,12 +1,14 @@ import path from 'node:path' +import VueI18n from '@intlify/unplugin-vue-i18n/vite' import Unocss from '@unocss/vite' import AutoImport from 'unplugin-auto-import/vite' import ElementPlus from 'unplugin-element-plus/vite' import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' import Components from 'unplugin-vue-components/vite' +import VueMacros from 'unplugin-vue-macros/vite' +// import VueDevTools from 'vite-plugin-vue-devtools' import Inspect from 'vite-plugin-inspect' -import Preview from 'vite-plugin-vue-component-preview' import Inspector from 'vite-plugin-vue-inspector' // .fes.js 只负责管理编译时配置,只能使用plain Object @@ -42,7 +44,7 @@ export default { // port: 8000, }, plugins: [ - Preview(), + VueMacros(), // https://github.com/antfu/unplugin-auto-import AutoImport({ @@ -59,6 +61,8 @@ export default { // auto import Element Plus functions resolvers: [ElementPlusResolver()], dts: 'src/types/auto-imports.d.ts', + dirs: ['src/composables', 'src/stores'], + vueTemplate: true, }), // https://github.com/antfu/unplugin-vue-components @@ -79,9 +83,17 @@ export default { ElementPlus(), // https://github.com/unocss/unocss - // see unocss.config.ts for config + // see uno.config.ts for config Unocss(), + // https://github.com/intlify/bundle-tools/tree/main/packages/unplugin-vue-i18n + VueI18n({ + runtimeOnly: true, + compositionOnly: true, + fullInstall: true, + include: [path.resolve(__dirname, 'locales/**')], + }), + // https://github.com/antfu/vite-plugin-inspect // Visit http://localhost:3333/__inspect/ to see the inspector Inspect(), @@ -91,6 +103,8 @@ export default { toggleButtonVisibility: 'never', toggleComboKey: 'control-alt-i', }), + + // VueDevTools(), ], }, } diff --git a/README.md b/README.md index bba8355..e32065c 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Checkout the [`single-page` branch](https://github.com/daotl/fes-starter/tree/si - 🤙🏻 [Reactivity Transform](https://vuejs.org/guide/extras/reactivity-transform.html) enabled - 📥 [APIs auto importing](https://github.com/antfu/unplugin-auto-import) - use Composition API and others directly - 📦 [Components auto importing](./src/components) -- 🔎 [Component Preview](https://github.com/johnsoncodehk/vite-plugin-vue-component-preview) and [jump to code](https://github.com/webfansplz/vite-plugin-vue-inspector) +- 🔎 [Jump to component code](https://github.com/webfansplz/vite-plugin-vue-inspector) - 🍍 [Pinia](https://pinia.vuejs.org/) - state management - 🖌️ [SASS](https://sass-lang.com/) with [SCSS](https://sass-lang.com/documentation/syntax#scss) syntax for styling - 🧰 [Element Plus](https://element-plus.org/) - component library diff --git a/locales/README.md b/locales/README.md new file mode 100644 index 0000000..4b24ec2 --- /dev/null +++ b/locales/README.md @@ -0,0 +1,7 @@ +## i18n + +This directory is to serve your locale translation files. YAML under this folder would be loaded automatically and register with their filenames as locale code. + +Check out [`vue-i18n`](https://github.com/intlify/vue-i18n-next) for more details. + +If you are using VS Code, [`i18n Ally`](https://github.com/lokalise/i18n-ally) is recommended to make the i18n experience better. diff --git a/locales/en.yml b/locales/en.yml new file mode 100644 index 0000000..5d9acc0 --- /dev/null +++ b/locales/en.yml @@ -0,0 +1 @@ +title: Fes.js Starter Template diff --git a/locales/zh-CN.yml b/locales/zh-CN.yml new file mode 100644 index 0000000..bb27980 --- /dev/null +++ b/locales/zh-CN.yml @@ -0,0 +1 @@ +title: Fes.js 项目模板 diff --git a/package.json b/package.json index 7aad93e..5551940 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ "pinia": "^2.1.7", "prism-theme-vars": "^0.2.4", "vue": "^3.3.6", + "vue-i18n": "^9.5.0", "vue-router": "^4.2.5" }, "devDependencies": { @@ -61,8 +62,11 @@ "@daotl/tsconfig": "^0.1.2", "@fesjs/builder-vite": "^3.0.3", "@iconify-json/mdi": "^1.1.54", + "@intlify/unplugin-vue-i18n": "^1.4.0", "@types/node": "^20.8.8", "@unocss/eslint-plugin": "^0.57.0", + "@vitejs/plugin-vue": "^4.4.0", + "@vue-macros/volar": "^0.17.0", "core-js": "^3.33.1", "cross-env": "^7.0.3", "dotenv-cli": "^7.3.0", @@ -83,9 +87,10 @@ "unplugin-auto-import": "^0.16.6", "unplugin-element-plus": "^0.8.0", "unplugin-vue-components": "^0.25.2", + "unplugin-vue-macros": "^2.6.1", "vite": "^4.5.0", "vite-plugin-inspect": "^0.7.40", - "vite-plugin-vue-component-preview": "^1.1.6", + "vite-plugin-vue-devtools": "1.0.0-rc.5", "vite-plugin-vue-inspector": "^4.0.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fdc63fa..580f7fc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -44,6 +44,9 @@ dependencies: vue: specifier: ^3.3.6 version: 3.3.6(typescript@5.2.2) + vue-i18n: + specifier: ^9.5.0 + version: 9.5.0(vue@3.3.6) vue-router: specifier: ^4.2.5 version: 4.2.5(vue@3.3.6) @@ -67,12 +70,21 @@ devDependencies: '@iconify-json/mdi': specifier: ^1.1.54 version: 1.1.54 + '@intlify/unplugin-vue-i18n': + specifier: ^1.4.0 + version: 1.4.0(rollup@4.1.4)(vue-i18n@9.5.0) '@types/node': specifier: ^20.8.8 version: 20.8.8 '@unocss/eslint-plugin': specifier: ^0.57.0 version: 0.57.0(eslint@8.52.0)(typescript@5.2.2) + '@vitejs/plugin-vue': + specifier: ^4.4.0 + version: 4.4.0(vite@4.5.0)(vue@3.3.6) + '@vue-macros/volar': + specifier: ^0.17.0 + version: 0.17.0(@vue-macros/reactivity-transform@0.3.23)(rollup@4.1.4)(typescript@5.2.2)(vue@3.3.6) core-js: specifier: ^3.33.1 version: 3.33.1 @@ -133,15 +145,18 @@ devDependencies: unplugin-vue-components: specifier: ^0.25.2 version: 0.25.2(rollup@4.1.4)(vue@3.3.6) + unplugin-vue-macros: + specifier: ^2.6.1 + version: 2.6.1(@vueuse/core@10.5.0)(rollup@4.1.4)(typescript@5.2.2)(vite@4.5.0)(vue@3.3.6) vite: specifier: ^4.5.0 version: 4.5.0(@types/node@20.8.8)(less@4.2.0)(sass@1.69.4)(terser@5.21.0) vite-plugin-inspect: specifier: ^0.7.40 version: 0.7.40(rollup@4.1.4)(vite@4.5.0) - vite-plugin-vue-component-preview: - specifier: ^1.1.6 - version: 1.1.6(rollup@4.1.4)(vite@4.5.0)(vue@3.3.6) + vite-plugin-vue-devtools: + specifier: 1.0.0-rc.5 + version: 1.0.0-rc.5(pug@3.0.2)(rollup@4.1.4)(vite@4.5.0) vite-plugin-vue-inspector: specifier: ^4.0.0 version: 4.0.0(vite@4.5.0) @@ -1922,6 +1937,82 @@ packages: - supports-color dev: true + /@intlify/bundle-utils@7.4.0(vue-i18n@9.5.0): + resolution: {integrity: sha512-AQfjBe2HUxzyN8ignIk3WhhSuVcSuirgzOzkd17nb337rCbI4Gv/t1R60UUyIqFoFdviLb/wLcDUzTD/xXjv9w==} + engines: {node: '>= 14.16'} + peerDependencies: + petite-vue-i18n: '*' + vue-i18n: '*' + peerDependenciesMeta: + petite-vue-i18n: + optional: true + vue-i18n: + optional: true + dependencies: + '@intlify/message-compiler': 9.5.0 + '@intlify/shared': 9.5.0 + acorn: 8.10.0 + escodegen: 2.1.0 + estree-walker: 2.0.2 + jsonc-eslint-parser: 2.3.0 + magic-string: 0.30.5 + mlly: 1.4.2 + source-map-js: 1.0.2 + vue-i18n: 9.5.0(vue@3.3.6) + yaml-eslint-parser: 1.2.2 + dev: true + + /@intlify/core-base@9.5.0: + resolution: {integrity: sha512-y3ufM1RJbI/DSmJf3lYs9ACq3S/iRvaSsE3rPIk0MGH7fp+JxU6rdryv/EYcwfcr3Y1aHFlCBir6S391hRZ57w==} + engines: {node: '>= 16'} + dependencies: + '@intlify/message-compiler': 9.5.0 + '@intlify/shared': 9.5.0 + + /@intlify/message-compiler@9.5.0: + resolution: {integrity: sha512-CAhVNfEZcOVFg0/5MNyt+OFjvs4J/ARjCj2b+54/FvFP0EDJI5lIqMTSDBE7k0atMROSP0SvWCkwu/AZ5xkK1g==} + engines: {node: '>= 16'} + dependencies: + '@intlify/shared': 9.5.0 + source-map-js: 1.0.2 + + /@intlify/shared@9.5.0: + resolution: {integrity: sha512-tAxV14LMXZDZbu32XzLMTsowNlgJNmLwWHYzvMUl6L8gvQeoYiZONjY7AUsqZW8TOZDX9lfvF6adPkk9FSRdDA==} + engines: {node: '>= 16'} + + /@intlify/unplugin-vue-i18n@1.4.0(rollup@4.1.4)(vue-i18n@9.5.0): + resolution: {integrity: sha512-RGDchCRBlDTyVVFgPA1C1XC1uD4xYN81Ma+3EnU6GQ8pBEreraX/PWdPXXzOB6k9GWCQHuqii3atYXhcH3rpSg==} + engines: {node: '>= 14.16'} + peerDependencies: + petite-vue-i18n: '*' + vue-i18n: '*' + vue-i18n-bridge: '*' + peerDependenciesMeta: + petite-vue-i18n: + optional: true + vue-i18n: + optional: true + vue-i18n-bridge: + optional: true + dependencies: + '@intlify/bundle-utils': 7.4.0(vue-i18n@9.5.0) + '@intlify/shared': 9.5.0 + '@rollup/pluginutils': 5.0.5(rollup@4.1.4) + '@vue/compiler-sfc': 3.3.6 + debug: 4.3.4 + fast-glob: 3.3.1 + js-yaml: 4.1.0 + json5: 2.2.3 + pathe: 1.1.1 + picocolors: 1.0.0 + source-map-js: 1.0.2 + unplugin: 1.5.0 + vue-i18n: 9.5.0(vue@3.3.6) + transitivePeerDependencies: + - rollup + - supports-color + dev: true + /@jest/schemas@29.6.3: resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -1965,26 +2056,6 @@ packages: resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==} dev: false - /@mdit-vue/plugin-component@0.12.1: - resolution: {integrity: sha512-L3elbvuKUufXwPLHrmJGd/ijd/QKxfcHXy3kRy4O+P7UIV7HSWePpfB0k+wWee+by3MviYYxjVAi392z+DGy3Q==} - dependencies: - '@types/markdown-it': 13.0.2 - markdown-it: 13.0.2 - dev: true - - /@mdit-vue/plugin-frontmatter@0.12.1: - resolution: {integrity: sha512-C6ycNjrJ+T4JgbVxwo9cUkfLacOO841Yl8ogqd5PJmAVpc5cM2OLBkqqkZxNRXos3g9xM1VvIQ7gK/047UNADg==} - dependencies: - '@mdit-vue/types': 0.12.0 - '@types/markdown-it': 13.0.2 - gray-matter: 4.0.3 - markdown-it: 13.0.2 - dev: true - - /@mdit-vue/types@0.12.0: - resolution: {integrity: sha512-mrC4y8n88BYvgcgzq9bvTlDgFyi2zuvzmPilRvRc3Uz1iIvq8mDhxJ0rHKFUNzPEScpDvJdIujqiDrulMqiudA==} - dev: true - /@microsoft/tsdoc-config@0.16.2: resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} dependencies: @@ -2056,6 +2127,21 @@ packages: picomatch: 2.3.1 dev: true + /@rollup/pluginutils@5.0.5(rollup@3.29.4): + resolution: {integrity: sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@types/estree': 1.0.2 + estree-walker: 2.0.2 + picomatch: 2.3.1 + rollup: 3.29.4 + dev: true + /@rollup/pluginutils@5.0.5(rollup@4.1.4): resolution: {integrity: sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==} engines: {node: '>=14.0.0'} @@ -2262,10 +2348,6 @@ packages: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: true - /@types/linkify-it@3.0.3: - resolution: {integrity: sha512-pTjcqY9E4nOI55Wgpz7eiI8+LzdYnw3qxXCfHyBDdPbYvbyLgWLJGh8EdPvqawwMK1Uo1794AUkkR38Fr0g+2g==} - dev: true - /@types/lodash-es@4.17.9: resolution: {integrity: sha512-ZTcmhiI3NNU7dEvWLZJkzG6ao49zOIjEgIE0RgV7wbPxU0f2xT3VSAHw2gmst8swH6V0YkLRGp4qPlX/6I90MQ==} dependencies: @@ -2276,30 +2358,12 @@ packages: resolution: {integrity: sha512-Vrjz5N5Ia4SEzWWgIVwnHNEnb1UE1XMkvY5DGXrAeOGE9imk0hgTHh5GyDjLDJi9OTCn9oo9dXH1uToK1VRfrg==} dev: false - /@types/markdown-it@12.2.3: - resolution: {integrity: sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==} - dependencies: - '@types/linkify-it': 3.0.3 - '@types/mdurl': 1.0.3 - dev: true - - /@types/markdown-it@13.0.2: - resolution: {integrity: sha512-Tla7hH9oeXHOlJyBFdoqV61xWE9FZf/y2g+gFVwQ2vE1/eBzjUno5JCd3Hdb5oATve5OF6xNjZ/4VIZhVVx+hA==} - dependencies: - '@types/linkify-it': 3.0.3 - '@types/mdurl': 1.0.3 - dev: true - /@types/mdast@3.0.13: resolution: {integrity: sha512-HjiGiWedR0DVFkeNljpa6Lv4/IZU1+30VY5d747K7lBudFc3R0Ibr6yJ9lN3BE28VnZyDfLF/VB1Ql1ZIbKrmg==} dependencies: '@types/unist': 2.0.8 dev: true - /@types/mdurl@1.0.3: - resolution: {integrity: sha512-T5k6kTXak79gwmIOaDF2UUQXFbnBE0zBUzF20pz7wDYu0RQMzWg+Ml/Pz50214NsFHBITkoi5VtdjFZnJ2ijjA==} - dev: true - /@types/minimist@1.2.3: resolution: {integrity: sha512-ZYFzrvyWUNhaPomn80dsMNgMeXxNWZBdkuG/hWlUvXvbdUH8ZERNBGXnU87McuGcWDsyzX2aChCv/SVN348k3A==} dev: true @@ -2827,6 +2891,19 @@ packages: - rollup dev: true + /@vite-plugin-vue-devtools/core@1.0.0-rc.5(vite@4.5.0): + resolution: {integrity: sha512-S3zPV6QVRYz07D1ZEMShwbl8MTT/wvT27dPZicnnI2zXH7kCrOgm1aRw09j+1/35Z682Liqw+gzfnDDY+tIG2w==} + peerDependencies: + vite: ^3.1.0 || ^4.0.0-0 + dependencies: + '@babel/parser': 7.23.0 + birpc: 0.2.14 + estree-walker: 2.0.2 + magic-string: 0.30.5 + vite: 4.5.0(@types/node@20.8.8)(less@4.2.0)(sass@1.69.4)(terser@5.21.0) + vite-hot-client: 0.2.2(vite@4.5.0) + dev: true + /@vitejs/plugin-basic-ssl@1.0.1(vite@4.5.0): resolution: {integrity: sha512-pcub+YbFtFhaGRTo1832FQHQSHvMrlb43974e2eS8EKleR3p1cDdkJFPci1UhwkEf1J9Bz+wKBSzqpKp7nNj2A==} engines: {node: '>=14.6.0'} @@ -2917,30 +2994,410 @@ packages: pretty-format: 29.7.0 dev: true - /@volar/language-core@1.4.1: - resolution: {integrity: sha512-EIY+Swv+TjsWpxOxujjMf1ZXqOjg9MT2VMXZ+1dKva0wD8W0L6EtptFFcCJdBbcKmGMFkr57Qzz9VNMWhs3jXQ==} + /@volar/language-core@1.10.4: + resolution: {integrity: sha512-Na69qA6uwVIdA0rHuOc2W3pHtVQQO8hCNim7FOaKNpRJh0oAFnu5r9i7Oopo5C4cnELZkPNjTrbmpcCTiW+CMQ==} dependencies: - '@volar/source-map': 1.4.1 + '@volar/source-map': 1.10.4 dev: true - /@volar/source-map@1.4.1: - resolution: {integrity: sha512-bZ46ad72dsbzuOWPUtJjBXkzSQzzSejuR3CT81+GvTEI2E994D8JPXzM3tl98zyCNnjgs4OkRyliImL1dvJ5BA==} + /@volar/source-map@1.10.4: + resolution: {integrity: sha512-RxZdUEL+pV8p+SMqnhVjzy5zpb1QRZTlcwSk4bdcBO7yOu4rtEWqDGahVCEj4CcXour+0yJUMrMczfSCpP9Uxg==} dependencies: - muggle-string: 0.2.2 + muggle-string: 0.3.1 dev: true - /@volar/vue-language-core@1.6.5: - resolution: {integrity: sha512-IF2b6hW4QAxfsLd5mePmLgtkXzNi+YnH6ltCd80gb7+cbdpFMjM1I+w+nSg2kfBTyfu+W8useCZvW89kPTBpzg==} + /@vue-macros/api@0.8.6(rollup@3.29.4)(vue@3.3.6): + resolution: {integrity: sha512-g9ZO/z+LvSo4c0cIsLEJ+U4ZbCKYo1o6uJ87fry/+NZ6DeebOXuh5yJ0xkrpz+FCvLK3LsLtG/set467EstEuQ==} + engines: {node: '>=16.14.0'} dependencies: - '@volar/language-core': 1.4.1 - '@volar/source-map': 1.4.1 - '@vue/compiler-dom': 3.3.4 - '@vue/compiler-sfc': 3.3.4 - '@vue/reactivity': 3.3.4 - '@vue/shared': 3.3.4 - minimatch: 9.0.3 - muggle-string: 0.2.2 - vue-template-compiler: 2.7.14 + '@babel/types': 7.23.0 + '@vue-macros/common': 1.8.0(rollup@3.29.4)(vue@3.3.6) + resolve.exports: 2.0.2 + transitivePeerDependencies: + - rollup + - vue + dev: true + + /@vue-macros/api@0.8.6(rollup@4.1.4)(vue@3.3.6): + resolution: {integrity: sha512-g9ZO/z+LvSo4c0cIsLEJ+U4ZbCKYo1o6uJ87fry/+NZ6DeebOXuh5yJ0xkrpz+FCvLK3LsLtG/set467EstEuQ==} + engines: {node: '>=16.14.0'} + dependencies: + '@babel/types': 7.23.0 + '@vue-macros/common': 1.8.0(rollup@4.1.4)(vue@3.3.6) + resolve.exports: 2.0.2 + transitivePeerDependencies: + - rollup + - vue + dev: true + + /@vue-macros/better-define@1.6.12(rollup@4.1.4)(vue@3.3.6): + resolution: {integrity: sha512-wE0kPtwQ2ziyga37FeNycHdvsMTs5tX9BwNrwhTGdu//3O6wKOQfTyqkro8MbLus2eqXYbGH1uoY34J2A/9M/A==} + engines: {node: '>=16.14.0'} + dependencies: + '@vue-macros/api': 0.8.6(rollup@4.1.4)(vue@3.3.6) + '@vue-macros/common': 1.8.0(rollup@4.1.4)(vue@3.3.6) + unplugin: 1.5.0 + transitivePeerDependencies: + - rollup + - vue + dev: true + + /@vue-macros/boolean-prop@0.2.1(rollup@4.1.4)(vue@3.3.6): + resolution: {integrity: sha512-xviX+eOVQGjSKCw/GOEtc6AzqQFR5bTAmAM4SUVPO4yUhhCgMz+eAtGY5f0YAIS9KYjnJ3DXGVLoIewKswb45w==} + engines: {node: '>=16.14.0'} + dependencies: + '@vue-macros/common': 1.8.0(rollup@4.1.4)(vue@3.3.6) + '@vue/compiler-core': 3.3.6 + transitivePeerDependencies: + - rollup + - vue + dev: true + + /@vue-macros/chain-call@0.1.6(rollup@4.1.4)(vue@3.3.6): + resolution: {integrity: sha512-ACUnx9TbPvjjn3aCxpqN2yPC/1wyZTdJnEfh+KLn2rgl5mQUFvi/oOs4rKz/koPSU76fYhPnhbVK4oDv/wQMwg==} + engines: {node: '>=16.14.0'} + dependencies: + '@vue-macros/common': 1.8.0(rollup@4.1.4)(vue@3.3.6) + unplugin: 1.5.0 + transitivePeerDependencies: + - rollup + - vue + dev: true + + /@vue-macros/common@1.8.0(rollup@3.29.4)(vue@3.3.6): + resolution: {integrity: sha512-auDJJzE0z3uRe3867e0DsqcseKImktNf5ojCZgUKqiVxb2yTlwlgOVAYCgoep9oITqxkXQymSvFeKhedi8PhaA==} + engines: {node: '>=16.14.0'} + peerDependencies: + vue: ^2.7.0 || ^3.2.25 + peerDependenciesMeta: + vue: + optional: true + dependencies: + '@babel/types': 7.23.0 + '@rollup/pluginutils': 5.0.5(rollup@3.29.4) + '@vue/compiler-sfc': 3.3.6 + ast-kit: 0.11.2(rollup@3.29.4) + local-pkg: 0.4.3 + magic-string-ast: 0.3.0 + vue: 3.3.6(typescript@5.2.2) + transitivePeerDependencies: + - rollup + dev: true + + /@vue-macros/common@1.8.0(rollup@4.1.4)(vue@3.3.6): + resolution: {integrity: sha512-auDJJzE0z3uRe3867e0DsqcseKImktNf5ojCZgUKqiVxb2yTlwlgOVAYCgoep9oITqxkXQymSvFeKhedi8PhaA==} + engines: {node: '>=16.14.0'} + peerDependencies: + vue: ^2.7.0 || ^3.2.25 + peerDependenciesMeta: + vue: + optional: true + dependencies: + '@babel/types': 7.23.0 + '@rollup/pluginutils': 5.0.5(rollup@4.1.4) + '@vue/compiler-sfc': 3.3.6 + ast-kit: 0.11.2(rollup@4.1.4) + local-pkg: 0.4.3 + magic-string-ast: 0.3.0 + vue: 3.3.6(typescript@5.2.2) + transitivePeerDependencies: + - rollup + dev: true + + /@vue-macros/define-emit@0.1.16(vue@3.3.6): + resolution: {integrity: sha512-8UWGYzopmV+fHFBesqHBPkL76Utzd+br1kjWhx655VLE4IbgnCJNRSBXAsMmbsVGqVFSS3jvFVcpz7J8O0N5rw==} + engines: {node: '>=16.14.0'} + peerDependencies: + vue: ^2.7.0 || ^3.2.25 + dependencies: + '@vue-macros/api': 0.8.6(rollup@3.29.4)(vue@3.3.6) + '@vue-macros/common': 1.8.0(rollup@3.29.4)(vue@3.3.6) + rollup: 3.29.4 + unplugin: 1.5.0 + vue: 3.3.6(typescript@5.2.2) + dev: true + + /@vue-macros/define-models@1.1.0(@vueuse/core@10.5.0)(rollup@4.1.4)(vue@3.3.6): + resolution: {integrity: sha512-EaayVKSnlDcu6TZEQyzYQClUL4Owa2DUOALcpJjREZ3VMCWakzyMNdfrUTwxWqNlS9wh59/UZVgZhjb+/o0iww==} + engines: {node: '>=16.14.0'} + peerDependencies: + '@vueuse/core': '>=9.0.0' + peerDependenciesMeta: + '@vueuse/core': + optional: true + dependencies: + '@vue-macros/common': 1.8.0(rollup@4.1.4)(vue@3.3.6) + '@vueuse/core': 10.5.0(vue@3.3.6) + ast-walker-scope: 0.5.0(rollup@4.1.4) + unplugin: 1.5.0 + transitivePeerDependencies: + - rollup + - vue + dev: true + + /@vue-macros/define-prop@0.2.8(vue@3.3.6): + resolution: {integrity: sha512-ML0bHlOQ2NvxGTgHnGyWlCisb97WmTHKzcKYKYuK+YBTi5h7kimTft4W1Gnw38P1sKIdnknj393qSVHEg7MASw==} + engines: {node: '>=16.14.0'} + peerDependencies: + vue: ^2.7.0 || ^3.2.25 + dependencies: + '@vue-macros/api': 0.8.6(rollup@3.29.4)(vue@3.3.6) + '@vue-macros/common': 1.8.0(rollup@3.29.4)(vue@3.3.6) + rollup: 3.29.4 + unplugin: 1.5.0 + vue: 3.3.6(typescript@5.2.2) + dev: true + + /@vue-macros/define-props-refs@1.1.10(rollup@4.1.4)(vue@3.3.6): + resolution: {integrity: sha512-aWUh+Y6MbRa6hhBE5FFGjspu5XrYlPlNDEtqVX9Zpeyd9zrSmcja1K82/g7wT/U8j8endcJ96HiZGcGcYWqeBQ==} + engines: {node: '>=16.14.0'} + peerDependencies: + vue: ^2.7.0 || ^3.2.25 + dependencies: + '@vue-macros/common': 1.8.0(rollup@4.1.4)(vue@3.3.6) + unplugin: 1.5.0 + vue: 3.3.6(typescript@5.2.2) + transitivePeerDependencies: + - rollup + dev: true + + /@vue-macros/define-props@1.0.21(@vue-macros/reactivity-transform@0.3.23)(rollup@4.1.4)(vue@3.3.6): + resolution: {integrity: sha512-x9TnucVhbvnrrZ4vQ/YYBOjrKflB0hujTCKwFMvLE3rSqPrcdd7voo2rx6AnqFgL7khjQQjMtac+4YhTo34HXw==} + engines: {node: '>=16.14.0'} + peerDependencies: + '@vue-macros/reactivity-transform': ^0.3.23 + vue: ^2.7.0 || ^3.2.25 + dependencies: + '@vue-macros/common': 1.8.0(rollup@4.1.4)(vue@3.3.6) + '@vue-macros/reactivity-transform': 0.3.23(rollup@4.1.4)(vue@3.3.6) + unplugin: 1.5.0 + vue: 3.3.6(typescript@5.2.2) + transitivePeerDependencies: + - rollup + dev: true + + /@vue-macros/define-render@1.4.3(rollup@4.1.4)(vue@3.3.6): + resolution: {integrity: sha512-PvhfqIAWw9NbNLSMucnrWIzzAPaxiLzRVybfOqBAhSWIj1psm0hhdsZY+35adcalSE+q872sPbQ92ofbaDBZVg==} + engines: {node: '>=16.14.0'} + peerDependencies: + vue: ^2.7.0 || ^3.0.0 + dependencies: + '@vue-macros/common': 1.8.0(rollup@4.1.4)(vue@3.3.6) + unplugin: 1.5.0 + vue: 3.3.6(typescript@5.2.2) + transitivePeerDependencies: + - rollup + dev: true + + /@vue-macros/define-slots@1.0.15(rollup@4.1.4)(vue@3.3.6): + resolution: {integrity: sha512-X2eF0ATB1Q2j7ZYiyDu2pZPWkW1M9h1UIX9eu4R6msxIwjIYWFWYyIwS8vq8EVROu6XSGbVv2Edpq5SaDt26LA==} + engines: {node: '>=16.14.0'} + peerDependencies: + vue: ^2.7.0 || ^3.0.0 + dependencies: + '@vue-macros/common': 1.8.0(rollup@4.1.4)(vue@3.3.6) + unplugin: 1.5.0 + vue: 3.3.6(typescript@5.2.2) + transitivePeerDependencies: + - rollup + dev: true + + /@vue-macros/devtools@0.1.3(typescript@5.2.2)(vite@4.5.0): + resolution: {integrity: sha512-aQRC9/TfmQajTMbZZ1BJn61rrraQztJqf64JdXRIpotbGR+xufLY/KIyTTB4SgL1pE1eW/ar5FaZTSjMqyVGIg==} + engines: {node: '>=16.14.0'} + peerDependencies: + vite: ^4.0.0 + peerDependenciesMeta: + vite: + optional: true + dependencies: + sirv: 2.0.3 + vite: 4.5.0(@types/node@20.8.8)(less@4.2.0)(sass@1.69.4)(terser@5.21.0) + vue: 3.3.6(typescript@5.2.2) + transitivePeerDependencies: + - typescript + dev: true + + /@vue-macros/export-expose@0.0.13(rollup@4.1.4)(vue@3.3.6): + resolution: {integrity: sha512-7aDiZDAjT6i6afWE2/W3w9LwCBMGw16SoIFmxHzfbVsUq2hePRaXKYtwDugKqjh/nzq8DO2GKMHxyRBZsCfK4Q==} + engines: {node: '>=16.14.0'} + peerDependencies: + vue: ^2.7.0 || ^3.2.25 + dependencies: + '@vue-macros/common': 1.8.0(rollup@4.1.4)(vue@3.3.6) + '@vue/compiler-sfc': 3.3.6 + unplugin: 1.5.0 + vue: 3.3.6(typescript@5.2.2) + transitivePeerDependencies: + - rollup + dev: true + + /@vue-macros/export-props@0.3.18(rollup@4.1.4)(vue@3.3.6): + resolution: {integrity: sha512-AJHP3HuE+cMNgWDtRyOmLB8ELimwc6G4QnUqPk7PWycyZvXwocKTQgNsMeaYmkH2o13kksId+wx2mI3nGr0fWQ==} + engines: {node: '>=16.14.0'} + peerDependencies: + vue: ^2.7.0 || ^3.2.25 + dependencies: + '@vue-macros/common': 1.8.0(rollup@4.1.4)(vue@3.3.6) + unplugin: 1.5.0 + vue: 3.3.6(typescript@5.2.2) + transitivePeerDependencies: + - rollup + dev: true + + /@vue-macros/export-render@0.1.1(rollup@4.1.4)(vue@3.3.6): + resolution: {integrity: sha512-IQp8jO3Q5Y6/MfMQnIBxQ431bFjYUXIYD36aZriV85V3YnpfKum+0uovDuPXE5isvIV/VJwGzAltXsGkKBWcJg==} + engines: {node: '>=16.14.0'} + peerDependencies: + vue: ^2.7.0 || ^3.2.25 + dependencies: + '@vue-macros/common': 1.8.0(rollup@4.1.4)(vue@3.3.6) + '@vue/compiler-sfc': 3.3.6 + unplugin: 1.5.0 + vue: 3.3.6(typescript@5.2.2) + transitivePeerDependencies: + - rollup + dev: true + + /@vue-macros/hoist-static@1.4.12(rollup@4.1.4)(vue@3.3.6): + resolution: {integrity: sha512-MRdwxAp8rdrFUwYge1WcgS2h7jhL7RfcO/97pnT9qz/s4ps2a8hnbAT61Kn3p/PC6rLme6Di0GZFQ76rkQzULA==} + engines: {node: '>=16.14.0'} + dependencies: + '@vue-macros/common': 1.8.0(rollup@4.1.4)(vue@3.3.6) + unplugin: 1.5.0 + transitivePeerDependencies: + - rollup + - vue + dev: true + + /@vue-macros/jsx-directive@0.6.5(rollup@4.1.4)(vue@3.3.6): + resolution: {integrity: sha512-GAh47ZXbCDwjOEURJzHp/KKykp5CNqbEaHBXYXaPKkANnhqWxCy96p+o0z+6CY4QyFc+nTY2BitpfnArvN/sbQ==} + engines: {node: '>=16.14.0'} + dependencies: + '@vue-macros/common': 1.8.0(rollup@4.1.4)(vue@3.3.6) + unplugin: 1.5.0 + transitivePeerDependencies: + - rollup + - vue + dev: true + + /@vue-macros/named-template@0.3.19(rollup@4.1.4)(vue@3.3.6): + resolution: {integrity: sha512-u4xMAyHhCu/yOYeCJog9r9A04JH1+a9FKyZPaXGjHj+omiMMWLtJJLMumsKzSMCPooTAcDApk48SpsIEMmvSdA==} + engines: {node: '>=16.14.0'} + dependencies: + '@vue-macros/common': 1.8.0(rollup@4.1.4)(vue@3.3.6) + '@vue/compiler-dom': 3.3.6 + unplugin: 1.5.0 + transitivePeerDependencies: + - rollup + - vue + dev: true + + /@vue-macros/reactivity-transform@0.3.23(rollup@4.1.4)(vue@3.3.6): + resolution: {integrity: sha512-SubIg1GsNpQdIDJusrcA2FWBgwSY+4jmL0j6SJ6PU85r3rlS+uDhn6AUkqxeZRAdmJnrbGHXDyWUdygOZmWrSg==} + engines: {node: '>=16.14.0'} + peerDependencies: + vue: ^2.7.0 || ^3.2.25 + dependencies: + '@babel/parser': 7.23.0 + '@vue-macros/common': 1.8.0(rollup@4.1.4)(vue@3.3.6) + '@vue/compiler-core': 3.3.6 + '@vue/shared': 3.3.6 + magic-string: 0.30.5 + unplugin: 1.5.0 + vue: 3.3.6(typescript@5.2.2) + transitivePeerDependencies: + - rollup + dev: true + + /@vue-macros/setup-block@0.2.18(rollup@4.1.4)(vue@3.3.6): + resolution: {integrity: sha512-SyVzW5+I8MWe0lEAtGF76UDqyX4x/YxOMYZR1P9vr9M/QYfj5w7CCo4a6g81qDNxfwaOVVUWahWsia4rNHOp2A==} + engines: {node: '>=16.14.0'} + dependencies: + '@vue-macros/common': 1.8.0(rollup@4.1.4)(vue@3.3.6) + '@vue/compiler-dom': 3.3.6 + unplugin: 1.5.0 + transitivePeerDependencies: + - rollup + - vue + dev: true + + /@vue-macros/setup-component@0.16.19(rollup@4.1.4)(vue@3.3.6): + resolution: {integrity: sha512-85xa2mjlSrUDcLEoC3CvNIguc04fAw7D46cJYmFZrl/VhSfd1QZrZxk18HAjh4N9FuPPpX9eVed0l/fyVlOzSw==} + engines: {node: '>=16.14.0'} + dependencies: + '@vue-macros/common': 1.8.0(rollup@4.1.4)(vue@3.3.6) + unplugin: 1.5.0 + transitivePeerDependencies: + - rollup + - vue + dev: true + + /@vue-macros/setup-sfc@0.16.3(rollup@4.1.4)(vue@3.3.6): + resolution: {integrity: sha512-CN+asiwAgQhA797FaMf/71M3JQvTfS2P+O0gQ4bEuRJBp/XIUfHaoa3AiKReZkry+2ervPS4w2ljZPOGBaXBGA==} + engines: {node: '>=16.14.0'} + dependencies: + '@vue-macros/common': 1.8.0(rollup@4.1.4)(vue@3.3.6) + unplugin: 1.5.0 + transitivePeerDependencies: + - rollup + - vue + dev: true + + /@vue-macros/short-bind@0.1.0(rollup@4.1.4)(vue@3.3.6): + resolution: {integrity: sha512-oJQDo+ZYA0ljFVZg6jqZ7jSrSqIK0pvY46uCMs9E5UmaOy374wjVP5RS0l7D1uBz6PTLnSmNh5/7QH4WYct4DQ==} + engines: {node: '>=16.14.0'} + dependencies: + '@vue-macros/common': 1.8.0(rollup@4.1.4)(vue@3.3.6) + '@vue/compiler-core': 3.3.6 + transitivePeerDependencies: + - rollup + - vue + dev: true + + /@vue-macros/short-emits@1.4.10(rollup@4.1.4)(vue@3.3.6): + resolution: {integrity: sha512-QHLQM+PSKgk+D4ksaBwv+rOOf5KSAx6k5rfLlFopgJFlr8ISbcagnwEf7L02EFb/auz4HsEKkNVrwPPCYKhhnw==} + engines: {node: '>=16.14.0'} + dependencies: + '@vue-macros/common': 1.8.0(rollup@4.1.4)(vue@3.3.6) + unplugin: 1.5.0 + transitivePeerDependencies: + - rollup + - vue + dev: true + + /@vue-macros/short-vmodel@1.3.0(rollup@4.1.4)(vue@3.3.6): + resolution: {integrity: sha512-yKyKKJG0EjDMAUhBCPn97zr6XvNkHzQLZGOcDmxsBMXLRuvIXCdjADYyA/UQpQM1LUZnjryLf4mGEMeTIgq3iA==} + engines: {node: '>=16.14.0'} + dependencies: + '@vue-macros/common': 1.8.0(rollup@4.1.4)(vue@3.3.6) + '@vue/compiler-core': 3.3.6 + transitivePeerDependencies: + - rollup + - vue + dev: true + + /@vue-macros/volar@0.17.0(@vue-macros/reactivity-transform@0.3.23)(rollup@4.1.4)(typescript@5.2.2)(vue@3.3.6): + resolution: {integrity: sha512-Ufv1Mt1LI3VFF7s4HVVwjAYsVuHqvO7viGJ2Hyfjic4xZdwoV1z3JV6DK8I5ab81sdda8R91s0eG53YbLy+iMg==} + engines: {node: '>=16.14.0'} + peerDependencies: + vue-tsc: ^1.6.0 + peerDependenciesMeta: + vue-tsc: + optional: true + dependencies: + '@rollup/pluginutils': 5.0.5(rollup@4.1.4) + '@volar/language-core': 1.10.4 + '@vue-macros/common': 1.8.0(rollup@4.1.4)(vue@3.3.6) + '@vue-macros/define-props': 1.0.21(@vue-macros/reactivity-transform@0.3.23)(rollup@4.1.4)(vue@3.3.6) + '@vue-macros/short-bind': 0.1.0(rollup@4.1.4)(vue@3.3.6) + '@vue-macros/short-vmodel': 1.3.0(rollup@4.1.4)(vue@3.3.6) + '@vue/language-core': 1.8.19(typescript@5.2.2) + transitivePeerDependencies: + - '@vue-macros/reactivity-transform' + - rollup + - typescript + - vue dev: true /@vue/babel-helper-vue-transform-on@1.1.5: @@ -3037,6 +3494,25 @@ packages: /@vue/devtools-api@6.5.1: resolution: {integrity: sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==} + /@vue/language-core@1.8.19(typescript@5.2.2): + resolution: {integrity: sha512-nt3dodGs97UM6fnxeQBazO50yYCKBK53waFWB3qMbLmR6eL3aUryZgQtZoBe1pye17Wl8fs9HysV3si6xMgndQ==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@volar/language-core': 1.10.4 + '@volar/source-map': 1.10.4 + '@vue/compiler-dom': 3.3.6 + '@vue/reactivity': 3.3.6 + '@vue/shared': 3.3.6 + minimatch: 9.0.3 + muggle-string: 0.3.1 + typescript: 5.2.2 + vue-template-compiler: 2.7.15 + dev: true + /@vue/reactivity-transform@3.3.4: resolution: {integrity: sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==} dependencies: @@ -3055,12 +3531,6 @@ packages: estree-walker: 2.0.2 magic-string: 0.30.5 - /@vue/reactivity@3.3.4: - resolution: {integrity: sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==} - dependencies: - '@vue/shared': 3.3.4 - dev: true - /@vue/reactivity@3.3.6: resolution: {integrity: sha512-gtChAumfQz5lSy5jZXfyXbKrIYPf9XEOrIr6rxwVyeWVjFhJwmwPLtV6Yis+M9onzX++I5AVE9j+iPH60U+B8Q==} dependencies: @@ -3153,6 +3623,21 @@ packages: - vue dev: false + /@webfansplz/vuedoc-parser@0.0.4(pug@3.0.2): + resolution: {integrity: sha512-OnJxUtZOvKHonA9wmW1F0E+UkjP4RZdNRZyUWF1Nrh0TAm4uzX4a99EgHH33Rc2dJgkhMdtaZ9P+ekVJ42Y0kg==} + engines: {node: '>=16.6'} + peerDependencies: + pug: ^3.0.2 + dependencies: + '@babel/parser': 7.23.0 + '@babel/traverse': 7.23.2 + pug: 3.0.2 + resolve: 1.22.8 + vue-template-compiler: 2.7.15 + transitivePeerDependencies: + - supports-color + dev: true + /accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} @@ -3168,9 +3653,15 @@ packages: acorn: 8.10.0 dev: true - /acorn-walk@8.2.0: - resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + /acorn-walk@8.2.0: + resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + engines: {node: '>=0.4.0'} + dev: true + + /acorn@7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} + hasBin: true dev: true /acorn@8.10.0: @@ -3231,12 +3722,6 @@ packages: engines: {node: '>=14'} dev: true - /argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - dependencies: - sprintf-js: 1.0.3 - dev: true - /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true @@ -3316,10 +3801,61 @@ packages: engines: {node: '>=0.10.0'} dev: true + /asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + dev: true + + /assert-never@1.2.1: + resolution: {integrity: sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==} + dev: true + /assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} dev: true + /ast-kit@0.11.2(rollup@3.29.4): + resolution: {integrity: sha512-Q0DjXK4ApbVoIf9GLyCo252tUH44iTnD/hiJ2TQaJeydYWSpKk0sI34+WMel8S9Wt5pbLgG02oJ+gkgX5DV3sQ==} + engines: {node: '>=16.14.0'} + dependencies: + '@babel/parser': 7.23.0 + '@rollup/pluginutils': 5.0.5(rollup@3.29.4) + pathe: 1.1.1 + transitivePeerDependencies: + - rollup + dev: true + + /ast-kit@0.11.2(rollup@4.1.4): + resolution: {integrity: sha512-Q0DjXK4ApbVoIf9GLyCo252tUH44iTnD/hiJ2TQaJeydYWSpKk0sI34+WMel8S9Wt5pbLgG02oJ+gkgX5DV3sQ==} + engines: {node: '>=16.14.0'} + dependencies: + '@babel/parser': 7.23.0 + '@rollup/pluginutils': 5.0.5(rollup@4.1.4) + pathe: 1.1.1 + transitivePeerDependencies: + - rollup + dev: true + + /ast-kit@0.9.5(rollup@4.1.4): + resolution: {integrity: sha512-kbL7ERlqjXubdDd+szuwdlQ1xUxEz9mCz1+m07ftNVStgwRb2RWw+U6oKo08PAvOishMxiqz1mlJyLl8yQx2Qg==} + engines: {node: '>=16.14.0'} + dependencies: + '@babel/parser': 7.23.0 + '@rollup/pluginutils': 5.0.5(rollup@4.1.4) + pathe: 1.1.1 + transitivePeerDependencies: + - rollup + dev: true + + /ast-walker-scope@0.5.0(rollup@4.1.4): + resolution: {integrity: sha512-NsyHMxBh4dmdEHjBo1/TBZvCKxffmZxRYhmclfu0PP6Aftre47jOHYaYaNqJcV0bxihxFXhDkzLHUwHc0ocd0Q==} + engines: {node: '>=16.14.0'} + dependencies: + '@babel/parser': 7.23.0 + ast-kit: 0.9.5(rollup@4.1.4) + transitivePeerDependencies: + - rollup + dev: true + /astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} @@ -3404,6 +3940,13 @@ packages: transitivePeerDependencies: - supports-color + /babel-walk@3.0.0-canary-5: + resolution: {integrity: sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==} + engines: {node: '>= 10.0.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -3420,6 +3963,10 @@ packages: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} + /birpc@0.2.14: + resolution: {integrity: sha512-37FHE8rqsYM5JEKCnXFyHpBCzvgHEExwVVTq+nUmloInU7l8ezD1TpOhKpS8oe1DTYFqEK27rFZVKG43oTqXRA==} + dev: true + /body-parser@1.20.1: resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -3580,6 +4127,12 @@ packages: resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} dev: true + /character-parser@2.2.0: + resolution: {integrity: sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==} + dependencies: + is-regex: 1.1.4 + dev: true + /character-reference-invalid@1.1.4: resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} dev: true @@ -3708,6 +4261,13 @@ packages: engines: {node: ^14.18.0 || >=16.10.0} dev: true + /constantinople@4.0.1: + resolution: {integrity: sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==} + dependencies: + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 + dev: true + /content-disposition@0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} @@ -3994,6 +4554,10 @@ packages: esutils: 2.0.3 dev: true + /doctypes@1.1.0: + resolution: {integrity: sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==} + dev: true + /dom-serializer@1.4.1: resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} dependencies: @@ -4135,11 +4699,6 @@ packages: resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} dev: true - /entities@3.0.1: - resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} - engines: {node: '>=0.12'} - dev: true - /entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -4293,6 +4852,18 @@ packages: engines: {node: '>=12'} dev: true + /escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + dev: true + /eslint-compat-utils@0.1.2(eslint@8.52.0): resolution: {integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==} engines: {node: '>=12'} @@ -4761,6 +5332,21 @@ packages: strip-final-newline: 3.0.0 dev: true + /execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + dev: true + /express@4.18.2: resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} engines: {node: '>= 0.10.0'} @@ -4799,13 +5385,6 @@ packages: transitivePeerDependencies: - supports-color - /extend-shallow@2.0.1: - resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} - engines: {node: '>=0.10.0'} - dependencies: - is-extendable: 0.1.1 - dev: true - /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true @@ -5012,6 +5591,11 @@ packages: engines: {node: '>=10'} dev: true + /get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + dev: true + /get-symbol-description@1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} @@ -5123,16 +5707,6 @@ packages: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true - /gray-matter@4.0.3: - resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} - engines: {node: '>=6.0'} - dependencies: - js-yaml: 3.14.1 - kind-of: 6.0.3 - section-matter: 1.0.0 - strip-bom-string: 1.0.0 - dev: true - /gzip-size@6.0.0: resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} engines: {node: '>=10'} @@ -5250,6 +5824,11 @@ packages: engines: {node: '>=14.18.0'} dev: true + /human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + dev: true + /iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -5420,9 +5999,11 @@ packages: hasBin: true dev: true - /is-extendable@0.1.1: - resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} - engines: {node: '>=0.10.0'} + /is-expression@4.0.0: + resolution: {integrity: sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==} + dependencies: + acorn: 7.4.1 + object-assign: 4.1.1 dev: true /is-extglob@2.1.1: @@ -5489,6 +6070,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /is-promise@2.2.2: + resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} + dev: true + /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -5592,6 +6177,10 @@ packages: '@sideway/formula': 3.0.1 '@sideway/pinpoint': 2.0.0 + /js-stringify@1.0.2: + resolution: {integrity: sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==} + dev: true + /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -5599,14 +6188,6 @@ packages: resolution: {integrity: sha512-Olnt+V7xYdvGze9YTbGFZIfQXuGV4R3nQwwl8BrtgaPE/wq8UFpUHWuTNc05saowhSr1ZO6tx+V6RjE9D5YQog==} dev: true - /js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - dev: true - /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true @@ -5688,6 +6269,13 @@ packages: graceful-fs: 4.2.11 dev: true + /jstransformer@1.0.0: + resolution: {integrity: sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==} + dependencies: + is-promise: 2.2.2 + promise: 7.3.1 + dev: true + /jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} @@ -5831,12 +6419,6 @@ packages: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true - /linkify-it@4.0.1: - resolution: {integrity: sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==} - dependencies: - uc.micro: 1.0.6 - dev: true - /local-pkg@0.4.3: resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} engines: {node: '>=14'} @@ -5928,6 +6510,13 @@ packages: dependencies: yallist: 4.0.0 + /magic-string-ast@0.3.0: + resolution: {integrity: sha512-0shqecEPgdFpnI3AP90epXyxZy9g6CRZ+SZ7BcqFwYmtFEnZ1jpevcV5HoyVnlDS9gCnc1UIg3Rsvp3Ci7r8OA==} + engines: {node: '>=16.14.0'} + dependencies: + magic-string: 0.30.5 + dev: true + /magic-string@0.27.0: resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} engines: {node: '>=12'} @@ -5958,17 +6547,6 @@ packages: engines: {node: '>=8'} dev: true - /markdown-it@13.0.2: - resolution: {integrity: sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==} - hasBin: true - dependencies: - argparse: 2.0.1 - entities: 3.0.1 - linkify-it: 4.0.1 - mdurl: 1.0.1 - uc.micro: 1.0.6 - dev: true - /mathml-tag-names@2.1.3: resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==} dev: true @@ -5993,10 +6571,6 @@ packages: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} dev: true - /mdurl@1.0.1: - resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} - dev: true - /media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} @@ -6172,8 +6746,8 @@ packages: /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - /muggle-string@0.2.2: - resolution: {integrity: sha512-YVE1mIJ4VpUMqZObFndk9CJu6DBJR/GB13p3tXuNbwD4XExaI5EOuRl6BHeIDxIqXZVxSfAC+y6U1Z/IxCfKUg==} + /muggle-string@0.3.1: + resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==} dev: true /mustache@4.2.0: @@ -6280,6 +6854,11 @@ packages: boolbase: 1.0.0 dev: true + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: true + /object-inspect@1.12.3: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} @@ -6721,6 +7300,12 @@ packages: resolution: {integrity: sha512-B3Pht+GCT87sZph7hMRLlCQXzCM0awW7Rhk08RavpqRW4LEQOeqN0uMG4QCWkul2tr8PB61YAOJGUrEW+1uuJA==} dev: false + /promise@7.3.1: + resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} + dependencies: + asap: 2.0.6 + dev: true + /proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -6734,6 +7319,97 @@ packages: dev: true optional: true + /pug-attrs@3.0.0: + resolution: {integrity: sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==} + dependencies: + constantinople: 4.0.1 + js-stringify: 1.0.2 + pug-runtime: 3.0.1 + dev: true + + /pug-code-gen@3.0.2: + resolution: {integrity: sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==} + dependencies: + constantinople: 4.0.1 + doctypes: 1.1.0 + js-stringify: 1.0.2 + pug-attrs: 3.0.0 + pug-error: 2.0.0 + pug-runtime: 3.0.1 + void-elements: 3.1.0 + with: 7.0.2 + dev: true + + /pug-error@2.0.0: + resolution: {integrity: sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==} + dev: true + + /pug-filters@4.0.0: + resolution: {integrity: sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==} + dependencies: + constantinople: 4.0.1 + jstransformer: 1.0.0 + pug-error: 2.0.0 + pug-walk: 2.0.0 + resolve: 1.22.8 + dev: true + + /pug-lexer@5.0.1: + resolution: {integrity: sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==} + dependencies: + character-parser: 2.2.0 + is-expression: 4.0.0 + pug-error: 2.0.0 + dev: true + + /pug-linker@4.0.0: + resolution: {integrity: sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==} + dependencies: + pug-error: 2.0.0 + pug-walk: 2.0.0 + dev: true + + /pug-load@3.0.0: + resolution: {integrity: sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==} + dependencies: + object-assign: 4.1.1 + pug-walk: 2.0.0 + dev: true + + /pug-parser@6.0.0: + resolution: {integrity: sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==} + dependencies: + pug-error: 2.0.0 + token-stream: 1.0.0 + dev: true + + /pug-runtime@3.0.1: + resolution: {integrity: sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==} + dev: true + + /pug-strip-comments@2.0.0: + resolution: {integrity: sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==} + dependencies: + pug-error: 2.0.0 + dev: true + + /pug-walk@2.0.0: + resolution: {integrity: sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==} + dev: true + + /pug@3.0.2: + resolution: {integrity: sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==} + dependencies: + pug-code-gen: 3.0.2 + pug-filters: 4.0.0 + pug-lexer: 5.0.1 + pug-linker: 4.0.0 + pug-load: 3.0.0 + pug-parser: 6.0.0 + pug-runtime: 3.0.1 + pug-strip-comments: 2.0.0 + dev: true + /punycode@2.3.0: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} @@ -6916,6 +7592,11 @@ packages: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} dev: true + /resolve.exports@2.0.2: + resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} + engines: {node: '>=10'} + dev: true + /resolve@1.19.0: resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} dependencies: @@ -7052,14 +7733,6 @@ packages: resolution: {integrity: sha512-4AsO/FrViE/iDNEPaAQlb77tf0csuq27EsVpy6ett584EcRTp6pTDLoGWVxCD77y5iU5FauOvhsI4o1APwPoSQ==} dev: true - /section-matter@1.0.0: - resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} - engines: {node: '>=4'} - dependencies: - extend-shallow: 2.0.1 - kind-of: 6.0.3 - dev: true - /semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true @@ -7226,10 +7899,6 @@ packages: resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} dev: true - /sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: true - /stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} dev: true @@ -7287,11 +7956,6 @@ packages: ansi-regex: 5.0.1 dev: true - /strip-bom-string@1.0.0: - resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} - engines: {node: '>=0.10.0'} - dev: true - /strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} @@ -7572,6 +8236,10 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} + /token-stream@1.0.0: + resolution: {integrity: sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==} + dev: true + /totalist@3.0.1: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} @@ -7706,10 +8374,6 @@ packages: engines: {node: '>=14.17'} hasBin: true - /uc.micro@1.0.6: - resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} - dev: true - /ufo@1.3.1: resolution: {integrity: sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw==} dev: true @@ -7861,6 +8525,30 @@ packages: - rollup dev: true + /unplugin-combine@0.7.0(rollup@4.1.4)(vite@4.5.0): + resolution: {integrity: sha512-Pxa8ovANAUN/bz/pzGN8xnTqFfSJndIJAttXS4/BdVq7mxtKB65RVa2UxAnLmEzgwvtefXAjZgyx9fk5Bv0vEA==} + engines: {node: '>=14.19.0'} + peerDependencies: + esbuild: '>=0.13' + rollup: ^3.2.0 + vite: ^2.3.0 || ^3.0.0 || ^4.0.0 + webpack: 4 || 5 + peerDependenciesMeta: + esbuild: + optional: true + rollup: + optional: true + vite: + optional: true + webpack: + optional: true + dependencies: + '@antfu/utils': 0.7.6 + rollup: 4.1.4 + unplugin: 1.5.0 + vite: 4.5.0(@types/node@20.8.8)(less@4.2.0)(sass@1.69.4)(terser@5.21.0) + dev: true + /unplugin-element-plus@0.8.0(rollup@4.1.4): resolution: {integrity: sha512-jByUGY3FG2B8RJKFryqxx4eNtSTj+Hjlo8edcOdJymewndDQjThZ1pRUQHRjQsbKhTV2jEctJV7t7RJ405UL4g==} engines: {node: '>=14.19.0'} @@ -7902,6 +8590,62 @@ packages: - supports-color dev: true + /unplugin-vue-define-options@1.3.18(rollup@4.1.4)(vue@3.3.6): + resolution: {integrity: sha512-AaE10FCccfezT48yyYuUXdnTF9z8vQuXrlpNF5uQtq/AOD2pdkf38vnmJm8bJjpoqEkR6u72wNCJLZKXSUw+Og==} + engines: {node: '>=16.14.0'} + dependencies: + '@vue-macros/common': 1.8.0(rollup@4.1.4)(vue@3.3.6) + ast-walker-scope: 0.5.0(rollup@4.1.4) + unplugin: 1.5.0 + transitivePeerDependencies: + - rollup + - vue + dev: true + + /unplugin-vue-macros@2.6.1(@vueuse/core@10.5.0)(rollup@4.1.4)(typescript@5.2.2)(vite@4.5.0)(vue@3.3.6): + resolution: {integrity: sha512-YHqCZgZPasdRwmmuautjXkV6uOQ0amg/qHnXyUMgLI8/FkgtfGx+QgeknXpLgiOC2PVXlsuCqbcGnHJ/N4VtUg==} + engines: {node: '>=16.14.0'} + peerDependencies: + vue: ^2.7.0 || ^3.2.25 + dependencies: + '@vue-macros/better-define': 1.6.12(rollup@4.1.4)(vue@3.3.6) + '@vue-macros/boolean-prop': 0.2.1(rollup@4.1.4)(vue@3.3.6) + '@vue-macros/chain-call': 0.1.6(rollup@4.1.4)(vue@3.3.6) + '@vue-macros/common': 1.8.0(rollup@4.1.4)(vue@3.3.6) + '@vue-macros/define-emit': 0.1.16(vue@3.3.6) + '@vue-macros/define-models': 1.1.0(@vueuse/core@10.5.0)(rollup@4.1.4)(vue@3.3.6) + '@vue-macros/define-prop': 0.2.8(vue@3.3.6) + '@vue-macros/define-props': 1.0.21(@vue-macros/reactivity-transform@0.3.23)(rollup@4.1.4)(vue@3.3.6) + '@vue-macros/define-props-refs': 1.1.10(rollup@4.1.4)(vue@3.3.6) + '@vue-macros/define-render': 1.4.3(rollup@4.1.4)(vue@3.3.6) + '@vue-macros/define-slots': 1.0.15(rollup@4.1.4)(vue@3.3.6) + '@vue-macros/devtools': 0.1.3(typescript@5.2.2)(vite@4.5.0) + '@vue-macros/export-expose': 0.0.13(rollup@4.1.4)(vue@3.3.6) + '@vue-macros/export-props': 0.3.18(rollup@4.1.4)(vue@3.3.6) + '@vue-macros/export-render': 0.1.1(rollup@4.1.4)(vue@3.3.6) + '@vue-macros/hoist-static': 1.4.12(rollup@4.1.4)(vue@3.3.6) + '@vue-macros/jsx-directive': 0.6.5(rollup@4.1.4)(vue@3.3.6) + '@vue-macros/named-template': 0.3.19(rollup@4.1.4)(vue@3.3.6) + '@vue-macros/reactivity-transform': 0.3.23(rollup@4.1.4)(vue@3.3.6) + '@vue-macros/setup-block': 0.2.18(rollup@4.1.4)(vue@3.3.6) + '@vue-macros/setup-component': 0.16.19(rollup@4.1.4)(vue@3.3.6) + '@vue-macros/setup-sfc': 0.16.3(rollup@4.1.4)(vue@3.3.6) + '@vue-macros/short-bind': 0.1.0(rollup@4.1.4)(vue@3.3.6) + '@vue-macros/short-emits': 1.4.10(rollup@4.1.4)(vue@3.3.6) + '@vue-macros/short-vmodel': 1.3.0(rollup@4.1.4)(vue@3.3.6) + unplugin: 1.5.0 + unplugin-combine: 0.7.0(rollup@4.1.4)(vite@4.5.0) + unplugin-vue-define-options: 1.3.18(rollup@4.1.4)(vue@3.3.6) + vue: 3.3.6(typescript@5.2.2) + transitivePeerDependencies: + - '@vueuse/core' + - esbuild + - rollup + - typescript + - vite + - webpack + dev: true + /unplugin@1.5.0: resolution: {integrity: sha512-9ZdRwbh/4gcm1JTOkp9lAkIDrtOyOxgHmY7cjuwI8L/2RTikMcVG25GsZwNAgRuap3iDw2jeq7eoqtAsz5rW3A==} dependencies: @@ -7951,6 +8695,14 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} + /vite-hot-client@0.2.2(vite@4.5.0): + resolution: {integrity: sha512-iLBQWEJqcEvK1tx2glmQH1tq91zyN9eYC6Sfk+7aRM2he31W/UE4X5yOL4lP/cVQPPparg0ggjHcoNx4x/NNxQ==} + peerDependencies: + vite: ^2.6.0 || ^3.0.0 || ^4.0.0 + dependencies: + vite: 4.5.0(@types/node@20.8.8)(less@4.2.0)(sass@1.69.4)(terser@5.21.0) + dev: true + /vite-node@0.34.6(@types/node@20.8.8)(sass@1.69.4)(terser@5.21.0): resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==} engines: {node: '>=v14.18.0'} @@ -8017,22 +8769,29 @@ packages: - supports-color dev: true - /vite-plugin-vue-component-preview@1.1.6(rollup@4.1.4)(vite@4.5.0)(vue@3.3.6): - resolution: {integrity: sha512-3uS2BvIEZWJOxrFWBy+w6Eh177eru00uK1vepRhqAZun3DEipRfdWmfmGnrmvN+bKUKt6cOkYsMBbhP+Fl1YxQ==} + /vite-plugin-vue-devtools@1.0.0-rc.5(pug@3.0.2)(rollup@4.1.4)(vite@4.5.0): + resolution: {integrity: sha512-tAckFvkhSVJvqRKglP3bYi5FVGajNs/OJbSCMGxzog6wNin5Fb2RPPt1rsJDXwUJ4hcTY73QqlVO0UjYd1+39w==} + engines: {node: '>=v14.21.3'} peerDependencies: - vue: '>=3.0.0' + vite: ^3.1.0 || ^4.0.0-0 dependencies: - '@volar/vue-language-core': 1.6.5 - magic-string: 0.27.0 - vite-plugin-vue-markdown: 0.22.6(rollup@4.1.4)(vite@4.5.0) - vue: 3.3.6(typescript@5.2.2) + '@vite-plugin-vue-devtools/core': 1.0.0-rc.5(vite@4.5.0) + '@webfansplz/vuedoc-parser': 0.0.4(pug@3.0.2) + birpc: 0.2.14 + execa: 8.0.1 + sirv: 2.0.3 + vite: 4.5.0(@types/node@20.8.8)(less@4.2.0)(sass@1.69.4)(terser@5.21.0) + vite-plugin-inspect: 0.7.40(rollup@4.1.4)(vite@4.5.0) + vite-plugin-vue-inspector: 3.7.2(vite@4.5.0) transitivePeerDependencies: + - '@nuxt/kit' + - pug - rollup - - vite + - supports-color dev: true - /vite-plugin-vue-inspector@4.0.0(vite@4.5.0): - resolution: {integrity: sha512-xNjMbRj3YrebuuInTvlC8ghPtzT+3LjMIQPeeR/5CaFd+WcbA9wBnECZmlcP3GITCVED0SxGmTyoJ3iVKsK4vQ==} + /vite-plugin-vue-inspector@3.7.2(vite@4.5.0): + resolution: {integrity: sha512-PSe/t2RoVzB64Ofuec7W/Z0FuKHzmU7esLrMOGwX+BNyXt8dAMtYbz4wL/TqoH1zVPDdjQecQpM5+K9VnBYpAg==} peerDependencies: vite: ^3.0.0-0 || ^4.0.0-0 dependencies: @@ -8042,7 +8801,7 @@ packages: '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.2) '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.23.2) '@vue/babel-plugin-jsx': 1.1.5(@babel/core@7.23.2) - '@vue/compiler-dom': 3.3.4 + '@vue/compiler-dom': 3.3.6 kolorist: 1.8.0 magic-string: 0.30.5 vite: 4.5.0(@types/node@20.8.8)(less@4.2.0)(sass@1.69.4)(terser@5.21.0) @@ -8050,22 +8809,23 @@ packages: - supports-color dev: true - /vite-plugin-vue-markdown@0.22.6(rollup@4.1.4)(vite@4.5.0): - resolution: {integrity: sha512-BB0/yYoRO+4hceFZRgU/iAOpgklFvo/eHLapOkavIoDkP0jeoQubOMTEF8K4FuYRX9jaN5WcP2TrfhUgc7RuUg==} - deprecated: '`vite-plugin-vue-markdown` is renamed to `unplugin-vue-markdown`. For usages in Vite, you also need to change the import path to `unplugin-vue-markdown/vite`.' + /vite-plugin-vue-inspector@4.0.0(vite@4.5.0): + resolution: {integrity: sha512-xNjMbRj3YrebuuInTvlC8ghPtzT+3LjMIQPeeR/5CaFd+WcbA9wBnECZmlcP3GITCVED0SxGmTyoJ3iVKsK4vQ==} peerDependencies: - vite: ^2.0.0 || ^3.0.0-0 || ^4.0.0 + vite: ^3.0.0-0 || ^4.0.0-0 dependencies: - '@antfu/utils': 0.7.6 - '@mdit-vue/plugin-component': 0.12.1 - '@mdit-vue/plugin-frontmatter': 0.12.1 - '@mdit-vue/types': 0.12.0 - '@rollup/pluginutils': 5.0.5(rollup@4.1.4) - '@types/markdown-it': 12.2.3 - markdown-it: 13.0.2 + '@babel/core': 7.23.2 + '@babel/plugin-proposal-decorators': 7.23.2(@babel/core@7.23.2) + '@babel/plugin-syntax-import-attributes': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.2) + '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.23.2) + '@vue/babel-plugin-jsx': 1.1.5(@babel/core@7.23.2) + '@vue/compiler-dom': 3.3.4 + kolorist: 1.8.0 + magic-string: 0.30.5 vite: 4.5.0(@types/node@20.8.8)(less@4.2.0)(sass@1.69.4)(terser@5.21.0) transitivePeerDependencies: - - rollup + - supports-color dev: true /vite@4.5.0(@types/node@20.8.8)(less@4.2.0)(sass@1.69.4)(terser@5.21.0): @@ -8172,6 +8932,11 @@ packages: - terser dev: true + /void-elements@3.1.0: + resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} + engines: {node: '>=0.10.0'} + dev: true + /vue-demi@0.14.6(vue@3.3.6): resolution: {integrity: sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==} engines: {node: '>=12'} @@ -8204,6 +8969,17 @@ packages: - supports-color dev: true + /vue-i18n@9.5.0(vue@3.3.6): + resolution: {integrity: sha512-NiI3Ph1qMstNf7uhYh8trQBOBFLxeJgcOxBq51pCcZ28Vs18Y7BDS58r8HGDKCYgXdLUYqPDXdKatIF4bvBVZg==} + engines: {node: '>= 16'} + peerDependencies: + vue: ^3.0.0 + dependencies: + '@intlify/core-base': 9.5.0 + '@intlify/shared': 9.5.0 + '@vue/devtools-api': 6.5.1 + vue: 3.3.6(typescript@5.2.2) + /vue-router@4.2.5(vue@3.3.6): resolution: {integrity: sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==} peerDependencies: @@ -8212,8 +8988,8 @@ packages: '@vue/devtools-api': 6.5.1 vue: 3.3.6(typescript@5.2.2) - /vue-template-compiler@2.7.14: - resolution: {integrity: sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==} + /vue-template-compiler@2.7.15: + resolution: {integrity: sha512-yQxjxMptBL7UAog00O8sANud99C6wJF+7kgbcwqkvA38vCGF7HWE66w0ZFnS/kX5gSoJr/PQ4/oS3Ne2pW37Og==} dependencies: de-indent: 1.0.2 he: 1.2.0 @@ -8288,6 +9064,16 @@ packages: stackback: 0.0.2 dev: true + /with@7.0.2: + resolution: {integrity: sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==} + engines: {node: '>= 10.0.0'} + dependencies: + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 + assert-never: 1.2.1 + babel-walk: 3.0.0-canary-5 + dev: true + /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} diff --git a/src/app.tsx b/src/app.tsx index 54def03..b1b975d 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -12,9 +12,12 @@ import { CONFIG } from '~/config' import type { Page } from '~/config/pages' import { logger } from '~/utils/log' -export function onAppCreated({ app: _app }: { app: App }): void { - // pinia.use(somePiniaPlugin()) - // app.use(someVuePlugin()) +import type { UserModule } from './types' + +export function onAppCreated({ app }: { app: App }): void { + // install all modules under `modules/` + Object.values(import.meta.glob<{ install: UserModule }>('./modules/*.ts', { eager: true })) + .forEach((i) => i.install?.(app)) } export const beforeRender = { diff --git a/src/modules/README.md b/src/modules/README.md new file mode 100644 index 0000000..ccb7340 --- /dev/null +++ b/src/modules/README.md @@ -0,0 +1,11 @@ +## Modules + +A custom user module system. Place a `.ts` file with the following template, it will be installed automatically. + +```ts +import type { UserModule } from '~/types' + +export const install: UserModule = ({ app, router, isClient }) => { + // do something +} +``` diff --git a/src/modules/i18n.ts b/src/modules/i18n.ts new file mode 100644 index 0000000..5359820 --- /dev/null +++ b/src/modules/i18n.ts @@ -0,0 +1,58 @@ +import type { Locale } from 'vue-i18n' +import { createI18n } from 'vue-i18n' + +import type { UserModule } from '~/types' + +// Import i18n resources +// https://vitejs.dev/guide/features.html#glob-import +// +// Don't need this? Try vitesse-lite: https://github.com/antfu/vitesse-lite +const i18n = createI18n({ + legacy: false, + locale: '', + messages: {}, +}) + +const localesMap = Object.fromEntries( + Object.entries(import.meta.glob('../../locales/*.yml')) + .map(( + [path, loadLocale], + ) => [path.match(/([\w-]*)\.yml$/)?.[1], loadLocale]), +) as Record Promise<{ default: Record }>> + +export const availableLocales = Object.keys(localesMap) + +const loadedLanguages: string[] = [] + +function setI18nLanguage(lang: Locale) { + i18n.global.locale.value = lang as unknown as string + + if (typeof document !== 'undefined') { + document.querySelector('html')?.setAttribute('lang', lang) + } + return lang +} + +export async function loadLanguageAsync(lang: string): Promise { + // If the same language + if (i18n.global.locale.value === lang) { + return setI18nLanguage(lang) + } + + // If the language was already loaded + if (loadedLanguages.includes(lang)) { + return setI18nLanguage(lang) + } + + // If the language hasn't been loaded yet + const messages = await localesMap[lang]?.() + + i18n.global.setLocaleMessage(lang, messages?.default ?? '') + loadedLanguages.push(lang) + return setI18nLanguage(lang) +} + +export const install: UserModule = (app) => { + app.use(i18n) + void loadLanguageAsync('en') +} diff --git a/src/modules/pinia.ts b/src/modules/pinia.ts new file mode 100644 index 0000000..a6f4510 --- /dev/null +++ b/src/modules/pinia.ts @@ -0,0 +1,10 @@ +import { createPinia } from 'pinia' + +import type { UserModule } from '~/types' + +// Setup Pinia +// https://pinia.vuejs.org/ +export const install: UserModule = (app) => { + const pinia = createPinia() + app.use(pinia) +} diff --git a/src/pages/home.vue b/src/pages/home.vue index 77f6a66..029ef3a 100644 --- a/src/pages/home.vue +++ b/src/pages/home.vue @@ -14,17 +14,27 @@ const count = computed(() => store.clicked) function increment(): void { store.clicked++ } + +const { t } = useI18n() + + +en: + counter: Counter + click: click me +zh-CN: + counter: 计数器 + click: 点我 + diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000..9815fe7 --- /dev/null +++ b/src/types.ts @@ -0,0 +1,3 @@ +import type { App } from 'vue' + +export type UserModule = (app: App) => void diff --git a/src/types/auto-imports.d.ts b/src/types/auto-imports.d.ts index e415b03..4a52327 100644 --- a/src/types/auto-imports.d.ts +++ b/src/types/auto-imports.d.ts @@ -15,6 +15,7 @@ declare global { const computedWithControl: typeof import('@vueuse/core')['computedWithControl'] const controlledComputed: typeof import('@vueuse/core')['controlledComputed'] const controlledRef: typeof import('@vueuse/core')['controlledRef'] + const counter: typeof import('../stores/counter')['default'] const createApp: typeof import('vue')['createApp'] const createEventHook: typeof import('@vueuse/core')['createEventHook'] const createGlobalState: typeof import('@vueuse/core')['createGlobalState'] @@ -269,6 +270,7 @@ declare global { const useWindowFocus: typeof import('@vueuse/core')['useWindowFocus'] const useWindowScroll: typeof import('@vueuse/core')['useWindowScroll'] const useWindowSize: typeof import('@vueuse/core')['useWindowSize'] + const user: typeof import('../stores/user')['default'] const watch: typeof import('vue')['watch'] const watchArray: typeof import('@vueuse/core')['watchArray'] const watchAtMost: typeof import('@vueuse/core')['watchAtMost'] @@ -291,3 +293,577 @@ declare global { // @ts-ignore export type { Component, ComponentPublicInstance, ComputedRef, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, VNode, WritableComputedRef } from 'vue' } +// for vue template auto import +import { UnwrapRef } from 'vue' +declare module 'vue' { + interface ComponentCustomProperties { + readonly EffectScope: UnwrapRef + readonly asyncComputed: UnwrapRef + readonly autoResetRef: UnwrapRef + readonly computed: UnwrapRef + readonly computedAsync: UnwrapRef + readonly computedEager: UnwrapRef + readonly computedInject: UnwrapRef + readonly computedWithControl: UnwrapRef + readonly controlledComputed: UnwrapRef + readonly controlledRef: UnwrapRef + readonly counter: UnwrapRef + readonly createApp: UnwrapRef + readonly createEventHook: UnwrapRef + readonly createGlobalState: UnwrapRef + readonly createInjectionState: UnwrapRef + readonly createReactiveFn: UnwrapRef + readonly createReusableTemplate: UnwrapRef + readonly createSharedComposable: UnwrapRef + readonly createTemplatePromise: UnwrapRef + readonly createUnrefFn: UnwrapRef + readonly customRef: UnwrapRef + readonly debouncedRef: UnwrapRef + readonly debouncedWatch: UnwrapRef + readonly defineAsyncComponent: UnwrapRef + readonly defineComponent: UnwrapRef + readonly eagerComputed: UnwrapRef + readonly effectScope: UnwrapRef + readonly extendRef: UnwrapRef + readonly getCurrentInstance: UnwrapRef + readonly getCurrentScope: UnwrapRef + readonly h: UnwrapRef + readonly ignorableWatch: UnwrapRef + readonly inject: UnwrapRef + readonly injectLocal: UnwrapRef + readonly isDefined: UnwrapRef + readonly isProxy: UnwrapRef + readonly isReactive: UnwrapRef + readonly isReadonly: UnwrapRef + readonly isRef: UnwrapRef + readonly makeDestructurable: UnwrapRef + readonly markRaw: UnwrapRef + readonly nextTick: UnwrapRef + readonly onActivated: UnwrapRef + readonly onBeforeMount: UnwrapRef + readonly onBeforeRouteLeave: UnwrapRef + readonly onBeforeRouteUpdate: UnwrapRef + readonly onBeforeUnmount: UnwrapRef + readonly onBeforeUpdate: UnwrapRef + readonly onClickOutside: UnwrapRef + readonly onDeactivated: UnwrapRef + readonly onErrorCaptured: UnwrapRef + readonly onKeyStroke: UnwrapRef + readonly onLongPress: UnwrapRef + readonly onMounted: UnwrapRef + readonly onRenderTracked: UnwrapRef + readonly onRenderTriggered: UnwrapRef + readonly onScopeDispose: UnwrapRef + readonly onServerPrefetch: UnwrapRef + readonly onStartTyping: UnwrapRef + readonly onUnmounted: UnwrapRef + readonly onUpdated: UnwrapRef + readonly pausableWatch: UnwrapRef + readonly provide: UnwrapRef + readonly provideLocal: UnwrapRef + readonly reactify: UnwrapRef + readonly reactifyObject: UnwrapRef + readonly reactive: UnwrapRef + readonly reactiveComputed: UnwrapRef + readonly reactiveOmit: UnwrapRef + readonly reactivePick: UnwrapRef + readonly readonly: UnwrapRef + readonly ref: UnwrapRef + readonly refAutoReset: UnwrapRef + readonly refDebounced: UnwrapRef + readonly refDefault: UnwrapRef + readonly refThrottled: UnwrapRef + readonly refWithControl: UnwrapRef + readonly resolveComponent: UnwrapRef + readonly resolveRef: UnwrapRef + readonly resolveUnref: UnwrapRef + readonly shallowReactive: UnwrapRef + readonly shallowReadonly: UnwrapRef + readonly shallowRef: UnwrapRef + readonly syncRef: UnwrapRef + readonly syncRefs: UnwrapRef + readonly templateRef: UnwrapRef + readonly throttledRef: UnwrapRef + readonly throttledWatch: UnwrapRef + readonly toRaw: UnwrapRef + readonly toReactive: UnwrapRef + readonly toRef: UnwrapRef + readonly toRefs: UnwrapRef + readonly toValue: UnwrapRef + readonly triggerRef: UnwrapRef + readonly tryOnBeforeMount: UnwrapRef + readonly tryOnBeforeUnmount: UnwrapRef + readonly tryOnMounted: UnwrapRef + readonly tryOnScopeDispose: UnwrapRef + readonly tryOnUnmounted: UnwrapRef + readonly unref: UnwrapRef + readonly unrefElement: UnwrapRef + readonly until: UnwrapRef + readonly useActiveElement: UnwrapRef + readonly useAnimate: UnwrapRef + readonly useArrayDifference: UnwrapRef + readonly useArrayEvery: UnwrapRef + readonly useArrayFilter: UnwrapRef + readonly useArrayFind: UnwrapRef + readonly useArrayFindIndex: UnwrapRef + readonly useArrayFindLast: UnwrapRef + readonly useArrayIncludes: UnwrapRef + readonly useArrayJoin: UnwrapRef + readonly useArrayMap: UnwrapRef + readonly useArrayReduce: UnwrapRef + readonly useArraySome: UnwrapRef + readonly useArrayUnique: UnwrapRef + readonly useAsyncQueue: UnwrapRef + readonly useAsyncState: UnwrapRef + readonly useAttrs: UnwrapRef + readonly useBase64: UnwrapRef + readonly useBattery: UnwrapRef + readonly useBluetooth: UnwrapRef + readonly useBreakpoints: UnwrapRef + readonly useBroadcastChannel: UnwrapRef + readonly useBrowserLocation: UnwrapRef + readonly useCached: UnwrapRef + readonly useClipboard: UnwrapRef + readonly useCloned: UnwrapRef + readonly useColorMode: UnwrapRef + readonly useConfirmDialog: UnwrapRef + readonly useCounter: UnwrapRef + readonly useCssModule: UnwrapRef + readonly useCssVar: UnwrapRef + readonly useCssVars: UnwrapRef + readonly useCurrentElement: UnwrapRef + readonly useCycleList: UnwrapRef + readonly useDark: UnwrapRef + readonly useDateFormat: UnwrapRef + readonly useDebounce: UnwrapRef + readonly useDebounceFn: UnwrapRef + readonly useDebouncedRefHistory: UnwrapRef + readonly useDeviceMotion: UnwrapRef + readonly useDeviceOrientation: UnwrapRef + readonly useDevicePixelRatio: UnwrapRef + readonly useDevicesList: UnwrapRef + readonly useDisplayMedia: UnwrapRef + readonly useDocumentVisibility: UnwrapRef + readonly useDraggable: UnwrapRef + readonly useDropZone: UnwrapRef + readonly useElementBounding: UnwrapRef + readonly useElementByPoint: UnwrapRef + readonly useElementHover: UnwrapRef + readonly useElementSize: UnwrapRef + readonly useElementVisibility: UnwrapRef + readonly useEventBus: UnwrapRef + readonly useEventListener: UnwrapRef + readonly useEventSource: UnwrapRef + readonly useEyeDropper: UnwrapRef + readonly useFavicon: UnwrapRef + readonly useFetch: UnwrapRef + readonly useFileDialog: UnwrapRef + readonly useFileSystemAccess: UnwrapRef + readonly useFocus: UnwrapRef + readonly useFocusWithin: UnwrapRef + readonly useFps: UnwrapRef + readonly useFullscreen: UnwrapRef + readonly useGamepad: UnwrapRef + readonly useGeolocation: UnwrapRef + readonly useHead: UnwrapRef + readonly useI18n: UnwrapRef + readonly useIdle: UnwrapRef + readonly useImage: UnwrapRef + readonly useInfiniteScroll: UnwrapRef + readonly useIntersectionObserver: UnwrapRef + readonly useInterval: UnwrapRef + readonly useIntervalFn: UnwrapRef + readonly useKeyModifier: UnwrapRef + readonly useLastChanged: UnwrapRef + readonly useLink: UnwrapRef + readonly useLocalStorage: UnwrapRef + readonly useMagicKeys: UnwrapRef + readonly useManualRefHistory: UnwrapRef + readonly useMediaControls: UnwrapRef + readonly useMediaQuery: UnwrapRef + readonly useMemoize: UnwrapRef + readonly useMemory: UnwrapRef + readonly useMounted: UnwrapRef + readonly useMouse: UnwrapRef + readonly useMouseInElement: UnwrapRef + readonly useMousePressed: UnwrapRef + readonly useMutationObserver: UnwrapRef + readonly useNavigatorLanguage: UnwrapRef + readonly useNetwork: UnwrapRef + readonly useNow: UnwrapRef + readonly useObjectUrl: UnwrapRef + readonly useOffsetPagination: UnwrapRef + readonly useOnline: UnwrapRef + readonly usePageLeave: UnwrapRef + readonly useParallax: UnwrapRef + readonly useParentElement: UnwrapRef + readonly usePerformanceObserver: UnwrapRef + readonly usePermission: UnwrapRef + readonly usePointer: UnwrapRef + readonly usePointerLock: UnwrapRef + readonly usePointerSwipe: UnwrapRef + readonly usePreferredColorScheme: UnwrapRef + readonly usePreferredContrast: UnwrapRef + readonly usePreferredDark: UnwrapRef + readonly usePreferredLanguages: UnwrapRef + readonly usePreferredReducedMotion: UnwrapRef + readonly usePrevious: UnwrapRef + readonly useRafFn: UnwrapRef + readonly useRefHistory: UnwrapRef + readonly useResizeObserver: UnwrapRef + readonly useRoute: UnwrapRef + readonly useRouter: UnwrapRef + readonly useScreenOrientation: UnwrapRef + readonly useScreenSafeArea: UnwrapRef + readonly useScriptTag: UnwrapRef + readonly useScroll: UnwrapRef + readonly useScrollLock: UnwrapRef + readonly useSeoMeta: UnwrapRef + readonly useSessionStorage: UnwrapRef + readonly useShare: UnwrapRef + readonly useSlots: UnwrapRef + readonly useSorted: UnwrapRef + readonly useSpeechRecognition: UnwrapRef + readonly useSpeechSynthesis: UnwrapRef + readonly useStepper: UnwrapRef + readonly useStorage: UnwrapRef + readonly useStorageAsync: UnwrapRef + readonly useStyleTag: UnwrapRef + readonly useSupported: UnwrapRef + readonly useSwipe: UnwrapRef + readonly useTemplateRefsList: UnwrapRef + readonly useTextDirection: UnwrapRef + readonly useTextSelection: UnwrapRef + readonly useTextareaAutosize: UnwrapRef + readonly useThrottle: UnwrapRef + readonly useThrottleFn: UnwrapRef + readonly useThrottledRefHistory: UnwrapRef + readonly useTimeAgo: UnwrapRef + readonly useTimeout: UnwrapRef + readonly useTimeoutFn: UnwrapRef + readonly useTimeoutPoll: UnwrapRef + readonly useTimestamp: UnwrapRef + readonly useTitle: UnwrapRef + readonly useToNumber: UnwrapRef + readonly useToString: UnwrapRef + readonly useToggle: UnwrapRef + readonly useTransition: UnwrapRef + readonly useUrlSearchParams: UnwrapRef + readonly useUserMedia: UnwrapRef + readonly useVModel: UnwrapRef + readonly useVModels: UnwrapRef + readonly useVibrate: UnwrapRef + readonly useVirtualList: UnwrapRef + readonly useWakeLock: UnwrapRef + readonly useWebNotification: UnwrapRef + readonly useWebSocket: UnwrapRef + readonly useWebWorker: UnwrapRef + readonly useWebWorkerFn: UnwrapRef + readonly useWindowFocus: UnwrapRef + readonly useWindowScroll: UnwrapRef + readonly useWindowSize: UnwrapRef + readonly user: UnwrapRef + readonly watch: UnwrapRef + readonly watchArray: UnwrapRef + readonly watchAtMost: UnwrapRef + readonly watchDebounced: UnwrapRef + readonly watchDeep: UnwrapRef + readonly watchEffect: UnwrapRef + readonly watchIgnorable: UnwrapRef + readonly watchImmediate: UnwrapRef + readonly watchOnce: UnwrapRef + readonly watchPausable: UnwrapRef + readonly watchPostEffect: UnwrapRef + readonly watchSyncEffect: UnwrapRef + readonly watchThrottled: UnwrapRef + readonly watchTriggerable: UnwrapRef + readonly watchWithFilter: UnwrapRef + readonly whenever: UnwrapRef + } +} +declare module '@vue/runtime-core' { + interface ComponentCustomProperties { + readonly EffectScope: UnwrapRef + readonly asyncComputed: UnwrapRef + readonly autoResetRef: UnwrapRef + readonly computed: UnwrapRef + readonly computedAsync: UnwrapRef + readonly computedEager: UnwrapRef + readonly computedInject: UnwrapRef + readonly computedWithControl: UnwrapRef + readonly controlledComputed: UnwrapRef + readonly controlledRef: UnwrapRef + readonly counter: UnwrapRef + readonly createApp: UnwrapRef + readonly createEventHook: UnwrapRef + readonly createGlobalState: UnwrapRef + readonly createInjectionState: UnwrapRef + readonly createReactiveFn: UnwrapRef + readonly createReusableTemplate: UnwrapRef + readonly createSharedComposable: UnwrapRef + readonly createTemplatePromise: UnwrapRef + readonly createUnrefFn: UnwrapRef + readonly customRef: UnwrapRef + readonly debouncedRef: UnwrapRef + readonly debouncedWatch: UnwrapRef + readonly defineAsyncComponent: UnwrapRef + readonly defineComponent: UnwrapRef + readonly eagerComputed: UnwrapRef + readonly effectScope: UnwrapRef + readonly extendRef: UnwrapRef + readonly getCurrentInstance: UnwrapRef + readonly getCurrentScope: UnwrapRef + readonly h: UnwrapRef + readonly ignorableWatch: UnwrapRef + readonly inject: UnwrapRef + readonly injectLocal: UnwrapRef + readonly isDefined: UnwrapRef + readonly isProxy: UnwrapRef + readonly isReactive: UnwrapRef + readonly isReadonly: UnwrapRef + readonly isRef: UnwrapRef + readonly makeDestructurable: UnwrapRef + readonly markRaw: UnwrapRef + readonly nextTick: UnwrapRef + readonly onActivated: UnwrapRef + readonly onBeforeMount: UnwrapRef + readonly onBeforeRouteLeave: UnwrapRef + readonly onBeforeRouteUpdate: UnwrapRef + readonly onBeforeUnmount: UnwrapRef + readonly onBeforeUpdate: UnwrapRef + readonly onClickOutside: UnwrapRef + readonly onDeactivated: UnwrapRef + readonly onErrorCaptured: UnwrapRef + readonly onKeyStroke: UnwrapRef + readonly onLongPress: UnwrapRef + readonly onMounted: UnwrapRef + readonly onRenderTracked: UnwrapRef + readonly onRenderTriggered: UnwrapRef + readonly onScopeDispose: UnwrapRef + readonly onServerPrefetch: UnwrapRef + readonly onStartTyping: UnwrapRef + readonly onUnmounted: UnwrapRef + readonly onUpdated: UnwrapRef + readonly pausableWatch: UnwrapRef + readonly provide: UnwrapRef + readonly provideLocal: UnwrapRef + readonly reactify: UnwrapRef + readonly reactifyObject: UnwrapRef + readonly reactive: UnwrapRef + readonly reactiveComputed: UnwrapRef + readonly reactiveOmit: UnwrapRef + readonly reactivePick: UnwrapRef + readonly readonly: UnwrapRef + readonly ref: UnwrapRef + readonly refAutoReset: UnwrapRef + readonly refDebounced: UnwrapRef + readonly refDefault: UnwrapRef + readonly refThrottled: UnwrapRef + readonly refWithControl: UnwrapRef + readonly resolveComponent: UnwrapRef + readonly resolveRef: UnwrapRef + readonly resolveUnref: UnwrapRef + readonly shallowReactive: UnwrapRef + readonly shallowReadonly: UnwrapRef + readonly shallowRef: UnwrapRef + readonly syncRef: UnwrapRef + readonly syncRefs: UnwrapRef + readonly templateRef: UnwrapRef + readonly throttledRef: UnwrapRef + readonly throttledWatch: UnwrapRef + readonly toRaw: UnwrapRef + readonly toReactive: UnwrapRef + readonly toRef: UnwrapRef + readonly toRefs: UnwrapRef + readonly toValue: UnwrapRef + readonly triggerRef: UnwrapRef + readonly tryOnBeforeMount: UnwrapRef + readonly tryOnBeforeUnmount: UnwrapRef + readonly tryOnMounted: UnwrapRef + readonly tryOnScopeDispose: UnwrapRef + readonly tryOnUnmounted: UnwrapRef + readonly unref: UnwrapRef + readonly unrefElement: UnwrapRef + readonly until: UnwrapRef + readonly useActiveElement: UnwrapRef + readonly useAnimate: UnwrapRef + readonly useArrayDifference: UnwrapRef + readonly useArrayEvery: UnwrapRef + readonly useArrayFilter: UnwrapRef + readonly useArrayFind: UnwrapRef + readonly useArrayFindIndex: UnwrapRef + readonly useArrayFindLast: UnwrapRef + readonly useArrayIncludes: UnwrapRef + readonly useArrayJoin: UnwrapRef + readonly useArrayMap: UnwrapRef + readonly useArrayReduce: UnwrapRef + readonly useArraySome: UnwrapRef + readonly useArrayUnique: UnwrapRef + readonly useAsyncQueue: UnwrapRef + readonly useAsyncState: UnwrapRef + readonly useAttrs: UnwrapRef + readonly useBase64: UnwrapRef + readonly useBattery: UnwrapRef + readonly useBluetooth: UnwrapRef + readonly useBreakpoints: UnwrapRef + readonly useBroadcastChannel: UnwrapRef + readonly useBrowserLocation: UnwrapRef + readonly useCached: UnwrapRef + readonly useClipboard: UnwrapRef + readonly useCloned: UnwrapRef + readonly useColorMode: UnwrapRef + readonly useConfirmDialog: UnwrapRef + readonly useCounter: UnwrapRef + readonly useCssModule: UnwrapRef + readonly useCssVar: UnwrapRef + readonly useCssVars: UnwrapRef + readonly useCurrentElement: UnwrapRef + readonly useCycleList: UnwrapRef + readonly useDark: UnwrapRef + readonly useDateFormat: UnwrapRef + readonly useDebounce: UnwrapRef + readonly useDebounceFn: UnwrapRef + readonly useDebouncedRefHistory: UnwrapRef + readonly useDeviceMotion: UnwrapRef + readonly useDeviceOrientation: UnwrapRef + readonly useDevicePixelRatio: UnwrapRef + readonly useDevicesList: UnwrapRef + readonly useDisplayMedia: UnwrapRef + readonly useDocumentVisibility: UnwrapRef + readonly useDraggable: UnwrapRef + readonly useDropZone: UnwrapRef + readonly useElementBounding: UnwrapRef + readonly useElementByPoint: UnwrapRef + readonly useElementHover: UnwrapRef + readonly useElementSize: UnwrapRef + readonly useElementVisibility: UnwrapRef + readonly useEventBus: UnwrapRef + readonly useEventListener: UnwrapRef + readonly useEventSource: UnwrapRef + readonly useEyeDropper: UnwrapRef + readonly useFavicon: UnwrapRef + readonly useFetch: UnwrapRef + readonly useFileDialog: UnwrapRef + readonly useFileSystemAccess: UnwrapRef + readonly useFocus: UnwrapRef + readonly useFocusWithin: UnwrapRef + readonly useFps: UnwrapRef + readonly useFullscreen: UnwrapRef + readonly useGamepad: UnwrapRef + readonly useGeolocation: UnwrapRef + readonly useHead: UnwrapRef + readonly useI18n: UnwrapRef + readonly useIdle: UnwrapRef + readonly useImage: UnwrapRef + readonly useInfiniteScroll: UnwrapRef + readonly useIntersectionObserver: UnwrapRef + readonly useInterval: UnwrapRef + readonly useIntervalFn: UnwrapRef + readonly useKeyModifier: UnwrapRef + readonly useLastChanged: UnwrapRef + readonly useLink: UnwrapRef + readonly useLocalStorage: UnwrapRef + readonly useMagicKeys: UnwrapRef + readonly useManualRefHistory: UnwrapRef + readonly useMediaControls: UnwrapRef + readonly useMediaQuery: UnwrapRef + readonly useMemoize: UnwrapRef + readonly useMemory: UnwrapRef + readonly useMounted: UnwrapRef + readonly useMouse: UnwrapRef + readonly useMouseInElement: UnwrapRef + readonly useMousePressed: UnwrapRef + readonly useMutationObserver: UnwrapRef + readonly useNavigatorLanguage: UnwrapRef + readonly useNetwork: UnwrapRef + readonly useNow: UnwrapRef + readonly useObjectUrl: UnwrapRef + readonly useOffsetPagination: UnwrapRef + readonly useOnline: UnwrapRef + readonly usePageLeave: UnwrapRef + readonly useParallax: UnwrapRef + readonly useParentElement: UnwrapRef + readonly usePerformanceObserver: UnwrapRef + readonly usePermission: UnwrapRef + readonly usePointer: UnwrapRef + readonly usePointerLock: UnwrapRef + readonly usePointerSwipe: UnwrapRef + readonly usePreferredColorScheme: UnwrapRef + readonly usePreferredContrast: UnwrapRef + readonly usePreferredDark: UnwrapRef + readonly usePreferredLanguages: UnwrapRef + readonly usePreferredReducedMotion: UnwrapRef + readonly usePrevious: UnwrapRef + readonly useRafFn: UnwrapRef + readonly useRefHistory: UnwrapRef + readonly useResizeObserver: UnwrapRef + readonly useRoute: UnwrapRef + readonly useRouter: UnwrapRef + readonly useScreenOrientation: UnwrapRef + readonly useScreenSafeArea: UnwrapRef + readonly useScriptTag: UnwrapRef + readonly useScroll: UnwrapRef + readonly useScrollLock: UnwrapRef + readonly useSeoMeta: UnwrapRef + readonly useSessionStorage: UnwrapRef + readonly useShare: UnwrapRef + readonly useSlots: UnwrapRef + readonly useSorted: UnwrapRef + readonly useSpeechRecognition: UnwrapRef + readonly useSpeechSynthesis: UnwrapRef + readonly useStepper: UnwrapRef + readonly useStorage: UnwrapRef + readonly useStorageAsync: UnwrapRef + readonly useStyleTag: UnwrapRef + readonly useSupported: UnwrapRef + readonly useSwipe: UnwrapRef + readonly useTemplateRefsList: UnwrapRef + readonly useTextDirection: UnwrapRef + readonly useTextSelection: UnwrapRef + readonly useTextareaAutosize: UnwrapRef + readonly useThrottle: UnwrapRef + readonly useThrottleFn: UnwrapRef + readonly useThrottledRefHistory: UnwrapRef + readonly useTimeAgo: UnwrapRef + readonly useTimeout: UnwrapRef + readonly useTimeoutFn: UnwrapRef + readonly useTimeoutPoll: UnwrapRef + readonly useTimestamp: UnwrapRef + readonly useTitle: UnwrapRef + readonly useToNumber: UnwrapRef + readonly useToString: UnwrapRef + readonly useToggle: UnwrapRef + readonly useTransition: UnwrapRef + readonly useUrlSearchParams: UnwrapRef + readonly useUserMedia: UnwrapRef + readonly useVModel: UnwrapRef + readonly useVModels: UnwrapRef + readonly useVibrate: UnwrapRef + readonly useVirtualList: UnwrapRef + readonly useWakeLock: UnwrapRef + readonly useWebNotification: UnwrapRef + readonly useWebSocket: UnwrapRef + readonly useWebWorker: UnwrapRef + readonly useWebWorkerFn: UnwrapRef + readonly useWindowFocus: UnwrapRef + readonly useWindowScroll: UnwrapRef + readonly useWindowSize: UnwrapRef + readonly user: UnwrapRef + readonly watch: UnwrapRef + readonly watchArray: UnwrapRef + readonly watchAtMost: UnwrapRef + readonly watchDebounced: UnwrapRef + readonly watchDeep: UnwrapRef + readonly watchEffect: UnwrapRef + readonly watchIgnorable: UnwrapRef + readonly watchImmediate: UnwrapRef + readonly watchOnce: UnwrapRef + readonly watchPausable: UnwrapRef + readonly watchPostEffect: UnwrapRef + readonly watchSyncEffect: UnwrapRef + readonly watchThrottled: UnwrapRef + readonly watchTriggerable: UnwrapRef + readonly watchWithFilter: UnwrapRef + readonly whenever: UnwrapRef + } +} diff --git a/tsconfig.json b/tsconfig.json index 3bf8cbb..b34ad71 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,10 +7,24 @@ "~/*": ["src/*"], "@@/*": ["src/.fes/*", "src/.fes-production/*"] }, - "types": ["node", "jest", "element-plus/global"], + "types": [ + "node", + "jest", + "vitest", + "vite/client", + "vue/ref-macros", + "unplugin-vue-macros/macros-global", + "element-plus/global" + ], "outDir": "build/dist", "allowSyntheticDefaultImports": true }, + "vueCompilerOptions": { + "plugins": [ + "@vue-macros/volar/define-models", + "@vue-macros/volar/define-props-refs" + ] + }, "exclude": [ "node_modules", "build",