diff --git a/package-lock.json b/package-lock.json index 30878db..84505e7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -313,6 +313,358 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/win32-x64": { "version": "0.20.2", "cpu": [ @@ -2127,8 +2479,382 @@ "@esbuild/win32-x64": "0.20.2" } }, - "node_modules/escalade": { - "version": "3.1.2", + "node_modules/esbuild/node_modules/@esbuild/aix-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.2", "dev": true, "license": "MIT", "engines": { @@ -2763,6 +3489,20 @@ "version": "1.0.0", "license": "ISC" }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", "license": "MIT", @@ -5216,452 +5956,808 @@ "dev": true, "license": "CC-BY-3.0" }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.17", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/ssr": { + "resolved": "playground/ssr", + "link": true + }, + "node_modules/ssr-router": { + "resolved": "playground/ssr-router", + "link": true + }, + "node_modules/statuses": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stream-transform": { + "version": "2.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "mixme": "^0.5.1" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "10.3.12", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/minimatch": { + "version": "9.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", "dev": true, "license": "MIT", "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/spdx-license-ids": { - "version": "3.0.17", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/sprintf-js": { - "version": "1.0.3", + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/ssr": { - "resolved": "playground/ssr", - "link": true - }, - "node_modules/statuses": { - "version": "2.0.1", "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/stream-transform": { - "version": "2.1.3", + "node_modules/tailwindcss": { + "version": "3.4.3", "dev": true, "license": "MIT", "dependencies": { - "mixme": "^0.5.1" + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/string-width": { - "version": "4.2.3", + "node_modules/term-size": { + "version": "2.2.1", "dev": true, "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", + "node_modules/text-table": { + "version": "0.2.0", + "license": "MIT" + }, + "node_modules/thenify": { + "version": "3.3.1", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" + "any-promise": "^1.0.0" } }, - "node_modules/string.prototype.trim": { - "version": "1.2.9", + "node_modules/thenify-all": { + "version": "1.6.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" + "thenify": ">= 3.1.0 < 4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.8" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.8", + "node_modules/tmp": { + "version": "0.0.33", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "os-tmpdir": "~1.0.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.6.0" } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "dev": true, + "node_modules/to-regex-range": { + "version": "5.0.1", "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "is-number": "^7.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8.0" } }, - "node_modules/strip-ansi": { - "version": "6.0.1", + "node_modules/toidentifier": { + "version": "1.0.1", "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, "engines": { - "node": ">=8" + "node": ">=0.6" } }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", + "node_modules/totalist": { + "version": "3.0.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "1.0.1", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" + "punycode": "^2.1.0" } }, - "node_modules/strip-bom": { - "version": "3.0.0", + "node_modules/tree-kill": { + "version": "1.2.2", "dev": true, "license": "MIT", - "engines": { - "node": ">=4" + "bin": { + "tree-kill": "cli.js" } }, - "node_modules/strip-final-newline": { - "version": "2.0.0", + "node_modules/trim-newlines": { + "version": "3.0.1", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/strip-indent": { - "version": "3.0.0", + "node_modules/ts-api-utils": { + "version": "1.3.0", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/tsup": { + "version": "8.0.2", "dev": true, "license": "MIT", "dependencies": { - "min-indent": "^1.0.0" + "bundle-require": "^4.0.0", + "cac": "^6.7.12", + "chokidar": "^3.5.1", + "debug": "^4.3.1", + "esbuild": "^0.19.2", + "execa": "^5.0.0", + "globby": "^11.0.3", + "joycon": "^3.0.1", + "postcss-load-config": "^4.0.1", + "resolve-from": "^5.0.0", + "rollup": "^4.0.2", + "source-map": "0.8.0-beta.0", + "sucrase": "^3.20.3", + "tree-kill": "^1.2.2" + }, + "bin": { + "tsup": "dist/cli-default.js", + "tsup-node": "dist/cli-node.js" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "peerDependencies": { + "@microsoft/api-extractor": "^7.36.0", + "@swc/core": "^1", + "postcss": "^8.4.12", + "typescript": ">=4.5.0" + }, + "peerDependenciesMeta": { + "@microsoft/api-extractor": { + "optional": true + }, + "@swc/core": { + "optional": true + }, + "postcss": { + "optional": true + }, + "typescript": { + "optional": true + } } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "license": "MIT", + "node_modules/tsup/node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/tsup/node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/sucrase": { - "version": "3.35.0", + "node_modules/tsup/node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "^10.3.10", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=12" } }, - "node_modules/sucrase/node_modules/brace-expansion": { - "version": "2.0.1", + "node_modules/tsup/node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "node_modules/sucrase/node_modules/glob": { - "version": "10.3.12", + "node_modules/tsup/node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.6", - "minimatch": "^9.0.1", - "minipass": "^7.0.4", - "path-scurry": "^1.10.2" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=12" } }, - "node_modules/sucrase/node_modules/minimatch": { - "version": "9.0.4", + "node_modules/tsup/node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=12" } }, - "node_modules/supports-color": { - "version": "5.5.0", + "node_modules/tsup/node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", + "node_modules/tsup/node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/tailwindcss": { - "version": "3.4.3", + "node_modules/tsup/node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.3.0", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.21.0", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=14.0.0" + "node": ">=12" } }, - "node_modules/term-size": { - "version": "2.2.1", + "node_modules/tsup/node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/text-table": { - "version": "0.2.0", - "license": "MIT" + "node_modules/tsup/node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/thenify": { - "version": "3.3.1", + "node_modules/tsup/node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/thenify-all": { - "version": "1.6.0", + "node_modules/tsup/node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], "dev": true, - "license": "MIT", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=0.8" + "node": ">=12" } }, - "node_modules/tmp": { - "version": "0.0.33", + "node_modules/tsup/node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=0.6.0" + "node": ">=12" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, + "node_modules/tsup/node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8.0" + "node": ">=12" } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "license": "MIT", + "node_modules/tsup/node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=0.6" + "node": ">=12" } }, - "node_modules/totalist": { - "version": "3.0.1", - "license": "MIT", + "node_modules/tsup/node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/tr46": { - "version": "1.0.1", + "node_modules/tsup/node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "punycode": "^2.1.0" + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/tree-kill": { - "version": "1.2.2", + "node_modules/tsup/node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "bin": { - "tree-kill": "cli.js" + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/trim-newlines": { - "version": "3.0.1", + "node_modules/tsup/node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/ts-api-utils": { - "version": "1.3.0", - "license": "MIT", + "node_modules/tsup/node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" + "node": ">=12" } }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/tsup": { - "version": "8.0.2", + "node_modules/tsup/node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], "dev": true, - "license": "MIT", - "dependencies": { - "bundle-require": "^4.0.0", - "cac": "^6.7.12", - "chokidar": "^3.5.1", - "debug": "^4.3.1", - "esbuild": "^0.19.2", - "execa": "^5.0.0", - "globby": "^11.0.3", - "joycon": "^3.0.1", - "postcss-load-config": "^4.0.1", - "resolve-from": "^5.0.0", - "rollup": "^4.0.2", - "source-map": "0.8.0-beta.0", - "sucrase": "^3.20.3", - "tree-kill": "^1.2.2" - }, - "bin": { - "tsup": "dist/cli-default.js", - "tsup-node": "dist/cli-node.js" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@microsoft/api-extractor": "^7.36.0", - "@swc/core": "^1", - "postcss": "^8.4.12", - "typescript": ">=4.5.0" - }, - "peerDependenciesMeta": { - "@microsoft/api-extractor": { - "optional": true - }, - "@swc/core": { - "optional": true - }, - "postcss": { - "optional": true - }, - "typescript": { - "optional": true - } + "node": ">=12" } }, "node_modules/tsup/node_modules/@esbuild/win32-x64": { @@ -6296,7 +7392,7 @@ }, "packages/create-sonnet": { "name": "create-sonnet-app", - "version": "0.0.17", + "version": "0.0.19", "license": "ISC", "dependencies": { "ejs": "^3.1.10", @@ -6309,7 +7405,7 @@ }, "packages/sonnet-core": { "name": "@sonnetjs/core", - "version": "0.0.32", + "version": "0.0.33", "license": "MIT", "dependencies": { "@sonnetjs/shared": "*" @@ -6324,7 +7420,7 @@ }, "packages/sonnet-router": { "name": "@sonnetjs/router", - "version": "0.0.5", + "version": "0.0.7", "license": "MIT", "dependencies": { "path-to-regexp": "^8.2.0" @@ -6822,6 +7918,152 @@ "vite": "^5.0.10" } }, + "playground/ssr-router": { + "version": "0.0.0", + "dependencies": { + "@remix-run/router": "^1.15.3", + "@sonnetjs/core": "*", + "@sonnetjs/router": "*", + "compression": "^1.7.4", + "express": "^4.18.2", + "sirv": "^2.0.4" + }, + "devDependencies": { + "@types/express": "^4.17.21", + "@types/node": "^20.10.5", + "cross-env": "^7.0.3", + "typescript": "^5.3.3", + "vite": "^5.0.10" + } + }, + "playground/ssr-router/node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "playground/ssr-router/node_modules/@types/node": { + "version": "20.16.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.10.tgz", + "integrity": "sha512-vQUKgWTjEIRFCvK6CyriPH3MZYiYlNy0fKiEYHWbcoWLEgs4opurGGKlebrTLqdSMIbXImH6XExNiIyNUv3WpA==", + "dev": true, + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "playground/ssr-router/node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "playground/ssr-router/node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true + }, + "playground/ssr-router/node_modules/vite": { + "version": "5.4.8", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.8.tgz", + "integrity": "sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==", + "dev": true, + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, "playground/ssr/node_modules/@types/node": { "version": "20.12.12", "dev": true, diff --git a/packages/create-sonnet/index.js b/packages/create-sonnet/index.js index 1c30cf4..610662f 100644 --- a/packages/create-sonnet/index.js +++ b/packages/create-sonnet/index.js @@ -197,11 +197,18 @@ async function init() { message: 'Select a template', choices: [ { title: 'Default', value: 'default' }, - { title: 'Router', value: 'router' }, { title: 'SSR', value: 'ssr' }, ], initial: 0, }, + { + name: 'needsRouter', + type: () => (isFeatureFlagsUsed ? null : 'toggle'), + message: language.needsRouter.message, + initial: false, + active: language.defaultToggleOptions.active, + inactive: language.defaultToggleOptions.inactive + }, { name: 'needsTypeScript', type: () => (isFeatureFlagsUsed ? null : 'toggle'), @@ -256,10 +263,27 @@ async function init() { render('base') // Render code template. - // prettier-ignore - const codeTemplate = - (result.selectTemplate) + - (needsTypeScript ? '-ts' : '') + let codeTemplate = ''; + switch (result.selectTemplate) { + case 'ssr': + codeTemplate = 'ssr'; + break; + case 'default': + codeTemplate = 'default'; + break; + default: + codeTemplate = 'default' + break; + } + + if (result.needsRouter) { + codeTemplate += 'router'; + } + + if (needsTypeScript) { + codeTemplate += '-ts'; + } + render(`code/${codeTemplate}`) // An external data store for callbacks to share data diff --git a/packages/create-sonnet/package.json b/packages/create-sonnet/package.json index ac0bd65..5b1cb3b 100644 --- a/packages/create-sonnet/package.json +++ b/packages/create-sonnet/package.json @@ -1,6 +1,6 @@ { "name": "create-sonnet-app", - "version": "0.0.18", + "version": "0.0.19", "description": "", "main": "index.js", "type": "module", diff --git a/packages/create-sonnet/template/code/router-ts/index.html b/packages/create-sonnet/template/code/default-router-ts/index.html similarity index 100% rename from packages/create-sonnet/template/code/router-ts/index.html rename to packages/create-sonnet/template/code/default-router-ts/index.html diff --git a/packages/create-sonnet/template/code/router-ts/package.json b/packages/create-sonnet/template/code/default-router-ts/package.json similarity index 88% rename from packages/create-sonnet/template/code/router-ts/package.json rename to packages/create-sonnet/template/code/default-router-ts/package.json index 1eaee8c..cda1979 100644 --- a/packages/create-sonnet/template/code/router-ts/package.json +++ b/packages/create-sonnet/template/code/default-router-ts/package.json @@ -10,6 +10,6 @@ }, "dependencies": { "@sonnetjs/core": "0.0.33", - "@sonnetjs/router": "0.0.5" + "@sonnetjs/router": "0.0.7" } } \ No newline at end of file diff --git a/packages/create-sonnet/template/code/router-ts/src/App.ts b/packages/create-sonnet/template/code/default-router-ts/src/App.ts similarity index 100% rename from packages/create-sonnet/template/code/router-ts/src/App.ts rename to packages/create-sonnet/template/code/default-router-ts/src/App.ts diff --git a/packages/create-sonnet/template/code/router-ts/src/main.ts b/packages/create-sonnet/template/code/default-router-ts/src/main.ts similarity index 100% rename from packages/create-sonnet/template/code/router-ts/src/main.ts rename to packages/create-sonnet/template/code/default-router-ts/src/main.ts diff --git a/packages/create-sonnet/template/code/router-ts/src/pages/About.ts b/packages/create-sonnet/template/code/default-router-ts/src/pages/About.ts similarity index 100% rename from packages/create-sonnet/template/code/router-ts/src/pages/About.ts rename to packages/create-sonnet/template/code/default-router-ts/src/pages/About.ts diff --git a/packages/create-sonnet/template/code/router-ts/src/pages/Contact.ts b/packages/create-sonnet/template/code/default-router-ts/src/pages/Contact.ts similarity index 100% rename from packages/create-sonnet/template/code/router-ts/src/pages/Contact.ts rename to packages/create-sonnet/template/code/default-router-ts/src/pages/Contact.ts diff --git a/packages/create-sonnet/template/code/router-ts/src/pages/Home.ts b/packages/create-sonnet/template/code/default-router-ts/src/pages/Home.ts similarity index 100% rename from packages/create-sonnet/template/code/router-ts/src/pages/Home.ts rename to packages/create-sonnet/template/code/default-router-ts/src/pages/Home.ts diff --git a/packages/create-sonnet/template/code/router-ts/src/partials/Header.ts b/packages/create-sonnet/template/code/default-router-ts/src/partials/Header.ts similarity index 100% rename from packages/create-sonnet/template/code/router-ts/src/partials/Header.ts rename to packages/create-sonnet/template/code/default-router-ts/src/partials/Header.ts diff --git a/packages/create-sonnet/template/code/router-ts/src/partials/Layout.ts b/packages/create-sonnet/template/code/default-router-ts/src/partials/Layout.ts similarity index 100% rename from packages/create-sonnet/template/code/router-ts/src/partials/Layout.ts rename to packages/create-sonnet/template/code/default-router-ts/src/partials/Layout.ts diff --git a/packages/create-sonnet/template/code/router-ts/src/routes.ts b/packages/create-sonnet/template/code/default-router-ts/src/routes.ts similarity index 100% rename from packages/create-sonnet/template/code/router-ts/src/routes.ts rename to packages/create-sonnet/template/code/default-router-ts/src/routes.ts diff --git a/packages/create-sonnet/template/code/router-ts/tsconfig.json b/packages/create-sonnet/template/code/default-router-ts/tsconfig.json similarity index 100% rename from packages/create-sonnet/template/code/router-ts/tsconfig.json rename to packages/create-sonnet/template/code/default-router-ts/tsconfig.json diff --git a/packages/create-sonnet/template/code/router/index.html b/packages/create-sonnet/template/code/default-router/index.html similarity index 100% rename from packages/create-sonnet/template/code/router/index.html rename to packages/create-sonnet/template/code/default-router/index.html diff --git a/packages/create-sonnet/template/code/router/package.json b/packages/create-sonnet/template/code/default-router/package.json similarity index 86% rename from packages/create-sonnet/template/code/router/package.json rename to packages/create-sonnet/template/code/default-router/package.json index 0dafe5d..29ecaaa 100644 --- a/packages/create-sonnet/template/code/router/package.json +++ b/packages/create-sonnet/template/code/default-router/package.json @@ -9,6 +9,6 @@ }, "dependencies": { "@sonnetjs/core": "0.0.33", - "@sonnetjs/router": "0.0.5" + "@sonnetjs/router": "0.0.7" } } \ No newline at end of file diff --git a/packages/create-sonnet/template/code/router/src/App.js b/packages/create-sonnet/template/code/default-router/src/App.js similarity index 100% rename from packages/create-sonnet/template/code/router/src/App.js rename to packages/create-sonnet/template/code/default-router/src/App.js diff --git a/packages/create-sonnet/template/code/router/src/main.js b/packages/create-sonnet/template/code/default-router/src/main.js similarity index 100% rename from packages/create-sonnet/template/code/router/src/main.js rename to packages/create-sonnet/template/code/default-router/src/main.js diff --git a/packages/create-sonnet/template/code/router/src/pages/About.js b/packages/create-sonnet/template/code/default-router/src/pages/About.js similarity index 100% rename from packages/create-sonnet/template/code/router/src/pages/About.js rename to packages/create-sonnet/template/code/default-router/src/pages/About.js diff --git a/packages/create-sonnet/template/code/router/src/pages/Contact.js b/packages/create-sonnet/template/code/default-router/src/pages/Contact.js similarity index 100% rename from packages/create-sonnet/template/code/router/src/pages/Contact.js rename to packages/create-sonnet/template/code/default-router/src/pages/Contact.js diff --git a/packages/create-sonnet/template/code/router/src/pages/Home.js b/packages/create-sonnet/template/code/default-router/src/pages/Home.js similarity index 100% rename from packages/create-sonnet/template/code/router/src/pages/Home.js rename to packages/create-sonnet/template/code/default-router/src/pages/Home.js diff --git a/packages/create-sonnet/template/code/router/src/partials/Header.js b/packages/create-sonnet/template/code/default-router/src/partials/Header.js similarity index 100% rename from packages/create-sonnet/template/code/router/src/partials/Header.js rename to packages/create-sonnet/template/code/default-router/src/partials/Header.js diff --git a/packages/create-sonnet/template/code/router/src/partials/Layout.js b/packages/create-sonnet/template/code/default-router/src/partials/Layout.js similarity index 100% rename from packages/create-sonnet/template/code/router/src/partials/Layout.js rename to packages/create-sonnet/template/code/default-router/src/partials/Layout.js diff --git a/packages/create-sonnet/template/code/router/src/routes.js b/packages/create-sonnet/template/code/default-router/src/routes.js similarity index 100% rename from packages/create-sonnet/template/code/router/src/routes.js rename to packages/create-sonnet/template/code/default-router/src/routes.js diff --git a/packages/create-sonnet/template/code/ssr-router-ts/index.html b/packages/create-sonnet/template/code/ssr-router-ts/index.html new file mode 100644 index 0000000..acdf270 --- /dev/null +++ b/packages/create-sonnet/template/code/ssr-router-ts/index.html @@ -0,0 +1,14 @@ + + + + + + + Vite + TS + + + +
+ + + \ No newline at end of file diff --git a/packages/create-sonnet/template/code/ssr-router-ts/package.json b/packages/create-sonnet/template/code/ssr-router-ts/package.json new file mode 100644 index 0000000..c566921 --- /dev/null +++ b/packages/create-sonnet/template/code/ssr-router-ts/package.json @@ -0,0 +1,28 @@ +{ + "name": "ssr-router", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "node server", + "build": "npm run build:client && npm run build:server", + "build:client": "vite build --ssrManifest --outDir dist/client", + "build:server": "vite build --ssr src/entry-server.ts --outDir dist/server", + "preview": "cross-env NODE_ENV=production node server" + }, + "dependencies": { + "@remix-run/router": "^1.15.3", + "compression": "^1.7.4", + "express": "^4.18.2", + "sirv": "^2.0.4", + "@sonnetjs/core": "0.0.33", + "@sonnetjs/router": "0.0.7" + }, + "devDependencies": { + "@types/express": "^4.17.21", + "@types/node": "^20.10.5", + "cross-env": "^7.0.3", + "typescript": "^5.3.3", + "vite": "^5.0.10" + } +} \ No newline at end of file diff --git a/packages/create-sonnet/template/code/ssr-router-ts/public/vite.svg b/packages/create-sonnet/template/code/ssr-router-ts/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/packages/create-sonnet/template/code/ssr-router-ts/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/create-sonnet/template/code/ssr-router-ts/server.js b/packages/create-sonnet/template/code/ssr-router-ts/server.js new file mode 100644 index 0000000..04e0444 --- /dev/null +++ b/packages/create-sonnet/template/code/ssr-router-ts/server.js @@ -0,0 +1,71 @@ +import fs from 'node:fs/promises'; +import express from 'express'; + +// Constants +const isProduction = process.env.NODE_ENV === 'production'; +const port = process.env.PORT || 4000; +const base = process.env.BASE || '/'; + +// Cached production assets +const templateHtml = isProduction + ? await fs.readFile('./dist/client/index.html', 'utf-8') + : ''; +const ssrManifest = isProduction + ? await fs.readFile('./dist/client/.vite/ssr-manifest.json', 'utf-8') + : undefined; + +// Create http server +const app = express(); + +// Add Vite or respective production middlewares +let vite; +if (!isProduction) { + const { createServer } = await import('vite'); + vite = await createServer({ + server: { middlewareMode: true, watch: { usePolling: true } }, + appType: 'custom', + base, + }); + app.use(vite.middlewares); +} else { + const compression = (await import('compression')).default; + const sirv = (await import('sirv')).default; + app.use(compression()); + app.use(base, sirv('./dist/client', { extensions: [] })); +} + +// Serve HTML +app.use('*', async (req, res) => { + try { + const url = req.originalUrl.replace(base, ''); + + let template; + let render; + if (!isProduction) { + // Always read fresh template in development + template = await fs.readFile('./index.html', 'utf-8'); + template = await vite.transformIndexHtml(url, template); + render = (await vite.ssrLoadModule('/src/entry-server.ts')).render; + } else { + template = templateHtml; + render = (await import('./dist/server/entry-server.js')).render; + } + + const rendered = await render(url, ssrManifest); + + const html = template + .replace(``, rendered.head ?? '') + .replace(``, rendered.html ?? ''); + + res.status(200).set({ 'Content-Type': 'text/html' }).send(html); + } catch (e) { + vite?.ssrFixStacktrace(e); + console.log(e.stack); + res.status(500).end(e.stack); + } +}); + +// Start http server +app.listen(port, () => { + console.log(`Server started at http://localhost:${port}`); +}); diff --git a/packages/create-sonnet/template/code/ssr-router-ts/src/App.ts b/packages/create-sonnet/template/code/ssr-router-ts/src/App.ts new file mode 100644 index 0000000..b99cd67 --- /dev/null +++ b/packages/create-sonnet/template/code/ssr-router-ts/src/App.ts @@ -0,0 +1,19 @@ +import { $component, SonnetComponent } from '@sonnetjs/core'; +import { header } from './partials/header'; + +class App extends SonnetComponent { + static script(): void { + console.log('App script'); + } + + public get() { + return /*html */ ` + ${header()} +
+ ${this._children} +
+

About

+

Welcome to the Sonnet Playground

+ + `; + } +} + +export default $component(About); diff --git a/packages/create-sonnet/template/code/ssr-router-ts/src/pages/Contact.ts b/packages/create-sonnet/template/code/ssr-router-ts/src/pages/Contact.ts new file mode 100644 index 0000000..f0d4aff --- /dev/null +++ b/packages/create-sonnet/template/code/ssr-router-ts/src/pages/Contact.ts @@ -0,0 +1,14 @@ +import { $component, SonnetComponent } from '@sonnetjs/core'; + +class Contact extends SonnetComponent { + public get() { + return /*html */ ` +
+

Contact

+

Welcome to the Sonnet Playground

+
+ `; + } +} + +export default $component(Contact); diff --git a/packages/create-sonnet/template/code/ssr-router-ts/src/pages/Home.ts b/packages/create-sonnet/template/code/ssr-router-ts/src/pages/Home.ts new file mode 100644 index 0000000..f488125 --- /dev/null +++ b/packages/create-sonnet/template/code/ssr-router-ts/src/pages/Home.ts @@ -0,0 +1,17 @@ +import { $component, SonnetComponent } from '@sonnetjs/core'; + +class Home extends SonnetComponent { + script(): void { + console.log('Home script'); + } + public get() { + return /*html */ ` +
+

Home

+

Welcome to the Sonnet Playground

+
+ `; + } +} + +export default $component(Home); diff --git a/packages/create-sonnet/template/code/ssr-router-ts/src/partials/Layout.ts b/packages/create-sonnet/template/code/ssr-router-ts/src/partials/Layout.ts new file mode 100644 index 0000000..6b861ea --- /dev/null +++ b/packages/create-sonnet/template/code/ssr-router-ts/src/partials/Layout.ts @@ -0,0 +1,14 @@ +import { $component, SonnetComponent } from '@sonnetjs/core'; + +class RootComponent extends SonnetComponent { + public get() { + return /*html*/ ` +
+ ${this._children} + this is new thing +
+ `; + } +} + +export default $component(RootComponent); diff --git a/packages/create-sonnet/template/code/ssr-router-ts/src/partials/header.ts b/packages/create-sonnet/template/code/ssr-router-ts/src/partials/header.ts new file mode 100644 index 0000000..b966e18 --- /dev/null +++ b/packages/create-sonnet/template/code/ssr-router-ts/src/partials/header.ts @@ -0,0 +1,10 @@ +export const header = () => /*html*/ ` +
+

My Website

+ +
+ `; diff --git a/packages/create-sonnet/template/code/ssr-router-ts/src/routes.ts b/packages/create-sonnet/template/code/ssr-router-ts/src/routes.ts new file mode 100644 index 0000000..b25ad11 --- /dev/null +++ b/packages/create-sonnet/template/code/ssr-router-ts/src/routes.ts @@ -0,0 +1,13 @@ +import { router, createMemoryHistory, createRouter } from '@sonnetjs/router'; + +export const routes = router().layout( + async () => (await import('./partials/Layout')).default() +).children([ + router().path('/').component(async () => (await import('./pages/Home')).default()).get(), + router().path('/about').component(async () => (await import('./pages/About')).default()).get(), + router().path('/contact/1/1').component(async () => (await import('./pages/Contact')).default()).get(), +]).get() + +const history = createMemoryHistory(); + +export const routers = createRouter().routes(routes).history(history).mountedId('#app-1').get(); diff --git a/packages/create-sonnet/template/code/ssr-router-ts/src/style.css b/packages/create-sonnet/template/code/ssr-router-ts/src/style.css new file mode 100644 index 0000000..f9c7350 --- /dev/null +++ b/packages/create-sonnet/template/code/ssr-router-ts/src/style.css @@ -0,0 +1,96 @@ +:root { + font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +#app { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.vanilla:hover { + filter: drop-shadow(0 0 2em #3178c6aa); +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/packages/create-sonnet/template/code/ssr-router-ts/src/vite-env.d.ts b/packages/create-sonnet/template/code/ssr-router-ts/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/packages/create-sonnet/template/code/ssr-router-ts/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/packages/create-sonnet/template/code/ssr-router-ts/tsconfig.json b/packages/create-sonnet/template/code/ssr-router-ts/tsconfig.json new file mode 100644 index 0000000..866e3cd --- /dev/null +++ b/packages/create-sonnet/template/code/ssr-router-ts/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src", "src/.ts"] +} diff --git a/packages/create-sonnet/template/code/ssr-router/index.html b/packages/create-sonnet/template/code/ssr-router/index.html new file mode 100644 index 0000000..e306772 --- /dev/null +++ b/packages/create-sonnet/template/code/ssr-router/index.html @@ -0,0 +1,14 @@ + + + + + + + Vite + TS + + + +
+ + + \ No newline at end of file diff --git a/packages/create-sonnet/template/code/ssr-router/package.json b/packages/create-sonnet/template/code/ssr-router/package.json new file mode 100644 index 0000000..962ccc5 --- /dev/null +++ b/packages/create-sonnet/template/code/ssr-router/package.json @@ -0,0 +1,24 @@ +{ + "scripts": { + "dev": "node server", + "build": "npm run build:client && npm run build:server", + "build:client": "vite build --ssrManifest --outDir dist/client", + "build:server": "vite build --ssr src/entry-server.ts --outDir dist/server", + "preview": "cross-env NODE_ENV=production node server" + }, + "dependencies": { + "@remix-run/router": "^1.15.3", + "compression": "^1.7.4", + "express": "^4.18.2", + "sirv": "^2.0.4", + "@sonnetjs/core": "0.0.33", + "@sonnetjs/router": "0.0.7" + }, + "devDependencies": { + "@types/express": "^4.17.21", + "@types/node": "^20.10.5", + "cross-env": "^7.0.3", + "typescript": "^5.3.3", + "vite": "^5.0.10" + } +} \ No newline at end of file diff --git a/packages/create-sonnet/template/code/ssr-router/public/vite.svg b/packages/create-sonnet/template/code/ssr-router/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/packages/create-sonnet/template/code/ssr-router/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/create-sonnet/template/code/ssr-router/server.js b/packages/create-sonnet/template/code/ssr-router/server.js new file mode 100644 index 0000000..d224665 --- /dev/null +++ b/packages/create-sonnet/template/code/ssr-router/server.js @@ -0,0 +1,71 @@ +import fs from 'node:fs/promises'; +import express from 'express'; + +// Constants +const isProduction = process.env.NODE_ENV === 'production'; +const port = process.env.PORT || 4000; +const base = process.env.BASE || '/'; + +// Cached production assets +const templateHtml = isProduction + ? await fs.readFile('./dist/client/index.html', 'utf-8') + : ''; +const ssrManifest = isProduction + ? await fs.readFile('./dist/client/.vite/ssr-manifest.json', 'utf-8') + : undefined; + +// Create http server +const app = express(); + +// Add Vite or respective production middlewares +let vite; +if (!isProduction) { + const { createServer } = await import('vite'); + vite = await createServer({ + server: { middlewareMode: true, watch: { usePolling: true } }, + appType: 'custom', + base, + }); + app.use(vite.middlewares); +} else { + const compression = (await import('compression')).default; + const sirv = (await import('sirv')).default; + app.use(compression()); + app.use(base, sirv('./dist/client', { extensions: [] })); +} + +// Serve HTML +app.use('*', async (req, res) => { + try { + const url = req.originalUrl.replace(base, ''); + + let template; + let render; + if (!isProduction) { + // Always read fresh template in development + template = await fs.readFile('./index.html', 'utf-8'); + template = await vite.transformIndexHtml(url, template); + render = (await vite.ssrLoadModule('/src/entry-server.js')).render; + } else { + template = templateHtml; + render = (await import('./dist/server/entry-server.js')).render; + } + + const rendered = await render(url, ssrManifest); + + const html = template + .replace(``, rendered.head ?? '') + .replace(``, rendered.html ?? ''); + + res.status(200).set({ 'Content-Type': 'text/html' }).send(html); + } catch (e) { + vite?.ssrFixStacktrace(e); + console.log(e.stack); + res.status(500).end(e.stack); + } +}); + +// Start http server +app.listen(port, () => { + console.log(`Server started at http://localhost:${port}`); +}); diff --git a/packages/create-sonnet/template/code/ssr-router/src/App.js b/packages/create-sonnet/template/code/ssr-router/src/App.js new file mode 100644 index 0000000..ace68b9 --- /dev/null +++ b/packages/create-sonnet/template/code/ssr-router/src/App.js @@ -0,0 +1,19 @@ +import { $component, SonnetComponent } from '@sonnetjs/core'; +import { header } from './partials/header'; + +class App extends SonnetComponent { + static script() { + console.log('App script'); + } + + get() { + return /*html */ ` + ${header()} +
+ ${this._children} +
+

About

+

Welcome to the Sonnet Playground

+ + `; + } +} + +export default $component(About); diff --git a/packages/create-sonnet/template/code/ssr-router/src/pages/Contact.js b/packages/create-sonnet/template/code/ssr-router/src/pages/Contact.js new file mode 100644 index 0000000..e039e9c --- /dev/null +++ b/packages/create-sonnet/template/code/ssr-router/src/pages/Contact.js @@ -0,0 +1,14 @@ +import { $component, SonnetComponent } from '@sonnetjs/core'; + +class Contact extends SonnetComponent { + get() { + return /*html */ ` +
+

Contact

+

Welcome to the Sonnet Playground

+
+ `; + } +} + +export default $component(Contact); diff --git a/packages/create-sonnet/template/code/ssr-router/src/pages/Home.js b/packages/create-sonnet/template/code/ssr-router/src/pages/Home.js new file mode 100644 index 0000000..de60d5a --- /dev/null +++ b/packages/create-sonnet/template/code/ssr-router/src/pages/Home.js @@ -0,0 +1,17 @@ +import { $component, SonnetComponent } from '@sonnetjs/core'; + +class Home extends SonnetComponent { + script() { + console.log('Home script'); + } + get() { + return /*html */ ` +
+

Home

+

Welcome to the Sonnet Playground

+
+ `; + } +} + +export default $component(Home); diff --git a/packages/create-sonnet/template/code/ssr-router/src/partials/Layout.js b/packages/create-sonnet/template/code/ssr-router/src/partials/Layout.js new file mode 100644 index 0000000..163d5f3 --- /dev/null +++ b/packages/create-sonnet/template/code/ssr-router/src/partials/Layout.js @@ -0,0 +1,14 @@ +import { $component, SonnetComponent } from '@sonnetjs/core'; + +class RootComponent extends SonnetComponent { + get() { + return /*html*/ ` +
+ ${this._children} + this is new thing +
+ `; + } +} + +export default $component(RootComponent); diff --git a/packages/create-sonnet/template/code/ssr-router/src/partials/header.js b/packages/create-sonnet/template/code/ssr-router/src/partials/header.js new file mode 100644 index 0000000..b966e18 --- /dev/null +++ b/packages/create-sonnet/template/code/ssr-router/src/partials/header.js @@ -0,0 +1,10 @@ +export const header = () => /*html*/ ` +
+

My Website

+ +
+ `; diff --git a/packages/create-sonnet/template/code/ssr-router/src/routes.js b/packages/create-sonnet/template/code/ssr-router/src/routes.js new file mode 100644 index 0000000..b25ad11 --- /dev/null +++ b/packages/create-sonnet/template/code/ssr-router/src/routes.js @@ -0,0 +1,13 @@ +import { router, createMemoryHistory, createRouter } from '@sonnetjs/router'; + +export const routes = router().layout( + async () => (await import('./partials/Layout')).default() +).children([ + router().path('/').component(async () => (await import('./pages/Home')).default()).get(), + router().path('/about').component(async () => (await import('./pages/About')).default()).get(), + router().path('/contact/1/1').component(async () => (await import('./pages/Contact')).default()).get(), +]).get() + +const history = createMemoryHistory(); + +export const routers = createRouter().routes(routes).history(history).mountedId('#app-1').get(); diff --git a/packages/create-sonnet/template/code/ssr-router/src/style.css b/packages/create-sonnet/template/code/ssr-router/src/style.css new file mode 100644 index 0000000..f9c7350 --- /dev/null +++ b/packages/create-sonnet/template/code/ssr-router/src/style.css @@ -0,0 +1,96 @@ +:root { + font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +#app { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.vanilla:hover { + filter: drop-shadow(0 0 2em #3178c6aa); +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/packages/sonnet-router/package.json b/packages/sonnet-router/package.json index 7c93305..416ce77 100644 --- a/packages/sonnet-router/package.json +++ b/packages/sonnet-router/package.json @@ -1,6 +1,6 @@ { "name": "@sonnetjs/router", - "version": "0.0.6", + "version": "0.0.7", "files": [ "dist" ], diff --git a/packages/sonnet-router/src/component.ts b/packages/sonnet-router/src/component.ts index cf27c02..e6c767a 100644 --- a/packages/sonnet-router/src/component.ts +++ b/packages/sonnet-router/src/component.ts @@ -23,7 +23,9 @@ export class RouterComponent { } path(path: string) { - this._path = path.replace(/\/$/, ''); + this._path = path; + if (this._path === '') this._path = '/'; + console.log('path', this._path); return this; } @@ -64,11 +66,15 @@ export class RouterComponent { const completePath = prevPath + child._path; const currentAncestors = [...ancestors, this]; + if (!path.startsWith('/')) { + path = '/' + path; + } + if (match(completePath, { decode: decodeURIComponent })(path) && child._component) { child._path = path; child._ancestors = currentAncestors; return child; - } else if (match(completePath + '(.*)', { decode: decodeURIComponent })(path)) { + } else if (match(completePath + '{}', {decode: decodeURIComponent})(path)) { const nestedResult = child.match(path, completePath, currentAncestors); if (nestedResult) { diff --git a/packages/sonnet-router/src/router.ts b/packages/sonnet-router/src/router.ts index 8a9beef..3269fd9 100644 --- a/packages/sonnet-router/src/router.ts +++ b/packages/sonnet-router/src/router.ts @@ -44,70 +44,99 @@ export class Router { return this.options.routes; } - install(app: SonnetApp): void { - if (this.state.initialized) return; - app.lazy(false); - - this.unsubscribe = this.subscribe(async () => { - if (!app) return; - const match = this.state.match; + async hyderate(component: ((args?: any) => SonnetComponent) | undefined) { + const match = this.state.match; - if (!match) return; - - const lastMatch = match; - const rootComponent = lastMatch.data?.ancestors - .reverse() - .find((match) => match.layout)?.layout; + if (!match) return { + root: undefined, + children: undefined, + }; - if (lastMatch.data?.component) { - const matchingComponent = await lastMatch.data.component(); + const rootComponent = match.data?.ancestors + .reverse() + .find((match) => match.layout)?.layout; + + if (match.data?.component) { + const matchingComponent = await match.data.component(); - if (app.component && !this.isFirstMounted) { - this.isAppRoot = true; - } - if (!this.isAppRoot && this.options.mountedId) { - console.warn( - "Mounted id doesn't have any impact because the app root is not set.", - 'set app.root(App) in your app component.', - ); - } + if (component && !this.isFirstMounted) { + this.isAppRoot = true; + } + if (!this.isAppRoot && this.options.mountedId) { + console.warn( + "Mounted id doesn't have any impact because the app root is not set.", + 'set app.root(App) in your app component.', + ); + } - if (app.component && this.isAppRoot) { - if (this.options.mountedId && this.isFirstMounted) { - if (rootComponent) { - const initRoot = await rootComponent(); - app.root(() => initRoot, { - _children: matchingComponent.get(), - }); - } else { - app.root(() => matchingComponent); - } + if (component && this.isAppRoot) { + if (this.options.mountedId && this.isFirstMounted) { + if (rootComponent) { + const initRoot = await rootComponent(); + return { + root: () => initRoot, + children: matchingComponent.get(), + }; } else { - if (rootComponent) { - const initRoot = (await rootComponent()) - .children(matchingComponent.get()) - .get(); - app.root(app.component, { - _children: initRoot, - }); - } else { - app.root(app.component, { - _children: matchingComponent.get(), - }); - } + return { + root: () => matchingComponent, + children: undefined, + }; } } else { - this.isAppRoot = false; if (rootComponent) { - const initRoot = await rootComponent(); - app.root(() => initRoot, { - _children: matchingComponent.get(), - }); + const initRoot = (await rootComponent()) + .children(matchingComponent.get()) + .get(); + return { + root: component, + children: initRoot, + }; } else { - app.root(() => matchingComponent); + return { + root: component, + children: matchingComponent.get(), + }; } } + } else { + this.isAppRoot = false; + if (rootComponent) { + const initRoot = await rootComponent(); + return { + root: () => initRoot, + children: matchingComponent.get(), + }; + } else { + return { + root: () => matchingComponent, + children: undefined, + }; + } } + } else { + return { + root: undefined, + children: undefined, + }; + } + } + + install(app: SonnetApp): void { + if (this.state.initialized) return; + app.lazy(false); + + this.unsubscribe = this.subscribe(async () => { + if (!app) return; + + const {root, children } = await this.hyderate(app.component); + + if (root) { + app.root(root, { + _children: children, + }); + } + if (this.options.mountedId && this.isFirstMounted && this.isAppRoot) { app.unmount(); app.mount(this.options.mountedId); diff --git a/playground/router/package-lock.json b/playground/router/package-lock.json deleted file mode 100644 index 9cbf3a6..0000000 --- a/playground/router/package-lock.json +++ /dev/null @@ -1,904 +0,0 @@ -{ - "name": "router-playground", - "version": "0.0.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "router-playground", - "version": "0.0.1", - "dependencies": { - "@sonnetjs/core": "0.0.29", - "@sonnetjs/router": "*" - }, - "devDependencies": { - "typescript": "^5.2.2", - "vite": "^5.2.6" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.0.tgz", - "integrity": "sha512-WTWD8PfoSAJ+qL87lE7votj3syLavxunWhzCnx3XFxFiI/BA/r3X7MUM8dVrH8rb2r4AiO8jJsr3ZjdaftmnfA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.0.tgz", - "integrity": "sha512-a1sR2zSK1B4eYkiZu17ZUZhmUQcKjk2/j9Me2IDjk1GHW7LB5Z35LEzj9iJch6gtUfsnvZs1ZNyDW2oZSThrkA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.0.tgz", - "integrity": "sha512-zOnKWLgDld/svhKO5PD9ozmL6roy5OQ5T4ThvdYZLpiOhEGY+dp2NwUmxK0Ld91LrbjrvtNAE0ERBwjqhZTRAA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.0.tgz", - "integrity": "sha512-7doS8br0xAkg48SKE2QNtMSFPFUlRdw9+votl27MvT46vo44ATBmdZdGysOevNELmZlfd+NEa0UYOA8f01WSrg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.0.tgz", - "integrity": "sha512-pWJsfQjNWNGsoCq53KjMtwdJDmh/6NubwQcz52aEwLEuvx08bzcy6tOUuawAOncPnxz/3siRtd8hiQ32G1y8VA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.0.tgz", - "integrity": "sha512-efRIANsz3UHZrnZXuEvxS9LoCOWMGD1rweciD6uJQIx2myN3a8Im1FafZBzh7zk1RJ6oKcR16dU3UPldaKd83w==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.0.tgz", - "integrity": "sha512-ZrPhydkTVhyeGTW94WJ8pnl1uroqVHM3j3hjdquwAcWnmivjAwOYjTEAuEDeJvGX7xv3Z9GAvrBkEzCgHq9U1w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.0.tgz", - "integrity": "sha512-cfaupqd+UEFeURmqNP2eEvXqgbSox/LHOyN9/d2pSdV8xTrjdg3NgOFJCtc1vQ/jEke1qD0IejbBfxleBPHnPw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.0.tgz", - "integrity": "sha512-ZKPan1/RvAhrUylwBXC9t7B2hXdpb/ufeu22pG2psV7RN8roOfGurEghw1ySmX/CmDDHNTDDjY3lo9hRlgtaHg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.0.tgz", - "integrity": "sha512-H1eRaCwd5E8eS8leiS+o/NqMdljkcb1d6r2h4fKSsCXQilLKArq6WS7XBLDu80Yz+nMqHVFDquwcVrQmGr28rg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.0.tgz", - "integrity": "sha512-zJ4hA+3b5tu8u7L58CCSI0A9N1vkfwPhWd/puGXwtZlsB5bTkwDNW/+JCU84+3QYmKpLi+XvHdmrlwUwDA6kqw==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.0.tgz", - "integrity": "sha512-e2hrvElFIh6kW/UNBQK/kzqMNY5mO+67YtEh9OA65RM5IJXYTWiXjX6fjIiPaqOkBthYF1EqgiZ6OXKcQsM0hg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.0.tgz", - "integrity": "sha512-1vvmgDdUSebVGXWX2lIcgRebqfQSff0hMEkLJyakQ9JQUbLDkEaMsPTLOmyccyC6IJ/l3FZuJbmrBw/u0A0uCQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.0.tgz", - "integrity": "sha512-s5oFkZ/hFcrlAyBTONFY1TWndfyre1wOMwU+6KCpm/iatybvrRgmZVM+vCFwxmC5ZhdlgfE0N4XorsDpi7/4XQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.0.tgz", - "integrity": "sha512-G9+TEqRnAA6nbpqyUqgTiopmnfgnMkR3kMukFBDsiyy23LZvUCpiUwjTRx6ezYCjJODXrh52rBR9oXvm+Fp5wg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.0.tgz", - "integrity": "sha512-2jsCDZwtQvRhejHLfZ1JY6w6kEuEtfF9nzYsZxzSlNVKDX+DpsDJ+Rbjkm74nvg2rdx0gwBS+IMdvwJuq3S9pQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@sonnetjs/core": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@sonnetjs/core/-/core-0.0.29.tgz", - "integrity": "sha512-SkrjZ2qH0Eyip1jyQ6byx+P4GglMnssUdxkY3vBo8nC1CDzhCZKF0C8j/exUehYgvGxJY8pfrK1zIU2jNcA3Ng==", - "license": "MIT", - "dependencies": { - "@sonnetjs/shared": "*" - } - }, - "node_modules/@sonnetjs/router": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@sonnetjs/router/-/router-0.0.4.tgz", - "integrity": "sha512-PcS/yYDNq+dRqW9QvrqfkBM/8bUy/PWeDj7sYOKHoz2aNci1uOuSZNz4RKeSMdxS+KtIEvsGiOopOx34Ho65dA==", - "license": "MIT", - "dependencies": { - "path-to-regexp": "^6.2.0" - }, - "peerDependencies": { - "@sonnetjs/core": "0.0.29" - } - }, - "node_modules/@sonnetjs/shared": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@sonnetjs/shared/-/shared-0.0.4.tgz", - "integrity": "sha512-GEnorhheUGpgp+MzKqPPwvuKM3N5nZ5WfjQsi3f9z+YD2T3r4Zf5yg1aYKtzU8vK7a68B+Sgs6woMIZiZjobUw==", - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true, - "license": "MIT" - }, - "node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/path-to-regexp": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz", - "integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==", - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "dev": true, - "license": "ISC" - }, - "node_modules/postcss": { - "version": "8.4.41", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", - "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.1", - "source-map-js": "^1.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/rollup": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.0.tgz", - "integrity": "sha512-vo+S/lfA2lMS7rZ2Qoubi6I5hwZwzXeUIctILZLbHI+laNtvhhOIon2S1JksA5UEDQ7l3vberd0fxK44lTYjbQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.5" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.21.0", - "@rollup/rollup-android-arm64": "4.21.0", - "@rollup/rollup-darwin-arm64": "4.21.0", - "@rollup/rollup-darwin-x64": "4.21.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.21.0", - "@rollup/rollup-linux-arm-musleabihf": "4.21.0", - "@rollup/rollup-linux-arm64-gnu": "4.21.0", - "@rollup/rollup-linux-arm64-musl": "4.21.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.21.0", - "@rollup/rollup-linux-riscv64-gnu": "4.21.0", - "@rollup/rollup-linux-s390x-gnu": "4.21.0", - "@rollup/rollup-linux-x64-gnu": "4.21.0", - "@rollup/rollup-linux-x64-musl": "4.21.0", - "@rollup/rollup-win32-arm64-msvc": "4.21.0", - "@rollup/rollup-win32-ia32-msvc": "4.21.0", - "@rollup/rollup-win32-x64-msvc": "4.21.0", - "fsevents": "~2.3.2" - } - }, - "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/typescript": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", - "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/vite": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.2.tgz", - "integrity": "sha512-dDrQTRHp5C1fTFzcSaMxjk6vdpKvT+2/mIdE07Gw2ykehT49O0z/VHS3zZ8iV/Gh8BJJKHWOe5RjaNrW5xf/GA==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.41", - "rollup": "^4.20.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - } - } -} diff --git a/playground/router/src/partials/header.ts b/playground/router/src/partials/header.ts index ac78914..b356f13 100644 --- a/playground/router/src/partials/header.ts +++ b/playground/router/src/partials/header.ts @@ -4,7 +4,7 @@ export const header = () => /*html*/ ` `; diff --git a/playground/router/src/routes.ts b/playground/router/src/routes.ts index 0b7e4a1..8dfc19d 100644 --- a/playground/router/src/routes.ts +++ b/playground/router/src/routes.ts @@ -5,7 +5,7 @@ export const routes = router().layout( ).children([ router().path('/').component(async () => (await import('./pages/Home')).default()).get(), router().path('/about').component(async () => (await import('./pages/About')).default()).get(), - router().path('/contact').component(async () => (await import('./pages/Contact')).default()).get(), + router().path('/contact/1/1').component(async () => (await import('./pages/Contact')).default()).get(), ]).get() const history = createBrowserHistory(); diff --git a/playground/ssr-router/.gitignore b/playground/ssr-router/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/playground/ssr-router/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/playground/ssr-router/index.html b/playground/ssr-router/index.html new file mode 100644 index 0000000..acdf270 --- /dev/null +++ b/playground/ssr-router/index.html @@ -0,0 +1,14 @@ + + + + + + + Vite + TS + + + +
+ + + \ No newline at end of file diff --git a/playground/ssr-router/package.json b/playground/ssr-router/package.json new file mode 100644 index 0000000..effb890 --- /dev/null +++ b/playground/ssr-router/package.json @@ -0,0 +1,28 @@ +{ + "name": "ssr-router", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "node server", + "build": "npm run build:client && npm run build:server", + "build:client": "vite build --ssrManifest --outDir dist/client", + "build:server": "vite build --ssr src/entry-server.ts --outDir dist/server", + "preview": "cross-env NODE_ENV=production node server" + }, + "dependencies": { + "@remix-run/router": "^1.15.3", + "compression": "^1.7.4", + "express": "^4.18.2", + "sirv": "^2.0.4", + "@sonnetjs/core": "*", + "@sonnetjs/router": "*" + }, + "devDependencies": { + "@types/express": "^4.17.21", + "@types/node": "^20.10.5", + "cross-env": "^7.0.3", + "typescript": "^5.3.3", + "vite": "^5.0.10" + } +} \ No newline at end of file diff --git a/playground/ssr-router/public/vite.svg b/playground/ssr-router/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/playground/ssr-router/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/playground/ssr-router/server.js b/playground/ssr-router/server.js new file mode 100644 index 0000000..04e0444 --- /dev/null +++ b/playground/ssr-router/server.js @@ -0,0 +1,71 @@ +import fs from 'node:fs/promises'; +import express from 'express'; + +// Constants +const isProduction = process.env.NODE_ENV === 'production'; +const port = process.env.PORT || 4000; +const base = process.env.BASE || '/'; + +// Cached production assets +const templateHtml = isProduction + ? await fs.readFile('./dist/client/index.html', 'utf-8') + : ''; +const ssrManifest = isProduction + ? await fs.readFile('./dist/client/.vite/ssr-manifest.json', 'utf-8') + : undefined; + +// Create http server +const app = express(); + +// Add Vite or respective production middlewares +let vite; +if (!isProduction) { + const { createServer } = await import('vite'); + vite = await createServer({ + server: { middlewareMode: true, watch: { usePolling: true } }, + appType: 'custom', + base, + }); + app.use(vite.middlewares); +} else { + const compression = (await import('compression')).default; + const sirv = (await import('sirv')).default; + app.use(compression()); + app.use(base, sirv('./dist/client', { extensions: [] })); +} + +// Serve HTML +app.use('*', async (req, res) => { + try { + const url = req.originalUrl.replace(base, ''); + + let template; + let render; + if (!isProduction) { + // Always read fresh template in development + template = await fs.readFile('./index.html', 'utf-8'); + template = await vite.transformIndexHtml(url, template); + render = (await vite.ssrLoadModule('/src/entry-server.ts')).render; + } else { + template = templateHtml; + render = (await import('./dist/server/entry-server.js')).render; + } + + const rendered = await render(url, ssrManifest); + + const html = template + .replace(``, rendered.head ?? '') + .replace(``, rendered.html ?? ''); + + res.status(200).set({ 'Content-Type': 'text/html' }).send(html); + } catch (e) { + vite?.ssrFixStacktrace(e); + console.log(e.stack); + res.status(500).end(e.stack); + } +}); + +// Start http server +app.listen(port, () => { + console.log(`Server started at http://localhost:${port}`); +}); diff --git a/playground/ssr-router/src/App.ts b/playground/ssr-router/src/App.ts new file mode 100644 index 0000000..b99cd67 --- /dev/null +++ b/playground/ssr-router/src/App.ts @@ -0,0 +1,19 @@ +import { $component, SonnetComponent } from '@sonnetjs/core'; +import { header } from './partials/header'; + +class App extends SonnetComponent { + static script(): void { + console.log('App script'); + } + + public get() { + return /*html */ ` + ${header()} +
+ ${this._children} +
+

About

+

Welcome to the Sonnet Playground

+ + `; + } +} + +export default $component(About); diff --git a/playground/ssr-router/src/pages/Contact.ts b/playground/ssr-router/src/pages/Contact.ts new file mode 100644 index 0000000..f0d4aff --- /dev/null +++ b/playground/ssr-router/src/pages/Contact.ts @@ -0,0 +1,14 @@ +import { $component, SonnetComponent } from '@sonnetjs/core'; + +class Contact extends SonnetComponent { + public get() { + return /*html */ ` +
+

Contact

+

Welcome to the Sonnet Playground

+
+ `; + } +} + +export default $component(Contact); diff --git a/playground/ssr-router/src/pages/Home.ts b/playground/ssr-router/src/pages/Home.ts new file mode 100644 index 0000000..f488125 --- /dev/null +++ b/playground/ssr-router/src/pages/Home.ts @@ -0,0 +1,17 @@ +import { $component, SonnetComponent } from '@sonnetjs/core'; + +class Home extends SonnetComponent { + script(): void { + console.log('Home script'); + } + public get() { + return /*html */ ` +
+

Home

+

Welcome to the Sonnet Playground

+
+ `; + } +} + +export default $component(Home); diff --git a/playground/ssr-router/src/partials/Layout.ts b/playground/ssr-router/src/partials/Layout.ts new file mode 100644 index 0000000..6b861ea --- /dev/null +++ b/playground/ssr-router/src/partials/Layout.ts @@ -0,0 +1,14 @@ +import { $component, SonnetComponent } from '@sonnetjs/core'; + +class RootComponent extends SonnetComponent { + public get() { + return /*html*/ ` +
+ ${this._children} + this is new thing +
+ `; + } +} + +export default $component(RootComponent); diff --git a/playground/ssr-router/src/partials/header.ts b/playground/ssr-router/src/partials/header.ts new file mode 100644 index 0000000..b966e18 --- /dev/null +++ b/playground/ssr-router/src/partials/header.ts @@ -0,0 +1,10 @@ +export const header = () => /*html*/ ` +
+

My Website

+ +
+ `; diff --git a/playground/ssr-router/src/routes.ts b/playground/ssr-router/src/routes.ts new file mode 100644 index 0000000..b25ad11 --- /dev/null +++ b/playground/ssr-router/src/routes.ts @@ -0,0 +1,13 @@ +import { router, createMemoryHistory, createRouter } from '@sonnetjs/router'; + +export const routes = router().layout( + async () => (await import('./partials/Layout')).default() +).children([ + router().path('/').component(async () => (await import('./pages/Home')).default()).get(), + router().path('/about').component(async () => (await import('./pages/About')).default()).get(), + router().path('/contact/1/1').component(async () => (await import('./pages/Contact')).default()).get(), +]).get() + +const history = createMemoryHistory(); + +export const routers = createRouter().routes(routes).history(history).mountedId('#app-1').get(); diff --git a/playground/ssr-router/src/style.css b/playground/ssr-router/src/style.css new file mode 100644 index 0000000..f9c7350 --- /dev/null +++ b/playground/ssr-router/src/style.css @@ -0,0 +1,96 @@ +:root { + font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +#app { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.vanilla:hover { + filter: drop-shadow(0 0 2em #3178c6aa); +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/playground/ssr-router/src/typescript.svg b/playground/ssr-router/src/typescript.svg new file mode 100644 index 0000000..d91c910 --- /dev/null +++ b/playground/ssr-router/src/typescript.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/playground/ssr-router/src/vite-env.d.ts b/playground/ssr-router/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/playground/ssr-router/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/playground/ssr-router/tsconfig.json b/playground/ssr-router/tsconfig.json new file mode 100644 index 0000000..866e3cd --- /dev/null +++ b/playground/ssr-router/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src", "src/.ts"] +}