diff --git a/.prettierrc b/.prettierrc index adb0aebd..8bf95b38 100644 --- a/.prettierrc +++ b/.prettierrc @@ -6,7 +6,14 @@ "jsxSingleQuote": false, "overrides": [ { "files": ["*.md"], "options": { "tabWidth": 2, "useTabs": false } }, - { "files": "*.astro", "options": { "parser": "astro" } } + { "files": "*.astro", "options": { "parser": "astro" } }, + { + "files": ["pnpm-workspace.yaml"], + "options": { + "useTabs": true, + "singleQuote": true + } + } ], "plugins": [ "@stephansama/prettier-plugin-handlebars", diff --git a/package.json b/package.json index a5ab11bc..0344d8a4 100644 --- a/package.json +++ b/package.json @@ -90,6 +90,7 @@ }, "devDependencies": { "actions-up": "^1.11.0", + "node-plop": "catalog:", "taze": "^19.9.2" }, "packageManager": "pnpm@10.29.3" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b13c92cd..80f10246 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -82,6 +82,9 @@ catalogs: minify: specifier: 14.0.0 version: 14.0.0 + node-plop: + specifier: ^0.32.3 + version: 0.32.3 prettier: specifier: ^3.8.1 version: 3.8.1 @@ -334,6 +337,9 @@ importers: actions-up: specifier: ^1.11.0 version: 1.11.0 + node-plop: + specifier: 'catalog:' + version: 0.32.3(@types/node@24.10.13) taze: specifier: ^19.9.2 version: 19.9.2 @@ -360,7 +366,7 @@ importers: version: 1.1.2(typedoc-plugin-markdown@4.9.0(typedoc@0.28.15(typescript@5.9.3))) vitepress: specifier: ^1.6.4 - version: 1.6.4(@algolia/client-search@5.35.0)(@types/node@24.10.13)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.1))(react@19.2.1)(search-insights@2.17.3)(terser@5.42.0)(typescript@5.9.3) + version: 1.6.4(@algolia/client-search@5.35.0)(@types/node@24.10.13)(change-case@5.4.4)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.1))(react@19.2.1)(search-insights@2.17.3)(terser@5.42.0)(typescript@5.9.3) core/ai-commit-msg: dependencies: @@ -3981,6 +3987,9 @@ packages: '@types/http-cache-semantics@4.0.4': resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + '@types/inquirer@9.0.9': + resolution: {integrity: sha512-/mWx5136gts2Z2e5izdoRCo46lPp5TMs9R15GTSsgg/XnZyxDWVqoVU3R9lWnccKpqwsJLvRoxbCjoJtZB7DSw==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -4026,6 +4035,9 @@ packages: '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + '@types/picomatch@4.0.2': + resolution: {integrity: sha512-qHHxQ+P9PysNEGbALT8f8YOSHW0KJu6l2xU8DYY0fu/EmGxXdVnuTLvFUvBgPJMSqXq29SYHveejeAha+4AYgA==} + '@types/react-dom@19.2.3': resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} peerDependencies: @@ -4040,6 +4052,9 @@ packages: '@types/sax@1.2.7': resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} + '@types/through@0.0.33': + resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==} + '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} @@ -4480,6 +4495,10 @@ packages: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + ansi-escapes@7.2.0: resolution: {integrity: sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==} engines: {node: '>=18'} @@ -4701,6 +4720,9 @@ packages: birpc@2.6.1: resolution: {integrity: sha512-LPnFhlDpdSH6FJhJyn4M0kFO7vtQ5iPw24FnG0y21q09xC7e8+1LeR31S1MAIrDAHp4m7aas4bEkTDTvMAtebQ==} + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + blake3-wasm@2.1.5: resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} @@ -4742,6 +4764,9 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + bundle-name@4.1.0: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} @@ -4832,6 +4857,9 @@ packages: resolution: {integrity: sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + change-case@5.4.4: + resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} + character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} @@ -4894,6 +4922,10 @@ packages: resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} engines: {node: '>=10'} + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + cli-cursor@5.0.0: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} @@ -4918,6 +4950,10 @@ packages: resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} engines: {node: '>=20'} + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + clone@2.1.2: resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} engines: {node: '>=0.8'} @@ -5227,6 +5263,9 @@ packages: resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} engines: {node: '>=18'} + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + defer-to-connect@2.0.1: resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} engines: {node: '>=10'} @@ -6223,6 +6262,9 @@ packages: resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} engines: {node: '>=0.10.0'} + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -6270,6 +6312,10 @@ packages: inline-style-parser@0.2.4: resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} + inquirer@9.3.8: + resolution: {integrity: sha512-pFGGdaHrmRKMh4WoDDSowddgjT1Vkl90atobmTeSmcPGdYiwikch/m/Ef5wRaiamHejtw0cUUMMerzDUXCci2w==} + engines: {node: '>=18'} + internal-slot@1.1.0: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} @@ -6378,6 +6424,10 @@ packages: engines: {node: '>=14.16'} hasBin: true + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + is-interactive@2.0.0: resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} engines: {node: '>=12'} @@ -6488,6 +6538,10 @@ packages: resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + is-unicode-supported@1.3.0: resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} engines: {node: '>=12'} @@ -6534,6 +6588,10 @@ packages: resolution: {integrity: sha512-YKBKVkKhty7s8rxddb40oOkuP0NbaeXrQvLin6QMHL7Ypiy2RW9LwOVrVgZRyOrhQlayMd9t+D8yDy8MKFTSDQ==} engines: {node: '>= 18.0.0'} + isbinaryfile@5.0.7: + resolution: {integrity: sha512-gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ==} + engines: {node: '>= 18.0.0'} + isbot@5.1.31: resolution: {integrity: sha512-DPgQshehErHAqSCKDb3rNW03pa2wS/v5evvUqtxt6TTnHRqAG8FdzcSSJs9656pK6Y+NT7K9R4acEYXLHYfpUQ==} engines: {node: '>=18'} @@ -6853,6 +6911,10 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + log-symbols@6.0.0: resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} engines: {node: '>=18'} @@ -7266,6 +7328,10 @@ packages: muggle-string@0.4.1: resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + 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} + mute-stream@2.0.0: resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} engines: {node: ^18.17.0 || >=20.5.0} @@ -7349,6 +7415,10 @@ packages: node-modules-tools@1.2.0: resolution: {integrity: sha512-RiUfH6cGw1TnmYV+9hyPcTKWZwTlypYuWR90V9utkhRT/rZ4b4yg1pUn+fdolJmuGgJsZqGfxYr9bIh8+BIIXA==} + node-plop@0.32.3: + resolution: {integrity: sha512-tn+OxutdqhvoByKJ7p84FZBSUDfUB76bcvj0ugLBvgE9V52LFcnz8cauCDKi6otnctvFCqa9XkrU35pBY5Baig==} + engines: {node: '>=18'} + node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} @@ -7477,6 +7547,10 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + ora@8.2.0: resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} engines: {node: '>=18'} @@ -8052,6 +8126,10 @@ packages: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} engines: {node: '>=6'} + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + readdirp@4.1.2: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} @@ -8203,6 +8281,10 @@ packages: resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} engines: {node: '>=14.16'} + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + restore-cursor@5.1.0: resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} @@ -8272,9 +8354,16 @@ packages: resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} engines: {node: '>=18'} + run-async@3.0.0: + resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} + engines: {node: '>=0.12.0'} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + s.color@0.0.15: resolution: {integrity: sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA==} @@ -8602,6 +8691,9 @@ packages: resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} engines: {node: '>= 0.4'} + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + stringify-entities@4.0.4: resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} @@ -8821,6 +8913,9 @@ packages: resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} engines: {node: '>=14.0.0'} + title-case@4.3.2: + resolution: {integrity: sha512-I/nkcBo73mO42Idfv08jhInV61IMb61OdIFxk+B4Gu1oBjWBPOLmhZdsli+oJCVaD+86pYQA93cJfFt224ZFAA==} + tldts-core@7.0.17: resolution: {integrity: sha512-DieYoGrP78PWKsrXr8MZwtQ7GLCUeLxihtjC1jZsW1DnvSMdKPitJSe8OSYDM2u5H6g3kWJZpePqkp43TfLh0g==} @@ -8979,6 +9074,10 @@ packages: resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} engines: {node: '>=4'} + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + type-fest@0.4.1: resolution: {integrity: sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==} engines: {node: '>=6'} @@ -9099,10 +9198,6 @@ packages: resolution: {integrity: sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==} engines: {node: '>=18.17'} - undici@7.16.0: - resolution: {integrity: sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==} - engines: {node: '>=20.18.1'} - undici@7.22.0: resolution: {integrity: sha512-RqslV2Us5BrllB+JeiZnK4peryVTndy9Dnqq62S3yYRRTj0tFQCwEniUy2167skdGOy3vqRzEvl1Dm4sV2ReDg==} engines: {node: '>=20.18.1'} @@ -9793,6 +9888,9 @@ packages: resolution: {integrity: sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==} engines: {node: 20 || >=22} + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} @@ -10276,7 +10374,7 @@ snapshots: '@loaderkit/resolve': 1.0.4 cjs-module-lexer: 1.4.3 fflate: 0.8.2 - lru-cache: 11.2.4 + lru-cache: 11.2.6 semver: 7.7.4 typescript: 5.6.1-rc validate-npm-package-name: 5.0.1 @@ -13022,6 +13120,11 @@ snapshots: '@types/http-cache-semantics@4.0.4': {} + '@types/inquirer@9.0.9': + dependencies: + '@types/through': 0.0.33 + rxjs: 7.8.2 + '@types/json-schema@7.0.15': {} '@types/keyv@3.1.4': @@ -13069,6 +13172,8 @@ snapshots: '@types/normalize-package-data@2.4.4': {} + '@types/picomatch@4.0.2': {} + '@types/react-dom@19.2.3(@types/react@19.2.14)': dependencies: '@types/react': 19.2.14 @@ -13085,6 +13190,10 @@ snapshots: dependencies: '@types/node': 24.10.13 + '@types/through@0.0.33': + dependencies: + '@types/node': 24.10.13 + '@types/trusted-types@2.0.7': {} '@types/ungap__structured-clone@1.2.0': {} @@ -13533,12 +13642,13 @@ snapshots: transitivePeerDependencies: - typescript - '@vueuse/integrations@12.8.2(focus-trap@7.6.5)(typescript@5.9.3)': + '@vueuse/integrations@12.8.2(change-case@5.4.4)(focus-trap@7.6.5)(typescript@5.9.3)': dependencies: '@vueuse/core': 12.8.2(typescript@5.9.3) '@vueuse/shared': 12.8.2(typescript@5.9.3) vue: 3.5.18(typescript@5.9.3) optionalDependencies: + change-case: 5.4.4 focus-trap: 7.6.5 transitivePeerDependencies: - typescript @@ -13691,6 +13801,10 @@ snapshots: ansi-colors@4.1.3: {} + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + ansi-escapes@7.2.0: dependencies: environment: 1.1.0 @@ -14107,6 +14221,12 @@ snapshots: birpc@2.6.1: {} + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + blake3-wasm@2.1.5: optional: true @@ -14172,6 +14292,11 @@ snapshots: buffer-from@1.1.2: {} + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + bundle-name@4.1.0: dependencies: run-applescript: 7.1.0 @@ -14271,6 +14396,8 @@ snapshots: chalk@5.6.0: {} + change-case@5.4.4: {} + character-entities-html4@2.1.0: {} character-entities-legacy@3.0.0: {} @@ -14310,6 +14437,10 @@ snapshots: cli-boxes@3.0.0: {} + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + cli-cursor@5.0.0: dependencies: restore-cursor: 5.1.0 @@ -14335,6 +14466,8 @@ snapshots: strip-ansi: 7.1.2 wrap-ansi: 9.0.2 + clone@1.0.4: {} + clone@2.1.2: {} clsx@2.1.1: {} @@ -14628,6 +14761,10 @@ snapshots: bundle-name: 4.1.0 default-browser-id: 5.0.0 + defaults@1.0.4: + dependencies: + clone: 1.0.4 + defer-to-connect@2.0.1: {} define-data-property@1.1.4: @@ -16000,6 +16137,8 @@ snapshots: dependencies: safer-buffer: 2.1.2 + ieee754@1.2.1: {} + ignore@5.3.2: {} ignore@7.0.5: {} @@ -16032,6 +16171,23 @@ snapshots: inline-style-parser@0.2.4: {} + inquirer@9.3.8(@types/node@24.10.13): + dependencies: + '@inquirer/external-editor': 1.0.3(@types/node@24.10.13) + '@inquirer/figures': 1.0.15 + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 1.0.0 + ora: 5.4.1 + run-async: 3.0.0 + rxjs: 7.8.2 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.3 + transitivePeerDependencies: + - '@types/node' + internal-slot@1.1.0: dependencies: es-errors: 1.3.0 @@ -16133,6 +16289,8 @@ snapshots: dependencies: is-docker: 3.0.0 + is-interactive@1.0.0: {} + is-interactive@2.0.0: {} is-map@2.0.3: {} @@ -16218,6 +16376,8 @@ snapshots: dependencies: which-typed-array: 1.1.19 + is-unicode-supported@0.1.0: {} + is-unicode-supported@1.3.0: {} is-unicode-supported@2.1.0: {} @@ -16251,6 +16411,8 @@ snapshots: isbinaryfile@5.0.4: {} + isbinaryfile@5.0.7: {} + isbot@5.1.31: {} isexe@2.0.0: {} @@ -16561,6 +16723,11 @@ snapshots: lodash@4.17.21: {} + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + log-symbols@6.0.0: dependencies: chalk: 5.6.0 @@ -17180,7 +17347,7 @@ snapshots: glob-to-regexp: 0.4.1 sharp: 0.33.5 stoppable: 1.1.0 - undici: 7.16.0 + undici: 7.22.0 workerd: 1.20250813.0 ws: 8.18.0 youch: 4.1.0-beta.10 @@ -17269,6 +17436,8 @@ snapshots: muggle-string@0.4.1: {} + mute-stream@1.0.0: {} + mute-stream@2.0.0: {} nano-spawn@2.0.0: {} @@ -17374,6 +17543,21 @@ snapshots: semver: 7.7.4 tinyexec: 1.0.2 + node-plop@0.32.3(@types/node@24.10.13): + dependencies: + '@types/inquirer': 9.0.9 + '@types/picomatch': 4.0.2 + change-case: 5.4.4 + dlv: 1.1.3 + handlebars: 4.7.8 + inquirer: 9.3.8(@types/node@24.10.13) + isbinaryfile: 5.0.7 + resolve: 1.22.10 + tinyglobby: 0.2.15 + title-case: 4.3.2 + transitivePeerDependencies: + - '@types/node' + node-releases@2.0.19: {} node-stream-zip@1.15.0: {} @@ -17523,6 +17707,18 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 + ora@5.4.1: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + ora@8.2.0: dependencies: chalk: 5.6.0 @@ -18058,6 +18254,12 @@ snapshots: pify: 4.0.1 strip-bom: 3.0.0 + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + readdirp@4.1.2: {} readdirp@5.0.0: {} @@ -18305,6 +18507,11 @@ snapshots: dependencies: lowercase-keys: 3.0.0 + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + restore-cursor@5.1.0: dependencies: onetime: 7.0.0 @@ -18440,10 +18647,16 @@ snapshots: run-applescript@7.1.0: {} + run-async@3.0.0: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + s.color@0.0.15: {} sade@1.8.1: @@ -18875,6 +19088,10 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.1 + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + stringify-entities@4.0.4: dependencies: character-entities-html4: 2.1.0 @@ -19094,6 +19311,8 @@ snapshots: tinyspy@4.0.3: {} + title-case@4.3.2: {} + tldts-core@7.0.17: {} tldts@7.0.17: @@ -19222,6 +19441,8 @@ snapshots: type-detect@4.1.0: {} + type-fest@0.21.3: {} + type-fest@0.4.1: {} type-fest@2.19.0: {} @@ -19353,9 +19574,6 @@ snapshots: undici@6.21.3: {} - undici@7.16.0: - optional: true - undici@7.22.0: {} unenv@2.0.0-rc.19: @@ -19364,7 +19582,7 @@ snapshots: exsolve: 1.0.8 ohash: 2.0.11 pathe: 2.0.3 - ufo: 1.6.1 + ufo: 1.6.3 optional: true unicode-properties@1.4.1: @@ -19731,7 +19949,7 @@ snapshots: optionalDependencies: vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.42.0)(tsx@4.21.0)(yaml@2.8.2) - vitepress@1.6.4(@algolia/client-search@5.35.0)(@types/node@24.10.13)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.1))(react@19.2.1)(search-insights@2.17.3)(terser@5.42.0)(typescript@5.9.3): + vitepress@1.6.4(@algolia/client-search@5.35.0)(@types/node@24.10.13)(change-case@5.4.4)(lightningcss@1.30.2)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.1))(react@19.2.1)(search-insights@2.17.3)(terser@5.42.0)(typescript@5.9.3): dependencies: '@docsearch/css': 3.8.2 '@docsearch/js': 3.8.2(@algolia/client-search@5.35.0)(react-dom@19.2.0(react@19.2.1))(react@19.2.1)(search-insights@2.17.3) @@ -19744,7 +19962,7 @@ snapshots: '@vue/devtools-api': 7.7.7 '@vue/shared': 3.5.18 '@vueuse/core': 12.8.2(typescript@5.9.3) - '@vueuse/integrations': 12.8.2(focus-trap@7.6.5)(typescript@5.9.3) + '@vueuse/integrations': 12.8.2(change-case@5.4.4)(focus-trap@7.6.5)(typescript@5.9.3) focus-trap: 7.6.5 mark.js: 8.11.1 minisearch: 7.1.2 @@ -19941,6 +20159,10 @@ snapshots: walk-up-path@4.0.0: {} + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + web-namespaces@2.0.1: {} webidl-conversions@3.0.1: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 98ac11d2..5d0e71fe 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,70 +1,37 @@ -autoInstallPeers: true -catalogMode: strict -cleanupUnusedCatalogs: true -engineStrict: true -shellEmulator: true - packages: - ./.config/* - core/** - examples/** -catalogs: - cli: - cosmiconfig: 9.0.0 - obug: 2.1.1 - yargs: 18.0.0 - schema: - "@standard-schema/spec": ^1.1.0 - arktype: 2.1.29 - valibot: 1.2.0 - zod: 4.2.1 - storybook: - "@chromatic-com/storybook": ^4.1.3 - "@storybook/addon-a11y": ^10.2.8 - "@storybook/addon-docs": ^10.2.8 - "@storybook/addon-svelte-csf": ^5.0.11 - "@storybook/svelte-vite": ^10.2.8 - storybook: ^10.2.8 - svelte: - "@sveltejs/package": ^2.5.7 - "@sveltejs/vite-plugin-svelte": ^6.2.4 - "@tsconfig/svelte": ^5.0.7 - svelte: ^5.51.2 - svelte-check: ^4.4.0 - vitest: - "@vitest/coverage-v8": "^4.0.18" - "@vitest/ui": "^4.0.18" - vitest: "^4.0.18" +autoInstallPeers: true catalog: - "@catppuccin/palette": 1.7.1 - "@dotenvx/dotenvx": ^1.52.0 - "@iconify/types": ^2.0.0 - "@iconify/utils": ^2.3.0 - "@manypkg/find-root": "^3.1.0" - "@manypkg/get-packages": ^3.1.0 - "@testing-library/react": ^16.3.2 - "@testing-library/jest-dom": ^6.9.1 - "@types/debug": ^4.1.12 - "@types/mdast": ^4.0.4 - "@types/minify": 9.1.4 - "@types/react": ^19.2.14 - "@types/vfile": ^4.0.0 - "@types/yargs": ^17.0.35 - actions-up: ^1.11.0 - deepmerge: "^4.3.1" - es-toolkit: 1.43.0 + '@catppuccin/palette': 1.7.1 + '@dotenvx/dotenvx': ^1.52.0 + '@iconify/types': ^2.0.0 + '@iconify/utils': ^2.3.0 + '@manypkg/find-root': ^3.1.0 + '@manypkg/get-packages': ^3.1.0 + '@testing-library/jest-dom': ^6.9.1 + '@testing-library/react': ^16.3.2 + '@types/debug': ^4.1.12 + '@types/mdast': ^4.0.4 + '@types/minify': 9.1.4 + '@types/react': ^19.2.14 + '@types/vfile': ^4.0.0 + '@types/yargs': ^17.0.35 astro: 5.9.3 + deepmerge: ^4.3.1 + es-toolkit: 1.43.0 handlebars: 4.7.8 happy-dom: ^20.6.1 jsr: ^0.13.5 mdast: ^3.0.0 minify: 14.0.0 + node-plop: ^0.32.3 prettier: ^3.8.1 react: 19.2.0 remark: ^15.0.1 - taze: ^19.9.2 tsdown: 0.15.12 tsx: 4.21.0 typescript: 5.9.3 @@ -74,8 +41,42 @@ catalog: vite: 6.3.5 vite-tsconfig-paths: ^5.1.4 +catalogMode: strict + +catalogs: + cli: + cosmiconfig: 9.0.0 + obug: 2.1.1 + yargs: 18.0.0 + schema: + '@standard-schema/spec': ^1.1.0 + arktype: 2.1.29 + valibot: 1.2.0 + zod: 4.2.1 + storybook: + '@chromatic-com/storybook': ^4.1.3 + '@storybook/addon-a11y': ^10.2.8 + '@storybook/addon-docs': ^10.2.8 + '@storybook/addon-svelte-csf': ^5.0.11 + '@storybook/svelte-vite': ^10.2.8 + storybook: ^10.2.8 + svelte: + '@sveltejs/package': ^2.5.7 + '@sveltejs/vite-plugin-svelte': ^6.2.4 + '@tsconfig/svelte': ^5.0.7 + svelte: ^5.51.2 + svelte-check: ^4.4.0 + vitest: + '@vitest/coverage-v8': ^4.0.18 + '@vitest/ui': ^4.0.18 + vitest: ^4.0.18 + +cleanupUnusedCatalogs: true + +engineStrict: true + ignoredBuiltDependencies: - - "@swc/core" + - '@swc/core' - core-js-pure - sharp - workerd @@ -84,9 +85,11 @@ onlyBuiltDependencies: - esbuild overrides: - "@stephansama/astro-iconify-svgmap": workspace:* - "@stephansama/catppuccin-xsl": workspace:* - "@stephansama/remark-asciinema": workspace:* - "@stephansama/svelte-social-share-links": workspace:* - "@stephansama/typed-events": workspace:* + '@stephansama/astro-iconify-svgmap': workspace:* + '@stephansama/catppuccin-xsl': workspace:* + '@stephansama/remark-asciinema': workspace:* + '@stephansama/svelte-social-share-links': workspace:* + '@stephansama/typed-events': workspace:* create-stephansama-example: workspace:* + +shellEmulator: true diff --git a/turbo/generators/config.ts b/turbo/generators/config.ts index 53138218..635a7644 100644 --- a/turbo/generators/config.ts +++ b/turbo/generators/config.ts @@ -1,64 +1,27 @@ import type { PlopTypes } from "@turbo/gen"; +import { actions, prompts } from "./utils"; + +/* eslint-disable perfectionist/sort-objects */ export default function generator(plop: PlopTypes.NodePlopAPI) { - plop.setGenerator("package", { - description: "Generate a new package", - prompts: [ - { - message: "What is the name of the new package?", - name: "name", - type: "input", - validate(input: string) { - if (input.includes(".")) { - return "library name cannot include an extension"; - } - if (input.includes(" ")) { - return "library name cannot include spaces"; - } - if (!input) { - return "library name is required"; - } - return true; - }, - }, - { - message: "What is the description of the new package?", - name: "description", - type: "input", - }, - ], - // eslint-disable-next-line + plop.setGenerator("cli", { + description: "Generate a new cli package", + prompts: [prompts.name, prompts.description], + actions: [actions.addTemplate({ type: "cli" }), actions.addAllCommon], + }); + + plop.setGenerator("env", { + description: "Generate a new env package", + prompts: [prompts.name, prompts.description], actions: [ - { - path: "{{ turbo.paths.root }}/core/{{ dashCase name }}/package.json", - templateFile: "templates/lib/package.json.hbs", - type: "add", - }, - { - path: "{{ turbo.paths.root }}/core/{{ dashCase name }}/README.md", - templateFile: "templates/lib/README.md.hbs", - type: "add", - }, - { - path: "{{ turbo.paths.root }}/core/{{ dashCase name }}/tsdown.config.ts", - templateFile: "templates/lib/tsdown.config.ts.hbs", - type: "add", - }, - { - path: "{{ turbo.paths.root }}/core/{{ dashCase name }}/tsconfig.json", - templateFile: "templates/lib/tsconfig.json.hbs", - type: "add", - }, - { - path: "{{ turbo.paths.root }}/core/{{ dashCase name }}/typedoc.json", - templateFile: "templates/lib/typedoc.json", - type: "add", - }, - { - path: "{{ turbo.paths.root }}/core/{{ dashCase name }}/src/index.ts", - templateFile: "templates/lib/BLANK", - type: "add", - }, + actions.addTemplate({ type: "env" }), + actions.addCommonFile("tsconfig.json"), ], }); + + plop.setGenerator("lib", { + description: "Generate a new lib package", + prompts: [prompts.name, prompts.description], + actions: [actions.addTemplate({ type: "lib" }), actions.addAllCommon], + }); } diff --git a/turbo/generators/templates/cli/cli.mjs b/turbo/generators/templates/cli/cli.mjs new file mode 100644 index 00000000..e9c8ad75 --- /dev/null +++ b/turbo/generators/templates/cli/cli.mjs @@ -0,0 +1,10 @@ +#!/usr/bin/env node + +"use strict"; + +import("./dist/index.js") + .then((mod) => mod.run()) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/turbo/generators/templates/cli/package.json b/turbo/generators/templates/cli/package.json new file mode 100644 index 00000000..492dfcd8 --- /dev/null +++ b/turbo/generators/templates/cli/package.json @@ -0,0 +1,37 @@ +{ + "name": "@stephansama/{{name}}", + "version": "0.0.0", + "description": "{{description}}", + "keywords": [ + "{{name}}" + ], + "homepage": "https://packages.stephansama.info/api/@stephansama/{{name}}", + "repository": { + "type": "git", + "url": "git+https://github.com/stephansama/packages.git", + "directory": "core/{{name}}" + }, + "license": "MIT", + "author": { + "name": "Stephan Randle", + "email": "stephanrandle.dev@gmail.com", + "url": "https://stephansama.info" + }, + "type": "module", + "bin": "./cli.mjs", + "files": [ + "cli.mjs", + "dist" + ], + "scripts": { + "build": "tsdown", + "dev": "tsdown --watch", + "lint": "eslint ./ --pass-on-no-patterns --no-error-on-unmatched-pattern", + "lint:fix": "eslint ./ --fix" + }, + "publishConfig": { + "access": "public", + "provenance": true + }, + "readme": "./README.md" +} diff --git a/turbo/generators/templates/cli/src/index.ts b/turbo/generators/templates/cli/src/index.ts new file mode 100644 index 00000000..8aca8f96 --- /dev/null +++ b/turbo/generators/templates/cli/src/index.ts @@ -0,0 +1,3 @@ +export async function run() { + console.info("running cli {{name}}"); +} diff --git a/turbo/generators/templates/lib/tsconfig.json.hbs b/turbo/generators/templates/common/tsconfig.json similarity index 100% rename from turbo/generators/templates/lib/tsconfig.json.hbs rename to turbo/generators/templates/common/tsconfig.json diff --git a/turbo/generators/templates/lib/tsdown.config.ts.hbs b/turbo/generators/templates/common/tsdown.config.ts similarity index 92% rename from turbo/generators/templates/lib/tsdown.config.ts.hbs rename to turbo/generators/templates/common/tsdown.config.ts index f89b6d45..a1058fc6 100644 --- a/turbo/generators/templates/lib/tsdown.config.ts.hbs +++ b/turbo/generators/templates/common/tsdown.config.ts @@ -3,8 +3,9 @@ import { defineConfig } from "tsdown"; export default defineConfig({ attw: true, dts: true, - publint: true, entry: ["src/index.ts"], + exports: true, format: ["esm", "cjs"], + publint: true, target: "esnext", }); diff --git a/turbo/generators/templates/lib/typedoc.json b/turbo/generators/templates/common/typedoc.json similarity index 100% rename from turbo/generators/templates/lib/typedoc.json rename to turbo/generators/templates/common/typedoc.json diff --git a/turbo/generators/templates/env/package.json b/turbo/generators/templates/env/package.json new file mode 100644 index 00000000..a817776c --- /dev/null +++ b/turbo/generators/templates/env/package.json @@ -0,0 +1,29 @@ +{ + "name": "@stephansama/{{name}}", + "version": "0.0.0", + "description": "{{description}}", + "homepage": "https://packages.stephansama.info/api/@stephansama/{{name}}", + "repository": { + "type": "git", + "url": "git+https://github.com/stephansama/packages.git", + "directory": "core/{{name}}" + }, + "license": "MIT", + "author": { + "name": "Stephan Randle", + "email": "stephanrandle.dev@gmail.com", + "url": "https://stephansama.info" + }, + "type": "module", + "files": [ + "src" + ], + "scripts": { + "lint": "eslint ./src", + "lint:fix": "eslint ./src --fix" + }, + "publishConfig": { + "access": "public", + "provenance": true + } +} diff --git a/turbo/generators/templates/env/src/env.d.ts b/turbo/generators/templates/env/src/env.d.ts new file mode 100644 index 00000000..36090fae --- /dev/null +++ b/turbo/generators/templates/env/src/env.d.ts @@ -0,0 +1,9 @@ +declare global { + namespace NodeJS { + interface ProcessEnv extends ExtendEnvironment {} + } +} + +interface ExtendEnvironment {} + +export {}; diff --git a/turbo/generators/templates/lib/README.md.hbs b/turbo/generators/templates/lib/README.md similarity index 87% rename from turbo/generators/templates/lib/README.md.hbs rename to turbo/generators/templates/lib/README.md index 8b717c56..4da142ac 100644 --- a/turbo/generators/templates/lib/README.md.hbs +++ b/turbo/generators/templates/lib/README.md @@ -9,6 +9,13 @@ ##### Table of contents +
Open Table of contents + +- [Installation](#installation) +- [Usage](#usage) + +
+ ## Installation ```sh diff --git a/turbo/generators/templates/lib/package.json.hbs b/turbo/generators/templates/lib/package.json similarity index 90% rename from turbo/generators/templates/lib/package.json.hbs rename to turbo/generators/templates/lib/package.json index 400c4771..1f435e01 100644 --- a/turbo/generators/templates/lib/package.json.hbs +++ b/turbo/generators/templates/lib/package.json @@ -2,26 +2,28 @@ "name": "@stephansama/{{name}}", "version": "0.0.0", "description": "{{description}}", + "keywords": [ + "{{name}}" + ], + "homepage": "https://packages.stephansama.info/api/@stephansama/{{name}}", "repository": { - "url": "https://github.com/stephansama/packages", "type": "git", + "url": "https://github.com/stephansama/packages", "directory": "core/{{name}}" }, - "homepage": "https://packages.stephansama.info/api/@stephansama/{{name}}", + "license": "MIT", "author": { - "email": "stephanrandle.dev@gmail.com", "name": "Stephan Randle", + "email": "stephanrandle.dev@gmail.com", "url": "https://stephansama.info" }, - "license": "MIT", "type": "module", "scripts": { "build": "tsdown", "dev": "tsdown --watch", - "lint": "eslint ./ --pass-on-no-patterns --no-error-on-unmatched-pattern" + "lint": "eslint ./ --pass-on-no-patterns --no-error-on-unmatched-pattern", + "lint:fix": "eslint ./ --fix" }, - "packageManager": "pnpm@10.11.0", - "keywords": ["{{name}}"], "dependencies": {}, "devDependencies": { "tsdown": "catalog:" diff --git a/turbo/generators/templates/lib/BLANK b/turbo/generators/templates/lib/src/index.ts similarity index 100% rename from turbo/generators/templates/lib/BLANK rename to turbo/generators/templates/lib/src/index.ts diff --git a/turbo/generators/utils/actions.ts b/turbo/generators/utils/actions.ts new file mode 100644 index 00000000..27e0e092 --- /dev/null +++ b/turbo/generators/utils/actions.ts @@ -0,0 +1,29 @@ +import { PlopTypes } from "@turbo/gen"; + +export function addTemplate({ + type: templateType, +}: { + type: "cli" | "env" | "lib"; +}) { + return { + base: `{{turbo.paths.root}}/turbo/generators/templates/${templateType}`, + destination: `{{ turbo.paths.root }}/core/{{ dashCase name }}`, + templateFiles: `{{turbo.paths.root}}/turbo/generators/templates/${templateType}/**`, + type: "addMany", + } as const satisfies PlopTypes.ActionType; +} + +export const addAllCommon = { + base: `{{ turbo.paths.root }}/turbo/generators/templates/common`, + destination: `{{turbo.paths.root}}/core/{{dashCase name}}`, + templateFiles: `{{turbo.paths.root}}/turbo/generators/templates/common/**`, + type: "addMany", +} as const; + +export function addCommonFile(file: S) { + return { + path: `{{ turbo.paths.root }}/core/{{ dashCase name }}/${file}`, + templateFile: `templates/common/${file}`, + type: "add", + } as const; +} diff --git a/turbo/generators/utils/index.ts b/turbo/generators/utils/index.ts new file mode 100644 index 00000000..f7d6da44 --- /dev/null +++ b/turbo/generators/utils/index.ts @@ -0,0 +1,2 @@ +export * as actions from "./actions"; +export * as prompts from "./prompts"; diff --git a/turbo/generators/utils/prompts.ts b/turbo/generators/utils/prompts.ts new file mode 100644 index 00000000..f8ae44df --- /dev/null +++ b/turbo/generators/utils/prompts.ts @@ -0,0 +1,25 @@ +import type { PlopTypes } from "@turbo/gen"; + +export const name = { + message: "What is the name of the new package?", + name: "name", + type: "input", + validate(input: string) { + if (input.includes(".")) { + return "library name cannot include an extension"; + } + if (input.includes(" ")) { + return "library name cannot include spaces"; + } + if (!input) { + return "library name is required"; + } + return true; + }, +} as const satisfies PlopTypes.PromptQuestion; + +export const description = { + message: "What is the description of the new package?", + name: "description", + type: "input", +} as const satisfies PlopTypes.PromptQuestion;