From 1a5796ac319073877d52e2b3e78e9fa016890c19 Mon Sep 17 00:00:00 2001 From: gaokefei <260480378@qq.com> Date: Sat, 2 Dec 2023 19:45:31 +0800 Subject: [PATCH 01/32] feat(jsx-directive): support fragment --- playground/src/components/Comp.vue | 2 + src/rules/jsx-directive/v-tag.yml | 33 +++++++++++++++ src/rules/render/define-render.yml | 65 ++++++++++++------------------ src/rules/render/export-render.yml | 65 ++++++++++++------------------ src/utils/is-fragment.yml | 13 ++++++ src/utils/is-template.yml | 5 +++ 6 files changed, 103 insertions(+), 80 deletions(-) create mode 100644 src/rules/jsx-directive/v-tag.yml create mode 100644 src/utils/is-fragment.yml diff --git a/playground/src/components/Comp.vue b/playground/src/components/Comp.vue index 3836e35..a1183d5 100644 --- a/playground/src/components/Comp.vue +++ b/playground/src/components/Comp.vue @@ -4,6 +4,8 @@ {{ id }} bottom + +
Fragment
--- -id: define-render remove template -language: html -rule: - matches: is-template -fix: |- - ---- - -id: define-render has lang +id: define-render fragment language: html rule: - kind: attribute_value + kind: end_tag + regex: inside: - kind: quoted_attribute_value - inside: - kind: attribute - pattern: $NAME - has: - kind: attribute_name - regex: lang - inside: - matches: is-script + kind: script_element + any: + - precedes: + matches: is-fragment + pattern: + - follows: + matches: is-fragment + pattern: fix: |- - tsx + + defineRender(() => ( + <> + $$$A + + )) + --- -id: define-render no lang +id: define-render remove template language: html rule: - kind: tag_name - regex: script - pattern: $NAME - inside: - matches: is-script - not: - has: - kind: attribute - has: - kind: attribute_name - regex: ^lang$ + any: + - matches: is-template + - matches: is-fragment fix: |- - script lang="tsx" diff --git a/src/rules/render/export-render.yml b/src/rules/render/export-render.yml index e75bae4..c9ec26c 100644 --- a/src/rules/render/export-render.yml +++ b/src/rules/render/export-render.yml @@ -8,63 +8,48 @@ rule: any: - precedes: matches: is-template - has: - kind: element - pattern: $A + pattern: - follows: matches: is-template - has: - kind: element - pattern: $A + pattern: fix: |- export default () => ( - $A + $$$A ) --- -id: export-render remove template -language: html -rule: - matches: is-template -fix: |- - ---- - -id: export-render has lang +id: export-render fragment language: html rule: - kind: attribute_value + kind: end_tag + regex: inside: - kind: quoted_attribute_value - inside: - kind: attribute - pattern: $NAME - has: - kind: attribute_name - regex: lang - inside: - matches: is-script + kind: script_element + any: + - precedes: + matches: is-fragment + pattern: + - follows: + matches: is-fragment + pattern: fix: |- - tsx + + export default () => ( + <> + $$$A + + ) + --- -id: export-render no lang +id: export-render remove template language: html rule: - kind: tag_name - regex: script - pattern: $NAME - inside: - matches: is-script - not: - has: - kind: attribute - has: - kind: attribute_name - regex: ^lang$ + any: + - matches: is-template + - matches: is-fragment fix: |- - script lang="tsx" diff --git a/src/utils/is-fragment.yml b/src/utils/is-fragment.yml new file mode 100644 index 0000000..01e6df5 --- /dev/null +++ b/src/utils/is-fragment.yml @@ -0,0 +1,13 @@ +id: is-fragment +language: html +rule: + kind: element + regex: ^ diff --git a/src/rules/jsx-directive/v-tag.yml b/src/rules/jsx-directive/v-tag.yml index f312440..884b96f 100644 --- a/src/rules/jsx-directive/v-tag.yml +++ b/src/rules/jsx-directive/v-tag.yml @@ -1,3 +1,22 @@ +id: v-self-closing-tag +language: html +rule: + kind: start_tag + pattern: $A + not: + precedes: + stopBy: end + kind: end_tag +transform: + B: + replace: + replace: '>$' + by: /> + source: $A +fix: $B + +--- + id: v-tag has lang language: html rule: From b251b079686ae6d8cba386870f6545533c5c79d2 Mon Sep 17 00:00:00 2001 From: gaokefei <260480378@qq.com> Date: Sun, 3 Dec 2023 01:41:28 +0800 Subject: [PATCH 03/32] fix(define-render): ignore comment in style block --- playground/src/App.vue | 7 +++++++ src/rules/setup-sfc.yml | 25 ++++++++++++++++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/playground/src/App.vue b/playground/src/App.vue index e680d7f..8b97cc4 100644 --- a/playground/src/App.vue +++ b/playground/src/App.vue @@ -32,3 +32,10 @@ const compRef = shallowRef() + + \ No newline at end of file diff --git a/src/rules/setup-sfc.yml b/src/rules/setup-sfc.yml index 62c86ef..fa5a25a 100644 --- a/src/rules/setup-sfc.yml +++ b/src/rules/setup-sfc.yml @@ -19,6 +19,24 @@ fix: |- --- +id: setup-sfc start ignore comment in style +language: html +rule: + kind: raw_text + pattern: $A + inside: + kind: style_element +transform: + B: + replace: + replace: \*/ + by: '*\/' + source: $A +fix: |- + $B + +--- + id: setup-sfc end comment language: html rule: @@ -44,7 +62,12 @@ transform: startChar: 2 endChar: -2 source: $A -fix: $B + C: + replace: + replace: \*\\/ + by: '*/' + source: $B +fix: $C --- From 4d74c7031243e6f3406e0bc67f67050d33b909a2 Mon Sep 17 00:00:00 2001 From: gaokefei <260480378@qq.com> Date: Sun, 3 Dec 2023 01:41:49 +0800 Subject: [PATCH 04/32] chore: release v1.0.9 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fc48b7b..9b91a84 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@vue-macros/cli", "type": "module", - "version": "1.0.8", + "version": "1.0.9", "packageManager": "pnpm@8.10.5", "description": "Rewriting at vue macros powered by ast-grep.", "author": "zhiyuanzmj ", From f760e80ab0e188e5733fac2205d55d075a932670 Mon Sep 17 00:00:00 2001 From: gaokefei <260480378@qq.com> Date: Sun, 3 Dec 2023 02:06:40 +0800 Subject: [PATCH 05/32] fix(jsx-directive): execute self-closing-tag first --- playground/src/components/Comp.vue | 2 +- src/index.ts | 1 + src/rules/jsx-directive/v-tag.yml | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/playground/src/components/Comp.vue b/playground/src/components/Comp.vue index 8a219fe..c4b46ee 100644 --- a/playground/src/components/Comp.vue +++ b/playground/src/components/Comp.vue @@ -5,7 +5,7 @@ bottom - +
Fragment
diff --git a/src/index.ts b/src/index.ts index 3f46c61..290e24a 100755 --- a/src/index.ts +++ b/src/index.ts @@ -96,6 +96,7 @@ async function useTsx(cb = () => {}, action = 'clean') { } if (['jsx-directive', 'setup-sfc'].includes(macro)) { + await $`${sg} scan -c ${config}.yml -U --filter '^self-closing-tag' ${target}` await $`${sg} scan -c ${config}.yml -U --filter '^v-' ${target}` await $`${sg} scan -c ${config}.yml -U --filter '^${macro === 'setup-sfc' ? 'export-render' : render}' ${target}` await useTsx(async () => { diff --git a/src/rules/jsx-directive/v-tag.yml b/src/rules/jsx-directive/v-tag.yml index 884b96f..912cc05 100644 --- a/src/rules/jsx-directive/v-tag.yml +++ b/src/rules/jsx-directive/v-tag.yml @@ -1,4 +1,4 @@ -id: v-self-closing-tag +id: self-closing-tag language: html rule: kind: start_tag From 53c0dc11dbce661a76e2d16a813795b3db9692ac Mon Sep 17 00:00:00 2001 From: gaokefei <260480378@qq.com> Date: Sun, 3 Dec 2023 02:07:34 +0800 Subject: [PATCH 06/32] chore: release v1.0.10 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9b91a84..370bec4 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@vue-macros/cli", "type": "module", - "version": "1.0.9", + "version": "1.0.10", "packageManager": "pnpm@8.10.5", "description": "Rewriting at vue macros powered by ast-grep.", "author": "zhiyuanzmj ", From 5cdf88e73a2534ba52e335b5b076c09b78ba0064 Mon Sep 17 00:00:00 2001 From: gaokefei <260480378@qq.com> Date: Sun, 3 Dec 2023 10:42:49 +0800 Subject: [PATCH 07/32] fix(jsx-directive): prevent format style block --- src/rules/setup-sfc.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/rules/setup-sfc.yml b/src/rules/setup-sfc.yml index fa5a25a..b077830 100644 --- a/src/rules/setup-sfc.yml +++ b/src/rules/setup-sfc.yml @@ -22,18 +22,18 @@ fix: |- id: setup-sfc start ignore comment in style language: html rule: - kind: raw_text + kind: style_element pattern: $A - inside: - kind: style_element + has: + kind: raw_text + regex: \*/ transform: B: replace: replace: \*/ by: '*\/' source: $A -fix: |- - $B +fix: $B --- @@ -79,4 +79,4 @@ rule: pattern: $A inside: kind: program -fix: |- +fix: '' From 2c48e4ceb6229fd6fba1588bb004a525c5319aa2 Mon Sep 17 00:00:00 2001 From: gaokefei <260480378@qq.com> Date: Sun, 3 Dec 2023 10:56:58 +0800 Subject: [PATCH 08/32] feat(cli): support --version option --- src/index.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/index.ts b/src/index.ts index 290e24a..463dff9 100755 --- a/src/index.ts +++ b/src/index.ts @@ -19,13 +19,9 @@ ${chalk.underline('Commands:')} ${chalk.underline('Options:')} -h, --help Print help (see more with '--help') - -V, --version Print version + -v, --version Print version `) } -if (argv._[0] !== 'sg' || argv.help || argv.h) { - printHelp() - process.exit() -} const dirname = path.dirname(fileURLToPath(import.meta.url)) if (argv.v || argv.version) { @@ -34,6 +30,11 @@ if (argv.v || argv.version) { process.exit() } +if (argv._[0] !== 'sg' || argv.help || argv.h) { + printHelp() + process.exit() +} + $.verbose = false let macro = await select({ From 990d5018b115ccfb677cd6461d762d9aeeddb11a Mon Sep 17 00:00:00 2001 From: gaokefei <260480378@qq.com> Date: Wed, 6 Dec 2023 00:01:09 +0800 Subject: [PATCH 09/32] feat(cli): add init command --- README.md | 15 ++- build.config.ts | 4 +- eslint.config.js | 1 - package.json | 4 +- playground/nuxt.config.ts | 4 + playground/package.json | 5 +- playground/pnpm-lock.yaml | 62 ++++++----- playground/src/App.vue | 6 +- playground/tsconfig.json | 10 +- playground/vite.config.ts | 14 +-- pnpm-lock.yaml | 75 +++++++------ src/common/constants.ts | 39 +++++++ src/common/general.ts | 4 + src/common/index.ts | 2 + src/index.ts | 100 +++--------------- src/init/index.ts | 57 ++++++++++ src/init/nuxt.ts | 27 +++++ src/init/package.ts | 38 +++++++ src/init/tsconfig.ts | 46 ++++++++ src/init/vite.ts | 68 ++++++++++++ src/sg/index.ts | 97 +++++++++++++++++ src/{ => sg}/rules/define-emits.yml | 0 src/{ => sg}/rules/define-slots.yml | 0 src/{ => sg}/rules/jsx-directive/v-bind.yml | 0 .../rules/jsx-directive/v-directive.yml | 0 src/{ => sg}/rules/jsx-directive/v-on.yml | 0 src/{ => sg}/rules/jsx-directive/v-slot.yml | 0 src/{ => sg}/rules/jsx-directive/v-tag.yml | 0 src/{ => sg}/rules/jsx-directive/v-text.yml | 0 src/{ => sg}/rules/render/define-render.yml | 0 src/{ => sg}/rules/render/export-render.yml | 0 src/{ => sg}/rules/setup-sfc.yml | 0 .../rules/short-vmodel.yml} | 6 +- src/{ => sg}/sgconfig-tsx.yml | 0 src/{ => sg}/sgconfig.yml | 0 src/{ => sg}/utils/is-event.yml | 0 src/{ => sg}/utils/is-fragment.yml | 0 src/{ => sg}/utils/is-script.yml | 0 src/{ => sg}/utils/is-template.yml | 0 39 files changed, 514 insertions(+), 170 deletions(-) create mode 100644 playground/nuxt.config.ts create mode 100644 src/common/constants.ts create mode 100644 src/common/general.ts create mode 100644 src/common/index.ts create mode 100644 src/init/index.ts create mode 100644 src/init/nuxt.ts create mode 100644 src/init/package.ts create mode 100644 src/init/tsconfig.ts create mode 100644 src/init/vite.ts create mode 100644 src/sg/index.ts rename src/{ => sg}/rules/define-emits.yml (100%) rename src/{ => sg}/rules/define-slots.yml (100%) rename src/{ => sg}/rules/jsx-directive/v-bind.yml (100%) rename src/{ => sg}/rules/jsx-directive/v-directive.yml (100%) rename src/{ => sg}/rules/jsx-directive/v-on.yml (100%) rename src/{ => sg}/rules/jsx-directive/v-slot.yml (100%) rename src/{ => sg}/rules/jsx-directive/v-tag.yml (100%) rename src/{ => sg}/rules/jsx-directive/v-text.yml (100%) rename src/{ => sg}/rules/render/define-render.yml (100%) rename src/{ => sg}/rules/render/export-render.yml (100%) rename src/{ => sg}/rules/setup-sfc.yml (100%) rename src/{rules/short-v-model.yml => sg/rules/short-vmodel.yml} (90%) rename src/{ => sg}/sgconfig-tsx.yml (100%) rename src/{ => sg}/sgconfig.yml (100%) rename src/{ => sg}/utils/is-event.yml (100%) rename src/{ => sg}/utils/is-fragment.yml (100%) rename src/{ => sg}/utils/is-script.yml (100%) rename src/{ => sg}/utils/is-template.yml (100%) diff --git a/README.md b/README.md index 96a0bfc..ce210bd 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ - [x] define-render - [x] export-render - [x] define-slots -- [x] short-v-model +- [x] short-vmodel - [x] setup-sfc @@ -19,11 +19,20 @@ pnpm add -g @vue-macros/cli ``` -### sg +### SG ```shell vue-macros sg ``` -## License +### Init +```shell +pnpm create vite my-vue-macros --template vue + +cd my-vue-macros + +vue-macros init +``` + +## Licenase MIT License © 2023-PRESENT [zhiyuanzmj](https://github.com/zhiyuanzmj) diff --git a/build.config.ts b/build.config.ts index 85ae905..9a4ce95 100644 --- a/build.config.ts +++ b/build.config.ts @@ -5,8 +5,8 @@ export default defineBuildConfig({ 'src/index', { builder: 'mkdist', - input: './src', - outDir: './dist', + input: './src/sg', + outDir: './dist/sg', }, ], clean: true, diff --git a/eslint.config.js b/eslint.config.js index 0563e5a..556284b 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -17,6 +17,5 @@ export default antfu( 'yaml/indent': 'off', }, }, - ignores: ['**/playground/**'], }, ) diff --git a/package.json b/package.json index 370bec4..48deeaa 100644 --- a/package.json +++ b/package.json @@ -42,8 +42,10 @@ "prepublishOnly": "pnpm run build" }, "dependencies": { - "@ast-grep/cli": "^0.14.1", + "@antfu/ni": "^0.21.12", + "@ast-grep/cli": "^0.14.2", "@inquirer/prompts": "^3.3.0", + "magicast": "^0.3.2", "pkg-types": "^1.0.3", "zx": "^7.2.3" }, diff --git a/playground/nuxt.config.ts b/playground/nuxt.config.ts new file mode 100644 index 0000000..59e408e --- /dev/null +++ b/playground/nuxt.config.ts @@ -0,0 +1,4 @@ +// @ts-expect-error ignore +export default defineNuxtConfig({ + +}) diff --git a/playground/package.json b/playground/package.json index ece7a8a..1bb809f 100644 --- a/playground/package.json +++ b/playground/package.json @@ -1,7 +1,7 @@ { "type": "module", "scripts": { - "sg": "tsx ../src/index.ts sg ./src", + "sg": "node ../dist/index.mjs", "dev": "vite", "build": "vite build" }, @@ -11,10 +11,11 @@ "devDependencies": { "@vitejs/plugin-vue": "^4.5.0", "@vitejs/plugin-vue-jsx": "^3.1.0", - "unplugin-vue-macros": "^2.7.0", "@vue-macros/volar": "^0.17.4", "@vue/babel-helper-vue-transform-on": "1.2.0-alpha.0", "tsx": "^4.6.1", + "typescript": "^5.3.2", + "unplugin-vue-macros": "^2.7.0", "vite": "^5.0.4" } } diff --git a/playground/pnpm-lock.yaml b/playground/pnpm-lock.yaml index b9a23d7..934cfe1 100644 --- a/playground/pnpm-lock.yaml +++ b/playground/pnpm-lock.yaml @@ -7,7 +7,7 @@ settings: dependencies: vue: specifier: ^3.3.9 - version: 3.3.9 + version: 3.3.9(typescript@5.3.2) devDependencies: '@vitejs/plugin-vue': @@ -18,16 +18,19 @@ devDependencies: version: 3.1.0(vite@5.0.4)(vue@3.3.9) '@vue-macros/volar': specifier: ^0.17.4 - version: 0.17.4(@vue-macros/reactivity-transform@0.4.0)(vue@3.3.9) + version: 0.17.4(@vue-macros/reactivity-transform@0.4.0)(typescript@5.3.2)(vue@3.3.9) '@vue/babel-helper-vue-transform-on': specifier: 1.2.0-alpha.0 version: 1.2.0-alpha.0 tsx: specifier: ^4.6.1 version: 4.6.1 + typescript: + specifier: ^5.3.2 + version: 5.3.2 unplugin-vue-macros: specifier: ^2.7.0 - version: 2.7.0(vite@5.0.4)(vue@3.3.9) + version: 2.7.0(typescript@5.3.2)(vite@5.0.4)(vue@3.3.9) vite: specifier: ^5.0.4 version: 5.0.4 @@ -883,7 +886,7 @@ packages: '@babel/plugin-transform-typescript': 7.23.5(@babel/core@7.23.5) '@vue/babel-plugin-jsx': 1.1.5(@babel/core@7.23.5) vite: 5.0.4 - vue: 3.3.9 + vue: 3.3.9(typescript@5.3.2) transitivePeerDependencies: - supports-color dev: true @@ -896,7 +899,7 @@ packages: vue: ^3.2.25 dependencies: vite: 5.0.4 - vue: 3.3.9 + vue: 3.3.9(typescript@5.3.2) dev: true /@volar/language-core@1.10.10: @@ -972,7 +975,7 @@ packages: ast-kit: 0.11.2 local-pkg: 0.5.0 magic-string-ast: 0.3.0 - vue: 3.3.9 + vue: 3.3.9(typescript@5.3.2) transitivePeerDependencies: - rollup dev: true @@ -986,7 +989,7 @@ packages: '@vue-macros/api': 0.9.0(vue@3.3.9) '@vue-macros/common': 1.9.0(vue@3.3.9) unplugin: 1.5.1 - vue: 3.3.9 + vue: 3.3.9(typescript@5.3.2) transitivePeerDependencies: - rollup dev: true @@ -1017,7 +1020,7 @@ packages: '@vue-macros/api': 0.9.0(vue@3.3.9) '@vue-macros/common': 1.9.0(vue@3.3.9) unplugin: 1.5.1 - vue: 3.3.9 + vue: 3.3.9(typescript@5.3.2) transitivePeerDependencies: - rollup dev: true @@ -1030,7 +1033,7 @@ packages: dependencies: '@vue-macros/common': 1.9.0(vue@3.3.9) unplugin: 1.5.1 - vue: 3.3.9 + vue: 3.3.9(typescript@5.3.2) transitivePeerDependencies: - rollup dev: true @@ -1045,7 +1048,7 @@ packages: '@vue-macros/common': 1.9.0(vue@3.3.9) '@vue-macros/reactivity-transform': 0.4.0(vue@3.3.9) unplugin: 1.5.1 - vue: 3.3.9 + vue: 3.3.9(typescript@5.3.2) transitivePeerDependencies: - rollup dev: true @@ -1058,7 +1061,7 @@ packages: dependencies: '@vue-macros/common': 1.9.0(vue@3.3.9) unplugin: 1.5.1 - vue: 3.3.9 + vue: 3.3.9(typescript@5.3.2) transitivePeerDependencies: - rollup dev: true @@ -1071,12 +1074,12 @@ packages: dependencies: '@vue-macros/common': 1.9.0(vue@3.3.9) unplugin: 1.5.1 - vue: 3.3.9 + vue: 3.3.9(typescript@5.3.2) transitivePeerDependencies: - rollup dev: true - /@vue-macros/devtools@0.2.0(vite@5.0.4): + /@vue-macros/devtools@0.2.0(typescript@5.3.2)(vite@5.0.4): resolution: {integrity: sha512-jHjvY1bFgQLe/2+5pBOG4fgmL5MPhsqQDj7Barhj8YN+Oe7U2hBImvfAyOGpqd2uucLOWQTP1cWrp3q9b1svsg==} engines: {node: '>=16.14.0'} peerDependencies: @@ -1087,7 +1090,7 @@ packages: dependencies: sirv: 2.0.3 vite: 5.0.4 - vue: 3.3.9 + vue: 3.3.9(typescript@5.3.2) transitivePeerDependencies: - typescript dev: true @@ -1101,7 +1104,7 @@ packages: '@vue-macros/common': 1.9.0(vue@3.3.9) '@vue/compiler-sfc': 3.3.9 unplugin: 1.5.1 - vue: 3.3.9 + vue: 3.3.9(typescript@5.3.2) transitivePeerDependencies: - rollup dev: true @@ -1114,7 +1117,7 @@ packages: dependencies: '@vue-macros/common': 1.9.0(vue@3.3.9) unplugin: 1.5.1 - vue: 3.3.9 + vue: 3.3.9(typescript@5.3.2) transitivePeerDependencies: - rollup dev: true @@ -1128,7 +1131,7 @@ packages: '@vue-macros/common': 1.9.0(vue@3.3.9) '@vue/compiler-sfc': 3.3.9 unplugin: 1.5.1 - vue: 3.3.9 + vue: 3.3.9(typescript@5.3.2) transitivePeerDependencies: - rollup dev: true @@ -1179,7 +1182,7 @@ packages: '@vue/shared': 3.3.9 magic-string: 0.30.5 unplugin: 1.5.1 - vue: 3.3.9 + vue: 3.3.9(typescript@5.3.2) transitivePeerDependencies: - rollup dev: true @@ -1251,7 +1254,7 @@ packages: - vue dev: true - /@vue-macros/volar@0.17.4(@vue-macros/reactivity-transform@0.4.0)(vue@3.3.9): + /@vue-macros/volar@0.17.4(@vue-macros/reactivity-transform@0.4.0)(typescript@5.3.2)(vue@3.3.9): resolution: {integrity: sha512-bPOp9KPAlm1nxIYPVAKoiKS5ERQMgSROAs6fQdlYv9sE4ZgxKpha3S0ZBCFniXkRwOwGaEfMqGkflo0V1buEfw==} engines: {node: '>=16.14.0'} peerDependencies: @@ -1265,7 +1268,7 @@ packages: '@vue-macros/define-props': 2.0.0(@vue-macros/reactivity-transform@0.4.0)(vue@3.3.9) '@vue-macros/short-bind': 0.2.0(vue@3.3.9) '@vue-macros/short-vmodel': 1.4.0(vue@3.3.9) - '@vue/language-core': 1.8.22 + '@vue/language-core': 1.8.22(typescript@5.3.2) transitivePeerDependencies: - '@vue-macros/reactivity-transform' - rollup @@ -1334,7 +1337,7 @@ packages: '@vue/compiler-dom': 3.3.9 '@vue/shared': 3.3.9 - /@vue/language-core@1.8.22: + /@vue/language-core@1.8.22(typescript@5.3.2): resolution: {integrity: sha512-bsMoJzCrXZqGsxawtUea1cLjUT9dZnDsy5TuZ+l1fxRMzUGQUG9+Ypq4w//CqpWmrx7nIAJpw2JVF/t258miRw==} peerDependencies: typescript: '*' @@ -1349,6 +1352,7 @@ packages: computeds: 0.0.1 minimatch: 9.0.3 muggle-string: 0.3.1 + typescript: 5.3.2 vue-template-compiler: 2.7.15 dev: true @@ -1386,7 +1390,7 @@ packages: dependencies: '@vue/compiler-ssr': 3.3.9 '@vue/shared': 3.3.9 - vue: 3.3.9 + vue: 3.3.9(typescript@5.3.2) /@vue/shared@3.3.9: resolution: {integrity: sha512-ZE0VTIR0LmYgeyhurPTpy4KzKsuDyQbMSdM49eKkMnT5X4VfFBLysMzjIZhLEFQYjjOVVfbvUDHckwjDFiO2eA==} @@ -1911,6 +1915,11 @@ packages: fsevents: 2.3.3 dev: true + /typescript@5.3.2: + resolution: {integrity: sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==} + engines: {node: '>=14.17'} + hasBin: true + /ufo@1.3.2: resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} dev: true @@ -1950,7 +1959,7 @@ packages: - vue dev: true - /unplugin-vue-macros@2.7.0(vite@5.0.4)(vue@3.3.9): + /unplugin-vue-macros@2.7.0(typescript@5.3.2)(vite@5.0.4)(vue@3.3.9): resolution: {integrity: sha512-SztF4ARBbrd1yuH4FbJOhp22rTvzakjzJUHTKLRQkZY1KMkIzx/KAdzEkxjAG2Xteqb29SYrc7XcoPdrUPMCCw==} engines: {node: '>=16.14.0'} peerDependencies: @@ -1967,7 +1976,7 @@ packages: '@vue-macros/define-props-refs': 1.2.0(vue@3.3.9) '@vue-macros/define-render': 1.5.0(vue@3.3.9) '@vue-macros/define-slots': 1.1.0(vue@3.3.9) - '@vue-macros/devtools': 0.2.0(vite@5.0.4) + '@vue-macros/devtools': 0.2.0(typescript@5.3.2)(vite@5.0.4) '@vue-macros/export-expose': 0.1.0(vue@3.3.9) '@vue-macros/export-props': 0.4.0(vue@3.3.9) '@vue-macros/export-render': 0.2.0(vue@3.3.9) @@ -1984,7 +1993,7 @@ packages: unplugin: 1.5.1 unplugin-combine: 0.8.1(vite@5.0.4) unplugin-vue-define-options: 1.4.0(vue@3.3.9) - vue: 3.3.9 + vue: 3.3.9(typescript@5.3.2) transitivePeerDependencies: - '@vueuse/core' - esbuild @@ -2056,7 +2065,7 @@ packages: he: 1.2.0 dev: true - /vue@3.3.9: + /vue@3.3.9(typescript@5.3.2): resolution: {integrity: sha512-sy5sLCTR8m6tvUk1/ijri3Yqzgpdsmxgj6n6yl7GXXCXqVbmW2RCXe9atE4cEI6Iv7L89v5f35fZRRr5dChP9w==} peerDependencies: typescript: '*' @@ -2069,6 +2078,7 @@ packages: '@vue/runtime-dom': 3.3.9 '@vue/server-renderer': 3.3.9(vue@3.3.9) '@vue/shared': 3.3.9 + typescript: 5.3.2 /webpack-sources@3.2.3: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} diff --git a/playground/src/App.vue b/playground/src/App.vue index 8b97cc4..dbb5afc 100644 --- a/playground/src/App.vue +++ b/playground/src/App.vue @@ -1,5 +1,5 @@ diff --git a/src/init/package.ts b/src/init/package.ts index 9f17883..0c0d428 100644 --- a/src/init/package.ts +++ b/src/init/package.ts @@ -21,7 +21,7 @@ export async function rewritePackage(macros: VueMacros, target: string) { && !packageJson.optionalDependencies?.[dep], ) - if (devDeps) + if (devDeps.length) return $`${ni} ${devDeps} -D` } diff --git a/src/sg/rules/setup-sfc.yml b/src/sg/rules/setup-sfc.yml index b077830..7b4b551 100644 --- a/src/sg/rules/setup-sfc.yml +++ b/src/sg/rules/setup-sfc.yml @@ -80,3 +80,59 @@ rule: inside: kind: program fix: '' + +--- + +id: setup-sfc delete .vue suffix in ts +language: ts +rule: + kind: string_fragment + regex: \.vue$ + pattern: $A + any: + - inside: + kind: string + inside: + kind: import_statement + - inside: + kind: string + inside: + kind: arguments + follows: + kind: import + stopBy: end +transform: + B: + replace: + replace: vue$ + by: setup.tsx + source: $A +fix: $B + +--- + +id: setup-sfc delete .vue suffix in tsx +language: tsx +rule: + kind: string_fragment + regex: \.vue$ + pattern: $A + any: + - inside: + kind: string + inside: + kind: import_statement + - inside: + kind: string + inside: + kind: arguments + follows: + kind: import + stopBy: end +transform: + B: + replace: + replace: vue$ + by: setup.tsx + source: $A +fix: $B From a2559c1167891faf0a87df805e19da609566b9a8 Mon Sep 17 00:00:00 2001 From: gaokefei <260480378@qq.com> Date: Wed, 6 Dec 2023 17:33:23 +0800 Subject: [PATCH 13/32] feat(sg): support single file --- src/init/tsconfig.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/init/tsconfig.ts b/src/init/tsconfig.ts index 1c2cacf..deb3b2e 100644 --- a/src/init/tsconfig.ts +++ b/src/init/tsconfig.ts @@ -1,13 +1,16 @@ import type { TSConfig } from 'pkg-types' import { readTSConfig, writeTSConfig } from 'pkg-types' +import { fs } from 'zx' import type { VueMacros } from '../common' import { vueMacros } from '../common' export async function rewriteTsConfig(selectedMacros: VueMacros, target: string) { - const tsconfig = await readTSConfig(target) as TSConfig & { vueCompilerOptions?: any } - if (!tsconfig) + const filename = `${target}/nuxt.config.ts` + if (!await fs.pathExists(filename)) return + const tsconfig = await readTSConfig(target) as TSConfig & { vueCompilerOptions?: any } + const macros = vueMacros.reduce((result, macro) => { if (macro.volar) { if (['stable', 'official'].includes(macro.status)) From c1cacf6839b17092319f584289276c4cf51e85f5 Mon Sep 17 00:00:00 2001 From: gaokefei <260480378@qq.com> Date: Wed, 6 Dec 2023 21:27:21 +0800 Subject: [PATCH 14/32] docs: up readme --- README.md | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index dacd8ac..82c0aab 100644 --- a/README.md +++ b/README.md @@ -2,37 +2,39 @@ @vue-macros/cli is a CLI for rewriting at Vue Macros powered by [ast-grep](https://github.com/ast-grep/ast-grep). -## Support vue macros - -- [x] jsx-directive -- [x] define-render -- [x] export-render -- [x] define-slots -- [x] short-vmodel -- [x] setup-sfc - - -## Usage - +## Installation ```shell # install pnpm add -g @vue-macros/cli ``` +## Usage + ### SG + +Rewriting at Vue Macros. + ```shell vue-macros sg ``` -### Init +supported vue macros: + +- [x] jsx-directive +- [x] define-render +- [x] export-render +- [x] define-slots +- [x] short-vmodel +- [x] setup-sfc + +### Initialization + ```shell pnpm create vite my-vue-macros --template vue-ts - cd my-vue-macros - vue-macros init ``` -## Licenase +## License MIT License © 2023-PRESENT [zhiyuanzmj](https://github.com/zhiyuanzmj) From 8fb12776b639deda1b8fbf128e1598102e860e62 Mon Sep 17 00:00:00 2001 From: gaokefei <260480378@qq.com> Date: Wed, 6 Dec 2023 21:27:40 +0800 Subject: [PATCH 15/32] chore: release v1.1.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 83300b4..ea6db2c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@vue-macros/cli", "type": "module", - "version": "1.1.0", + "version": "1.1.1", "packageManager": "pnpm@8.10.5", "description": "Rewriting at vue macros powered by ast-grep.", "author": "zhiyuanzmj ", From 06f7e3697336842bb0eda5bd7733c5cc29dcfd62 Mon Sep 17 00:00:00 2001 From: gaokefei <260480378@qq.com> Date: Thu, 7 Dec 2023 17:15:08 +0800 Subject: [PATCH 16/32] fix(define-slots): convert to slot.default if no attribute --- README.md | 2 +- package.json | 5 + pnpm-lock.yaml | 754 ++++++++++++++++++++++++++++++++++ src/sg/rules/define-slots.yml | 1 - 4 files changed, 760 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 82c0aab..7a444cf 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Rewriting at Vue Macros. vue-macros sg ``` -supported vue macros: +supported macros: - [x] jsx-directive - [x] define-render diff --git a/package.json b/package.json index ea6db2c..b3b4dd4 100644 --- a/package.json +++ b/package.json @@ -51,10 +51,15 @@ }, "devDependencies": { "@antfu/eslint-config": "^2.1.2", + "@vitejs/plugin-vue": "^4.5.1", + "@vitejs/plugin-vue-jsx": "^3.1.0", + "@vue-macros/volar": "^0.17.4", + "@vue/babel-helper-vue-transform-on": "1.2.0-alpha.0", "bumpp": "^9.2.0", "typescript": "^5.3.2", "unbuild": "^2.0.0", "unocss": "^0.57.7", + "unplugin-vue-macros": "^2.7.0", "vitest": "^0.34.6" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5e5c6c5..07dc605 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -28,6 +28,18 @@ devDependencies: '@antfu/eslint-config': specifier: ^2.1.2 version: 2.1.2(eslint@8.54.0)(typescript@5.3.2)(vitest@0.34.6) + '@vitejs/plugin-vue': + specifier: ^4.5.1 + version: 4.5.1(vite@5.0.4)(vue@3.3.10) + '@vitejs/plugin-vue-jsx': + specifier: ^3.1.0 + version: 3.1.0(vite@5.0.4)(vue@3.3.10) + '@vue-macros/volar': + specifier: ^0.17.4 + version: 0.17.4(@vue-macros/reactivity-transform@0.4.0)(rollup@3.29.4)(typescript@5.3.2)(vue@3.3.10) + '@vue/babel-helper-vue-transform-on': + specifier: 1.2.0-alpha.0 + version: 1.2.0-alpha.0 bumpp: specifier: ^9.2.0 version: 9.2.0 @@ -40,6 +52,9 @@ devDependencies: unocss: specifier: ^0.57.7 version: 0.57.7(postcss@8.4.31)(rollup@3.29.4)(vite@5.0.4) + unplugin-vue-macros: + specifier: ^2.7.0 + version: 2.7.0(rollup@3.29.4)(typescript@5.3.2)(vite@5.0.4)(vue@3.3.10) vitest: specifier: ^0.34.6 version: 0.34.6 @@ -1712,6 +1727,33 @@ packages: - rollup dev: true + /@vitejs/plugin-vue-jsx@3.1.0(vite@5.0.4)(vue@3.3.10): + resolution: {integrity: sha512-w9M6F3LSEU5kszVb9An2/MmXNxocAnUb3WhRr8bHlimhDrXNt6n6D2nJQR3UXpGlZHh/EsgouOHCsM8V3Ln+WA==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.0.0 || ^5.0.0 + vue: ^3.0.0 + dependencies: + '@babel/core': 7.23.5 + '@babel/plugin-transform-typescript': 7.23.5(@babel/core@7.23.5) + '@vue/babel-plugin-jsx': 1.1.5(@babel/core@7.23.5) + vite: 5.0.4(@types/node@20.10.1) + vue: 3.3.10(typescript@5.3.2) + transitivePeerDependencies: + - supports-color + dev: true + + /@vitejs/plugin-vue@4.5.1(vite@5.0.4)(vue@3.3.10): + resolution: {integrity: sha512-DaUzYFr+2UGDG7VSSdShKa9sIWYBa1LL8KC0MNOf2H5LjcTPjob0x8LbkqXWmAtbANJCkpiQTj66UVcQkN2s3g==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.0.0 || ^5.0.0 + vue: ^3.2.25 + dependencies: + vite: 5.0.4(@types/node@20.10.1) + vue: 3.3.10(typescript@5.3.2) + dev: true + /@vitest/expect@0.34.6: resolution: {integrity: sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==} dependencies: @@ -1750,6 +1792,509 @@ packages: pretty-format: 29.7.0 dev: true + /@volar/language-core@1.10.10: + resolution: {integrity: sha512-nsV1o3AZ5n5jaEAObrS3MWLBWaGwUj/vAsc15FVNIv+DbpizQRISg9wzygsHBr56ELRH8r4K75vkYNMtsSNNWw==} + dependencies: + '@volar/source-map': 1.10.10 + dev: true + + /@volar/source-map@1.10.10: + resolution: {integrity: sha512-GVKjLnifV4voJ9F0vhP56p4+F3WGf+gXlRtjFZsv6v3WxBTWU3ZVeaRaEHJmWrcv5LXmoYYpk/SC25BKemPRkg==} + dependencies: + muggle-string: 0.3.1 + dev: true + + /@vue-macros/api@0.9.0(rollup@3.29.4)(vue@3.3.10): + resolution: {integrity: sha512-PYV/yhoOh1F5z0mFg0/A8OhuwmDI/ta+XwYkNZYyuA9QZ1jMWZFOA0ZdUAjTCHG6AdVFbkajR+XyxTNnQ+YytQ==} + engines: {node: '>=16.14.0'} + dependencies: + '@babel/types': 7.23.5 + '@vue-macros/common': 1.9.0(rollup@3.29.4)(vue@3.3.10) + resolve.exports: 2.0.2 + transitivePeerDependencies: + - rollup + - vue + dev: true + + /@vue-macros/better-define@1.7.0(rollup@3.29.4)(vue@3.3.10): + resolution: {integrity: sha512-MO+wAWFU8FF8YPMCmonv18FRJko7OZLy2wT7ia0RKwDCgu7IEKnSbLIfnUNwUsceVAPGOrVapDiIcQ+VVMJoiw==} + engines: {node: '>=16.14.0'} + dependencies: + '@vue-macros/api': 0.9.0(rollup@3.29.4)(vue@3.3.10) + '@vue-macros/common': 1.9.0(rollup@3.29.4)(vue@3.3.10) + unplugin: 1.5.1 + transitivePeerDependencies: + - rollup + - vue + dev: true + + /@vue-macros/boolean-prop@0.3.0(rollup@3.29.4)(vue@3.3.10): + resolution: {integrity: sha512-QhG3FgusmtQ0dIvrs8SsgBUg0micfYdXmNJo1YPh+VykHwPcmw4kuTBSJsbzMM09I+62vgKi6FTYt3nZ74DBIA==} + engines: {node: '>=16.14.0'} + dependencies: + '@vue-macros/common': 1.9.0(rollup@3.29.4)(vue@3.3.10) + '@vue/compiler-core': 3.3.10 + transitivePeerDependencies: + - rollup + - vue + dev: true + + /@vue-macros/chain-call@0.2.0(rollup@3.29.4)(vue@3.3.10): + resolution: {integrity: sha512-0fC6mxYSJfU3hHrRwgLho9rZSgkIAZo0OKIWW7ZyrAlyNhZtq+8c7sq59samPFdZpYcwTfOBUcK5YuC3pjT9VQ==} + engines: {node: '>=16.14.0'} + dependencies: + '@vue-macros/common': 1.9.0(rollup@3.29.4)(vue@3.3.10) + unplugin: 1.5.1 + transitivePeerDependencies: + - rollup + - vue + dev: true + + /@vue-macros/common@1.9.0(rollup@3.29.4)(vue@3.3.10): + resolution: {integrity: sha512-LbfRHDkceuokkLlVuQW9Wq3ZLmRs6KIDPzCjUvvL14HB4GslWdtvBB1suFfNs6VMvh9Zj30cEKF/EAP7QBCZ6Q==} + engines: {node: '>=16.14.0'} + peerDependencies: + vue: ^2.7.0 || ^3.2.25 + peerDependenciesMeta: + vue: + optional: true + dependencies: + '@babel/types': 7.23.5 + '@rollup/pluginutils': 5.1.0(rollup@3.29.4) + '@vue/compiler-sfc': 3.3.10 + ast-kit: 0.11.3(rollup@3.29.4) + local-pkg: 0.5.0 + magic-string-ast: 0.3.0 + vue: 3.3.10(typescript@5.3.2) + transitivePeerDependencies: + - rollup + dev: true + + /@vue-macros/define-emit@0.2.0(rollup@3.29.4)(vue@3.3.10): + resolution: {integrity: sha512-h0BuYXD+3FcCjlWeCNp06n4wZfExrnl8rBs6KUTjGXwVglxjI6RHJT2kfK+p3TJpPCwvNct+iBS6CYA1w5eTfQ==} + engines: {node: '>=16.14.0'} + peerDependencies: + vue: ^2.7.0 || ^3.2.25 + dependencies: + '@vue-macros/api': 0.9.0(rollup@3.29.4)(vue@3.3.10) + '@vue-macros/common': 1.9.0(rollup@3.29.4)(vue@3.3.10) + unplugin: 1.5.1 + vue: 3.3.10(typescript@5.3.2) + transitivePeerDependencies: + - rollup + dev: true + + /@vue-macros/define-models@1.2.0(rollup@3.29.4)(vue@3.3.10): + resolution: {integrity: sha512-h4drdveUgNYxy+6tylFg/oGIStT7dZ4uo4CMXl5VkLzso78Yhsxqdz00ccm6gaAB9jdDCry2RGqL5ACEyDmLZA==} + engines: {node: '>=16.14.0'} + peerDependencies: + '@vueuse/core': '>=9.0.0' + peerDependenciesMeta: + '@vueuse/core': + optional: true + dependencies: + '@vue-macros/common': 1.9.0(rollup@3.29.4)(vue@3.3.10) + ast-walker-scope: 0.5.0(rollup@3.29.4) + unplugin: 1.5.1 + transitivePeerDependencies: + - rollup + - vue + dev: true + + /@vue-macros/define-prop@0.3.0(rollup@3.29.4)(vue@3.3.10): + resolution: {integrity: sha512-aiu+tJp8eIT2wigzbP5lH0KoZhyTqiw2rysEVEK193logk6T8Fls5Yxf8YmOetrzpwOp6M4RciACGyiILLrsug==} + engines: {node: '>=16.14.0'} + peerDependencies: + vue: ^2.7.0 || ^3.2.25 + dependencies: + '@vue-macros/api': 0.9.0(rollup@3.29.4)(vue@3.3.10) + '@vue-macros/common': 1.9.0(rollup@3.29.4)(vue@3.3.10) + unplugin: 1.5.1 + vue: 3.3.10(typescript@5.3.2) + transitivePeerDependencies: + - rollup + dev: true + + /@vue-macros/define-props-refs@1.2.0(rollup@3.29.4)(vue@3.3.10): + resolution: {integrity: sha512-ZWA9raSedk+eRfailc9gkyA4PHJrMGDg/tzV/yp89dDNVTzp9M1qQdLTV9S6R0ern/48ZvSYcz4n8ZVNwHg+Aw==} + engines: {node: '>=16.14.0'} + peerDependencies: + vue: ^2.7.0 || ^3.2.25 + dependencies: + '@vue-macros/common': 1.9.0(rollup@3.29.4)(vue@3.3.10) + unplugin: 1.5.1 + vue: 3.3.10(typescript@5.3.2) + transitivePeerDependencies: + - rollup + dev: true + + /@vue-macros/define-props@2.0.0(@vue-macros/reactivity-transform@0.4.0)(rollup@3.29.4)(vue@3.3.10): + resolution: {integrity: sha512-OYdw4Bz12FDUHbHL5Ql5T5rO0V0laITbEyKGTvYwpeBim4oyTx+EodIx+edvgquLHtMYPabwRKJ6v9XoTlxc0g==} + engines: {node: '>=16.14.0'} + peerDependencies: + '@vue-macros/reactivity-transform': ^0.4.0 + vue: ^2.7.0 || ^3.2.25 + dependencies: + '@vue-macros/common': 1.9.0(rollup@3.29.4)(vue@3.3.10) + '@vue-macros/reactivity-transform': 0.4.0(rollup@3.29.4)(vue@3.3.10) + unplugin: 1.5.1 + vue: 3.3.10(typescript@5.3.2) + transitivePeerDependencies: + - rollup + dev: true + + /@vue-macros/define-render@1.5.0(rollup@3.29.4)(vue@3.3.10): + resolution: {integrity: sha512-QgScJaWRkZ6iYwm8k0uVlhPCfdGJYkMbkLr8Pr/pTRrjmXl3W+f7ZRbBDPKl4GBxVdJ+pHWjP0NsYuPb1dUXtw==} + engines: {node: '>=16.14.0'} + peerDependencies: + vue: ^2.7.0 || ^3.0.0 + dependencies: + '@vue-macros/common': 1.9.0(rollup@3.29.4)(vue@3.3.10) + unplugin: 1.5.1 + vue: 3.3.10(typescript@5.3.2) + transitivePeerDependencies: + - rollup + dev: true + + /@vue-macros/define-slots@1.1.0(rollup@3.29.4)(vue@3.3.10): + resolution: {integrity: sha512-vkIxGrFhqdd8fvEuIGaIVw3ex0TB8MZFzGH5digCPOxBsBEeNNlTlwS3D63Qd5mCDpVsZy9xkuv159T9GS1DIg==} + engines: {node: '>=16.14.0'} + peerDependencies: + vue: ^2.7.0 || ^3.0.0 + dependencies: + '@vue-macros/common': 1.9.0(rollup@3.29.4)(vue@3.3.10) + unplugin: 1.5.1 + vue: 3.3.10(typescript@5.3.2) + transitivePeerDependencies: + - rollup + dev: true + + /@vue-macros/devtools@0.2.0(typescript@5.3.2)(vite@5.0.4): + resolution: {integrity: sha512-jHjvY1bFgQLe/2+5pBOG4fgmL5MPhsqQDj7Barhj8YN+Oe7U2hBImvfAyOGpqd2uucLOWQTP1cWrp3q9b1svsg==} + engines: {node: '>=16.14.0'} + peerDependencies: + vite: ^4.0.0 || ^5.0.0-0 + peerDependenciesMeta: + vite: + optional: true + dependencies: + sirv: 2.0.3 + vite: 5.0.4(@types/node@20.10.1) + vue: 3.3.10(typescript@5.3.2) + transitivePeerDependencies: + - typescript + dev: true + + /@vue-macros/export-expose@0.1.0(rollup@3.29.4)(vue@3.3.10): + resolution: {integrity: sha512-R1izR6LHS6yjJKI7IPDCwW385ct4KjQJVXz6jk6sL6Wk+iZbybDiGzzzK/jqpMlyzDvX0qVZ8vjACm1lidvLzA==} + engines: {node: '>=16.14.0'} + peerDependencies: + vue: ^2.7.0 || ^3.2.25 + dependencies: + '@vue-macros/common': 1.9.0(rollup@3.29.4)(vue@3.3.10) + '@vue/compiler-sfc': 3.3.10 + unplugin: 1.5.1 + vue: 3.3.10(typescript@5.3.2) + transitivePeerDependencies: + - rollup + dev: true + + /@vue-macros/export-props@0.4.0(rollup@3.29.4)(vue@3.3.10): + resolution: {integrity: sha512-XjDmw+OCxWOR4OPARH5aosvrarCk/TF7szE3ynx4UXfhCWS7lPJpLHwYkF/pfbx6FAFDUO81Drrey2BlhzTLvA==} + engines: {node: '>=16.14.0'} + peerDependencies: + vue: ^2.7.0 || ^3.2.25 + dependencies: + '@vue-macros/common': 1.9.0(rollup@3.29.4)(vue@3.3.10) + unplugin: 1.5.1 + vue: 3.3.10(typescript@5.3.2) + transitivePeerDependencies: + - rollup + dev: true + + /@vue-macros/export-render@0.2.0(rollup@3.29.4)(vue@3.3.10): + resolution: {integrity: sha512-kmh6drhExv3r42DPGHo1UOtEX2pw2G5CTHvHg0FQiQAMltWd11C0/LXYRR/Zorh9EoMVMAObRnw5HrcdIoQEPA==} + engines: {node: '>=16.14.0'} + peerDependencies: + vue: ^2.7.0 || ^3.2.25 + dependencies: + '@vue-macros/common': 1.9.0(rollup@3.29.4)(vue@3.3.10) + '@vue/compiler-sfc': 3.3.10 + unplugin: 1.5.1 + vue: 3.3.10(typescript@5.3.2) + transitivePeerDependencies: + - rollup + dev: true + + /@vue-macros/hoist-static@1.5.0(rollup@3.29.4)(vue@3.3.10): + resolution: {integrity: sha512-ZhPOrnBftGmot+tLrf2db3C2LFP6hvHTOlO2tvD4r9FdhGS+ZNwKYvAiYYxH8Yevs6ZdgffAz+Gpz02QHggKuw==} + engines: {node: '>=16.14.0'} + dependencies: + '@vue-macros/common': 1.9.0(rollup@3.29.4)(vue@3.3.10) + unplugin: 1.5.1 + transitivePeerDependencies: + - rollup + - vue + dev: true + + /@vue-macros/jsx-directive@0.7.0(rollup@3.29.4)(vue@3.3.10): + resolution: {integrity: sha512-OSS7ZnwQueUkEYcjoe4VAeJLp+kkFa0l5mm4fkPQs9zK1uq4D+kCw+Hhg9OyrKNdiWpNutdUHgolJPNsqXUp7A==} + engines: {node: '>=16.14.0'} + dependencies: + '@vue-macros/common': 1.9.0(rollup@3.29.4)(vue@3.3.10) + unplugin: 1.5.1 + transitivePeerDependencies: + - rollup + - vue + dev: true + + /@vue-macros/named-template@0.4.0(rollup@3.29.4)(vue@3.3.10): + resolution: {integrity: sha512-dItF6N/WMWH0INQ5XqZ2SsFo5pZ+Q0muOWfTpi52GaeD96+N02yYUdT+wsZOdNu0VvLh/QuHxmDRCiiROmpL0Q==} + engines: {node: '>=16.14.0'} + dependencies: + '@vue-macros/common': 1.9.0(rollup@3.29.4)(vue@3.3.10) + '@vue/compiler-dom': 3.3.10 + unplugin: 1.5.1 + transitivePeerDependencies: + - rollup + - vue + dev: true + + /@vue-macros/reactivity-transform@0.4.0(rollup@3.29.4)(vue@3.3.10): + resolution: {integrity: sha512-3DG+FWkIZe5xZJhIdxyieIYcDKJGC3aUab1JWtEOkS8Q21rLpu6VKUjV6TmB5LNyLSGVp+7de/87Ptd6C6RHOA==} + engines: {node: '>=16.14.0'} + peerDependencies: + vue: ^2.7.0 || ^3.2.25 + dependencies: + '@babel/parser': 7.23.5 + '@vue-macros/common': 1.9.0(rollup@3.29.4)(vue@3.3.10) + '@vue/compiler-core': 3.3.10 + '@vue/shared': 3.3.10 + magic-string: 0.30.5 + unplugin: 1.5.1 + vue: 3.3.10(typescript@5.3.2) + transitivePeerDependencies: + - rollup + dev: true + + /@vue-macros/setup-block@0.3.0(rollup@3.29.4)(vue@3.3.10): + resolution: {integrity: sha512-URaruhrjrMnSAWt+elPblfqOUhL1y7uZKFzrfgPlr/uuyQGDsmxK/ZEw5gMY77rrJwcEqNfHDkNR8BV27gp/3w==} + engines: {node: '>=16.14.0'} + dependencies: + '@vue-macros/common': 1.9.0(rollup@3.29.4)(vue@3.3.10) + '@vue/compiler-dom': 3.3.10 + unplugin: 1.5.1 + transitivePeerDependencies: + - rollup + - vue + dev: true + + /@vue-macros/setup-component@0.17.0(rollup@3.29.4)(vue@3.3.10): + resolution: {integrity: sha512-s/jwPQ+lGp3O0kgCFtPkH2+kvLtCLJ04iP+gTQwRXpgXDuQ6UlRdBday5wuhV32cq8C2oLHmKwSvYX/8N7WkRg==} + engines: {node: '>=16.14.0'} + dependencies: + '@vue-macros/common': 1.9.0(rollup@3.29.4)(vue@3.3.10) + unplugin: 1.5.1 + transitivePeerDependencies: + - rollup + - vue + dev: true + + /@vue-macros/setup-sfc@0.17.0(rollup@3.29.4)(vue@3.3.10): + resolution: {integrity: sha512-4cCoEl+tzEuJtHg4q6MlTLyM1M/xf+CC+d12QaCGbUgALfUAIa85sB8XnnPgxxu2A6MpD+4uE+6BrJHBOXIiVw==} + engines: {node: '>=16.14.0'} + dependencies: + '@vue-macros/common': 1.9.0(rollup@3.29.4)(vue@3.3.10) + unplugin: 1.5.1 + transitivePeerDependencies: + - rollup + - vue + dev: true + + /@vue-macros/short-bind@0.2.0(rollup@3.29.4)(vue@3.3.10): + resolution: {integrity: sha512-1cHCWaysLvrX4Oms+yAEhYjdxP0lfblC6JSlHZ0wzKVnsJ6DAWVaopp1H2kt3uJmWPr8C5iOYO7HRmRxd4JkrQ==} + engines: {node: '>=16.14.0'} + dependencies: + '@vue-macros/common': 1.9.0(rollup@3.29.4)(vue@3.3.10) + '@vue/compiler-core': 3.3.10 + transitivePeerDependencies: + - rollup + - vue + dev: true + + /@vue-macros/short-emits@1.5.0(rollup@3.29.4)(vue@3.3.10): + resolution: {integrity: sha512-R3ycVQwlnq9XXTSIOJDjdZ3Gbp6EcRwabLUrJcWUEEzqNZds8lP4br7jwPnA0KDCvXdEbjCQqqpzmosLPQuung==} + engines: {node: '>=16.14.0'} + dependencies: + '@vue-macros/common': 1.9.0(rollup@3.29.4)(vue@3.3.10) + unplugin: 1.5.1 + transitivePeerDependencies: + - rollup + - vue + dev: true + + /@vue-macros/short-vmodel@1.4.0(rollup@3.29.4)(vue@3.3.10): + resolution: {integrity: sha512-0rlL+GfDbbA4FGk90a5uPIkZmYSW4Asmh/r0KHZsqhKmyKxJf9eow7/CYGjvsnDKr+hk+pnq/CUSLkUnn+ey2g==} + engines: {node: '>=16.14.0'} + dependencies: + '@vue-macros/common': 1.9.0(rollup@3.29.4)(vue@3.3.10) + '@vue/compiler-core': 3.3.10 + transitivePeerDependencies: + - rollup + - vue + dev: true + + /@vue-macros/volar@0.17.4(@vue-macros/reactivity-transform@0.4.0)(rollup@3.29.4)(typescript@5.3.2)(vue@3.3.10): + resolution: {integrity: sha512-bPOp9KPAlm1nxIYPVAKoiKS5ERQMgSROAs6fQdlYv9sE4ZgxKpha3S0ZBCFniXkRwOwGaEfMqGkflo0V1buEfw==} + engines: {node: '>=16.14.0'} + peerDependencies: + vue-tsc: ^1.6.0 + peerDependenciesMeta: + vue-tsc: + optional: true + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@3.29.4) + '@vue-macros/common': 1.9.0(rollup@3.29.4)(vue@3.3.10) + '@vue-macros/define-props': 2.0.0(@vue-macros/reactivity-transform@0.4.0)(rollup@3.29.4)(vue@3.3.10) + '@vue-macros/short-bind': 0.2.0(rollup@3.29.4)(vue@3.3.10) + '@vue-macros/short-vmodel': 1.4.0(rollup@3.29.4)(vue@3.3.10) + '@vue/language-core': 1.8.22(typescript@5.3.2) + transitivePeerDependencies: + - '@vue-macros/reactivity-transform' + - rollup + - typescript + - vue + dev: true + + /@vue/babel-helper-vue-transform-on@1.1.5: + resolution: {integrity: sha512-SgUymFpMoAyWeYWLAY+MkCK3QEROsiUnfaw5zxOVD/M64KQs8D/4oK6Q5omVA2hnvEOE0SCkH2TZxs/jnnUj7w==} + dev: true + + /@vue/babel-helper-vue-transform-on@1.2.0-alpha.0: + resolution: {integrity: sha512-8oelfDzzYre1XGykAGOYc8sSIL8ToDkWMG5awjN+tain/1XSu4KMyBYYESnEMqhyyo8pfMbgBXcQW5nRDrm61A==} + dev: true + + /@vue/babel-plugin-jsx@1.1.5(@babel/core@7.23.5): + resolution: {integrity: sha512-nKs1/Bg9U1n3qSWnsHhCVQtAzI6aQXqua8j/bZrau8ywT1ilXQbK4FwEJGmU8fV7tcpuFvWmmN7TMmV1OBma1g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-module-imports': 7.22.15 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.5) + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.5 + '@babel/types': 7.23.5 + '@vue/babel-helper-vue-transform-on': 1.1.5 + camelcase: 6.3.0 + html-tags: 3.3.1 + svg-tags: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@vue/compiler-core@3.3.10: + resolution: {integrity: sha512-doe0hODR1+i1menPkRzJ5MNR6G+9uiZHIknK3Zn5OcIztu6GGw7u0XUzf3AgB8h/dfsZC9eouzoLo3c3+N/cVA==} + dependencies: + '@babel/parser': 7.23.5 + '@vue/shared': 3.3.10 + estree-walker: 2.0.2 + source-map-js: 1.0.2 + dev: true + + /@vue/compiler-dom@3.3.10: + resolution: {integrity: sha512-NCrqF5fm10GXZIK0GrEAauBqdy+F2LZRt3yNHzrYjpYBuRssQbuPLtSnSNjyR9luHKkWSH8we5LMB3g+4z2HvA==} + dependencies: + '@vue/compiler-core': 3.3.10 + '@vue/shared': 3.3.10 + dev: true + + /@vue/compiler-sfc@3.3.10: + resolution: {integrity: sha512-xpcTe7Rw7QefOTRFFTlcfzozccvjM40dT45JtrE3onGm/jBLZ0JhpKu3jkV7rbDFLeeagR/5RlJ2Y9SvyS0lAg==} + dependencies: + '@babel/parser': 7.23.5 + '@vue/compiler-core': 3.3.10 + '@vue/compiler-dom': 3.3.10 + '@vue/compiler-ssr': 3.3.10 + '@vue/reactivity-transform': 3.3.10 + '@vue/shared': 3.3.10 + estree-walker: 2.0.2 + magic-string: 0.30.5 + postcss: 8.4.32 + source-map-js: 1.0.2 + dev: true + + /@vue/compiler-ssr@3.3.10: + resolution: {integrity: sha512-12iM4jA4GEbskwXMmPcskK5wImc2ohKm408+o9iox3tfN9qua8xL0THIZtoe9OJHnXP4eOWZpgCAAThEveNlqQ==} + dependencies: + '@vue/compiler-dom': 3.3.10 + '@vue/shared': 3.3.10 + dev: true + + /@vue/language-core@1.8.22(typescript@5.3.2): + resolution: {integrity: sha512-bsMoJzCrXZqGsxawtUea1cLjUT9dZnDsy5TuZ+l1fxRMzUGQUG9+Ypq4w//CqpWmrx7nIAJpw2JVF/t258miRw==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@volar/language-core': 1.10.10 + '@volar/source-map': 1.10.10 + '@vue/compiler-dom': 3.3.10 + '@vue/shared': 3.3.10 + computeds: 0.0.1 + minimatch: 9.0.3 + muggle-string: 0.3.1 + typescript: 5.3.2 + vue-template-compiler: 2.7.15 + dev: true + + /@vue/reactivity-transform@3.3.10: + resolution: {integrity: sha512-0xBdk+CKHWT+Gev8oZ63Tc0qFfj935YZx+UAynlutnrDZ4diFCVFMWixn65HzjE3S1iJppWOo6Tt1OzASH7VEg==} + dependencies: + '@babel/parser': 7.23.5 + '@vue/compiler-core': 3.3.10 + '@vue/shared': 3.3.10 + estree-walker: 2.0.2 + magic-string: 0.30.5 + dev: true + + /@vue/reactivity@3.3.10: + resolution: {integrity: sha512-H5Z7rOY/JLO+e5a6/FEXaQ1TMuOvY4LDVgT+/+HKubEAgs9qeeZ+NhADSeEtrNQeiKLDuzeKc8v0CUFpB6Pqgw==} + dependencies: + '@vue/shared': 3.3.10 + dev: true + + /@vue/runtime-core@3.3.10: + resolution: {integrity: sha512-DZ0v31oTN4YHX9JEU5VW1LoIVgFovWgIVb30bWn9DG9a7oA415idcwsRNNajqTx8HQJyOaWfRKoyuP2P2TYIag==} + dependencies: + '@vue/reactivity': 3.3.10 + '@vue/shared': 3.3.10 + dev: true + + /@vue/runtime-dom@3.3.10: + resolution: {integrity: sha512-c/jKb3ny05KJcYk0j1m7Wbhrxq7mZYr06GhKykDMNRRR9S+/dGT8KpHuNQjv3/8U4JshfkAk6TpecPD3B21Ijw==} + dependencies: + '@vue/runtime-core': 3.3.10 + '@vue/shared': 3.3.10 + csstype: 3.1.2 + dev: true + + /@vue/server-renderer@3.3.10(vue@3.3.10): + resolution: {integrity: sha512-0i6ww3sBV3SKlF3YTjSVqKQ74xialMbjVYGy7cOTi7Imd8ediE7t72SK3qnvhrTAhOvlQhq6Bk6nFPdXxe0sAg==} + peerDependencies: + vue: 3.3.10 + dependencies: + '@vue/compiler-ssr': 3.3.10 + '@vue/shared': 3.3.10 + vue: 3.3.10(typescript@5.3.2) + dev: true + + /@vue/shared@3.3.10: + resolution: {integrity: sha512-2y3Y2J1a3RhFa0WisHvACJR2ncvWiVHcP8t0Inxo+NKz+8RKO4ZV8eZgCxRgQoA6ITfV12L4E6POOL9HOU5nqw==} + dev: true + /acorn-jsx@5.3.2(acorn@8.11.2): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -1842,6 +2387,38 @@ packages: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} dev: true + /ast-kit@0.11.3(rollup@3.29.4): + resolution: {integrity: sha512-qdwwKEhckRk0XE22/xDdmU3v/60E8Edu4qFhgTLIhGGDs/PAJwLw9pQn8Rj99PitlbBZbYpx0k/lbir4kg0SuA==} + engines: {node: '>=16.14.0'} + dependencies: + '@babel/parser': 7.23.5 + '@rollup/pluginutils': 5.1.0(rollup@3.29.4) + pathe: 1.1.1 + transitivePeerDependencies: + - rollup + dev: true + + /ast-kit@0.9.5(rollup@3.29.4): + resolution: {integrity: sha512-kbL7ERlqjXubdDd+szuwdlQ1xUxEz9mCz1+m07ftNVStgwRb2RWw+U6oKo08PAvOishMxiqz1mlJyLl8yQx2Qg==} + engines: {node: '>=16.14.0'} + dependencies: + '@babel/parser': 7.23.5 + '@rollup/pluginutils': 5.1.0(rollup@3.29.4) + pathe: 1.1.1 + transitivePeerDependencies: + - rollup + dev: true + + /ast-walker-scope@0.5.0(rollup@3.29.4): + resolution: {integrity: sha512-NsyHMxBh4dmdEHjBo1/TBZvCKxffmZxRYhmclfu0PP6Aftre47jOHYaYaNqJcV0bxihxFXhDkzLHUwHc0ocd0Q==} + engines: {node: '>=16.14.0'} + dependencies: + '@babel/parser': 7.23.5 + ast-kit: 0.9.5(rollup@3.29.4) + transitivePeerDependencies: + - rollup + dev: true + /autoprefixer@10.4.16(postcss@8.4.31): resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} engines: {node: ^10 || ^12 || >=14} @@ -1959,6 +2536,11 @@ packages: engines: {node: '>=6'} dev: true + /camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + dev: true + /caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} dependencies: @@ -2128,6 +2710,10 @@ packages: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} dev: true + /computeds@0.0.1: + resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==} + dev: true + /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true @@ -2261,11 +2847,19 @@ packages: css-tree: 2.2.1 dev: true + /csstype@3.1.2: + resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + dev: true + /data-uri-to-buffer@4.0.1: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} dev: false + /de-indent@1.0.2: + resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} + dev: true + /debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: @@ -3186,6 +3780,11 @@ packages: function-bind: 1.1.2 dev: true + /he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + dev: true + /hookable@5.5.3: resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} dev: true @@ -3194,6 +3793,11 @@ packages: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true + /html-tags@3.3.1: + resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} + engines: {node: '>=8'} + dev: true + /https-proxy-agent@7.0.2: resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} engines: {node: '>= 14'} @@ -3525,6 +4129,13 @@ packages: yallist: 4.0.0 dev: true + /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.30.5: resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} engines: {node: '>=12'} @@ -3711,6 +4322,10 @@ packages: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: true + /muggle-string@0.3.1: + resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==} + dev: true + /mute-stream@1.0.0: resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -4303,6 +4918,15 @@ packages: source-map-js: 1.0.2 dev: true + /postcss@8.4.32: + resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -4410,6 +5034,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.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -4677,6 +5306,10 @@ packages: engines: {node: '>= 0.4'} dev: true + /svg-tags@1.0.0: + resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} + dev: true + /svgo@3.0.5: resolution: {integrity: sha512-HQKHEo73pMNOlDlBcLgZRcHW2+1wo7bFYayAXkGN0l/2+h68KjlfZyMRhdhaGvoHV2eApOovl12zoFz42sT6rQ==} engines: {node: '>=14.0.0'} @@ -4902,6 +5535,95 @@ packages: - supports-color dev: true + /unplugin-combine@0.8.1(rollup@3.29.4)(vite@5.0.4): + resolution: {integrity: sha512-m2OSmXXRwCPZx8Ct8eF8WbjgTo8bydim2W1ofu2hDabGdr2pgDAoFjOP1J4MOIwa0OByqk1JX8IGlSdeE6uxVQ==} + engines: {node: '>=16.14.0'} + peerDependencies: + esbuild: '>=0.13' + rollup: ^3.2.0 || ^4.0.0 + vite: ^2.3.0 || ^3.0.0 || ^4.0.0 || ^5.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: 3.29.4 + unplugin: 1.5.1 + vite: 5.0.4(@types/node@20.10.1) + dev: true + + /unplugin-vue-define-options@1.4.0(rollup@3.29.4)(vue@3.3.10): + resolution: {integrity: sha512-P8TPXzZ1eqwkLZrGm+tHc7fR7/md6bEfSuJdxZi6Pp4PcqRctDzmZiXpQVIjBULpv+LhOCVRehIrsOTvABVUww==} + engines: {node: '>=16.14.0'} + dependencies: + '@vue-macros/common': 1.9.0(rollup@3.29.4)(vue@3.3.10) + ast-walker-scope: 0.5.0(rollup@3.29.4) + unplugin: 1.5.1 + transitivePeerDependencies: + - rollup + - vue + dev: true + + /unplugin-vue-macros@2.7.0(rollup@3.29.4)(typescript@5.3.2)(vite@5.0.4)(vue@3.3.10): + resolution: {integrity: sha512-SztF4ARBbrd1yuH4FbJOhp22rTvzakjzJUHTKLRQkZY1KMkIzx/KAdzEkxjAG2Xteqb29SYrc7XcoPdrUPMCCw==} + engines: {node: '>=16.14.0'} + peerDependencies: + vue: ^2.7.0 || ^3.2.25 + dependencies: + '@vue-macros/better-define': 1.7.0(rollup@3.29.4)(vue@3.3.10) + '@vue-macros/boolean-prop': 0.3.0(rollup@3.29.4)(vue@3.3.10) + '@vue-macros/chain-call': 0.2.0(rollup@3.29.4)(vue@3.3.10) + '@vue-macros/common': 1.9.0(rollup@3.29.4)(vue@3.3.10) + '@vue-macros/define-emit': 0.2.0(rollup@3.29.4)(vue@3.3.10) + '@vue-macros/define-models': 1.2.0(rollup@3.29.4)(vue@3.3.10) + '@vue-macros/define-prop': 0.3.0(rollup@3.29.4)(vue@3.3.10) + '@vue-macros/define-props': 2.0.0(@vue-macros/reactivity-transform@0.4.0)(rollup@3.29.4)(vue@3.3.10) + '@vue-macros/define-props-refs': 1.2.0(rollup@3.29.4)(vue@3.3.10) + '@vue-macros/define-render': 1.5.0(rollup@3.29.4)(vue@3.3.10) + '@vue-macros/define-slots': 1.1.0(rollup@3.29.4)(vue@3.3.10) + '@vue-macros/devtools': 0.2.0(typescript@5.3.2)(vite@5.0.4) + '@vue-macros/export-expose': 0.1.0(rollup@3.29.4)(vue@3.3.10) + '@vue-macros/export-props': 0.4.0(rollup@3.29.4)(vue@3.3.10) + '@vue-macros/export-render': 0.2.0(rollup@3.29.4)(vue@3.3.10) + '@vue-macros/hoist-static': 1.5.0(rollup@3.29.4)(vue@3.3.10) + '@vue-macros/jsx-directive': 0.7.0(rollup@3.29.4)(vue@3.3.10) + '@vue-macros/named-template': 0.4.0(rollup@3.29.4)(vue@3.3.10) + '@vue-macros/reactivity-transform': 0.4.0(rollup@3.29.4)(vue@3.3.10) + '@vue-macros/setup-block': 0.3.0(rollup@3.29.4)(vue@3.3.10) + '@vue-macros/setup-component': 0.17.0(rollup@3.29.4)(vue@3.3.10) + '@vue-macros/setup-sfc': 0.17.0(rollup@3.29.4)(vue@3.3.10) + '@vue-macros/short-bind': 0.2.0(rollup@3.29.4)(vue@3.3.10) + '@vue-macros/short-emits': 1.5.0(rollup@3.29.4)(vue@3.3.10) + '@vue-macros/short-vmodel': 1.4.0(rollup@3.29.4)(vue@3.3.10) + unplugin: 1.5.1 + unplugin-combine: 0.8.1(rollup@3.29.4)(vite@5.0.4) + unplugin-vue-define-options: 1.4.0(rollup@3.29.4)(vue@3.3.10) + vue: 3.3.10(typescript@5.3.2) + transitivePeerDependencies: + - '@vueuse/core' + - esbuild + - rollup + - typescript + - vite + - webpack + dev: true + + /unplugin@1.5.1: + resolution: {integrity: sha512-0QkvG13z6RD+1L1FoibQqnvTwVBXvS4XSPwAyinVgoOCl2jAgwzdUKmEj05o4Lt8xwQI85Hb6mSyYkcAGwZPew==} + dependencies: + acorn: 8.11.2 + chokidar: 3.5.3 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.6.1 + dev: true + /untyped@1.4.0: resolution: {integrity: sha512-Egkr/s4zcMTEuulcIb7dgURS6QpN7DyqQYdf+jBtiaJvQ+eRsrtWUoX84SbvQWuLkXsOjM+8sJC9u6KoMK/U7Q==} hasBin: true @@ -5086,11 +5808,43 @@ packages: - supports-color dev: true + /vue-template-compiler@2.7.15: + resolution: {integrity: sha512-yQxjxMptBL7UAog00O8sANud99C6wJF+7kgbcwqkvA38vCGF7HWE66w0ZFnS/kX5gSoJr/PQ4/oS3Ne2pW37Og==} + dependencies: + de-indent: 1.0.2 + he: 1.2.0 + dev: true + + /vue@3.3.10(typescript@5.3.2): + resolution: {integrity: sha512-zg6SIXZdTBwiqCw/1p+m04VyHjLfwtjwz8N57sPaBhEex31ND0RYECVOC1YrRwMRmxFf5T1dabl6SGUbMKKuVw==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@vue/compiler-dom': 3.3.10 + '@vue/compiler-sfc': 3.3.10 + '@vue/runtime-dom': 3.3.10 + '@vue/server-renderer': 3.3.10(vue@3.3.10) + '@vue/shared': 3.3.10 + typescript: 5.3.2 + dev: true + /web-streams-polyfill@3.2.1: resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} engines: {node: '>= 8'} dev: false + /webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + dev: true + + /webpack-virtual-modules@0.6.1: + resolution: {integrity: sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==} + dev: true + /webpod@0.0.2: resolution: {integrity: sha512-cSwwQIeg8v4i3p4ajHhwgR7N6VyxAf+KYSSsY6Pd3aETE+xEU4vbitz7qQkB0I321xnhDdgtxuiSfk5r/FVtjg==} hasBin: true diff --git a/src/sg/rules/define-slots.yml b/src/sg/rules/define-slots.yml index eb09014..391aaab 100644 --- a/src/sg/rules/define-slots.yml +++ b/src/sg/rules/define-slots.yml @@ -5,7 +5,6 @@ utils: kind: tag_name regex: ^slot$ precedes: - kind: attribute not: has: kind: attribute_name From dd7dcf77b24816681e7aab0d5e03b07e490f1fbd Mon Sep 17 00:00:00 2001 From: gaokefei <260480378@qq.com> Date: Sat, 23 Dec 2023 12:20:08 +0800 Subject: [PATCH 17/32] chore: remove babel-helper-vue-transform-on --- .vscode/settings.json | 4 ++-- playground/package.json | 1 - playground/pnpm-lock.yaml | 7 ------- playground/vite.config.ts | 6 ++---- src/common/constants.ts | 2 +- src/init/index.ts | 5 +++-- src/init/package.ts | 2 +- src/init/tsconfig.ts | 2 +- src/init/vite.ts | 5 ----- 9 files changed, 10 insertions(+), 24 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 5184e96..6232eb0 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -10,8 +10,8 @@ // Auto fix "editor.codeActionsOnSave": { - "source.fixAll.eslint": true, - "source.organizeImports": false + "source.fixAll.eslint": "explicit", + "source.organizeImports": "never" }, // Silent the stylistic rules in you IDE, but still auto fix them diff --git a/playground/package.json b/playground/package.json index 1bb809f..3cce752 100644 --- a/playground/package.json +++ b/playground/package.json @@ -12,7 +12,6 @@ "@vitejs/plugin-vue": "^4.5.0", "@vitejs/plugin-vue-jsx": "^3.1.0", "@vue-macros/volar": "^0.17.4", - "@vue/babel-helper-vue-transform-on": "1.2.0-alpha.0", "tsx": "^4.6.1", "typescript": "^5.3.2", "unplugin-vue-macros": "^2.7.0", diff --git a/playground/pnpm-lock.yaml b/playground/pnpm-lock.yaml index 934cfe1..7fc366b 100644 --- a/playground/pnpm-lock.yaml +++ b/playground/pnpm-lock.yaml @@ -19,9 +19,6 @@ devDependencies: '@vue-macros/volar': specifier: ^0.17.4 version: 0.17.4(@vue-macros/reactivity-transform@0.4.0)(typescript@5.3.2)(vue@3.3.9) - '@vue/babel-helper-vue-transform-on': - specifier: 1.2.0-alpha.0 - version: 1.2.0-alpha.0 tsx: specifier: ^4.6.1 version: 4.6.1 @@ -1280,10 +1277,6 @@ packages: resolution: {integrity: sha512-SgUymFpMoAyWeYWLAY+MkCK3QEROsiUnfaw5zxOVD/M64KQs8D/4oK6Q5omVA2hnvEOE0SCkH2TZxs/jnnUj7w==} dev: true - /@vue/babel-helper-vue-transform-on@1.2.0-alpha.0: - resolution: {integrity: sha512-8oelfDzzYre1XGykAGOYc8sSIL8ToDkWMG5awjN+tain/1XSu4KMyBYYESnEMqhyyo8pfMbgBXcQW5nRDrm61A==} - dev: true - /@vue/babel-plugin-jsx@1.1.5(@babel/core@7.23.5): resolution: {integrity: sha512-nKs1/Bg9U1n3qSWnsHhCVQtAzI6aQXqua8j/bZrau8ywT1ilXQbK4FwEJGmU8fV7tcpuFvWmmN7TMmV1OBma1g==} peerDependencies: diff --git a/playground/vite.config.ts b/playground/vite.config.ts index baf7215..6117a8f 100644 --- a/playground/vite.config.ts +++ b/playground/vite.config.ts @@ -19,10 +19,8 @@ export default defineConfig({ }, }), - vueJsx: VueJsx({ - transformOn: true, - }), + vueJsx: VueJsx(), }, }), ], -}) +}) \ No newline at end of file diff --git a/src/common/constants.ts b/src/common/constants.ts index d15b40e..ec87473 100644 --- a/src/common/constants.ts +++ b/src/common/constants.ts @@ -1,7 +1,7 @@ export const officialMacros = [ { name: 'define-options', value: 'defineOptions', volar: true, status: 'official' }, { name: 'define-slots', value: 'defineSlots', volar: true, status: 'official' }, - { name: 'define-emits', value: 'defineEmits', volar: true, status: 'official' }, + { name: 'short-emits', value: 'shortEmits', volar: false, status: 'official' }, ] as const export const stableMacros = [ diff --git a/src/init/index.ts b/src/init/index.ts index 75e029f..edc59e8 100644 --- a/src/init/index.ts +++ b/src/init/index.ts @@ -1,7 +1,7 @@ import { checkbox, select } from '@inquirer/prompts' import { chalk } from 'zx' import type { VueMacros } from '../common' -import { experimentalMacros, stableMacros } from '../common' +import { experimentalMacros, officialMacros, stableMacros } from '../common' import { rewriteNuxtConfig } from './nuxt' import { rewriteTsConfig } from './tsconfig' import { rewriteViteConfig } from './vite' @@ -12,9 +12,10 @@ export async function init(target: string) { message: chalk.green(`Which vue macros do you want to use?`), choices: [ ...stableMacros.slice(-2), + ...officialMacros.slice(-1), ...experimentalMacros, ], - pageSize: 13, + pageSize: 14, })).reduce((result, macro) => { result[macro] = true return result diff --git a/src/init/package.ts b/src/init/package.ts index 0c0d428..ebc4916 100644 --- a/src/init/package.ts +++ b/src/init/package.ts @@ -32,7 +32,7 @@ export async function rewritePackage(macros: VueMacros, target: string) { 'typescript', ] if (macros.jsxDirective || macros.setupSFC) - deps.push('@vitejs/plugin-vue-jsx', '@vue/babel-helper-vue-transform-on') + deps.push('@vitejs/plugin-vue-jsx') await installDeps(deps) } diff --git a/src/init/tsconfig.ts b/src/init/tsconfig.ts index deb3b2e..2c60c6e 100644 --- a/src/init/tsconfig.ts +++ b/src/init/tsconfig.ts @@ -28,7 +28,7 @@ export async function rewriteTsConfig(selectedMacros: VueMacros, target: string) const vueCompilerOptions = tsconfig.vueCompilerOptions ??= {} const plugins = vueCompilerOptions.plugins ??= [] for (const [macro, options] of Object.entries(macros)) { - if (macro === 'short-vmodel') { + if (macro === 'short-vmodel' && options !== true) { const vueMacros = vueCompilerOptions.vueMacros ??= {} vueMacros.shortVmodel = options } diff --git a/src/init/vite.ts b/src/init/vite.ts index ec65220..a02720f 100644 --- a/src/init/vite.ts +++ b/src/init/vite.ts @@ -37,11 +37,6 @@ export async function rewriteViteConfig(macros: VueMacros, target: string) { } const vueJsx: ProxifiedFunctionCall = vueMacrosOptions?.plugins?.vueJsx || getVitePlugin('@vitejs/plugin-vue-jsx', 'VueJsx') - if (vueJsx && (macros.jsxDirective || macros.setupSFC)) { - vueJsx.$args[0] ?? vueJsx.$args.push({}) - const arg = vueJsx.$args[0] as any - arg.transformOn = true - } updateVitePluginConfig(config, 'unplugin-vue-macros/vite', { ...macros, From 14e490e0c644c47a575bc08bc3aa29c3dff95f12 Mon Sep 17 00:00:00 2001 From: gaokefei <260480378@qq.com> Date: Sat, 23 Dec 2023 12:21:50 +0800 Subject: [PATCH 18/32] fix(sg): correct transform slot's tagName --- src/sg/rules/define-slots.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/sg/rules/define-slots.yml b/src/sg/rules/define-slots.yml index 391aaab..431e5ff 100644 --- a/src/sg/rules/define-slots.yml +++ b/src/sg/rules/define-slots.yml @@ -4,6 +4,8 @@ utils: is-default-slot: kind: tag_name regex: ^slot$ + inside: + kind: start_tag precedes: not: has: @@ -31,6 +33,8 @@ utils: is-slot: kind: tag_name regex: ^slot$ + inside: + kind: start_tag precedes: kind: attribute has: From 06175632521f6d43b52368512e695e27ff288795 Mon Sep 17 00:00:00 2001 From: gaokefei <260480378@qq.com> Date: Sat, 23 Dec 2023 12:26:11 +0800 Subject: [PATCH 19/32] feat(init/tsconfig): add macros-global type --- src/init/tsconfig.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/init/tsconfig.ts b/src/init/tsconfig.ts index 2c60c6e..e7cc5b0 100644 --- a/src/init/tsconfig.ts +++ b/src/init/tsconfig.ts @@ -45,5 +45,10 @@ export async function rewriteTsConfig(selectedMacros: VueMacros, target: string) plugins.push(`@vue-macros/volar/${macro}`) } + tsconfig.compilerOptions ??= {} + tsconfig.compilerOptions.types ??= [] + if (!tsconfig.compilerOptions.types.includes('unplugin-vue-macros/macros-global')) + tsconfig.compilerOptions.types.push('unplugin-vue-macros/macros-global') + await writeTSConfig(`${target}/tsconfig.json`, tsconfig) } From b777365afa2695089186f41f33e08ba2ce39ab45 Mon Sep 17 00:00:00 2001 From: gaokefei <260480378@qq.com> Date: Sat, 23 Dec 2023 12:59:12 +0800 Subject: [PATCH 20/32] feat(init/define-prop): add edition options --- src/init/index.ts | 18 ++++++++++++++++-- src/init/tsconfig.ts | 8 +++++--- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/init/index.ts b/src/init/index.ts index edc59e8..954f8c1 100644 --- a/src/init/index.ts +++ b/src/init/index.ts @@ -11,8 +11,8 @@ export async function init(target: string) { const selectedMacros = (await checkbox({ message: chalk.green(`Which vue macros do you want to use?`), choices: [ - ...stableMacros.slice(-2), ...officialMacros.slice(-1), + ...stableMacros.slice(-2), ...experimentalMacros, ], pageSize: 14, @@ -39,11 +39,25 @@ export async function init(target: string) { { value: '::' }, { value: '*' }, ], - }) as any + }) selectedMacros.shortVmodel = { prefix } } + if (selectedMacros.defineProp) { + const edition = await select({ + message: chalk.green( + `Which edition do you want to use?`, + ), + choices: [ + { name: 'kevinEdition', value: 'kevinEdition' }, + { name: 'johnsonEdition', value: 'johnsonEdition' }, + ], + }) + + selectedMacros.defineProp = { edition } + } + await rewriteConfig(selectedMacros, target) } diff --git a/src/init/tsconfig.ts b/src/init/tsconfig.ts index e7cc5b0..a1cebf3 100644 --- a/src/init/tsconfig.ts +++ b/src/init/tsconfig.ts @@ -2,7 +2,7 @@ import type { TSConfig } from 'pkg-types' import { readTSConfig, writeTSConfig } from 'pkg-types' import { fs } from 'zx' import type { VueMacros } from '../common' -import { vueMacros } from '../common' +import { camelize, vueMacros } from '../common' export async function rewriteTsConfig(selectedMacros: VueMacros, target: string) { const filename = `${target}/nuxt.config.ts` @@ -28,9 +28,11 @@ export async function rewriteTsConfig(selectedMacros: VueMacros, target: string) const vueCompilerOptions = tsconfig.vueCompilerOptions ??= {} const plugins = vueCompilerOptions.plugins ??= [] for (const [macro, options] of Object.entries(macros)) { - if (macro === 'short-vmodel' && options !== true) { + if (options !== true) { const vueMacros = vueCompilerOptions.vueMacros ??= {} - vueMacros.shortVmodel = options + vueMacros[camelize(macro)] = options.edition + ? { experimentalDefinePropProposal: options.edition } + : options } // prevent exportProps and exportExpose co-usage From 81ddaf1c366047fe2cb488c5089e8e678260735a Mon Sep 17 00:00:00 2001 From: gaokefei <260480378@qq.com> Date: Sat, 23 Dec 2023 15:05:19 +0800 Subject: [PATCH 21/32] feat(sg): convert tagName and attributeName to pascal-case --- playground/src/App.vue | 4 +- src/sg/rules/jsx-directive/pascal-case.yml | 46 ++++++++++++++++++++++ 2 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 src/sg/rules/jsx-directive/pascal-case.yml diff --git a/playground/src/App.vue b/playground/src/App.vue index cbf5637..21393c9 100644 --- a/playground/src/App.vue +++ b/playground/src/App.vue @@ -22,10 +22,10 @@ const compRef = shallowRef() v-on="on" @click.once="select = i" @submit="alert" - @update="select.id = $event" + @update:model-value="select.id = $event" >