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 1/4] 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 2/4] 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 3/4] 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 @@