diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..7b86f2d
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,1092 @@
+{
+ "name": "create-routify",
+ "version": "1.3.2",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "create-routify",
+ "version": "1.3.2",
+ "license": "MIT",
+ "dependencies": {
+ "kleur": "^4.1.5",
+ "log-symbols": "^5.1.0",
+ "minimist": "^1.2.7",
+ "prompts": "^2.4.2",
+ "simple-git": "^3.15.1",
+ "update-notifier": "^6.0.2"
+ },
+ "bin": {
+ "create-routify": "src/bin.js"
+ },
+ "devDependencies": {
+ "@types/prompts": "^2.4.2",
+ "@types/update-notifier": "^6.0.1"
+ }
+ },
+ "node_modules/@kwsites/file-exists": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz",
+ "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==",
+ "dependencies": {
+ "debug": "^4.1.1"
+ }
+ },
+ "node_modules/@kwsites/promise-deferred": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz",
+ "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw=="
+ },
+ "node_modules/@pnpm/network.ca-file": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz",
+ "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==",
+ "dependencies": {
+ "graceful-fs": "4.2.10"
+ },
+ "engines": {
+ "node": ">=12.22.0"
+ }
+ },
+ "node_modules/@pnpm/npm-conf": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-1.0.5.tgz",
+ "integrity": "sha512-hD8ml183638O3R6/Txrh0L8VzGOrFXgRtRDG4qQC4tONdZ5Z1M+tlUUDUvrjYdmK6G+JTBTeaCLMna11cXzi8A==",
+ "dependencies": {
+ "@pnpm/network.ca-file": "^1.0.1",
+ "config-chain": "^1.1.11"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@sindresorhus/is": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.3.0.tgz",
+ "integrity": "sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw==",
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/is?sponsor=1"
+ }
+ },
+ "node_modules/@szmarczak/http-timer": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz",
+ "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==",
+ "dependencies": {
+ "defer-to-connect": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=14.16"
+ }
+ },
+ "node_modules/@types/configstore": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/@types/configstore/-/configstore-6.0.0.tgz",
+ "integrity": "sha512-GUvNiia85zTDDIx0iPrtF3pI8dwrQkfuokEqxqPDE55qxH0U5SZz4awVZjiJLWN2ZZRkXCUqgsMUbygXY+kytA==",
+ "dev": true
+ },
+ "node_modules/@types/http-cache-semantics": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz",
+ "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ=="
+ },
+ "node_modules/@types/node": {
+ "version": "18.13.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.13.0.tgz",
+ "integrity": "sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg==",
+ "dev": true
+ },
+ "node_modules/@types/prompts": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/@types/prompts/-/prompts-2.4.2.tgz",
+ "integrity": "sha512-TwNx7qsjvRIUv/BCx583tqF5IINEVjCNqg9ofKHRlSoUHE62WBHrem4B1HGXcIrG511v29d1kJ9a/t2Esz7MIg==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*",
+ "kleur": "^3.0.3"
+ }
+ },
+ "node_modules/@types/prompts/node_modules/kleur": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
+ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@types/update-notifier": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/@types/update-notifier/-/update-notifier-6.0.2.tgz",
+ "integrity": "sha512-/OKZaYpzHqBO9D+IzqAB7VfC/fx+xl/CM1upD6D56QPNyvAsFULAVLfjlBIGCl1ibU1rKqZV45xOj018WqHhlA==",
+ "dev": true,
+ "dependencies": {
+ "@types/configstore": "*",
+ "boxen": "^7.0.0"
+ }
+ },
+ "node_modules/ansi-align": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz",
+ "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==",
+ "dependencies": {
+ "string-width": "^4.1.0"
+ }
+ },
+ "node_modules/ansi-align/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-align/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "node_modules/ansi-align/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-align/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/boxen": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.0.1.tgz",
+ "integrity": "sha512-8k2eH6SRAK00NDl1iX5q17RJ8rfl53TajdYxE3ssMLehbg487dEVgsad4pIsZb/QqBgYWIl6JOauMTLGX2Kpkw==",
+ "dependencies": {
+ "ansi-align": "^3.0.1",
+ "camelcase": "^7.0.0",
+ "chalk": "^5.0.1",
+ "cli-boxes": "^3.0.0",
+ "string-width": "^5.1.2",
+ "type-fest": "^2.13.0",
+ "widest-line": "^4.0.1",
+ "wrap-ansi": "^8.0.1"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cacheable-lookup": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz",
+ "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==",
+ "engines": {
+ "node": ">=14.16"
+ }
+ },
+ "node_modules/cacheable-request": {
+ "version": "10.2.7",
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.7.tgz",
+ "integrity": "sha512-I4SA6mKgDxcxVbSt/UmIkb9Ny8qSkg6ReBHtAAXnZHk7KOSx5g3DTiAOaYzcHCs6oOdHn+bip9T48E6tMvK9hw==",
+ "dependencies": {
+ "@types/http-cache-semantics": "^4.0.1",
+ "get-stream": "^6.0.1",
+ "http-cache-semantics": "^4.1.1",
+ "keyv": "^4.5.2",
+ "mimic-response": "^4.0.0",
+ "normalize-url": "^8.0.0",
+ "responselike": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=14.16"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz",
+ "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==",
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz",
+ "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==",
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/ci-info": {
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz",
+ "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/sibiraj-s"
+ }
+ ],
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cli-boxes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz",
+ "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/config-chain": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
+ "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
+ "dependencies": {
+ "ini": "^1.3.4",
+ "proto-list": "~1.2.1"
+ }
+ },
+ "node_modules/config-chain/node_modules/ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
+ },
+ "node_modules/configstore": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz",
+ "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==",
+ "dependencies": {
+ "dot-prop": "^6.0.1",
+ "graceful-fs": "^4.2.6",
+ "unique-string": "^3.0.0",
+ "write-file-atomic": "^3.0.3",
+ "xdg-basedir": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/yeoman/configstore?sponsor=1"
+ }
+ },
+ "node_modules/crypto-random-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz",
+ "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==",
+ "dependencies": {
+ "type-fest": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/crypto-random-string/node_modules/type-fest": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
+ "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/decompress-response": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
+ "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
+ "dependencies": {
+ "mimic-response": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/decompress-response/node_modules/mimic-response": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
+ "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/defer-to-connect": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz",
+ "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/dot-prop": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz",
+ "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==",
+ "dependencies": {
+ "is-obj": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
+ },
+ "node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
+ },
+ "node_modules/escape-goat": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz",
+ "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/form-data-encoder": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz",
+ "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==",
+ "engines": {
+ "node": ">= 14.17"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/global-dirs": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz",
+ "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==",
+ "dependencies": {
+ "ini": "2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/got": {
+ "version": "12.5.3",
+ "resolved": "https://registry.npmjs.org/got/-/got-12.5.3.tgz",
+ "integrity": "sha512-8wKnb9MGU8IPGRIo+/ukTy9XLJBwDiCpIf5TVzQ9Cpol50eMTpBq2GAuDsuDIz7hTYmZgMgC1e9ydr6kSDWs3w==",
+ "dependencies": {
+ "@sindresorhus/is": "^5.2.0",
+ "@szmarczak/http-timer": "^5.0.1",
+ "cacheable-lookup": "^7.0.0",
+ "cacheable-request": "^10.2.1",
+ "decompress-response": "^6.0.0",
+ "form-data-encoder": "^2.1.2",
+ "get-stream": "^6.0.1",
+ "http2-wrapper": "^2.1.10",
+ "lowercase-keys": "^3.0.0",
+ "p-cancelable": "^3.0.0",
+ "responselike": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/got?sponsor=1"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
+ },
+ "node_modules/has-yarn": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz",
+ "integrity": "sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/http-cache-semantics": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
+ "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ=="
+ },
+ "node_modules/http2-wrapper": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.0.tgz",
+ "integrity": "sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==",
+ "dependencies": {
+ "quick-lru": "^5.1.1",
+ "resolve-alpn": "^1.2.0"
+ },
+ "engines": {
+ "node": ">=10.19.0"
+ }
+ },
+ "node_modules/import-lazy": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz",
+ "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/ini": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
+ "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/is-ci": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz",
+ "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==",
+ "dependencies": {
+ "ci-info": "^3.2.0"
+ },
+ "bin": {
+ "is-ci": "bin.js"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-installed-globally": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz",
+ "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==",
+ "dependencies": {
+ "global-dirs": "^3.0.0",
+ "is-path-inside": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-npm": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz",
+ "integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
+ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="
+ },
+ "node_modules/is-unicode-supported": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz",
+ "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-yarn-global": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz",
+ "integrity": "sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="
+ },
+ "node_modules/keyv": {
+ "version": "4.5.2",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz",
+ "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==",
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/kleur": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
+ "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/latest-version": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz",
+ "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==",
+ "dependencies": {
+ "package-json": "^8.1.0"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-symbols": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz",
+ "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==",
+ "dependencies": {
+ "chalk": "^5.0.0",
+ "is-unicode-supported": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lowercase-keys": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz",
+ "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/mimic-response": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz",
+ "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/normalize-url": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz",
+ "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==",
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-cancelable": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz",
+ "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==",
+ "engines": {
+ "node": ">=12.20"
+ }
+ },
+ "node_modules/package-json": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.0.tgz",
+ "integrity": "sha512-hySwcV8RAWeAfPsXb9/HGSPn8lwDnv6fabH+obUZKX169QknRkRhPxd1yMubpKDskLFATkl3jHpNtVtDPFA0Wg==",
+ "dependencies": {
+ "got": "^12.1.0",
+ "registry-auth-token": "^5.0.1",
+ "registry-url": "^6.0.0",
+ "semver": "^7.3.7"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/prompts": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
+ "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
+ "dependencies": {
+ "kleur": "^3.0.3",
+ "sisteransi": "^1.0.5"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/prompts/node_modules/kleur": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
+ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/proto-list": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+ "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA=="
+ },
+ "node_modules/pupa": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz",
+ "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==",
+ "dependencies": {
+ "escape-goat": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/quick-lru": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
+ "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/rc": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+ "dependencies": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "bin": {
+ "rc": "cli.js"
+ }
+ },
+ "node_modules/rc/node_modules/ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
+ },
+ "node_modules/registry-auth-token": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.1.tgz",
+ "integrity": "sha512-UfxVOj8seK1yaIOiieV4FIP01vfBDLsY0H9sQzi9EbbUdJiuuBjJgLa1DpImXMNPnVkBD4eVxTEXcrZA6kfpJA==",
+ "dependencies": {
+ "@pnpm/npm-conf": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/registry-url": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz",
+ "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==",
+ "dependencies": {
+ "rc": "1.2.8"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/resolve-alpn": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz",
+ "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g=="
+ },
+ "node_modules/responselike": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz",
+ "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==",
+ "dependencies": {
+ "lowercase-keys": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.3.8",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+ "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/semver-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz",
+ "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==",
+ "dependencies": {
+ "semver": "^7.3.5"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
+ },
+ "node_modules/simple-git": {
+ "version": "3.16.0",
+ "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.16.0.tgz",
+ "integrity": "sha512-zuWYsOLEhbJRWVxpjdiXl6eyAyGo/KzVW+KFhhw9MqEEJttcq+32jTWSGyxTdf9e/YCohxRE+9xpWFj9FdiJNw==",
+ "dependencies": {
+ "@kwsites/file-exists": "^1.1.1",
+ "@kwsites/promise-deferred": "^1.1.1",
+ "debug": "^4.3.4"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/steveukx/git-js?sponsor=1"
+ }
+ },
+ "node_modules/sisteransi": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
+ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="
+ },
+ "node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz",
+ "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+ "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typedarray-to-buffer": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
+ "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
+ "dependencies": {
+ "is-typedarray": "^1.0.0"
+ }
+ },
+ "node_modules/unique-string": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz",
+ "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==",
+ "dependencies": {
+ "crypto-random-string": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/update-notifier": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz",
+ "integrity": "sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==",
+ "dependencies": {
+ "boxen": "^7.0.0",
+ "chalk": "^5.0.1",
+ "configstore": "^6.0.0",
+ "has-yarn": "^3.0.0",
+ "import-lazy": "^4.0.0",
+ "is-ci": "^3.0.1",
+ "is-installed-globally": "^0.4.0",
+ "is-npm": "^6.0.0",
+ "is-yarn-global": "^0.4.0",
+ "latest-version": "^7.0.0",
+ "pupa": "^3.1.0",
+ "semver": "^7.3.7",
+ "semver-diff": "^4.0.0",
+ "xdg-basedir": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/yeoman/update-notifier?sponsor=1"
+ }
+ },
+ "node_modules/widest-line": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz",
+ "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==",
+ "dependencies": {
+ "string-width": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "dependencies": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/write-file-atomic": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
+ "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
+ "dependencies": {
+ "imurmurhash": "^0.1.4",
+ "is-typedarray": "^1.0.0",
+ "signal-exit": "^3.0.2",
+ "typedarray-to-buffer": "^3.1.5"
+ }
+ },
+ "node_modules/xdg-basedir": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz",
+ "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ }
+ }
+}
diff --git a/src/bin.js b/src/bin.js
index 02042fa..ff137e1 100755
--- a/src/bin.js
+++ b/src/bin.js
@@ -1,8 +1,8 @@
#!/usr/bin/env node
-import updateNotifier from 'update-notifier';
import { readFile } from 'fs/promises';
-import { run } from '../src/index.js';
import minimist from 'minimist';
+import updateNotifier from 'update-notifier';
+import { run } from '../src/index.js';
const args = minimist(process.argv.slice(2));
diff --git a/src/index.js b/src/index.js
index 8b23e07..4af3592 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,11 +1,10 @@
-import { onCancel } from './utils/prompts.js';
import { existsSync, readdirSync } from 'fs';
import { mkdir } from 'fs/promises';
+import k from 'kleur';
import symbols from 'log-symbols';
-import { relative } from 'path';
-import { resolve } from 'path';
+import { relative, resolve } from 'path';
import prompts from 'prompts';
-import k from 'kleur';
+import { onCancel } from './utils/prompts.js';
const versions = {
2: () => import('./versions/two.js'),
diff --git a/src/versions/three/examples/typescript-tailwind-cypress/cypress.config.ts b/src/versions/three/examples/typescript-tailwind-cypress/cypress.config.ts
new file mode 100644
index 0000000..98e47ab
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind-cypress/cypress.config.ts
@@ -0,0 +1,9 @@
+import { defineConfig } from 'cypress';
+
+export default defineConfig({
+ e2e: {
+ setupNodeEvents(on, config) {
+ // implement node event listeners here
+ },
+ },
+});
diff --git a/src/versions/three/examples/typescript-tailwind-cypress/cypress/e2e/spec.cy.ts b/src/versions/three/examples/typescript-tailwind-cypress/cypress/e2e/spec.cy.ts
new file mode 100644
index 0000000..41d485f
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind-cypress/cypress/e2e/spec.cy.ts
@@ -0,0 +1,7 @@
+describe('[Home] template spec', () => {
+ it('passes', () => {
+ cy.visit('http://localhost:1337/');
+
+ cy.get('h1').should('have.text', 'Routify 3');
+ });
+});
diff --git a/src/versions/three/examples/typescript-tailwind-cypress/cypress/fixtures/example.json b/src/versions/three/examples/typescript-tailwind-cypress/cypress/fixtures/example.json
new file mode 100644
index 0000000..02e4254
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind-cypress/cypress/fixtures/example.json
@@ -0,0 +1,5 @@
+{
+ "name": "Using fixtures to represent data",
+ "email": "hello@cypress.io",
+ "body": "Fixtures are a great way to mock data for responses to routes"
+}
diff --git a/src/versions/three/examples/typescript-tailwind-cypress/cypress/support/commands.ts b/src/versions/three/examples/typescript-tailwind-cypress/cypress/support/commands.ts
new file mode 100644
index 0000000..698b01a
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind-cypress/cypress/support/commands.ts
@@ -0,0 +1,37 @@
+///
+// ***********************************************
+// This example commands.ts shows you how to
+// create various custom commands and overwrite
+// existing commands.
+//
+// For more comprehensive examples of custom
+// commands please read more here:
+// https://on.cypress.io/custom-commands
+// ***********************************************
+//
+//
+// -- This is a parent command --
+// Cypress.Commands.add('login', (email, password) => { ... })
+//
+//
+// -- This is a child command --
+// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... })
+//
+//
+// -- This is a dual command --
+// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... })
+//
+//
+// -- This will overwrite an existing command --
+// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
+//
+// declare global {
+// namespace Cypress {
+// interface Chainable {
+// login(email: string, password: string): Chainable
+// drag(subject: string, options?: Partial): Chainable
+// dismiss(subject: string, options?: Partial): Chainable
+// visit(originalFn: CommandOriginalFn, url: string, options: Partial): Chainable
+// }
+// }
+// }
\ No newline at end of file
diff --git a/src/versions/three/examples/typescript-tailwind-cypress/cypress/support/e2e.ts b/src/versions/three/examples/typescript-tailwind-cypress/cypress/support/e2e.ts
new file mode 100644
index 0000000..f80f74f
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind-cypress/cypress/support/e2e.ts
@@ -0,0 +1,20 @@
+// ***********************************************************
+// This example support/e2e.ts is processed and
+// loaded automatically before your test files.
+//
+// This is a great place to put global configuration and
+// behavior that modifies Cypress.
+//
+// You can change the location of this file or turn off
+// automatically serving support files with the
+// 'supportFile' configuration option.
+//
+// You can read more here:
+// https://on.cypress.io/configuration
+// ***********************************************************
+
+// Import commands.js using ES2015 syntax:
+import './commands'
+
+// Alternatively you can use CommonJS syntax:
+// require('./commands')
\ No newline at end of file
diff --git a/src/versions/three/examples/typescript-tailwind-cypress/index.html b/src/versions/three/examples/typescript-tailwind-cypress/index.html
new file mode 100644
index 0000000..fdaebc9
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind-cypress/index.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+ Svelte app
+
+
+
+
+
+
+
+
diff --git a/src/versions/three/examples/typescript-tailwind-cypress/package.json b/src/versions/three/examples/typescript-tailwind-cypress/package.json
new file mode 100644
index 0000000..c97be56
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind-cypress/package.json
@@ -0,0 +1,27 @@
+{
+ "name": "starter",
+ "type": "module",
+ "scripts": {
+ "build": "vite build",
+ "preview": "vite preview",
+ "dev": "vite",
+ "svelte-check": "svelte-check",
+ "cypress:open": "cypress open",
+ "cypress:test": "cypress run"
+ },
+ "devDependencies": {
+ "cypress": "^12.5.1",
+ "@roxi/routify": "3.0.0-next.142",
+ "autoprefixer": "^10.4.13",
+ "tailwindcss": "^3.2.6",
+ "tailwindcss-debug-screens": "^2.2.1",
+ "postcss": "^8.4.21",
+ "@sveltejs/vite-plugin-svelte": "^2.0.0",
+ "@tsconfig/svelte": "^3.0.0",
+ "svelte": "^3.55.1",
+ "svelte-preprocess": "^5.0.1",
+ "typescript": "^4.9.5",
+ "vite": "^4.0.0",
+ "svelte-check": "^3.0.3"
+ }
+}
diff --git a/src/versions/three/examples/typescript-tailwind-cypress/postcss.config.cjs b/src/versions/three/examples/typescript-tailwind-cypress/postcss.config.cjs
new file mode 100644
index 0000000..33ad091
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind-cypress/postcss.config.cjs
@@ -0,0 +1,6 @@
+module.exports = {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+}
diff --git a/src/versions/three/examples/typescript-tailwind-cypress/public/favicon.ico b/src/versions/three/examples/typescript-tailwind-cypress/public/favicon.ico
new file mode 100644
index 0000000..1708f40
Binary files /dev/null and b/src/versions/three/examples/typescript-tailwind-cypress/public/favicon.ico differ
diff --git a/src/versions/three/examples/typescript-tailwind-cypress/src/App.svelte b/src/versions/three/examples/typescript-tailwind-cypress/src/App.svelte
new file mode 100644
index 0000000..42ab741
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind-cypress/src/App.svelte
@@ -0,0 +1,7 @@
+
+
+
diff --git a/src/versions/three/examples/typescript-tailwind-cypress/src/app.css b/src/versions/three/examples/typescript-tailwind-cypress/src/app.css
new file mode 100644
index 0000000..b5c61c9
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind-cypress/src/app.css
@@ -0,0 +1,3 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
diff --git a/src/versions/three/examples/typescript-tailwind-cypress/src/main.ts b/src/versions/three/examples/typescript-tailwind-cypress/src/main.ts
new file mode 100644
index 0000000..1f104fa
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind-cypress/src/main.ts
@@ -0,0 +1,5 @@
+import App from './App.svelte'
+
+const app = new App({ target: document.body })
+
+export default app
diff --git a/src/versions/three/examples/typescript-tailwind-cypress/src/routes/index.svelte b/src/versions/three/examples/typescript-tailwind-cypress/src/routes/index.svelte
new file mode 100644
index 0000000..61395f3
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind-cypress/src/routes/index.svelte
@@ -0,0 +1,7 @@
+
+
+
+
{name}
+
diff --git a/src/versions/three/examples/typescript-tailwind-cypress/tailwind.config.cjs b/src/versions/three/examples/typescript-tailwind-cypress/tailwind.config.cjs
new file mode 100644
index 0000000..91e35d0
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind-cypress/tailwind.config.cjs
@@ -0,0 +1,9 @@
+/** @type {import('tailwindcss').Config} */
+module.exports = {
+ darkMode: 'class',
+ content: ['./src/**/*.svelte', './src/**/*.css', './index.html'],
+ theme: {
+ extend: {},
+ },
+ plugins: [require('tailwindcss-debug-screens')],
+};
diff --git a/src/versions/three/examples/typescript-tailwind-cypress/tsconfig.json b/src/versions/three/examples/typescript-tailwind-cypress/tsconfig.json
new file mode 100644
index 0000000..0bf4141
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind-cypress/tsconfig.json
@@ -0,0 +1,20 @@
+{
+ "extends": "@tsconfig/svelte/tsconfig.json",
+ "compilerOptions": {
+ "target": "esnext",
+ "useDefineForClassFields": true,
+ "module": "esnext",
+ "resolveJsonModule": true,
+ "baseUrl": ".",
+ "allowJs": true,
+ "checkJs": true
+ },
+ "include": [
+ "src//.d.ts",
+ "src/**/.ts",
+ "src//*.js",
+ "src//.svelte",
+ "src/main.ts",
+ "src/main.ts"
+ ]
+}
diff --git a/src/versions/three/examples/typescript-tailwind-cypress/vite.config.js b/src/versions/three/examples/typescript-tailwind-cypress/vite.config.js
new file mode 100644
index 0000000..2814064
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind-cypress/vite.config.js
@@ -0,0 +1,26 @@
+import routify from '@roxi/routify/vite-plugin';
+import { svelte } from '@sveltejs/vite-plugin-svelte';
+import preprocess from 'svelte-preprocess';
+import { defineConfig } from 'vite';
+
+const production = process.env.NODE_ENV === 'production';
+
+export default defineConfig({
+ clearScreen: false,
+
+ plugins: [
+ routify({
+ ssr: { enable: false },
+ }),
+ svelte({
+ compilerOptions: {
+ dev: !production,
+ hydratable: !!process.env.ROUTIFY_SSR_ENABLE,
+ },
+ extensions: ['.svelte'],
+ preprocess: [preprocess()],
+ }),
+ ],
+
+ server: { port: 1337 },
+});
diff --git a/src/versions/three/examples/typescript-tailwind-playwright/index.html b/src/versions/three/examples/typescript-tailwind-playwright/index.html
new file mode 100644
index 0000000..fdaebc9
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind-playwright/index.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+ Svelte app
+
+
+
+
+
+
+
+
diff --git a/src/versions/three/examples/typescript-tailwind-playwright/package.json b/src/versions/three/examples/typescript-tailwind-playwright/package.json
new file mode 100644
index 0000000..9c37c16
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind-playwright/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "starter",
+ "type": "module",
+ "scripts": {
+ "build": "vite build",
+ "preview": "vite preview",
+ "dev": "vite",
+ "svelte-check": "svelte-check",
+ "test": "playwright test"
+ },
+ "devDependencies": {
+ "@playwright/test": "^1.30.0",
+ "@roxi/routify": "3.0.0-next.142",
+ "autoprefixer": "^10.4.13",
+ "tailwindcss": "^3.2.6",
+ "tailwindcss-debug-screens": "^2.2.1",
+ "postcss": "^8.4.21",
+ "@sveltejs/vite-plugin-svelte": "^2.0.0",
+ "@tsconfig/svelte": "^3.0.0",
+ "svelte": "^3.55.1",
+ "svelte-preprocess": "^5.0.1",
+ "typescript": "^4.9.5",
+ "vite": "^4.0.0",
+ "svelte-check": "^3.0.3"
+ }
+}
diff --git a/src/versions/three/examples/typescript-tailwind-playwright/playwright.config.ts b/src/versions/three/examples/typescript-tailwind-playwright/playwright.config.ts
new file mode 100644
index 0000000..1e38fa0
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind-playwright/playwright.config.ts
@@ -0,0 +1,12 @@
+import type { PlaywrightTestConfig } from '@playwright/test';
+
+const config: PlaywrightTestConfig = {
+ webServer: {
+ command: 'npm run build && npm run preview',
+ port: 4173,
+ },
+ reporter: 'list',
+ testDir: 'tests',
+};
+
+export default config;
diff --git a/src/versions/three/examples/typescript-tailwind-playwright/postcss.config.cjs b/src/versions/three/examples/typescript-tailwind-playwright/postcss.config.cjs
new file mode 100644
index 0000000..33ad091
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind-playwright/postcss.config.cjs
@@ -0,0 +1,6 @@
+module.exports = {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+}
diff --git a/src/versions/three/examples/typescript-tailwind-playwright/public/favicon.ico b/src/versions/three/examples/typescript-tailwind-playwright/public/favicon.ico
new file mode 100644
index 0000000..1708f40
Binary files /dev/null and b/src/versions/three/examples/typescript-tailwind-playwright/public/favicon.ico differ
diff --git a/src/versions/three/examples/typescript-tailwind-playwright/src/App.svelte b/src/versions/three/examples/typescript-tailwind-playwright/src/App.svelte
new file mode 100644
index 0000000..42ab741
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind-playwright/src/App.svelte
@@ -0,0 +1,7 @@
+
+
+
diff --git a/src/versions/three/examples/typescript-tailwind-playwright/src/app.css b/src/versions/three/examples/typescript-tailwind-playwright/src/app.css
new file mode 100644
index 0000000..b5c61c9
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind-playwright/src/app.css
@@ -0,0 +1,3 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
diff --git a/src/versions/three/examples/typescript-tailwind-playwright/src/main.ts b/src/versions/three/examples/typescript-tailwind-playwright/src/main.ts
new file mode 100644
index 0000000..1f104fa
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind-playwright/src/main.ts
@@ -0,0 +1,5 @@
+import App from './App.svelte'
+
+const app = new App({ target: document.body })
+
+export default app
diff --git a/src/versions/three/examples/typescript-tailwind-playwright/src/routes/index.svelte b/src/versions/three/examples/typescript-tailwind-playwright/src/routes/index.svelte
new file mode 100644
index 0000000..61395f3
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind-playwright/src/routes/index.svelte
@@ -0,0 +1,7 @@
+
+
+
+
{name}
+
diff --git a/src/versions/three/examples/typescript-tailwind-playwright/tailwind.config.cjs b/src/versions/three/examples/typescript-tailwind-playwright/tailwind.config.cjs
new file mode 100644
index 0000000..91e35d0
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind-playwright/tailwind.config.cjs
@@ -0,0 +1,9 @@
+/** @type {import('tailwindcss').Config} */
+module.exports = {
+ darkMode: 'class',
+ content: ['./src/**/*.svelte', './src/**/*.css', './index.html'],
+ theme: {
+ extend: {},
+ },
+ plugins: [require('tailwindcss-debug-screens')],
+};
diff --git a/src/versions/three/examples/typescript-tailwind-playwright/tests/home.spec.ts b/src/versions/three/examples/typescript-tailwind-playwright/tests/home.spec.ts
new file mode 100644
index 0000000..2a81e1b
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind-playwright/tests/home.spec.ts
@@ -0,0 +1,7 @@
+import { expect, test } from '@playwright/test';
+
+test('index page has expected h1', async ({ page }) => {
+ await page.goto('/');
+
+ expect(await page.textContent('h1')).toBe('Routify 3');
+});
diff --git a/src/versions/three/examples/typescript-tailwind-playwright/tsconfig.json b/src/versions/three/examples/typescript-tailwind-playwright/tsconfig.json
new file mode 100644
index 0000000..0bf4141
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind-playwright/tsconfig.json
@@ -0,0 +1,20 @@
+{
+ "extends": "@tsconfig/svelte/tsconfig.json",
+ "compilerOptions": {
+ "target": "esnext",
+ "useDefineForClassFields": true,
+ "module": "esnext",
+ "resolveJsonModule": true,
+ "baseUrl": ".",
+ "allowJs": true,
+ "checkJs": true
+ },
+ "include": [
+ "src//.d.ts",
+ "src/**/.ts",
+ "src//*.js",
+ "src//.svelte",
+ "src/main.ts",
+ "src/main.ts"
+ ]
+}
diff --git a/src/versions/three/examples/typescript-tailwind-playwright/vite.config.js b/src/versions/three/examples/typescript-tailwind-playwright/vite.config.js
new file mode 100644
index 0000000..2814064
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind-playwright/vite.config.js
@@ -0,0 +1,26 @@
+import routify from '@roxi/routify/vite-plugin';
+import { svelte } from '@sveltejs/vite-plugin-svelte';
+import preprocess from 'svelte-preprocess';
+import { defineConfig } from 'vite';
+
+const production = process.env.NODE_ENV === 'production';
+
+export default defineConfig({
+ clearScreen: false,
+
+ plugins: [
+ routify({
+ ssr: { enable: false },
+ }),
+ svelte({
+ compilerOptions: {
+ dev: !production,
+ hydratable: !!process.env.ROUTIFY_SSR_ENABLE,
+ },
+ extensions: ['.svelte'],
+ preprocess: [preprocess()],
+ }),
+ ],
+
+ server: { port: 1337 },
+});
diff --git a/src/versions/three/examples/typescript-tailwind/index.html b/src/versions/three/examples/typescript-tailwind/index.html
new file mode 100644
index 0000000..fdaebc9
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind/index.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+ Svelte app
+
+
+
+
+
+
+
+
diff --git a/src/versions/three/examples/typescript-tailwind/package.json b/src/versions/three/examples/typescript-tailwind/package.json
new file mode 100644
index 0000000..ab737c2
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind/package.json
@@ -0,0 +1,24 @@
+{
+ "name": "starter",
+ "type": "module",
+ "scripts": {
+ "build": "vite build",
+ "preview": "vite preview",
+ "dev": "vite",
+ "svelte-check": "svelte-check"
+ },
+ "devDependencies": {
+ "@roxi/routify": "3.0.0-next.142",
+ "autoprefixer": "^10.4.13",
+ "tailwindcss": "^3.2.6",
+ "tailwindcss-debug-screens": "^2.2.1",
+ "postcss": "^8.4.21",
+ "@sveltejs/vite-plugin-svelte": "^2.0.0",
+ "@tsconfig/svelte": "^3.0.0",
+ "svelte": "^3.55.1",
+ "svelte-preprocess": "^5.0.1",
+ "typescript": "^4.9.5",
+ "vite": "^4.0.0",
+ "svelte-check": "^3.0.3"
+ }
+}
diff --git a/src/versions/three/examples/typescript-tailwind/postcss.config.cjs b/src/versions/three/examples/typescript-tailwind/postcss.config.cjs
new file mode 100644
index 0000000..33ad091
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind/postcss.config.cjs
@@ -0,0 +1,6 @@
+module.exports = {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+}
diff --git a/src/versions/three/examples/typescript-tailwind/public/favicon.ico b/src/versions/three/examples/typescript-tailwind/public/favicon.ico
new file mode 100644
index 0000000..1708f40
Binary files /dev/null and b/src/versions/three/examples/typescript-tailwind/public/favicon.ico differ
diff --git a/src/versions/three/examples/typescript-tailwind/src/App.svelte b/src/versions/three/examples/typescript-tailwind/src/App.svelte
new file mode 100644
index 0000000..42ab741
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind/src/App.svelte
@@ -0,0 +1,7 @@
+
+
+
diff --git a/src/versions/three/examples/typescript-tailwind/src/app.css b/src/versions/three/examples/typescript-tailwind/src/app.css
new file mode 100644
index 0000000..b5c61c9
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind/src/app.css
@@ -0,0 +1,3 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
diff --git a/src/versions/three/examples/typescript-tailwind/src/main.ts b/src/versions/three/examples/typescript-tailwind/src/main.ts
new file mode 100644
index 0000000..1f104fa
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind/src/main.ts
@@ -0,0 +1,5 @@
+import App from './App.svelte'
+
+const app = new App({ target: document.body })
+
+export default app
diff --git a/src/versions/three/examples/typescript-tailwind/src/routes/index.svelte b/src/versions/three/examples/typescript-tailwind/src/routes/index.svelte
new file mode 100644
index 0000000..61395f3
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind/src/routes/index.svelte
@@ -0,0 +1,7 @@
+
+
+
+
{name}
+
diff --git a/src/versions/three/examples/typescript-tailwind/tailwind.config.cjs b/src/versions/three/examples/typescript-tailwind/tailwind.config.cjs
new file mode 100644
index 0000000..91e35d0
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind/tailwind.config.cjs
@@ -0,0 +1,9 @@
+/** @type {import('tailwindcss').Config} */
+module.exports = {
+ darkMode: 'class',
+ content: ['./src/**/*.svelte', './src/**/*.css', './index.html'],
+ theme: {
+ extend: {},
+ },
+ plugins: [require('tailwindcss-debug-screens')],
+};
diff --git a/src/versions/three/examples/typescript-tailwind/tsconfig.json b/src/versions/three/examples/typescript-tailwind/tsconfig.json
new file mode 100644
index 0000000..0bf4141
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind/tsconfig.json
@@ -0,0 +1,20 @@
+{
+ "extends": "@tsconfig/svelte/tsconfig.json",
+ "compilerOptions": {
+ "target": "esnext",
+ "useDefineForClassFields": true,
+ "module": "esnext",
+ "resolveJsonModule": true,
+ "baseUrl": ".",
+ "allowJs": true,
+ "checkJs": true
+ },
+ "include": [
+ "src//.d.ts",
+ "src/**/.ts",
+ "src//*.js",
+ "src//.svelte",
+ "src/main.ts",
+ "src/main.ts"
+ ]
+}
diff --git a/src/versions/three/examples/typescript-tailwind/vite.config.js b/src/versions/three/examples/typescript-tailwind/vite.config.js
new file mode 100644
index 0000000..2814064
--- /dev/null
+++ b/src/versions/three/examples/typescript-tailwind/vite.config.js
@@ -0,0 +1,26 @@
+import routify from '@roxi/routify/vite-plugin';
+import { svelte } from '@sveltejs/vite-plugin-svelte';
+import preprocess from 'svelte-preprocess';
+import { defineConfig } from 'vite';
+
+const production = process.env.NODE_ENV === 'production';
+
+export default defineConfig({
+ clearScreen: false,
+
+ plugins: [
+ routify({
+ ssr: { enable: false },
+ }),
+ svelte({
+ compilerOptions: {
+ dev: !production,
+ hydratable: !!process.env.ROUTIFY_SSR_ENABLE,
+ },
+ extensions: ['.svelte'],
+ preprocess: [preprocess()],
+ }),
+ ],
+
+ server: { port: 1337 },
+});
diff --git a/src/versions/three/index.js b/src/versions/three/index.js
index 8913ca5..9d349ab 100644
--- a/src/versions/three/index.js
+++ b/src/versions/three/index.js
@@ -1,9 +1,9 @@
-import { onCancel } from '../../utils/prompts.js';
-import { readdir, cp } from 'fs/promises';
-import { join, dirname } from 'path';
-import { fileURLToPath } from 'url';
-import prompts from 'prompts';
+import { cp, readdir } from 'fs/promises';
import k from 'kleur';
+import { dirname, join } from 'path';
+import prompts from 'prompts';
+import { fileURLToPath } from 'url';
+import { onCancel } from '../../utils/prompts.js';
const __dirname = dirname(fileURLToPath(import.meta.url));
@@ -59,6 +59,10 @@ export const run = async ({ projectDir }) => {
title: 'Skeleton Project',
value: 'skeleton',
},
+ {
+ title: 'Skeleton Project (TS)',
+ value: 'skeleton-ts',
+ },
{
title: 'Example Project',
value: 'example',
@@ -68,12 +72,17 @@ export const run = async ({ projectDir }) => {
{ onCancel },
);
- if (!['skeleton', 'example'].includes(projectType))
+ if (!['skeleton', 'example', 'skeleton-ts'].includes(projectType))
return console.log(` ${k.red('Unable to find type ' + projectType)}`);
+ const map = {
+ 'skeleton-ts': './skeleton-ts',
+ skeleton: './skeleton',
+ };
+
const exampleDir = join(
__dirname,
- projectType == 'skeleton' ? './skeleton' : await getExampleDir(),
+ map[projectType] || (await getExampleDir()),
'/',
);
diff --git a/src/versions/three/skeleton-ts/index.html b/src/versions/three/skeleton-ts/index.html
new file mode 100644
index 0000000..a460a88
--- /dev/null
+++ b/src/versions/three/skeleton-ts/index.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+ Svelte app
+
+
+
+
+
+
+
+
diff --git a/src/versions/three/skeleton-ts/package.json b/src/versions/three/skeleton-ts/package.json
new file mode 100644
index 0000000..acd9d58
--- /dev/null
+++ b/src/versions/three/skeleton-ts/package.json
@@ -0,0 +1,20 @@
+{
+ "name": "starter",
+ "type": "module",
+ "scripts": {
+ "build": "vite build",
+ "preview": "vite preview",
+ "dev": "vite",
+ "svelte-check": "svelte-check"
+ },
+ "devDependencies": {
+ "@roxi/routify": "3.0.0-next.142",
+ "@sveltejs/vite-plugin-svelte": "^2.0.0",
+ "@tsconfig/svelte": "^3.0.0",
+ "svelte": "^3.55.1",
+ "svelte-preprocess": "^5.0.1",
+ "typescript": "^4.9.5",
+ "vite": "^4.0.0",
+ "svelte-check": "^3.0.3"
+ }
+}
diff --git a/src/versions/three/skeleton-ts/public/favicon.ico b/src/versions/three/skeleton-ts/public/favicon.ico
new file mode 100644
index 0000000..1708f40
Binary files /dev/null and b/src/versions/three/skeleton-ts/public/favicon.ico differ
diff --git a/src/versions/three/skeleton-ts/src/App.svelte b/src/versions/three/skeleton-ts/src/App.svelte
new file mode 100644
index 0000000..e51b06e
--- /dev/null
+++ b/src/versions/three/skeleton-ts/src/App.svelte
@@ -0,0 +1,6 @@
+
+
+
diff --git a/src/versions/three/skeleton-ts/src/main.ts b/src/versions/three/skeleton-ts/src/main.ts
new file mode 100644
index 0000000..1f104fa
--- /dev/null
+++ b/src/versions/three/skeleton-ts/src/main.ts
@@ -0,0 +1,5 @@
+import App from './App.svelte'
+
+const app = new App({ target: document.body })
+
+export default app
diff --git a/src/versions/three/skeleton-ts/src/routes/index.svelte b/src/versions/three/skeleton-ts/src/routes/index.svelte
new file mode 100644
index 0000000..0e3bc5d
--- /dev/null
+++ b/src/versions/three/skeleton-ts/src/routes/index.svelte
@@ -0,0 +1,5 @@
+
+
+{name}
diff --git a/src/versions/three/skeleton-ts/tsconfig.json b/src/versions/three/skeleton-ts/tsconfig.json
new file mode 100644
index 0000000..0bf4141
--- /dev/null
+++ b/src/versions/three/skeleton-ts/tsconfig.json
@@ -0,0 +1,20 @@
+{
+ "extends": "@tsconfig/svelte/tsconfig.json",
+ "compilerOptions": {
+ "target": "esnext",
+ "useDefineForClassFields": true,
+ "module": "esnext",
+ "resolveJsonModule": true,
+ "baseUrl": ".",
+ "allowJs": true,
+ "checkJs": true
+ },
+ "include": [
+ "src//.d.ts",
+ "src/**/.ts",
+ "src//*.js",
+ "src//.svelte",
+ "src/main.ts",
+ "src/main.ts"
+ ]
+}
diff --git a/src/versions/three/skeleton-ts/vite.config.js b/src/versions/three/skeleton-ts/vite.config.js
new file mode 100644
index 0000000..2814064
--- /dev/null
+++ b/src/versions/three/skeleton-ts/vite.config.js
@@ -0,0 +1,26 @@
+import routify from '@roxi/routify/vite-plugin';
+import { svelte } from '@sveltejs/vite-plugin-svelte';
+import preprocess from 'svelte-preprocess';
+import { defineConfig } from 'vite';
+
+const production = process.env.NODE_ENV === 'production';
+
+export default defineConfig({
+ clearScreen: false,
+
+ plugins: [
+ routify({
+ ssr: { enable: false },
+ }),
+ svelte({
+ compilerOptions: {
+ dev: !production,
+ hydratable: !!process.env.ROUTIFY_SSR_ENABLE,
+ },
+ extensions: ['.svelte'],
+ preprocess: [preprocess()],
+ }),
+ ],
+
+ server: { port: 1337 },
+});