A CLI for scaffolding ATProto web applications
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

bunch of refactors

+576 -364
+17
__tests__/cli.test.ts
··· 1 + import { join } from "node:path" 2 + import { expect, test } from "vitest" 3 + import child_process from "node:child_process"; 4 + import { promisify } from "node:util" 5 + const exec = promisify(child_process.exec) 6 + 7 + const CLI_PATH = join(import.meta.dirname, "..") 8 + const DEFAULT_PROJECT_NAME = "my-atproto-app" 9 + 10 + async function run(args?: string[]) { 11 + return exec(`node ${CLI_PATH} ${args?.join(' ')}`) 12 + } 13 + 14 + test("should prompt for project name", async () => { 15 + const { stdout } = await run() 16 + expect(stdout).toContain("Please provide a name for this project:") 17 + })
+12 -7
package.json
··· 9 9 "license": "MIT", 10 10 "author": "Dane MIller <me@dane.computer>", 11 11 "bin": { 12 - "create-atproto-app": "dist/index.js" 12 + "create-atproto-app": "src/index.js" 13 13 }, 14 + "files": [ 15 + "index.js", 16 + "templates/**", 17 + "dist" 18 + ], 14 19 "type": "module", 15 20 "main": "dist/index.js", 16 21 "scripts": { 17 - "dev": "NODE_ENV=development tsx src/index.ts", 18 - "build": "tsc", 19 - "start": "node dist/index.js", 22 + "dev": "tsx src/index.ts", 23 + "build": "tsdown", 20 24 "fmt": "oxfmt", 21 25 "test": "vitest", 22 26 "test:run": "vitest run" 23 27 }, 24 28 "dependencies": { 25 - "@clack/prompts": "^1.0.1" 29 + "@clack/prompts": "^1.0.1", 30 + "create-vite": "^8.3.0" 26 31 }, 27 32 "devDependencies": { 28 33 "@types/node": "^22.0.0", 29 34 "citty": "^0.2.1", 30 - "execa": "^9.6.1", 31 35 "lefthook": "^2.1.1", 32 36 "oxfmt": "^0.32.0", 33 37 "picocolors": "^1.1.1", 38 + "tsdown": "^0.20.3", 34 39 "tsx": "^4.19.0", 35 40 "typescript": "^5.6.0", 36 41 "vitest": "^4.0.18" ··· 38 43 "engines": { 39 44 "node": "^20.19.0 || >=22.12.0" 40 45 }, 41 - "packageManager": "pnpm@10.15.0" 46 + "packageManager": "pnpm@10.29.3" 42 47 }
+497 -157
pnpm-lock.yaml
··· 11 11 '@clack/prompts': 12 12 specifier: ^1.0.1 13 13 version: 1.0.1 14 + create-vite: 15 + specifier: ^8.3.0 16 + version: 8.3.0 14 17 devDependencies: 15 18 '@types/node': 16 19 specifier: ^22.0.0 ··· 18 21 citty: 19 22 specifier: ^0.2.1 20 23 version: 0.2.1 21 - execa: 22 - specifier: ^9.6.1 23 - version: 9.6.1 24 24 lefthook: 25 25 specifier: ^2.1.1 26 26 version: 2.1.1 ··· 30 30 picocolors: 31 31 specifier: ^1.1.1 32 32 version: 1.1.1 33 + tsdown: 34 + specifier: ^0.20.3 35 + version: 0.20.3(typescript@5.9.3) 33 36 tsx: 34 37 specifier: ^4.19.0 35 38 version: 4.21.0 ··· 42 45 43 46 packages: 44 47 48 + '@babel/generator@8.0.0-rc.1': 49 + resolution: {integrity: sha512-3ypWOOiC4AYHKr8vYRVtWtWmyvcoItHtVqF8paFax+ydpmUdPsJpLBkBBs5ItmhdrwC3a0ZSqqFAdzls4ODP3w==} 50 + engines: {node: ^20.19.0 || >=22.12.0} 51 + 52 + '@babel/helper-string-parser@8.0.0-rc.1': 53 + resolution: {integrity: sha512-vi/pfmbrOtQmqgfboaBhaCU50G7mcySVu69VU8z+lYoPPB6WzI9VgV7WQfL908M4oeSH5fDkmoupIqoE0SdApw==} 54 + engines: {node: ^20.19.0 || >=22.12.0} 55 + 56 + '@babel/helper-validator-identifier@8.0.0-rc.1': 57 + resolution: {integrity: sha512-I4YnARytXC2RzkLNVnf5qFNFMzp679qZpmtw/V3Jt2uGnWiIxyJtaukjG7R8pSx8nG2NamICpGfljQsogj+FbQ==} 58 + engines: {node: ^20.19.0 || >=22.12.0} 59 + 60 + '@babel/parser@8.0.0-rc.1': 61 + resolution: {integrity: sha512-6HyyU5l1yK/7h9Ki52i5h6mDAx4qJdiLQO4FdCyJNoB/gy3T3GGJdhQzzbZgvgZCugYBvwtQiWRt94QKedHnkA==} 62 + engines: {node: ^20.19.0 || >=22.12.0} 63 + hasBin: true 64 + 65 + '@babel/types@8.0.0-rc.1': 66 + resolution: {integrity: sha512-ubmJ6TShyaD69VE9DQrlXcdkvJbmwWPB8qYj0H2kaJi29O7vJT9ajSdBd2W8CG34pwL9pYA74fi7RHC1qbLoVQ==} 67 + engines: {node: ^20.19.0 || >=22.12.0} 68 + 45 69 '@clack/core@1.0.1': 46 70 resolution: {integrity: sha512-WKeyK3NOBwDOzagPR5H08rFk9D/WuN705yEbuZvKqlkmoLM2woKtXb10OO2k1NoSU4SFG947i2/SCYh+2u5e4g==} 47 71 48 72 '@clack/prompts@1.0.1': 49 73 resolution: {integrity: sha512-/42G73JkuYdyWZ6m8d/CJtBrGl1Hegyc7Fy78m5Ob+jF85TOUmLR5XLce/U3LxYAw0kJ8CT5aI99RIvPHcGp/Q==} 74 + 75 + '@emnapi/core@1.8.1': 76 + resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==} 77 + 78 + '@emnapi/runtime@1.8.1': 79 + resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} 80 + 81 + '@emnapi/wasi-threads@1.1.0': 82 + resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} 50 83 51 84 '@esbuild/aix-ppc64@0.27.3': 52 85 resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} ··· 204 237 cpu: [x64] 205 238 os: [win32] 206 239 240 + '@jridgewell/gen-mapping@0.3.13': 241 + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} 242 + 243 + '@jridgewell/resolve-uri@3.1.2': 244 + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 245 + engines: {node: '>=6.0.0'} 246 + 207 247 '@jridgewell/sourcemap-codec@1.5.5': 208 248 resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} 209 249 250 + '@jridgewell/trace-mapping@0.3.31': 251 + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} 252 + 253 + '@napi-rs/wasm-runtime@1.1.1': 254 + resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==} 255 + 256 + '@oxc-project/types@0.112.0': 257 + resolution: {integrity: sha512-m6RebKHIRsax2iCwVpYW2ErQwa4ywHJrE4sCK3/8JK8ZZAWOKXaRJFl/uP51gaVyyXlaS4+chU1nSCdzYf6QqQ==} 258 + 210 259 '@oxfmt/binding-android-arm-eabi@0.32.0': 211 260 resolution: {integrity: sha512-DpVyuVzgLH6/MvuB/YD3vXO9CN/o9EdRpA0zXwe/tagP6yfVSFkFWkPqTROdqp0mlzLH5Yl+/m+hOrcM601EbA==} 212 261 engines: {node: ^20.19.0 || >=22.12.0} ··· 254 303 engines: {node: ^20.19.0 || >=22.12.0} 255 304 cpu: [arm64] 256 305 os: [linux] 306 + libc: [glibc] 257 307 258 308 '@oxfmt/binding-linux-arm64-musl@0.32.0': 259 309 resolution: {integrity: sha512-UYiqO9MlipntFbdbUKOIo84vuyzrK4TVIs7Etat91WNMFSW54F6OnHq08xa5ZM+K9+cyYMgQPXvYCopuP+LyKw==} 260 310 engines: {node: ^20.19.0 || >=22.12.0} 261 311 cpu: [arm64] 262 312 os: [linux] 313 + libc: [musl] 263 314 264 315 '@oxfmt/binding-linux-ppc64-gnu@0.32.0': 265 316 resolution: {integrity: sha512-IDH/fxMv+HmKsMtsjEbXqhScCKDIYp38sgGEcn0QKeXMxrda67PPZA7HMfoUwEtFUG+jsO1XJxTrQsL+kQ90xQ==} 266 317 engines: {node: ^20.19.0 || >=22.12.0} 267 318 cpu: [ppc64] 268 319 os: [linux] 320 + libc: [glibc] 269 321 270 322 '@oxfmt/binding-linux-riscv64-gnu@0.32.0': 271 323 resolution: {integrity: sha512-bQFGPDa0buYWJFeK2I7ah8wRZjrAgamaG2OAGv+Ua5UMYEnHxmHcv+r8lWUUrwP2oqQGvp1SB8JIVtBbYuAueQ==} 272 324 engines: {node: ^20.19.0 || >=22.12.0} 273 325 cpu: [riscv64] 274 326 os: [linux] 327 + libc: [glibc] 275 328 276 329 '@oxfmt/binding-linux-riscv64-musl@0.32.0': 277 330 resolution: {integrity: sha512-3vFp9DW1ItEKWltADzCFqG5N7rYFToT4ztlhg8wALoo2E2VhveLD88uAF4FF9AxD9NhgHDGmPCV+WZl/Qlj8cQ==} 278 331 engines: {node: ^20.19.0 || >=22.12.0} 279 332 cpu: [riscv64] 280 333 os: [linux] 334 + libc: [musl] 281 335 282 336 '@oxfmt/binding-linux-s390x-gnu@0.32.0': 283 337 resolution: {integrity: sha512-Fub2y8S9ImuPzAzpbgkoz/EVTWFFBolxFZYCMRhRZc8cJZI2gl/NlZswqhvJd/U0Jopnwgm/OJ2x128vVzFFWA==} 284 338 engines: {node: ^20.19.0 || >=22.12.0} 285 339 cpu: [s390x] 286 340 os: [linux] 341 + libc: [glibc] 287 342 288 343 '@oxfmt/binding-linux-x64-gnu@0.32.0': 289 344 resolution: {integrity: sha512-XufwsnV3BF81zO2ofZvhT4FFaMmLTzZEZnC9HpFz/quPeg9C948+kbLlZnsfjmp+1dUxKMCpfmRMqOfF4AOLsA==} 290 345 engines: {node: ^20.19.0 || >=22.12.0} 291 346 cpu: [x64] 292 347 os: [linux] 348 + libc: [glibc] 293 349 294 350 '@oxfmt/binding-linux-x64-musl@0.32.0': 295 351 resolution: {integrity: sha512-u2f9tC2qYfikKmA2uGpnEJgManwmk0ZXWs5BB4ga4KDu2JNLdA3i634DGHeMLK9wY9+iRf3t7IYpgN3OVFrvDw==} 296 352 engines: {node: ^20.19.0 || >=22.12.0} 297 353 cpu: [x64] 298 354 os: [linux] 355 + libc: [musl] 299 356 300 357 '@oxfmt/binding-openharmony-arm64@0.32.0': 301 358 resolution: {integrity: sha512-5ZXb1wrdbZ1YFXuNXNUCePLlmLDy4sUt4evvzD4Cgumbup5wJgS9PIe5BOaLywUg9f1wTH6lwltj3oT7dFpIGA==} ··· 321 378 cpu: [x64] 322 379 os: [win32] 323 380 381 + '@quansync/fs@1.0.0': 382 + resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==} 383 + 384 + '@rolldown/binding-android-arm64@1.0.0-rc.3': 385 + resolution: {integrity: sha512-0T1k9FinuBZ/t7rZ8jN6OpUKPnUjNdYHoj/cESWrQ3ZraAJ4OMm6z7QjSfCxqj8mOp9kTKc1zHK3kGz5vMu+nQ==} 386 + engines: {node: ^20.19.0 || >=22.12.0} 387 + cpu: [arm64] 388 + os: [android] 389 + 390 + '@rolldown/binding-darwin-arm64@1.0.0-rc.3': 391 + resolution: {integrity: sha512-JWWLzvcmc/3pe7qdJqPpuPk91SoE/N+f3PcWx/6ZwuyDVyungAEJPvKm/eEldiDdwTmaEzWfIR+HORxYWrCi1A==} 392 + engines: {node: ^20.19.0 || >=22.12.0} 393 + cpu: [arm64] 394 + os: [darwin] 395 + 396 + '@rolldown/binding-darwin-x64@1.0.0-rc.3': 397 + resolution: {integrity: sha512-MTakBxfx3tde5WSmbHxuqlDsIW0EzQym+PJYGF4P6lG2NmKzi128OGynoFUqoD5ryCySEY85dug4v+LWGBElIw==} 398 + engines: {node: ^20.19.0 || >=22.12.0} 399 + cpu: [x64] 400 + os: [darwin] 401 + 402 + '@rolldown/binding-freebsd-x64@1.0.0-rc.3': 403 + resolution: {integrity: sha512-jje3oopyOLs7IwfvXoS6Lxnmie5JJO7vW29fdGFu5YGY1EDbVDhD+P9vDihqS5X6fFiqL3ZQZCMBg6jyHkSVww==} 404 + engines: {node: ^20.19.0 || >=22.12.0} 405 + cpu: [x64] 406 + os: [freebsd] 407 + 408 + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.3': 409 + resolution: {integrity: sha512-A0n8P3hdLAaqzSFrQoA42p23ZKBYQOw+8EH5r15Sa9X1kD9/JXe0YT2gph2QTWvdr0CVK2BOXiK6ENfy6DXOag==} 410 + engines: {node: ^20.19.0 || >=22.12.0} 411 + cpu: [arm] 412 + os: [linux] 413 + 414 + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.3': 415 + resolution: {integrity: sha512-kWXkoxxarYISBJ4bLNf5vFkEbb4JvccOwxWDxuK9yee8lg5XA7OpvlTptfRuwEvYcOZf+7VS69Uenpmpyo5Bjw==} 416 + engines: {node: ^20.19.0 || >=22.12.0} 417 + cpu: [arm64] 418 + os: [linux] 419 + libc: [glibc] 420 + 421 + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.3': 422 + resolution: {integrity: sha512-Z03/wrqau9Bicfgb3Dbs6SYTHliELk2PM2LpG2nFd+cGupTMF5kanLEcj2vuuJLLhptNyS61rtk7SOZ+lPsTUA==} 423 + engines: {node: ^20.19.0 || >=22.12.0} 424 + cpu: [arm64] 425 + os: [linux] 426 + libc: [musl] 427 + 428 + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.3': 429 + resolution: {integrity: sha512-iSXXZsQp08CSilff/DCTFZHSVEpEwdicV3W8idHyrByrcsRDVh9sGC3sev6d8BygSGj3vt8GvUKBPCoyMA4tgQ==} 430 + engines: {node: ^20.19.0 || >=22.12.0} 431 + cpu: [x64] 432 + os: [linux] 433 + libc: [glibc] 434 + 435 + '@rolldown/binding-linux-x64-musl@1.0.0-rc.3': 436 + resolution: {integrity: sha512-qaj+MFudtdCv9xZo9znFvkgoajLdc+vwf0Kz5N44g+LU5XMe+IsACgn3UG7uTRlCCvhMAGXm1XlpEA5bZBrOcw==} 437 + engines: {node: ^20.19.0 || >=22.12.0} 438 + cpu: [x64] 439 + os: [linux] 440 + libc: [musl] 441 + 442 + '@rolldown/binding-openharmony-arm64@1.0.0-rc.3': 443 + resolution: {integrity: sha512-U662UnMETyjT65gFmG9ma+XziENrs7BBnENi/27swZPYagubfHRirXHG2oMl+pEax2WvO7Kb9gHZmMakpYqBHQ==} 444 + engines: {node: ^20.19.0 || >=22.12.0} 445 + cpu: [arm64] 446 + os: [openharmony] 447 + 448 + '@rolldown/binding-wasm32-wasi@1.0.0-rc.3': 449 + resolution: {integrity: sha512-gekrQ3Q2HiC1T5njGyuUJoGpK/l6B/TNXKed3fZXNf9YRTJn3L5MOZsFBn4bN2+UX+8+7hgdlTcEsexX988G4g==} 450 + engines: {node: '>=14.0.0'} 451 + cpu: [wasm32] 452 + 453 + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.3': 454 + resolution: {integrity: sha512-85y5JifyMgs8m5K2XzR/VDsapKbiFiohl7s5lEj7nmNGO0pkTXE7q6TQScei96BNAsoK7JC3pA7ukA8WRHVJpg==} 455 + engines: {node: ^20.19.0 || >=22.12.0} 456 + cpu: [arm64] 457 + os: [win32] 458 + 459 + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.3': 460 + resolution: {integrity: sha512-a4VUQZH7LxGbUJ3qJ/TzQG8HxdHvf+jOnqf7B7oFx1TEBm+j2KNL2zr5SQ7wHkNAcaPevF6gf9tQnVBnC4mD+A==} 461 + engines: {node: ^20.19.0 || >=22.12.0} 462 + cpu: [x64] 463 + os: [win32] 464 + 465 + '@rolldown/pluginutils@1.0.0-rc.3': 466 + resolution: {integrity: sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==} 467 + 324 468 '@rollup/rollup-android-arm-eabi@4.57.1': 325 469 resolution: {integrity: sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==} 326 470 cpu: [arm] ··· 355 499 resolution: {integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==} 356 500 cpu: [arm] 357 501 os: [linux] 502 + libc: [glibc] 358 503 359 504 '@rollup/rollup-linux-arm-musleabihf@4.57.1': 360 505 resolution: {integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==} 361 506 cpu: [arm] 362 507 os: [linux] 508 + libc: [musl] 363 509 364 510 '@rollup/rollup-linux-arm64-gnu@4.57.1': 365 511 resolution: {integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==} 366 512 cpu: [arm64] 367 513 os: [linux] 514 + libc: [glibc] 368 515 369 516 '@rollup/rollup-linux-arm64-musl@4.57.1': 370 517 resolution: {integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==} 371 518 cpu: [arm64] 372 519 os: [linux] 520 + libc: [musl] 373 521 374 522 '@rollup/rollup-linux-loong64-gnu@4.57.1': 375 523 resolution: {integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==} 376 524 cpu: [loong64] 377 525 os: [linux] 526 + libc: [glibc] 378 527 379 528 '@rollup/rollup-linux-loong64-musl@4.57.1': 380 529 resolution: {integrity: sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==} 381 530 cpu: [loong64] 382 531 os: [linux] 532 + libc: [musl] 383 533 384 534 '@rollup/rollup-linux-ppc64-gnu@4.57.1': 385 535 resolution: {integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==} 386 536 cpu: [ppc64] 387 537 os: [linux] 538 + libc: [glibc] 388 539 389 540 '@rollup/rollup-linux-ppc64-musl@4.57.1': 390 541 resolution: {integrity: sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==} 391 542 cpu: [ppc64] 392 543 os: [linux] 544 + libc: [musl] 393 545 394 546 '@rollup/rollup-linux-riscv64-gnu@4.57.1': 395 547 resolution: {integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==} 396 548 cpu: [riscv64] 397 549 os: [linux] 550 + libc: [glibc] 398 551 399 552 '@rollup/rollup-linux-riscv64-musl@4.57.1': 400 553 resolution: {integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==} 401 554 cpu: [riscv64] 402 555 os: [linux] 556 + libc: [musl] 403 557 404 558 '@rollup/rollup-linux-s390x-gnu@4.57.1': 405 559 resolution: {integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==} 406 560 cpu: [s390x] 407 561 os: [linux] 562 + libc: [glibc] 408 563 409 564 '@rollup/rollup-linux-x64-gnu@4.57.1': 410 565 resolution: {integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==} 411 566 cpu: [x64] 412 567 os: [linux] 568 + libc: [glibc] 413 569 414 570 '@rollup/rollup-linux-x64-musl@4.57.1': 415 571 resolution: {integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==} 416 572 cpu: [x64] 417 573 os: [linux] 574 + libc: [musl] 418 575 419 576 '@rollup/rollup-openbsd-x64@4.57.1': 420 577 resolution: {integrity: sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==} ··· 446 603 cpu: [x64] 447 604 os: [win32] 448 605 449 - '@sec-ant/readable-stream@0.4.1': 450 - resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} 451 - 452 - '@sindresorhus/merge-streams@4.0.0': 453 - resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} 454 - engines: {node: '>=18'} 455 - 456 606 '@standard-schema/spec@1.1.0': 457 607 resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} 608 + 609 + '@tybys/wasm-util@0.10.1': 610 + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} 458 611 459 612 '@types/chai@5.2.3': 460 613 resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} ··· 464 617 465 618 '@types/estree@1.0.8': 466 619 resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} 620 + 621 + '@types/jsesc@2.5.1': 622 + resolution: {integrity: sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==} 467 623 468 624 '@types/node@22.19.11': 469 625 resolution: {integrity: sha512-BH7YwL6rA93ReqeQS1c4bsPpcfOmJasG+Fkr6Y59q83f9M1WcBRHR2vM+P9eOisYRcN3ujQoiZY8uk5W+1WL8w==} ··· 497 653 '@vitest/utils@4.0.18': 498 654 resolution: {integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==} 499 655 656 + ansis@4.2.0: 657 + resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} 658 + engines: {node: '>=14'} 659 + 500 660 assertion-error@2.0.1: 501 661 resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} 502 662 engines: {node: '>=12'} 503 663 664 + ast-kit@3.0.0-beta.1: 665 + resolution: {integrity: sha512-trmleAnZ2PxN/loHWVhhx1qeOHSRXq4TDsBBxq3GqeJitfk3+jTQ+v/C1km/KYq9M7wKqCewMh+/NAvVH7m+bw==} 666 + engines: {node: '>=20.19.0'} 667 + 668 + birpc@4.0.0: 669 + resolution: {integrity: sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==} 670 + 671 + cac@6.7.14: 672 + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 673 + engines: {node: '>=8'} 674 + 504 675 chai@6.2.2: 505 676 resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} 506 677 engines: {node: '>=18'} ··· 508 679 citty@0.2.1: 509 680 resolution: {integrity: sha512-kEV95lFBhQgtogAPlQfJJ0WGVSokvLr/UEoFPiKKOXF7pl98HfUVUD0ejsuTCld/9xH9vogSywZ5KqHzXrZpqg==} 510 681 511 - cross-spawn@7.0.6: 512 - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 513 - engines: {node: '>= 8'} 682 + create-vite@8.3.0: 683 + resolution: {integrity: sha512-58bnPOiwODNTOV60tS/zttmTG1V1xZJThqqvpDPmp0i55fT9i2YsjWdnx7uFy0/FmWRUv4HJeEPlq6zAW3hwTQ==} 684 + engines: {node: ^20.19.0 || >=22.12.0} 685 + hasBin: true 686 + 687 + defu@6.1.4: 688 + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} 689 + 690 + dts-resolver@2.1.3: 691 + resolution: {integrity: sha512-bihc7jPC90VrosXNzK0LTE2cuLP6jr0Ro8jk+kMugHReJVLIpHz/xadeq3MhuwyO4TD4OA3L1Q8pBBFRc08Tsw==} 692 + engines: {node: '>=20.19.0'} 693 + peerDependencies: 694 + oxc-resolver: '>=11.0.0' 695 + peerDependenciesMeta: 696 + oxc-resolver: 697 + optional: true 698 + 699 + empathic@2.0.0: 700 + resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} 701 + engines: {node: '>=14'} 514 702 515 703 es-module-lexer@1.7.0: 516 704 resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} ··· 523 711 estree-walker@3.0.3: 524 712 resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 525 713 526 - execa@9.6.1: 527 - resolution: {integrity: sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==} 528 - engines: {node: ^18.19.0 || >=20.5.0} 529 - 530 714 expect-type@1.3.0: 531 715 resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} 532 716 engines: {node: '>=12.0.0'} ··· 540 724 picomatch: 541 725 optional: true 542 726 543 - figures@6.1.0: 544 - resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} 545 - engines: {node: '>=18'} 546 - 547 727 fsevents@2.3.3: 548 728 resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 549 729 engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 550 730 os: [darwin] 551 - 552 - get-stream@9.0.1: 553 - resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} 554 - engines: {node: '>=18'} 555 731 556 732 get-tsconfig@4.13.6: 557 733 resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==} 558 734 559 - human-signals@8.0.1: 560 - resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} 561 - engines: {node: '>=18.18.0'} 735 + hookable@6.0.1: 736 + resolution: {integrity: sha512-uKGyY8BuzN/a5gvzvA+3FVWo0+wUjgtfSdnmjtrOVwQCZPHpHDH2WRO3VZSOeluYrHoDCiXFffZXs8Dj1ULWtw==} 562 737 563 - is-plain-obj@4.1.0: 564 - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} 565 - engines: {node: '>=12'} 738 + import-without-cache@0.2.5: 739 + resolution: {integrity: sha512-B6Lc2s6yApwnD2/pMzFh/d5AVjdsDXjgkeJ766FmFuJELIGHNycKRj+l3A39yZPM4CchqNCB4RITEAYB1KUM6A==} 740 + engines: {node: '>=20.19.0'} 566 741 567 - is-stream@4.0.1: 568 - resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} 569 - engines: {node: '>=18'} 570 - 571 - is-unicode-supported@2.1.0: 572 - resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} 573 - engines: {node: '>=18'} 574 - 575 - isexe@2.0.0: 576 - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 742 + jsesc@3.1.0: 743 + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} 744 + engines: {node: '>=6'} 745 + hasBin: true 577 746 578 747 lefthook-darwin-arm64@2.1.1: 579 748 resolution: {integrity: sha512-O/RS1j03/Fnq5zCzEb2r7UOBsqPeBuf1C5pMkIJcO4TSE6hf3rhLUkcorKc2M5ni/n5zLGtzQUXHV08/fSAT3Q==} ··· 637 806 engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 638 807 hasBin: true 639 808 640 - npm-run-path@6.0.0: 641 - resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} 642 - engines: {node: '>=18'} 643 - 644 809 obug@2.1.1: 645 810 resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} 646 811 ··· 649 814 engines: {node: ^20.19.0 || >=22.12.0} 650 815 hasBin: true 651 816 652 - parse-ms@4.0.0: 653 - resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} 654 - engines: {node: '>=18'} 655 - 656 - path-key@3.1.1: 657 - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 658 - engines: {node: '>=8'} 659 - 660 - path-key@4.0.0: 661 - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} 662 - engines: {node: '>=12'} 663 - 664 817 pathe@2.0.3: 665 818 resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} 666 819 ··· 675 828 resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} 676 829 engines: {node: ^10 || ^12 || >=14} 677 830 678 - pretty-ms@9.3.0: 679 - resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==} 680 - engines: {node: '>=18'} 831 + quansync@1.0.0: 832 + resolution: {integrity: sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==} 681 833 682 834 resolve-pkg-maps@1.0.0: 683 835 resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 684 836 837 + rolldown-plugin-dts@0.22.1: 838 + resolution: {integrity: sha512-5E0AiM5RSQhU6cjtkDFWH6laW4IrMu0j1Mo8x04Xo1ALHmaRMs9/7zej7P3RrryVHW/DdZAp85MA7Be55p0iUw==} 839 + engines: {node: '>=20.19.0'} 840 + peerDependencies: 841 + '@ts-macro/tsc': ^0.3.6 842 + '@typescript/native-preview': '>=7.0.0-dev.20250601.1' 843 + rolldown: ^1.0.0-rc.3 844 + typescript: ^5.0.0 845 + vue-tsc: ~3.2.0 846 + peerDependenciesMeta: 847 + '@ts-macro/tsc': 848 + optional: true 849 + '@typescript/native-preview': 850 + optional: true 851 + typescript: 852 + optional: true 853 + vue-tsc: 854 + optional: true 855 + 856 + rolldown@1.0.0-rc.3: 857 + resolution: {integrity: sha512-Po/YZECDOqVXjIXrtC5h++a5NLvKAQNrd9ggrIG3sbDfGO5BqTUsrI6l8zdniKRp3r5Tp/2JTrXqx4GIguFCMw==} 858 + engines: {node: ^20.19.0 || >=22.12.0} 859 + hasBin: true 860 + 685 861 rollup@4.57.1: 686 862 resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==} 687 863 engines: {node: '>=18.0.0', npm: '>=8.0.0'} 688 864 hasBin: true 689 865 690 - shebang-command@2.0.0: 691 - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 692 - engines: {node: '>=8'} 693 - 694 - shebang-regex@3.0.0: 695 - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 696 - engines: {node: '>=8'} 866 + semver@7.7.4: 867 + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} 868 + engines: {node: '>=10'} 869 + hasBin: true 697 870 698 871 siginfo@2.0.0: 699 872 resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 700 873 701 - signal-exit@4.1.0: 702 - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 703 - engines: {node: '>=14'} 704 - 705 874 sisteransi@1.0.5: 706 875 resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} 707 876 ··· 714 883 715 884 std-env@3.10.0: 716 885 resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} 717 - 718 - strip-final-newline@4.0.0: 719 - resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} 720 - engines: {node: '>=18'} 721 886 722 887 tinybench@2.9.0: 723 888 resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} ··· 738 903 resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} 739 904 engines: {node: '>=14.0.0'} 740 905 906 + tree-kill@1.2.2: 907 + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} 908 + hasBin: true 909 + 910 + tsdown@0.20.3: 911 + resolution: {integrity: sha512-qWOUXSbe4jN8JZEgrkc/uhJpC8VN2QpNu3eZkBWwNuTEjc/Ik1kcc54ycfcQ5QPRHeu9OQXaLfCI3o7pEJgB2w==} 912 + engines: {node: '>=20.19.0'} 913 + hasBin: true 914 + peerDependencies: 915 + '@arethetypeswrong/core': ^0.18.1 916 + '@vitejs/devtools': '*' 917 + publint: ^0.3.0 918 + typescript: ^5.0.0 919 + unplugin-lightningcss: ^0.4.0 920 + unplugin-unused: ^0.5.0 921 + peerDependenciesMeta: 922 + '@arethetypeswrong/core': 923 + optional: true 924 + '@vitejs/devtools': 925 + optional: true 926 + publint: 927 + optional: true 928 + typescript: 929 + optional: true 930 + unplugin-lightningcss: 931 + optional: true 932 + unplugin-unused: 933 + optional: true 934 + 935 + tslib@2.8.1: 936 + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 937 + 741 938 tsx@4.21.0: 742 939 resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} 743 940 engines: {node: '>=18.0.0'} ··· 747 944 resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} 748 945 engines: {node: '>=14.17'} 749 946 hasBin: true 947 + 948 + unconfig-core@7.5.0: 949 + resolution: {integrity: sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==} 750 950 751 951 undici-types@6.21.0: 752 952 resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} 753 953 754 - unicorn-magic@0.3.0: 755 - resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} 756 - engines: {node: '>=18'} 954 + unrun@0.2.27: 955 + resolution: {integrity: sha512-Mmur1UJpIbfxasLOhPRvox/QS4xBiDii71hMP7smfRthGcwFL2OAmYRgduLANOAU4LUkvVamuP+02U+c90jlrw==} 956 + engines: {node: '>=20.19.0'} 957 + hasBin: true 958 + peerDependencies: 959 + synckit: ^0.11.11 960 + peerDependenciesMeta: 961 + synckit: 962 + optional: true 757 963 758 964 vite@7.3.1: 759 965 resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} ··· 829 1035 jsdom: 830 1036 optional: true 831 1037 832 - which@2.0.2: 833 - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 834 - engines: {node: '>= 8'} 835 - hasBin: true 836 - 837 1038 why-is-node-running@2.3.0: 838 1039 resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} 839 1040 engines: {node: '>=8'} 840 1041 hasBin: true 841 1042 842 - yoctocolors@2.1.2: 843 - resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} 844 - engines: {node: '>=18'} 1043 + snapshots: 1044 + 1045 + '@babel/generator@8.0.0-rc.1': 1046 + dependencies: 1047 + '@babel/parser': 8.0.0-rc.1 1048 + '@babel/types': 8.0.0-rc.1 1049 + '@jridgewell/gen-mapping': 0.3.13 1050 + '@jridgewell/trace-mapping': 0.3.31 1051 + '@types/jsesc': 2.5.1 1052 + jsesc: 3.1.0 1053 + 1054 + '@babel/helper-string-parser@8.0.0-rc.1': {} 1055 + 1056 + '@babel/helper-validator-identifier@8.0.0-rc.1': {} 845 1057 846 - snapshots: 1058 + '@babel/parser@8.0.0-rc.1': 1059 + dependencies: 1060 + '@babel/types': 8.0.0-rc.1 1061 + 1062 + '@babel/types@8.0.0-rc.1': 1063 + dependencies: 1064 + '@babel/helper-string-parser': 8.0.0-rc.1 1065 + '@babel/helper-validator-identifier': 8.0.0-rc.1 847 1066 848 1067 '@clack/core@1.0.1': 849 1068 dependencies: ··· 855 1074 '@clack/core': 1.0.1 856 1075 picocolors: 1.1.1 857 1076 sisteransi: 1.0.5 1077 + 1078 + '@emnapi/core@1.8.1': 1079 + dependencies: 1080 + '@emnapi/wasi-threads': 1.1.0 1081 + tslib: 2.8.1 1082 + optional: true 1083 + 1084 + '@emnapi/runtime@1.8.1': 1085 + dependencies: 1086 + tslib: 2.8.1 1087 + optional: true 1088 + 1089 + '@emnapi/wasi-threads@1.1.0': 1090 + dependencies: 1091 + tslib: 2.8.1 1092 + optional: true 858 1093 859 1094 '@esbuild/aix-ppc64@0.27.3': 860 1095 optional: true ··· 934 1169 '@esbuild/win32-x64@0.27.3': 935 1170 optional: true 936 1171 1172 + '@jridgewell/gen-mapping@0.3.13': 1173 + dependencies: 1174 + '@jridgewell/sourcemap-codec': 1.5.5 1175 + '@jridgewell/trace-mapping': 0.3.31 1176 + 1177 + '@jridgewell/resolve-uri@3.1.2': {} 1178 + 937 1179 '@jridgewell/sourcemap-codec@1.5.5': {} 1180 + 1181 + '@jridgewell/trace-mapping@0.3.31': 1182 + dependencies: 1183 + '@jridgewell/resolve-uri': 3.1.2 1184 + '@jridgewell/sourcemap-codec': 1.5.5 1185 + 1186 + '@napi-rs/wasm-runtime@1.1.1': 1187 + dependencies: 1188 + '@emnapi/core': 1.8.1 1189 + '@emnapi/runtime': 1.8.1 1190 + '@tybys/wasm-util': 0.10.1 1191 + optional: true 1192 + 1193 + '@oxc-project/types@0.112.0': {} 938 1194 939 1195 '@oxfmt/binding-android-arm-eabi@0.32.0': 940 1196 optional: true ··· 993 1249 '@oxfmt/binding-win32-x64-msvc@0.32.0': 994 1250 optional: true 995 1251 1252 + '@quansync/fs@1.0.0': 1253 + dependencies: 1254 + quansync: 1.0.0 1255 + 1256 + '@rolldown/binding-android-arm64@1.0.0-rc.3': 1257 + optional: true 1258 + 1259 + '@rolldown/binding-darwin-arm64@1.0.0-rc.3': 1260 + optional: true 1261 + 1262 + '@rolldown/binding-darwin-x64@1.0.0-rc.3': 1263 + optional: true 1264 + 1265 + '@rolldown/binding-freebsd-x64@1.0.0-rc.3': 1266 + optional: true 1267 + 1268 + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.3': 1269 + optional: true 1270 + 1271 + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.3': 1272 + optional: true 1273 + 1274 + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.3': 1275 + optional: true 1276 + 1277 + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.3': 1278 + optional: true 1279 + 1280 + '@rolldown/binding-linux-x64-musl@1.0.0-rc.3': 1281 + optional: true 1282 + 1283 + '@rolldown/binding-openharmony-arm64@1.0.0-rc.3': 1284 + optional: true 1285 + 1286 + '@rolldown/binding-wasm32-wasi@1.0.0-rc.3': 1287 + dependencies: 1288 + '@napi-rs/wasm-runtime': 1.1.1 1289 + optional: true 1290 + 1291 + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.3': 1292 + optional: true 1293 + 1294 + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.3': 1295 + optional: true 1296 + 1297 + '@rolldown/pluginutils@1.0.0-rc.3': {} 1298 + 996 1299 '@rollup/rollup-android-arm-eabi@4.57.1': 997 1300 optional: true 998 1301 ··· 1068 1371 '@rollup/rollup-win32-x64-msvc@4.57.1': 1069 1372 optional: true 1070 1373 1071 - '@sec-ant/readable-stream@0.4.1': {} 1374 + '@standard-schema/spec@1.1.0': {} 1072 1375 1073 - '@sindresorhus/merge-streams@4.0.0': {} 1074 - 1075 - '@standard-schema/spec@1.1.0': {} 1376 + '@tybys/wasm-util@0.10.1': 1377 + dependencies: 1378 + tslib: 2.8.1 1379 + optional: true 1076 1380 1077 1381 '@types/chai@5.2.3': 1078 1382 dependencies: ··· 1082 1386 '@types/deep-eql@4.0.2': {} 1083 1387 1084 1388 '@types/estree@1.0.8': {} 1389 + 1390 + '@types/jsesc@2.5.1': {} 1085 1391 1086 1392 '@types/node@22.19.11': 1087 1393 dependencies: ··· 1126 1432 '@vitest/pretty-format': 4.0.18 1127 1433 tinyrainbow: 3.0.3 1128 1434 1435 + ansis@4.2.0: {} 1436 + 1129 1437 assertion-error@2.0.1: {} 1130 1438 1439 + ast-kit@3.0.0-beta.1: 1440 + dependencies: 1441 + '@babel/parser': 8.0.0-rc.1 1442 + estree-walker: 3.0.3 1443 + pathe: 2.0.3 1444 + 1445 + birpc@4.0.0: {} 1446 + 1447 + cac@6.7.14: {} 1448 + 1131 1449 chai@6.2.2: {} 1132 1450 1133 1451 citty@0.2.1: {} 1134 1452 1135 - cross-spawn@7.0.6: 1136 - dependencies: 1137 - path-key: 3.1.1 1138 - shebang-command: 2.0.0 1139 - which: 2.0.2 1453 + create-vite@8.3.0: {} 1454 + 1455 + defu@6.1.4: {} 1456 + 1457 + dts-resolver@2.1.3: {} 1458 + 1459 + empathic@2.0.0: {} 1140 1460 1141 1461 es-module-lexer@1.7.0: {} 1142 1462 ··· 1173 1493 dependencies: 1174 1494 '@types/estree': 1.0.8 1175 1495 1176 - execa@9.6.1: 1177 - dependencies: 1178 - '@sindresorhus/merge-streams': 4.0.0 1179 - cross-spawn: 7.0.6 1180 - figures: 6.1.0 1181 - get-stream: 9.0.1 1182 - human-signals: 8.0.1 1183 - is-plain-obj: 4.1.0 1184 - is-stream: 4.0.1 1185 - npm-run-path: 6.0.0 1186 - pretty-ms: 9.3.0 1187 - signal-exit: 4.1.0 1188 - strip-final-newline: 4.0.0 1189 - yoctocolors: 2.1.2 1190 - 1191 1496 expect-type@1.3.0: {} 1192 1497 1193 1498 fdir@6.5.0(picomatch@4.0.3): 1194 1499 optionalDependencies: 1195 1500 picomatch: 4.0.3 1196 1501 1197 - figures@6.1.0: 1198 - dependencies: 1199 - is-unicode-supported: 2.1.0 1200 - 1201 1502 fsevents@2.3.3: 1202 1503 optional: true 1203 1504 1204 - get-stream@9.0.1: 1205 - dependencies: 1206 - '@sec-ant/readable-stream': 0.4.1 1207 - is-stream: 4.0.1 1208 - 1209 1505 get-tsconfig@4.13.6: 1210 1506 dependencies: 1211 1507 resolve-pkg-maps: 1.0.0 1212 1508 1213 - human-signals@8.0.1: {} 1214 - 1215 - is-plain-obj@4.1.0: {} 1509 + hookable@6.0.1: {} 1216 1510 1217 - is-stream@4.0.1: {} 1511 + import-without-cache@0.2.5: {} 1218 1512 1219 - is-unicode-supported@2.1.0: {} 1220 - 1221 - isexe@2.0.0: {} 1513 + jsesc@3.1.0: {} 1222 1514 1223 1515 lefthook-darwin-arm64@2.1.1: 1224 1516 optional: true ··· 1269 1561 1270 1562 nanoid@3.3.11: {} 1271 1563 1272 - npm-run-path@6.0.0: 1273 - dependencies: 1274 - path-key: 4.0.0 1275 - unicorn-magic: 0.3.0 1276 - 1277 1564 obug@2.1.1: {} 1278 1565 1279 1566 oxfmt@0.32.0: ··· 1300 1587 '@oxfmt/binding-win32-ia32-msvc': 0.32.0 1301 1588 '@oxfmt/binding-win32-x64-msvc': 0.32.0 1302 1589 1303 - parse-ms@4.0.0: {} 1304 - 1305 - path-key@3.1.1: {} 1306 - 1307 - path-key@4.0.0: {} 1308 - 1309 1590 pathe@2.0.3: {} 1310 1591 1311 1592 picocolors@1.1.1: {} ··· 1318 1599 picocolors: 1.1.1 1319 1600 source-map-js: 1.2.1 1320 1601 1321 - pretty-ms@9.3.0: 1602 + quansync@1.0.0: {} 1603 + 1604 + resolve-pkg-maps@1.0.0: {} 1605 + 1606 + rolldown-plugin-dts@0.22.1(rolldown@1.0.0-rc.3)(typescript@5.9.3): 1322 1607 dependencies: 1323 - parse-ms: 4.0.0 1608 + '@babel/generator': 8.0.0-rc.1 1609 + '@babel/helper-validator-identifier': 8.0.0-rc.1 1610 + '@babel/parser': 8.0.0-rc.1 1611 + '@babel/types': 8.0.0-rc.1 1612 + ast-kit: 3.0.0-beta.1 1613 + birpc: 4.0.0 1614 + dts-resolver: 2.1.3 1615 + get-tsconfig: 4.13.6 1616 + obug: 2.1.1 1617 + rolldown: 1.0.0-rc.3 1618 + optionalDependencies: 1619 + typescript: 5.9.3 1620 + transitivePeerDependencies: 1621 + - oxc-resolver 1324 1622 1325 - resolve-pkg-maps@1.0.0: {} 1623 + rolldown@1.0.0-rc.3: 1624 + dependencies: 1625 + '@oxc-project/types': 0.112.0 1626 + '@rolldown/pluginutils': 1.0.0-rc.3 1627 + optionalDependencies: 1628 + '@rolldown/binding-android-arm64': 1.0.0-rc.3 1629 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.3 1630 + '@rolldown/binding-darwin-x64': 1.0.0-rc.3 1631 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.3 1632 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.3 1633 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.3 1634 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.3 1635 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.3 1636 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.3 1637 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.3 1638 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.3 1639 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.3 1640 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.3 1326 1641 1327 1642 rollup@4.57.1: 1328 1643 dependencies: ··· 1355 1670 '@rollup/rollup-win32-x64-msvc': 4.57.1 1356 1671 fsevents: 2.3.3 1357 1672 1358 - shebang-command@2.0.0: 1359 - dependencies: 1360 - shebang-regex: 3.0.0 1361 - 1362 - shebang-regex@3.0.0: {} 1673 + semver@7.7.4: {} 1363 1674 1364 1675 siginfo@2.0.0: {} 1365 1676 1366 - signal-exit@4.1.0: {} 1367 - 1368 1677 sisteransi@1.0.5: {} 1369 1678 1370 1679 source-map-js@1.2.1: {} ··· 1372 1681 stackback@0.0.2: {} 1373 1682 1374 1683 std-env@3.10.0: {} 1375 - 1376 - strip-final-newline@4.0.0: {} 1377 1684 1378 1685 tinybench@2.9.0: {} 1379 1686 ··· 1388 1695 1389 1696 tinyrainbow@3.0.3: {} 1390 1697 1698 + tree-kill@1.2.2: {} 1699 + 1700 + tsdown@0.20.3(typescript@5.9.3): 1701 + dependencies: 1702 + ansis: 4.2.0 1703 + cac: 6.7.14 1704 + defu: 6.1.4 1705 + empathic: 2.0.0 1706 + hookable: 6.0.1 1707 + import-without-cache: 0.2.5 1708 + obug: 2.1.1 1709 + picomatch: 4.0.3 1710 + rolldown: 1.0.0-rc.3 1711 + rolldown-plugin-dts: 0.22.1(rolldown@1.0.0-rc.3)(typescript@5.9.3) 1712 + semver: 7.7.4 1713 + tinyexec: 1.0.2 1714 + tinyglobby: 0.2.15 1715 + tree-kill: 1.2.2 1716 + unconfig-core: 7.5.0 1717 + unrun: 0.2.27 1718 + optionalDependencies: 1719 + typescript: 5.9.3 1720 + transitivePeerDependencies: 1721 + - '@ts-macro/tsc' 1722 + - '@typescript/native-preview' 1723 + - oxc-resolver 1724 + - synckit 1725 + - vue-tsc 1726 + 1727 + tslib@2.8.1: 1728 + optional: true 1729 + 1391 1730 tsx@4.21.0: 1392 1731 dependencies: 1393 1732 esbuild: 0.27.3 ··· 1397 1736 1398 1737 typescript@5.9.3: {} 1399 1738 1739 + unconfig-core@7.5.0: 1740 + dependencies: 1741 + '@quansync/fs': 1.0.0 1742 + quansync: 1.0.0 1743 + 1400 1744 undici-types@6.21.0: {} 1401 1745 1402 - unicorn-magic@0.3.0: {} 1746 + unrun@0.2.27: 1747 + dependencies: 1748 + rolldown: 1.0.0-rc.3 1403 1749 1404 1750 vite@7.3.1(@types/node@22.19.11)(tsx@4.21.0): 1405 1751 dependencies: ··· 1451 1797 - tsx 1452 1798 - yaml 1453 1799 1454 - which@2.0.2: 1455 - dependencies: 1456 - isexe: 2.0.0 1457 - 1458 1800 why-is-node-running@2.3.0: 1459 1801 dependencies: 1460 1802 siginfo: 2.0.0 1461 1803 stackback: 0.0.2 1462 - 1463 - yoctocolors@2.1.2: {}
+33 -83
src/commands/create.ts
··· 1 1 /** 2 - * imma keep it a bean, a lot of this was lifted from create-vite: https://github.com/vitejs/vite/blob/main/packages/create-vite/src/index.ts 3 - * i did also look at the clis for react router, nuxt, svelte and tanstack 2 + * wrapping create-vite and adding atproto bits on top 4 3 */ 5 4 6 5 import type { CommandDef } from "citty"; ··· 15 14 isCancel, 16 15 cancel as c, 17 16 } from "@clack/prompts"; 17 + import { exec } from "node:child_process"; 18 18 import { 19 19 copyFileSync, 20 20 existsSync, 21 21 mkdirSync, 22 22 readdirSync, 23 - readFileSync, 24 - rmSync, 25 23 statSync, 26 - writeFileSync, 27 24 } from "node:fs"; 28 25 import { join, resolve } from "node:path"; 29 26 import { fileURLToPath } from "node:url"; 30 27 import pc from "picocolors"; 31 28 32 - import { version } from "../../package.json" with { type: "json" }; 29 + import { 30 + version, 31 + dependencies, 32 + } from "../../package.json" with { type: "json" }; 33 33 import { FRAMEWORKS } from "../constants.js"; 34 34 35 35 const DEFAULT_PROJECT_NAME = "my-atproto-app"; 36 36 37 37 const cwd = process.cwd(); 38 38 39 - const renameFiles: Record<string, string | undefined> = { 40 - _gitignore: ".gitignore", 41 - }; 42 - 43 39 const cancel = () => c("operation cancelled"); 44 40 45 41 export const createCommand: CommandDef = { ··· 89 85 90 86 const root = join(cwd, projectName); 91 87 92 - // check to see if target directory exists already 93 - if (existsSync(root) && !isDirectoryEmpty(root)) { 94 - const shouldOverwriteExistingProject = 95 - args.overwrite ?? 96 - (await confirm({ 97 - message: pc.yellow( 98 - `A project with the name of ${projectName} already exists at this path: ${root}. Should we overwrite?`, 99 - ), 100 - initialValue: false, 101 - })); 102 - 103 - if (shouldOverwriteExistingProject) { 104 - emptyDir(root); 105 - } else { 106 - cancel(); 107 - return; 108 - } 109 - 110 - if (isCancel(shouldOverwriteExistingProject)) { 111 - cancel(); 112 - return; 113 - } 114 - } 115 - 116 88 const framework = 117 89 FRAMEWORKS.find((f) => f.value === args.framework) ?? 118 90 (await select({ ··· 150 122 return; 151 123 } 152 124 125 + let shouldOverwrite: boolean | undefined = args.overwrite; 126 + if (existsSync(root) && !shouldOverwrite) { 127 + const overwrite: boolean = 128 + args.overwrite ?? 129 + (await confirm({ 130 + message: pc.yellow( 131 + `A project with the name of ${projectName} already exists, should we overwrite the existing folder?`, 132 + ), 133 + initialValue: false 134 + })); 135 + 136 + if (overwrite === false) { 137 + shouldOverwrite = false; 138 + cancel(); 139 + return; 140 + } else { 141 + shouldOverwrite = true; 142 + } 143 + 144 + if (isCancel(overwrite)) { 145 + cancel(); 146 + return; 147 + } 148 + } 149 + 153 150 const s = spinner(); 154 151 s.start("Scaffolding project..."); 155 152 156 - mkdirSync(root, { recursive: true }); 157 - 158 153 const templateDir = resolve( 159 154 fileURLToPath(import.meta.url), 160 155 "../../../templates", 161 156 variant, 162 157 ); 163 158 164 - function write(file: string, content?: string) { 165 - const targetPath = join(root, renameFiles[file] ?? file); 166 - if (content) { 167 - writeFileSync(targetPath, content); 168 - } else if (file === "index.html") { 169 - const templatePath = join(templateDir, file); 170 - const templateContent = readFileSync(templatePath, "utf-8"); 171 - const updatedContent = templateContent.replace( 172 - /<title>.*?<\/title>/, 173 - `<title>${projectName}</title>`, 174 - ); 175 - writeFileSync(targetPath, updatedContent); 176 - } else { 177 - copy(join(templateDir, file), targetPath); 178 - } 179 - } 180 - 181 - const files = readdirSync(templateDir); 182 - for (const file of files.filter((f) => f !== "package.json")) { 183 - write(file); 184 - } 185 - 186 - const pkg = JSON.parse( 187 - readFileSync(join(templateDir, `package.json`), "utf-8"), 159 + exec( 160 + `npx create-vite@${dependencies["create-vite"]} ${projectName} --no-interactive --template ${variant} --overwrite ${shouldOverwrite ? "true" : "false"}`, 188 161 ); 189 162 190 - pkg.name = projectName; 191 - 192 - write("package.json", JSON.stringify(pkg, null, 2) + "\n"); 193 - 194 163 try { 195 164 s.stop("Project created!"); 196 165 } catch (err) { ··· 202 171 outro(`Done! Run \`cd ${projectName}\` to get started`); 203 172 }, 204 173 }; 205 - 206 - function emptyDir(dir: string) { 207 - if (!existsSync(dir)) { 208 - return; 209 - } 210 - 211 - for (const file of readdirSync(dir)) { 212 - if (file === ".git") { 213 - continue; 214 - } 215 - 216 - rmSync(resolve(dir, file), { recursive: true, force: true }); 217 - } 218 - } 219 - 220 - function isDirectoryEmpty(path: string) { 221 - const files = readdirSync(path); 222 - return files.length === 0 || (files.length === 1 && files[0] === ".git"); 223 - } 224 174 225 175 function copy(src: string, dest: string) { 226 176 const stat = statSync(src);
+8 -8
src/constants.ts
··· 18 18 label: "React", 19 19 variants: [ 20 20 { 21 - value: "vanilla-react", 22 - label: "Vanilla", 21 + value: "react-ts", 22 + label: "TypeScript", 23 23 }, 24 24 ], 25 25 }, ··· 43 43 hint: "coming soon", 44 44 variants: [ 45 45 { 46 - value: "vanilla-svelte", 47 - label: "Vanilla", 46 + value: "svelte-ts", 47 + label: "TypeScript", 48 48 }, 49 49 ], 50 50 }, ··· 55 55 hint: "coming soon", 56 56 variants: [ 57 57 { 58 - value: "vanilla-vue", 59 - label: "Vanilla", 58 + value: "vue-ts", 59 + label: "TypeScript", 60 60 }, 61 61 ], 62 62 }, ··· 67 67 hint: "coming soon", 68 68 variants: [ 69 69 { 70 - value: "vanilla-solid", 71 - label: "Vanilla", 70 + value: "solid-ts", 71 + label: "TypeScript", 72 72 }, 73 73 ], 74 74 },
templates/vanilla-react/README.md templates/react-ts/README.md
-27
templates/vanilla-react/_gitignore
··· 1 - # Logs 2 - logs 3 - *.log 4 - npm-debug.log* 5 - yarn-debug.log* 6 - yarn-error.log* 7 - pnpm-debug.log* 8 - lerna-debug.log* 9 - 10 - node_modules 11 - dist 12 - dist-ssr 13 - *.local 14 - 15 - # Editor directories and files 16 - .vscode/* 17 - !.vscode/extensions.json 18 - .idea 19 - .DS_Store 20 - *.suo 21 - *.ntvs* 22 - *.njsproj 23 - *.sln 24 - *.sw? 25 - 26 - // atproto specific ignores 27 - ./src/__generated__
-13
templates/vanilla-react/index.html
··· 1 - <!doctype html> 2 - <html lang="en"> 3 - <head> 4 - <meta charset="UTF-8" /> 5 - <link rel="icon" type="image/svg+xml" href="/favicon.svg" /> 6 - <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 7 - <title>React + ATProto</title> 8 - </head> 9 - <body> 10 - <div id="root"></div> 11 - <script type="module" src="/src/main.tsx"></script> 12 - </body> 13 - </html>
templates/vanilla-react/lexicons.json templates/react-ts/lexicons.json
templates/vanilla-react/lexicons/app/bsky/actor/defs.json templates/react-ts/lexicons/app/bsky/actor/defs.json
templates/vanilla-react/lexicons/app/bsky/actor/getProfile.json templates/react-ts/lexicons/app/bsky/actor/getProfile.json
templates/vanilla-react/lexicons/app/bsky/actor/profile.json templates/react-ts/lexicons/app/bsky/actor/profile.json
templates/vanilla-react/lexicons/app/bsky/actor/status.json templates/react-ts/lexicons/app/bsky/actor/status.json
templates/vanilla-react/lexicons/app/bsky/embed/defs.json templates/react-ts/lexicons/app/bsky/embed/defs.json
templates/vanilla-react/lexicons/app/bsky/embed/external.json templates/react-ts/lexicons/app/bsky/embed/external.json
templates/vanilla-react/lexicons/app/bsky/embed/images.json templates/react-ts/lexicons/app/bsky/embed/images.json
templates/vanilla-react/lexicons/app/bsky/embed/record.json templates/react-ts/lexicons/app/bsky/embed/record.json
templates/vanilla-react/lexicons/app/bsky/embed/recordWithMedia.json templates/react-ts/lexicons/app/bsky/embed/recordWithMedia.json
templates/vanilla-react/lexicons/app/bsky/embed/video.json templates/react-ts/lexicons/app/bsky/embed/video.json
templates/vanilla-react/lexicons/app/bsky/feed/defs.json templates/react-ts/lexicons/app/bsky/feed/defs.json
templates/vanilla-react/lexicons/app/bsky/feed/postgate.json templates/react-ts/lexicons/app/bsky/feed/postgate.json
templates/vanilla-react/lexicons/app/bsky/feed/threadgate.json templates/react-ts/lexicons/app/bsky/feed/threadgate.json
templates/vanilla-react/lexicons/app/bsky/graph/defs.json templates/react-ts/lexicons/app/bsky/graph/defs.json
templates/vanilla-react/lexicons/app/bsky/labeler/defs.json templates/react-ts/lexicons/app/bsky/labeler/defs.json
templates/vanilla-react/lexicons/app/bsky/notification/defs.json templates/react-ts/lexicons/app/bsky/notification/defs.json
templates/vanilla-react/lexicons/app/bsky/richtext/facet.json templates/react-ts/lexicons/app/bsky/richtext/facet.json
templates/vanilla-react/lexicons/com/atproto/label/defs.json templates/react-ts/lexicons/com/atproto/label/defs.json
templates/vanilla-react/lexicons/com/atproto/moderation/defs.json templates/react-ts/lexicons/com/atproto/moderation/defs.json
templates/vanilla-react/lexicons/com/atproto/repo/strongRef.json templates/react-ts/lexicons/com/atproto/repo/strongRef.json
templates/vanilla-react/lexicons/tools/ozone/report/defs.json templates/react-ts/lexicons/tools/ozone/report/defs.json
templates/vanilla-react/package.json templates/react-ts/package.json
templates/vanilla-react/public/favicon.svg templates/react-ts/public/favicon.svg
templates/vanilla-react/src/App.tsx templates/react-ts/src/App.tsx
templates/vanilla-react/src/components/Profile.tsx templates/react-ts/src/components/Profile.tsx
templates/vanilla-react/src/components/profile.module.css templates/react-ts/src/components/profile.module.css
templates/vanilla-react/src/index.css templates/react-ts/src/index.css
templates/vanilla-react/src/main.tsx templates/react-ts/src/main.tsx
-28
templates/vanilla-react/tsconfig.app.json
··· 1 - { 2 - "compilerOptions": { 3 - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", 4 - "target": "ES2023", 5 - "useDefineForClassFields": true, 6 - "lib": ["ES2023", "DOM", "DOM.Iterable"], 7 - "module": "ESNext", 8 - "types": ["vite/client"], 9 - "skipLibCheck": true, 10 - 11 - /* Bundler mode */ 12 - "moduleResolution": "bundler", 13 - "allowImportingTsExtensions": true, 14 - "verbatimModuleSyntax": true, 15 - "moduleDetection": "force", 16 - "noEmit": true, 17 - "jsx": "react-jsx", 18 - 19 - /* Linting */ 20 - "strict": true, 21 - "noUnusedLocals": true, 22 - "noUnusedParameters": true, 23 - "erasableSyntaxOnly": true, 24 - "noFallthroughCasesInSwitch": true, 25 - "noUncheckedSideEffectImports": true 26 - }, 27 - "include": ["src"] 28 - }
-7
templates/vanilla-react/tsconfig.json
··· 1 - { 2 - "files": [], 3 - "references": [ 4 - { "path": "./tsconfig.app.json" }, 5 - { "path": "./tsconfig.node.json" } 6 - ] 7 - }
-26
templates/vanilla-react/tsconfig.node.json
··· 1 - { 2 - "compilerOptions": { 3 - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", 4 - "target": "ES2023", 5 - "lib": ["ES2023"], 6 - "module": "ESNext", 7 - "types": ["node"], 8 - "skipLibCheck": true, 9 - 10 - /* Bundler mode */ 11 - "moduleResolution": "bundler", 12 - "allowImportingTsExtensions": true, 13 - "verbatimModuleSyntax": true, 14 - "moduleDetection": "force", 15 - "noEmit": true, 16 - 17 - /* Linting */ 18 - "strict": true, 19 - "noUnusedLocals": true, 20 - "noUnusedParameters": true, 21 - "erasableSyntaxOnly": true, 22 - "noFallthroughCasesInSwitch": true, 23 - "noUncheckedSideEffectImports": true 24 - }, 25 - "include": ["vite.config.ts"] 26 - }
-7
templates/vanilla-react/vite.config.ts
··· 1 - import react from "@vitejs/plugin-react"; 2 - import { defineConfig } from "vite"; 3 - 4 - // https://vite.dev/config/ 5 - export default defineConfig({ 6 - plugins: [react()], 7 - });
-1
tsconfig.json
··· 6 6 "esModuleInterop": true, 7 7 "strict": true, 8 8 "skipLibCheck": true, 9 - "outDir": "dist", 10 9 "noEmit": true 11 10 }, 12 11 "include": ["src", "__tests__"]
+9
tsdown.config.ts
··· 1 + import { defineConfig } from "tsdown" 2 + 3 + export default defineConfig({ 4 + entry: "src/index.ts", 5 + target: "node20", 6 + minify: true, 7 + inlineOnly: false, 8 + fixedExtension: false 9 + })