From 8131e2c4a53071ff2eda98a413153a213f7ac93a Mon Sep 17 00:00:00 2001 From: Franklin Tina <76698025+franklin-tina@users.noreply.github.com> Date: Fri, 18 Oct 2024 17:29:18 -0500 Subject: [PATCH 1/4] Ensure the generate composable name is properly formatted --- src/utils/templates.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/utils/templates.ts b/src/utils/templates.ts index 76b73a484..00c0d8c8b 100644 --- a/src/utils/templates.ts +++ b/src/utils/templates.ts @@ -1,4 +1,4 @@ -import { upperFirst } from 'scule' +import { camelCase, upperFirst } from 'scule' interface TemplateOptions { name: string @@ -57,8 +57,9 @@ const component: Template = ({ name, args }) => ({ const composable: Template = ({ name }) => { const nameWithUsePrefix = name.startsWith('use') - ? name - : `use${upperFirst(name)}` + ? camelCase(name) + : `use${upperFirst(camelCase(name))}` + return { path: `composables/${name}.ts`, contents: ` From 8fcf8869380ee6c28ac2fde5b6986e90e0de41ee Mon Sep 17 00:00:00 2001 From: Franklin Tina <76698025+franklin-tina@users.noreply.github.com> Date: Fri, 18 Oct 2024 17:58:17 -0500 Subject: [PATCH 2/4] wip --- src/utils/templates.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/utils/templates.ts b/src/utils/templates.ts index 00c0d8c8b..567018786 100644 --- a/src/utils/templates.ts +++ b/src/utils/templates.ts @@ -56,20 +56,20 @@ const component: Template = ({ name, args }) => ({ }) const composable: Template = ({ name }) => { - const nameWithUsePrefix = name.startsWith('use') - ? camelCase(name) - : `use${upperFirst(camelCase(name))}` + const nameWithoutUsePrefix = name.replace(/^use-?/, '') + const nameWithUsePrefix = `use${upperFirst(camelCase(nameWithoutUsePrefix))}` return { path: `composables/${name}.ts`, contents: ` -export const ${nameWithUsePrefix} = () => { - return ref() -} - `, + export const ${nameWithUsePrefix} = () => { + return ref() + } + `, } } + const middleware: Template = ({ name, args }) => ({ path: `middleware/${name}${applySuffix(args, ['global'])}.ts`, contents: ` From 96dbcc2ff9ba96b8b3cbafd642e84611a12ab04f Mon Sep 17 00:00:00 2001 From: Franklin Tina <76698025+franklin-tina@users.noreply.github.com> Date: Fri, 18 Oct 2024 18:03:24 -0500 Subject: [PATCH 3/4] lint --- src/utils/templates.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/utils/templates.ts b/src/utils/templates.ts index 567018786..20ff399b1 100644 --- a/src/utils/templates.ts +++ b/src/utils/templates.ts @@ -69,7 +69,6 @@ const composable: Template = ({ name }) => { } } - const middleware: Template = ({ name, args }) => ({ path: `middleware/${name}${applySuffix(args, ['global'])}.ts`, contents: ` From f7902f38ee568abf96d6a4acf37119278f7a288b Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Tue, 22 Oct 2024 13:14:41 +0100 Subject: [PATCH 4/4] test: add simple unit test --- .github/workflows/ci.yml | 4 +- .gitignore | 1 + package.json | 5 +- pnpm-lock.yaml | 395 +++++++++++++++++++++++++++++++++--- src/utils/templates.ts | 2 +- test/unit/templates.spec.ts | 10 + 6 files changed, 384 insertions(+), 33 deletions(-) create mode 100644 test/unit/templates.spec.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2258bf418..ca18ca69b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,8 +30,8 @@ jobs: - run: pnpm test:types - run: pnpm build - run: pnpm test:dist - # - run: pnpm vitest --coverage && rm -rf coverage/tmp - # - uses: codecov/codecov-action@v3 + - run: pnpm test:unit + - uses: codecov/codecov-action@v3 - name: Release Edge if: | github.event_name == 'push' && diff --git a/.gitignore b/.gitignore index bace9cdd8..9c591c11b 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ dist .nuxt nuxt-app .pnpm-store +coverage diff --git a/package.json b/package.json index 3b44eb562..c888a0a7b 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,8 @@ "release": "pnpm test && changelogen --release && npm publish && git push --follow-tags", "test": "pnpm lint && pnpm test:types && pnpm build && pnpm test:dist", "test:dist": "node ./bin/nuxi.mjs info ./playground", - "test:types": "tsc --noEmit" + "test:types": "tsc --noEmit", + "test:unit": "vitest --coverage" }, "devDependencies": { "@nuxt/eslint-config": "^0.6.0", @@ -45,6 +46,7 @@ "@types/node": "^20.16.12", "@types/semver": "^7.5.8", "@types/ws": "^8.5.12", + "@vitest/coverage-v8": "^2.1.3", "c12": "^2.0.1", "changelogen": "^0.5.7", "chokidar": "^4.0.1", @@ -74,6 +76,7 @@ "unbuild": "^2.0.0", "unplugin-purge-polyfills": "^0.0.7", "unws": "^0.2.4", + "vitest": "^2.1.3", "vue-tsc": "^2.1.6", "ws": "^8.18.0" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a09ff1a15..cb41675bb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,7 +24,7 @@ importers: version: 3.13.2(rollup@3.29.4)(webpack-sources@3.2.3) '@nuxt/test-utils': specifier: ^3.14.3 - version: 3.14.3(h3@1.13.0)(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.6(@types/node@20.16.12)(terser@5.29.2))(vue-router@4.4.5(vue@3.5.6(typescript@5.4.2)))(vue@3.5.6(typescript@5.4.2))(webpack-sources@3.2.3) + version: 3.14.3(h3@1.13.0)(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.6(@types/node@20.16.12)(terser@5.29.2))(vitest@2.1.3(@types/node@20.16.12)(terser@5.29.2))(vue-router@4.4.5(vue@3.5.6(typescript@5.4.2)))(vue@3.5.6(typescript@5.4.2))(webpack-sources@3.2.3) '@types/http-proxy': specifier: ^1.17.15 version: 1.17.15 @@ -37,6 +37,9 @@ importers: '@types/ws': specifier: ^8.5.12 version: 8.5.12 + '@vitest/coverage-v8': + specifier: ^2.1.3 + version: 2.1.3(vitest@2.1.3(@types/node@20.16.12)(terser@5.29.2)) c12: specifier: ^2.0.1 version: 2.0.1(magicast@0.3.5) @@ -124,6 +127,9 @@ importers: unws: specifier: ^0.2.4 version: 0.2.4(ws@8.18.0) + vitest: + specifier: ^2.1.3 + version: 2.1.3(@types/node@20.16.12)(terser@5.29.2) vue-tsc: specifier: ^2.1.6 version: 2.1.6(typescript@5.4.2) @@ -387,6 +393,9 @@ packages: resolution: {integrity: sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==} engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + '@cloudflare/kv-asset-handler@0.3.4': resolution: {integrity: sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==} engines: {node: '>=16.13'} @@ -1020,6 +1029,10 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} @@ -1292,8 +1305,8 @@ packages: rollup: optional: true - '@rollup/plugin-commonjs@28.0.0': - resolution: {integrity: sha512-BJcu+a+Mpq476DMXG+hevgPSl56bkUoi88dKT8t3RyUp8kGuOh+2bU8Gs7zXDlu+fyZggnJ+iOBGrb/O1SorYg==} + '@rollup/plugin-commonjs@28.0.1': + resolution: {integrity: sha512-+tNWdlWKbpB3WgBN7ijjYkq9X5uhjmcvyjEght4NmH5fAU++zfQzAJ6wumLS+dNcvwEZhKx2Z+skY8m7v0wGSA==} engines: {node: '>=16.0.0 || 14 >= 14.17'} peerDependencies: rollup: ^2.68.0||^3.0.0||^4.0.0 @@ -1631,6 +1644,45 @@ packages: vite: ^5.0.0 vue: ^3.2.25 + '@vitest/coverage-v8@2.1.3': + resolution: {integrity: sha512-2OJ3c7UPoFSmBZwqD2VEkUw6A/tzPF0LmW0ZZhhB8PFxuc+9IBG/FaSM+RLEenc7ljzFvGN+G0nGQoZnh7sy2A==} + peerDependencies: + '@vitest/browser': 2.1.3 + vitest: 2.1.3 + peerDependenciesMeta: + '@vitest/browser': + optional: true + + '@vitest/expect@2.1.3': + resolution: {integrity: sha512-SNBoPubeCJhZ48agjXruCI57DvxcsivVDdWz+SSsmjTT4QN/DfHk3zB/xKsJqMs26bLZ/pNRLnCf0j679i0uWQ==} + + '@vitest/mocker@2.1.3': + resolution: {integrity: sha512-eSpdY/eJDuOvuTA3ASzCjdithHa+GIF1L4PqtEELl6Qa3XafdMLBpBlZCIUCX2J+Q6sNmjmxtosAG62fK4BlqQ==} + peerDependencies: + '@vitest/spy': 2.1.3 + msw: ^2.3.5 + vite: ^5.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@2.1.3': + resolution: {integrity: sha512-XH1XdtoLZCpqV59KRbPrIhFCOO0hErxrQCMcvnQete3Vibb9UeIOX02uFPfVn3Z9ZXsq78etlfyhnkmIZSzIwQ==} + + '@vitest/runner@2.1.3': + resolution: {integrity: sha512-JGzpWqmFJ4fq5ZKHtVO3Xuy1iF2rHGV4d/pdzgkYHm1+gOzNZtqjvyiaDGJytRyMU54qkxpNzCx+PErzJ1/JqQ==} + + '@vitest/snapshot@2.1.3': + resolution: {integrity: sha512-qWC2mWc7VAXmjAkEKxrScWHWFyCQx/cmiZtuGqMi+WwqQJ2iURsVY4ZfAK6dVo6K2smKRU6l3BPwqEBvhnpQGg==} + + '@vitest/spy@2.1.3': + resolution: {integrity: sha512-Nb2UzbcUswzeSP7JksMDaqsI43Sj5+Kry6ry6jQJT4b5gAK+NS9NED6mDb8FlMRCX8m5guaHCDZmqYMMWRy5nQ==} + + '@vitest/utils@2.1.3': + resolution: {integrity: sha512-xpiVfDSg1RrYT0tX6czgerkpcKFmFOF/gCr30+Mve5V2kewCy4Prn1/NDMSRwaSmT7PRaOF83wu+bEtsY1wrvA==} + '@volar/language-core@2.4.2': resolution: {integrity: sha512-sONt5RLvLL1SlBdhyUSthZzuKePbJ7DwFFB9zT0eyWpDl+v7GXGh/RkPxxWaR22bIhYtTzp4Ka1MWatl/53Riw==} @@ -1822,6 +1874,10 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + ast-kit@1.1.0: resolution: {integrity: sha512-RlNqd4u6c/rJ5R+tN/ZTtyNrH8X0NHCvyt6gD8RHa3JjzxxHWoyaU0Ujk3Zjbh7IZqrYl1Sxm6XzZifmVxXxHQ==} engines: {node: '>=16.14.0'} @@ -1943,6 +1999,10 @@ packages: caniuse-lite@1.0.30001667: resolution: {integrity: sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw==} + chai@5.1.1: + resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==} + engines: {node: '>=12'} + chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -1962,6 +2022,10 @@ packages: resolution: {integrity: sha512-cTZXBcJMl3pudE40WENOakXkcVtrbBpbkmSkM20NdRiUqa4+VYRdXdEsgQ0BNQ6JBE2YymTNWtPKVF7UCTN5+g==} hasBin: true + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} + chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -2241,6 +2305,10 @@ packages: supports-color: optional: true + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -2783,6 +2851,9 @@ packages: hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + html-tags@3.3.1: resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} engines: {node: '>=8'} @@ -2976,6 +3047,22 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@5.0.6: + resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} + engines: {node: '>=10'} + + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + jackspeak@3.4.0: resolution: {integrity: sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==} engines: {node: '>=14'} @@ -3115,6 +3202,9 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + loupe@3.1.2: + resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} + lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -3138,6 +3228,10 @@ packages: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + mdn-data@2.0.28: resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} @@ -3264,8 +3358,8 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - nitropack-nightly@2.10.0-20241015-134338.b9fcc837: - resolution: {integrity: sha512-qn+qcgNNy8EMcrBGptSoXjMkHtOlr0d/l5ocMyld0Qd8LdtUVorjbrSyiEj1cVSAKmROYMVQ1etoEjD6NE51lA==} + nitropack-nightly@2.10.0-20241021-025328.14b4891f: + resolution: {integrity: sha512-Lx830D5om3ixfHFx657HgSjajsBybTVZisTZuFsC7BWnuYCzePFvwQtJU3kUuu0VjwidntH1sta+XBJ1QbU4Kg==} engines: {node: ^16.11.0 || >=17.0.0} hasBin: true peerDependencies: @@ -3495,6 +3589,10 @@ packages: pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + pathval@2.0.0: + resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + engines: {node: '>= 14.16'} + perfect-debounce@1.0.0: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} @@ -4096,6 +4194,9 @@ packages: shell-quote@1.8.1: resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -4168,6 +4269,9 @@ packages: stable-hash@0.0.4: resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==} + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + standard-as-callback@2.1.0: resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} @@ -4286,12 +4390,19 @@ packages: engines: {node: '>=10'} hasBin: true + test-exclude@7.0.1: + resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} + engines: {node: '>=18'} + text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + tinyexec@0.3.0: resolution: {integrity: sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==} @@ -4299,6 +4410,18 @@ packages: resolution: {integrity: sha512-NbBoFBpqfcgd1tCiO8Lkfdk+xrA7mlLR9zgvZcZWQQwU63XAfUePyd6wZBaU93Hqw347lHnwFzttAkemHzzz4g==} engines: {node: '>=12.0.0'} + tinypool@1.0.1: + resolution: {integrity: sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@1.2.0: + resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} + engines: {node: '>=14.0.0'} + + tinyspy@3.0.2: + resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + engines: {node: '>=14.0.0'} + to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} @@ -4523,6 +4646,11 @@ packages: engines: {node: ^18.0.0 || >=20.0.0} hasBin: true + vite-node@2.1.3: + resolution: {integrity: sha512-I1JadzO+xYX887S39Do+paRePCKoiDrWRRjp9kkG5he0t7RXNvPAJPCQSJqbGN4uCrFFeS3Kj3sLqY8NMYBEdA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + vite-plugin-checker@0.8.0: resolution: {integrity: sha512-UA5uzOGm97UvZRTdZHiQVYFnd86AVn8EVaD4L3PoVzxH+IZSfaAw14WGFwX9QS23UW3lV/5bVKZn6l0w+q9P0g==} engines: {node: '>=14.16'} @@ -4606,6 +4734,31 @@ packages: vitest-environment-nuxt@1.0.1: resolution: {integrity: sha512-eBCwtIQriXW5/M49FjqNKfnlJYlG2LWMSNFsRVKomc8CaMqmhQPBS5LZ9DlgYL9T8xIVsiA6RZn2lk7vxov3Ow==} + vitest@2.1.3: + resolution: {integrity: sha512-Zrxbg/WiIvUP2uEzelDNTXmEMJXuzJ1kCpbDvaKByFA9MNeO95V+7r/3ti0qzJzrxdyuUw5VduN7k+D3VmVOSA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': 2.1.3 + '@vitest/ui': 2.1.3 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + vscode-jsonrpc@6.0.0: resolution: {integrity: sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==} engines: {node: '>=8.0.0 || >=10.0.0'} @@ -4684,6 +4837,11 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} hasBin: true + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + wide-align@1.1.5: resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} @@ -5116,6 +5274,8 @@ snapshots: '@babel/helper-validator-identifier': 7.25.7 to-fast-properties: 2.0.0 + '@bcoe/v8-coverage@0.2.3': {} + '@cloudflare/kv-asset-handler@0.3.4': dependencies: mime: 3.0.0 @@ -5471,6 +5631,8 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 + '@istanbuljs/schema@0.1.3': {} + '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 @@ -5719,7 +5881,7 @@ snapshots: - supports-color - webpack-sources - '@nuxt/test-utils@3.14.3(h3@1.13.0)(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.6(@types/node@20.16.12)(terser@5.29.2))(vue-router@4.4.5(vue@3.5.6(typescript@5.4.2)))(vue@3.5.6(typescript@5.4.2))(webpack-sources@3.2.3)': + '@nuxt/test-utils@3.14.3(h3@1.13.0)(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.6(@types/node@20.16.12)(terser@5.29.2))(vitest@2.1.3(@types/node@20.16.12)(terser@5.29.2))(vue-router@4.4.5(vue@3.5.6(typescript@5.4.2)))(vue@3.5.6(typescript@5.4.2))(webpack-sources@3.2.3)': dependencies: '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3) '@nuxt/schema': 3.13.2(rollup@3.29.4)(webpack-sources@3.2.3) @@ -5745,9 +5907,11 @@ snapshots: unenv: 1.10.0 unplugin: 1.14.1(webpack-sources@3.2.3) vite: 5.4.6(@types/node@20.16.12)(terser@5.29.2) - vitest-environment-nuxt: 1.0.1(h3@1.13.0)(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.6(@types/node@20.16.12)(terser@5.29.2))(vue-router@4.4.5(vue@3.5.6(typescript@5.4.2)))(vue@3.5.6(typescript@5.4.2))(webpack-sources@3.2.3) + vitest-environment-nuxt: 1.0.1(h3@1.13.0)(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.6(@types/node@20.16.12)(terser@5.29.2))(vitest@2.1.3(@types/node@20.16.12)(terser@5.29.2))(vue-router@4.4.5(vue@3.5.6(typescript@5.4.2)))(vue@3.5.6(typescript@5.4.2))(webpack-sources@3.2.3) vue: 3.5.6(typescript@5.4.2) vue-router: 4.4.5(vue@3.5.6(typescript@5.4.2)) + optionalDependencies: + vitest: 2.1.3(@types/node@20.16.12)(terser@5.29.2) transitivePeerDependencies: - magicast - rollup @@ -5772,7 +5936,7 @@ snapshots: get-port-please: 3.1.2 h3: 1.13.0 knitwork: 1.1.0 - magic-string: 0.30.11 + magic-string: 0.30.12 mlly: 1.7.2 ohash: 1.1.4 pathe: 1.1.2 @@ -5929,15 +6093,15 @@ snapshots: optionalDependencies: rollup: 3.29.4 - '@rollup/plugin-commonjs@28.0.0(rollup@4.24.0)': + '@rollup/plugin-commonjs@28.0.1(rollup@4.24.0)': dependencies: '@rollup/pluginutils': 5.1.2(rollup@4.24.0) commondir: 1.0.1 estree-walker: 2.0.2 - fdir: 6.3.0(picomatch@2.3.1) + fdir: 6.3.0(picomatch@4.0.2) is-reference: 1.2.1 magic-string: 0.30.12 - picomatch: 2.3.1 + picomatch: 4.0.2 optionalDependencies: rollup: 4.24.0 @@ -6303,6 +6467,64 @@ snapshots: vite: 5.4.6(@types/node@20.16.12)(terser@5.29.2) vue: 3.5.6(typescript@5.4.2) + '@vitest/coverage-v8@2.1.3(vitest@2.1.3(@types/node@20.16.12)(terser@5.29.2))': + dependencies: + '@ampproject/remapping': 2.3.0 + '@bcoe/v8-coverage': 0.2.3 + debug: 4.3.6(supports-color@9.4.0) + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 5.0.6 + istanbul-reports: 3.1.7 + magic-string: 0.30.12 + magicast: 0.3.5 + std-env: 3.7.0 + test-exclude: 7.0.1 + tinyrainbow: 1.2.0 + vitest: 2.1.3(@types/node@20.16.12)(terser@5.29.2) + transitivePeerDependencies: + - supports-color + + '@vitest/expect@2.1.3': + dependencies: + '@vitest/spy': 2.1.3 + '@vitest/utils': 2.1.3 + chai: 5.1.1 + tinyrainbow: 1.2.0 + + '@vitest/mocker@2.1.3(@vitest/spy@2.1.3)(vite@5.4.6(@types/node@20.16.12)(terser@5.29.2))': + dependencies: + '@vitest/spy': 2.1.3 + estree-walker: 3.0.3 + magic-string: 0.30.12 + optionalDependencies: + vite: 5.4.6(@types/node@20.16.12)(terser@5.29.2) + + '@vitest/pretty-format@2.1.3': + dependencies: + tinyrainbow: 1.2.0 + + '@vitest/runner@2.1.3': + dependencies: + '@vitest/utils': 2.1.3 + pathe: 1.1.2 + + '@vitest/snapshot@2.1.3': + dependencies: + '@vitest/pretty-format': 2.1.3 + magic-string: 0.30.12 + pathe: 1.1.2 + + '@vitest/spy@2.1.3': + dependencies: + tinyspy: 3.0.2 + + '@vitest/utils@2.1.3': + dependencies: + '@vitest/pretty-format': 2.1.3 + loupe: 3.1.2 + tinyrainbow: 1.2.0 + '@volar/language-core@2.4.2': dependencies: '@volar/source-map': 2.4.2 @@ -6371,7 +6593,7 @@ snapshots: '@vue/shared': 3.5.6 entities: 4.5.0 estree-walker: 2.0.2 - source-map-js: 1.2.0 + source-map-js: 1.2.1 '@vue/compiler-dom@3.5.1': dependencies: @@ -6392,8 +6614,8 @@ snapshots: '@vue/shared': 3.5.1 estree-walker: 2.0.2 magic-string: 0.30.12 - postcss: 8.4.45 - source-map-js: 1.2.0 + postcss: 8.4.47 + source-map-js: 1.2.1 '@vue/compiler-sfc@3.5.6': dependencies: @@ -6403,9 +6625,9 @@ snapshots: '@vue/compiler-ssr': 3.5.6 '@vue/shared': 3.5.6 estree-walker: 2.0.2 - magic-string: 0.30.11 + magic-string: 0.30.12 postcss: 8.4.47 - source-map-js: 1.2.0 + source-map-js: 1.2.1 '@vue/compiler-ssr@3.5.1': dependencies: @@ -6580,6 +6802,8 @@ snapshots: argparse@2.0.1: {} + assertion-error@2.0.1: {} + ast-kit@1.1.0: dependencies: '@babel/parser': 7.25.4 @@ -6726,6 +6950,14 @@ snapshots: caniuse-lite@1.0.30001667: {} + chai@5.1.1: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.2 + pathval: 2.0.0 + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 @@ -6760,6 +6992,8 @@ snapshots: transitivePeerDependencies: - magicast + check-error@2.1.1: {} + chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -7039,6 +7273,8 @@ snapshots: optionalDependencies: supports-color: 9.4.0 + deep-eql@5.0.2: {} + deep-is@0.1.4: {} deepmerge@4.3.1: {} @@ -7521,10 +7757,6 @@ snapshots: dependencies: reusify: 1.0.4 - fdir@6.3.0(picomatch@2.3.1): - optionalDependencies: - picomatch: 2.3.1 - fdir@6.3.0(picomatch@4.0.2): optionalDependencies: picomatch: 4.0.2 @@ -7748,6 +7980,8 @@ snapshots: hosted-git-info@2.8.9: {} + html-escaper@2.0.2: {} + html-tags@3.3.1: {} http-errors@2.0.0: @@ -7919,6 +8153,27 @@ snapshots: isexe@2.0.0: {} + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@5.0.6: + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + debug: 4.3.6(supports-color@9.4.0) + istanbul-lib-coverage: 3.2.2 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.1.7: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + jackspeak@3.4.0: dependencies: '@isaacs/cliui': 8.0.2 @@ -7979,7 +8234,7 @@ snapshots: launch-editor@2.9.1: dependencies: - picocolors: 1.0.1 + picocolors: 1.1.0 shell-quote: 1.8.1 lazystream@1.0.1: @@ -8045,6 +8300,8 @@ snapshots: lodash@4.17.21: {} + loupe@3.1.2: {} + lru-cache@10.4.3: {} lru-cache@5.1.1: @@ -8073,6 +8330,10 @@ snapshots: dependencies: semver: 6.3.1 + make-dir@4.0.0: + dependencies: + semver: 7.6.3 + mdn-data@2.0.28: {} mdn-data@2.0.30: {} @@ -8170,12 +8431,12 @@ snapshots: natural-compare@1.4.0: {} - nitropack-nightly@2.10.0-20241015-134338.b9fcc837(encoding@0.1.13)(typescript@5.4.2)(webpack-sources@3.2.3): + nitropack-nightly@2.10.0-20241021-025328.14b4891f(encoding@0.1.13)(typescript@5.4.2)(webpack-sources@3.2.3): dependencies: '@cloudflare/kv-asset-handler': 0.3.4 '@netlify/functions': 2.8.2 '@rollup/plugin-alias': 5.1.1(rollup@4.24.0) - '@rollup/plugin-commonjs': 28.0.0(rollup@4.24.0) + '@rollup/plugin-commonjs': 28.0.1(rollup@4.24.0) '@rollup/plugin-inject': 5.0.5(rollup@4.24.0) '@rollup/plugin-json': 6.1.0(rollup@4.24.0) '@rollup/plugin-node-resolve': 15.3.0(rollup@4.24.0) @@ -8361,7 +8622,7 @@ snapshots: magic-string: 0.30.11 mlly: 1.7.2 nanotar: 0.1.1 - nitropack: nitropack-nightly@2.10.0-20241015-134338.b9fcc837(encoding@0.1.13)(typescript@5.4.2)(webpack-sources@3.2.3) + nitropack: nitropack-nightly@2.10.0-20241021-025328.14b4891f(encoding@0.1.13)(typescript@5.4.2)(webpack-sources@3.2.3) nuxi: 3.13.2 nypm: 0.3.12 ofetch: 1.4.1 @@ -8588,6 +8849,8 @@ snapshots: pathe@1.1.2: {} + pathval@2.0.0: {} + perfect-debounce@1.0.0: {} picocolors@1.0.1: {} @@ -9182,6 +9445,8 @@ snapshots: shell-quote@1.8.1: {} + siginfo@2.0.0: {} + signal-exit@3.0.7: {} signal-exit@4.1.0: {} @@ -9246,6 +9511,8 @@ snapshots: stable-hash@0.0.4: {} + stackback@0.0.2: {} + standard-as-callback@2.1.0: {} statuses@2.0.1: {} @@ -9372,10 +9639,18 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 + test-exclude@7.0.1: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 10.4.1 + minimatch: 9.0.4 + text-table@0.2.0: {} tiny-invariant@1.3.3: {} + tinybench@2.9.0: {} + tinyexec@0.3.0: {} tinyglobby@0.2.6: @@ -9383,6 +9658,12 @@ snapshots: fdir: 6.3.0(picomatch@4.0.2) picomatch: 4.0.2 + tinypool@1.0.1: {} + + tinyrainbow@1.2.0: {} + + tinyspy@3.0.2: {} + to-fast-properties@2.0.0: {} to-regex-range@5.0.1: @@ -9546,7 +9827,7 @@ snapshots: fast-glob: 3.3.2 json5: 2.2.3 local-pkg: 0.5.0 - magic-string: 0.30.11 + magic-string: 0.30.12 mlly: 1.7.2 pathe: 1.1.2 scule: 1.3.0 @@ -9678,6 +9959,23 @@ snapshots: - supports-color - terser + vite-node@2.1.3(@types/node@20.16.12)(terser@5.29.2): + dependencies: + cac: 6.7.14 + debug: 4.3.6(supports-color@9.4.0) + pathe: 1.1.2 + vite: 5.4.6(@types/node@20.16.12)(terser@5.29.2) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + vite-plugin-checker@0.8.0(eslint@9.12.0(jiti@2.3.3))(optionator@0.9.3)(typescript@5.4.2)(vite@5.4.6(@types/node@20.16.12)(terser@5.29.2))(vue-tsc@2.1.6(typescript@5.4.2)): dependencies: '@babel/code-frame': 7.24.7 @@ -9710,7 +10008,7 @@ snapshots: fs-extra: 11.2.0 open: 10.1.0 perfect-debounce: 1.0.0 - picocolors: 1.0.1 + picocolors: 1.1.0 sirv: 2.0.4 vite: 5.4.6(@types/node@20.16.12)(terser@5.29.2) optionalDependencies: @@ -9729,7 +10027,7 @@ snapshots: '@vue/babel-plugin-jsx': 1.2.2(@babel/core@7.24.7) '@vue/compiler-dom': 3.5.1 kolorist: 1.8.0 - magic-string: 0.30.11 + magic-string: 0.30.12 vite: 5.4.6(@types/node@20.16.12)(terser@5.29.2) transitivePeerDependencies: - supports-color @@ -9744,9 +10042,9 @@ snapshots: fsevents: 2.3.3 terser: 5.29.2 - vitest-environment-nuxt@1.0.1(h3@1.13.0)(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.6(@types/node@20.16.12)(terser@5.29.2))(vue-router@4.4.5(vue@3.5.6(typescript@5.4.2)))(vue@3.5.6(typescript@5.4.2))(webpack-sources@3.2.3): + vitest-environment-nuxt@1.0.1(h3@1.13.0)(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.6(@types/node@20.16.12)(terser@5.29.2))(vitest@2.1.3(@types/node@20.16.12)(terser@5.29.2))(vue-router@4.4.5(vue@3.5.6(typescript@5.4.2)))(vue@3.5.6(typescript@5.4.2))(webpack-sources@3.2.3): dependencies: - '@nuxt/test-utils': 3.14.3(h3@1.13.0)(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.6(@types/node@20.16.12)(terser@5.29.2))(vue-router@4.4.5(vue@3.5.6(typescript@5.4.2)))(vue@3.5.6(typescript@5.4.2))(webpack-sources@3.2.3) + '@nuxt/test-utils': 3.14.3(h3@1.13.0)(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.6(@types/node@20.16.12)(terser@5.29.2))(vitest@2.1.3(@types/node@20.16.12)(terser@5.29.2))(vue-router@4.4.5(vue@3.5.6(typescript@5.4.2)))(vue@3.5.6(typescript@5.4.2))(webpack-sources@3.2.3) transitivePeerDependencies: - '@cucumber/cucumber' - '@jest/globals' @@ -9768,6 +10066,40 @@ snapshots: - vue-router - webpack-sources + vitest@2.1.3(@types/node@20.16.12)(terser@5.29.2): + dependencies: + '@vitest/expect': 2.1.3 + '@vitest/mocker': 2.1.3(@vitest/spy@2.1.3)(vite@5.4.6(@types/node@20.16.12)(terser@5.29.2)) + '@vitest/pretty-format': 2.1.3 + '@vitest/runner': 2.1.3 + '@vitest/snapshot': 2.1.3 + '@vitest/spy': 2.1.3 + '@vitest/utils': 2.1.3 + chai: 5.1.1 + debug: 4.3.6(supports-color@9.4.0) + magic-string: 0.30.12 + pathe: 1.1.2 + std-env: 3.7.0 + tinybench: 2.9.0 + tinyexec: 0.3.0 + tinypool: 1.0.1 + tinyrainbow: 1.2.0 + vite: 5.4.6(@types/node@20.16.12)(terser@5.29.2) + vite-node: 2.1.3(@types/node@20.16.12)(terser@5.29.2) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 20.16.12 + transitivePeerDependencies: + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + vscode-jsonrpc@6.0.0: {} vscode-languageclient@7.0.0: @@ -9852,6 +10184,11 @@ snapshots: dependencies: isexe: 2.0.0 + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + wide-align@1.1.5: dependencies: string-width: 4.2.3 diff --git a/src/utils/templates.ts b/src/utils/templates.ts index 20ff399b1..339a3eefc 100644 --- a/src/utils/templates.ts +++ b/src/utils/templates.ts @@ -55,7 +55,7 @@ const component: Template = ({ name, args }) => ({ `, }) -const composable: Template = ({ name }) => { +export const composable: Template = ({ name }) => { const nameWithoutUsePrefix = name.replace(/^use-?/, '') const nameWithUsePrefix = `use${upperFirst(camelCase(nameWithoutUsePrefix))}` diff --git a/test/unit/templates.spec.ts b/test/unit/templates.spec.ts new file mode 100644 index 000000000..54f6174f5 --- /dev/null +++ b/test/unit/templates.spec.ts @@ -0,0 +1,10 @@ +import { describe, expect, it } from 'vitest' +import { composable } from '../../src/utils/templates' + +describe('templates', () => { + it('composables', () => { + for (const name of ['useSomeComposable', 'someComposable', 'use-some-composable', 'use-someComposable', 'some-composable']) { + expect(composable({ name, args: {} }).contents.trim().split('\n')[0]).toBe('export const useSomeComposable = () => {') + } + }) +})