chore: Updated branch to 0.4.0
eb1c9537
5 file(s) · +195 −83
| 39 | 39 | ||
| 40 | 40 | # Bun |
|
| 41 | 41 | bun.lockb |
|
| 42 | + | .turbo |
| 2 | 2 | ||
| 3 | 3 |  |
|
| 4 | 4 | ||
| 5 | - | A full-stack TypeScript monorepo starter with shared types, using Bun, Hono, Vite, and React |
|
| 5 | + | A full-stack TypeScript monorepo starter with shared types, using Bun, Hono, Vite, and React. |
|
| 6 | 6 | ||
| 7 | 7 | ## Why bhvr? |
|
| 8 | 8 | ||
| 9 | - | While there are plenty of existing app building stacks out there, many of them are either bloated, outdated, or have too much of a vendor lock-in. bhvr is built with the opinion that you should be able to deploy your client or server in any environment while also keeping type saftey. |
|
| 9 | + | While there are plenty of existing app building stacks out there, many of them are either bloated, outdated, or have too much of a vendor lock-in. bhvr is built with the opinion that you should be able to deploy your client or server in any environment while also keeping type safety. |
|
| 10 | 10 | ||
| 11 | 11 | ## Features |
|
| 12 | 12 | ||
| 13 | 13 | - **Full-Stack TypeScript**: End-to-end type safety between client and server |
|
| 14 | 14 | - **Shared Types**: Common type definitions shared between client and server |
|
| 15 | - | - **Monorepo Structure**: Organized as a workspaces-based monorepo |
|
| 15 | + | - **Monorepo Structure**: Organized as a workspaces-based monorepo with Turbo for build orchestration |
|
| 16 | 16 | - **Modern Stack**: |
|
| 17 | - | - [Bun](https://bun.sh) as the JavaScript runtime |
|
| 17 | + | - [Bun](https://bun.sh) as the JavaScript runtime and package manager |
|
| 18 | 18 | - [Hono](https://hono.dev) as the backend framework |
|
| 19 | 19 | - [Vite](https://vitejs.dev) for frontend bundling |
|
| 20 | 20 | - [React](https://react.dev) for the frontend UI |
|
| 21 | + | - [Turbo](https://turbo.build) for monorepo build orchestration and caching |
|
| 21 | 22 | ||
| 22 | 23 | ## Project Structure |
|
| 23 | 24 | ||
| 27 | 28 | ├── server/ # Hono backend |
|
| 28 | 29 | ├── shared/ # Shared TypeScript definitions |
|
| 29 | 30 | │ └── src/types/ # Type definitions used by both client and server |
|
| 30 | - | └── package.json # Root package.json with workspaces |
|
| 31 | + | ├── package.json # Root package.json with workspaces |
|
| 32 | + | └── turbo.json # Turbo configuration for build orchestration |
|
| 31 | 33 | ``` |
|
| 32 | 34 | ||
| 33 | 35 | ### Server |
|
| 34 | 36 | ||
| 35 | - | bhvr uses Hono as a backend API for it's simplicity and massive ecosystem of plugins. If you have ever used Express then it might feel familiar. Declaring routes and returning data is easy. |
|
| 37 | + | bhvr uses Hono as a backend API for its simplicity and massive ecosystem of plugins. If you have ever used Express then it might feel familiar. Declaring routes and returning data is easy. |
|
| 36 | 38 | ||
| 37 | 39 | ``` |
|
| 38 | 40 | server |
|
| 153 | 155 | ||
| 154 | 156 | ### Shared |
|
| 155 | 157 | ||
| 156 | - | The Shared package is used for anything you want to share between the Server and Client. This could be types or libraries that you use in both the enviorments. |
|
| 158 | + | The Shared package is used for anything you want to share between the Server and Client. This could be types or libraries that you use in both environments. |
|
| 157 | 159 | ||
| 158 | 160 | ``` |
|
| 159 | 161 | shared |
|
| 165 | 167 | └── tsconfig.json |
|
| 166 | 168 | ``` |
|
| 167 | 169 | ||
| 168 | - | Inside the `src/index.ts` we export any of our code from the folders so it's usabe in other parts of the monorepo |
|
| 170 | + | Inside the `src/index.ts` we export any of our code from the folders so it's usable in other parts of the monorepo |
|
| 169 | 171 | ||
| 170 | 172 | ```typescript |
|
| 171 | 173 | export * from "./types" |
|
| 197 | 199 | ### Development |
|
| 198 | 200 | ||
| 199 | 201 | ```bash |
|
| 200 | - | # Run shared types in watch mode, server, and client all at once |
|
| 202 | + | # Run all workspaces in development mode with Turbo |
|
| 201 | 203 | bun run dev |
|
| 202 | 204 | ||
| 203 | - | # Or run individual parts |
|
| 204 | - | bun run dev:shared # Watch and compile shared types |
|
| 205 | - | bun run dev:server # Run the Hono backend |
|
| 206 | - | bun run dev:client # Run the Vite dev server for React |
|
| 205 | + | # Or run individual workspaces directly |
|
| 206 | + | bun run dev:client # Run the Vite dev server for React |
|
| 207 | + | bun run dev:server # Run the Hono backend |
|
| 207 | 208 | ``` |
|
| 208 | 209 | ||
| 209 | 210 | ### Building |
|
| 210 | 211 | ||
| 211 | 212 | ```bash |
|
| 212 | - | # Build everything |
|
| 213 | + | # Build all workspaces with Turbo |
|
| 213 | 214 | bun run build |
|
| 214 | 215 | ||
| 215 | - | # Or build individual parts |
|
| 216 | - | bun run build:shared # Build the shared types package |
|
| 216 | + | # Or build individual workspaces directly |
|
| 217 | 217 | bun run build:client # Build the React frontend |
|
| 218 | + | bun run build:server # Build the Hono backend |
|
| 219 | + | ``` |
|
| 220 | + | ||
| 221 | + | ### Additional Commands |
|
| 222 | + | ||
| 223 | + | ```bash |
|
| 224 | + | # Lint all workspaces |
|
| 225 | + | bun run lint |
|
| 226 | + | ||
| 227 | + | # Type check all workspaces |
|
| 228 | + | bun run type-check |
|
| 229 | + | ||
| 230 | + | # Run tests across all workspaces |
|
| 231 | + | bun run test |
|
| 218 | 232 | ``` |
|
| 219 | 233 | ||
| 220 | 234 | ### Deployment |
|
| 237 | 251 | Types are automatically shared between the client and server thanks to the shared package and TypeScript path aliases. You can import them in your code using: |
|
| 238 | 252 | ||
| 239 | 253 | ```typescript |
|
| 240 | - | import { ApiResponse } from '@shared/types'; |
|
| 254 | + | import { ApiResponse } from 'shared/types'; |
|
| 241 | 255 | ``` |
|
| 242 | 256 | ||
| 243 | 257 | ## Learn More |
|
| 246 | 260 | - [Vite Documentation](https://vitejs.dev/guide/) |
|
| 247 | 261 | - [React Documentation](https://react.dev/learn) |
|
| 248 | 262 | - [Hono Documentation](https://hono.dev/docs) |
|
| 263 | + | - [Turbo Documentation](https://turbo.build/docs) |
|
| 249 | 264 | - [TypeScript Documentation](https://www.typescriptlang.org/docs/) |
|
| 5 | 5 | "name": "bhvr", |
|
| 6 | 6 | "devDependencies": { |
|
| 7 | 7 | "bun-types": "latest", |
|
| 8 | - | "concurrently": "^9.1.2", |
|
| 8 | + | "turbo": "^2.5.5", |
|
| 9 | 9 | }, |
|
| 10 | 10 | "peerDependencies": { |
|
| 11 | 11 | "typescript": "^5.7.3", |
|
| 52 | 52 | "name": "shared", |
|
| 53 | 53 | "version": "0.0.1", |
|
| 54 | 54 | "devDependencies": { |
|
| 55 | - | "typescript": "^5.2.2", |
|
| 55 | + | "typescript": "^5.8.3", |
|
| 56 | 56 | }, |
|
| 57 | 57 | }, |
|
| 58 | 58 | }, |
|
| 309 | 309 | ||
| 310 | 310 | "ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], |
|
| 311 | 311 | ||
| 312 | - | "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], |
|
| 313 | - | ||
| 314 | 312 | "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], |
|
| 315 | 313 | ||
| 316 | 314 | "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], |
|
| 334 | 332 | "chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="], |
|
| 335 | 333 | ||
| 336 | 334 | "client": ["client@workspace:client"], |
|
| 337 | - | ||
| 338 | - | "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], |
|
| 339 | 335 | ||
| 340 | 336 | "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], |
|
| 341 | 337 | ||
| 343 | 339 | ||
| 344 | 340 | "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], |
|
| 345 | 341 | ||
| 346 | - | "concurrently": ["concurrently@9.1.2", "", { "dependencies": { "chalk": "^4.1.2", "lodash": "^4.17.21", "rxjs": "^7.8.1", "shell-quote": "^1.8.1", "supports-color": "^8.1.1", "tree-kill": "^1.2.2", "yargs": "^17.7.2" }, "bin": { "concurrently": "dist/bin/concurrently.js", "conc": "dist/bin/concurrently.js" } }, "sha512-H9MWcoPsYddwbOGM6difjVwVZHl63nwMEwDJG/L7VGtuaJhb12h2caPG2tVPWs7emuYix252iGfqOyrz1GczTQ=="], |
|
| 347 | - | ||
| 348 | 342 | "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], |
|
| 349 | 343 | ||
| 350 | 344 | "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], |
|
| 358 | 352 | "detect-libc": ["detect-libc@2.0.4", "", {}, "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA=="], |
|
| 359 | 353 | ||
| 360 | 354 | "electron-to-chromium": ["electron-to-chromium@1.5.149", "", {}, "sha512-UyiO82eb9dVOx8YO3ajDf9jz2kKyt98DEITRdeLPstOEuTlLzDA4Gyq5K9he71TQziU5jUVu2OAu5N48HmQiyQ=="], |
|
| 361 | - | ||
| 362 | - | "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], |
|
| 363 | 355 | ||
| 364 | 356 | "enhanced-resolve": ["enhanced-resolve@5.18.1", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg=="], |
|
| 365 | 357 | ||
| 414 | 406 | "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], |
|
| 415 | 407 | ||
| 416 | 408 | "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], |
|
| 417 | - | ||
| 418 | - | "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], |
|
| 419 | 409 | ||
| 420 | 410 | "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], |
|
| 421 | 411 | ||
| 437 | 427 | ||
| 438 | 428 | "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], |
|
| 439 | 429 | ||
| 440 | - | "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], |
|
| 441 | - | ||
| 442 | 430 | "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], |
|
| 443 | 431 | ||
| 444 | 432 | "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], |
|
| 488 | 476 | "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.30.1", "", { "os": "win32", "cpu": "x64" }, "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg=="], |
|
| 489 | 477 | ||
| 490 | 478 | "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], |
|
| 491 | - | ||
| 492 | - | "lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], |
|
| 493 | 479 | ||
| 494 | 480 | "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], |
|
| 495 | 481 | ||
| 547 | 533 | ||
| 548 | 534 | "react-refresh": ["react-refresh@0.17.0", "", {}, "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ=="], |
|
| 549 | 535 | ||
| 550 | - | "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], |
|
| 551 | - | ||
| 552 | 536 | "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], |
|
| 553 | 537 | ||
| 554 | 538 | "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], |
|
| 557 | 541 | ||
| 558 | 542 | "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], |
|
| 559 | 543 | ||
| 560 | - | "rxjs": ["rxjs@7.8.2", "", { "dependencies": { "tslib": "^2.1.0" } }, "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA=="], |
|
| 561 | - | ||
| 562 | 544 | "scheduler": ["scheduler@0.26.0", "", {}, "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA=="], |
|
| 563 | 545 | ||
| 564 | 546 | "semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], |
|
| 571 | 553 | ||
| 572 | 554 | "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], |
|
| 573 | 555 | ||
| 574 | - | "shell-quote": ["shell-quote@1.8.2", "", {}, "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA=="], |
|
| 575 | - | ||
| 576 | 556 | "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], |
|
| 577 | - | ||
| 578 | - | "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], |
|
| 579 | - | ||
| 580 | - | "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], |
|
| 581 | 557 | ||
| 582 | 558 | "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], |
|
| 583 | 559 | ||
| 584 | - | "supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], |
|
| 560 | + | "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], |
|
| 585 | 561 | ||
| 586 | 562 | "tailwindcss": ["tailwindcss@4.1.10", "", {}, "sha512-P3nr6WkvKV/ONsTzj6Gb57sWPMX29EPNPopo7+FcpkQaNsrNpZ1pv8QmrYI2RqEKD7mlGqLnGovlcYnBK0IqUA=="], |
|
| 587 | 563 | ||
| 593 | 569 | ||
| 594 | 570 | "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], |
|
| 595 | 571 | ||
| 596 | - | "tree-kill": ["tree-kill@1.2.2", "", { "bin": { "tree-kill": "cli.js" } }, "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A=="], |
|
| 572 | + | "ts-api-utils": ["ts-api-utils@2.1.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ=="], |
|
| 573 | + | ||
| 574 | + | "turbo": ["turbo@2.5.5", "", { "optionalDependencies": { "turbo-darwin-64": "2.5.5", "turbo-darwin-arm64": "2.5.5", "turbo-linux-64": "2.5.5", "turbo-linux-arm64": "2.5.5", "turbo-windows-64": "2.5.5", "turbo-windows-arm64": "2.5.5" }, "bin": { "turbo": "bin/turbo" } }, "sha512-eZ7wI6KjtT1eBqCnh2JPXWNUAxtoxxfi6VdBdZFvil0ychCOTxbm7YLRBi1JSt7U3c+u3CLxpoPxLdvr/Npr3A=="], |
|
| 575 | + | ||
| 576 | + | "turbo-darwin-64": ["turbo-darwin-64@2.5.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-RYnTz49u4F5tDD2SUwwtlynABNBAfbyT2uU/brJcyh5k6lDLyNfYKdKmqd3K2ls4AaiALWrFKVSBsiVwhdFNzQ=="], |
|
| 597 | 577 | ||
| 598 | - | "ts-api-utils": ["ts-api-utils@2.1.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ=="], |
|
| 578 | + | "turbo-darwin-arm64": ["turbo-darwin-arm64@2.5.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Tk+ZeSNdBobZiMw9aFypQt0DlLsWSFWu1ymqsAdJLuPoAH05qCfYtRxE1pJuYHcJB5pqI+/HOxtJoQ40726Btw=="], |
|
| 599 | 579 | ||
| 600 | - | "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], |
|
| 580 | + | "turbo-linux-64": ["turbo-linux-64@2.5.5", "", { "os": "linux", "cpu": "x64" }, "sha512-2/XvMGykD7VgsvWesZZYIIVXMlgBcQy+ZAryjugoTcvJv8TZzSU/B1nShcA7IAjZ0q7OsZ45uP2cOb8EgKT30w=="], |
|
| 581 | + | ||
| 582 | + | "turbo-linux-arm64": ["turbo-linux-arm64@2.5.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-DW+8CjCjybu0d7TFm9dovTTVg1VRnlkZ1rceO4zqsaLrit3DgHnN4to4uwyuf9s2V/BwS3IYcRy+HG9BL596Iw=="], |
|
| 583 | + | ||
| 584 | + | "turbo-windows-64": ["turbo-windows-64@2.5.5", "", { "os": "win32", "cpu": "x64" }, "sha512-q5p1BOy8ChtSZfULuF1BhFMYIx6bevXu4fJ+TE/hyNfyHJIfjl90Z6jWdqAlyaFLmn99X/uw+7d6T/Y/dr5JwQ=="], |
|
| 585 | + | ||
| 586 | + | "turbo-windows-arm64": ["turbo-windows-arm64@2.5.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-AXbF1KmpHUq3PKQwddMGoKMYhHsy5t1YBQO8HZ04HLMR0rWv9adYlQ8kaeQJTko1Ay1anOBFTqaxfVOOsu7+1Q=="], |
|
| 601 | 587 | ||
| 602 | 588 | "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], |
|
| 603 | 589 | ||
| 617 | 603 | ||
| 618 | 604 | "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="], |
|
| 619 | 605 | ||
| 620 | - | "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], |
|
| 621 | - | ||
| 622 | - | "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], |
|
| 623 | - | ||
| 624 | 606 | "yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="], |
|
| 625 | - | ||
| 626 | - | "yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], |
|
| 627 | - | ||
| 628 | - | "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], |
|
| 629 | 607 | ||
| 630 | 608 | "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], |
|
| 631 | 609 | ||
| 674 | 652 | "@typescript-eslint/typescript-estree/semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], |
|
| 675 | 653 | ||
| 676 | 654 | "bun-types/@types/node": ["@types/node@22.15.3", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw=="], |
|
| 677 | - | ||
| 678 | - | "chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], |
|
| 679 | 655 | ||
| 680 | 656 | "client/typescript": ["typescript@5.7.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw=="], |
|
| 681 | 657 | ||
| 1 | 1 | { |
|
| 2 | - | "name": "bhvr", |
|
| 3 | - | "version": "0.3.1", |
|
| 4 | - | "description": "A monorepo template built with Bun, Hono, Vite, and React", |
|
| 5 | - | "author": "Steve Simkins", |
|
| 6 | - | "license": "MIT", |
|
| 7 | - | "homepage": "https://github.com/stevedylandev/bhvr", |
|
| 8 | - | "workspaces": ["./server", "./client", "./shared"], |
|
| 9 | - | "scripts": { |
|
| 10 | - | "dev:client": "cd client && bun run dev", |
|
| 11 | - | "dev:server": "cd server && bun run dev", |
|
| 12 | - | "dev:shared": "cd shared && bun run dev", |
|
| 13 | - | "dev": "concurrently \"bun run dev:shared\" \"bun run dev:server\" \"bun run dev:client\"", |
|
| 14 | - | "build:client": "cd client && bun run build", |
|
| 15 | - | "build:shared": "cd shared && bun run build", |
|
| 16 | - | "build:server": "cd server && bun run build", |
|
| 17 | - | "build": "bun run build:shared && bun run build:server && bun run build:client", |
|
| 18 | - | "postinstall": "bun run build:shared && bun run build:server" |
|
| 19 | - | }, |
|
| 20 | - | "keywords": ["bun", "hono", "react", "vite", "monorepo"], |
|
| 21 | - | "devDependencies": { |
|
| 22 | - | "bun-types": "latest", |
|
| 23 | - | "concurrently": "^9.1.2" |
|
| 24 | - | }, |
|
| 25 | - | "peerDependencies": { |
|
| 26 | - | "typescript": "^5.7.3" |
|
| 27 | - | } |
|
| 2 | + | "name": "bhvr", |
|
| 3 | + | "version": "0.4.0", |
|
| 4 | + | "description": "A monorepo template built with Bun, Hono, Vite, and React", |
|
| 5 | + | "author": "Steve Simkins", |
|
| 6 | + | "license": "MIT", |
|
| 7 | + | "homepage": "https://github.com/stevedylandev/bhvr", |
|
| 8 | + | "packageManager": "bun@1.2.4", |
|
| 9 | + | "workspaces": [ |
|
| 10 | + | "./server", |
|
| 11 | + | "./client", |
|
| 12 | + | "./shared" |
|
| 13 | + | ], |
|
| 14 | + | "scripts": { |
|
| 15 | + | "dev": "turbo dev", |
|
| 16 | + | "dev:client": "turbo dev --filter=client", |
|
| 17 | + | "dev:server": "turbo dev --filter=server", |
|
| 18 | + | "build": "turbo build", |
|
| 19 | + | "build:client": "turbo build --filter=client", |
|
| 20 | + | "build:server": "turbo build --filter=server", |
|
| 21 | + | "lint": "turbo lint", |
|
| 22 | + | "type-check": "turbo type-check", |
|
| 23 | + | "test": "turbo test", |
|
| 24 | + | "postinstall": "turbo build --filter=shared --filter=server" |
|
| 25 | + | }, |
|
| 26 | + | "keywords": [ |
|
| 27 | + | "bun", |
|
| 28 | + | "hono", |
|
| 29 | + | "react", |
|
| 30 | + | "vite", |
|
| 31 | + | "monorepo", |
|
| 32 | + | "turbo" |
|
| 33 | + | ], |
|
| 34 | + | "devDependencies": { |
|
| 35 | + | "bun-types": "latest", |
|
| 36 | + | "turbo": "^2.5.5" |
|
| 37 | + | }, |
|
| 38 | + | "peerDependencies": { |
|
| 39 | + | "typescript": "^5.7.3" |
|
| 40 | + | } |
|
| 28 | 41 | } |
| 1 | + | { |
|
| 2 | + | "$schema": "https://turbo.build/schema.json", |
|
| 3 | + | "ui": "tui", |
|
| 4 | + | "tasks": { |
|
| 5 | + | "build": { |
|
| 6 | + | "dependsOn": ["^build"], |
|
| 7 | + | "inputs": [ |
|
| 8 | + | "src/**/*.ts", |
|
| 9 | + | "src/**/*.tsx", |
|
| 10 | + | "src/**/*.js", |
|
| 11 | + | "src/**/*.jsx", |
|
| 12 | + | "src/**/*.json", |
|
| 13 | + | "tsconfig.json", |
|
| 14 | + | "tsconfig.*.json", |
|
| 15 | + | "vite.config.ts", |
|
| 16 | + | "package.json", |
|
| 17 | + | "bun.lock", |
|
| 18 | + | "eslint.config.js", |
|
| 19 | + | "index.html" |
|
| 20 | + | ], |
|
| 21 | + | "outputs": ["dist/**", "build/**", ".turbo/**"], |
|
| 22 | + | "env": ["NODE_ENV", "VITE_*"] |
|
| 23 | + | }, |
|
| 24 | + | "dev": { |
|
| 25 | + | "cache": false, |
|
| 26 | + | "persistent": true, |
|
| 27 | + | "inputs": [ |
|
| 28 | + | "src/**/*.ts", |
|
| 29 | + | "src/**/*.tsx", |
|
| 30 | + | "src/**/*.js", |
|
| 31 | + | "src/**/*.jsx", |
|
| 32 | + | "tsconfig.json", |
|
| 33 | + | "tsconfig.*.json", |
|
| 34 | + | "vite.config.ts", |
|
| 35 | + | "package.json" |
|
| 36 | + | ], |
|
| 37 | + | "env": ["NODE_ENV", "PORT", "VITE_*"] |
|
| 38 | + | }, |
|
| 39 | + | "lint": { |
|
| 40 | + | "dependsOn": ["^build"], |
|
| 41 | + | "inputs": [ |
|
| 42 | + | "src/**/*.ts", |
|
| 43 | + | "src/**/*.tsx", |
|
| 44 | + | "src/**/*.js", |
|
| 45 | + | "src/**/*.jsx", |
|
| 46 | + | "eslint.config.js", |
|
| 47 | + | ".eslintrc*", |
|
| 48 | + | "package.json", |
|
| 49 | + | "tsconfig.json", |
|
| 50 | + | "tsconfig.*.json" |
|
| 51 | + | ], |
|
| 52 | + | "outputs": [".eslintcache"], |
|
| 53 | + | "env": ["NODE_ENV"] |
|
| 54 | + | }, |
|
| 55 | + | "type-check": { |
|
| 56 | + | "dependsOn": ["^build"], |
|
| 57 | + | "inputs": [ |
|
| 58 | + | "src/**/*.ts", |
|
| 59 | + | "src/**/*.tsx", |
|
| 60 | + | "src/**/*.d.ts", |
|
| 61 | + | "tsconfig.json", |
|
| 62 | + | "tsconfig.*.json", |
|
| 63 | + | "package.json" |
|
| 64 | + | ], |
|
| 65 | + | "outputs": ["dist/**/*.d.ts", ".tsbuildinfo"], |
|
| 66 | + | "env": ["NODE_ENV"] |
|
| 67 | + | }, |
|
| 68 | + | "test": { |
|
| 69 | + | "dependsOn": ["^build"], |
|
| 70 | + | "inputs": [ |
|
| 71 | + | "src/**/*.ts", |
|
| 72 | + | "src/**/*.tsx", |
|
| 73 | + | "src/**/*.js", |
|
| 74 | + | "src/**/*.jsx", |
|
| 75 | + | "test/**/*.ts", |
|
| 76 | + | "test/**/*.tsx", |
|
| 77 | + | "test/**/*.js", |
|
| 78 | + | "test/**/*.jsx", |
|
| 79 | + | "__tests__/**/*.ts", |
|
| 80 | + | "__tests__/**/*.tsx", |
|
| 81 | + | "**/*.test.ts", |
|
| 82 | + | "**/*.test.tsx", |
|
| 83 | + | "**/*.spec.ts", |
|
| 84 | + | "**/*.spec.tsx", |
|
| 85 | + | "jest.config.*", |
|
| 86 | + | "vitest.config.*", |
|
| 87 | + | "package.json", |
|
| 88 | + | "tsconfig.json", |
|
| 89 | + | "tsconfig.*.json" |
|
| 90 | + | ], |
|
| 91 | + | "outputs": ["coverage/**", ".nyc_output/**", "test-results/**"], |
|
| 92 | + | "env": ["NODE_ENV", "CI"] |
|
| 93 | + | } |
|
| 94 | + | }, |
|
| 95 | + | "globalDependencies": [ |
|
| 96 | + | "**/.env", |
|
| 97 | + | "**/.env.*", |
|
| 98 | + | "**/.env.local", |
|
| 99 | + | "**/.env.*.local", |
|
| 100 | + | ".gitignore", |
|
| 101 | + | "turbo.json", |
|
| 102 | + | "package.json", |
|
| 103 | + | "bun.lock", |
|
| 104 | + | "tsconfig.json" |
|
| 105 | + | ], |
|
| 106 | + | "globalEnv": ["NODE_ENV", "CI", "TURBO_TOKEN", "TURBO_TEAM", "TURBO_REMOTE_ONLY"] |
|
| 107 | + | } |