diff --git a/README.md b/README.md
index 1649fd090f..500c40cda9 120000
--- a/README.md
+++ b/README.md
@@ -1 +1,150 @@
-./cli/README.md
\ No newline at end of file
+
+
+
+
+
+
+
+
+ create-t3-app
+
+
+
+ Interactive CLI to start a full-stack, typesafe Next.js app.
+
+
+
+ Get started with the T3 Stack by running npm create t3-app@latest
+
+
+
+
+[![PRs-Welcome][contribute-image]][contribute-url] [](https://t3.gg/discord) [![NPM version][npm-image]][npm-url]
+[![Downloads][downloads-image]][npm-url]
+
+
+
+
+
+
+
+
+
+
+ Watch Theo's overview on Youtube here
+
+
+## Table of contents
+
+- The T3 Stack
+- T3 Axioms
+- Getting Started
+- Community
+- Contributors
+
+The T3 Stack
+
+The _"T3 Stack"_ is a web development stack made by [Theo](https://twitter.com/t3dotgg) focused on **simplicity**, **modularity**, and **full-stack typesafety**. It consists of:
+
+- [Next.js](https://nextjs.org)
+- [tRPC](https://trpc.io)
+- [Tailwind CSS](https://tailwindcss.com)
+- [TypeScript](https://typescriptlang.org)
+- [Prisma](https://prisma.io)
+- [Drizzle](https://orm.drizzle.team)
+- [NextAuth.js](https://next-auth.js.org)
+
+### So... what is `create-t3-app`? A template?
+
+Kind of? `create-t3-app` is a CLI built by seasoned T3 Stack devs to streamline the setup of a modular T3 Stack app. This means each piece is optional, and the "template" is generated based on your specific needs.
+
+After countless projects and many years on this tech, we have lots of opinions and insights. We’ve done our best to encode them into this CLI.
+
+This is **NOT** an all-inclusive template. We **expect** you to bring your own libraries that solve the needs of **YOUR** application. While we don’t want to prescribe solutions to more specific problems like state management and deployment, we [do have some recommendations listed here](https://create.t3.gg/en/other-recs).
+
+
+### How does `create-t3-app` work under the hood?
+
+Check out this interactive walkthrough of the `create-t3-app` codebase on CodeCanvas [here](https://www.code-canvas.com/?session=unauthenticatedGithub&repo=create-t3-app&owner=t3-oss&branch=main&OnboardingTutorial=true).
+
+To refine existing dataflow simulation or create new ones, follow the quick tutorial [here](https://docs.code-canvas.com/updating-diagram).
+
+
+
+T3 Axioms
+
+We'll be frank - this is an _opinionated project_. We share a handful of core beliefs around building and we treat them as the basis for our decisions.
+
+### 1. Solve Problems
+
+It's easy to fall into the trap of "adding everything" - we explicitly _don't_ want to do that. Everything added to `create-t3-app` should solve a _specific_ problem that exists within the core technologies included. This means we **won't** add things like state libraries (`zustand`, `redux`) but we **will** add things like NextAuth.js and integrate Prisma and tRPC for you.
+
+### 2. Bleed Responsibly
+
+We love our bleeding edge tech. The amount of speed and, honestly, _fun_ that comes out of new shit is really cool. We think it's important to **bleed responsibly**, using riskier tech in the less risky parts. This means we **wouldn't** ⛔️ bet on risky new database tech (SQL is great!). But we **happily** ✅ bet on tRPC since it's just functions that are trivial to move off.
+
+### 3. Typesafety Isn't Optional
+
+The stated goal of `create-t3-app` is to provide the quickest way to start a new full-stack, typesafe web application. We take typesafety seriously in these parts as it improves our productivity and helps us ship fewer bugs. Any decision that compromises the typesafe nature of `create-t3-app` is a decision that should be made in a different project.
+
+Getting Started
+
+To scaffold an app using `create-t3-app`, run any of the following four commands and answer the command prompt questions:
+
+### npm
+
+```bash
+npm create t3-app@latest
+```
+
+### yarn
+
+```bash
+yarn create t3-app
+```
+
+### pnpm
+
+```bash
+pnpm create t3-app@latest
+```
+
+### bun
+
+```bash
+bun create t3-app@latest
+```
+
+For more advanced usage, check out the [CLI docs](https://create.t3.gg/en/installation).
+
+
+
+For help, discussion about best practices, or any other conversation that would benefit create-t3-app:
+
+[Join the T3 Discord Server](https://t3.gg/discord)
+
+Contributors
+
+We 💖 contributors! Feel free to contribute to this project but **please read the [Contributing Guidelines](CONTRIBUTING.md) before opening an issue or PR** so you understand the branching strategy and local development environment. We also welcome you to join our [Discord](https://discord.gg/tEAQjDseSX) community for either support or contributing guidance.
+
+
+
+
+
+
+
+
+ Made with contrib.rocks
+
+
+
+
+
+
+
+
+[downloads-image]: https://img.shields.io/npm/dm/create-t3-app?color=364fc7&logoColor=364fc7
+[npm-url]: https://www.npmjs.com/package/create-t3-app
+[npm-image]: https://img.shields.io/npm/v/create-t3-app?color=0b7285&logoColor=0b7285
+[contribute-url]: https://github.com/t3-oss/create-t3-app/blob/main/CONTRIBUTING.md
+[contribute-image]: https://img.shields.io/badge/PRs-welcome-blue.svg
diff --git a/create-t3-app.CodeCanvas b/create-t3-app.CodeCanvas
new file mode 100644
index 0000000000..fec30981dc
--- /dev/null
+++ b/create-t3-app.CodeCanvas
@@ -0,0 +1,8039 @@
+{
+ "drawioXML": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n",
+ "fileName": "create-t3-app.CodeCanvas",
+ "fileURL": "github",
+ "diagramTemplateVersion": 0.2,
+ "filePath": "create-t3-app.CodeCanvas",
+ "repoData": {
+ "cli": {
+ "path": "cli",
+ "fileName": "cli",
+ "cellName": "cli",
+ "cellId": "31605429-bdf9-44a1-9ce3-f7234ef99f87",
+ "visible": true,
+ "children": [
+ "cli/src",
+ "cli/template"
+ ]
+ },
+ "cli/src": {
+ "path": "cli/src",
+ "fileName": "src",
+ "cellName": "src",
+ "cellId": "2418c3df-0551-4276-94df-df1042ecbfa7",
+ "visible": true,
+ "parentCellId": "31605429-bdf9-44a1-9ce3-f7234ef99f87",
+ "children": [
+ "cli/src/cli",
+ "cli/src/index.ts",
+ "cli/src/helpers",
+ "cli/src/installers",
+ "cli/src/utils"
+ ]
+ },
+ "cli/src/cli": {
+ "path": "cli/src/cli",
+ "fileName": "cli",
+ "cellName": "cli",
+ "cellId": "e9074847-4446-478a-baf0-62f477e06210",
+ "visible": true,
+ "parentCellId": "2418c3df-0551-4276-94df-df1042ecbfa7",
+ "children": [
+ "cli/src/cli/index.ts"
+ ]
+ },
+ "cli/src/cli/index.ts": {
+ "path": "cli/src/cli/index.ts",
+ "fileName": "index.ts",
+ "cellName": "index.ts",
+ "cellId": "7922d5c7-279f-4886-817b-8dead6dd7e57",
+ "visible": true,
+ "parentCellId": "e9074847-4446-478a-baf0-62f477e06210",
+ "children": [
+ "cli/src/cli/index.ts-simstep-c82f2b28-fa9e-41fb-8e93-61e6a9af0dea",
+ "cli/src/cli/index.ts-simstep-a2412d9d-c686-4e24-b4fb-07a4c6a9c04f",
+ "cli/src/cli/index.ts-simstep-785ad8f9-622a-49df-a3c8-99427a713789",
+ "cli/src/cli/index.ts-simstep-b8de0499-94f5-445b-b8dd-e5161916a610",
+ "cli/src/cli/index.ts-simstep-ed556536-2301-47b9-b1cb-2897ea76367f"
+ ]
+ },
+ "cli/src/helpers": {
+ "path": "cli/src/helpers",
+ "fileName": "helpers",
+ "cellName": "helpers",
+ "cellId": "69671728-1902-4f50-b1a3-fd96f8df7d5c",
+ "visible": true,
+ "parentCellId": "2418c3df-0551-4276-94df-df1042ecbfa7",
+ "children": [
+ "cli/src/helpers/createProject.ts",
+ "cli/src/helpers/scaffoldProject.ts",
+ "cli/src/helpers/installPackages.ts",
+ "cli/src/helpers/installDependencies.ts",
+ "cli/src/helpers/selectBoilerplate.ts",
+ "cli/src/helpers/logNextSteps.ts"
+ ]
+ },
+ "cli/src/helpers/createProject.ts": {
+ "path": "cli/src/helpers/createProject.ts",
+ "fileName": "createProject.ts",
+ "cellName": "createProject.ts",
+ "cellId": "2bddd99c-0b89-4485-89a0-b9fceca09629",
+ "visible": true,
+ "parentCellId": "69671728-1902-4f50-b1a3-fd96f8df7d5c",
+ "children": [
+ "generated-edge-simstep-57592b50-189c-49e7-99c4-e552b6571ede-3bb18c1e-677c-4168-82b5-8cd08639202a",
+ "generated-edge-simstep-e3ddad10-985f-4486-8845-46cba5902c15-6652caa1-9833-47e3-a32d-fc6b6f77114b",
+ "generated-edge-simstep-bf50d88a-65ac-44e9-95c4-741af87395cd-e629999a-1fbb-41ab-8857-6beee22287ec",
+ "cli/src/helpers/createProject.ts-simstep-de4e966a-ceca-43fb-88b6-975128e1ab21",
+ "cli/src/helpers/createProject.ts-simstep-226a5291-4ded-4539-b9a6-1786a4cbe8ef",
+ "generated-edge-simstep-a420b1fc-f902-4c8c-8b96-3e1ce086385d-9cb9b456-7ea9-444f-a2f3-675e6738f009",
+ "generated-edge-simstep-8816c70f-8e0f-485d-bd6e-f7838aee8e2e-2c10e351-4c6e-44ec-a223-152dfc06d401",
+ "cli/src/helpers/createProject.ts-simstep-deb6f16f-4059-42b2-8b21-7a611e68ccfe",
+ "cli/src/helpers/createProject.ts-simstep-1b87a547-3c63-4cf1-b082-1739fd85dd23",
+ "generated-edge-simstep-1b0c5857-cc4c-4bc1-b486-a650a9f4602a-1c467c0d-7ed1-40fb-9705-5fde914f0ca7",
+ "generated-edge-simstep-ed9a8658-e1e1-4f93-84c2-9d960a6cff67-6c8f17a9-5963-420c-9402-840d3dddb818",
+ "generated-edge-simstep-102c831b-f8c7-4648-9abf-c6c0961003cc-9556efb9-e9ae-4b04-8a00-c3ec1a6bb9fe",
+ "generated-edge-simstep-aabc8b03-d6c1-46d6-8a6f-612225e43fc6-ddaec457-a32a-4ebf-84fe-34fc82b454a9",
+ "generated-edge-simstep-c7022225-1160-44e0-bc6a-7a3c076cf5d3-d3637476-912d-42dd-85a6-f525859e4fe2",
+ "generated-edge-simstep-c80be4b5-2e02-4b1c-9ec7-213c7c117084-c73f74a9-a2ca-43f6-a967-bd689163947b"
+ ]
+ },
+ "cli/src/helpers/installDependencies.ts": {
+ "path": "cli/src/helpers/installDependencies.ts",
+ "fileName": "installDependencies.ts",
+ "cellName": "installDependencies.ts",
+ "cellId": "4de5d69b-c4cb-448d-a7cd-50f9e8ff669e",
+ "visible": true,
+ "parentCellId": "69671728-1902-4f50-b1a3-fd96f8df7d5c",
+ "children": [
+ "cli/src/helpers/installDependencies.ts-simstep-5632f18c-a2ee-4cce-8878-4d77101dcf8b",
+ "cli/src/helpers/installDependencies.ts-simstep-214077d9-7358-47c7-853c-cda9ace97c92",
+ "generated-edge-simstep-67a10ecd-755e-434f-a6cc-2ddff5b8e5d2-7476e32e-da6c-4342-8100-1b1b7e2e75bf",
+ "generated-edge-simstep-78a9e025-78d1-4fc5-8a4f-c69cc030a8af-34563b08-0dc0-48b0-bd88-4831148c739a"
+ ]
+ },
+ "cli/src/helpers/installPackages.ts": {
+ "path": "cli/src/helpers/installPackages.ts",
+ "fileName": "installPackages.ts",
+ "cellName": "installPackages.ts",
+ "cellId": "4307f16d-417e-4e54-a372-62eb4617c708",
+ "visible": true,
+ "parentCellId": "69671728-1902-4f50-b1a3-fd96f8df7d5c",
+ "children": [
+ "cli/src/helpers/installPackages.ts-simstep-5e1d6b81-1e28-4b2b-9064-ea7fc94e61f6",
+ "cli/src/helpers/installPackages.ts-simstep-1c34f5ac-cb00-4e58-821f-042443cdf4a7",
+ "generated-edge-simstep-07489ec1-deeb-4c9b-8601-d0dfa0c5f840-668f1aab-854f-48b0-a3cb-541172daa2f3",
+ "cli/src/helpers/installPackages.ts-simstep-cd411957-0d57-4d15-8518-7950665d57a5",
+ "cli/src/helpers/installPackages.ts-simstep-f8f8c0f5-be96-4ad1-93e5-8f0f41dd8e21",
+ "generated-edge-simstep-21b92278-c756-4ae5-b7bb-ea4df3771fc2-f868866e-e79c-429a-a218-cab9e51702ad",
+ "generated-edge-simstep-51648cfc-115f-4017-a6da-4217c108546f-fb771c77-c75c-48ea-9bf3-b0d9957a4294"
+ ]
+ },
+ "cli/src/helpers/logNextSteps.ts": {
+ "path": "cli/src/helpers/logNextSteps.ts",
+ "fileName": "logNextSteps.ts",
+ "cellName": "logNextSteps.ts",
+ "cellId": "7f33bc88-de62-45a9-999b-087af8d18a6a",
+ "visible": true,
+ "parentCellId": "69671728-1902-4f50-b1a3-fd96f8df7d5c",
+ "children": [
+ "cli/src/helpers/logNextSteps.ts-simstep-6a5a33fd-1560-4978-a25f-2c79864c1b92"
+ ]
+ },
+ "cli/src/helpers/scaffoldProject.ts": {
+ "path": "cli/src/helpers/scaffoldProject.ts",
+ "fileName": "scaffoldProject.ts",
+ "cellName": "scaffoldProject.ts",
+ "cellId": "f8df5151-b83e-4adf-a708-7c34f24e0a77",
+ "visible": true,
+ "parentCellId": "69671728-1902-4f50-b1a3-fd96f8df7d5c",
+ "children": [
+ "cli/src/helpers/scaffoldProject.ts-simstep-78e2da4f-a478-4bb0-abfa-2d14fec158d2"
+ ]
+ },
+ "cli/src/helpers/selectBoilerplate.ts": {
+ "path": "cli/src/helpers/selectBoilerplate.ts",
+ "fileName": "selectBoilerplate.ts",
+ "cellName": "selectBoilerplate.ts",
+ "cellId": "deb9ac89-9f73-438c-a0c6-19e615cc4422",
+ "visible": true,
+ "parentCellId": "69671728-1902-4f50-b1a3-fd96f8df7d5c",
+ "children": [
+ "cli/src/helpers/selectBoilerplate.ts-simstep-a19527d6-389d-465f-ba7a-a53bdf97cd18",
+ "cli/src/helpers/selectBoilerplate.ts-simstep-7b8262b2-328c-45a8-9c08-a6e0e84cb48b",
+ "cli/src/helpers/selectBoilerplate.ts-simstep-76a15289-8c19-4b65-be3f-54d9b116435f",
+ "cli/src/helpers/selectBoilerplate.ts-simstep-a36df07d-a088-4a7e-bc05-53781cec063e",
+ "cli/src/helpers/selectBoilerplate.ts-simstep-c8e42310-6fc2-4d2f-8e18-ee1ed90b82ff",
+ "cli/src/helpers/selectBoilerplate.ts-simstep-0f872fc4-8d73-4e9f-86ea-626c12612df6",
+ "generated-edge-simstep-1cbd3b04-97d9-4f82-bcd9-3b2abc0b7fb5-044311d7-c689-4ea8-9d96-a54cd8841068",
+ "generated-edge-simstep-b25005da-7772-4400-b93b-8ec508e2086b-1baa420d-31bc-4b16-9439-60aba5caaa8e"
+ ]
+ },
+ "cli/src/index.ts": {
+ "path": "cli/src/index.ts",
+ "fileName": "index.ts",
+ "cellName": "index.ts",
+ "cellId": "a80e3f00-2d8f-40f0-9dbf-d127667352d0",
+ "visible": true,
+ "parentCellId": "2418c3df-0551-4276-94df-df1042ecbfa7",
+ "children": [
+ "cli/src/index.ts-simstep-6e30cae2-b5cf-4729-8d1f-96ffd1c3de37",
+ "cli/src/index.ts-simstep-450d6eab-4dd8-4235-9de3-b08fb19e2c9c",
+ "generated-edge-simstep-a0e547e6-8c7a-4490-a741-47cfee102a49-e74a89d5-0a22-4336-9142-a14c5710b030",
+ "generated-edge-simstep-51dbd74a-ae92-454c-b76a-1edb7e346373-6d99c4bc-1b14-46b3-ba1b-cef98725bdba",
+ "generated-edge-simstep-6d27c9dc-72ee-413a-b90e-44b5ae81fd8a-af3cc1e9-aa6d-460d-a266-55f81aaae0e9",
+ "generated-edge-simstep-0c85aa78-afd8-4ccf-b919-b3a28d4be75a-be363e16-6699-40b9-9cf7-ee3a0ccc1e86",
+ "cli/src/index.ts-simstep-6daed3eb-ef77-4da2-bbc1-f498c8a67973",
+ "cli/src/index.ts-simstep-da6033d7-7ac6-43b2-a168-afd8efcb7f57",
+ "generated-edge-simstep-50c7dbbb-b13f-4a72-b509-c04effb0fd95-dd760c03-aca2-4175-8cd8-892ff54db971",
+ "generated-edge-simstep-5b39d1cc-2edb-4656-93c5-8db21b153aa4-54cd3187-2dbf-44f2-8a6e-dcc25b555968",
+ "generated-edge-simstep-fad4fe20-944a-4288-9675-573e2ca083e7-1b961755-e761-4311-a9d4-fae811a27e79",
+ "generated-edge-simstep-85de4be2-3ba8-4835-810f-50c09cae1275-b5219509-efe1-420b-b691-c612e0d999ed",
+ "cli/src/index.ts-simstep-9ab207b6-0b57-479f-ad3f-d58f722734e7",
+ "generated-edge-simstep-54a61672-135c-4ae6-bf69-536f04fd2d38-78d664aa-7403-4bdc-b521-2ea19df1f71e",
+ "generated-edge-simstep-fbd331fe-dfde-4afd-9ef0-e4e76dc57ead-6f39bf6a-8045-4235-a201-0b8f9104e16b",
+ "generated-edge-simstep-a7eecbdd-b329-4b08-a19f-4404d4d96abb-212ff099-5d1d-42d6-93af-8e86be81c578"
+ ]
+ },
+ "cli/src/installers": {
+ "path": "cli/src/installers",
+ "fileName": "installers",
+ "cellName": "installers",
+ "cellId": "b7802ecf-b170-4bbb-b97c-9c22247eceab",
+ "visible": true,
+ "parentCellId": "2418c3df-0551-4276-94df-df1042ecbfa7",
+ "children": [
+ "cli/src/installers/index.ts",
+ "cli/src/installers/trpc.ts",
+ "cli/src/installers/prisma.ts",
+ "cli/src/installers/drizzle.ts",
+ "cli/src/installers/nextAuth.ts",
+ "cli/src/installers/tailwind.ts",
+ "cli/src/installers/eslint.ts",
+ "cli/src/installers/biome.ts",
+ "cli/src/installers/dependencyVersionMap.ts"
+ ]
+ },
+ "cli/src/installers/biome.ts": {
+ "path": "cli/src/installers/biome.ts",
+ "fileName": "biome.ts",
+ "cellName": "biome.ts",
+ "cellId": "fb892a07-32fc-4053-8412-49826abb19ed",
+ "visible": true,
+ "parentCellId": "b7802ecf-b170-4bbb-b97c-9c22247eceab",
+ "children": [
+ "cli/src/installers/biome.ts-simstep-b392ead7-48d0-41be-90fe-cf8ac8a3d478"
+ ]
+ },
+ "cli/src/installers/dependencyVersionMap.ts": {
+ "path": "cli/src/installers/dependencyVersionMap.ts",
+ "fileName": "dependencyVersionMap.ts",
+ "cellName": "dependencyVersionMap.ts",
+ "cellId": "ecb7668f-27f4-4280-b1d5-0d8d5e70e464",
+ "visible": true,
+ "parentCellId": "b7802ecf-b170-4bbb-b97c-9c22247eceab",
+ "children": [
+ "generated-edge-simstep-8a679c3e-95c6-48e5-9853-2bcfa82d1857-f61e7f51-acdf-4797-ad3a-acf4444f0683"
+ ]
+ },
+ "cli/src/installers/drizzle.ts": {
+ "path": "cli/src/installers/drizzle.ts",
+ "fileName": "drizzle.ts",
+ "cellName": "drizzle.ts",
+ "cellId": "83e7cf3a-e72c-4bef-b10f-4b0f2909ad38",
+ "visible": true,
+ "parentCellId": "b7802ecf-b170-4bbb-b97c-9c22247eceab",
+ "children": [
+ "cli/src/installers/drizzle.ts-simstep-3b58f7d6-97ee-4a76-be16-f88aac032bfb",
+ "cli/src/installers/drizzle.ts-simstep-cd03a6c2-7284-4536-83d4-d323dceb2c11",
+ "cli/src/installers/drizzle.ts-simstep-961c0c28-126c-479c-b722-bf21fe2dc6e2",
+ "generated-edge-simstep-c490940a-0f6e-4ee7-a482-f1e17e324133-febf3c47-20fd-414c-9cdd-b8549ab1eab5",
+ "generated-edge-simstep-50719bc2-46f9-487e-88b8-ad41079bfe44-269bf727-90b9-44f4-9989-eab3d4d9a873",
+ "generated-edge-simstep-9799f85f-6d01-4fbb-9eaf-02638b03e0bb-08e62a9b-8bcf-41fc-a4a9-d43c4f0faee4"
+ ]
+ },
+ "cli/src/installers/eslint.ts": {
+ "path": "cli/src/installers/eslint.ts",
+ "fileName": "eslint.ts",
+ "cellName": "eslint.ts",
+ "cellId": "6e9b1999-6a26-410b-836f-ef67d1761b14",
+ "visible": true,
+ "parentCellId": "b7802ecf-b170-4bbb-b97c-9c22247eceab",
+ "children": [
+ "cli/src/installers/eslint.ts-simstep-efe0bbeb-1987-4db2-833e-d9a8f25a1512"
+ ]
+ },
+ "cli/src/installers/index.ts": {
+ "path": "cli/src/installers/index.ts",
+ "fileName": "index.ts",
+ "cellName": "index.ts",
+ "cellId": "9d353c27-f968-4ddf-b513-4ea7e667a306",
+ "visible": true,
+ "parentCellId": "b7802ecf-b170-4bbb-b97c-9c22247eceab",
+ "children": [
+ "cli/src/installers/index.ts-simstep-511ebdf9-0ac2-4523-bdf8-df1afe4dd6f5",
+ "cli/src/installers/index.ts-simstep-1f66343c-581b-4ba0-bafa-16a289d49088",
+ "cli/src/installers/index.ts-simstep-346b226f-561f-4660-bba1-e73291a75963",
+ "cli/src/installers/index.ts-simstep-f70bea20-ed17-483b-a458-8a62176faca4",
+ "generated-edge-simstep-b54b26ac-dc82-4312-b041-95a820e16f2b-95d6db55-5b63-4fc0-95eb-93c5c639aae9",
+ "cli/src/installers/index.ts-simstep-3aeb4ed8-7a7f-468f-a434-36e4e70d0eb8",
+ "generated-edge-simstep-05969447-943d-4e11-a381-c4a05a82bd5a-aa7b2852-7dde-4f1c-b129-c13fdc7c3824",
+ "cli/src/installers/index.ts-simstep-eb535b49-789f-4236-aa09-71a1e3a02973",
+ "cli/src/installers/index.ts-simstep-230efbe1-de67-46ba-835a-d56e33d427e7"
+ ]
+ },
+ "cli/src/installers/nextAuth.ts": {
+ "path": "cli/src/installers/nextAuth.ts",
+ "fileName": "nextAuth.ts",
+ "cellName": "nextAuth.ts",
+ "cellId": "a4d0176d-eaec-4094-a1fd-bc289e6d7458",
+ "visible": true,
+ "parentCellId": "b7802ecf-b170-4bbb-b97c-9c22247eceab",
+ "children": [
+ "cli/src/installers/nextAuth.ts-simstep-979a587d-9993-4855-bae6-b2d84b9caa02",
+ "cli/src/installers/nextAuth.ts-simstep-447bee75-fc5a-460c-b086-c061d70f93e5",
+ "generated-edge-simstep-0429d8fa-ce25-4f7e-900b-de8ec92ace7a-04744038-130c-4ea9-8f53-f6c68669f405"
+ ]
+ },
+ "cli/src/installers/prisma.ts": {
+ "path": "cli/src/installers/prisma.ts",
+ "fileName": "prisma.ts",
+ "cellName": "prisma.ts",
+ "cellId": "12664725-8a7e-4347-afef-0c8594d77ca5",
+ "visible": true,
+ "parentCellId": "b7802ecf-b170-4bbb-b97c-9c22247eceab",
+ "children": [
+ "cli/src/installers/prisma.ts-simstep-317777e2-f59a-42a8-bf9e-d827f0aa36ae",
+ "cli/src/installers/prisma.ts-simstep-fb261ed9-b27e-4ed9-9e88-99ee06534683",
+ "cli/src/installers/prisma.ts-simstep-c2f097d0-d5d3-4ce8-8408-e2e422307943",
+ "generated-edge-simstep-6208ad0b-72fc-4115-9c0f-d529448857e6-a4e822e3-e854-4405-b97e-e07bbb1ea596",
+ "generated-edge-simstep-b73c412c-12b7-4c1b-b601-0928e398cc8a-ffe49cb0-254a-4f12-a363-7ae52f5914af",
+ "generated-edge-simstep-afe388f6-b4bd-4c9b-ade7-c17d71de973e-688fe894-cb7f-45cf-b5ef-c35d87e49563",
+ "generated-edge-simstep-1d282367-cb63-4ebd-b982-837a2ea6ae36-3ab3c030-71a6-4574-aaec-23ed12f5dbfb"
+ ]
+ },
+ "cli/src/installers/tailwind.ts": {
+ "path": "cli/src/installers/tailwind.ts",
+ "fileName": "tailwind.ts",
+ "cellName": "tailwind.ts",
+ "cellId": "3f075ef8-a98b-4758-8d4b-94a2a182207c",
+ "visible": true,
+ "parentCellId": "b7802ecf-b170-4bbb-b97c-9c22247eceab",
+ "children": [
+ "cli/src/installers/tailwind.ts-simstep-f4e2f662-5c25-456d-ba6f-37405b4aec9e",
+ "cli/src/installers/tailwind.ts-simstep-225b03ea-d22e-4ac3-b631-266e20f87981",
+ "generated-edge-simstep-41c1df93-5db2-40b1-b6d8-0ed94478c30d-17f5944c-678b-460c-89e1-c87861b9beb4"
+ ]
+ },
+ "cli/src/installers/trpc.ts": {
+ "path": "cli/src/installers/trpc.ts",
+ "fileName": "trpc.ts",
+ "cellName": "trpc.ts",
+ "cellId": "7499353d-8b6f-4564-958b-c303fd5d636f",
+ "visible": true,
+ "parentCellId": "b7802ecf-b170-4bbb-b97c-9c22247eceab",
+ "children": [
+ "cli/src/installers/trpc.ts-simstep-df6034f0-03ef-493b-b23c-3f54669bb024",
+ "cli/src/installers/trpc.ts-simstep-726591ad-6a96-4cd1-9f55-38d8cad8af59",
+ "generated-edge-simstep-7372cde8-0616-47af-a7fb-af2a173ff16c-56eb0fd1-14f4-46cd-85c7-a79d76f4c1b5",
+ "generated-edge-simstep-5b560bdb-ccad-41ed-8d97-a281de3ef122-0022c79d-28fa-404b-98dc-bdfb9dbc8948",
+ "cli/src/installers/trpc.ts-simstep-14ff0e0e-dfa1-4779-b5ea-48140ee16cec",
+ "generated-edge-simstep-f9d52577-4c0d-4800-805c-9b36ab0d95fa-10a59b71-51b3-4231-b7ba-1a746ce638a4",
+ "cli/src/installers/trpc.ts-simstep-eae59e61-d018-47f3-b9f8-b76895ca2ecb",
+ "cli/src/installers/trpc.ts-simstep-a8b5924d-279b-40e2-a085-1339e78a3f4e"
+ ]
+ },
+ "cli/src/utils": {
+ "path": "cli/src/utils",
+ "fileName": "utils",
+ "cellName": "utils",
+ "cellId": "137883e2-a261-4a57-881b-20809d2382c8",
+ "visible": true,
+ "parentCellId": "2418c3df-0551-4276-94df-df1042ecbfa7",
+ "children": [
+ "cli/src/utils/getUserPkgManager.ts",
+ "cli/src/utils/addPackageDependency.ts"
+ ]
+ },
+ "cli/src/utils/addPackageDependency.ts": {
+ "path": "cli/src/utils/addPackageDependency.ts",
+ "fileName": "addPackageDependency.ts",
+ "cellName": "addPackageDependency.ts",
+ "cellId": "fb4ff8f6-5c53-406c-a2a3-75c41e521f40",
+ "visible": true,
+ "parentCellId": "137883e2-a261-4a57-881b-20809d2382c8",
+ "children": [
+ "cli/src/utils/addPackageDependency.ts-simstep-9af6ffa7-cec2-43ad-a4c7-7164f9b0242d",
+ "cli/src/utils/addPackageDependency.ts-simstep-4ea89af2-88eb-42cc-bccb-06505b02e447"
+ ]
+ },
+ "cli/src/utils/getUserPkgManager.ts": {
+ "path": "cli/src/utils/getUserPkgManager.ts",
+ "fileName": "getUserPkgManager.ts",
+ "cellName": "getUserPkgManager.ts",
+ "cellId": "d64cc788-e508-4b60-a1d8-e1da88984f4a",
+ "visible": true,
+ "parentCellId": "137883e2-a261-4a57-881b-20809d2382c8",
+ "children": [
+ "cli/src/utils/getUserPkgManager.ts-simstep-3c4a30ab-61b2-4b44-9218-5f90989f2369"
+ ]
+ },
+ "cli/template": {
+ "path": "cli/template",
+ "fileName": "template",
+ "cellName": "template",
+ "cellId": "bea08117-7db8-426f-a7f4-21275af746e4",
+ "visible": true,
+ "parentCellId": "31605429-bdf9-44a1-9ce3-f7234ef99f87",
+ "children": [
+ "cli/template/extras",
+ "cli/template/base"
+ ]
+ },
+ "cli/template/base": {
+ "path": "cli/template/base",
+ "fileName": "base",
+ "cellName": "base",
+ "cellId": "bfe0e7d2-305f-4b5d-b78c-143f2bfcac79",
+ "visible": true,
+ "parentCellId": "bea08117-7db8-426f-a7f4-21275af746e4",
+ "children": [
+ "cli/template/base/next.config.js"
+ ]
+ },
+ "cli/template/base/next.config.js": {
+ "path": "cli/template/base/next.config.js",
+ "fileName": "next.config.js",
+ "cellName": "next.config.js",
+ "cellId": "925b1377-df5c-41eb-ab8b-39e2904f4e22",
+ "visible": true,
+ "parentCellId": "bfe0e7d2-305f-4b5d-b78c-143f2bfcac79",
+ "children": [
+ "cli/template/base/next.config.js-simstep-f0726e75-4342-4219-9fa9-7e1cc28d4914",
+ "generated-edge-simstep-f5a74f03-5919-4501-ac85-e18bf5239991-d967f8d4-2bc9-4aca-8aa2-60b07ff53d79"
+ ]
+ },
+ "cli/template/extras": {
+ "path": "cli/template/extras",
+ "fileName": "extras",
+ "cellName": "extras",
+ "cellId": "90b826ad-9d87-4883-9239-7dae6d3ee954",
+ "visible": true,
+ "parentCellId": "bea08117-7db8-426f-a7f4-21275af746e4",
+ "children": [
+ "cli/template/extras/src"
+ ]
+ },
+ "cli/template/extras/src": {
+ "path": "cli/template/extras/src",
+ "fileName": "src",
+ "cellName": "src",
+ "cellId": "7dc18668-256e-49aa-a3a2-ae908b99e905",
+ "visible": true,
+ "parentCellId": "90b826ad-9d87-4883-9239-7dae6d3ee954",
+ "children": [
+ "cli/template/extras/src/utils",
+ "cli/template/extras/src/pages",
+ "cli/template/extras/src/server",
+ "cli/template/extras/src/app",
+ "cli/template/extras/src/env"
+ ]
+ },
+ "cli/template/extras/src/app": {
+ "path": "cli/template/extras/src/app",
+ "fileName": "app",
+ "cellName": "app",
+ "cellId": "d6547a47-309b-4534-8e66-f936d12dea95",
+ "visible": true,
+ "parentCellId": "7dc18668-256e-49aa-a3a2-ae908b99e905",
+ "children": [
+ "cli/template/extras/src/app/layout"
+ ]
+ },
+ "cli/template/extras/src/app/layout": {
+ "path": "cli/template/extras/src/app/layout",
+ "fileName": "layout",
+ "cellName": "layout",
+ "cellId": "a6964640-b50d-411b-af0c-80eaa4cdc92d",
+ "visible": true,
+ "parentCellId": "d6547a47-309b-4534-8e66-f936d12dea95",
+ "children": [
+ "cli/template/extras/src/app/layout/with-tw.tsx"
+ ]
+ },
+ "cli/template/extras/src/app/layout/with-tw.tsx": {
+ "path": "cli/template/extras/src/app/layout/with-tw.tsx",
+ "fileName": "with-tw.tsx",
+ "cellName": "with-tw.tsx",
+ "cellId": "fc78da08-029f-4a37-a622-5ff9893d410d",
+ "visible": true,
+ "parentCellId": "a6964640-b50d-411b-af0c-80eaa4cdc92d",
+ "children": [
+ "cli/template/extras/src/app/layout/with-tw.tsx-simstep-d1ea5566-24b0-4e05-83c1-5e53d955af65",
+ "generated-edge-simstep-e1eaf756-84cc-4353-b4c9-2ec7d2341daf-91018bf2-c3a6-4e0e-9f80-2c8927737a79"
+ ]
+ },
+ "cli/template/extras/src/env": {
+ "path": "cli/template/extras/src/env",
+ "fileName": "env",
+ "cellName": "env",
+ "cellId": "1f42fc8a-35ee-4a36-917a-3e9c0c1efc91",
+ "visible": true,
+ "parentCellId": "7dc18668-256e-49aa-a3a2-ae908b99e905",
+ "children": [
+ "cli/template/extras/src/env/with-auth-db.js"
+ ]
+ },
+ "cli/template/extras/src/env/with-auth-db.js": {
+ "path": "cli/template/extras/src/env/with-auth-db.js",
+ "fileName": "with-auth-db.js",
+ "cellName": "with-auth-db.js",
+ "cellId": "3302a04d-006f-4785-b626-9391d518cf3f",
+ "visible": true,
+ "parentCellId": "1f42fc8a-35ee-4a36-917a-3e9c0c1efc91",
+ "children": [
+ "cli/template/extras/src/env/with-auth-db.js-simstep-30310d69-af01-45ec-a7c9-4767069522c4",
+ "cli/template/extras/src/env/with-auth-db.js-simstep-1ad8e0a5-03e7-4e39-a101-22f70c5cde1d",
+ "cli/template/extras/src/env/with-auth-db.js-simstep-bb5e9d39-c67d-4141-b580-a68cc53b3133",
+ "generated-edge-simstep-edd00467-1311-425b-b84d-699f80742beb-e975592b-9351-498c-a7f3-eeaa6de5940e",
+ "generated-edge-simstep-b850604a-0b78-4c69-807e-e1b78828f719-19753747-2d54-43f4-b583-6130fdb0dea8"
+ ]
+ },
+ "cli/template/extras/src/pages": {
+ "path": "cli/template/extras/src/pages",
+ "fileName": "pages",
+ "cellName": "pages",
+ "cellId": "328a9527-b008-42ad-bee2-19bdd850a5ff",
+ "visible": true,
+ "parentCellId": "7dc18668-256e-49aa-a3a2-ae908b99e905",
+ "children": [
+ "cli/template/extras/src/pages/api",
+ "cli/template/extras/src/pages/index"
+ ]
+ },
+ "cli/template/extras/src/pages/api": {
+ "path": "cli/template/extras/src/pages/api",
+ "fileName": "api",
+ "cellName": "api",
+ "cellId": "fb283e3a-3cd1-416a-b9a9-17547875ccea",
+ "visible": true,
+ "parentCellId": "328a9527-b008-42ad-bee2-19bdd850a5ff",
+ "children": [
+ "cli/template/extras/src/pages/api/trpc"
+ ]
+ },
+ "cli/template/extras/src/pages/api/trpc": {
+ "path": "cli/template/extras/src/pages/api/trpc",
+ "fileName": "trpc",
+ "cellName": "trpc",
+ "cellId": "e354cf7f-e516-4146-aa96-930d168ebb80",
+ "visible": true,
+ "parentCellId": "fb283e3a-3cd1-416a-b9a9-17547875ccea",
+ "children": [
+ "cli/template/extras/src/pages/api/trpc/[trpc].ts"
+ ]
+ },
+ "cli/template/extras/src/pages/api/trpc/[trpc].ts": {
+ "path": "cli/template/extras/src/pages/api/trpc/[trpc].ts",
+ "fileName": "[trpc].ts",
+ "cellName": "[trpc].ts",
+ "cellId": "c4144223-d4a5-4a03-a052-6d8b8c069811",
+ "visible": true,
+ "parentCellId": "e354cf7f-e516-4146-aa96-930d168ebb80",
+ "children": [
+ "cli/template/extras/src/pages/api/trpc/[trpc].ts-simstep-6d61c17d-1600-490e-93bf-44e3fa112e6a",
+ "generated-edge-simstep-63a9ac0b-3e97-44af-bd1f-ea530ff5a387-a4f6f418-7263-4543-8117-3c13247d23c1"
+ ]
+ },
+ "cli/template/extras/src/pages/index": {
+ "path": "cli/template/extras/src/pages/index",
+ "fileName": "index",
+ "cellName": "index",
+ "cellId": "3e55e39b-63e0-4faf-8574-b36b1ec90270",
+ "visible": true,
+ "parentCellId": "328a9527-b008-42ad-bee2-19bdd850a5ff",
+ "children": [
+ "cli/template/extras/src/pages/index/with-auth-trpc-tw.tsx"
+ ]
+ },
+ "cli/template/extras/src/pages/index/with-auth-trpc-tw.tsx": {
+ "path": "cli/template/extras/src/pages/index/with-auth-trpc-tw.tsx",
+ "fileName": "with-auth-trpc-tw.tsx",
+ "cellName": "with-auth-trpc-tw.tsx",
+ "cellId": "e79c6989-0648-4465-be78-8d16d8b2b2b8",
+ "visible": true,
+ "parentCellId": "3e55e39b-63e0-4faf-8574-b36b1ec90270",
+ "children": [
+ "cli/template/extras/src/pages/index/with-auth-trpc-tw.tsx-simstep-1621d9a7-9cba-4d68-9d62-fa20a7f13dc7",
+ "cli/template/extras/src/pages/index/with-auth-trpc-tw.tsx-simstep-6bad09b8-afb0-407e-8ffe-05d7c4b6e50a",
+ "cli/template/extras/src/pages/index/with-auth-trpc-tw.tsx-simstep-f6138753-dab0-4fbf-ab35-638ab9d27900",
+ "generated-edge-simstep-f2f8c5e1-844d-4c6e-97e1-cd6c6f93b4d0-0fb31c20-8330-40f8-9f79-7e3abf0744f4",
+ "generated-edge-simstep-6057145f-d6b7-41ed-ba18-24c74dde34a6-7f821db3-2427-4e78-8ad1-92542cf827ab"
+ ]
+ },
+ "cli/template/extras/src/server": {
+ "path": "cli/template/extras/src/server",
+ "fileName": "server",
+ "cellName": "server",
+ "cellId": "e70555d3-bf43-4b87-a620-c69507123ad5",
+ "visible": true,
+ "parentCellId": "7dc18668-256e-49aa-a3a2-ae908b99e905",
+ "children": [
+ "cli/template/extras/src/server/api",
+ "cli/template/extras/src/server/auth"
+ ]
+ },
+ "cli/template/extras/src/server/api": {
+ "path": "cli/template/extras/src/server/api",
+ "fileName": "api",
+ "cellName": "api",
+ "cellId": "b89c4d01-a3a5-464a-b911-ea775e99b290",
+ "visible": true,
+ "parentCellId": "e70555d3-bf43-4b87-a620-c69507123ad5",
+ "children": [
+ "cli/template/extras/src/server/api/root.ts",
+ "cli/template/extras/src/server/api/routers",
+ "cli/template/extras/src/server/api/trpc-pages",
+ "cli/template/extras/src/server/api/trpc-app"
+ ]
+ },
+ "cli/template/extras/src/server/api/root.ts": {
+ "path": "cli/template/extras/src/server/api/root.ts",
+ "fileName": "root.ts",
+ "cellName": "root.ts",
+ "cellId": "41854670-0a03-48c9-b465-ada6f72f52c7",
+ "visible": true,
+ "parentCellId": "b89c4d01-a3a5-464a-b911-ea775e99b290",
+ "children": [
+ "cli/template/extras/src/server/api/root.ts-simstep-104d7bb5-81af-4d61-9a57-185d94f9e28c"
+ ]
+ },
+ "cli/template/extras/src/server/api/routers": {
+ "path": "cli/template/extras/src/server/api/routers",
+ "fileName": "routers",
+ "cellName": "routers",
+ "cellId": "4df51ef7-ea96-46ac-a375-02a310597c8c",
+ "visible": true,
+ "parentCellId": "b89c4d01-a3a5-464a-b911-ea775e99b290",
+ "children": [
+ "cli/template/extras/src/server/api/routers/post"
+ ]
+ },
+ "cli/template/extras/src/server/api/routers/post": {
+ "path": "cli/template/extras/src/server/api/routers/post",
+ "fileName": "post",
+ "cellName": "post",
+ "cellId": "06ebab93-5008-47de-b800-a998caa6bc8f",
+ "visible": true,
+ "parentCellId": "4df51ef7-ea96-46ac-a375-02a310597c8c",
+ "children": [
+ "cli/template/extras/src/server/api/routers/post/base.ts",
+ "cli/template/extras/src/server/api/routers/post/with-auth-prisma.ts"
+ ]
+ },
+ "cli/template/extras/src/server/api/routers/post/base.ts": {
+ "path": "cli/template/extras/src/server/api/routers/post/base.ts",
+ "fileName": "base.ts",
+ "cellName": "base.ts",
+ "cellId": "049018d1-9cd5-4439-aa03-389402c14188",
+ "visible": true,
+ "parentCellId": "06ebab93-5008-47de-b800-a998caa6bc8f",
+ "children": [
+ "cli/template/extras/src/server/api/routers/post/base.ts-simstep-572e0d05-9d88-4a24-8e4d-2c7154d2f1d2",
+ "generated-edge-simstep-e5dea768-b741-4f24-bf2b-16986d6f7dc3-3ff84179-22ea-406d-933e-6bf88e387d33"
+ ]
+ },
+ "cli/template/extras/src/server/api/routers/post/with-auth-prisma.ts": {
+ "path": "cli/template/extras/src/server/api/routers/post/with-auth-prisma.ts",
+ "fileName": "with-auth-prisma.ts",
+ "cellName": "with-auth-prisma.ts",
+ "cellId": "fcd69b1a-c154-4875-87cb-8d9e44da639b",
+ "visible": true,
+ "parentCellId": "06ebab93-5008-47de-b800-a998caa6bc8f",
+ "children": [
+ "cli/template/extras/src/server/api/routers/post/with-auth-prisma.ts-simstep-4499ec8c-9843-4f07-8954-f027e8c6e149",
+ "generated-edge-simstep-6983d3db-c70c-44fc-a4a5-af42d2a00121-a5eefd48-f544-4ee6-a06d-68cc973d32f8"
+ ]
+ },
+ "cli/template/extras/src/server/api/trpc-app": {
+ "path": "cli/template/extras/src/server/api/trpc-app",
+ "fileName": "trpc-app",
+ "cellName": "trpc-app",
+ "cellId": "801eaefc-abfc-4ef8-afb1-657cc5748a73",
+ "visible": true,
+ "parentCellId": "b89c4d01-a3a5-464a-b911-ea775e99b290",
+ "children": [
+ "cli/template/extras/src/server/api/trpc-app/with-auth-db.ts"
+ ]
+ },
+ "cli/template/extras/src/server/api/trpc-app/with-auth-db.ts": {
+ "path": "cli/template/extras/src/server/api/trpc-app/with-auth-db.ts",
+ "fileName": "with-auth-db.ts",
+ "cellName": "with-auth-db.ts",
+ "cellId": "719262a2-cfc8-4f23-a9b2-8f714af0be6d",
+ "visible": true,
+ "parentCellId": "801eaefc-abfc-4ef8-afb1-657cc5748a73",
+ "children": [
+ "cli/template/extras/src/server/api/trpc-app/with-auth-db.ts-simstep-a685579d-061d-4396-a2d7-a4af2ea6de50",
+ "generated-edge-simstep-661f19d8-ac62-4c14-9dea-92b5deff0f51-a1232a9e-ee54-4d7a-b352-d2bd842a0ab0"
+ ]
+ },
+ "cli/template/extras/src/server/api/trpc-pages": {
+ "path": "cli/template/extras/src/server/api/trpc-pages",
+ "fileName": "trpc-pages",
+ "cellName": "trpc-pages",
+ "cellId": "73af1400-460a-4e47-b82d-0558dc7fc9b8",
+ "visible": true,
+ "parentCellId": "b89c4d01-a3a5-464a-b911-ea775e99b290",
+ "children": [
+ "cli/template/extras/src/server/api/trpc-pages/base.ts"
+ ]
+ },
+ "cli/template/extras/src/server/api/trpc-pages/base.ts": {
+ "path": "cli/template/extras/src/server/api/trpc-pages/base.ts",
+ "fileName": "base.ts",
+ "cellName": "base.ts",
+ "cellId": "ceb3e5b8-b6ec-42a3-89f6-d242ba0eb807",
+ "visible": true,
+ "parentCellId": "73af1400-460a-4e47-b82d-0558dc7fc9b8",
+ "children": [
+ "generated-edge-simstep-ad46482b-c53d-45e1-96f2-f7d8faa598c5-a9910f9c-4e1a-41cc-bc6b-8a0c78d2233c"
+ ]
+ },
+ "cli/template/extras/src/server/auth": {
+ "path": "cli/template/extras/src/server/auth",
+ "fileName": "auth",
+ "cellName": "auth",
+ "cellId": "792e645f-92d1-44a5-a99c-92b9031dcd9e",
+ "visible": true,
+ "parentCellId": "e70555d3-bf43-4b87-a620-c69507123ad5",
+ "children": [
+ "cli/template/extras/src/server/auth/index.ts",
+ "cli/template/extras/src/server/auth/config"
+ ]
+ },
+ "cli/template/extras/src/server/auth/config": {
+ "path": "cli/template/extras/src/server/auth/config",
+ "fileName": "config",
+ "cellName": "config",
+ "cellId": "1d2f1942-d500-44a2-a52f-67ec7559531c",
+ "visible": true,
+ "parentCellId": "792e645f-92d1-44a5-a99c-92b9031dcd9e",
+ "children": [
+ "cli/template/extras/src/server/auth/config/with-prisma.ts"
+ ]
+ },
+ "cli/template/extras/src/server/auth/config/with-prisma.ts": {
+ "path": "cli/template/extras/src/server/auth/config/with-prisma.ts",
+ "fileName": "with-prisma.ts",
+ "cellName": "with-prisma.ts",
+ "cellId": "02db1526-2589-4801-bcde-e60df7e323e8",
+ "visible": true,
+ "parentCellId": "1d2f1942-d500-44a2-a52f-67ec7559531c",
+ "children": [
+ "cli/template/extras/src/server/auth/config/with-prisma.ts-simstep-a015b59c-1f2a-4c21-bb5c-b980f96161d5",
+ "generated-edge-simstep-7fef5ad7-0bb9-4f49-b833-a920d5c212b2-6f54ede3-90b5-4528-885a-ff9380a3ee96"
+ ]
+ },
+ "cli/template/extras/src/server/auth/index.ts": {
+ "path": "cli/template/extras/src/server/auth/index.ts",
+ "fileName": "index.ts",
+ "cellName": "index.ts",
+ "cellId": "efab3eee-f940-4181-92ab-d80a278f8c0a",
+ "visible": true,
+ "parentCellId": "792e645f-92d1-44a5-a99c-92b9031dcd9e",
+ "children": [
+ "generated-edge-simstep-addf4232-963a-4700-af13-3a04cc8d5b3c-bd686086-86a5-4f00-ae4b-978fa6ce76f2"
+ ]
+ },
+ "cli/template/extras/src/utils": {
+ "path": "cli/template/extras/src/utils",
+ "fileName": "utils",
+ "cellName": "utils",
+ "cellId": "0c96cab6-da7e-4692-a9c6-043135dacc20",
+ "visible": true,
+ "parentCellId": "7dc18668-256e-49aa-a3a2-ae908b99e905",
+ "children": [
+ "cli/template/extras/src/utils/api.ts"
+ ]
+ },
+ "cli/template/extras/src/utils/api.ts": {
+ "path": "cli/template/extras/src/utils/api.ts",
+ "fileName": "api.ts",
+ "cellName": "api.ts",
+ "cellId": "2c8bc2ed-571c-4e77-9057-03af51d3a848",
+ "visible": true,
+ "parentCellId": "0c96cab6-da7e-4692-a9c6-043135dacc20",
+ "children": [
+ "cli/template/extras/src/utils/api.ts-simstep-465d6958-6428-42f6-8b48-a42a83f5fab7",
+ "cli/template/extras/src/utils/api.ts-simstep-329d6e8f-a16e-4be8-a0ce-7680767495a6",
+ "generated-edge-simstep-9cd6ffb8-20af-4fe2-a7eb-e02ee5297e40-14c2b71d-5ce2-4d42-87ce-a7084009adbe"
+ ]
+ },
+ "31605429-bdf9-44a1-9ce3-f7234ef99f87": {
+ "path": "31605429-bdf9-44a1-9ce3-f7234ef99f87",
+ "cellName": "cli",
+ "cellId": "31605429-bdf9-44a1-9ce3-f7234ef99f87",
+ "visible": true
+ },
+ "2418c3df-0551-4276-94df-df1042ecbfa7": {
+ "path": "2418c3df-0551-4276-94df-df1042ecbfa7",
+ "cellName": "src",
+ "cellId": "2418c3df-0551-4276-94df-df1042ecbfa7",
+ "visible": true,
+ "parentCellId": "31605429-bdf9-44a1-9ce3-f7234ef99f87"
+ },
+ "e9074847-4446-478a-baf0-62f477e06210": {
+ "path": "e9074847-4446-478a-baf0-62f477e06210",
+ "cellName": "cli",
+ "cellId": "e9074847-4446-478a-baf0-62f477e06210",
+ "visible": true,
+ "parentCellId": "2418c3df-0551-4276-94df-df1042ecbfa7"
+ },
+ "a80e3f00-2d8f-40f0-9dbf-d127667352d0": {
+ "path": "a80e3f00-2d8f-40f0-9dbf-d127667352d0",
+ "cellName": "index.ts",
+ "cellId": "a80e3f00-2d8f-40f0-9dbf-d127667352d0",
+ "visible": true,
+ "parentCellId": "2418c3df-0551-4276-94df-df1042ecbfa7"
+ },
+ "69671728-1902-4f50-b1a3-fd96f8df7d5c": {
+ "path": "69671728-1902-4f50-b1a3-fd96f8df7d5c",
+ "cellName": "helpers",
+ "cellId": "69671728-1902-4f50-b1a3-fd96f8df7d5c",
+ "visible": true,
+ "parentCellId": "2418c3df-0551-4276-94df-df1042ecbfa7"
+ },
+ "7922d5c7-279f-4886-817b-8dead6dd7e57": {
+ "path": "7922d5c7-279f-4886-817b-8dead6dd7e57",
+ "cellName": "index.ts",
+ "cellId": "7922d5c7-279f-4886-817b-8dead6dd7e57",
+ "visible": true,
+ "parentCellId": "e9074847-4446-478a-baf0-62f477e06210"
+ },
+ "2bddd99c-0b89-4485-89a0-b9fceca09629": {
+ "path": "2bddd99c-0b89-4485-89a0-b9fceca09629",
+ "cellName": "createProject.ts",
+ "cellId": "2bddd99c-0b89-4485-89a0-b9fceca09629",
+ "visible": true,
+ "parentCellId": "69671728-1902-4f50-b1a3-fd96f8df7d5c"
+ },
+ "f8df5151-b83e-4adf-a708-7c34f24e0a77": {
+ "path": "f8df5151-b83e-4adf-a708-7c34f24e0a77",
+ "cellName": "scaffoldProject.ts",
+ "cellId": "f8df5151-b83e-4adf-a708-7c34f24e0a77",
+ "visible": true,
+ "parentCellId": "69671728-1902-4f50-b1a3-fd96f8df7d5c"
+ },
+ "4307f16d-417e-4e54-a372-62eb4617c708": {
+ "path": "4307f16d-417e-4e54-a372-62eb4617c708",
+ "cellName": "installPackages.ts",
+ "cellId": "4307f16d-417e-4e54-a372-62eb4617c708",
+ "visible": true,
+ "parentCellId": "69671728-1902-4f50-b1a3-fd96f8df7d5c"
+ },
+ "4de5d69b-c4cb-448d-a7cd-50f9e8ff669e": {
+ "path": "4de5d69b-c4cb-448d-a7cd-50f9e8ff669e",
+ "cellName": "installDependencies.ts",
+ "cellId": "4de5d69b-c4cb-448d-a7cd-50f9e8ff669e",
+ "visible": true,
+ "parentCellId": "69671728-1902-4f50-b1a3-fd96f8df7d5c"
+ },
+ "a90d624d-9ce8-414f-8e39-b692c00dee75": {
+ "path": "a90d624d-9ce8-414f-8e39-b692c00dee75",
+ "cellName": "Start CLI and Gather User Input - index.ts:L78-437",
+ "cellId": "a90d624d-9ce8-414f-8e39-b692c00dee75",
+ "visible": true,
+ "parentCellId": "7922d5c7-279f-4886-817b-8dead6dd7e57"
+ },
+ "cli/src/cli/index.ts-simstep-c82f2b28-fa9e-41fb-8e93-61e6a9af0dea": {
+ "path": "cli/src/cli/index.ts-simstep-c82f2b28-fa9e-41fb-8e93-61e6a9af0dea",
+ "fileName": "index.ts",
+ "wiki": "The process is initiated by running `create-t3-app`. The `runCli` function is called, which uses `commander` to parse command-line arguments and `@clack/prompts` to interactively ask the user for project details like the app name, desired packages (Tailwind, tRPC, Prisma, etc.), and other configuration options if not running in non-interactive mode.",
+ "cellName": "Start CLI and Gather User Input - index.ts:L78-437",
+ "cellId": "a90d624d-9ce8-414f-8e39-b692c00dee75",
+ "visible": true,
+ "startLine": 78,
+ "endLine": 437,
+ "parentCellId": "7922d5c7-279f-4886-817b-8dead6dd7e57",
+ "parentPath": "cli/src/cli/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Scaffold a modular, full-stack, typesafe Next.js application",
+ "simStepId": "c82f2b28-fa9e-41fb-8e93-61e6a9af0dea"
+ }
+ ]
+ },
+ "aece8619-9225-43f4-9bbc-3a1d357e92ec": {
+ "path": "aece8619-9225-43f4-9bbc-3a1d357e92ec",
+ "cellName": "Initiate Project Creation - index.ts:L51-59",
+ "cellId": "aece8619-9225-43f4-9bbc-3a1d357e92ec",
+ "visible": true,
+ "parentCellId": "a80e3f00-2d8f-40f0-9dbf-d127667352d0"
+ },
+ "cli/src/index.ts-simstep-6e30cae2-b5cf-4729-8d1f-96ffd1c3de37": {
+ "path": "cli/src/index.ts-simstep-6e30cae2-b5cf-4729-8d1f-96ffd1c3de37",
+ "fileName": "index.ts",
+ "wiki": "The `main` function receives the user's configuration and calls the `createProject` helper function to begin the scaffolding process.",
+ "cellName": "Initiate Project Creation - index.ts:L51-59",
+ "cellId": "aece8619-9225-43f4-9bbc-3a1d357e92ec",
+ "visible": true,
+ "startLine": 51,
+ "endLine": 59,
+ "parentCellId": "a80e3f00-2d8f-40f0-9dbf-d127667352d0",
+ "parentPath": "cli/src/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Scaffold a modular, full-stack, typesafe Next.js application",
+ "simStepId": "6e30cae2-b5cf-4729-8d1f-96ffd1c3de37"
+ }
+ ]
+ },
+ "97d9b337-79da-4a0f-bc33-2e650b6b8907": {
+ "path": "97d9b337-79da-4a0f-bc33-2e650b6b8907",
+ "cellName": "Copy Base Template Files - scaffoldProject.ts:L87-91",
+ "cellId": "97d9b337-79da-4a0f-bc33-2e650b6b8907",
+ "visible": true,
+ "parentCellId": "f8df5151-b83e-4adf-a708-7c34f24e0a77"
+ },
+ "cli/src/helpers/scaffoldProject.ts-simstep-78e2da4f-a478-4bb0-abfa-2d14fec158d2": {
+ "path": "cli/src/helpers/scaffoldProject.ts-simstep-78e2da4f-a478-4bb0-abfa-2d14fec158d2",
+ "fileName": "scaffoldProject.ts",
+ "wiki": "The `scaffoldProject` function copies the base Next.js application template from the `cli/template/base` directory into the newly created project directory. It also handles renaming files like `_gitignore` to `.gitignore`.",
+ "cellName": "Copy Base Template Files - scaffoldProject.ts:L87-91",
+ "cellId": "97d9b337-79da-4a0f-bc33-2e650b6b8907",
+ "visible": true,
+ "startLine": 87,
+ "endLine": 91,
+ "parentCellId": "f8df5151-b83e-4adf-a708-7c34f24e0a77",
+ "parentPath": "cli/src/helpers/scaffoldProject.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Scaffold a modular, full-stack, typesafe Next.js application",
+ "simStepId": "78e2da4f-a478-4bb0-abfa-2d14fec158d2"
+ }
+ ]
+ },
+ "5a6e3a15-4346-4fcb-9487-26a98cb7d087": {
+ "path": "5a6e3a15-4346-4fcb-9487-26a98cb7d087",
+ "cellName": "Install Additional Features - installPackages.ts:L10-19",
+ "cellId": "5a6e3a15-4346-4fcb-9487-26a98cb7d087",
+ "visible": true,
+ "parentCellId": "4307f16d-417e-4e54-a372-62eb4617c708"
+ },
+ "cli/src/helpers/installPackages.ts-simstep-5e1d6b81-1e28-4b2b-9064-ea7fc94e61f6": {
+ "path": "cli/src/helpers/installPackages.ts-simstep-5e1d6b81-1e28-4b2b-9064-ea7fc94e61f6",
+ "fileName": "installPackages.ts",
+ "wiki": "The `installPackages` function iterates through the user's selected packages. For each package, it executes a corresponding installer function which copies additional files from `cli/template/extras` and adds necessary dependencies to the project's `package.json`.",
+ "cellName": "Install Additional Features - installPackages.ts:L10-19",
+ "cellId": "5a6e3a15-4346-4fcb-9487-26a98cb7d087",
+ "visible": true,
+ "startLine": 10,
+ "endLine": 19,
+ "parentCellId": "4307f16d-417e-4e54-a372-62eb4617c708",
+ "parentPath": "cli/src/helpers/installPackages.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Scaffold a modular, full-stack, typesafe Next.js application",
+ "simStepId": "5e1d6b81-1e28-4b2b-9064-ea7fc94e61f6"
+ }
+ ]
+ },
+ "f70a59b8-7bc3-494a-a081-aab050376354": {
+ "path": "f70a59b8-7bc3-494a-a081-aab050376354",
+ "cellName": "Initialize Git Repository - index.ts:L102-104",
+ "cellId": "f70a59b8-7bc3-494a-a081-aab050376354",
+ "visible": true,
+ "parentCellId": "a80e3f00-2d8f-40f0-9dbf-d127667352d0"
+ },
+ "cli/src/index.ts-simstep-450d6eab-4dd8-4235-9de3-b08fb19e2c9c": {
+ "path": "cli/src/index.ts-simstep-450d6eab-4dd8-4235-9de3-b08fb19e2c9c",
+ "fileName": "index.ts",
+ "wiki": "If not disabled with the `--noGit` flag, the `main` function calls the `initializeGit` helper. This function runs `git init`, stages all the newly created files, and makes an initial commit.",
+ "cellName": "Initialize Git Repository - index.ts:L102-104",
+ "cellId": "f70a59b8-7bc3-494a-a081-aab050376354",
+ "visible": true,
+ "startLine": 102,
+ "endLine": 104,
+ "parentCellId": "a80e3f00-2d8f-40f0-9dbf-d127667352d0",
+ "parentPath": "cli/src/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Scaffold a modular, full-stack, typesafe Next.js application",
+ "simStepId": "450d6eab-4dd8-4235-9de3-b08fb19e2c9c"
+ }
+ ]
+ },
+ "4fb6f557-f734-4005-be8b-0fc091135184": {
+ "path": "4fb6f557-f734-4005-be8b-0fc091135184",
+ "cellName": "Run Package Manager Install - installDependencies.ts:L9-14",
+ "cellId": "4fb6f557-f734-4005-be8b-0fc091135184",
+ "visible": true,
+ "parentCellId": "4de5d69b-c4cb-448d-a7cd-50f9e8ff669e"
+ },
+ "cli/src/helpers/installDependencies.ts-simstep-5632f18c-a2ee-4cce-8878-4d77101dcf8b": {
+ "path": "cli/src/helpers/installDependencies.ts-simstep-5632f18c-a2ee-4cce-8878-4d77101dcf8b",
+ "fileName": "installDependencies.ts",
+ "wiki": "The `installDependencies` function determines the user's package manager and executes the corresponding install command (e.g., `pnpm install`) as a child process within the new project's directory.",
+ "cellName": "Run Package Manager Install - installDependencies.ts:L9-14",
+ "cellId": "4fb6f557-f734-4005-be8b-0fc091135184",
+ "visible": true,
+ "startLine": 9,
+ "endLine": 14,
+ "parentCellId": "4de5d69b-c4cb-448d-a7cd-50f9e8ff669e",
+ "parentPath": "cli/src/helpers/installDependencies.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Scaffold a modular, full-stack, typesafe Next.js application",
+ "simStepId": "5632f18c-a2ee-4cce-8878-4d77101dcf8b"
+ }
+ ]
+ },
+ "e74a89d5-0a22-4336-9142-a14c5710b030": {
+ "path": "e74a89d5-0a22-4336-9142-a14c5710b030",
+ "cellName": "Return User\nConfiguration",
+ "cellId": "e74a89d5-0a22-4336-9142-a14c5710b030",
+ "visible": true,
+ "parentCellId": "2418c3df-0551-4276-94df-df1042ecbfa7"
+ },
+ "generated-edge-simstep-a0e547e6-8c7a-4490-a741-47cfee102a49-e74a89d5-0a22-4336-9142-a14c5710b030": {
+ "path": "generated-edge-simstep-a0e547e6-8c7a-4490-a741-47cfee102a49-e74a89d5-0a22-4336-9142-a14c5710b030",
+ "fileName": "index.ts",
+ "cellName": "Return User Configuration",
+ "cellId": "e74a89d5-0a22-4336-9142-a14c5710b030",
+ "visible": true,
+ "startLine": 39,
+ "endLine": 44,
+ "parentCellId": "a80e3f00-2d8f-40f0-9dbf-d127667352d0",
+ "parentPath": "cli/src/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Scaffold a modular, full-stack, typesafe Next.js application",
+ "simStepId": "a0e547e6-8c7a-4490-a741-47cfee102a49"
+ }
+ ]
+ },
+ "3bb18c1e-677c-4168-82b5-8cd08639202a": {
+ "path": "3bb18c1e-677c-4168-82b5-8cd08639202a",
+ "cellName": "Invoke Project\nScaffolder",
+ "cellId": "3bb18c1e-677c-4168-82b5-8cd08639202a",
+ "visible": true,
+ "parentCellId": "2418c3df-0551-4276-94df-df1042ecbfa7"
+ },
+ "generated-edge-simstep-57592b50-189c-49e7-99c4-e552b6571ede-3bb18c1e-677c-4168-82b5-8cd08639202a": {
+ "path": "generated-edge-simstep-57592b50-189c-49e7-99c4-e552b6571ede-3bb18c1e-677c-4168-82b5-8cd08639202a",
+ "fileName": "createProject.ts",
+ "cellName": "Invoke Project Scaffolder",
+ "cellId": "3bb18c1e-677c-4168-82b5-8cd08639202a",
+ "visible": true,
+ "startLine": 41,
+ "endLine": 49,
+ "parentCellId": "2bddd99c-0b89-4485-89a0-b9fceca09629",
+ "parentPath": "cli/src/helpers/createProject.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Scaffold a modular, full-stack, typesafe Next.js application",
+ "simStepId": "57592b50-189c-49e7-99c4-e552b6571ede"
+ }
+ ]
+ },
+ "6652caa1-9833-47e3-a32d-fc6b6f77114b": {
+ "path": "6652caa1-9833-47e3-a32d-fc6b6f77114b",
+ "cellName": "Invoke Package\nInstallers",
+ "cellId": "6652caa1-9833-47e3-a32d-fc6b6f77114b",
+ "visible": true,
+ "parentCellId": "69671728-1902-4f50-b1a3-fd96f8df7d5c"
+ },
+ "generated-edge-simstep-e3ddad10-985f-4486-8845-46cba5902c15-6652caa1-9833-47e3-a32d-fc6b6f77114b": {
+ "path": "generated-edge-simstep-e3ddad10-985f-4486-8845-46cba5902c15-6652caa1-9833-47e3-a32d-fc6b6f77114b",
+ "fileName": "createProject.ts",
+ "cellName": "Invoke Package Installers",
+ "cellId": "6652caa1-9833-47e3-a32d-fc6b6f77114b",
+ "visible": true,
+ "startLine": 52,
+ "endLine": 60,
+ "parentCellId": "2bddd99c-0b89-4485-89a0-b9fceca09629",
+ "parentPath": "cli/src/helpers/createProject.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Scaffold a modular, full-stack, typesafe Next.js application",
+ "simStepId": "e3ddad10-985f-4486-8845-46cba5902c15"
+ }
+ ]
+ },
+ "6d99c4bc-1b14-46b3-ba1b-cef98725bdba": {
+ "path": "6d99c4bc-1b14-46b3-ba1b-cef98725bdba",
+ "cellName": "Return Project\nPath",
+ "cellId": "6d99c4bc-1b14-46b3-ba1b-cef98725bdba",
+ "visible": true,
+ "parentCellId": "2418c3df-0551-4276-94df-df1042ecbfa7"
+ },
+ "generated-edge-simstep-51dbd74a-ae92-454c-b76a-1edb7e346373-6d99c4bc-1b14-46b3-ba1b-cef98725bdba": {
+ "path": "generated-edge-simstep-51dbd74a-ae92-454c-b76a-1edb7e346373-6d99c4bc-1b14-46b3-ba1b-cef98725bdba",
+ "fileName": "index.ts",
+ "cellName": "Return Project Path",
+ "cellId": "6d99c4bc-1b14-46b3-ba1b-cef98725bdba",
+ "visible": true,
+ "startLine": 51,
+ "endLine": 51,
+ "parentCellId": "a80e3f00-2d8f-40f0-9dbf-d127667352d0",
+ "parentPath": "cli/src/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Scaffold a modular, full-stack, typesafe Next.js application",
+ "simStepId": "51dbd74a-ae92-454c-b76a-1edb7e346373"
+ }
+ ]
+ },
+ "af3cc1e9-aa6d-460d-a266-55f81aaae0e9": {
+ "path": "af3cc1e9-aa6d-460d-a266-55f81aaae0e9",
+ "cellName": "Trigger Dependency\nInstallation",
+ "cellId": "af3cc1e9-aa6d-460d-a266-55f81aaae0e9",
+ "visible": true,
+ "parentCellId": "2418c3df-0551-4276-94df-df1042ecbfa7"
+ },
+ "generated-edge-simstep-6d27c9dc-72ee-413a-b90e-44b5ae81fd8a-af3cc1e9-aa6d-460d-a266-55f81aaae0e9": {
+ "path": "generated-edge-simstep-6d27c9dc-72ee-413a-b90e-44b5ae81fd8a-af3cc1e9-aa6d-460d-a266-55f81aaae0e9",
+ "fileName": "index.ts",
+ "cellName": "Trigger Dependency Installation",
+ "cellId": "af3cc1e9-aa6d-460d-a266-55f81aaae0e9",
+ "visible": true,
+ "startLine": 85,
+ "endLine": 87,
+ "parentCellId": "a80e3f00-2d8f-40f0-9dbf-d127667352d0",
+ "parentPath": "cli/src/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Scaffold a modular, full-stack, typesafe Next.js application",
+ "simStepId": "6d27c9dc-72ee-413a-b90e-44b5ae81fd8a"
+ }
+ ]
+ },
+ "bea08117-7db8-426f-a7f4-21275af746e4": {
+ "path": "bea08117-7db8-426f-a7f4-21275af746e4",
+ "cellName": "template",
+ "cellId": "bea08117-7db8-426f-a7f4-21275af746e4",
+ "visible": true,
+ "parentCellId": "31605429-bdf9-44a1-9ce3-f7234ef99f87"
+ },
+ "b7802ecf-b170-4bbb-b97c-9c22247eceab": {
+ "path": "b7802ecf-b170-4bbb-b97c-9c22247eceab",
+ "cellName": "installers",
+ "cellId": "b7802ecf-b170-4bbb-b97c-9c22247eceab",
+ "visible": true,
+ "parentCellId": "2418c3df-0551-4276-94df-df1042ecbfa7"
+ },
+ "90b826ad-9d87-4883-9239-7dae6d3ee954": {
+ "path": "90b826ad-9d87-4883-9239-7dae6d3ee954",
+ "cellName": "extras",
+ "cellId": "90b826ad-9d87-4883-9239-7dae6d3ee954",
+ "visible": true,
+ "parentCellId": "bea08117-7db8-426f-a7f4-21275af746e4"
+ },
+ "9d353c27-f968-4ddf-b513-4ea7e667a306": {
+ "path": "9d353c27-f968-4ddf-b513-4ea7e667a306",
+ "cellName": "index.ts",
+ "cellId": "9d353c27-f968-4ddf-b513-4ea7e667a306",
+ "visible": true,
+ "parentCellId": "b7802ecf-b170-4bbb-b97c-9c22247eceab"
+ },
+ "7499353d-8b6f-4564-958b-c303fd5d636f": {
+ "path": "7499353d-8b6f-4564-958b-c303fd5d636f",
+ "cellName": "trpc.ts",
+ "cellId": "7499353d-8b6f-4564-958b-c303fd5d636f",
+ "visible": true,
+ "parentCellId": "b7802ecf-b170-4bbb-b97c-9c22247eceab"
+ },
+ "deb9ac89-9f73-438c-a0c6-19e615cc4422": {
+ "path": "deb9ac89-9f73-438c-a0c6-19e615cc4422",
+ "cellName": "selectBoilerplate.ts",
+ "cellId": "deb9ac89-9f73-438c-a0c6-19e615cc4422",
+ "visible": true,
+ "parentCellId": "69671728-1902-4f50-b1a3-fd96f8df7d5c"
+ },
+ "7dc18668-256e-49aa-a3a2-ae908b99e905": {
+ "path": "7dc18668-256e-49aa-a3a2-ae908b99e905",
+ "cellName": "src",
+ "cellId": "7dc18668-256e-49aa-a3a2-ae908b99e905",
+ "visible": true,
+ "parentCellId": "90b826ad-9d87-4883-9239-7dae6d3ee954"
+ },
+ "0c96cab6-da7e-4692-a9c6-043135dacc20": {
+ "path": "0c96cab6-da7e-4692-a9c6-043135dacc20",
+ "cellName": "utils",
+ "cellId": "0c96cab6-da7e-4692-a9c6-043135dacc20",
+ "visible": true,
+ "parentCellId": "7dc18668-256e-49aa-a3a2-ae908b99e905"
+ },
+ "328a9527-b008-42ad-bee2-19bdd850a5ff": {
+ "path": "328a9527-b008-42ad-bee2-19bdd850a5ff",
+ "cellName": "pages",
+ "cellId": "328a9527-b008-42ad-bee2-19bdd850a5ff",
+ "visible": true,
+ "parentCellId": "7dc18668-256e-49aa-a3a2-ae908b99e905"
+ },
+ "e70555d3-bf43-4b87-a620-c69507123ad5": {
+ "path": "e70555d3-bf43-4b87-a620-c69507123ad5",
+ "cellName": "server",
+ "cellId": "e70555d3-bf43-4b87-a620-c69507123ad5",
+ "visible": true,
+ "parentCellId": "7dc18668-256e-49aa-a3a2-ae908b99e905"
+ },
+ "2c8bc2ed-571c-4e77-9057-03af51d3a848": {
+ "path": "2c8bc2ed-571c-4e77-9057-03af51d3a848",
+ "cellName": "api.ts",
+ "cellId": "2c8bc2ed-571c-4e77-9057-03af51d3a848",
+ "visible": true,
+ "parentCellId": "0c96cab6-da7e-4692-a9c6-043135dacc20"
+ },
+ "fb283e3a-3cd1-416a-b9a9-17547875ccea": {
+ "path": "fb283e3a-3cd1-416a-b9a9-17547875ccea",
+ "cellName": "api",
+ "cellId": "fb283e3a-3cd1-416a-b9a9-17547875ccea",
+ "visible": true,
+ "parentCellId": "328a9527-b008-42ad-bee2-19bdd850a5ff"
+ },
+ "b89c4d01-a3a5-464a-b911-ea775e99b290": {
+ "path": "b89c4d01-a3a5-464a-b911-ea775e99b290",
+ "cellName": "api",
+ "cellId": "b89c4d01-a3a5-464a-b911-ea775e99b290",
+ "visible": true,
+ "parentCellId": "e70555d3-bf43-4b87-a620-c69507123ad5"
+ },
+ "e354cf7f-e516-4146-aa96-930d168ebb80": {
+ "path": "e354cf7f-e516-4146-aa96-930d168ebb80",
+ "cellName": "trpc",
+ "cellId": "e354cf7f-e516-4146-aa96-930d168ebb80",
+ "visible": true,
+ "parentCellId": "fb283e3a-3cd1-416a-b9a9-17547875ccea"
+ },
+ "41854670-0a03-48c9-b465-ada6f72f52c7": {
+ "path": "41854670-0a03-48c9-b465-ada6f72f52c7",
+ "cellName": "root.ts",
+ "cellId": "41854670-0a03-48c9-b465-ada6f72f52c7",
+ "visible": true,
+ "parentCellId": "b89c4d01-a3a5-464a-b911-ea775e99b290"
+ },
+ "4df51ef7-ea96-46ac-a375-02a310597c8c": {
+ "path": "4df51ef7-ea96-46ac-a375-02a310597c8c",
+ "cellName": "routers",
+ "cellId": "4df51ef7-ea96-46ac-a375-02a310597c8c",
+ "visible": true,
+ "parentCellId": "b89c4d01-a3a5-464a-b911-ea775e99b290"
+ },
+ "73af1400-460a-4e47-b82d-0558dc7fc9b8": {
+ "path": "73af1400-460a-4e47-b82d-0558dc7fc9b8",
+ "cellName": "trpc-pages",
+ "cellId": "73af1400-460a-4e47-b82d-0558dc7fc9b8",
+ "visible": true,
+ "parentCellId": "b89c4d01-a3a5-464a-b911-ea775e99b290"
+ },
+ "c4144223-d4a5-4a03-a052-6d8b8c069811": {
+ "path": "c4144223-d4a5-4a03-a052-6d8b8c069811",
+ "cellName": "[trpc].ts",
+ "cellId": "c4144223-d4a5-4a03-a052-6d8b8c069811",
+ "visible": true,
+ "parentCellId": "e354cf7f-e516-4146-aa96-930d168ebb80"
+ },
+ "06ebab93-5008-47de-b800-a998caa6bc8f": {
+ "path": "06ebab93-5008-47de-b800-a998caa6bc8f",
+ "cellName": "post",
+ "cellId": "06ebab93-5008-47de-b800-a998caa6bc8f",
+ "visible": true,
+ "parentCellId": "4df51ef7-ea96-46ac-a375-02a310597c8c"
+ },
+ "ceb3e5b8-b6ec-42a3-89f6-d242ba0eb807": {
+ "path": "ceb3e5b8-b6ec-42a3-89f6-d242ba0eb807",
+ "cellName": "base.ts",
+ "cellId": "ceb3e5b8-b6ec-42a3-89f6-d242ba0eb807",
+ "visible": true,
+ "parentCellId": "73af1400-460a-4e47-b82d-0558dc7fc9b8"
+ },
+ "049018d1-9cd5-4439-aa03-389402c14188": {
+ "path": "049018d1-9cd5-4439-aa03-389402c14188",
+ "cellName": "base.ts",
+ "cellId": "049018d1-9cd5-4439-aa03-389402c14188",
+ "visible": true,
+ "parentCellId": "06ebab93-5008-47de-b800-a998caa6bc8f"
+ },
+ "f225fee0-7abf-45ca-86df-3578947e92f4": {
+ "path": "f225fee0-7abf-45ca-86df-3578947e92f4",
+ "cellName": "Flow 1 - Scaffolding: User Selects tRPC - index.ts:L292-296",
+ "cellId": "f225fee0-7abf-45ca-86df-3578947e92f4",
+ "visible": true,
+ "parentCellId": "7922d5c7-279f-4886-817b-8dead6dd7e57"
+ },
+ "cli/src/cli/index.ts-simstep-a2412d9d-c686-4e24-b4fb-07a4c6a9c04f": {
+ "path": "cli/src/cli/index.ts-simstep-a2412d9d-c686-4e24-b4fb-07a4c6a9c04f",
+ "fileName": "index.ts",
+ "wiki": "The user runs `create-t3-app` and, when prompted, chooses to include tRPC in their project setup. This selection is a key input for the scaffolding process.",
+ "cellName": "Flow 1 - Scaffolding: User Selects tRPC - index.ts:L292-296",
+ "cellId": "f225fee0-7abf-45ca-86df-3578947e92f4",
+ "visible": true,
+ "startLine": 292,
+ "endLine": 296,
+ "parentCellId": "7922d5c7-279f-4886-817b-8dead6dd7e57",
+ "parentPath": "cli/src/cli/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Integrate tRPC for end-to-end typesafe API development",
+ "simStepId": "a2412d9d-c686-4e24-b4fb-07a4c6a9c04f"
+ }
+ ]
+ },
+ "8d5b9775-bdfb-4aa0-80ee-62c40bdb9edd": {
+ "path": "8d5b9775-bdfb-4aa0-80ee-62c40bdb9edd",
+ "cellName": "Flow 1 - Scaffolding: tRPC Installer Identified - index.ts:L82-85",
+ "cellId": "8d5b9775-bdfb-4aa0-80ee-62c40bdb9edd",
+ "visible": true,
+ "parentCellId": "9d353c27-f968-4ddf-b513-4ea7e667a306"
+ },
+ "cli/src/installers/index.ts-simstep-511ebdf9-0ac2-4523-bdf8-df1afe4dd6f5": {
+ "path": "cli/src/installers/index.ts-simstep-511ebdf9-0ac2-4523-bdf8-df1afe4dd6f5",
+ "fileName": "index.ts",
+ "wiki": "The application logic builds a map of required installers based on the selected packages. Since 'trpc' was selected, the `trpcInstaller` is marked for execution.",
+ "cellName": "Flow 1 - Scaffolding: tRPC Installer Identified - index.ts:L82-85",
+ "cellId": "8d5b9775-bdfb-4aa0-80ee-62c40bdb9edd",
+ "visible": true,
+ "startLine": 82,
+ "endLine": 85,
+ "parentCellId": "9d353c27-f968-4ddf-b513-4ea7e667a306",
+ "parentPath": "cli/src/installers/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Integrate tRPC for end-to-end typesafe API development",
+ "simStepId": "511ebdf9-0ac2-4523-bdf8-df1afe4dd6f5"
+ }
+ ]
+ },
+ "e4df924e-2d58-436e-8e27-a91350d57455": {
+ "path": "e4df924e-2d58-436e-8e27-a91350d57455",
+ "cellName": "Flow 1 - Scaffolding: Server-Side tRPC Files Copied - trpc.ts:L40-87",
+ "cellId": "e4df924e-2d58-436e-8e27-a91350d57455",
+ "visible": true,
+ "parentCellId": "7499353d-8b6f-4564-958b-c303fd5d636f"
+ },
+ "cli/src/installers/trpc.ts-simstep-df6034f0-03ef-493b-b23c-3f54669bb024": {
+ "path": "cli/src/installers/trpc.ts-simstep-df6034f0-03ef-493b-b23c-3f54669bb024",
+ "fileName": "trpc.ts",
+ "wiki": "The installer copies the necessary server-side tRPC files from the template directory into the new project. This includes the core tRPC setup (`trpc.ts`), the main application router (`root.ts`), and an example router (`post.ts`). The specific versions of these files are chosen based on other selections like authentication and database providers.",
+ "cellName": "Flow 1 - Scaffolding: Server-Side tRPC Files Copied - trpc.ts:L40-87",
+ "cellId": "e4df924e-2d58-436e-8e27-a91350d57455",
+ "visible": true,
+ "startLine": 40,
+ "endLine": 87,
+ "parentCellId": "7499353d-8b6f-4564-958b-c303fd5d636f",
+ "parentPath": "cli/src/installers/trpc.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Integrate tRPC for end-to-end typesafe API development",
+ "simStepId": "df6034f0-03ef-493b-b23c-3f54669bb024"
+ }
+ ]
+ },
+ "f06009b7-1213-4d49-9d0e-fb7aa815abf5": {
+ "path": "f06009b7-1213-4d49-9d0e-fb7aa815abf5",
+ "cellName": "Flow 1 - Scaffolding: Client-Side Utilities Copied - trpc.ts:L89-129",
+ "cellId": "f06009b7-1213-4d49-9d0e-fb7aa815abf5",
+ "visible": true,
+ "parentCellId": "7499353d-8b6f-4564-958b-c303fd5d636f"
+ },
+ "cli/src/installers/trpc.ts-simstep-726591ad-6a96-4cd1-9f55-38d8cad8af59": {
+ "path": "cli/src/installers/trpc.ts-simstep-726591ad-6a96-4cd1-9f55-38d8cad8af59",
+ "fileName": "trpc.ts",
+ "wiki": "The installer sets up the client-side tRPC utilities. For the App Router, this includes `src/trpc/react.tsx` and `src/trpc/server.ts`. For the Pages Router, it copies `src/utils/api.ts`. These files provide the type-safe hooks that components use to interact with the API.",
+ "cellName": "Flow 1 - Scaffolding: Client-Side Utilities Copied - trpc.ts:L89-129",
+ "cellId": "f06009b7-1213-4d49-9d0e-fb7aa815abf5",
+ "visible": true,
+ "startLine": 89,
+ "endLine": 129,
+ "parentCellId": "7499353d-8b6f-4564-958b-c303fd5d636f",
+ "parentPath": "cli/src/installers/trpc.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Integrate tRPC for end-to-end typesafe API development",
+ "simStepId": "726591ad-6a96-4cd1-9f55-38d8cad8af59"
+ }
+ ]
+ },
+ "7c88dab3-d7b7-46a7-97dd-b81090b4e0d2": {
+ "path": "7c88dab3-d7b7-46a7-97dd-b81090b4e0d2",
+ "cellName": "Flow 1 - Scaffolding: Select tRPC-Aware UI Boilerplate - selectBoilerplate.ts:L56-64",
+ "cellId": "7c88dab3-d7b7-46a7-97dd-b81090b4e0d2",
+ "visible": true,
+ "parentCellId": "deb9ac89-9f73-438c-a0c6-19e615cc4422"
+ },
+ "cli/src/helpers/selectBoilerplate.ts-simstep-a19527d6-389d-465f-ba7a-a53bdf97cd18": {
+ "path": "cli/src/helpers/selectBoilerplate.ts-simstep-a19527d6-389d-465f-ba7a-a53bdf97cd18",
+ "fileName": "selectBoilerplate.ts",
+ "wiki": "The scaffolding logic selects specialized UI files that are pre-configured for tRPC. For an App Router project, it chooses `with-trpc.tsx` as the root layout, which wraps the entire application with the necessary tRPC and React Query providers.",
+ "cellName": "Flow 1 - Scaffolding: Select tRPC-Aware UI Boilerplate - selectBoilerplate.ts:L56-64",
+ "cellId": "7c88dab3-d7b7-46a7-97dd-b81090b4e0d2",
+ "visible": true,
+ "startLine": 56,
+ "endLine": 64,
+ "parentCellId": "deb9ac89-9f73-438c-a0c6-19e615cc4422",
+ "parentPath": "cli/src/helpers/selectBoilerplate.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Integrate tRPC for end-to-end typesafe API development",
+ "simStepId": "a19527d6-389d-465f-ba7a-a53bdf97cd18"
+ }
+ ]
+ },
+ "5272625a-ff39-4656-a705-d7eae74eca93": {
+ "path": "5272625a-ff39-4656-a705-d7eae74eca93",
+ "cellName": "Flow 2 - Runtime: Component Calls tRPC Hook - api.ts:L21-54",
+ "cellId": "5272625a-ff39-4656-a705-d7eae74eca93",
+ "visible": true,
+ "parentCellId": "2c8bc2ed-571c-4e77-9057-03af51d3a848"
+ },
+ "cli/template/extras/src/utils/api.ts-simstep-465d6958-6428-42f6-8b48-a42a83f5fab7": {
+ "path": "cli/template/extras/src/utils/api.ts-simstep-465d6958-6428-42f6-8b48-a42a83f5fab7",
+ "fileName": "api.ts",
+ "wiki": "In the generated application, a client-side React component imports the `api` object and uses a type-safe hook, such as `api.post.hello.useQuery`, to fetch data from the backend.",
+ "cellName": "Flow 2 - Runtime: Component Calls tRPC Hook - api.ts:L21-54",
+ "cellId": "5272625a-ff39-4656-a705-d7eae74eca93",
+ "visible": true,
+ "startLine": 21,
+ "endLine": 54,
+ "parentCellId": "2c8bc2ed-571c-4e77-9057-03af51d3a848",
+ "parentPath": "cli/template/extras/src/utils/api.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Integrate tRPC for end-to-end typesafe API development",
+ "simStepId": "465d6958-6428-42f6-8b48-a42a83f5fab7"
+ }
+ ]
+ },
+ "1ef6e547-5d93-41fb-9ed4-cf9421ac1964": {
+ "path": "1ef6e547-5d93-41fb-9ed4-cf9421ac1964",
+ "cellName": "Flow 2 - Runtime: API Handler Processes Request - [trpc].ts:L8-19",
+ "cellId": "1ef6e547-5d93-41fb-9ed4-cf9421ac1964",
+ "visible": true,
+ "parentCellId": "c4144223-d4a5-4a03-a052-6d8b8c069811"
+ },
+ "cli/template/extras/src/pages/api/trpc/[trpc].ts-simstep-6d61c17d-1600-490e-93bf-44e3fa112e6a": {
+ "path": "cli/template/extras/src/pages/api/trpc/[trpc].ts-simstep-6d61c17d-1600-490e-93bf-44e3fa112e6a",
+ "fileName": "[trpc].ts",
+ "wiki": "The Next.js API route at `src/pages/api/trpc/[trpc].ts` (or the equivalent App Router file) catches the incoming request. It uses `createNextApiHandler` from tRPC to process the request, linking it to the application's main router.",
+ "cellName": "Flow 2 - Runtime: API Handler Processes Request - [trpc].ts:L8-19",
+ "cellId": "1ef6e547-5d93-41fb-9ed4-cf9421ac1964",
+ "visible": true,
+ "startLine": 8,
+ "endLine": 19,
+ "parentCellId": "c4144223-d4a5-4a03-a052-6d8b8c069811",
+ "parentPath": "cli/template/extras/src/pages/api/trpc/[trpc].ts",
+ "simSteps": [
+ {
+ "simulationKey": "Integrate tRPC for end-to-end typesafe API development",
+ "simStepId": "6d61c17d-1600-490e-93bf-44e3fa112e6a"
+ }
+ ]
+ },
+ "066dcc0e-61f6-4ec4-a392-4539f8dd1b3d": {
+ "path": "066dcc0e-61f6-4ec4-a392-4539f8dd1b3d",
+ "cellName": "Flow 2 - Runtime: Root Router Directs Call - root.ts:L9-11",
+ "cellId": "066dcc0e-61f6-4ec4-a392-4539f8dd1b3d",
+ "visible": true,
+ "parentCellId": "41854670-0a03-48c9-b465-ada6f72f52c7"
+ },
+ "cli/template/extras/src/server/api/root.ts-simstep-104d7bb5-81af-4d61-9a57-185d94f9e28c": {
+ "path": "cli/template/extras/src/server/api/root.ts-simstep-104d7bb5-81af-4d61-9a57-185d94f9e28c",
+ "fileName": "root.ts",
+ "wiki": "The `appRouter`, defined in `src/server/api/root.ts`, acts as a switchboard. It examines the request path (`post.hello`) and forwards the call to the appropriate sub-router, which is `postRouter` in this case.",
+ "cellName": "Flow 2 - Runtime: Root Router Directs Call - root.ts:L9-11",
+ "cellId": "066dcc0e-61f6-4ec4-a392-4539f8dd1b3d",
+ "visible": true,
+ "startLine": 9,
+ "endLine": 11,
+ "parentCellId": "41854670-0a03-48c9-b465-ada6f72f52c7",
+ "parentPath": "cli/template/extras/src/server/api/root.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Integrate tRPC for end-to-end typesafe API development",
+ "simStepId": "104d7bb5-81af-4d61-9a57-185d94f9e28c"
+ }
+ ]
+ },
+ "548e72f6-0889-4d51-91d9-2106fa15009b": {
+ "path": "548e72f6-0889-4d51-91d9-2106fa15009b",
+ "cellName": "Flow 2 - Runtime: Procedure Logic Executes - base.ts:L16-20",
+ "cellId": "548e72f6-0889-4d51-91d9-2106fa15009b",
+ "visible": true,
+ "parentCellId": "049018d1-9cd5-4439-aa03-389402c14188"
+ },
+ "cli/template/extras/src/server/api/routers/post/base.ts-simstep-572e0d05-9d88-4a24-8e4d-2c7154d2f1d2": {
+ "path": "cli/template/extras/src/server/api/routers/post/base.ts-simstep-572e0d05-9d88-4a24-8e4d-2c7154d2f1d2",
+ "fileName": "base.ts",
+ "wiki": "The `hello` procedure's resolver function executes on the server. It uses the input data to perform its business logic—in this simple case, constructing a greeting string.",
+ "cellName": "Flow 2 - Runtime: Procedure Logic Executes - base.ts:L16-20",
+ "cellId": "548e72f6-0889-4d51-91d9-2106fa15009b",
+ "visible": true,
+ "startLine": 16,
+ "endLine": 20,
+ "parentCellId": "049018d1-9cd5-4439-aa03-389402c14188",
+ "parentPath": "cli/template/extras/src/server/api/routers/post/base.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Integrate tRPC for end-to-end typesafe API development",
+ "simStepId": "572e0d05-9d88-4a24-8e4d-2c7154d2f1d2"
+ }
+ ]
+ },
+ "0edf5280-60ad-4e4a-a9cd-7872ba433ee0": {
+ "path": "0edf5280-60ad-4e4a-a9cd-7872ba433ee0",
+ "cellName": "Flow 2 - Runtime: Client Updates UI - api.ts:L53",
+ "cellId": "0edf5280-60ad-4e4a-a9cd-7872ba433ee0",
+ "visible": true,
+ "parentCellId": "2c8bc2ed-571c-4e77-9057-03af51d3a848"
+ },
+ "cli/template/extras/src/utils/api.ts-simstep-329d6e8f-a16e-4be8-a0ce-7680767495a6": {
+ "path": "cli/template/extras/src/utils/api.ts-simstep-329d6e8f-a16e-4be8-a0ce-7680767495a6",
+ "fileName": "api.ts",
+ "wiki": "The client-side tRPC hook receives the HTTP response. It uses `superjson` to deserialize the data, and then React Query updates its internal cache. This state change triggers a re-render of the component, displaying the fetched data to the user.",
+ "cellName": "Flow 2 - Runtime: Client Updates UI - api.ts:L53",
+ "cellId": "0edf5280-60ad-4e4a-a9cd-7872ba433ee0",
+ "visible": true,
+ "startLine": 53,
+ "endLine": 53,
+ "parentCellId": "2c8bc2ed-571c-4e77-9057-03af51d3a848",
+ "parentPath": "cli/template/extras/src/utils/api.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Integrate tRPC for end-to-end typesafe API development",
+ "simStepId": "329d6e8f-a16e-4be8-a0ce-7680767495a6"
+ }
+ ]
+ },
+ "be363e16-6699-40b9-9cf7-ee3a0ccc1e86": {
+ "path": "be363e16-6699-40b9-9cf7-ee3a0ccc1e86",
+ "cellName": "Flow 1\n- Scaffolding:\nConfiguration Passed",
+ "cellId": "be363e16-6699-40b9-9cf7-ee3a0ccc1e86",
+ "visible": true,
+ "parentCellId": "2418c3df-0551-4276-94df-df1042ecbfa7"
+ },
+ "generated-edge-simstep-0c85aa78-afd8-4ccf-b919-b3a28d4be75a-be363e16-6699-40b9-9cf7-ee3a0ccc1e86": {
+ "path": "generated-edge-simstep-0c85aa78-afd8-4ccf-b919-b3a28d4be75a-be363e16-6699-40b9-9cf7-ee3a0ccc1e86",
+ "fileName": "index.ts",
+ "cellName": "Flow 1 - Scaffolding: Configuration Passed",
+ "cellId": "be363e16-6699-40b9-9cf7-ee3a0ccc1e86",
+ "visible": true,
+ "startLine": 39,
+ "endLine": 44,
+ "parentCellId": "a80e3f00-2d8f-40f0-9dbf-d127667352d0",
+ "parentPath": "cli/src/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Integrate tRPC for end-to-end typesafe API development",
+ "simStepId": "0c85aa78-afd8-4ccf-b919-b3a28d4be75a"
+ }
+ ]
+ },
+ "56eb0fd1-14f4-46cd-85c7-a79d76f4c1b5": {
+ "path": "56eb0fd1-14f4-46cd-85c7-a79d76f4c1b5",
+ "cellName": "Flow 1\n- Scaffolding:\nProject Context\nProvided to\nInstaller",
+ "cellId": "56eb0fd1-14f4-46cd-85c7-a79d76f4c1b5",
+ "visible": true,
+ "parentCellId": "b7802ecf-b170-4bbb-b97c-9c22247eceab"
+ },
+ "generated-edge-simstep-7372cde8-0616-47af-a7fb-af2a173ff16c-56eb0fd1-14f4-46cd-85c7-a79d76f4c1b5": {
+ "path": "generated-edge-simstep-7372cde8-0616-47af-a7fb-af2a173ff16c-56eb0fd1-14f4-46cd-85c7-a79d76f4c1b5",
+ "fileName": "trpc.ts",
+ "cellName": "Flow 1 - Scaffolding: Project Context Provided to Installer",
+ "cellId": "56eb0fd1-14f4-46cd-85c7-a79d76f4c1b5",
+ "visible": true,
+ "startLine": 8,
+ "endLine": 12,
+ "parentCellId": "7499353d-8b6f-4564-958b-c303fd5d636f",
+ "parentPath": "cli/src/installers/trpc.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Integrate tRPC for end-to-end typesafe API development",
+ "simStepId": "7372cde8-0616-47af-a7fb-af2a173ff16c"
+ }
+ ]
+ },
+ "0022c79d-28fa-404b-98dc-bdfb9dbc8948": {
+ "path": "0022c79d-28fa-404b-98dc-bdfb9dbc8948",
+ "cellName": "Flow 1\n- Scaffolding:\nAPI Entrypoint\nFile Copied",
+ "cellId": "0022c79d-28fa-404b-98dc-bdfb9dbc8948",
+ "visible": true,
+ "parentCellId": "7499353d-8b6f-4564-958b-c303fd5d636f"
+ },
+ "generated-edge-simstep-5b560bdb-ccad-41ed-8d97-a281de3ef122-0022c79d-28fa-404b-98dc-bdfb9dbc8948": {
+ "path": "generated-edge-simstep-5b560bdb-ccad-41ed-8d97-a281de3ef122-0022c79d-28fa-404b-98dc-bdfb9dbc8948",
+ "fileName": "trpc.ts",
+ "cellName": "Flow 1 - Scaffolding: API Entrypoint File Copied",
+ "cellId": "0022c79d-28fa-404b-98dc-bdfb9dbc8948",
+ "visible": true,
+ "startLine": 33,
+ "endLine": 38,
+ "parentCellId": "7499353d-8b6f-4564-958b-c303fd5d636f",
+ "parentPath": "cli/src/installers/trpc.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Integrate tRPC for end-to-end typesafe API development",
+ "simStepId": "5b560bdb-ccad-41ed-8d97-a281de3ef122"
+ }
+ ]
+ },
+ "e629999a-1fbb-41ab-8857-6beee22287ec": {
+ "path": "e629999a-1fbb-41ab-8857-6beee22287ec",
+ "cellName": "Flow 1\n- Scaffolding:\nPass Package\nConfiguration",
+ "cellId": "e629999a-1fbb-41ab-8857-6beee22287ec",
+ "visible": true,
+ "parentCellId": "2418c3df-0551-4276-94df-df1042ecbfa7"
+ },
+ "generated-edge-simstep-bf50d88a-65ac-44e9-95c4-741af87395cd-e629999a-1fbb-41ab-8857-6beee22287ec": {
+ "path": "generated-edge-simstep-bf50d88a-65ac-44e9-95c4-741af87395cd-e629999a-1fbb-41ab-8857-6beee22287ec",
+ "fileName": "createProject.ts",
+ "cellName": "Flow 1 - Scaffolding: Pass Package Configuration",
+ "cellId": "e629999a-1fbb-41ab-8857-6beee22287ec",
+ "visible": true,
+ "startLine": 71,
+ "endLine": 75,
+ "parentCellId": "2bddd99c-0b89-4485-89a0-b9fceca09629",
+ "parentPath": "cli/src/helpers/createProject.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Integrate tRPC for end-to-end typesafe API development",
+ "simStepId": "bf50d88a-65ac-44e9-95c4-741af87395cd"
+ }
+ ]
+ },
+ "14c2b71d-5ce2-4d42-87ce-a7084009adbe": {
+ "path": "14c2b71d-5ce2-4d42-87ce-a7084009adbe",
+ "cellName": "Flow 2\n- Runtime:\nHTTP Request\nto API",
+ "cellId": "14c2b71d-5ce2-4d42-87ce-a7084009adbe",
+ "visible": true,
+ "parentCellId": "7dc18668-256e-49aa-a3a2-ae908b99e905"
+ },
+ "generated-edge-simstep-9cd6ffb8-20af-4fe2-a7eb-e02ee5297e40-14c2b71d-5ce2-4d42-87ce-a7084009adbe": {
+ "path": "generated-edge-simstep-9cd6ffb8-20af-4fe2-a7eb-e02ee5297e40-14c2b71d-5ce2-4d42-87ce-a7084009adbe",
+ "fileName": "api.ts",
+ "cellName": "Flow 2 - Runtime: HTTP Request to API",
+ "cellId": "14c2b71d-5ce2-4d42-87ce-a7084009adbe",
+ "visible": true,
+ "startLine": 35,
+ "endLine": 43,
+ "parentCellId": "2c8bc2ed-571c-4e77-9057-03af51d3a848",
+ "parentPath": "cli/template/extras/src/utils/api.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Integrate tRPC for end-to-end typesafe API development",
+ "simStepId": "9cd6ffb8-20af-4fe2-a7eb-e02ee5297e40"
+ }
+ ]
+ },
+ "a4f6f418-7263-4543-8117-3c13247d23c1": {
+ "path": "a4f6f418-7263-4543-8117-3c13247d23c1",
+ "cellName": "Flow 2\n- Runtime:\nRequest Passed\nto Root\nRouter",
+ "cellId": "a4f6f418-7263-4543-8117-3c13247d23c1",
+ "visible": true,
+ "parentCellId": "7dc18668-256e-49aa-a3a2-ae908b99e905"
+ },
+ "generated-edge-simstep-63a9ac0b-3e97-44af-bd1f-ea530ff5a387-a4f6f418-7263-4543-8117-3c13247d23c1": {
+ "path": "generated-edge-simstep-63a9ac0b-3e97-44af-bd1f-ea530ff5a387-a4f6f418-7263-4543-8117-3c13247d23c1",
+ "fileName": "[trpc].ts",
+ "cellName": "Flow 2 - Runtime: Request Passed to Root Router",
+ "cellId": "a4f6f418-7263-4543-8117-3c13247d23c1",
+ "visible": true,
+ "startLine": 9,
+ "endLine": 9,
+ "parentCellId": "c4144223-d4a5-4a03-a052-6d8b8c069811",
+ "parentPath": "cli/template/extras/src/pages/api/trpc/[trpc].ts",
+ "simSteps": [
+ {
+ "simulationKey": "Integrate tRPC for end-to-end typesafe API development",
+ "simStepId": "63a9ac0b-3e97-44af-bd1f-ea530ff5a387"
+ }
+ ]
+ },
+ "3ff84179-22ea-406d-933e-6bf88e387d33": {
+ "path": "3ff84179-22ea-406d-933e-6bf88e387d33",
+ "cellName": "Flow 2\n- Runtime:\nCall Dispatched\nto Procedure",
+ "cellId": "3ff84179-22ea-406d-933e-6bf88e387d33",
+ "visible": true,
+ "parentCellId": "b89c4d01-a3a5-464a-b911-ea775e99b290"
+ },
+ "generated-edge-simstep-e5dea768-b741-4f24-bf2b-16986d6f7dc3-3ff84179-22ea-406d-933e-6bf88e387d33": {
+ "path": "generated-edge-simstep-e5dea768-b741-4f24-bf2b-16986d6f7dc3-3ff84179-22ea-406d-933e-6bf88e387d33",
+ "fileName": "base.ts",
+ "cellName": "Flow 2 - Runtime: Call Dispatched to Procedure",
+ "cellId": "3ff84179-22ea-406d-933e-6bf88e387d33",
+ "visible": true,
+ "startLine": 15,
+ "endLine": 15,
+ "parentCellId": "049018d1-9cd5-4439-aa03-389402c14188",
+ "parentPath": "cli/template/extras/src/server/api/routers/post/base.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Integrate tRPC for end-to-end typesafe API development",
+ "simStepId": "e5dea768-b741-4f24-bf2b-16986d6f7dc3"
+ }
+ ]
+ },
+ "a9910f9c-4e1a-41cc-bc6b-8a0c78d2233c": {
+ "path": "a9910f9c-4e1a-41cc-bc6b-8a0c78d2233c",
+ "cellName": "Flow 2\n- Runtime:\nData Returned\nto Client",
+ "cellId": "a9910f9c-4e1a-41cc-bc6b-8a0c78d2233c",
+ "visible": true,
+ "parentCellId": "7dc18668-256e-49aa-a3a2-ae908b99e905"
+ },
+ "generated-edge-simstep-ad46482b-c53d-45e1-96f2-f7d8faa598c5-a9910f9c-4e1a-41cc-bc6b-8a0c78d2233c": {
+ "path": "generated-edge-simstep-ad46482b-c53d-45e1-96f2-f7d8faa598c5-a9910f9c-4e1a-41cc-bc6b-8a0c78d2233c",
+ "fileName": "base.ts",
+ "cellName": "Flow 2 - Runtime: Data Returned to Client",
+ "cellId": "a9910f9c-4e1a-41cc-bc6b-8a0c78d2233c",
+ "visible": true,
+ "startLine": 57,
+ "endLine": 68,
+ "parentCellId": "ceb3e5b8-b6ec-42a3-89f6-d242ba0eb807",
+ "parentPath": "cli/template/extras/src/server/api/trpc-pages/base.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Integrate tRPC for end-to-end typesafe API development",
+ "simStepId": "ad46482b-c53d-45e1-96f2-f7d8faa598c5"
+ }
+ ]
+ },
+ "12664725-8a7e-4347-afef-0c8594d77ca5": {
+ "path": "12664725-8a7e-4347-afef-0c8594d77ca5",
+ "cellName": "prisma.ts",
+ "cellId": "12664725-8a7e-4347-afef-0c8594d77ca5",
+ "visible": true,
+ "parentCellId": "b7802ecf-b170-4bbb-b97c-9c22247eceab"
+ },
+ "83e7cf3a-e72c-4bef-b10f-4b0f2909ad38": {
+ "path": "83e7cf3a-e72c-4bef-b10f-4b0f2909ad38",
+ "cellName": "drizzle.ts",
+ "cellId": "83e7cf3a-e72c-4bef-b10f-4b0f2909ad38",
+ "visible": true,
+ "parentCellId": "b7802ecf-b170-4bbb-b97c-9c22247eceab"
+ },
+ "c2592411-a35f-464d-aae2-e5dd82b2eae9": {
+ "path": "c2592411-a35f-464d-aae2-e5dd82b2eae9",
+ "cellName": "Prisma Flow: Resolve Prisma Installer - index.ts:L70-73",
+ "cellId": "c2592411-a35f-464d-aae2-e5dd82b2eae9",
+ "visible": true,
+ "parentCellId": "9d353c27-f968-4ddf-b513-4ea7e667a306"
+ },
+ "cli/src/installers/index.ts-simstep-1f66343c-581b-4ba0-bafa-16a289d49088": {
+ "path": "cli/src/installers/index.ts-simstep-1f66343c-581b-4ba0-bafa-16a289d49088",
+ "fileName": "index.ts",
+ "wiki": "Based on user's selection of 'prisma' during the CLI prompts, the `buildPkgInstallerMap` function maps the package name to its corresponding installer function, `prismaInstaller`.",
+ "cellName": "Prisma Flow: Resolve Prisma Installer - index.ts:L70-73",
+ "cellId": "c2592411-a35f-464d-aae2-e5dd82b2eae9",
+ "visible": true,
+ "startLine": 70,
+ "endLine": 73,
+ "parentCellId": "9d353c27-f968-4ddf-b513-4ea7e667a306",
+ "parentPath": "cli/src/installers/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Configure a database with Prisma or Drizzle ORM",
+ "simStepId": "1f66343c-581b-4ba0-bafa-16a289d49088"
+ }
+ ]
+ },
+ "190a78a0-b7ac-4244-a5d5-30f286665976": {
+ "path": "190a78a0-b7ac-4244-a5d5-30f286665976",
+ "cellName": "Prisma Flow: Add Dependencies - prisma.ts:L14-23",
+ "cellId": "190a78a0-b7ac-4244-a5d5-30f286665976",
+ "visible": true,
+ "parentCellId": "12664725-8a7e-4347-afef-0c8594d77ca5"
+ },
+ "cli/src/installers/prisma.ts-simstep-317777e2-f59a-42a8-bf9e-d827f0aa36ae": {
+ "path": "cli/src/installers/prisma.ts-simstep-317777e2-f59a-42a8-bf9e-d827f0aa36ae",
+ "fileName": "prisma.ts",
+ "wiki": "The `prismaInstaller` function begins by adding the necessary dependencies to the project's `package.json`. It adds `prisma` as a dev dependency and `@prisma/client` as a regular dependency.",
+ "cellName": "Prisma Flow: Add Dependencies - prisma.ts:L14-23",
+ "cellId": "190a78a0-b7ac-4244-a5d5-30f286665976",
+ "visible": true,
+ "startLine": 14,
+ "endLine": 23,
+ "parentCellId": "12664725-8a7e-4347-afef-0c8594d77ca5",
+ "parentPath": "cli/src/installers/prisma.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Configure a database with Prisma or Drizzle ORM",
+ "simStepId": "317777e2-f59a-42a8-bf9e-d827f0aa36ae"
+ }
+ ]
+ },
+ "adb4326c-4465-4845-9040-1cbdf556ab2f": {
+ "path": "adb4326c-4465-4845-9040-1cbdf556ab2f",
+ "cellName": "Prisma Flow: Customize and Write Schema - prisma.ts:L45-63",
+ "cellId": "adb4326c-4465-4845-9040-1cbdf556ab2f",
+ "visible": true,
+ "parentCellId": "12664725-8a7e-4347-afef-0c8594d77ca5"
+ },
+ "cli/src/installers/prisma.ts-simstep-fb261ed9-b27e-4ed9-9e88-99ee06534683": {
+ "path": "cli/src/installers/prisma.ts-simstep-fb261ed9-b27e-4ed9-9e88-99ee06534683",
+ "fileName": "prisma.ts",
+ "wiki": "The selected schema template is read from the filesystem. The content is then customized to match the selected database provider (e.g., changing 'sqlite' to 'postgresql') and written to the new project's `/prisma/schema.prisma` file.",
+ "cellName": "Prisma Flow: Customize and Write Schema - prisma.ts:L45-63",
+ "cellId": "adb4326c-4465-4845-9040-1cbdf556ab2f",
+ "visible": true,
+ "startLine": 45,
+ "endLine": 63,
+ "parentCellId": "12664725-8a7e-4347-afef-0c8594d77ca5",
+ "parentPath": "cli/src/installers/prisma.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Configure a database with Prisma or Drizzle ORM",
+ "simStepId": "fb261ed9-b27e-4ed9-9e88-99ee06534683"
+ }
+ ]
+ },
+ "2bbe148e-d909-45eb-89d2-f1176b3ac247": {
+ "path": "2bbe148e-d909-45eb-89d2-f1176b3ac247",
+ "cellName": "Prisma Flow: Copy DB Client and Add Scripts - prisma.ts:L73-84",
+ "cellId": "2bbe148e-d909-45eb-89d2-f1176b3ac247",
+ "visible": true,
+ "parentCellId": "12664725-8a7e-4347-afef-0c8594d77ca5"
+ },
+ "cli/src/installers/prisma.ts-simstep-c2f097d0-d5d3-4ce8-8408-e2e422307943": {
+ "path": "cli/src/installers/prisma.ts-simstep-c2f097d0-d5d3-4ce8-8408-e2e422307943",
+ "fileName": "prisma.ts",
+ "wiki": "The selected database client file is copied to `src/server/db.ts` in the target project. Concurrently, necessary scripts like `db:push`, `db:studio`, and `db:generate` are added to the project's `package.json` file.",
+ "cellName": "Prisma Flow: Copy DB Client and Add Scripts - prisma.ts:L73-84",
+ "cellId": "2bbe148e-d909-45eb-89d2-f1176b3ac247",
+ "visible": true,
+ "startLine": 73,
+ "endLine": 84,
+ "parentCellId": "12664725-8a7e-4347-afef-0c8594d77ca5",
+ "parentPath": "cli/src/installers/prisma.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Configure a database with Prisma or Drizzle ORM",
+ "simStepId": "c2f097d0-d5d3-4ce8-8408-e2e422307943"
+ }
+ ]
+ },
+ "e0f1924a-83b1-4e57-a094-fd0c0c5bb7b4": {
+ "path": "e0f1924a-83b1-4e57-a094-fd0c0c5bb7b4",
+ "cellName": "Drizzle Flow: Resolve Drizzle Installer - index.ts:L74-77",
+ "cellId": "e0f1924a-83b1-4e57-a094-fd0c0c5bb7b4",
+ "visible": true,
+ "parentCellId": "9d353c27-f968-4ddf-b513-4ea7e667a306"
+ },
+ "cli/src/installers/index.ts-simstep-346b226f-561f-4660-bba1-e73291a75963": {
+ "path": "cli/src/installers/index.ts-simstep-346b226f-561f-4660-bba1-e73291a75963",
+ "fileName": "index.ts",
+ "wiki": "Based on user's selection of 'drizzle' during the CLI prompts, the `buildPkgInstallerMap` function maps the package name to its corresponding installer function, `drizzleInstaller`.",
+ "cellName": "Drizzle Flow: Resolve Drizzle Installer - index.ts:L74-77",
+ "cellId": "e0f1924a-83b1-4e57-a094-fd0c0c5bb7b4",
+ "visible": true,
+ "startLine": 74,
+ "endLine": 77,
+ "parentCellId": "9d353c27-f968-4ddf-b513-4ea7e667a306",
+ "parentPath": "cli/src/installers/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Configure a database with Prisma or Drizzle ORM",
+ "simStepId": "346b226f-561f-4660-bba1-e73291a75963"
+ }
+ ]
+ },
+ "d01873cf-3396-4ab9-bd97-5feb0e4f0176": {
+ "path": "d01873cf-3396-4ab9-bd97-5feb0e4f0176",
+ "cellName": "Drizzle Flow: Add Dependencies - drizzle.ts:L15-34",
+ "cellId": "d01873cf-3396-4ab9-bd97-5feb0e4f0176",
+ "visible": true,
+ "parentCellId": "83e7cf3a-e72c-4bef-b10f-4b0f2909ad38"
+ },
+ "cli/src/installers/drizzle.ts-simstep-3b58f7d6-97ee-4a76-be16-f88aac032bfb": {
+ "path": "cli/src/installers/drizzle.ts-simstep-3b58f7d6-97ee-4a76-be16-f88aac032bfb",
+ "fileName": "drizzle.ts",
+ "wiki": "The `drizzleInstaller` begins by adding `drizzle-kit` as a dev dependency, `drizzle-orm`, and the specific database driver (e.g., `mysql2` for MySQL) as regular dependencies to `package.json`.",
+ "cellName": "Drizzle Flow: Add Dependencies - drizzle.ts:L15-34",
+ "cellId": "d01873cf-3396-4ab9-bd97-5feb0e4f0176",
+ "visible": true,
+ "startLine": 15,
+ "endLine": 34,
+ "parentCellId": "83e7cf3a-e72c-4bef-b10f-4b0f2909ad38",
+ "parentPath": "cli/src/installers/drizzle.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Configure a database with Prisma or Drizzle ORM",
+ "simStepId": "3b58f7d6-97ee-4a76-be16-f88aac032bfb"
+ }
+ ]
+ },
+ "f9144dc9-82f4-4e58-94e0-bd58e4f168a2": {
+ "path": "f9144dc9-82f4-4e58-94e0-bd58e4f168a2",
+ "cellName": "Drizzle Flow: Customize and Write Files - drizzle.ts:L58-68",
+ "cellId": "f9144dc9-82f4-4e58-94e0-bd58e4f168a2",
+ "visible": true,
+ "parentCellId": "83e7cf3a-e72c-4bef-b10f-4b0f2909ad38"
+ },
+ "cli/src/installers/drizzle.ts-simstep-cd03a6c2-7284-4536-83d4-d323dceb2c11": {
+ "path": "cli/src/installers/drizzle.ts-simstep-cd03a6c2-7284-4536-83d4-d323dceb2c11",
+ "fileName": "drizzle.ts",
+ "wiki": "The content of the selected templates is read from the filesystem. Placeholders for table prefixes are replaced with the scoped application name (e.g., 'project1_*' becomes 'my-t3-app_*'). The customized content is then written to `drizzle.config.ts` and `src/server/db/schema.ts`.",
+ "cellName": "Drizzle Flow: Customize and Write Files - drizzle.ts:L58-68",
+ "cellId": "f9144dc9-82f4-4e58-94e0-bd58e4f168a2",
+ "visible": true,
+ "startLine": 58,
+ "endLine": 68,
+ "parentCellId": "83e7cf3a-e72c-4bef-b10f-4b0f2909ad38",
+ "parentPath": "cli/src/installers/drizzle.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Configure a database with Prisma or Drizzle ORM",
+ "simStepId": "cd03a6c2-7284-4536-83d4-d323dceb2c11"
+ }
+ ]
+ },
+ "ca527877-c651-49e3-8fbf-4ff5999fc713": {
+ "path": "ca527877-c651-49e3-8fbf-4ff5999fc713",
+ "cellName": "Drizzle Flow: Copy DB Client and Add Scripts - drizzle.ts:L69-83",
+ "cellId": "ca527877-c651-49e3-8fbf-4ff5999fc713",
+ "visible": true,
+ "parentCellId": "83e7cf3a-e72c-4bef-b10f-4b0f2909ad38"
+ },
+ "cli/src/installers/drizzle.ts-simstep-961c0c28-126c-479c-b722-bf21fe2dc6e2": {
+ "path": "cli/src/installers/drizzle.ts-simstep-961c0c28-126c-479c-b722-bf21fe2dc6e2",
+ "fileName": "drizzle.ts",
+ "wiki": "The Drizzle database client file corresponding to the selected provider is copied to `src/server/db/index.ts`. Drizzle-specific scripts like `db:push`, `db:studio`, and `db:generate` are also added to `package.json`.",
+ "cellName": "Drizzle Flow: Copy DB Client and Add Scripts - drizzle.ts:L69-83",
+ "cellId": "ca527877-c651-49e3-8fbf-4ff5999fc713",
+ "visible": true,
+ "startLine": 69,
+ "endLine": 83,
+ "parentCellId": "83e7cf3a-e72c-4bef-b10f-4b0f2909ad38",
+ "parentPath": "cli/src/installers/drizzle.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Configure a database with Prisma or Drizzle ORM",
+ "simStepId": "961c0c28-126c-479c-b722-bf21fe2dc6e2"
+ }
+ ]
+ },
+ "a4e822e3-e854-4405-b97e-e07bbb1ea596": {
+ "path": "a4e822e3-e854-4405-b97e-e07bbb1ea596",
+ "cellName": "Prisma Flow:\nPass Options\nto Installer",
+ "cellId": "a4e822e3-e854-4405-b97e-e07bbb1ea596",
+ "visible": true,
+ "parentCellId": "b7802ecf-b170-4bbb-b97c-9c22247eceab"
+ },
+ "generated-edge-simstep-6208ad0b-72fc-4115-9c0f-d529448857e6-a4e822e3-e854-4405-b97e-e07bbb1ea596": {
+ "path": "generated-edge-simstep-6208ad0b-72fc-4115-9c0f-d529448857e6-a4e822e3-e854-4405-b97e-e07bbb1ea596",
+ "fileName": "prisma.ts",
+ "cellName": "Prisma Flow: Pass Options to Installer",
+ "cellId": "a4e822e3-e854-4405-b97e-e07bbb1ea596",
+ "visible": true,
+ "startLine": 9,
+ "endLine": 13,
+ "parentCellId": "12664725-8a7e-4347-afef-0c8594d77ca5",
+ "parentPath": "cli/src/installers/prisma.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Configure a database with Prisma or Drizzle ORM",
+ "simStepId": "6208ad0b-72fc-4115-9c0f-d529448857e6"
+ }
+ ]
+ },
+ "ffe49cb0-254a-4f12-a363-7ae52f5914af": {
+ "path": "ffe49cb0-254a-4f12-a363-7ae52f5914af",
+ "cellName": "Prisma Flow:\nSelect Schema\nTemplate",
+ "cellId": "ffe49cb0-254a-4f12-a363-7ae52f5914af",
+ "visible": true,
+ "parentCellId": "12664725-8a7e-4347-afef-0c8594d77ca5"
+ },
+ "generated-edge-simstep-b73c412c-12b7-4c1b-b601-0928e398cc8a-ffe49cb0-254a-4f12-a363-7ae52f5914af": {
+ "path": "generated-edge-simstep-b73c412c-12b7-4c1b-b601-0928e398cc8a-ffe49cb0-254a-4f12-a363-7ae52f5914af",
+ "fileName": "prisma.ts",
+ "cellName": "Prisma Flow: Select Schema Template",
+ "cellId": "ffe49cb0-254a-4f12-a363-7ae52f5914af",
+ "visible": true,
+ "startLine": 33,
+ "endLine": 44,
+ "parentCellId": "12664725-8a7e-4347-afef-0c8594d77ca5",
+ "parentPath": "cli/src/installers/prisma.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Configure a database with Prisma or Drizzle ORM",
+ "simStepId": "b73c412c-12b7-4c1b-b601-0928e398cc8a"
+ }
+ ]
+ },
+ "688fe894-cb7f-45cf-b5ef-c35d87e49563": {
+ "path": "688fe894-cb7f-45cf-b5ef-c35d87e49563",
+ "cellName": "Prisma Flow:\nSelect DB\nClient File",
+ "cellId": "688fe894-cb7f-45cf-b5ef-c35d87e49563",
+ "visible": true,
+ "parentCellId": "12664725-8a7e-4347-afef-0c8594d77ca5"
+ },
+ "generated-edge-simstep-afe388f6-b4bd-4c9b-ade7-c17d71de973e-688fe894-cb7f-45cf-b5ef-c35d87e49563": {
+ "path": "generated-edge-simstep-afe388f6-b4bd-4c9b-ade7-c17d71de973e-688fe894-cb7f-45cf-b5ef-c35d87e49563",
+ "fileName": "prisma.ts",
+ "cellName": "Prisma Flow: Select DB Client File",
+ "cellId": "688fe894-cb7f-45cf-b5ef-c35d87e49563",
+ "visible": true,
+ "startLine": 65,
+ "endLine": 71,
+ "parentCellId": "12664725-8a7e-4347-afef-0c8594d77ca5",
+ "parentPath": "cli/src/installers/prisma.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Configure a database with Prisma or Drizzle ORM",
+ "simStepId": "afe388f6-b4bd-4c9b-ade7-c17d71de973e"
+ }
+ ]
+ },
+ "3ab3c030-71a6-4574-aaec-23ed12f5dbfb": {
+ "path": "3ab3c030-71a6-4574-aaec-23ed12f5dbfb",
+ "cellName": "Prisma Flow:\nConfiguration Complete",
+ "cellId": "3ab3c030-71a6-4574-aaec-23ed12f5dbfb",
+ "visible": true,
+ "parentCellId": "b7802ecf-b170-4bbb-b97c-9c22247eceab"
+ },
+ "generated-edge-simstep-1d282367-cb63-4ebd-b982-837a2ea6ae36-3ab3c030-71a6-4574-aaec-23ed12f5dbfb": {
+ "path": "generated-edge-simstep-1d282367-cb63-4ebd-b982-837a2ea6ae36-3ab3c030-71a6-4574-aaec-23ed12f5dbfb",
+ "fileName": "prisma.ts",
+ "cellName": "Prisma Flow: Configuration Complete",
+ "cellId": "3ab3c030-71a6-4574-aaec-23ed12f5dbfb",
+ "visible": true,
+ "startLine": 85,
+ "endLine": 85,
+ "parentCellId": "12664725-8a7e-4347-afef-0c8594d77ca5",
+ "parentPath": "cli/src/installers/prisma.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Configure a database with Prisma or Drizzle ORM",
+ "simStepId": "1d282367-cb63-4ebd-b982-837a2ea6ae36"
+ }
+ ]
+ },
+ "febf3c47-20fd-414c-9cdd-b8549ab1eab5": {
+ "path": "febf3c47-20fd-414c-9cdd-b8549ab1eab5",
+ "cellName": "Drizzle Flow:\nPass Options\nto Installer",
+ "cellId": "febf3c47-20fd-414c-9cdd-b8549ab1eab5",
+ "visible": true,
+ "parentCellId": "b7802ecf-b170-4bbb-b97c-9c22247eceab"
+ },
+ "generated-edge-simstep-c490940a-0f6e-4ee7-a482-f1e17e324133-febf3c47-20fd-414c-9cdd-b8549ab1eab5": {
+ "path": "generated-edge-simstep-c490940a-0f6e-4ee7-a482-f1e17e324133-febf3c47-20fd-414c-9cdd-b8549ab1eab5",
+ "fileName": "drizzle.ts",
+ "cellName": "Drizzle Flow: Pass Options to Installer",
+ "cellId": "febf3c47-20fd-414c-9cdd-b8549ab1eab5",
+ "visible": true,
+ "startLine": 9,
+ "endLine": 14,
+ "parentCellId": "83e7cf3a-e72c-4bef-b10f-4b0f2909ad38",
+ "parentPath": "cli/src/installers/drizzle.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Configure a database with Prisma or Drizzle ORM",
+ "simStepId": "c490940a-0f6e-4ee7-a482-f1e17e324133"
+ }
+ ]
+ },
+ "269bf727-90b9-44f4-9989-eab3d4d9a873": {
+ "path": "269bf727-90b9-44f4-9989-eab3d4d9a873",
+ "cellName": "Drizzle Flow:\nSelect Config\nand Schema\nTemplates",
+ "cellId": "269bf727-90b9-44f4-9989-eab3d4d9a873",
+ "visible": true,
+ "parentCellId": "83e7cf3a-e72c-4bef-b10f-4b0f2909ad38"
+ },
+ "generated-edge-simstep-50719bc2-46f9-487e-88b8-ad41079bfe44-269bf727-90b9-44f4-9989-eab3d4d9a873": {
+ "path": "generated-edge-simstep-50719bc2-46f9-487e-88b8-ad41079bfe44-269bf727-90b9-44f4-9989-eab3d4d9a873",
+ "fileName": "drizzle.ts",
+ "cellName": "Drizzle Flow: Select Config and Schema Templates",
+ "cellId": "269bf727-90b9-44f4-9989-eab3d4d9a873",
+ "visible": true,
+ "startLine": 38,
+ "endLine": 55,
+ "parentCellId": "83e7cf3a-e72c-4bef-b10f-4b0f2909ad38",
+ "parentPath": "cli/src/installers/drizzle.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Configure a database with Prisma or Drizzle ORM",
+ "simStepId": "50719bc2-46f9-487e-88b8-ad41079bfe44"
+ }
+ ]
+ },
+ "08e62a9b-8bcf-41fc-a4a9-d43c4f0faee4": {
+ "path": "08e62a9b-8bcf-41fc-a4a9-d43c4f0faee4",
+ "cellName": "Drizzle Flow:\nWrite Files\nto Project",
+ "cellId": "08e62a9b-8bcf-41fc-a4a9-d43c4f0faee4",
+ "visible": true,
+ "parentCellId": "83e7cf3a-e72c-4bef-b10f-4b0f2909ad38"
+ },
+ "generated-edge-simstep-9799f85f-6d01-4fbb-9eaf-02638b03e0bb-08e62a9b-8bcf-41fc-a4a9-d43c4f0faee4": {
+ "path": "generated-edge-simstep-9799f85f-6d01-4fbb-9eaf-02638b03e0bb-08e62a9b-8bcf-41fc-a4a9-d43c4f0faee4",
+ "fileName": "drizzle.ts",
+ "cellName": "Drizzle Flow: Write Files to Project",
+ "cellId": "08e62a9b-8bcf-41fc-a4a9-d43c4f0faee4",
+ "visible": true,
+ "startLine": 85,
+ "endLine": 88,
+ "parentCellId": "83e7cf3a-e72c-4bef-b10f-4b0f2909ad38",
+ "parentPath": "cli/src/installers/drizzle.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Configure a database with Prisma or Drizzle ORM",
+ "simStepId": "9799f85f-6d01-4fbb-9eaf-02638b03e0bb"
+ }
+ ]
+ },
+ "a4d0176d-eaec-4094-a1fd-bc289e6d7458": {
+ "path": "a4d0176d-eaec-4094-a1fd-bc289e6d7458",
+ "cellName": "nextAuth.ts",
+ "cellId": "a4d0176d-eaec-4094-a1fd-bc289e6d7458",
+ "visible": true,
+ "parentCellId": "b7802ecf-b170-4bbb-b97c-9c22247eceab"
+ },
+ "3e55e39b-63e0-4faf-8574-b36b1ec90270": {
+ "path": "3e55e39b-63e0-4faf-8574-b36b1ec90270",
+ "cellName": "index",
+ "cellId": "3e55e39b-63e0-4faf-8574-b36b1ec90270",
+ "visible": true,
+ "parentCellId": "328a9527-b008-42ad-bee2-19bdd850a5ff"
+ },
+ "792e645f-92d1-44a5-a99c-92b9031dcd9e": {
+ "path": "792e645f-92d1-44a5-a99c-92b9031dcd9e",
+ "cellName": "auth",
+ "cellId": "792e645f-92d1-44a5-a99c-92b9031dcd9e",
+ "visible": true,
+ "parentCellId": "e70555d3-bf43-4b87-a620-c69507123ad5"
+ },
+ "e79c6989-0648-4465-be78-8d16d8b2b2b8": {
+ "path": "e79c6989-0648-4465-be78-8d16d8b2b2b8",
+ "cellName": "with-auth-trpc-tw.tsx",
+ "cellId": "e79c6989-0648-4465-be78-8d16d8b2b2b8",
+ "visible": true,
+ "parentCellId": "3e55e39b-63e0-4faf-8574-b36b1ec90270"
+ },
+ "efab3eee-f940-4181-92ab-d80a278f8c0a": {
+ "path": "efab3eee-f940-4181-92ab-d80a278f8c0a",
+ "cellName": "index.ts",
+ "cellId": "efab3eee-f940-4181-92ab-d80a278f8c0a",
+ "visible": true,
+ "parentCellId": "792e645f-92d1-44a5-a99c-92b9031dcd9e"
+ },
+ "1d2f1942-d500-44a2-a52f-67ec7559531c": {
+ "path": "1d2f1942-d500-44a2-a52f-67ec7559531c",
+ "cellName": "config",
+ "cellId": "1d2f1942-d500-44a2-a52f-67ec7559531c",
+ "visible": true,
+ "parentCellId": "792e645f-92d1-44a5-a99c-92b9031dcd9e"
+ },
+ "801eaefc-abfc-4ef8-afb1-657cc5748a73": {
+ "path": "801eaefc-abfc-4ef8-afb1-657cc5748a73",
+ "cellName": "trpc-app",
+ "cellId": "801eaefc-abfc-4ef8-afb1-657cc5748a73",
+ "visible": true,
+ "parentCellId": "b89c4d01-a3a5-464a-b911-ea775e99b290"
+ },
+ "02db1526-2589-4801-bcde-e60df7e323e8": {
+ "path": "02db1526-2589-4801-bcde-e60df7e323e8",
+ "cellName": "with-prisma.ts",
+ "cellId": "02db1526-2589-4801-bcde-e60df7e323e8",
+ "visible": true,
+ "parentCellId": "1d2f1942-d500-44a2-a52f-67ec7559531c"
+ },
+ "719262a2-cfc8-4f23-a9b2-8f714af0be6d": {
+ "path": "719262a2-cfc8-4f23-a9b2-8f714af0be6d",
+ "cellName": "with-auth-db.ts",
+ "cellId": "719262a2-cfc8-4f23-a9b2-8f714af0be6d",
+ "visible": true,
+ "parentCellId": "801eaefc-abfc-4ef8-afb1-657cc5748a73"
+ },
+ "fcd69b1a-c154-4875-87cb-8d9e44da639b": {
+ "path": "fcd69b1a-c154-4875-87cb-8d9e44da639b",
+ "cellName": "with-auth-prisma.ts",
+ "cellId": "fcd69b1a-c154-4875-87cb-8d9e44da639b",
+ "visible": true,
+ "parentCellId": "06ebab93-5008-47de-b800-a998caa6bc8f"
+ },
+ "a2eea980-78d7-4669-8f45-611617818b6c": {
+ "path": "a2eea980-78d7-4669-8f45-611617818b6c",
+ "cellName": "[Scaffolding] Select NextAuth Package - index.ts:L62-65",
+ "cellId": "a2eea980-78d7-4669-8f45-611617818b6c",
+ "visible": true,
+ "parentCellId": "9d353c27-f968-4ddf-b513-4ea7e667a306"
+ },
+ "cli/src/installers/index.ts-simstep-f70bea20-ed17-483b-a458-8a62176faca4": {
+ "path": "cli/src/installers/index.ts-simstep-f70bea20-ed17-483b-a458-8a62176faca4",
+ "fileName": "index.ts",
+ "wiki": "The `create-t3-app` CLI is executed, and the user selects 'nextAuth' as one of the packages to install. This selection is used to determine which installer logic to run.",
+ "cellName": "[Scaffolding] Select NextAuth Package - index.ts:L62-65",
+ "cellId": "a2eea980-78d7-4669-8f45-611617818b6c",
+ "visible": true,
+ "startLine": 62,
+ "endLine": 65,
+ "parentCellId": "9d353c27-f968-4ddf-b513-4ea7e667a306",
+ "parentPath": "cli/src/installers/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Set up authentication using NextAuth.js",
+ "simStepId": "f70bea20-ed17-483b-a458-8a62176faca4"
+ }
+ ]
+ },
+ "169f3a4d-8d19-4d99-af9b-1e517017fded": {
+ "path": "169f3a4d-8d19-4d99-af9b-1e517017fded",
+ "cellName": "[Scaffolding] Determine and Prepare Auth Files - nextAuth.ts:L9-42",
+ "cellId": "169f3a4d-8d19-4d99-af9b-1e517017fded",
+ "visible": true,
+ "parentCellId": "a4d0176d-eaec-4094-a1fd-bc289e6d7458"
+ },
+ "cli/src/installers/nextAuth.ts-simstep-979a587d-9993-4855-bae6-b2d84b9caa02": {
+ "path": "cli/src/installers/nextAuth.ts-simstep-979a587d-9993-4855-bae6-b2d84b9caa02",
+ "fileName": "nextAuth.ts",
+ "wiki": "The `nextAuthInstaller` runs. It adds the `next-auth` and `@auth/prisma-adapter` dependencies. It then determines the correct template files to use based on the project configuration (e.g., using Prisma), defining source and destination paths for the API handler and configuration files.",
+ "cellName": "[Scaffolding] Determine and Prepare Auth Files - nextAuth.ts:L9-42",
+ "cellId": "169f3a4d-8d19-4d99-af9b-1e517017fded",
+ "visible": true,
+ "startLine": 9,
+ "endLine": 42,
+ "parentCellId": "a4d0176d-eaec-4094-a1fd-bc289e6d7458",
+ "parentPath": "cli/src/installers/nextAuth.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Set up authentication using NextAuth.js",
+ "simStepId": "979a587d-9993-4855-bae6-b2d84b9caa02"
+ }
+ ]
+ },
+ "6ca52bcf-5157-4a2a-ac62-f1dd8860c5b2": {
+ "path": "6ca52bcf-5157-4a2a-ac62-f1dd8860c5b2",
+ "cellName": "[Scaffolding] Copy Auth Files into Project - nextAuth.ts:L44-46",
+ "cellId": "6ca52bcf-5157-4a2a-ac62-f1dd8860c5b2",
+ "visible": true,
+ "parentCellId": "a4d0176d-eaec-4094-a1fd-bc289e6d7458"
+ },
+ "cli/src/installers/nextAuth.ts-simstep-447bee75-fc5a-460c-b086-c061d70f93e5": {
+ "path": "cli/src/installers/nextAuth.ts-simstep-447bee75-fc5a-460c-b086-c061d70f93e5",
+ "fileName": "nextAuth.ts",
+ "wiki": "The file system utility copies the necessary NextAuth.js files from the `create-t3-app` template directory into the newly generated project. This includes the API route handler, the ORM-specific configuration, and the main auth index file, effectively setting up the authentication boilerplate.",
+ "cellName": "[Scaffolding] Copy Auth Files into Project - nextAuth.ts:L44-46",
+ "cellId": "6ca52bcf-5157-4a2a-ac62-f1dd8860c5b2",
+ "visible": true,
+ "startLine": 44,
+ "endLine": 46,
+ "parentCellId": "a4d0176d-eaec-4094-a1fd-bc289e6d7458",
+ "parentPath": "cli/src/installers/nextAuth.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Set up authentication using NextAuth.js",
+ "simStepId": "447bee75-fc5a-460c-b086-c061d70f93e5"
+ }
+ ]
+ },
+ "a512298a-9dba-4bca-8d3f-52936b73e86a": {
+ "path": "a512298a-9dba-4bca-8d3f-52936b73e86a",
+ "cellName": "[Runtime] Client Requests Session Data - with-auth-trpc-tw.tsx:L59",
+ "cellId": "a512298a-9dba-4bca-8d3f-52936b73e86a",
+ "visible": true,
+ "parentCellId": "e79c6989-0648-4465-be78-8d16d8b2b2b8"
+ },
+ "cli/template/extras/src/pages/index/with-auth-trpc-tw.tsx-simstep-1621d9a7-9cba-4d68-9d62-fa20a7f13dc7": {
+ "path": "cli/template/extras/src/pages/index/with-auth-trpc-tw.tsx-simstep-1621d9a7-9cba-4d68-9d62-fa20a7f13dc7",
+ "fileName": "with-auth-trpc-tw.tsx",
+ "wiki": "The `useSession` hook makes a client-side API call to the `/api/auth/session` endpoint to get the current session information.",
+ "cellName": "[Runtime] Client Requests Session Data - with-auth-trpc-tw.tsx:L59",
+ "cellId": "a512298a-9dba-4bca-8d3f-52936b73e86a",
+ "visible": true,
+ "startLine": 59,
+ "endLine": 59,
+ "parentCellId": "e79c6989-0648-4465-be78-8d16d8b2b2b8",
+ "parentPath": "cli/template/extras/src/pages/index/with-auth-trpc-tw.tsx",
+ "simSteps": [
+ {
+ "simulationKey": "Set up authentication using NextAuth.js",
+ "simStepId": "1621d9a7-9cba-4d68-9d62-fa20a7f13dc7"
+ }
+ ]
+ },
+ "6179e1d1-cef5-4852-9925-2575e6b8b2f7": {
+ "path": "6179e1d1-cef5-4852-9925-2575e6b8b2f7",
+ "cellName": "[Runtime] Load Auth Configuration with DB Adapter - with-prisma.ts:L33-56",
+ "cellId": "6179e1d1-cef5-4852-9925-2575e6b8b2f7",
+ "visible": true,
+ "parentCellId": "02db1526-2589-4801-bcde-e60df7e323e8"
+ },
+ "cli/template/extras/src/server/auth/config/with-prisma.ts-simstep-a015b59c-1f2a-4c21-bb5c-b980f96161d5": {
+ "path": "cli/template/extras/src/server/auth/config/with-prisma.ts-simstep-a015b59c-1f2a-4c21-bb5c-b980f96161d5",
+ "fileName": "with-prisma.ts",
+ "wiki": "NextAuth.js loads the configuration from `authConfig`. This configuration specifies using the Prisma adapter to interact with the database for session, user, and account management. It also defines callbacks to customize session data.",
+ "cellName": "[Runtime] Load Auth Configuration with DB Adapter - with-prisma.ts:L33-56",
+ "cellId": "6179e1d1-cef5-4852-9925-2575e6b8b2f7",
+ "visible": true,
+ "startLine": 33,
+ "endLine": 56,
+ "parentCellId": "02db1526-2589-4801-bcde-e60df7e323e8",
+ "parentPath": "cli/template/extras/src/server/auth/config/with-prisma.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Set up authentication using NextAuth.js",
+ "simStepId": "a015b59c-1f2a-4c21-bb5c-b980f96161d5"
+ }
+ ]
+ },
+ "9f72d2bd-5c83-4c61-a68f-d6d66ff726d7": {
+ "path": "9f72d2bd-5c83-4c61-a68f-d6d66ff726d7",
+ "cellName": "[Runtime] Frontend Renders UI with Session Data - with-auth-trpc-tw.tsx:L69-70",
+ "cellId": "9f72d2bd-5c83-4c61-a68f-d6d66ff726d7",
+ "visible": true,
+ "parentCellId": "e79c6989-0648-4465-be78-8d16d8b2b2b8"
+ },
+ "cli/template/extras/src/pages/index/with-auth-trpc-tw.tsx-simstep-6bad09b8-afb0-407e-8ffe-05d7c4b6e50a": {
+ "path": "cli/template/extras/src/pages/index/with-auth-trpc-tw.tsx-simstep-6bad09b8-afb0-407e-8ffe-05d7c4b6e50a",
+ "fileName": "with-auth-trpc-tw.tsx",
+ "wiki": "The client-side `useSession` hook receives the session data. This triggers a re-render of the `AuthShowcase` component, which now displays a welcome message with the user's name and enables the tRPC query for a secret message.",
+ "cellName": "[Runtime] Frontend Renders UI with Session Data - with-auth-trpc-tw.tsx:L69-70",
+ "cellId": "9f72d2bd-5c83-4c61-a68f-d6d66ff726d7",
+ "visible": true,
+ "startLine": 69,
+ "endLine": 70,
+ "parentCellId": "e79c6989-0648-4465-be78-8d16d8b2b2b8",
+ "parentPath": "cli/template/extras/src/pages/index/with-auth-trpc-tw.tsx",
+ "simSteps": [
+ {
+ "simulationKey": "Set up authentication using NextAuth.js",
+ "simStepId": "6bad09b8-afb0-407e-8ffe-05d7c4b6e50a"
+ }
+ ]
+ },
+ "9d66c615-14cd-436e-8ffe-efb75b44a93d": {
+ "path": "9d66c615-14cd-436e-8ffe-efb75b44a93d",
+ "cellName": "[Runtime] Protected Procedure Middleware Verifies Session - with-auth-db.ts:L123-133",
+ "cellId": "9d66c615-14cd-436e-8ffe-efb75b44a93d",
+ "visible": true,
+ "parentCellId": "719262a2-cfc8-4f23-a9b2-8f714af0be6d"
+ },
+ "cli/template/extras/src/server/api/trpc-app/with-auth-db.ts-simstep-a685579d-061d-4396-a2d7-a4af2ea6de50": {
+ "path": "cli/template/extras/src/server/api/trpc-app/with-auth-db.ts-simstep-a685579d-061d-4396-a2d7-a4af2ea6de50",
+ "fileName": "with-auth-db.ts",
+ "wiki": "On the server, the tRPC request is handled. Before the resolver logic is executed, the `protectedProcedure` middleware runs. It checks the request context to ensure a valid user session exists.",
+ "cellName": "[Runtime] Protected Procedure Middleware Verifies Session - with-auth-db.ts:L123-133",
+ "cellId": "9d66c615-14cd-436e-8ffe-efb75b44a93d",
+ "visible": true,
+ "startLine": 123,
+ "endLine": 133,
+ "parentCellId": "719262a2-cfc8-4f23-a9b2-8f714af0be6d",
+ "parentPath": "cli/template/extras/src/server/api/trpc-app/with-auth-db.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Set up authentication using NextAuth.js",
+ "simStepId": "a685579d-061d-4396-a2d7-a4af2ea6de50"
+ }
+ ]
+ },
+ "680768d5-64c0-4f8d-be33-11ca0a4c0d3a": {
+ "path": "680768d5-64c0-4f8d-be33-11ca0a4c0d3a",
+ "cellName": "[Runtime] Resolver Executes and Returns Secret Data - with-auth-prisma.ts:L38-40",
+ "cellId": "680768d5-64c0-4f8d-be33-11ca0a4c0d3a",
+ "visible": true,
+ "parentCellId": "fcd69b1a-c154-4875-87cb-8d9e44da639b"
+ },
+ "cli/template/extras/src/server/api/routers/post/with-auth-prisma.ts-simstep-4499ec8c-9843-4f07-8954-f027e8c6e149": {
+ "path": "cli/template/extras/src/server/api/routers/post/with-auth-prisma.ts-simstep-4499ec8c-9843-4f07-8954-f027e8c6e149",
+ "fileName": "with-auth-prisma.ts",
+ "wiki": "The `getSecretMessage` resolver, now confirmed to be accessed by an authenticated user, executes its logic and returns a secret message.",
+ "cellName": "[Runtime] Resolver Executes and Returns Secret Data - with-auth-prisma.ts:L38-40",
+ "cellId": "680768d5-64c0-4f8d-be33-11ca0a4c0d3a",
+ "visible": true,
+ "startLine": 38,
+ "endLine": 40,
+ "parentCellId": "fcd69b1a-c154-4875-87cb-8d9e44da639b",
+ "parentPath": "cli/template/extras/src/server/api/routers/post/with-auth-prisma.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Set up authentication using NextAuth.js",
+ "simStepId": "4499ec8c-9843-4f07-8954-f027e8c6e149"
+ }
+ ]
+ },
+ "bab9190f-6722-4566-a1ad-aa24cadd8a52": {
+ "path": "bab9190f-6722-4566-a1ad-aa24cadd8a52",
+ "cellName": "[Runtime] Frontend Renders Protected Data - with-auth-trpc-tw.tsx:L70",
+ "cellId": "bab9190f-6722-4566-a1ad-aa24cadd8a52",
+ "visible": true,
+ "parentCellId": "e79c6989-0648-4465-be78-8d16d8b2b2b8"
+ },
+ "cli/template/extras/src/pages/index/with-auth-trpc-tw.tsx-simstep-f6138753-dab0-4fbf-ab35-638ab9d27900": {
+ "path": "cli/template/extras/src/pages/index/with-auth-trpc-tw.tsx-simstep-f6138753-dab0-4fbf-ab35-638ab9d27900",
+ "fileName": "with-auth-trpc-tw.tsx",
+ "wiki": "The `useQuery` hook receives the secret message from the API call, triggering a final re-render of the `AuthShowcase` component to display the protected data.",
+ "cellName": "[Runtime] Frontend Renders Protected Data - with-auth-trpc-tw.tsx:L70",
+ "cellId": "bab9190f-6722-4566-a1ad-aa24cadd8a52",
+ "visible": true,
+ "startLine": 70,
+ "endLine": 70,
+ "parentCellId": "e79c6989-0648-4465-be78-8d16d8b2b2b8",
+ "parentPath": "cli/template/extras/src/pages/index/with-auth-trpc-tw.tsx",
+ "simSteps": [
+ {
+ "simulationKey": "Set up authentication using NextAuth.js",
+ "simStepId": "f6138753-dab0-4fbf-ab35-638ab9d27900"
+ }
+ ]
+ },
+ "95d6db55-5b63-4fc0-95eb-93c5c639aae9": {
+ "path": "95d6db55-5b63-4fc0-95eb-93c5c639aae9",
+ "cellName": "[Scaffolding] Trigger\nNextAuth Installer",
+ "cellId": "95d6db55-5b63-4fc0-95eb-93c5c639aae9",
+ "visible": true,
+ "parentCellId": "b7802ecf-b170-4bbb-b97c-9c22247eceab"
+ },
+ "generated-edge-simstep-b54b26ac-dc82-4312-b041-95a820e16f2b-95d6db55-5b63-4fc0-95eb-93c5c639aae9": {
+ "path": "generated-edge-simstep-b54b26ac-dc82-4312-b041-95a820e16f2b-95d6db55-5b63-4fc0-95eb-93c5c639aae9",
+ "fileName": "index.ts",
+ "cellName": "[Scaffolding] Trigger NextAuth Installer",
+ "cellId": "95d6db55-5b63-4fc0-95eb-93c5c639aae9",
+ "visible": true,
+ "startLine": 64,
+ "endLine": 64,
+ "parentCellId": "9d353c27-f968-4ddf-b513-4ea7e667a306",
+ "parentPath": "cli/src/installers/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Set up authentication using NextAuth.js",
+ "simStepId": "b54b26ac-dc82-4312-b041-95a820e16f2b"
+ }
+ ]
+ },
+ "04744038-130c-4ea9-8f53-f6c68669f405": {
+ "path": "04744038-130c-4ea9-8f53-f6c68669f405",
+ "cellName": "[Scaffolding] File\nPaths for\nCopying",
+ "cellId": "04744038-130c-4ea9-8f53-f6c68669f405",
+ "visible": true,
+ "parentCellId": "a4d0176d-eaec-4094-a1fd-bc289e6d7458"
+ },
+ "generated-edge-simstep-0429d8fa-ce25-4f7e-900b-de8ec92ace7a-04744038-130c-4ea9-8f53-f6c68669f405": {
+ "path": "generated-edge-simstep-0429d8fa-ce25-4f7e-900b-de8ec92ace7a-04744038-130c-4ea9-8f53-f6c68669f405",
+ "fileName": "nextAuth.ts",
+ "cellName": "[Scaffolding] File Paths for Copying",
+ "cellId": "04744038-130c-4ea9-8f53-f6c68669f405",
+ "visible": true,
+ "startLine": 44,
+ "endLine": 46,
+ "parentCellId": "a4d0176d-eaec-4094-a1fd-bc289e6d7458",
+ "parentPath": "cli/src/installers/nextAuth.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Set up authentication using NextAuth.js",
+ "simStepId": "0429d8fa-ce25-4f7e-900b-de8ec92ace7a"
+ }
+ ]
+ },
+ "0fb31c20-8330-40f8-9f79-7e3abf0744f4": {
+ "path": "0fb31c20-8330-40f8-9f79-7e3abf0744f4",
+ "cellName": "[Runtime] Page\nLoad Initiates\nSession Check",
+ "cellId": "0fb31c20-8330-40f8-9f79-7e3abf0744f4",
+ "visible": true,
+ "parentCellId": "31605429-bdf9-44a1-9ce3-f7234ef99f87"
+ },
+ "generated-edge-simstep-f2f8c5e1-844d-4c6e-97e1-cd6c6f93b4d0-0fb31c20-8330-40f8-9f79-7e3abf0744f4": {
+ "path": "generated-edge-simstep-f2f8c5e1-844d-4c6e-97e1-cd6c6f93b4d0-0fb31c20-8330-40f8-9f79-7e3abf0744f4",
+ "fileName": "with-auth-trpc-tw.tsx",
+ "cellName": "[Runtime] Page Load Initiates Session Check",
+ "cellId": "0fb31c20-8330-40f8-9f79-7e3abf0744f4",
+ "visible": true,
+ "startLine": 59,
+ "endLine": 59,
+ "parentCellId": "e79c6989-0648-4465-be78-8d16d8b2b2b8",
+ "parentPath": "cli/template/extras/src/pages/index/with-auth-trpc-tw.tsx",
+ "simSteps": [
+ {
+ "simulationKey": "Set up authentication using NextAuth.js",
+ "simStepId": "f2f8c5e1-844d-4c6e-97e1-cd6c6f93b4d0"
+ }
+ ]
+ },
+ "bd686086-86a5-4f00-ae4b-978fa6ce76f2": {
+ "path": "bd686086-86a5-4f00-ae4b-978fa6ce76f2",
+ "cellName": "[Runtime] Auth\nAPI Route\nHandles Request",
+ "cellId": "bd686086-86a5-4f00-ae4b-978fa6ce76f2",
+ "visible": true,
+ "parentCellId": "7dc18668-256e-49aa-a3a2-ae908b99e905"
+ },
+ "generated-edge-simstep-addf4232-963a-4700-af13-3a04cc8d5b3c-bd686086-86a5-4f00-ae4b-978fa6ce76f2": {
+ "path": "generated-edge-simstep-addf4232-963a-4700-af13-3a04cc8d5b3c-bd686086-86a5-4f00-ae4b-978fa6ce76f2",
+ "fileName": "index.ts",
+ "cellName": "[Runtime] Auth API Route Handles Request",
+ "cellId": "bd686086-86a5-4f00-ae4b-978fa6ce76f2",
+ "visible": true,
+ "startLine": 6,
+ "endLine": 6,
+ "parentCellId": "efab3eee-f940-4181-92ab-d80a278f8c0a",
+ "parentPath": "cli/template/extras/src/server/auth/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Set up authentication using NextAuth.js",
+ "simStepId": "addf4232-963a-4700-af13-3a04cc8d5b3c"
+ }
+ ]
+ },
+ "6f54ede3-90b5-4528-885a-ff9380a3ee96": {
+ "path": "6f54ede3-90b5-4528-885a-ff9380a3ee96",
+ "cellName": "[Runtime] Session\nData Returned\nto Client",
+ "cellId": "6f54ede3-90b5-4528-885a-ff9380a3ee96",
+ "visible": true,
+ "parentCellId": "7dc18668-256e-49aa-a3a2-ae908b99e905"
+ },
+ "generated-edge-simstep-7fef5ad7-0bb9-4f49-b833-a920d5c212b2-6f54ede3-90b5-4528-885a-ff9380a3ee96": {
+ "path": "generated-edge-simstep-7fef5ad7-0bb9-4f49-b833-a920d5c212b2-6f54ede3-90b5-4528-885a-ff9380a3ee96",
+ "fileName": "with-prisma.ts",
+ "cellName": "[Runtime] Session Data Returned to Client",
+ "cellId": "6f54ede3-90b5-4528-885a-ff9380a3ee96",
+ "visible": true,
+ "startLine": 48,
+ "endLine": 54,
+ "parentCellId": "02db1526-2589-4801-bcde-e60df7e323e8",
+ "parentPath": "cli/template/extras/src/server/auth/config/with-prisma.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Set up authentication using NextAuth.js",
+ "simStepId": "7fef5ad7-0bb9-4f49-b833-a920d5c212b2"
+ }
+ ]
+ },
+ "7f821db3-2427-4e78-8ad1-92542cf827ab": {
+ "path": "7f821db3-2427-4e78-8ad1-92542cf827ab",
+ "cellName": "[Runtime] Client\nTriggers Protected\ntRPC Query",
+ "cellId": "7f821db3-2427-4e78-8ad1-92542cf827ab",
+ "visible": true,
+ "parentCellId": "7dc18668-256e-49aa-a3a2-ae908b99e905"
+ },
+ "generated-edge-simstep-6057145f-d6b7-41ed-ba18-24c74dde34a6-7f821db3-2427-4e78-8ad1-92542cf827ab": {
+ "path": "generated-edge-simstep-6057145f-d6b7-41ed-ba18-24c74dde34a6-7f821db3-2427-4e78-8ad1-92542cf827ab",
+ "fileName": "with-auth-trpc-tw.tsx",
+ "cellName": "[Runtime] Client Triggers Protected tRPC Query",
+ "cellId": "7f821db3-2427-4e78-8ad1-92542cf827ab",
+ "visible": true,
+ "startLine": 61,
+ "endLine": 63,
+ "parentCellId": "e79c6989-0648-4465-be78-8d16d8b2b2b8",
+ "parentPath": "cli/template/extras/src/pages/index/with-auth-trpc-tw.tsx",
+ "simSteps": [
+ {
+ "simulationKey": "Set up authentication using NextAuth.js",
+ "simStepId": "6057145f-d6b7-41ed-ba18-24c74dde34a6"
+ }
+ ]
+ },
+ "a1232a9e-ee54-4d7a-b352-d2bd842a0ab0": {
+ "path": "a1232a9e-ee54-4d7a-b352-d2bd842a0ab0",
+ "cellName": "[Runtime] Authentication\nConfirmed, Control\nPassed to\nResolver",
+ "cellId": "a1232a9e-ee54-4d7a-b352-d2bd842a0ab0",
+ "visible": true,
+ "parentCellId": "b89c4d01-a3a5-464a-b911-ea775e99b290"
+ },
+ "generated-edge-simstep-661f19d8-ac62-4c14-9dea-92b5deff0f51-a1232a9e-ee54-4d7a-b352-d2bd842a0ab0": {
+ "path": "generated-edge-simstep-661f19d8-ac62-4c14-9dea-92b5deff0f51-a1232a9e-ee54-4d7a-b352-d2bd842a0ab0",
+ "fileName": "with-auth-db.ts",
+ "cellName": "[Runtime] Authentication Confirmed, Control Passed to Resolver",
+ "cellId": "a1232a9e-ee54-4d7a-b352-d2bd842a0ab0",
+ "visible": true,
+ "startLine": 127,
+ "endLine": 127,
+ "parentCellId": "719262a2-cfc8-4f23-a9b2-8f714af0be6d",
+ "parentPath": "cli/template/extras/src/server/api/trpc-app/with-auth-db.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Set up authentication using NextAuth.js",
+ "simStepId": "661f19d8-ac62-4c14-9dea-92b5deff0f51"
+ }
+ ]
+ },
+ "a5eefd48-f544-4ee6-a06d-68cc973d32f8": {
+ "path": "a5eefd48-f544-4ee6-a06d-68cc973d32f8",
+ "cellName": "[Runtime] Protected\nData Returned\nto Client",
+ "cellId": "a5eefd48-f544-4ee6-a06d-68cc973d32f8",
+ "visible": true,
+ "parentCellId": "7dc18668-256e-49aa-a3a2-ae908b99e905"
+ },
+ "generated-edge-simstep-6983d3db-c70c-44fc-a4a5-af42d2a00121-a5eefd48-f544-4ee6-a06d-68cc973d32f8": {
+ "path": "generated-edge-simstep-6983d3db-c70c-44fc-a4a5-af42d2a00121-a5eefd48-f544-4ee6-a06d-68cc973d32f8",
+ "fileName": "with-auth-prisma.ts",
+ "cellName": "[Runtime] Protected Data Returned to Client",
+ "cellId": "a5eefd48-f544-4ee6-a06d-68cc973d32f8",
+ "visible": true,
+ "startLine": 39,
+ "endLine": 39,
+ "parentCellId": "fcd69b1a-c154-4875-87cb-8d9e44da639b",
+ "parentPath": "cli/template/extras/src/server/api/routers/post/with-auth-prisma.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Set up authentication using NextAuth.js",
+ "simStepId": "6983d3db-c70c-44fc-a4a5-af42d2a00121"
+ }
+ ]
+ },
+ "177076bf-da3d-4009-a28e-8beea8347e59": {
+ "path": "177076bf-da3d-4009-a28e-8beea8347e59",
+ "cellName": "Project Creation Initiated - createProject.ts:L29-36",
+ "cellId": "177076bf-da3d-4009-a28e-8beea8347e59",
+ "visible": true,
+ "parentCellId": "2bddd99c-0b89-4485-89a0-b9fceca09629"
+ },
+ "cli/src/helpers/createProject.ts-simstep-de4e966a-ceca-43fb-88b6-975128e1ab21": {
+ "path": "cli/src/helpers/createProject.ts-simstep-de4e966a-ceca-43fb-88b6-975128e1ab21",
+ "fileName": "createProject.ts",
+ "wiki": "The project creation process begins inside the `createProject` function. It receives the user's choices for the project name, selected packages, and other configuration options.",
+ "cellName": "Project Creation Initiated - createProject.ts:L29-36",
+ "cellId": "177076bf-da3d-4009-a28e-8beea8347e59",
+ "visible": true,
+ "startLine": 29,
+ "endLine": 36,
+ "parentCellId": "2bddd99c-0b89-4485-89a0-b9fceca09629",
+ "parentPath": "cli/src/helpers/createProject.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Generate dynamic, interconnected boilerplate code",
+ "simStepId": "de4e966a-ceca-43fb-88b6-975128e1ab21"
+ }
+ ]
+ },
+ "8af610d5-4a33-4f74-a9f3-457adc87cee9": {
+ "path": "8af610d5-4a33-4f74-a9f3-457adc87cee9",
+ "cellName": "Iterate and Run Package Installers - installPackages.ts:L18-28",
+ "cellId": "8af610d5-4a33-4f74-a9f3-457adc87cee9",
+ "visible": true,
+ "parentCellId": "4307f16d-417e-4e54-a372-62eb4617c708"
+ },
+ "cli/src/helpers/installPackages.ts-simstep-1c34f5ac-cb00-4e58-821f-042443cdf4a7": {
+ "path": "cli/src/helpers/installPackages.ts-simstep-1c34f5ac-cb00-4e58-821f-042443cdf4a7",
+ "fileName": "installPackages.ts",
+ "wiki": "The `installPackages` function iterates through the map of packages. For each package marked `inUse`, it invokes the corresponding installer function to add the specific boilerplate for that technology.",
+ "cellName": "Iterate and Run Package Installers - installPackages.ts:L18-28",
+ "cellId": "8af610d5-4a33-4f74-a9f3-457adc87cee9",
+ "visible": true,
+ "startLine": 18,
+ "endLine": 28,
+ "parentCellId": "4307f16d-417e-4e54-a372-62eb4617c708",
+ "parentPath": "cli/src/helpers/installPackages.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Generate dynamic, interconnected boilerplate code",
+ "simStepId": "1c34f5ac-cb00-4e58-821f-042443cdf4a7"
+ }
+ ]
+ },
+ "4c50b970-c419-4242-8081-969c1976de48": {
+ "path": "4c50b970-c419-4242-8081-969c1976de48",
+ "cellName": "Select tRPC Boilerplate - trpc.ts:L59-70",
+ "cellId": "4c50b970-c419-4242-8081-969c1976de48",
+ "visible": true,
+ "parentCellId": "7499353d-8b6f-4564-958b-c303fd5d636f"
+ },
+ "cli/src/installers/trpc.ts-simstep-14ff0e0e-dfa1-4779-b5ea-48140ee16cec": {
+ "path": "cli/src/installers/trpc.ts-simstep-14ff0e0e-dfa1-4779-b5ea-48140ee16cec",
+ "fileName": "trpc.ts",
+ "wiki": "Inside the `trpcInstaller`, the code checks which other packages (like Auth and Prisma) are being used. Based on these combinations, it dynamically selects the correct template file for the example tRPC router. In this case, since NextAuth and Prisma are enabled, it chooses 'with-auth-prisma.ts'.",
+ "cellName": "Select tRPC Boilerplate - trpc.ts:L59-70",
+ "cellId": "4c50b970-c419-4242-8081-969c1976de48",
+ "visible": true,
+ "startLine": 59,
+ "endLine": 70,
+ "parentCellId": "7499353d-8b6f-4564-958b-c303fd5d636f",
+ "parentPath": "cli/src/installers/trpc.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Generate dynamic, interconnected boilerplate code",
+ "simStepId": "14ff0e0e-dfa1-4779-b5ea-48140ee16cec"
+ }
+ ]
+ },
+ "8b85fe88-0901-4170-9de0-5020741016c7": {
+ "path": "8b85fe88-0901-4170-9de0-5020741016c7",
+ "cellName": "Select Frontend Page Component - createProject.ts:L72",
+ "cellId": "8b85fe88-0901-4170-9de0-5020741016c7",
+ "visible": true,
+ "parentCellId": "2bddd99c-0b89-4485-89a0-b9fceca09629"
+ },
+ "cli/src/helpers/createProject.ts-simstep-226a5291-4ded-4539-b9a6-1786a4cbe8ef": {
+ "path": "cli/src/helpers/createProject.ts-simstep-226a5291-4ded-4539-b9a6-1786a4cbe8ef",
+ "fileName": "createProject.ts",
+ "wiki": "After all package installers have run, control returns to `createProject`, which then calls `selectPageFile` to determine the correct frontend component for the main page based on the user's selections.",
+ "cellName": "Select Frontend Page Component - createProject.ts:L72",
+ "cellId": "8b85fe88-0901-4170-9de0-5020741016c7",
+ "visible": true,
+ "startLine": 72,
+ "endLine": 72,
+ "parentCellId": "2bddd99c-0b89-4485-89a0-b9fceca09629",
+ "parentPath": "cli/src/helpers/createProject.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Generate dynamic, interconnected boilerplate code",
+ "simStepId": "226a5291-4ded-4539-b9a6-1786a4cbe8ef"
+ }
+ ]
+ },
+ "e6cd2ba5-772e-432a-8f03-f6f79e150e64": {
+ "path": "e6cd2ba5-772e-432a-8f03-f6f79e150e64",
+ "cellName": "Dynamically Choose Page File - selectBoilerplate.ts:L131-132",
+ "cellId": "e6cd2ba5-772e-432a-8f03-f6f79e150e64",
+ "visible": true,
+ "parentCellId": "deb9ac89-9f73-438c-a0c6-19e615cc4422"
+ },
+ "cli/src/helpers/selectBoilerplate.ts-simstep-7b8262b2-328c-45a8-9c08-a6e0e84cb48b": {
+ "path": "cli/src/helpers/selectBoilerplate.ts-simstep-7b8262b2-328c-45a8-9c08-a6e0e84cb48b",
+ "fileName": "selectBoilerplate.ts",
+ "wiki": "Inside `selectPageFile`, a series of conditional checks determines the correct React component to use for the project's main page. With tRPC, Tailwind CSS, and NextAuth selected, the file `with-auth-trpc-tw.tsx` is chosen.",
+ "cellName": "Dynamically Choose Page File - selectBoilerplate.ts:L131-132",
+ "cellId": "e6cd2ba5-772e-432a-8f03-f6f79e150e64",
+ "visible": true,
+ "startLine": 131,
+ "endLine": 132,
+ "parentCellId": "deb9ac89-9f73-438c-a0c6-19e615cc4422",
+ "parentPath": "cli/src/helpers/selectBoilerplate.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Generate dynamic, interconnected boilerplate code",
+ "simStepId": "7b8262b2-328c-45a8-9c08-a6e0e84cb48b"
+ }
+ ]
+ },
+ "9cb9b456-7ea9-444f-a2f3-675e6738f009": {
+ "path": "9cb9b456-7ea9-444f-a2f3-675e6738f009",
+ "cellName": "Configuration ->\nPackage Installer",
+ "cellId": "9cb9b456-7ea9-444f-a2f3-675e6738f009",
+ "visible": true,
+ "parentCellId": "69671728-1902-4f50-b1a3-fd96f8df7d5c"
+ },
+ "generated-edge-simstep-a420b1fc-f902-4c8c-8b96-3e1ce086385d-9cb9b456-7ea9-444f-a2f3-675e6738f009": {
+ "path": "generated-edge-simstep-a420b1fc-f902-4c8c-8b96-3e1ce086385d-9cb9b456-7ea9-444f-a2f3-675e6738f009",
+ "fileName": "createProject.ts",
+ "cellName": "Configuration -> Package Installer",
+ "cellId": "9cb9b456-7ea9-444f-a2f3-675e6738f009",
+ "visible": true,
+ "startLine": 52,
+ "endLine": 61,
+ "parentCellId": "2bddd99c-0b89-4485-89a0-b9fceca09629",
+ "parentPath": "cli/src/helpers/createProject.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Generate dynamic, interconnected boilerplate code",
+ "simStepId": "a420b1fc-f902-4c8c-8b96-3e1ce086385d"
+ }
+ ]
+ },
+ "668f1aab-854f-48b0-a3cb-541172daa2f3": {
+ "path": "668f1aab-854f-48b0-a3cb-541172daa2f3",
+ "cellName": "Invoke tRPC\nInstaller",
+ "cellId": "668f1aab-854f-48b0-a3cb-541172daa2f3",
+ "visible": true,
+ "parentCellId": "2418c3df-0551-4276-94df-df1042ecbfa7"
+ },
+ "generated-edge-simstep-07489ec1-deeb-4c9b-8601-d0dfa0c5f840-668f1aab-854f-48b0-a3cb-541172daa2f3": {
+ "path": "generated-edge-simstep-07489ec1-deeb-4c9b-8601-d0dfa0c5f840-668f1aab-854f-48b0-a3cb-541172daa2f3",
+ "fileName": "installPackages.ts",
+ "cellName": "Invoke tRPC Installer",
+ "cellId": "668f1aab-854f-48b0-a3cb-541172daa2f3",
+ "visible": true,
+ "startLine": 21,
+ "endLine": 21,
+ "parentCellId": "4307f16d-417e-4e54-a372-62eb4617c708",
+ "parentPath": "cli/src/helpers/installPackages.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Generate dynamic, interconnected boilerplate code",
+ "simStepId": "07489ec1-deeb-4c9b-8601-d0dfa0c5f840"
+ }
+ ]
+ },
+ "10a59b71-51b3-4231-b7ba-1a746ce638a4": {
+ "path": "10a59b71-51b3-4231-b7ba-1a746ce638a4",
+ "cellName": "Copy tRPC\nRouter File",
+ "cellId": "10a59b71-51b3-4231-b7ba-1a746ce638a4",
+ "visible": true,
+ "parentCellId": "2418c3df-0551-4276-94df-df1042ecbfa7"
+ },
+ "generated-edge-simstep-f9d52577-4c0d-4800-805c-9b36ab0d95fa-10a59b71-51b3-4231-b7ba-1a746ce638a4": {
+ "path": "generated-edge-simstep-f9d52577-4c0d-4800-805c-9b36ab0d95fa-10a59b71-51b3-4231-b7ba-1a746ce638a4",
+ "fileName": "trpc.ts",
+ "cellName": "Copy tRPC Router File",
+ "cellId": "10a59b71-51b3-4231-b7ba-1a746ce638a4",
+ "visible": true,
+ "startLine": 131,
+ "endLine": 133,
+ "parentCellId": "7499353d-8b6f-4564-958b-c303fd5d636f",
+ "parentPath": "cli/src/installers/trpc.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Generate dynamic, interconnected boilerplate code",
+ "simStepId": "f9d52577-4c0d-4800-805c-9b36ab0d95fa"
+ }
+ ]
+ },
+ "2c10e351-4c6e-44ec-a223-152dfc06d401": {
+ "path": "2c10e351-4c6e-44ec-a223-152dfc06d401",
+ "cellName": "Configuration ->\nPage Selector",
+ "cellId": "2c10e351-4c6e-44ec-a223-152dfc06d401",
+ "visible": true,
+ "parentCellId": "69671728-1902-4f50-b1a3-fd96f8df7d5c"
+ },
+ "generated-edge-simstep-8816c70f-8e0f-485d-bd6e-f7838aee8e2e-2c10e351-4c6e-44ec-a223-152dfc06d401": {
+ "path": "generated-edge-simstep-8816c70f-8e0f-485d-bd6e-f7838aee8e2e-2c10e351-4c6e-44ec-a223-152dfc06d401",
+ "fileName": "createProject.ts",
+ "cellName": "Configuration -> Page Selector",
+ "cellId": "2c10e351-4c6e-44ec-a223-152dfc06d401",
+ "visible": true,
+ "startLine": 72,
+ "endLine": 72,
+ "parentCellId": "2bddd99c-0b89-4485-89a0-b9fceca09629",
+ "parentPath": "cli/src/helpers/createProject.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Generate dynamic, interconnected boilerplate code",
+ "simStepId": "8816c70f-8e0f-485d-bd6e-f7838aee8e2e"
+ }
+ ]
+ },
+ "01f6ab49-5bb1-4aaf-91a3-5ca2b53a8125": {
+ "path": "01f6ab49-5bb1-4aaf-91a3-5ca2b53a8125",
+ "cellName": "Flow 1 (App Router): Prompt for Router Choice - index.ts:L321-325",
+ "cellId": "01f6ab49-5bb1-4aaf-91a3-5ca2b53a8125",
+ "visible": true,
+ "parentCellId": "7922d5c7-279f-4886-817b-8dead6dd7e57"
+ },
+ "cli/src/cli/index.ts-simstep-785ad8f9-622a-49df-a3c8-99427a713789": {
+ "path": "cli/src/cli/index.ts-simstep-785ad8f9-622a-49df-a3c8-99427a713789",
+ "fileName": "index.ts",
+ "wiki": "The command-line interface starts and prompts the user to select various project options. One of the key prompts asks whether to use the modern Next.js App Router.",
+ "cellName": "Flow 1 (App Router): Prompt for Router Choice - index.ts:L321-325",
+ "cellId": "01f6ab49-5bb1-4aaf-91a3-5ca2b53a8125",
+ "visible": true,
+ "startLine": 321,
+ "endLine": 325,
+ "parentCellId": "7922d5c7-279f-4886-817b-8dead6dd7e57",
+ "parentPath": "cli/src/cli/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Support for both Next.js App Router and Pages Router",
+ "simStepId": "785ad8f9-622a-49df-a3c8-99427a713789"
+ }
+ ]
+ },
+ "4090eda9-db5b-4b1c-823c-ba960a6977f2": {
+ "path": "4090eda9-db5b-4b1c-823c-ba960a6977f2",
+ "cellName": "Flow 1 (App Router): Orchestrate Project Creation - index.ts:L51-59",
+ "cellId": "4090eda9-db5b-4b1c-823c-ba960a6977f2",
+ "visible": true,
+ "parentCellId": "a80e3f00-2d8f-40f0-9dbf-d127667352d0"
+ },
+ "cli/src/index.ts-simstep-6daed3eb-ef77-4da2-bbc1-f498c8a67973": {
+ "path": "cli/src/index.ts-simstep-6daed3eb-ef77-4da2-bbc1-f498c8a67973",
+ "fileName": "index.ts",
+ "wiki": "The main function receives the user's choices and initiates the project scaffolding process by calling `createProject`.",
+ "cellName": "Flow 1 (App Router): Orchestrate Project Creation - index.ts:L51-59",
+ "cellId": "4090eda9-db5b-4b1c-823c-ba960a6977f2",
+ "visible": true,
+ "startLine": 51,
+ "endLine": 59,
+ "parentCellId": "a80e3f00-2d8f-40f0-9dbf-d127667352d0",
+ "parentPath": "cli/src/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Support for both Next.js App Router and Pages Router",
+ "simStepId": "6daed3eb-ef77-4da2-bbc1-f498c8a67973"
+ }
+ ]
+ },
+ "50e88448-d3db-4998-be4e-d9e17e41f882": {
+ "path": "50e88448-d3db-4998-be4e-d9e17e41f882",
+ "cellName": "Flow 1 (App Router): Execute App Router Scaffolding Logic - createProject.ts:L64-72",
+ "cellId": "50e88448-d3db-4998-be4e-d9e17e41f882",
+ "visible": true,
+ "parentCellId": "2bddd99c-0b89-4485-89a0-b9fceca09629"
+ },
+ "cli/src/helpers/createProject.ts-simstep-deb6f16f-4059-42b2-8b21-7a611e68ccfe": {
+ "path": "cli/src/helpers/createProject.ts-simstep-deb6f16f-4059-42b2-8b21-7a611e68ccfe",
+ "fileName": "createProject.ts",
+ "wiki": "Inside `createProject`, the `appRouter` flag is checked. Since it's true, the code enters the `if` block to perform App Router-specific setup, including copying a dedicated `next.config.js` and calling functions to select the correct layout and page files.",
+ "cellName": "Flow 1 (App Router): Execute App Router Scaffolding Logic - createProject.ts:L64-72",
+ "cellId": "50e88448-d3db-4998-be4e-d9e17e41f882",
+ "visible": true,
+ "startLine": 64,
+ "endLine": 72,
+ "parentCellId": "2bddd99c-0b89-4485-89a0-b9fceca09629",
+ "parentPath": "cli/src/helpers/createProject.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Support for both Next.js App Router and Pages Router",
+ "simStepId": "deb6f16f-4059-42b2-8b21-7a611e68ccfe"
+ }
+ ]
+ },
+ "303d2b11-8dca-4b46-8220-2fecde934224": {
+ "path": "303d2b11-8dca-4b46-8220-2fecde934224",
+ "cellName": "Flow 1 (App Router): Select and Copy Boilerplate Files - selectBoilerplate.ts:L49-69",
+ "cellId": "303d2b11-8dca-4b46-8220-2fecde934224",
+ "visible": true,
+ "parentCellId": "deb9ac89-9f73-438c-a0c6-19e615cc4422"
+ },
+ "cli/src/helpers/selectBoilerplate.ts-simstep-76a15289-8c19-4b65-be3f-54d9b116435f": {
+ "path": "cli/src/helpers/selectBoilerplate.ts-simstep-76a15289-8c19-4b65-be3f-54d9b116435f",
+ "fileName": "selectBoilerplate.ts",
+ "wiki": "The `selectLayoutFile` and `selectPageFile` functions determine the correct template files (`layout.tsx`, `page.tsx`) based on the combination of selected packages (e.g., with tRPC, with Tailwind CSS) and copy them into the new project's `src/app/` directory.",
+ "cellName": "Flow 1 (App Router): Select and Copy Boilerplate Files - selectBoilerplate.ts:L49-69",
+ "cellId": "303d2b11-8dca-4b46-8220-2fecde934224",
+ "visible": true,
+ "startLine": 49,
+ "endLine": 69,
+ "parentCellId": "deb9ac89-9f73-438c-a0c6-19e615cc4422",
+ "parentPath": "cli/src/helpers/selectBoilerplate.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Support for both Next.js App Router and Pages Router",
+ "simStepId": "76a15289-8c19-4b65-be3f-54d9b116435f"
+ }
+ ]
+ },
+ "2085ac1b-1cdf-47e4-8cc2-4b0fee237328": {
+ "path": "2085ac1b-1cdf-47e4-8cc2-4b0fee237328",
+ "cellName": "Flow 1 (App Router): Configure tRPC for App Router - trpc.ts:L89-118",
+ "cellId": "2085ac1b-1cdf-47e4-8cc2-4b0fee237328",
+ "visible": true,
+ "parentCellId": "7499353d-8b6f-4564-958b-c303fd5d636f"
+ },
+ "cli/src/installers/trpc.ts-simstep-eae59e61-d018-47f3-b9f8-b76895ca2ecb": {
+ "path": "cli/src/installers/trpc.ts-simstep-eae59e61-d018-47f3-b9f8-b76895ca2ecb",
+ "fileName": "trpc.ts",
+ "wiki": "The tRPC installer receives the `appRouter: true` flag. It then copies the App Router-specific tRPC files, including the API route handler (`src/app/api/trpc/[trpc]/route.ts`) and the necessary client/server components (`src/trpc/server.ts`, `src/trpc/react.tsx`).",
+ "cellName": "Flow 1 (App Router): Configure tRPC for App Router - trpc.ts:L89-118",
+ "cellId": "2085ac1b-1cdf-47e4-8cc2-4b0fee237328",
+ "visible": true,
+ "startLine": 89,
+ "endLine": 118,
+ "parentCellId": "7499353d-8b6f-4564-958b-c303fd5d636f",
+ "parentPath": "cli/src/installers/trpc.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Support for both Next.js App Router and Pages Router",
+ "simStepId": "eae59e61-d018-47f3-b9f8-b76895ca2ecb"
+ }
+ ]
+ },
+ "750bb2a4-371e-48b4-94e1-f51c196c40b9": {
+ "path": "750bb2a4-371e-48b4-94e1-f51c196c40b9",
+ "cellName": "Flow 2 (Pages Router): Prompt for Router Choice - index.ts:L321-325",
+ "cellId": "750bb2a4-371e-48b4-94e1-f51c196c40b9",
+ "visible": true,
+ "parentCellId": "7922d5c7-279f-4886-817b-8dead6dd7e57"
+ },
+ "cli/src/cli/index.ts-simstep-b8de0499-94f5-445b-b8dd-e5161916a610": {
+ "path": "cli/src/cli/index.ts-simstep-b8de0499-94f5-445b-b8dd-e5161916a610",
+ "fileName": "index.ts",
+ "wiki": "The command-line interface starts and prompts the user to select various project options. One of the key prompts asks whether to use the modern Next.js App Router. The user declines.",
+ "cellName": "Flow 2 (Pages Router): Prompt for Router Choice - index.ts:L321-325",
+ "cellId": "750bb2a4-371e-48b4-94e1-f51c196c40b9",
+ "visible": true,
+ "startLine": 321,
+ "endLine": 325,
+ "parentCellId": "7922d5c7-279f-4886-817b-8dead6dd7e57",
+ "parentPath": "cli/src/cli/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Support for both Next.js App Router and Pages Router",
+ "simStepId": "b8de0499-94f5-445b-b8dd-e5161916a610"
+ }
+ ]
+ },
+ "a497d728-6923-4460-aa63-d4623a02ba55": {
+ "path": "a497d728-6923-4460-aa63-d4623a02ba55",
+ "cellName": "Flow 2 (Pages Router): Orchestrate Project Creation - index.ts:L51-59",
+ "cellId": "a497d728-6923-4460-aa63-d4623a02ba55",
+ "visible": true,
+ "parentCellId": "a80e3f00-2d8f-40f0-9dbf-d127667352d0"
+ },
+ "cli/src/index.ts-simstep-da6033d7-7ac6-43b2-a168-afd8efcb7f57": {
+ "path": "cli/src/index.ts-simstep-da6033d7-7ac6-43b2-a168-afd8efcb7f57",
+ "fileName": "index.ts",
+ "wiki": "The main function receives the user's choices and initiates the project scaffolding process by calling `createProject` with `appRouter` set to false.",
+ "cellName": "Flow 2 (Pages Router): Orchestrate Project Creation - index.ts:L51-59",
+ "cellId": "a497d728-6923-4460-aa63-d4623a02ba55",
+ "visible": true,
+ "startLine": 51,
+ "endLine": 59,
+ "parentCellId": "a80e3f00-2d8f-40f0-9dbf-d127667352d0",
+ "parentPath": "cli/src/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Support for both Next.js App Router and Pages Router",
+ "simStepId": "da6033d7-7ac6-43b2-a168-afd8efcb7f57"
+ }
+ ]
+ },
+ "a7d01d31-f935-4411-a5d6-51ba42fec14f": {
+ "path": "a7d01d31-f935-4411-a5d6-51ba42fec14f",
+ "cellName": "Flow 2 (Pages Router): Execute Pages Router Scaffolding Logic - createProject.ts:L73-76",
+ "cellId": "a7d01d31-f935-4411-a5d6-51ba42fec14f",
+ "visible": true,
+ "parentCellId": "2bddd99c-0b89-4485-89a0-b9fceca09629"
+ },
+ "cli/src/helpers/createProject.ts-simstep-1b87a547-3c63-4cf1-b082-1739fd85dd23": {
+ "path": "cli/src/helpers/createProject.ts-simstep-1b87a547-3c63-4cf1-b082-1739fd85dd23",
+ "fileName": "createProject.ts",
+ "wiki": "Inside `createProject`, the `appRouter` flag is checked. Since it's false, the code enters the `else` block to perform Pages Router-specific setup by calling functions to select the correct `_app.tsx` and `index.tsx` files.",
+ "cellName": "Flow 2 (Pages Router): Execute Pages Router Scaffolding Logic - createProject.ts:L73-76",
+ "cellId": "a7d01d31-f935-4411-a5d6-51ba42fec14f",
+ "visible": true,
+ "startLine": 73,
+ "endLine": 76,
+ "parentCellId": "2bddd99c-0b89-4485-89a0-b9fceca09629",
+ "parentPath": "cli/src/helpers/createProject.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Support for both Next.js App Router and Pages Router",
+ "simStepId": "1b87a547-3c63-4cf1-b082-1739fd85dd23"
+ }
+ ]
+ },
+ "e7d9ebec-908c-4db6-88e6-623660fb7a1c": {
+ "path": "e7d9ebec-908c-4db6-88e6-623660fb7a1c",
+ "cellName": "Flow 2 (Pages Router): Select and Copy Boilerplate Files - selectBoilerplate.ts:L11-46",
+ "cellId": "e7d9ebec-908c-4db6-88e6-623660fb7a1c",
+ "visible": true,
+ "parentCellId": "deb9ac89-9f73-438c-a0c6-19e615cc4422"
+ },
+ "cli/src/helpers/selectBoilerplate.ts-simstep-a36df07d-a088-4a7e-bc05-53781cec063e": {
+ "path": "cli/src/helpers/selectBoilerplate.ts-simstep-a36df07d-a088-4a7e-bc05-53781cec063e",
+ "fileName": "selectBoilerplate.ts",
+ "wiki": "The `selectAppFile` and `selectIndexFile` functions determine the correct template files (`_app.tsx`, `index.tsx`) based on the combination of selected packages (e.g., with tRPC, with NextAuth) and copy them into the new project's `src/pages/` directory.",
+ "cellName": "Flow 2 (Pages Router): Select and Copy Boilerplate Files - selectBoilerplate.ts:L11-46",
+ "cellId": "e7d9ebec-908c-4db6-88e6-623660fb7a1c",
+ "visible": true,
+ "startLine": 11,
+ "endLine": 46,
+ "parentCellId": "deb9ac89-9f73-438c-a0c6-19e615cc4422",
+ "parentPath": "cli/src/helpers/selectBoilerplate.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Support for both Next.js App Router and Pages Router",
+ "simStepId": "a36df07d-a088-4a7e-bc05-53781cec063e"
+ }
+ ]
+ },
+ "eba4a02f-9ae0-4ca2-89f8-8e78001d45a9": {
+ "path": "eba4a02f-9ae0-4ca2-89f8-8e78001d45a9",
+ "cellName": "Flow 2 (Pages Router): Configure tRPC for Pages Router - trpc.ts:L119-129",
+ "cellId": "eba4a02f-9ae0-4ca2-89f8-8e78001d45a9",
+ "visible": true,
+ "parentCellId": "7499353d-8b6f-4564-958b-c303fd5d636f"
+ },
+ "cli/src/installers/trpc.ts-simstep-a8b5924d-279b-40e2-a085-1339e78a3f4e": {
+ "path": "cli/src/installers/trpc.ts-simstep-a8b5924d-279b-40e2-a085-1339e78a3f4e",
+ "fileName": "trpc.ts",
+ "wiki": "The tRPC installer receives the `appRouter: false` flag. It then copies the Pages Router-specific tRPC files, including the API handler (`src/pages/api/trpc/[trpc].ts`) and the client-side utility file (`src/utils/api.ts`).",
+ "cellName": "Flow 2 (Pages Router): Configure tRPC for Pages Router - trpc.ts:L119-129",
+ "cellId": "eba4a02f-9ae0-4ca2-89f8-8e78001d45a9",
+ "visible": true,
+ "startLine": 119,
+ "endLine": 129,
+ "parentCellId": "7499353d-8b6f-4564-958b-c303fd5d636f",
+ "parentPath": "cli/src/installers/trpc.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Support for both Next.js App Router and Pages Router",
+ "simStepId": "a8b5924d-279b-40e2-a085-1339e78a3f4e"
+ }
+ ]
+ },
+ "dd760c03-aca2-4175-8cd8-892ff54db971": {
+ "path": "dd760c03-aca2-4175-8cd8-892ff54db971",
+ "cellName": "Flow 1\n(App Router):\nPass CLI\nResults to\nMain Process",
+ "cellId": "dd760c03-aca2-4175-8cd8-892ff54db971",
+ "visible": true,
+ "parentCellId": "2418c3df-0551-4276-94df-df1042ecbfa7"
+ },
+ "generated-edge-simstep-50c7dbbb-b13f-4a72-b509-c04effb0fd95-dd760c03-aca2-4175-8cd8-892ff54db971": {
+ "path": "generated-edge-simstep-50c7dbbb-b13f-4a72-b509-c04effb0fd95-dd760c03-aca2-4175-8cd8-892ff54db971",
+ "fileName": "index.ts",
+ "cellName": "Flow 1 (App Router): Pass CLI Results to Main Process",
+ "cellId": "dd760c03-aca2-4175-8cd8-892ff54db971",
+ "visible": true,
+ "startLine": 44,
+ "endLine": 44,
+ "parentCellId": "a80e3f00-2d8f-40f0-9dbf-d127667352d0",
+ "parentPath": "cli/src/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Support for both Next.js App Router and Pages Router",
+ "simStepId": "50c7dbbb-b13f-4a72-b509-c04effb0fd95"
+ }
+ ]
+ },
+ "54cd3187-2dbf-44f2-8a6e-dcc25b555968": {
+ "path": "54cd3187-2dbf-44f2-8a6e-dcc25b555968",
+ "cellName": "Flow 1\n(App Router):\nPass Options\nto createProject",
+ "cellId": "54cd3187-2dbf-44f2-8a6e-dcc25b555968",
+ "visible": true,
+ "parentCellId": "2418c3df-0551-4276-94df-df1042ecbfa7"
+ },
+ "generated-edge-simstep-5b39d1cc-2edb-4656-93c5-8db21b153aa4-54cd3187-2dbf-44f2-8a6e-dcc25b555968": {
+ "path": "generated-edge-simstep-5b39d1cc-2edb-4656-93c5-8db21b153aa4-54cd3187-2dbf-44f2-8a6e-dcc25b555968",
+ "fileName": "index.ts",
+ "cellName": "Flow 1 (App Router): Pass Options to createProject",
+ "cellId": "54cd3187-2dbf-44f2-8a6e-dcc25b555968",
+ "visible": true,
+ "startLine": 51,
+ "endLine": 59,
+ "parentCellId": "a80e3f00-2d8f-40f0-9dbf-d127667352d0",
+ "parentPath": "cli/src/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Support for both Next.js App Router and Pages Router",
+ "simStepId": "5b39d1cc-2edb-4656-93c5-8db21b153aa4"
+ }
+ ]
+ },
+ "1c467c0d-7ed1-40fb-9705-5fde914f0ca7": {
+ "path": "1c467c0d-7ed1-40fb-9705-5fde914f0ca7",
+ "cellName": "Flow 1\n(App Router):\nCall Layout\nand Page\nFile Selectors",
+ "cellId": "1c467c0d-7ed1-40fb-9705-5fde914f0ca7",
+ "visible": true,
+ "parentCellId": "69671728-1902-4f50-b1a3-fd96f8df7d5c"
+ },
+ "generated-edge-simstep-1b0c5857-cc4c-4bc1-b486-a650a9f4602a-1c467c0d-7ed1-40fb-9705-5fde914f0ca7": {
+ "path": "generated-edge-simstep-1b0c5857-cc4c-4bc1-b486-a650a9f4602a-1c467c0d-7ed1-40fb-9705-5fde914f0ca7",
+ "fileName": "createProject.ts",
+ "cellName": "Flow 1 (App Router): Call Layout and Page File Selectors",
+ "cellId": "1c467c0d-7ed1-40fb-9705-5fde914f0ca7",
+ "visible": true,
+ "startLine": 71,
+ "endLine": 72,
+ "parentCellId": "2bddd99c-0b89-4485-89a0-b9fceca09629",
+ "parentPath": "cli/src/helpers/createProject.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Support for both Next.js App Router and Pages Router",
+ "simStepId": "1b0c5857-cc4c-4bc1-b486-a650a9f4602a"
+ }
+ ]
+ },
+ "6c8f17a9-5963-420c-9402-840d3dddb818": {
+ "path": "6c8f17a9-5963-420c-9402-840d3dddb818",
+ "cellName": "Flow 1\n(App Router):\nPass appRouter\nFlag to\nInstallers",
+ "cellId": "6c8f17a9-5963-420c-9402-840d3dddb818",
+ "visible": true,
+ "parentCellId": "2418c3df-0551-4276-94df-df1042ecbfa7"
+ },
+ "generated-edge-simstep-ed9a8658-e1e1-4f93-84c2-9d960a6cff67-6c8f17a9-5963-420c-9402-840d3dddb818": {
+ "path": "generated-edge-simstep-ed9a8658-e1e1-4f93-84c2-9d960a6cff67-6c8f17a9-5963-420c-9402-840d3dddb818",
+ "fileName": "createProject.ts",
+ "cellName": "Flow 1 (App Router): Pass appRouter Flag to Installers",
+ "cellId": "6c8f17a9-5963-420c-9402-840d3dddb818",
+ "visible": true,
+ "startLine": 52,
+ "endLine": 61,
+ "parentCellId": "2bddd99c-0b89-4485-89a0-b9fceca09629",
+ "parentPath": "cli/src/helpers/createProject.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Support for both Next.js App Router and Pages Router",
+ "simStepId": "ed9a8658-e1e1-4f93-84c2-9d960a6cff67"
+ }
+ ]
+ },
+ "1b961755-e761-4311-a9d4-fae811a27e79": {
+ "path": "1b961755-e761-4311-a9d4-fae811a27e79",
+ "cellName": "Flow 2\n(Pages Router):\nPass CLI\nResults to\nMain Process",
+ "cellId": "1b961755-e761-4311-a9d4-fae811a27e79",
+ "visible": true,
+ "parentCellId": "2418c3df-0551-4276-94df-df1042ecbfa7"
+ },
+ "generated-edge-simstep-fad4fe20-944a-4288-9675-573e2ca083e7-1b961755-e761-4311-a9d4-fae811a27e79": {
+ "path": "generated-edge-simstep-fad4fe20-944a-4288-9675-573e2ca083e7-1b961755-e761-4311-a9d4-fae811a27e79",
+ "fileName": "index.ts",
+ "cellName": "Flow 2 (Pages Router): Pass CLI Results to Main Process",
+ "cellId": "1b961755-e761-4311-a9d4-fae811a27e79",
+ "visible": true,
+ "startLine": 44,
+ "endLine": 44,
+ "parentCellId": "a80e3f00-2d8f-40f0-9dbf-d127667352d0",
+ "parentPath": "cli/src/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Support for both Next.js App Router and Pages Router",
+ "simStepId": "fad4fe20-944a-4288-9675-573e2ca083e7"
+ }
+ ]
+ },
+ "b5219509-efe1-420b-b691-c612e0d999ed": {
+ "path": "b5219509-efe1-420b-b691-c612e0d999ed",
+ "cellName": "Flow 2\n(Pages Router):\nPass Options\nto createProject",
+ "cellId": "b5219509-efe1-420b-b691-c612e0d999ed",
+ "visible": true,
+ "parentCellId": "2418c3df-0551-4276-94df-df1042ecbfa7"
+ },
+ "generated-edge-simstep-85de4be2-3ba8-4835-810f-50c09cae1275-b5219509-efe1-420b-b691-c612e0d999ed": {
+ "path": "generated-edge-simstep-85de4be2-3ba8-4835-810f-50c09cae1275-b5219509-efe1-420b-b691-c612e0d999ed",
+ "fileName": "index.ts",
+ "cellName": "Flow 2 (Pages Router): Pass Options to createProject",
+ "cellId": "b5219509-efe1-420b-b691-c612e0d999ed",
+ "visible": true,
+ "startLine": 51,
+ "endLine": 59,
+ "parentCellId": "a80e3f00-2d8f-40f0-9dbf-d127667352d0",
+ "parentPath": "cli/src/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Support for both Next.js App Router and Pages Router",
+ "simStepId": "85de4be2-3ba8-4835-810f-50c09cae1275"
+ }
+ ]
+ },
+ "9556efb9-e9ae-4b04-8a00-c3ec1a6bb9fe": {
+ "path": "9556efb9-e9ae-4b04-8a00-c3ec1a6bb9fe",
+ "cellName": "Flow 2\n(Pages Router):\nCall App\nand Index\nFile Selectors",
+ "cellId": "9556efb9-e9ae-4b04-8a00-c3ec1a6bb9fe",
+ "visible": true,
+ "parentCellId": "69671728-1902-4f50-b1a3-fd96f8df7d5c"
+ },
+ "generated-edge-simstep-102c831b-f8c7-4648-9abf-c6c0961003cc-9556efb9-e9ae-4b04-8a00-c3ec1a6bb9fe": {
+ "path": "generated-edge-simstep-102c831b-f8c7-4648-9abf-c6c0961003cc-9556efb9-e9ae-4b04-8a00-c3ec1a6bb9fe",
+ "fileName": "createProject.ts",
+ "cellName": "Flow 2 (Pages Router): Call App and Index File Selectors",
+ "cellId": "9556efb9-e9ae-4b04-8a00-c3ec1a6bb9fe",
+ "visible": true,
+ "startLine": 74,
+ "endLine": 75,
+ "parentCellId": "2bddd99c-0b89-4485-89a0-b9fceca09629",
+ "parentPath": "cli/src/helpers/createProject.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Support for both Next.js App Router and Pages Router",
+ "simStepId": "102c831b-f8c7-4648-9abf-c6c0961003cc"
+ }
+ ]
+ },
+ "ddaec457-a32a-4ebf-84fe-34fc82b454a9": {
+ "path": "ddaec457-a32a-4ebf-84fe-34fc82b454a9",
+ "cellName": "Flow 2\n(Pages Router):\nPass appRouter\nFlag to\nInstallers",
+ "cellId": "ddaec457-a32a-4ebf-84fe-34fc82b454a9",
+ "visible": true,
+ "parentCellId": "2418c3df-0551-4276-94df-df1042ecbfa7"
+ },
+ "generated-edge-simstep-aabc8b03-d6c1-46d6-8a6f-612225e43fc6-ddaec457-a32a-4ebf-84fe-34fc82b454a9": {
+ "path": "generated-edge-simstep-aabc8b03-d6c1-46d6-8a6f-612225e43fc6-ddaec457-a32a-4ebf-84fe-34fc82b454a9",
+ "fileName": "createProject.ts",
+ "cellName": "Flow 2 (Pages Router): Pass appRouter Flag to Installers",
+ "cellId": "ddaec457-a32a-4ebf-84fe-34fc82b454a9",
+ "visible": true,
+ "startLine": 52,
+ "endLine": 61,
+ "parentCellId": "2bddd99c-0b89-4485-89a0-b9fceca09629",
+ "parentPath": "cli/src/helpers/createProject.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Support for both Next.js App Router and Pages Router",
+ "simStepId": "aabc8b03-d6c1-46d6-8a6f-612225e43fc6"
+ }
+ ]
+ },
+ "3f075ef8-a98b-4758-8d4b-94a2a182207c": {
+ "path": "3f075ef8-a98b-4758-8d4b-94a2a182207c",
+ "cellName": "tailwind.ts",
+ "cellId": "3f075ef8-a98b-4758-8d4b-94a2a182207c",
+ "visible": true,
+ "parentCellId": "b7802ecf-b170-4bbb-b97c-9c22247eceab"
+ },
+ "d6547a47-309b-4534-8e66-f936d12dea95": {
+ "path": "d6547a47-309b-4534-8e66-f936d12dea95",
+ "cellName": "app",
+ "cellId": "d6547a47-309b-4534-8e66-f936d12dea95",
+ "visible": true,
+ "parentCellId": "7dc18668-256e-49aa-a3a2-ae908b99e905"
+ },
+ "a6964640-b50d-411b-af0c-80eaa4cdc92d": {
+ "path": "a6964640-b50d-411b-af0c-80eaa4cdc92d",
+ "cellName": "layout",
+ "cellId": "a6964640-b50d-411b-af0c-80eaa4cdc92d",
+ "visible": true,
+ "parentCellId": "d6547a47-309b-4534-8e66-f936d12dea95"
+ },
+ "fc78da08-029f-4a37-a622-5ff9893d410d": {
+ "path": "fc78da08-029f-4a37-a622-5ff9893d410d",
+ "cellName": "with-tw.tsx",
+ "cellId": "fc78da08-029f-4a37-a622-5ff9893d410d",
+ "visible": true,
+ "parentCellId": "a6964640-b50d-411b-af0c-80eaa4cdc92d"
+ },
+ "0ad39dfb-42a9-41c5-ba55-70c0af80fbff": {
+ "path": "0ad39dfb-42a9-41c5-ba55-70c0af80fbff",
+ "cellName": "Map 'tailwind' Package to Installer - index.ts:L78-81",
+ "cellId": "0ad39dfb-42a9-41c5-ba55-70c0af80fbff",
+ "visible": true,
+ "parentCellId": "9d353c27-f968-4ddf-b513-4ea7e667a306"
+ },
+ "cli/src/installers/index.ts-simstep-3aeb4ed8-7a7f-468f-a434-36e4e70d0eb8": {
+ "path": "cli/src/installers/index.ts-simstep-3aeb4ed8-7a7f-468f-a434-36e4e70d0eb8",
+ "fileName": "index.ts",
+ "wiki": "The CLI receives the list of selected packages. The `buildPkgInstallerMap` function creates a map of these packages to their corresponding installer functions. For Tailwind CSS, the 'tailwind' key is associated with `tailwindInstaller`.",
+ "cellName": "Map 'tailwind' Package to Installer - index.ts:L78-81",
+ "cellId": "0ad39dfb-42a9-41c5-ba55-70c0af80fbff",
+ "visible": true,
+ "startLine": 78,
+ "endLine": 81,
+ "parentCellId": "9d353c27-f968-4ddf-b513-4ea7e667a306",
+ "parentPath": "cli/src/installers/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Configure project styling with Tailwind CSS",
+ "simStepId": "3aeb4ed8-7a7f-468f-a434-36e4e70d0eb8"
+ }
+ ]
+ },
+ "d0378ecb-35a1-43d6-9ebf-f9452045319c": {
+ "path": "d0378ecb-35a1-43d6-9ebf-f9452045319c",
+ "cellName": "Add Tailwind Dependencies - tailwind.ts:L9-13",
+ "cellId": "d0378ecb-35a1-43d6-9ebf-f9452045319c",
+ "visible": true,
+ "parentCellId": "3f075ef8-a98b-4758-8d4b-94a2a182207c"
+ },
+ "cli/src/installers/tailwind.ts-simstep-f4e2f662-5c25-456d-ba6f-37405b4aec9e": {
+ "path": "cli/src/installers/tailwind.ts-simstep-f4e2f662-5c25-456d-ba6f-37405b4aec9e",
+ "fileName": "tailwind.ts",
+ "wiki": "The `tailwindInstaller` is executed. It first calls `addPackageDependency` to add `tailwindcss`, `postcss`, and `@tailwindcss/postcss` as development dependencies to the project's `package.json` file.",
+ "cellName": "Add Tailwind Dependencies - tailwind.ts:L9-13",
+ "cellId": "d0378ecb-35a1-43d6-9ebf-f9452045319c",
+ "visible": true,
+ "startLine": 9,
+ "endLine": 13,
+ "parentCellId": "3f075ef8-a98b-4758-8d4b-94a2a182207c",
+ "parentPath": "cli/src/installers/tailwind.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Configure project styling with Tailwind CSS",
+ "simStepId": "f4e2f662-5c25-456d-ba6f-37405b4aec9e"
+ }
+ ]
+ },
+ "889452ae-0841-422a-8bdd-597d96f1c654": {
+ "path": "889452ae-0841-422a-8bdd-597d96f1c654",
+ "cellName": "Scaffold Tailwind Configuration Files - tailwind.ts:L23-24",
+ "cellId": "889452ae-0841-422a-8bdd-597d96f1c654",
+ "visible": true,
+ "parentCellId": "3f075ef8-a98b-4758-8d4b-94a2a182207c"
+ },
+ "cli/src/installers/tailwind.ts-simstep-225b03ea-d22e-4ac3-b631-266e20f87981": {
+ "path": "cli/src/installers/tailwind.ts-simstep-225b03ea-d22e-4ac3-b631-266e20f87981",
+ "fileName": "tailwind.ts",
+ "wiki": "The installer uses `fs.copySync` to copy `postcss.config.js` and `globals.css` from the CLI's template directory into the new project directory. The `globals.css` file contains the essential Tailwind directives.",
+ "cellName": "Scaffold Tailwind Configuration Files - tailwind.ts:L23-24",
+ "cellId": "889452ae-0841-422a-8bdd-597d96f1c654",
+ "visible": true,
+ "startLine": 23,
+ "endLine": 24,
+ "parentCellId": "3f075ef8-a98b-4758-8d4b-94a2a182207c",
+ "parentPath": "cli/src/installers/tailwind.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Configure project styling with Tailwind CSS",
+ "simStepId": "225b03ea-d22e-4ac3-b631-266e20f87981"
+ }
+ ]
+ },
+ "5eddb09c-40c9-405e-acb6-b7a837065f73": {
+ "path": "5eddb09c-40c9-405e-acb6-b7a837065f73",
+ "cellName": "Select Tailwind-Specific Layout File - selectBoilerplate.ts:L62-63",
+ "cellId": "5eddb09c-40c9-405e-acb6-b7a837065f73",
+ "visible": true,
+ "parentCellId": "deb9ac89-9f73-438c-a0c6-19e615cc4422"
+ },
+ "cli/src/helpers/selectBoilerplate.ts-simstep-c8e42310-6fc2-4d2f-8e18-ee1ed90b82ff": {
+ "path": "cli/src/helpers/selectBoilerplate.ts-simstep-c8e42310-6fc2-4d2f-8e18-ee1ed90b82ff",
+ "fileName": "selectBoilerplate.ts",
+ "wiki": "The `selectLayoutFile` function checks which packages are in use. Since Tailwind is selected (`usingTw` is true) and tRPC is not, it chooses the `with-tw.tsx` boilerplate file, which is pre-configured for Tailwind.",
+ "cellName": "Select Tailwind-Specific Layout File - selectBoilerplate.ts:L62-63",
+ "cellId": "5eddb09c-40c9-405e-acb6-b7a837065f73",
+ "visible": true,
+ "startLine": 62,
+ "endLine": 63,
+ "parentCellId": "deb9ac89-9f73-438c-a0c6-19e615cc4422",
+ "parentPath": "cli/src/helpers/selectBoilerplate.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Configure project styling with Tailwind CSS",
+ "simStepId": "c8e42310-6fc2-4d2f-8e18-ee1ed90b82ff"
+ }
+ ]
+ },
+ "1e821d51-88f8-45bc-92c9-36076c6605ec": {
+ "path": "1e821d51-88f8-45bc-92c9-36076c6605ec",
+ "cellName": "Copy Tailwind Boilerplate to Project - selectBoilerplate.ts:L68",
+ "cellId": "1e821d51-88f8-45bc-92c9-36076c6605ec",
+ "visible": true,
+ "parentCellId": "deb9ac89-9f73-438c-a0c6-19e615cc4422"
+ },
+ "cli/src/helpers/selectBoilerplate.ts-simstep-0f872fc4-8d73-4e9f-86ea-626c12612df6": {
+ "path": "cli/src/helpers/selectBoilerplate.ts-simstep-0f872fc4-8d73-4e9f-86ea-626c12612df6",
+ "fileName": "selectBoilerplate.ts",
+ "wiki": "The `fs.copySync` command copies the selected Tailwind-specific layout file (`with-tw.tsx`) into the user's project, renaming it to the standard Next.js file name `layout.tsx`.",
+ "cellName": "Copy Tailwind Boilerplate to Project - selectBoilerplate.ts:L68",
+ "cellId": "1e821d51-88f8-45bc-92c9-36076c6605ec",
+ "visible": true,
+ "startLine": 68,
+ "endLine": 68,
+ "parentCellId": "deb9ac89-9f73-438c-a0c6-19e615cc4422",
+ "parentPath": "cli/src/helpers/selectBoilerplate.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Configure project styling with Tailwind CSS",
+ "simStepId": "0f872fc4-8d73-4e9f-86ea-626c12612df6"
+ }
+ ]
+ },
+ "8482481b-2a63-4856-a90a-6324f9018bbd": {
+ "path": "8482481b-2a63-4856-a90a-6324f9018bbd",
+ "cellName": "Load Tailwind Styles in Next.js App - with-tw.tsx:L1",
+ "cellId": "8482481b-2a63-4856-a90a-6324f9018bbd",
+ "visible": true,
+ "parentCellId": "fc78da08-029f-4a37-a622-5ff9893d410d"
+ },
+ "cli/template/extras/src/app/layout/with-tw.tsx-simstep-d1ea5566-24b0-4e05-83c1-5e53d955af65": {
+ "path": "cli/template/extras/src/app/layout/with-tw.tsx-simstep-d1ea5566-24b0-4e05-83c1-5e53d955af65",
+ "fileName": "with-tw.tsx",
+ "wiki": "When the Next.js application runs, it processes the root layout file. The `import '~/styles/globals.css'` statement causes the CSS file (containing Tailwind's directives) to be loaded, applying Tailwind's base styles, components, and utilities across the application.",
+ "cellName": "Load Tailwind Styles in Next.js App - with-tw.tsx:L1",
+ "cellId": "8482481b-2a63-4856-a90a-6324f9018bbd",
+ "visible": true,
+ "startLine": 1,
+ "endLine": 1,
+ "parentCellId": "fc78da08-029f-4a37-a622-5ff9893d410d",
+ "parentPath": "cli/template/extras/src/app/layout/with-tw.tsx",
+ "simSteps": [
+ {
+ "simulationKey": "Configure project styling with Tailwind CSS",
+ "simStepId": "d1ea5566-24b0-4e05-83c1-5e53d955af65"
+ }
+ ]
+ },
+ "aa7b2852-7dde-4f1c-b129-c13fdc7c3824": {
+ "path": "aa7b2852-7dde-4f1c-b129-c13fdc7c3824",
+ "cellName": "Trigger Tailwind\nInstaller",
+ "cellId": "aa7b2852-7dde-4f1c-b129-c13fdc7c3824",
+ "visible": true,
+ "parentCellId": "b7802ecf-b170-4bbb-b97c-9c22247eceab"
+ },
+ "generated-edge-simstep-05969447-943d-4e11-a381-c4a05a82bd5a-aa7b2852-7dde-4f1c-b129-c13fdc7c3824": {
+ "path": "generated-edge-simstep-05969447-943d-4e11-a381-c4a05a82bd5a-aa7b2852-7dde-4f1c-b129-c13fdc7c3824",
+ "fileName": "index.ts",
+ "cellName": "Trigger Tailwind Installer",
+ "cellId": "aa7b2852-7dde-4f1c-b129-c13fdc7c3824",
+ "visible": true,
+ "startLine": 80,
+ "endLine": 80,
+ "parentCellId": "9d353c27-f968-4ddf-b513-4ea7e667a306",
+ "parentPath": "cli/src/installers/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Configure project styling with Tailwind CSS",
+ "simStepId": "05969447-943d-4e11-a381-c4a05a82bd5a"
+ }
+ ]
+ },
+ "17f5944c-678b-460c-89e1-c87861b9beb4": {
+ "path": "17f5944c-678b-460c-89e1-c87861b9beb4",
+ "cellName": "Prepare File\nPaths for\nScaffolding",
+ "cellId": "17f5944c-678b-460c-89e1-c87861b9beb4",
+ "visible": true,
+ "parentCellId": "3f075ef8-a98b-4758-8d4b-94a2a182207c"
+ },
+ "generated-edge-simstep-41c1df93-5db2-40b1-b6d8-0ed94478c30d-17f5944c-678b-460c-89e1-c87861b9beb4": {
+ "path": "generated-edge-simstep-41c1df93-5db2-40b1-b6d8-0ed94478c30d-17f5944c-678b-460c-89e1-c87861b9beb4",
+ "fileName": "tailwind.ts",
+ "cellName": "Prepare File Paths for Scaffolding",
+ "cellId": "17f5944c-678b-460c-89e1-c87861b9beb4",
+ "visible": true,
+ "startLine": 15,
+ "endLine": 21,
+ "parentCellId": "3f075ef8-a98b-4758-8d4b-94a2a182207c",
+ "parentPath": "cli/src/installers/tailwind.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Configure project styling with Tailwind CSS",
+ "simStepId": "41c1df93-5db2-40b1-b6d8-0ed94478c30d"
+ }
+ ]
+ },
+ "044311d7-c689-4ea8-9d96-a54cd8841068": {
+ "path": "044311d7-c689-4ea8-9d96-a54cd8841068",
+ "cellName": "Pass Selections\nfor Boilerplate\nGeneration",
+ "cellId": "044311d7-c689-4ea8-9d96-a54cd8841068",
+ "visible": true,
+ "parentCellId": "2418c3df-0551-4276-94df-df1042ecbfa7"
+ },
+ "generated-edge-simstep-1cbd3b04-97d9-4f82-bcd9-3b2abc0b7fb5-044311d7-c689-4ea8-9d96-a54cd8841068": {
+ "path": "generated-edge-simstep-1cbd3b04-97d9-4f82-bcd9-3b2abc0b7fb5-044311d7-c689-4ea8-9d96-a54cd8841068",
+ "fileName": "selectBoilerplate.ts",
+ "cellName": "Pass Selections for Boilerplate Generation",
+ "cellId": "044311d7-c689-4ea8-9d96-a54cd8841068",
+ "visible": true,
+ "startLine": 49,
+ "endLine": 52,
+ "parentCellId": "deb9ac89-9f73-438c-a0c6-19e615cc4422",
+ "parentPath": "cli/src/helpers/selectBoilerplate.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Configure project styling with Tailwind CSS",
+ "simStepId": "1cbd3b04-97d9-4f82-bcd9-3b2abc0b7fb5"
+ }
+ ]
+ },
+ "1baa420d-31bc-4b16-9439-60aba5caaa8e": {
+ "path": "1baa420d-31bc-4b16-9439-60aba5caaa8e",
+ "cellName": "Prepare Boilerplate\nFile Paths",
+ "cellId": "1baa420d-31bc-4b16-9439-60aba5caaa8e",
+ "visible": true,
+ "parentCellId": "deb9ac89-9f73-438c-a0c6-19e615cc4422"
+ },
+ "generated-edge-simstep-b25005da-7772-4400-b93b-8ec508e2086b-1baa420d-31bc-4b16-9439-60aba5caaa8e": {
+ "path": "generated-edge-simstep-b25005da-7772-4400-b93b-8ec508e2086b-1baa420d-31bc-4b16-9439-60aba5caaa8e",
+ "fileName": "selectBoilerplate.ts",
+ "cellName": "Prepare Boilerplate File Paths",
+ "cellId": "1baa420d-31bc-4b16-9439-60aba5caaa8e",
+ "visible": true,
+ "startLine": 66,
+ "endLine": 67,
+ "parentCellId": "deb9ac89-9f73-438c-a0c6-19e615cc4422",
+ "parentPath": "cli/src/helpers/selectBoilerplate.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Configure project styling with Tailwind CSS",
+ "simStepId": "b25005da-7772-4400-b93b-8ec508e2086b"
+ }
+ ]
+ },
+ "91018bf2-c3a6-4e0e-9f80-2c8927737a79": {
+ "path": "91018bf2-c3a6-4e0e-9f80-2c8927737a79",
+ "cellName": "Enable CSS\nImport",
+ "cellId": "91018bf2-c3a6-4e0e-9f80-2c8927737a79",
+ "visible": true,
+ "parentCellId": "31605429-bdf9-44a1-9ce3-f7234ef99f87"
+ },
+ "generated-edge-simstep-e1eaf756-84cc-4353-b4c9-2ec7d2341daf-91018bf2-c3a6-4e0e-9f80-2c8927737a79": {
+ "path": "generated-edge-simstep-e1eaf756-84cc-4353-b4c9-2ec7d2341daf-91018bf2-c3a6-4e0e-9f80-2c8927737a79",
+ "fileName": "with-tw.tsx",
+ "cellName": "Enable CSS Import",
+ "cellId": "91018bf2-c3a6-4e0e-9f80-2c8927737a79",
+ "visible": true,
+ "startLine": 1,
+ "endLine": 1,
+ "parentCellId": "fc78da08-029f-4a37-a622-5ff9893d410d",
+ "parentPath": "cli/template/extras/src/app/layout/with-tw.tsx",
+ "simSteps": [
+ {
+ "simulationKey": "Configure project styling with Tailwind CSS",
+ "simStepId": "e1eaf756-84cc-4353-b4c9-2ec7d2341daf"
+ }
+ ]
+ },
+ "bfe0e7d2-305f-4b5d-b78c-143f2bfcac79": {
+ "path": "bfe0e7d2-305f-4b5d-b78c-143f2bfcac79",
+ "cellName": "base",
+ "cellId": "bfe0e7d2-305f-4b5d-b78c-143f2bfcac79",
+ "visible": true,
+ "parentCellId": "bea08117-7db8-426f-a7f4-21275af746e4"
+ },
+ "925b1377-df5c-41eb-ab8b-39e2904f4e22": {
+ "path": "925b1377-df5c-41eb-ab8b-39e2904f4e22",
+ "cellName": "next.config.js",
+ "cellId": "925b1377-df5c-41eb-ab8b-39e2904f4e22",
+ "visible": true,
+ "parentCellId": "bfe0e7d2-305f-4b5d-b78c-143f2bfcac79"
+ },
+ "1f42fc8a-35ee-4a36-917a-3e9c0c1efc91": {
+ "path": "1f42fc8a-35ee-4a36-917a-3e9c0c1efc91",
+ "cellName": "env",
+ "cellId": "1f42fc8a-35ee-4a36-917a-3e9c0c1efc91",
+ "visible": true,
+ "parentCellId": "7dc18668-256e-49aa-a3a2-ae908b99e905"
+ },
+ "3302a04d-006f-4785-b626-9391d518cf3f": {
+ "path": "3302a04d-006f-4785-b626-9391d518cf3f",
+ "cellName": "with-auth-db.js",
+ "cellId": "3302a04d-006f-4785-b626-9391d518cf3f",
+ "visible": true,
+ "parentCellId": "1f42fc8a-35ee-4a36-917a-3e9c0c1efc91"
+ },
+ "64141bc5-b599-4cfd-84b4-22d82cc156d3": {
+ "path": "64141bc5-b599-4cfd-84b4-22d82cc156d3",
+ "cellName": "Next.js Application Startup - next.config.js:L5",
+ "cellId": "64141bc5-b599-4cfd-84b4-22d82cc156d3",
+ "visible": true,
+ "parentCellId": "925b1377-df5c-41eb-ab8b-39e2904f4e22"
+ },
+ "cli/template/base/next.config.js-simstep-f0726e75-4342-4219-9fa9-7e1cc28d4914": {
+ "path": "cli/template/base/next.config.js-simstep-f0726e75-4342-4219-9fa9-7e1cc28d4914",
+ "fileName": "next.config.js",
+ "wiki": "The Next.js application process (`next dev` or `next build`) begins. As part of its initialization, it loads the `next.config.js` file, which serves as the entry point for the application's configuration.",
+ "cellName": "Next.js Application Startup - next.config.js:L5",
+ "cellId": "64141bc5-b599-4cfd-84b4-22d82cc156d3",
+ "visible": true,
+ "startLine": 5,
+ "endLine": 5,
+ "parentCellId": "925b1377-df5c-41eb-ab8b-39e2904f4e22",
+ "parentPath": "cli/template/base/next.config.js",
+ "simSteps": [
+ {
+ "simulationKey": "Enforce typesafe environment variables",
+ "simStepId": "f0726e75-4342-4219-9fa9-7e1cc28d4914"
+ }
+ ]
+ },
+ "06e6c413-d8f8-4b4d-bee0-7279486dc487": {
+ "path": "06e6c413-d8f8-4b4d-bee0-7279486dc487",
+ "cellName": "Define Environment Schemas - with-auth-db.js:L4-52",
+ "cellId": "06e6c413-d8f8-4b4d-bee0-7279486dc487",
+ "visible": true,
+ "parentCellId": "3302a04d-006f-4785-b626-9391d518cf3f"
+ },
+ "cli/template/extras/src/env/with-auth-db.js-simstep-30310d69-af01-45ec-a7c9-4767069522c4": {
+ "path": "cli/template/extras/src/env/with-auth-db.js-simstep-30310d69-af01-45ec-a7c9-4767069522c4",
+ "fileName": "with-auth-db.js",
+ "wiki": "Inside `src/env.js`, the `createEnv` function is called. It is configured with Zod schemas for both `server` and `client` environment variables, defining their types and constraints. The `runtimeEnv` object maps these schema keys to the actual values from `process.env` for validation.",
+ "cellName": "Define Environment Schemas - with-auth-db.js:L4-52",
+ "cellId": "06e6c413-d8f8-4b4d-bee0-7279486dc487",
+ "visible": true,
+ "startLine": 4,
+ "endLine": 52,
+ "parentCellId": "3302a04d-006f-4785-b626-9391d518cf3f",
+ "parentPath": "cli/template/extras/src/env/with-auth-db.js",
+ "simSteps": [
+ {
+ "simulationKey": "Enforce typesafe environment variables",
+ "simStepId": "30310d69-af01-45ec-a7c9-4767069522c4"
+ }
+ ]
+ },
+ "9582ac1d-7dae-4afa-a612-58ca47d08b98": {
+ "path": "9582ac1d-7dae-4afa-a612-58ca47d08b98",
+ "cellName": "Execute Runtime Validation - with-auth-db.js:L4-52",
+ "cellId": "9582ac1d-7dae-4afa-a612-58ca47d08b98",
+ "visible": true,
+ "parentCellId": "3302a04d-006f-4785-b626-9391d518cf3f"
+ },
+ "cli/template/extras/src/env/with-auth-db.js-simstep-1ad8e0a5-03e7-4e39-a101-22f70c5cde1d": {
+ "path": "cli/template/extras/src/env/with-auth-db.js-simstep-1ad8e0a5-03e7-4e39-a101-22f70c5cde1d",
+ "fileName": "with-auth-db.js",
+ "wiki": "The `createEnv` function validates the `runtimeEnv` object against the Zod schemas. If `SKIP_ENV_VALIDATION` is false and any variables are missing or have incorrect types, a formatted error is thrown, which terminates the application's startup or build process.",
+ "cellName": "Execute Runtime Validation - with-auth-db.js:L4-52",
+ "cellId": "9582ac1d-7dae-4afa-a612-58ca47d08b98",
+ "visible": true,
+ "startLine": 4,
+ "endLine": 52,
+ "parentCellId": "3302a04d-006f-4785-b626-9391d518cf3f",
+ "parentPath": "cli/template/extras/src/env/with-auth-db.js",
+ "simSteps": [
+ {
+ "simulationKey": "Enforce typesafe environment variables",
+ "simStepId": "1ad8e0a5-03e7-4e39-a101-22f70c5cde1d"
+ }
+ ]
+ },
+ "3abb65b0-b42f-496b-86d1-df7502d3c371": {
+ "path": "3abb65b0-b42f-496b-86d1-df7502d3c371",
+ "cellName": "Export Typesafe `env` Object - with-auth-db.js:L4",
+ "cellId": "3abb65b0-b42f-496b-86d1-df7502d3c371",
+ "visible": true,
+ "parentCellId": "3302a04d-006f-4785-b626-9391d518cf3f"
+ },
+ "cli/template/extras/src/env/with-auth-db.js-simstep-bb5e9d39-c67d-4141-b580-a68cc53b3133": {
+ "path": "cli/template/extras/src/env/with-auth-db.js-simstep-bb5e9d39-c67d-4141-b580-a68cc53b3133",
+ "fileName": "with-auth-db.js",
+ "wiki": "The validated `env` object is exported from `src/env.js`. This makes the typesafe environment variables available for import across the application, guaranteeing their presence and correct types at compile time and preventing a class of runtime errors.",
+ "cellName": "Export Typesafe `env` Object - with-auth-db.js:L4",
+ "cellId": "3abb65b0-b42f-496b-86d1-df7502d3c371",
+ "visible": true,
+ "startLine": 4,
+ "endLine": 4,
+ "parentCellId": "3302a04d-006f-4785-b626-9391d518cf3f",
+ "parentPath": "cli/template/extras/src/env/with-auth-db.js",
+ "simSteps": [
+ {
+ "simulationKey": "Enforce typesafe environment variables",
+ "simStepId": "bb5e9d39-c67d-4141-b580-a68cc53b3133"
+ }
+ ]
+ },
+ "d967f8d4-2bc9-4aca-8aa2-60b07ff53d79": {
+ "path": "d967f8d4-2bc9-4aca-8aa2-60b07ff53d79",
+ "cellName": "Trigger Environment\nValidation",
+ "cellId": "d967f8d4-2bc9-4aca-8aa2-60b07ff53d79",
+ "visible": true,
+ "parentCellId": "bea08117-7db8-426f-a7f4-21275af746e4"
+ },
+ "generated-edge-simstep-f5a74f03-5919-4501-ac85-e18bf5239991-d967f8d4-2bc9-4aca-8aa2-60b07ff53d79": {
+ "path": "generated-edge-simstep-f5a74f03-5919-4501-ac85-e18bf5239991-d967f8d4-2bc9-4aca-8aa2-60b07ff53d79",
+ "fileName": "next.config.js",
+ "cellName": "Trigger Environment Validation",
+ "cellId": "d967f8d4-2bc9-4aca-8aa2-60b07ff53d79",
+ "visible": true,
+ "startLine": 5,
+ "endLine": 5,
+ "parentCellId": "925b1377-df5c-41eb-ab8b-39e2904f4e22",
+ "parentPath": "cli/template/base/next.config.js",
+ "simSteps": [
+ {
+ "simulationKey": "Enforce typesafe environment variables",
+ "simStepId": "f5a74f03-5919-4501-ac85-e18bf5239991"
+ }
+ ]
+ },
+ "e975592b-9351-498c-a7f3-eeaa6de5940e": {
+ "path": "e975592b-9351-498c-a7f3-eeaa6de5940e",
+ "cellName": "Pass Configuration\nto Validation\nLibrary",
+ "cellId": "e975592b-9351-498c-a7f3-eeaa6de5940e",
+ "visible": true,
+ "parentCellId": "3302a04d-006f-4785-b626-9391d518cf3f"
+ },
+ "generated-edge-simstep-edd00467-1311-425b-b84d-699f80742beb-e975592b-9351-498c-a7f3-eeaa6de5940e": {
+ "path": "generated-edge-simstep-edd00467-1311-425b-b84d-699f80742beb-e975592b-9351-498c-a7f3-eeaa6de5940e",
+ "fileName": "with-auth-db.js",
+ "cellName": "Pass Configuration to Validation Library",
+ "cellId": "e975592b-9351-498c-a7f3-eeaa6de5940e",
+ "visible": true,
+ "startLine": 4,
+ "endLine": 4,
+ "parentCellId": "3302a04d-006f-4785-b626-9391d518cf3f",
+ "parentPath": "cli/template/extras/src/env/with-auth-db.js",
+ "simSteps": [
+ {
+ "simulationKey": "Enforce typesafe environment variables",
+ "simStepId": "edd00467-1311-425b-b84d-699f80742beb"
+ }
+ ]
+ },
+ "19753747-2d54-43f4-b583-6130fdb0dea8": {
+ "path": "19753747-2d54-43f4-b583-6130fdb0dea8",
+ "cellName": "Return Validated\nEnvironment Object",
+ "cellId": "19753747-2d54-43f4-b583-6130fdb0dea8",
+ "visible": true,
+ "parentCellId": "3302a04d-006f-4785-b626-9391d518cf3f"
+ },
+ "generated-edge-simstep-b850604a-0b78-4c69-807e-e1b78828f719-19753747-2d54-43f4-b583-6130fdb0dea8": {
+ "path": "generated-edge-simstep-b850604a-0b78-4c69-807e-e1b78828f719-19753747-2d54-43f4-b583-6130fdb0dea8",
+ "fileName": "with-auth-db.js",
+ "cellName": "Return Validated Environment Object",
+ "cellId": "19753747-2d54-43f4-b583-6130fdb0dea8",
+ "visible": true,
+ "startLine": 4,
+ "endLine": 4,
+ "parentCellId": "3302a04d-006f-4785-b626-9391d518cf3f",
+ "parentPath": "cli/template/extras/src/env/with-auth-db.js",
+ "simSteps": [
+ {
+ "simulationKey": "Enforce typesafe environment variables",
+ "simStepId": "b850604a-0b78-4c69-807e-e1b78828f719"
+ }
+ ]
+ },
+ "6e9b1999-6a26-410b-836f-ef67d1761b14": {
+ "path": "6e9b1999-6a26-410b-836f-ef67d1761b14",
+ "cellName": "eslint.ts",
+ "cellId": "6e9b1999-6a26-410b-836f-ef67d1761b14",
+ "visible": true,
+ "parentCellId": "b7802ecf-b170-4bbb-b97c-9c22247eceab"
+ },
+ "fb892a07-32fc-4053-8412-49826abb19ed": {
+ "path": "fb892a07-32fc-4053-8412-49826abb19ed",
+ "cellName": "biome.ts",
+ "cellId": "fb892a07-32fc-4053-8412-49826abb19ed",
+ "visible": true,
+ "parentCellId": "b7802ecf-b170-4bbb-b97c-9c22247eceab"
+ },
+ "39f257a3-979b-44a0-90bf-4a0b7c436ed7": {
+ "path": "39f257a3-979b-44a0-90bf-4a0b7c436ed7",
+ "cellName": "ESLint/Prettier Flow: Configure Installer - index.ts:L58-102",
+ "cellId": "39f257a3-979b-44a0-90bf-4a0b7c436ed7",
+ "visible": true,
+ "parentCellId": "9d353c27-f968-4ddf-b513-4ea7e667a306"
+ },
+ "cli/src/installers/index.ts-simstep-eb535b49-789f-4236-aa09-71a1e3a02973": {
+ "path": "cli/src/installers/index.ts-simstep-eb535b49-789f-4236-aa09-71a1e3a02973",
+ "fileName": "index.ts",
+ "wiki": "Based on the user's selection of the 'eslint' package during the CLI prompts, this function constructs a map of package installers. It associates the 'eslint' package name with the `dynamicEslintInstaller` function, preparing it for execution.",
+ "cellName": "ESLint/Prettier Flow: Configure Installer - index.ts:L58-102",
+ "cellId": "39f257a3-979b-44a0-90bf-4a0b7c436ed7",
+ "visible": true,
+ "startLine": 58,
+ "endLine": 102,
+ "parentCellId": "9d353c27-f968-4ddf-b513-4ea7e667a306",
+ "parentPath": "cli/src/installers/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Set up code quality tools like ESLint/Prettier or Biome",
+ "simStepId": "eb535b49-789f-4236-aa09-71a1e3a02973"
+ }
+ ]
+ },
+ "5ea011ca-b4f5-4321-ac03-096b769b1754": {
+ "path": "5ea011ca-b4f5-4321-ac03-096b769b1754",
+ "cellName": "ESLint/Prettier Flow: Execute Installer - installPackages.ts:L12-20",
+ "cellId": "5ea011ca-b4f5-4321-ac03-096b769b1754",
+ "visible": true,
+ "parentCellId": "4307f16d-417e-4e54-a372-62eb4617c708"
+ },
+ "cli/src/helpers/installPackages.ts-simstep-cd411957-0d57-4d15-8518-7950665d57a5": {
+ "path": "cli/src/helpers/installPackages.ts-simstep-cd411957-0d57-4d15-8518-7950665d57a5",
+ "fileName": "installPackages.ts",
+ "wiki": "The `installPackages` function iterates through the installer map. Since `eslint.inUse` is true, it invokes the `dynamicEslintInstaller` function with the project configuration options.",
+ "cellName": "ESLint/Prettier Flow: Execute Installer - installPackages.ts:L12-20",
+ "cellId": "5ea011ca-b4f5-4321-ac03-096b769b1754",
+ "visible": true,
+ "startLine": 12,
+ "endLine": 20,
+ "parentCellId": "4307f16d-417e-4e54-a372-62eb4617c708",
+ "parentPath": "cli/src/helpers/installPackages.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Set up code quality tools like ESLint/Prettier or Biome",
+ "simStepId": "cd411957-0d57-4d15-8518-7950665d57a5"
+ }
+ ]
+ },
+ "c0ab4ac4-0fd0-4ac3-bb81-ba80aa78242a": {
+ "path": "c0ab4ac4-0fd0-4ac3-bb81-ba80aa78242a",
+ "cellName": "ESLint/Prettier Flow: Setup Files and Dependencies - eslint.ts:L12-73",
+ "cellId": "c0ab4ac4-0fd0-4ac3-bb81-ba80aa78242a",
+ "visible": true,
+ "parentCellId": "6e9b1999-6a26-410b-836f-ef67d1761b14"
+ },
+ "cli/src/installers/eslint.ts-simstep-efe0bbeb-1987-4db2-833e-d9a8f25a1512": {
+ "path": "cli/src/installers/eslint.ts-simstep-efe0bbeb-1987-4db2-833e-d9a8f25a1512",
+ "fileName": "eslint.ts",
+ "wiki": "The installer adds ESLint/Prettier dev dependencies to `package.json`, copies configuration files (`.eslintrc.js`, `prettier.config.js`) into the project, and adds `lint` and `format` scripts to `package.json`.",
+ "cellName": "ESLint/Prettier Flow: Setup Files and Dependencies - eslint.ts:L12-73",
+ "cellId": "c0ab4ac4-0fd0-4ac3-bb81-ba80aa78242a",
+ "visible": true,
+ "startLine": 12,
+ "endLine": 73,
+ "parentCellId": "6e9b1999-6a26-410b-836f-ef67d1761b14",
+ "parentPath": "cli/src/installers/eslint.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Set up code quality tools like ESLint/Prettier or Biome",
+ "simStepId": "efe0bbeb-1987-4db2-833e-d9a8f25a1512"
+ }
+ ]
+ },
+ "95c9fe73-46f7-4b20-beb1-80801e9b2a00": {
+ "path": "95c9fe73-46f7-4b20-beb1-80801e9b2a00",
+ "cellName": "Biome Flow: Configure Installer - index.ts:L58-102",
+ "cellId": "95c9fe73-46f7-4b20-beb1-80801e9b2a00",
+ "visible": true,
+ "parentCellId": "9d353c27-f968-4ddf-b513-4ea7e667a306"
+ },
+ "cli/src/installers/index.ts-simstep-230efbe1-de67-46ba-835a-d56e33d427e7": {
+ "path": "cli/src/installers/index.ts-simstep-230efbe1-de67-46ba-835a-d56e33d427e7",
+ "fileName": "index.ts",
+ "wiki": "If the user selects 'biome' instead of ESLint, this function constructs a map of package installers, associating the 'biome' package name with the `biomeInstaller` function.",
+ "cellName": "Biome Flow: Configure Installer - index.ts:L58-102",
+ "cellId": "95c9fe73-46f7-4b20-beb1-80801e9b2a00",
+ "visible": true,
+ "startLine": 58,
+ "endLine": 102,
+ "parentCellId": "9d353c27-f968-4ddf-b513-4ea7e667a306",
+ "parentPath": "cli/src/installers/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Set up code quality tools like ESLint/Prettier or Biome",
+ "simStepId": "230efbe1-de67-46ba-835a-d56e33d427e7"
+ }
+ ]
+ },
+ "a7d2563f-2800-4449-8423-72db0469c077": {
+ "path": "a7d2563f-2800-4449-8423-72db0469c077",
+ "cellName": "Biome Flow: Execute Installer - installPackages.ts:L12-20",
+ "cellId": "a7d2563f-2800-4449-8423-72db0469c077",
+ "visible": true,
+ "parentCellId": "4307f16d-417e-4e54-a372-62eb4617c708"
+ },
+ "cli/src/helpers/installPackages.ts-simstep-f8f8c0f5-be96-4ad1-93e5-8f0f41dd8e21": {
+ "path": "cli/src/helpers/installPackages.ts-simstep-f8f8c0f5-be96-4ad1-93e5-8f0f41dd8e21",
+ "fileName": "installPackages.ts",
+ "wiki": "The `installPackages` function iterates through the installer map. Since `biome.inUse` is true, it invokes the `biomeInstaller` function with the project configuration options.",
+ "cellName": "Biome Flow: Execute Installer - installPackages.ts:L12-20",
+ "cellId": "a7d2563f-2800-4449-8423-72db0469c077",
+ "visible": true,
+ "startLine": 12,
+ "endLine": 20,
+ "parentCellId": "4307f16d-417e-4e54-a372-62eb4617c708",
+ "parentPath": "cli/src/helpers/installPackages.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Set up code quality tools like ESLint/Prettier or Biome",
+ "simStepId": "f8f8c0f5-be96-4ad1-93e5-8f0f41dd8e21"
+ }
+ ]
+ },
+ "26385a13-1e32-4907-91d4-8f9a5b28b180": {
+ "path": "26385a13-1e32-4907-91d4-8f9a5b28b180",
+ "cellName": "Biome Flow: Setup Files and Dependencies - biome.ts:L9-30",
+ "cellId": "26385a13-1e32-4907-91d4-8f9a5b28b180",
+ "visible": true,
+ "parentCellId": "fb892a07-32fc-4053-8412-49826abb19ed"
+ },
+ "cli/src/installers/biome.ts-simstep-b392ead7-48d0-41be-90fe-cf8ac8a3d478": {
+ "path": "cli/src/installers/biome.ts-simstep-b392ead7-48d0-41be-90fe-cf8ac8a3d478",
+ "fileName": "biome.ts",
+ "wiki": "The installer adds the `@biomejs/biome` dev dependency to `package.json`, copies the `biome.jsonc` configuration file into the project, and adds `check` scripts to `package.json`.",
+ "cellName": "Biome Flow: Setup Files and Dependencies - biome.ts:L9-30",
+ "cellId": "26385a13-1e32-4907-91d4-8f9a5b28b180",
+ "visible": true,
+ "startLine": 9,
+ "endLine": 30,
+ "parentCellId": "fb892a07-32fc-4053-8412-49826abb19ed",
+ "parentPath": "cli/src/installers/biome.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Set up code quality tools like ESLint/Prettier or Biome",
+ "simStepId": "b392ead7-48d0-41be-90fe-cf8ac8a3d478"
+ }
+ ]
+ },
+ "d3637476-912d-42dd-85a6-f525859e4fe2": {
+ "path": "d3637476-912d-42dd-85a6-f525859e4fe2",
+ "cellName": "ESLint/Prettier Flow:\nTransmit Installer\nMap",
+ "cellId": "d3637476-912d-42dd-85a6-f525859e4fe2",
+ "visible": true,
+ "parentCellId": "2418c3df-0551-4276-94df-df1042ecbfa7"
+ },
+ "generated-edge-simstep-c7022225-1160-44e0-bc6a-7a3c076cf5d3-d3637476-912d-42dd-85a6-f525859e4fe2": {
+ "path": "generated-edge-simstep-c7022225-1160-44e0-bc6a-7a3c076cf5d3-d3637476-912d-42dd-85a6-f525859e4fe2",
+ "fileName": "createProject.ts",
+ "cellName": "ESLint/Prettier Flow: Transmit Installer Map",
+ "cellId": "d3637476-912d-42dd-85a6-f525859e4fe2",
+ "visible": true,
+ "startLine": 89,
+ "endLine": 98,
+ "parentCellId": "2bddd99c-0b89-4485-89a0-b9fceca09629",
+ "parentPath": "cli/src/helpers/createProject.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Set up code quality tools like ESLint/Prettier or Biome",
+ "simStepId": "c7022225-1160-44e0-bc6a-7a3c076cf5d3"
+ }
+ ]
+ },
+ "f868866e-e79c-429a-a218-cab9e51702ad": {
+ "path": "f868866e-e79c-429a-a218-cab9e51702ad",
+ "cellName": "ESLint/Prettier Flow:\nPass Project\nOptions to\nInstaller",
+ "cellId": "f868866e-e79c-429a-a218-cab9e51702ad",
+ "visible": true,
+ "parentCellId": "2418c3df-0551-4276-94df-df1042ecbfa7"
+ },
+ "generated-edge-simstep-21b92278-c756-4ae5-b7bb-ea4df3771fc2-f868866e-e79c-429a-a218-cab9e51702ad": {
+ "path": "generated-edge-simstep-21b92278-c756-4ae5-b7bb-ea4df3771fc2-f868866e-e79c-429a-a218-cab9e51702ad",
+ "fileName": "installPackages.ts",
+ "cellName": "ESLint/Prettier Flow: Pass Project Options to Installer",
+ "cellId": "f868866e-e79c-429a-a218-cab9e51702ad",
+ "visible": true,
+ "startLine": 16,
+ "endLine": 16,
+ "parentCellId": "4307f16d-417e-4e54-a372-62eb4617c708",
+ "parentPath": "cli/src/helpers/installPackages.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Set up code quality tools like ESLint/Prettier or Biome",
+ "simStepId": "21b92278-c756-4ae5-b7bb-ea4df3771fc2"
+ }
+ ]
+ },
+ "c73f74a9-a2ca-43f6-a967-bd689163947b": {
+ "path": "c73f74a9-a2ca-43f6-a967-bd689163947b",
+ "cellName": "Biome Flow:\nTransmit Installer\nMap",
+ "cellId": "c73f74a9-a2ca-43f6-a967-bd689163947b",
+ "visible": true,
+ "parentCellId": "2418c3df-0551-4276-94df-df1042ecbfa7"
+ },
+ "generated-edge-simstep-c80be4b5-2e02-4b1c-9ec7-213c7c117084-c73f74a9-a2ca-43f6-a967-bd689163947b": {
+ "path": "generated-edge-simstep-c80be4b5-2e02-4b1c-9ec7-213c7c117084-c73f74a9-a2ca-43f6-a967-bd689163947b",
+ "fileName": "createProject.ts",
+ "cellName": "Biome Flow: Transmit Installer Map",
+ "cellId": "c73f74a9-a2ca-43f6-a967-bd689163947b",
+ "visible": true,
+ "startLine": 89,
+ "endLine": 98,
+ "parentCellId": "2bddd99c-0b89-4485-89a0-b9fceca09629",
+ "parentPath": "cli/src/helpers/createProject.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Set up code quality tools like ESLint/Prettier or Biome",
+ "simStepId": "c80be4b5-2e02-4b1c-9ec7-213c7c117084"
+ }
+ ]
+ },
+ "fb771c77-c75c-48ea-9bf3-b0d9957a4294": {
+ "path": "fb771c77-c75c-48ea-9bf3-b0d9957a4294",
+ "cellName": "Biome Flow:\nPass Project\nOptions to\nInstaller",
+ "cellId": "fb771c77-c75c-48ea-9bf3-b0d9957a4294",
+ "visible": true,
+ "parentCellId": "2418c3df-0551-4276-94df-df1042ecbfa7"
+ },
+ "generated-edge-simstep-51648cfc-115f-4017-a6da-4217c108546f-fb771c77-c75c-48ea-9bf3-b0d9957a4294": {
+ "path": "generated-edge-simstep-51648cfc-115f-4017-a6da-4217c108546f-fb771c77-c75c-48ea-9bf3-b0d9957a4294",
+ "fileName": "installPackages.ts",
+ "cellName": "Biome Flow: Pass Project Options to Installer",
+ "cellId": "fb771c77-c75c-48ea-9bf3-b0d9957a4294",
+ "visible": true,
+ "startLine": 16,
+ "endLine": 16,
+ "parentCellId": "4307f16d-417e-4e54-a372-62eb4617c708",
+ "parentPath": "cli/src/helpers/installPackages.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Set up code quality tools like ESLint/Prettier or Biome",
+ "simStepId": "51648cfc-115f-4017-a6da-4217c108546f"
+ }
+ ]
+ },
+ "137883e2-a261-4a57-881b-20809d2382c8": {
+ "path": "137883e2-a261-4a57-881b-20809d2382c8",
+ "cellName": "utils",
+ "cellId": "137883e2-a261-4a57-881b-20809d2382c8",
+ "visible": true,
+ "parentCellId": "2418c3df-0551-4276-94df-df1042ecbfa7"
+ },
+ "d64cc788-e508-4b60-a1d8-e1da88984f4a": {
+ "path": "d64cc788-e508-4b60-a1d8-e1da88984f4a",
+ "cellName": "getUserPkgManager.ts",
+ "cellId": "d64cc788-e508-4b60-a1d8-e1da88984f4a",
+ "visible": true,
+ "parentCellId": "137883e2-a261-4a57-881b-20809d2382c8"
+ },
+ "fb4ff8f6-5c53-406c-a2a3-75c41e521f40": {
+ "path": "fb4ff8f6-5c53-406c-a2a3-75c41e521f40",
+ "cellName": "addPackageDependency.ts",
+ "cellId": "fb4ff8f6-5c53-406c-a2a3-75c41e521f40",
+ "visible": true,
+ "parentCellId": "137883e2-a261-4a57-881b-20809d2382c8"
+ },
+ "ecb7668f-27f4-4280-b1d5-0d8d5e70e464": {
+ "path": "ecb7668f-27f4-4280-b1d5-0d8d5e70e464",
+ "cellName": "dependencyVersionMap.ts",
+ "cellId": "ecb7668f-27f4-4280-b1d5-0d8d5e70e464",
+ "visible": true,
+ "parentCellId": "b7802ecf-b170-4bbb-b97c-9c22247eceab"
+ },
+ "7f33bc88-de62-45a9-999b-087af8d18a6a": {
+ "path": "7f33bc88-de62-45a9-999b-087af8d18a6a",
+ "cellName": "logNextSteps.ts",
+ "cellId": "7f33bc88-de62-45a9-999b-087af8d18a6a",
+ "visible": true,
+ "parentCellId": "69671728-1902-4f50-b1a3-fd96f8df7d5c"
+ },
+ "30f62a34-97cd-46e2-a9af-7cbc9d72db25": {
+ "path": "30f62a34-97cd-46e2-a9af-7cbc9d72db25",
+ "cellName": "Detect User's Package Manager - getUserPkgManager.ts:L3-21",
+ "cellId": "30f62a34-97cd-46e2-a9af-7cbc9d72db25",
+ "visible": true,
+ "parentCellId": "d64cc788-e508-4b60-a1d8-e1da88984f4a"
+ },
+ "cli/src/utils/getUserPkgManager.ts-simstep-3c4a30ab-61b2-4b44-9218-5f90989f2369": {
+ "path": "cli/src/utils/getUserPkgManager.ts-simstep-3c4a30ab-61b2-4b44-9218-5f90989f2369",
+ "fileName": "getUserPkgManager.ts",
+ "wiki": "The CLI execution begins by identifying the user's package manager (npm, pnpm, yarn, or bun) by inspecting the `npm_config_user_agent` environment variable. This information is used later for installing dependencies and displaying messages.",
+ "cellName": "Detect User's Package Manager - getUserPkgManager.ts:L3-21",
+ "cellId": "30f62a34-97cd-46e2-a9af-7cbc9d72db25",
+ "visible": true,
+ "startLine": 3,
+ "endLine": 21,
+ "parentCellId": "d64cc788-e508-4b60-a1d8-e1da88984f4a",
+ "parentPath": "cli/src/utils/getUserPkgManager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Manage all necessary package dependencies automatically",
+ "simStepId": "3c4a30ab-61b2-4b44-9218-5f90989f2369"
+ }
+ ]
+ },
+ "fa743050-8d3d-40ee-8641-98aa13bc7a7a": {
+ "path": "fa743050-8d3d-40ee-8641-98aa13bc7a7a",
+ "cellName": "Configure Project via Flags and Prompts - index.ts:L360-369",
+ "cellId": "fa743050-8d3d-40ee-8641-98aa13bc7a7a",
+ "visible": true,
+ "parentCellId": "7922d5c7-279f-4886-817b-8dead6dd7e57"
+ },
+ "cli/src/cli/index.ts-simstep-ed556536-2301-47b9-b1cb-2897ea76367f": {
+ "path": "cli/src/cli/index.ts-simstep-ed556536-2301-47b9-b1cb-2897ea76367f",
+ "fileName": "index.ts",
+ "wiki": "The CLI parses command-line arguments, including the `--noInstall` flag which prevents automatic dependency installation. If not in a non-interactive mode, it prompts the user with a confirmation message, dynamically including the name of the detected package manager, to ask if dependencies should be installed.",
+ "cellName": "Configure Project via Flags and Prompts - index.ts:L360-369",
+ "cellId": "fa743050-8d3d-40ee-8641-98aa13bc7a7a",
+ "visible": true,
+ "startLine": 360,
+ "endLine": 369,
+ "parentCellId": "7922d5c7-279f-4886-817b-8dead6dd7e57",
+ "parentPath": "cli/src/cli/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Manage all necessary package dependencies automatically",
+ "simStepId": "ed556536-2301-47b9-b1cb-2897ea76367f"
+ }
+ ]
+ },
+ "55fa59ac-7d5f-4599-8744-dae4fbc44015": {
+ "path": "55fa59ac-7d5f-4599-8744-dae4fbc44015",
+ "cellName": "Add Package Dependencies - addPackageDependency.ts:L11-36",
+ "cellId": "55fa59ac-7d5f-4599-8744-dae4fbc44015",
+ "visible": true,
+ "parentCellId": "fb4ff8f6-5c53-406c-a2a3-75c41e521f40"
+ },
+ "cli/src/utils/addPackageDependency.ts-simstep-9af6ffa7-cec2-43ad-a4c7-7164f9b0242d": {
+ "path": "cli/src/utils/addPackageDependency.ts-simstep-9af6ffa7-cec2-43ad-a4c7-7164f9b0242d",
+ "fileName": "addPackageDependency.ts",
+ "wiki": "For each technology selected by the user (e.g., Prisma, Tailwind), a corresponding installer function is executed. These installers call `addPackageDependency`, which reads the project's `package.json`, adds the required dependencies to it, and looks up the correct version for each package.",
+ "cellName": "Add Package Dependencies - addPackageDependency.ts:L11-36",
+ "cellId": "55fa59ac-7d5f-4599-8744-dae4fbc44015",
+ "visible": true,
+ "startLine": 11,
+ "endLine": 36,
+ "parentCellId": "fb4ff8f6-5c53-406c-a2a3-75c41e521f40",
+ "parentPath": "cli/src/utils/addPackageDependency.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Manage all necessary package dependencies automatically",
+ "simStepId": "9af6ffa7-cec2-43ad-a4c7-7164f9b0242d"
+ }
+ ]
+ },
+ "e498f42b-f4f2-462b-a974-8f81e122833e": {
+ "path": "e498f42b-f4f2-462b-a974-8f81e122833e",
+ "cellName": "Write Updated package.json - addPackageDependency.ts:L33-35",
+ "cellId": "e498f42b-f4f2-462b-a974-8f81e122833e",
+ "visible": true,
+ "parentCellId": "fb4ff8f6-5c53-406c-a2a3-75c41e521f40"
+ },
+ "cli/src/utils/addPackageDependency.ts-simstep-4ea89af2-88eb-42cc-bccb-06505b02e447": {
+ "path": "cli/src/utils/addPackageDependency.ts-simstep-4ea89af2-88eb-42cc-bccb-06505b02e447",
+ "fileName": "addPackageDependency.ts",
+ "wiki": "After all dependencies for the selected packages are added to the JSON object in memory, the object is sorted alphabetically and written back to the `package.json` file on disk.",
+ "cellName": "Write Updated package.json - addPackageDependency.ts:L33-35",
+ "cellId": "e498f42b-f4f2-462b-a974-8f81e122833e",
+ "visible": true,
+ "startLine": 33,
+ "endLine": 35,
+ "parentCellId": "fb4ff8f6-5c53-406c-a2a3-75c41e521f40",
+ "parentPath": "cli/src/utils/addPackageDependency.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Manage all necessary package dependencies automatically",
+ "simStepId": "4ea89af2-88eb-42cc-bccb-06505b02e447"
+ }
+ ]
+ },
+ "576dbcec-bf9f-4b0b-b5ec-be35ffa926e4": {
+ "path": "576dbcec-bf9f-4b0b-b5ec-be35ffa926e4",
+ "cellName": "Trigger Dependency Installation - index.ts:L85-87",
+ "cellId": "576dbcec-bf9f-4b0b-b5ec-be35ffa926e4",
+ "visible": true,
+ "parentCellId": "a80e3f00-2d8f-40f0-9dbf-d127667352d0"
+ },
+ "cli/src/index.ts-simstep-9ab207b6-0b57-479f-ad3f-d58f722734e7": {
+ "path": "cli/src/index.ts-simstep-9ab207b6-0b57-479f-ad3f-d58f722734e7",
+ "fileName": "index.ts",
+ "wiki": "If the `noInstall` flag is `false`, the `installDependencies` function is called to handle the installation process for the detected package manager.",
+ "cellName": "Trigger Dependency Installation - index.ts:L85-87",
+ "cellId": "576dbcec-bf9f-4b0b-b5ec-be35ffa926e4",
+ "visible": true,
+ "startLine": 85,
+ "endLine": 87,
+ "parentCellId": "a80e3f00-2d8f-40f0-9dbf-d127667352d0",
+ "parentPath": "cli/src/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Manage all necessary package dependencies automatically",
+ "simStepId": "9ab207b6-0b57-479f-ad3f-d58f722734e7"
+ }
+ ]
+ },
+ "973eeec5-25ef-42c7-992d-da124d5b88c8": {
+ "path": "973eeec5-25ef-42c7-992d-da124d5b88c8",
+ "cellName": "Execute Install Command - installDependencies.ts:L37-73",
+ "cellId": "973eeec5-25ef-42c7-992d-da124d5b88c8",
+ "visible": true,
+ "parentCellId": "4de5d69b-c4cb-448d-a7cd-50f9e8ff669e"
+ },
+ "cli/src/helpers/installDependencies.ts-simstep-214077d9-7358-47c7-853c-cda9ace97c92": {
+ "path": "cli/src/helpers/installDependencies.ts-simstep-214077d9-7358-47c7-853c-cda9ace97c92",
+ "fileName": "installDependencies.ts",
+ "wiki": "The `runInstallCommand` function executes the appropriate installation command (e.g., `pnpm install`) in a child process using `execa`. It shows a spinner to provide feedback to the user while dependencies are being downloaded and installed.",
+ "cellName": "Execute Install Command - installDependencies.ts:L37-73",
+ "cellId": "973eeec5-25ef-42c7-992d-da124d5b88c8",
+ "visible": true,
+ "startLine": 37,
+ "endLine": 73,
+ "parentCellId": "4de5d69b-c4cb-448d-a7cd-50f9e8ff669e",
+ "parentPath": "cli/src/helpers/installDependencies.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Manage all necessary package dependencies automatically",
+ "simStepId": "214077d9-7358-47c7-853c-cda9ace97c92"
+ }
+ ]
+ },
+ "6c45bbeb-560e-4c8d-ba13-d92f45072af8": {
+ "path": "6c45bbeb-560e-4c8d-ba13-d92f45072af8",
+ "cellName": "Log Final Instructions - logNextSteps.ts:L8-66",
+ "cellId": "6c45bbeb-560e-4c8d-ba13-d92f45072af8",
+ "visible": true,
+ "parentCellId": "7f33bc88-de62-45a9-999b-087af8d18a6a"
+ },
+ "cli/src/helpers/logNextSteps.ts-simstep-6a5a33fd-1560-4978-a25f-2c79864c1b92": {
+ "path": "cli/src/helpers/logNextSteps.ts-simstep-6a5a33fd-1560-4978-a25f-2c79864c1b92",
+ "fileName": "logNextSteps.ts",
+ "wiki": "Finally, the CLI logs the next steps for the user. If installation was skipped (`noInstall: true`), the instructions will include the command to manually install dependencies.",
+ "cellName": "Log Final Instructions - logNextSteps.ts:L8-66",
+ "cellId": "6c45bbeb-560e-4c8d-ba13-d92f45072af8",
+ "visible": true,
+ "startLine": 8,
+ "endLine": 66,
+ "parentCellId": "7f33bc88-de62-45a9-999b-087af8d18a6a",
+ "parentPath": "cli/src/helpers/logNextSteps.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Manage all necessary package dependencies automatically",
+ "simStepId": "6a5a33fd-1560-4978-a25f-2c79864c1b92"
+ }
+ ]
+ },
+ "78d664aa-7403-4bdc-b521-2ea19df1f71e": {
+ "path": "78d664aa-7403-4bdc-b521-2ea19df1f71e",
+ "cellName": "Transmit Detected\nPackage Manager",
+ "cellId": "78d664aa-7403-4bdc-b521-2ea19df1f71e",
+ "visible": true,
+ "parentCellId": "2418c3df-0551-4276-94df-df1042ecbfa7"
+ },
+ "generated-edge-simstep-54a61672-135c-4ae6-bf69-536f04fd2d38-78d664aa-7403-4bdc-b521-2ea19df1f71e": {
+ "path": "generated-edge-simstep-54a61672-135c-4ae6-bf69-536f04fd2d38-78d664aa-7403-4bdc-b521-2ea19df1f71e",
+ "fileName": "index.ts",
+ "cellName": "Transmit Detected Package Manager",
+ "cellId": "78d664aa-7403-4bdc-b521-2ea19df1f71e",
+ "visible": true,
+ "startLine": 33,
+ "endLine": 33,
+ "parentCellId": "a80e3f00-2d8f-40f0-9dbf-d127667352d0",
+ "parentPath": "cli/src/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Manage all necessary package dependencies automatically",
+ "simStepId": "54a61672-135c-4ae6-bf69-536f04fd2d38"
+ }
+ ]
+ },
+ "6f39bf6a-8045-4235-a201-0b8f9104e16b": {
+ "path": "6f39bf6a-8045-4235-a201-0b8f9104e16b",
+ "cellName": "Transmit User\nConfiguration",
+ "cellId": "6f39bf6a-8045-4235-a201-0b8f9104e16b",
+ "visible": true,
+ "parentCellId": "2418c3df-0551-4276-94df-df1042ecbfa7"
+ },
+ "generated-edge-simstep-fbd331fe-dfde-4afd-9ef0-e4e76dc57ead-6f39bf6a-8045-4235-a201-0b8f9104e16b": {
+ "path": "generated-edge-simstep-fbd331fe-dfde-4afd-9ef0-e4e76dc57ead-6f39bf6a-8045-4235-a201-0b8f9104e16b",
+ "fileName": "index.ts",
+ "cellName": "Transmit User Configuration",
+ "cellId": "6f39bf6a-8045-4235-a201-0b8f9104e16b",
+ "visible": true,
+ "startLine": 44,
+ "endLine": 44,
+ "parentCellId": "a80e3f00-2d8f-40f0-9dbf-d127667352d0",
+ "parentPath": "cli/src/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Manage all necessary package dependencies automatically",
+ "simStepId": "fbd331fe-dfde-4afd-9ef0-e4e76dc57ead"
+ }
+ ]
+ },
+ "f61e7f51-acdf-4797-ad3a-acf4444f0683": {
+ "path": "f61e7f51-acdf-4797-ad3a-acf4444f0683",
+ "cellName": "Look Up\nDependency Versions",
+ "cellId": "f61e7f51-acdf-4797-ad3a-acf4444f0683",
+ "visible": true,
+ "parentCellId": "fb4ff8f6-5c53-406c-a2a3-75c41e521f40"
+ },
+ "generated-edge-simstep-8a679c3e-95c6-48e5-9853-2bcfa82d1857-f61e7f51-acdf-4797-ad3a-acf4444f0683": {
+ "path": "generated-edge-simstep-8a679c3e-95c6-48e5-9853-2bcfa82d1857-f61e7f51-acdf-4797-ad3a-acf4444f0683",
+ "fileName": "dependencyVersionMap.ts",
+ "cellName": "Look Up Dependency Versions",
+ "cellId": "f61e7f51-acdf-4797-ad3a-acf4444f0683",
+ "visible": true,
+ "startLine": 5,
+ "endLine": 52,
+ "parentCellId": "ecb7668f-27f4-4280-b1d5-0d8d5e70e464",
+ "parentPath": "cli/src/installers/dependencyVersionMap.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Manage all necessary package dependencies automatically",
+ "simStepId": "8a679c3e-95c6-48e5-9853-2bcfa82d1857"
+ }
+ ]
+ },
+ "212ff099-5d1d-42d6-93af-8e86be81c578": {
+ "path": "212ff099-5d1d-42d6-93af-8e86be81c578",
+ "cellName": "Check Installation\nFlag",
+ "cellId": "212ff099-5d1d-42d6-93af-8e86be81c578",
+ "visible": true,
+ "parentCellId": "2418c3df-0551-4276-94df-df1042ecbfa7"
+ },
+ "generated-edge-simstep-a7eecbdd-b329-4b08-a19f-4404d4d96abb-212ff099-5d1d-42d6-93af-8e86be81c578": {
+ "path": "generated-edge-simstep-a7eecbdd-b329-4b08-a19f-4404d4d96abb-212ff099-5d1d-42d6-93af-8e86be81c578",
+ "fileName": "index.ts",
+ "cellName": "Check Installation Flag",
+ "cellId": "212ff099-5d1d-42d6-93af-8e86be81c578",
+ "visible": true,
+ "startLine": 85,
+ "endLine": 85,
+ "parentCellId": "a80e3f00-2d8f-40f0-9dbf-d127667352d0",
+ "parentPath": "cli/src/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Manage all necessary package dependencies automatically",
+ "simStepId": "a7eecbdd-b329-4b08-a19f-4404d4d96abb"
+ }
+ ]
+ },
+ "7476e32e-da6c-4342-8100-1b1b7e2e75bf": {
+ "path": "7476e32e-da6c-4342-8100-1b1b7e2e75bf",
+ "cellName": "Pass Control\nto Install\nCommand Runner",
+ "cellId": "7476e32e-da6c-4342-8100-1b1b7e2e75bf",
+ "visible": true,
+ "parentCellId": "2418c3df-0551-4276-94df-df1042ecbfa7"
+ },
+ "generated-edge-simstep-67a10ecd-755e-434f-a6cc-2ddff5b8e5d2-7476e32e-da6c-4342-8100-1b1b7e2e75bf": {
+ "path": "generated-edge-simstep-67a10ecd-755e-434f-a6cc-2ddff5b8e5d2-7476e32e-da6c-4342-8100-1b1b7e2e75bf",
+ "fileName": "installDependencies.ts",
+ "cellName": "Pass Control to Install Command Runner",
+ "cellId": "7476e32e-da6c-4342-8100-1b1b7e2e75bf",
+ "visible": true,
+ "startLine": 83,
+ "endLine": 83,
+ "parentCellId": "4de5d69b-c4cb-448d-a7cd-50f9e8ff669e",
+ "parentPath": "cli/src/helpers/installDependencies.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Manage all necessary package dependencies automatically",
+ "simStepId": "67a10ecd-755e-434f-a6cc-2ddff5b8e5d2"
+ }
+ ]
+ },
+ "34563b08-0dc0-48b0-bd88-4831148c739a": {
+ "path": "34563b08-0dc0-48b0-bd88-4831148c739a",
+ "cellName": "Report Installation\nStatus",
+ "cellId": "34563b08-0dc0-48b0-bd88-4831148c739a",
+ "visible": true,
+ "parentCellId": "69671728-1902-4f50-b1a3-fd96f8df7d5c"
+ },
+ "generated-edge-simstep-78a9e025-78d1-4fc5-8a4f-c69cc030a8af-34563b08-0dc0-48b0-bd88-4831148c739a": {
+ "path": "generated-edge-simstep-78a9e025-78d1-4fc5-8a4f-c69cc030a8af-34563b08-0dc0-48b0-bd88-4831148c739a",
+ "fileName": "installDependencies.ts",
+ "cellName": "Report Installation Status",
+ "cellId": "34563b08-0dc0-48b0-bd88-4831148c739a",
+ "visible": true,
+ "startLine": 87,
+ "endLine": 89,
+ "parentCellId": "4de5d69b-c4cb-448d-a7cd-50f9e8ff669e",
+ "parentPath": "cli/src/helpers/installDependencies.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Manage all necessary package dependencies automatically",
+ "simStepId": "78a9e025-78d1-4fc5-8a4f-c69cc030a8af"
+ }
+ ]
+ }
+ },
+ "simulations": {
+ "Scaffold a modular, full-stack, typesafe Next.js application": {
+ "name": "Scaffold a modular, full-stack, typesafe Next.js application",
+ "simSteps": [
+ {
+ "simStepId": "c82f2b28-fa9e-41fb-8e93-61e6a9af0dea",
+ "diagramNodeId": "a90d624d-9ce8-414f-8e39-b692c00dee75",
+ "simStepLabel": "Start CLI and Gather User Input",
+ "simStepDescription": "The process is initiated by running `create-t3-app`. The `runCli` function is called, which uses `commander` to parse command-line arguments and `@clack/prompts` to interactively ask the user for project details like the app name, desired packages (Tailwind, tRPC, Prisma, etc.), and other configuration options if not running in non-interactive mode.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/cli/index.ts",
+ "startLine": "78",
+ "endLine": "437",
+ "relevantVariables": [
+ "runCli",
+ "program",
+ "Command",
+ "p.group"
+ ]
+ },
+ "inputDataExample": "{\n \"argv\": [\n \"/usr/bin/node\",\n \"/path/to/create-t3-app\",\n \"my-t3-app\"\n ]\n}",
+ "outputDataExample": "{\n \"appName\": \"my-t3-app\",\n \"packages\": [\n \"nextAuth\",\n \"prisma\",\n \"tailwind\",\n \"trpc\",\n \"eslint\"\n ],\n \"flags\": {\n \"noGit\": false,\n \"noInstall\": false,\n \"importAlias\": \"~/\",\n \"appRouter\": true\n },\n \"databaseProvider\": \"sqlite\"\n}"
+ },
+ {
+ "simStepId": "a0e547e6-8c7a-4490-a741-47cfee102a49",
+ "diagramNodeId": "e74a89d5-0a22-4336-9142-a14c5710b030",
+ "simStepLabel": "Return User Configuration",
+ "simStepDescription": "The gathered user selections and parsed flags are returned as a `CliResults` object from the `runCli` function to the main execution flow in `index.ts`.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/index.ts",
+ "startLine": "39",
+ "endLine": "44",
+ "relevantVariables": [
+ "appName",
+ "packages",
+ "flags",
+ "databaseProvider",
+ "runCli"
+ ]
+ },
+ "inputDataExample": "{\n \"appName\": \"my-t3-app\",\n \"packages\": [\n \"nextAuth\",\n \"prisma\",\n \"tailwind\",\n \"trpc\",\n \"eslint\"\n ],\n \"flags\": {\n \"noGit\": false,\n \"noInstall\": false,\n \"importAlias\": \"~/\",\n \"appRouter\": true\n },\n \"databaseProvider\": \"sqlite\"\n}",
+ "outputDataExample": "{\n \"appName\": \"my-t3-app\",\n \"packages\": [\n \"nextAuth\",\n \"prisma\",\n \"tailwind\",\n \"trpc\",\n \"eslint\"\n ],\n \"flags\": {\n \"noGit\": false,\n \"noInstall\": false,\n \"importAlias\": \"~/\",\n \"appRouter\": true\n },\n \"databaseProvider\": \"sqlite\"\n}"
+ },
+ {
+ "simStepId": "6e30cae2-b5cf-4729-8d1f-96ffd1c3de37",
+ "diagramNodeId": "aece8619-9225-43f4-9bbc-3a1d357e92ec",
+ "simStepLabel": "Initiate Project Creation",
+ "simStepDescription": "The `main` function receives the user's configuration and calls the `createProject` helper function to begin the scaffolding process.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/index.ts",
+ "startLine": "51",
+ "endLine": "59",
+ "relevantVariables": [
+ "createProject",
+ "appDir",
+ "scopedAppName",
+ "usePackages",
+ "databaseProvider",
+ "importAlias",
+ "noInstall",
+ "appRouter"
+ ]
+ },
+ "inputDataExample": "{\n \"projectName\": \"my-t3-app\",\n \"scopedAppName\": \"my-t3-app\",\n \"packages\": {\n \"nextAuth\": true,\n \"prisma\": true,\n \"tailwind\": true,\n \"trpc\": true,\n \"eslint\": true\n },\n \"databaseProvider\": \"sqlite\",\n \"importAlias\": \"~/\",\n \"noInstall\": false,\n \"appRouter\": true\n}",
+ "outputDataExample": "{\n \"projectDir\": \"/home/user/dev/my-t3-app\"\n}"
+ },
+ {
+ "simStepId": "57592b50-189c-49e7-99c4-e552b6571ede",
+ "diagramNodeId": "3bb18c1e-677c-4168-82b5-8cd08639202a",
+ "simStepLabel": "Invoke Project Scaffolder",
+ "simStepDescription": "Within `createProject`, the `scaffoldProject` helper is called to handle the initial creation of the project directory and the copying of base template files.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/createProject.ts",
+ "startLine": "41",
+ "endLine": "49",
+ "relevantVariables": [
+ "scaffoldProject"
+ ]
+ },
+ "inputDataExample": "{\n \"projectName\": \"my-t3-app\",\n \"projectDir\": \"/home/user/dev/my-t3-app\",\n \"pkgManager\": \"pnpm\",\n \"scopedAppName\": \"my-t3-app\",\n \"noInstall\": false,\n \"appRouter\": true,\n \"databaseProvider\": \"sqlite\"\n}",
+ "outputDataExample": "{\n \"projectName\": \"my-t3-app\",\n \"projectDir\": \"/home/user/dev/my-t3-app\",\n \"pkgManager\": \"pnpm\",\n \"scopedAppName\": \"my-t3-app\",\n \"noInstall\": false,\n \"appRouter\": true,\n \"databaseProvider\": \"sqlite\"\n}"
+ },
+ {
+ "simStepId": "78e2da4f-a478-4bb0-abfa-2d14fec158d2",
+ "diagramNodeId": "97d9b337-79da-4a0f-bc33-2e650b6b8907",
+ "simStepLabel": "Copy Base Template Files",
+ "simStepDescription": "The `scaffoldProject` function copies the base Next.js application template from the `cli/template/base` directory into the newly created project directory. It also handles renaming files like `_gitignore` to `.gitignore`.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/scaffoldProject.ts",
+ "startLine": "87",
+ "endLine": "91",
+ "relevantVariables": [
+ "fs.copySync",
+ "fs.renameSync",
+ "srcDir",
+ "projectDir"
+ ]
+ },
+ "inputDataExample": "{\n \"srcDir\": \"/path/to/create-t3-app/cli/template/base\",\n \"projectDir\": \"/home/user/dev/my-t3-app\"\n}",
+ "outputDataExample": "{\n \"status\": \"Files copied successfully\"\n}"
+ },
+ {
+ "simStepId": "e3ddad10-985f-4486-8845-46cba5902c15",
+ "diagramNodeId": "6652caa1-9833-47e3-a32d-fc6b6f77114b",
+ "simStepLabel": "Invoke Package Installers",
+ "simStepDescription": "After the base project is scaffolded, the `createProject` function calls the `installPackages` helper. This passes the project details and the user-selected packages to the next stage.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/createProject.ts",
+ "startLine": "52",
+ "endLine": "60",
+ "relevantVariables": [
+ "installPackages"
+ ]
+ },
+ "inputDataExample": "{\n \"projectName\": \"my-t3-app\",\n \"scopedAppName\": \"my-t3-app\",\n \"projectDir\": \"/home/user/dev/my-t3-app\",\n \"pkgManager\": \"pnpm\",\n \"packages\": {\n \"nextAuth\": true,\n \"prisma\": true,\n \"tailwind\": true,\n \"trpc\": true\n },\n \"noInstall\": false,\n \"appRouter\": true,\n \"databaseProvider\": \"sqlite\"\n}",
+ "outputDataExample": "{\n \"projectName\": \"my-t3-app\",\n \"scopedAppName\": \"my-t3-app\",\n \"projectDir\": \"/home/user/dev/my-t3-app\",\n \"pkgManager\": \"pnpm\",\n \"packages\": {\n \"nextAuth\": true,\n \"prisma\": true,\n \"tailwind\": true,\n \"trpc\": true\n },\n \"noInstall\": false,\n \"appRouter\": true,\n \"databaseProvider\": \"sqlite\"\n}"
+ },
+ {
+ "simStepId": "5e1d6b81-1e28-4b2b-9064-ea7fc94e61f6",
+ "diagramNodeId": "5a6e3a15-4346-4fcb-9487-26a98cb7d087",
+ "simStepLabel": "Install Additional Features",
+ "simStepDescription": "The `installPackages` function iterates through the user's selected packages. For each package, it executes a corresponding installer function which copies additional files from `cli/template/extras` and adds necessary dependencies to the project's `package.json`.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/installPackages.ts",
+ "startLine": "10",
+ "endLine": "19",
+ "relevantVariables": [
+ "installPackages",
+ "packages",
+ "installer",
+ "installer.install"
+ ]
+ },
+ "inputDataExample": "{\n \"projectDir\": \"/home/user/dev/my-t3-app\",\n \"packages\": {\n \"nextAuth\": true,\n \"prisma\": true,\n \"tailwind\": true,\n \"trpc\": true\n }\n}",
+ "outputDataExample": "{\n \"status\": \"package.json updated and extra files copied\"\n}"
+ },
+ {
+ "simStepId": "51dbd74a-ae92-454c-b76a-1edb7e346373",
+ "diagramNodeId": "6d99c4bc-1b14-46b3-ba1b-cef98725bdba",
+ "simStepLabel": "Return Project Path",
+ "simStepDescription": "The `createProject` function completes its process of scaffolding and package installation, then returns the full path of the newly created project directory back to the `main` function for finalization steps.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/index.ts",
+ "startLine": "51",
+ "endLine": "51",
+ "relevantVariables": [
+ "projectDir"
+ ]
+ },
+ "inputDataExample": "\"/home/user/dev/my-t3-app\"",
+ "outputDataExample": "\"/home/user/dev/my-t3-app\""
+ },
+ {
+ "simStepId": "450d6eab-4dd8-4235-9de3-b08fb19e2c9c",
+ "diagramNodeId": "f70a59b8-7bc3-494a-a081-aab050376354",
+ "simStepLabel": "Initialize Git Repository",
+ "simStepDescription": "If not disabled with the `--noGit` flag, the `main` function calls the `initializeGit` helper. This function runs `git init`, stages all the newly created files, and makes an initial commit.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/index.ts",
+ "startLine": "102",
+ "endLine": "104",
+ "relevantVariables": [
+ "noGit",
+ "initializeGit"
+ ]
+ },
+ "inputDataExample": "{\n \"projectDir\": \"/home/user/dev/my-t3-app\"\n}",
+ "outputDataExample": "{\n \"status\": \"Git repository initialized successfully\"\n}"
+ },
+ {
+ "simStepId": "6d27c9dc-72ee-413a-b90e-44b5ae81fd8a",
+ "diagramNodeId": "af3cc1e9-aa6d-460d-a266-55f81aaae0e9",
+ "simStepLabel": "Trigger Dependency Installation",
+ "simStepDescription": "After potentially initializing Git, the `main` function proceeds to call the `installDependencies` helper function, passing the project directory.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/index.ts",
+ "startLine": "85",
+ "endLine": "87",
+ "relevantVariables": [
+ "noInstall",
+ "installDependencies"
+ ]
+ },
+ "inputDataExample": "{\n \"projectDir\": \"/home/user/dev/my-t3-app\"\n}",
+ "outputDataExample": "{\n \"projectDir\": \"/home/user/dev/my-t3-app\"\n}"
+ },
+ {
+ "simStepId": "5632f18c-a2ee-4cce-8878-4d77101dcf8b",
+ "diagramNodeId": "4fb6f557-f734-4005-be8b-0fc091135184",
+ "simStepLabel": "Run Package Manager Install",
+ "simStepDescription": "The `installDependencies` function determines the user's package manager and executes the corresponding install command (e.g., `pnpm install`) as a child process within the new project's directory.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/installDependencies.ts",
+ "startLine": "9",
+ "endLine": "14",
+ "relevantVariables": [
+ "installDependencies",
+ "pkgManager",
+ "execa"
+ ]
+ },
+ "inputDataExample": "{\n \"projectDir\": \"/home/user/dev/my-t3-app\"\n}",
+ "outputDataExample": "{\n \"status\": \"Dependencies installed\"\n}"
+ },
+ {
+ "simStepId": "ad8bc203-0649-437c-a9a2-adce46bd0dfd",
+ "diagramNodeId": "",
+ "simStepLabel": "Display Final Instructions",
+ "simStepDescription": "As the final step, the `main` function calls the `logNextSteps` helper, passing all relevant project details. This triggers the printing of the final success message and next steps to the console.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/index.ts",
+ "startLine": "106",
+ "endLine": "113",
+ "relevantVariables": [
+ "logNextSteps"
+ ]
+ },
+ "inputDataExample": "{\n \"projectName\": \"my-t3-app\",\n \"packages\": { ... },\n \"noInstall\": false,\n \"projectDir\": \"/home/user/dev/my-t3-app\"\n}",
+ "outputDataExample": "{\n \"projectName\": \"my-t3-app\",\n \"packages\": { ... },\n \"noInstall\": false,\n \"projectDir\": \"/home/user/dev/my-t3-app\"\n}"
+ }
+ ],
+ "description": "The core function is an interactive CLI that guides users through setting up a new project from a set of curated technologies (the T3 Stack) It generates a complete, runnable Next js project directory based on the user's selections The CLI also supports non-interactive flags (e g , --CI) for use in automated environments like CI/CD pipelines ",
+ "simulationNodesAndEdges": {
+ "a90d624d-9ce8-414f-8e39-b692c00dee75": {
+ "simStepIds": [
+ "c82f2b28-fa9e-41fb-8e93-61e6a9af0dea"
+ ]
+ },
+ "aece8619-9225-43f4-9bbc-3a1d357e92ec": {
+ "simStepIds": [
+ "6e30cae2-b5cf-4729-8d1f-96ffd1c3de37"
+ ]
+ },
+ "97d9b337-79da-4a0f-bc33-2e650b6b8907": {
+ "simStepIds": [
+ "78e2da4f-a478-4bb0-abfa-2d14fec158d2"
+ ]
+ },
+ "5a6e3a15-4346-4fcb-9487-26a98cb7d087": {
+ "simStepIds": [
+ "5e1d6b81-1e28-4b2b-9064-ea7fc94e61f6"
+ ]
+ },
+ "f70a59b8-7bc3-494a-a081-aab050376354": {
+ "simStepIds": [
+ "450d6eab-4dd8-4235-9de3-b08fb19e2c9c"
+ ]
+ },
+ "4fb6f557-f734-4005-be8b-0fc091135184": {
+ "simStepIds": [
+ "5632f18c-a2ee-4cce-8878-4d77101dcf8b"
+ ]
+ },
+ "e74a89d5-0a22-4336-9142-a14c5710b030": {
+ "simStepIds": [
+ "a0e547e6-8c7a-4490-a741-47cfee102a49"
+ ]
+ },
+ "3bb18c1e-677c-4168-82b5-8cd08639202a": {
+ "simStepIds": [
+ "57592b50-189c-49e7-99c4-e552b6571ede"
+ ]
+ },
+ "6652caa1-9833-47e3-a32d-fc6b6f77114b": {
+ "simStepIds": [
+ "e3ddad10-985f-4486-8845-46cba5902c15"
+ ]
+ },
+ "6d99c4bc-1b14-46b3-ba1b-cef98725bdba": {
+ "simStepIds": [
+ "51dbd74a-ae92-454c-b76a-1edb7e346373"
+ ]
+ },
+ "af3cc1e9-aa6d-460d-a266-55f81aaae0e9": {
+ "simStepIds": [
+ "6d27c9dc-72ee-413a-b90e-44b5ae81fd8a"
+ ]
+ }
+ },
+ "isAIGenerated": true,
+ "keywords": "createProject, scaffoldProject, runCli, Commander, clack/prompts",
+ "generationPrompt": "Scaffold a modular, full-stack, typesafe Next.js application",
+ "generationKeywords": "createProject, scaffoldProject, runCli, Commander, clack/prompts",
+ "meta": {
+ "containerCoverage": {
+ "perContainerTotals": {
+ "frontend": {
+ "promptFileCount": 6,
+ "promptTokenCount": 3247,
+ "suggestedFileCount": 26
+ },
+ "server": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 0
+ },
+ "drawio": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 0
+ },
+ "shared": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 3
+ },
+ "unknown": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 0
+ }
+ },
+ "missingContainers": [],
+ "addedFiles": []
+ }
+ }
+ },
+ "Integrate tRPC for end-to-end typesafe API development": {
+ "name": "Integrate tRPC for end-to-end typesafe API development",
+ "simSteps": [
+ {
+ "simStepId": "a2412d9d-c686-4e24-b4fb-07a4c6a9c04f",
+ "diagramNodeId": "f225fee0-7abf-45ca-86df-3578947e92f4",
+ "simStepLabel": "Flow 1 - Scaffolding: User Selects tRPC",
+ "simStepDescription": "The user runs `create-t3-app` and, when prompted, chooses to include tRPC in their project setup. This selection is a key input for the scaffolding process.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/cli/index.ts",
+ "startLine": "292",
+ "endLine": "296",
+ "relevantVariables": [
+ "p.confirm",
+ "trpc"
+ ]
+ },
+ "inputDataExample": "{\n \"question\": \"Would you like to use tRPC?\",\n \"user_input\": \"Yes\"\n}",
+ "outputDataExample": "{\n \"packages\": [\n \"tailwind\",\n \"trpc\",\n \"nextAuth\",\n \"prisma\",\n \"eslint\"\n ],\n \"appRouter\": true\n}"
+ },
+ {
+ "simStepId": "0c85aa78-afd8-4ccf-b919-b3a28d4be75a",
+ "diagramNodeId": "be363e16-6699-40b9-9cf7-ee3a0ccc1e86",
+ "simStepLabel": "Flow 1 - Scaffolding: Configuration Passed",
+ "simStepDescription": "The collected user choices, including the decision to use tRPC, are consolidated into a configuration object that will guide the entire project creation process.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/index.ts",
+ "startLine": "39",
+ "endLine": "44",
+ "relevantVariables": [
+ "runCli",
+ "appName",
+ "packages",
+ "flags"
+ ]
+ },
+ "inputDataExample": "{\n \"appName\": \"my-t3-app\",\n \"packages\": [\n \"trpc\",\n \"tailwind\",\n \"prisma\"\n ],\n \"flags\": {\n \"noGit\": false,\n \"noInstall\": false,\n \"appRouter\": true\n }\n}",
+ "outputDataExample": "{\n \"appName\": \"my-t3-app\",\n \"packages\": [\n \"trpc\",\n \"tailwind\",\n \"prisma\"\n ],\n \"flags\": {\n \"noGit\": false,\n \"noInstall\": false,\n \"appRouter\": true\n }\n}"
+ },
+ {
+ "simStepId": "511ebdf9-0ac2-4523-bdf8-df1afe4dd6f5",
+ "diagramNodeId": "8d5b9775-bdfb-4aa0-80ee-62c40bdb9edd",
+ "simStepLabel": "Flow 1 - Scaffolding: tRPC Installer Identified",
+ "simStepDescription": "The application logic builds a map of required installers based on the selected packages. Since 'trpc' was selected, the `trpcInstaller` is marked for execution.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/index.ts",
+ "startLine": "82",
+ "endLine": "85",
+ "relevantVariables": [
+ "buildPkgInstallerMap",
+ "trpcInstaller"
+ ]
+ },
+ "inputDataExample": "{\n \"packages\": [\n \"trpc\",\n \"tailwind\",\n \"prisma\"\n ],\n \"databaseProvider\": \"sqlite\"\n}",
+ "outputDataExample": "{\n \"trpc\": {\n \"inUse\": true,\n \"installer\": \"[function trpcInstaller]\"\n },\n \"tailwind\": {\n \"inUse\": true,\n \"installer\": \"[function tailwindInstaller]\"\n },\n \"prisma\": {\n \"inUse\": true,\n \"installer\": \"[function prismaInstaller]\"\n }\n}"
+ },
+ {
+ "simStepId": "7372cde8-0616-47af-a7fb-af2a173ff16c",
+ "diagramNodeId": "56eb0fd1-14f4-46cd-85c7-a79d76f4c1b5",
+ "simStepLabel": "Flow 1 - Scaffolding: Project Context Provided to Installer",
+ "simStepDescription": "The `trpcInstaller` function is called with the project's context, including the project directory, selected packages, and whether the Next.js App Router is being used.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/trpc.ts",
+ "startLine": "8",
+ "endLine": "12",
+ "relevantVariables": [
+ "trpcInstaller"
+ ]
+ },
+ "inputDataExample": "{\n \"projectDir\": \"/path/to/my-t3-app\",\n \"packages\": {\n \"trpc\": { \"inUse\": true },\n \"prisma\": { \"inUse\": true }\n },\n \"appRouter\": true\n}",
+ "outputDataExample": "{\n \"projectDir\": \"/path/to/my-t3-app\",\n \"packages\": {\n \"trpc\": { \"inUse\": true },\n \"prisma\": { \"inUse\": true }\n },\n \"appRouter\": true\n}"
+ },
+ {
+ "simStepId": "df6034f0-03ef-493b-b23c-3f54669bb024",
+ "diagramNodeId": "e4df924e-2d58-436e-8e27-a91350d57455",
+ "simStepLabel": "Flow 1 - Scaffolding: Server-Side tRPC Files Copied",
+ "simStepDescription": "The installer copies the necessary server-side tRPC files from the template directory into the new project. This includes the core tRPC setup (`trpc.ts`), the main application router (`root.ts`), and an example router (`post.ts`). The specific versions of these files are chosen based on other selections like authentication and database providers.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/trpc.ts",
+ "startLine": "40",
+ "endLine": "87",
+ "relevantVariables": [
+ "trpcFile",
+ "exampleRouterFile",
+ "copySrcDest",
+ "trpcSrc",
+ "rootRouterSrc",
+ "exampleRouterSrc"
+ ]
+ },
+ "inputDataExample": "{\n \"appRouter\": true,\n \"usingAuth\": true,\n \"usingPrisma\": true\n}",
+ "outputDataExample": "{\n \"copied_files\": [\n \"/path/to/my-t3-app/src/server/api/trpc.ts\",\n \"/path/to/my-t3-app/src/server/api/root.ts\",\n \"/path/to/my-t3-app/src/server/api/routers/post.ts\"\n ]\n}"
+ },
+ {
+ "simStepId": "5b560bdb-ccad-41ed-8d97-a281de3ef122",
+ "diagramNodeId": "0022c79d-28fa-404b-98dc-bdfb9dbc8948",
+ "simStepLabel": "Flow 1 - Scaffolding: API Entrypoint File Copied",
+ "simStepDescription": "The installer copies the correct API handler to act as the entry point for all tRPC requests. It intelligently selects between the App Router (`route.ts`) and Pages Router (`[trpc].ts`) versions.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/trpc.ts",
+ "startLine": "33",
+ "endLine": "38",
+ "relevantVariables": [
+ "apiHandlerFile",
+ "routeHandlerFile",
+ "srcToUse",
+ "apiHandlerSrc",
+ "apiHandlerDest"
+ ]
+ },
+ "inputDataExample": "{\n \"appRouter\": true\n}",
+ "outputDataExample": "{\n \"source\": \"template/extras/src/app/api/trpc/[trpc]/route.ts\",\n \"destination\": \"/path/to/my-t3-app/src/app/api/trpc/[trpc]/route.ts\"\n}"
+ },
+ {
+ "simStepId": "726591ad-6a96-4cd1-9f55-38d8cad8af59",
+ "diagramNodeId": "f06009b7-1213-4d49-9d0e-fb7aa815abf5",
+ "simStepLabel": "Flow 1 - Scaffolding: Client-Side Utilities Copied",
+ "simStepDescription": "The installer sets up the client-side tRPC utilities. For the App Router, this includes `src/trpc/react.tsx` and `src/trpc/server.ts`. For the Pages Router, it copies `src/utils/api.ts`. These files provide the type-safe hooks that components use to interact with the API.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/trpc.ts",
+ "startLine": "89",
+ "endLine": "129",
+ "relevantVariables": [
+ "appRouter",
+ "utilsSrc",
+ "utilsDest",
+ "copySrcDest"
+ ]
+ },
+ "inputDataExample": "{\n \"appRouter\": true\n}",
+ "outputDataExample": "{\n \"copied_files\": [\n \"/path/to/my-t3-app/src/trpc/server.ts\",\n \"/path/to/my-t3-app/src/trpc/react.tsx\"\n ]\n}"
+ },
+ {
+ "simStepId": "bf50d88a-65ac-44e9-95c4-741af87395cd",
+ "diagramNodeId": "e629999a-1fbb-41ab-8857-6beee22287ec",
+ "simStepLabel": "Flow 1 - Scaffolding: Pass Package Configuration",
+ "simStepDescription": "After the tRPC installer completes, the overall package configuration, which now confirms tRPC's inclusion, is passed to the next stage of scaffolding: selecting the main UI boilerplate files.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/createProject.ts",
+ "startLine": "71",
+ "endLine": "75",
+ "relevantVariables": [
+ "selectLayoutFile",
+ "selectPageFile",
+ "selectAppFile",
+ "selectIndexFile",
+ "packages"
+ ]
+ },
+ "inputDataExample": "{\n \"projectDir\": \"/path/to/my-t3-app\",\n \"packages\": {\n \"trpc\": { \"inUse\": true },\n \"tailwind\": { \"inUse\": true }\n }\n}",
+ "outputDataExample": "{\n \"projectDir\": \"/path/to/my-t3-app\",\n \"packages\": {\n \"trpc\": { \"inUse\": true },\n \"tailwind\": { \"inUse\": true }\n }\n}"
+ },
+ {
+ "simStepId": "a19527d6-389d-465f-ba7a-a53bdf97cd18",
+ "diagramNodeId": "7c88dab3-d7b7-46a7-97dd-b81090b4e0d2",
+ "simStepLabel": "Flow 1 - Scaffolding: Select tRPC-Aware UI Boilerplate",
+ "simStepDescription": "The scaffolding logic selects specialized UI files that are pre-configured for tRPC. For an App Router project, it chooses `with-trpc.tsx` as the root layout, which wraps the entire application with the necessary tRPC and React Query providers.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/selectBoilerplate.ts",
+ "startLine": "56",
+ "endLine": "64",
+ "relevantVariables": [
+ "selectLayoutFile",
+ "usingTRPC",
+ "layoutFile"
+ ]
+ },
+ "inputDataExample": "{\n \"packages\": {\n \"trpc\": { \"inUse\": true },\n \"tailwind\": { \"inUse\": false }\n }\n}",
+ "outputDataExample": "{\n \"selected_layout_file\": \"with-trpc.tsx\"\n}"
+ },
+ {
+ "simStepId": "465d6958-6428-42f6-8b48-a42a83f5fab7",
+ "diagramNodeId": "5272625a-ff39-4656-a705-d7eae74eca93",
+ "simStepLabel": "Flow 2 - Runtime: Component Calls tRPC Hook",
+ "simStepDescription": "In the generated application, a client-side React component imports the `api` object and uses a type-safe hook, such as `api.post.hello.useQuery`, to fetch data from the backend.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/template/extras/src/utils/api.ts",
+ "startLine": "21",
+ "endLine": "54",
+ "relevantVariables": [
+ "api",
+ "createTRPCNext"
+ ]
+ },
+ "inputDataExample": "{\n \"text\": \"from tRPC\"\n}",
+ "outputDataExample": "{\n \"data\": {\n \"greeting\": \"Hello from tRPC\"\n },\n \"isLoading\": false,\n \"isSuccess\": true\n}"
+ },
+ {
+ "simStepId": "9cd6ffb8-20af-4fe2-a7eb-e02ee5297e40",
+ "diagramNodeId": "14c2b71d-5ce2-4d42-87ce-a7084009adbe",
+ "simStepLabel": "Flow 2 - Runtime: HTTP Request to API",
+ "simStepDescription": "The tRPC client hook automatically constructs and sends an HTTP request to the backend. For a query like `post.hello`, it sends a GET request to `/api/trpc/post.hello` with the input parameters encoded in the URL.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/template/extras/src/utils/api.ts",
+ "startLine": "35",
+ "endLine": "43",
+ "relevantVariables": [
+ "httpBatchLink",
+ "url"
+ ]
+ },
+ "inputDataExample": "{\n \"method\": \"GET\",\n \"url\": \"/api/trpc/post.hello?batch=1&input={\\\"1\\\":{\\\"json\\\":{\\\"text\\\":\\\"from tRPC\\\"}}}\",\n \"headers\": {\n \"Content-Type\": \"application/json\"\n }\n}",
+ "outputDataExample": "{\n \"method\": \"GET\",\n \"url\": \"/api/trpc/post.hello?batch=1&input={\\\"1\\\":{\\\"json\\\":{\\\"text\\\":\\\"from tRPC\\\"}}}\",\n \"headers\": {\n \"Content-Type\": \"application/json\"\n }\n}"
+ },
+ {
+ "simStepId": "6d61c17d-1600-490e-93bf-44e3fa112e6a",
+ "diagramNodeId": "1ef6e547-5d93-41fb-9ed4-cf9421ac1964",
+ "simStepLabel": "Flow 2 - Runtime: API Handler Processes Request",
+ "simStepDescription": "The Next.js API route at `src/pages/api/trpc/[trpc].ts` (or the equivalent App Router file) catches the incoming request. It uses `createNextApiHandler` from tRPC to process the request, linking it to the application's main router.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/template/extras/src/pages/api/trpc/[trpc].ts",
+ "startLine": "8",
+ "endLine": "19",
+ "relevantVariables": [
+ "createNextApiHandler",
+ "appRouter",
+ "createTRPCContext"
+ ]
+ },
+ "inputDataExample": "{\n \"request_path\": \"/api/trpc/post.hello\"\n}",
+ "outputDataExample": "{\n \"status\": \"forwarding to appRouter\"\n}"
+ },
+ {
+ "simStepId": "63a9ac0b-3e97-44af-bd1f-ea530ff5a387",
+ "diagramNodeId": "a4f6f418-7263-4543-8117-3c13247d23c1",
+ "simStepLabel": "Flow 2 - Runtime: Request Passed to Root Router",
+ "simStepDescription": "The API handler passes the request context and path to the `appRouter`. This is the central point for all server-side API logic.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/template/extras/src/pages/api/trpc/[trpc].ts",
+ "startLine": "9",
+ "endLine": "9",
+ "relevantVariables": [
+ "router: appRouter"
+ ]
+ },
+ "inputDataExample": "{\n \"path\": \"post.hello\",\n \"input\": {\n \"text\": \"from tRPC\"\n }\n}",
+ "outputDataExample": "{\n \"path\": \"post.hello\",\n \"input\": {\n \"text\": \"from tRPC\"\n }\n}"
+ },
+ {
+ "simStepId": "104d7bb5-81af-4d61-9a57-185d94f9e28c",
+ "diagramNodeId": "066dcc0e-61f6-4ec4-a392-4539f8dd1b3d",
+ "simStepLabel": "Flow 2 - Runtime: Root Router Directs Call",
+ "simStepDescription": "The `appRouter`, defined in `src/server/api/root.ts`, acts as a switchboard. It examines the request path (`post.hello`) and forwards the call to the appropriate sub-router, which is `postRouter` in this case.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/template/extras/src/server/api/root.ts",
+ "startLine": "9",
+ "endLine": "11",
+ "relevantVariables": [
+ "appRouter",
+ "createTRPCRouter",
+ "postRouter"
+ ]
+ },
+ "inputDataExample": "{\n \"path\": \"post.hello\"\n}",
+ "outputDataExample": "{\n \"target_router\": \"postRouter\"\n}"
+ },
+ {
+ "simStepId": "e5dea768-b741-4f24-bf2b-16986d6f7dc3",
+ "diagramNodeId": "3ff84179-22ea-406d-933e-6bf88e387d33",
+ "simStepLabel": "Flow 2 - Runtime: Call Dispatched to Procedure",
+ "simStepDescription": "The `postRouter` receives the call and dispatches it to the specific `hello` procedure, providing the request context (which can include session data, database connections, etc.) and the validated input.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/template/extras/src/server/api/routers/post/base.ts",
+ "startLine": "15",
+ "endLine": "15",
+ "relevantVariables": [
+ "postRouter",
+ "hello"
+ ]
+ },
+ "inputDataExample": "{\n \"procedure\": \"hello\",\n \"context\": {},\n \"input\": {\n \"text\": \"from tRPC\"\n }\n}",
+ "outputDataExample": "{\n \"procedure\": \"hello\",\n \"context\": {},\n \"input\": {\n \"text\": \"from tRPC\"\n }\n}"
+ },
+ {
+ "simStepId": "572e0d05-9d88-4a24-8e4d-2c7154d2f1d2",
+ "diagramNodeId": "548e72f6-0889-4d51-91d9-2106fa15009b",
+ "simStepLabel": "Flow 2 - Runtime: Procedure Logic Executes",
+ "simStepDescription": "The `hello` procedure's resolver function executes on the server. It uses the input data to perform its business logic—in this simple case, constructing a greeting string.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/template/extras/src/server/api/routers/post/base.ts",
+ "startLine": "16",
+ "endLine": "20",
+ "relevantVariables": [
+ "publicProcedure",
+ "input",
+ "query"
+ ]
+ },
+ "inputDataExample": "{\n \"input\": {\n \"text\": \"from tRPC\"\n }\n}",
+ "outputDataExample": "{\n \"greeting\": \"Hello from tRPC\"\n}"
+ },
+ {
+ "simStepId": "ad46482b-c53d-45e1-96f2-f7d8faa598c5",
+ "diagramNodeId": "a9910f9c-4e1a-41cc-bc6b-8a0c78d2233c",
+ "simStepLabel": "Flow 2 - Runtime: Data Returned to Client",
+ "simStepDescription": "The result from the procedure is returned up the call stack. The tRPC server serializes the data using `superjson` (preserving types like Dates) and sends it back to the client as the HTTP response body.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/template/extras/src/server/api/trpc-pages/base.ts",
+ "startLine": "57",
+ "endLine": "68",
+ "relevantVariables": [
+ "t.create",
+ "transformer: superjson"
+ ]
+ },
+ "inputDataExample": "{\n \"greeting\": \"Hello from tRPC\"\n}",
+ "outputDataExample": "{\n \"greeting\": \"Hello from tRPC\"\n}"
+ },
+ {
+ "simStepId": "329d6e8f-a16e-4be8-a0ce-7680767495a6",
+ "diagramNodeId": "0edf5280-60ad-4e4a-a9cd-7872ba433ee0",
+ "simStepLabel": "Flow 2 - Runtime: Client Updates UI",
+ "simStepDescription": "The client-side tRPC hook receives the HTTP response. It uses `superjson` to deserialize the data, and then React Query updates its internal cache. This state change triggers a re-render of the component, displaying the fetched data to the user.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/template/extras/src/utils/api.ts",
+ "startLine": "53",
+ "endLine": "53",
+ "relevantVariables": [
+ "transformer: superjson"
+ ]
+ },
+ "inputDataExample": "{\n \"response_body\": \"{\\\"result\\\":{\\\"data\\\":{\\\"json\\\":{\\\"greeting\\\":\\\"Hello from tRPC\\\"}}}}\"\n}",
+ "outputDataExample": "{\n \"react_query_cache\": {\n \"post\": {\n \"hello\": {\n \"greeting\": \"Hello from tRPC\"\n }\n }\n }\n}"
+ }
+ ],
+ "description": "Automates the setup of tRPC, including the server-side router, API context creation, and client-side integration with React Query It generates boilerplate for public and protected procedures, demonstrating how to build typesafe APIs The setup includes superjson to ensure data types are preserved between server and client ",
+ "simulationNodesAndEdges": {
+ "f225fee0-7abf-45ca-86df-3578947e92f4": {
+ "simStepIds": [
+ "a2412d9d-c686-4e24-b4fb-07a4c6a9c04f"
+ ]
+ },
+ "8d5b9775-bdfb-4aa0-80ee-62c40bdb9edd": {
+ "simStepIds": [
+ "511ebdf9-0ac2-4523-bdf8-df1afe4dd6f5"
+ ]
+ },
+ "e4df924e-2d58-436e-8e27-a91350d57455": {
+ "simStepIds": [
+ "df6034f0-03ef-493b-b23c-3f54669bb024"
+ ]
+ },
+ "f06009b7-1213-4d49-9d0e-fb7aa815abf5": {
+ "simStepIds": [
+ "726591ad-6a96-4cd1-9f55-38d8cad8af59"
+ ]
+ },
+ "7c88dab3-d7b7-46a7-97dd-b81090b4e0d2": {
+ "simStepIds": [
+ "a19527d6-389d-465f-ba7a-a53bdf97cd18"
+ ]
+ },
+ "5272625a-ff39-4656-a705-d7eae74eca93": {
+ "simStepIds": [
+ "465d6958-6428-42f6-8b48-a42a83f5fab7"
+ ]
+ },
+ "1ef6e547-5d93-41fb-9ed4-cf9421ac1964": {
+ "simStepIds": [
+ "6d61c17d-1600-490e-93bf-44e3fa112e6a"
+ ]
+ },
+ "066dcc0e-61f6-4ec4-a392-4539f8dd1b3d": {
+ "simStepIds": [
+ "104d7bb5-81af-4d61-9a57-185d94f9e28c"
+ ]
+ },
+ "548e72f6-0889-4d51-91d9-2106fa15009b": {
+ "simStepIds": [
+ "572e0d05-9d88-4a24-8e4d-2c7154d2f1d2"
+ ]
+ },
+ "0edf5280-60ad-4e4a-a9cd-7872ba433ee0": {
+ "simStepIds": [
+ "329d6e8f-a16e-4be8-a0ce-7680767495a6"
+ ]
+ },
+ "be363e16-6699-40b9-9cf7-ee3a0ccc1e86": {
+ "simStepIds": [
+ "0c85aa78-afd8-4ccf-b919-b3a28d4be75a"
+ ]
+ },
+ "56eb0fd1-14f4-46cd-85c7-a79d76f4c1b5": {
+ "simStepIds": [
+ "7372cde8-0616-47af-a7fb-af2a173ff16c"
+ ]
+ },
+ "0022c79d-28fa-404b-98dc-bdfb9dbc8948": {
+ "simStepIds": [
+ "5b560bdb-ccad-41ed-8d97-a281de3ef122"
+ ]
+ },
+ "e629999a-1fbb-41ab-8857-6beee22287ec": {
+ "simStepIds": [
+ "bf50d88a-65ac-44e9-95c4-741af87395cd"
+ ]
+ },
+ "14c2b71d-5ce2-4d42-87ce-a7084009adbe": {
+ "simStepIds": [
+ "9cd6ffb8-20af-4fe2-a7eb-e02ee5297e40"
+ ]
+ },
+ "a4f6f418-7263-4543-8117-3c13247d23c1": {
+ "simStepIds": [
+ "63a9ac0b-3e97-44af-bd1f-ea530ff5a387"
+ ]
+ },
+ "3ff84179-22ea-406d-933e-6bf88e387d33": {
+ "simStepIds": [
+ "e5dea768-b741-4f24-bf2b-16986d6f7dc3"
+ ]
+ },
+ "a9910f9c-4e1a-41cc-bc6b-8a0c78d2233c": {
+ "simStepIds": [
+ "ad46482b-c53d-45e1-96f2-f7d8faa598c5"
+ ]
+ }
+ },
+ "isAIGenerated": true,
+ "keywords": "trpcInstaller, createTRPCRouter, appRouter, src/utils/api.ts, trpc.ts",
+ "generationPrompt": "Integrate tRPC for end-to-end typesafe API development",
+ "generationKeywords": "trpcInstaller, createTRPCRouter, appRouter, src/utils/api.ts, trpc.ts",
+ "meta": {
+ "containerCoverage": {
+ "perContainerTotals": {
+ "frontend": {
+ "promptFileCount": 53,
+ "promptTokenCount": 34212,
+ "suggestedFileCount": 26
+ },
+ "server": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 0
+ },
+ "drawio": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 0
+ },
+ "shared": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 3
+ },
+ "unknown": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 0
+ }
+ },
+ "missingContainers": [],
+ "addedFiles": []
+ }
+ }
+ },
+ "Configure a database with Prisma or Drizzle ORM": {
+ "name": "Configure a database with Prisma or Drizzle ORM",
+ "simSteps": [
+ {
+ "simStepId": "1f66343c-581b-4ba0-bafa-16a289d49088",
+ "diagramNodeId": "c2592411-a35f-464d-aae2-e5dd82b2eae9",
+ "simStepLabel": "Prisma Flow: Resolve Prisma Installer",
+ "simStepDescription": "Based on user's selection of 'prisma' during the CLI prompts, the `buildPkgInstallerMap` function maps the package name to its corresponding installer function, `prismaInstaller`.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/index.ts",
+ "startLine": "70",
+ "endLine": "73",
+ "relevantVariables": [
+ "buildPkgInstallerMap",
+ "prismaInstaller"
+ ]
+ },
+ "inputDataExample": "{\"packages\": [\"nextAuth\", \"prisma\", \"tailwind\", \"trpc\"], \"databaseProvider\": \"postgres\"}",
+ "outputDataExample": "{\"prisma\": {\"inUse\": true, \"installer\": \"\"}}"
+ },
+ {
+ "simStepId": "6208ad0b-72fc-4115-9c0f-d529448857e6",
+ "diagramNodeId": "a4e822e3-e854-4405-b97e-e07bbb1ea596",
+ "simStepLabel": "Prisma Flow: Pass Options to Installer",
+ "simStepDescription": "The main installation process invokes the resolved `prismaInstaller` function, passing along all the user-defined project configurations.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/prisma.ts",
+ "startLine": "9",
+ "endLine": "13",
+ "relevantVariables": [
+ "prismaInstaller",
+ "projectDir",
+ "packages",
+ "databaseProvider"
+ ]
+ },
+ "inputDataExample": "{\"projectDir\": \"/path/to/my-t3-app\", \"pkgManager\": \"pnpm\", \"noInstall\": false, \"packages\": {\"...\"}, \"appRouter\": true, \"projectName\": \"my-t3-app\", \"scopedAppName\": \"my-t3-app\", \"databaseProvider\": \"postgres\"}",
+ "outputDataExample": "{\"projectDir\": \"/path/to/my-t3-app\", \"pkgManager\": \"pnpm\", \"noInstall\": false, \"packages\": {\"...\"}, \"appRouter\": true, \"projectName\": \"my-t3-app\", \"scopedAppName\": \"my-t3-app\", \"databaseProvider\": \"postgres\"}"
+ },
+ {
+ "simStepId": "317777e2-f59a-42a8-bf9e-d827f0aa36ae",
+ "diagramNodeId": "190a78a0-b7ac-4244-a5d5-30f286665976",
+ "simStepLabel": "Prisma Flow: Add Dependencies",
+ "simStepDescription": "The `prismaInstaller` function begins by adding the necessary dependencies to the project's `package.json`. It adds `prisma` as a dev dependency and `@prisma/client` as a regular dependency.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/prisma.ts",
+ "startLine": "14",
+ "endLine": "23",
+ "relevantVariables": [
+ "addPackageDependency"
+ ]
+ },
+ "inputDataExample": "{\"projectDir\": \"/path/to/my-t3-app\"}",
+ "outputDataExample": "{}"
+ },
+ {
+ "simStepId": "b73c412c-12b7-4c1b-b601-0928e398cc8a",
+ "diagramNodeId": "ffe49cb0-254a-4f12-a363-7ae52f5914af",
+ "simStepLabel": "Prisma Flow: Select Schema Template",
+ "simStepDescription": "The installer determines the correct `schema.prisma` template file to use. The choice is based on whether an authentication provider like NextAuth.js was also selected and the chosen database provider (e.g., SQLite, PostgreSQL, PlanetScale).",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/prisma.ts",
+ "startLine": "33",
+ "endLine": "44",
+ "relevantVariables": [
+ "schemaBaseName",
+ "schemaSrc"
+ ]
+ },
+ "inputDataExample": "{\"packages\": {\"nextAuth\": {\"inUse\": true}}, \"databaseProvider\": \"postgres\"}",
+ "outputDataExample": "{\"schemaSrc\": \"/template/extras/prisma/schema/with-auth.prisma\"}"
+ },
+ {
+ "simStepId": "fb261ed9-b27e-4ed9-9e88-99ee06534683",
+ "diagramNodeId": "adb4326c-4465-4845-9040-1cbdf556ab2f",
+ "simStepLabel": "Prisma Flow: Customize and Write Schema",
+ "simStepDescription": "The selected schema template is read from the filesystem. The content is then customized to match the selected database provider (e.g., changing 'sqlite' to 'postgresql') and written to the new project's `/prisma/schema.prisma` file.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/prisma.ts",
+ "startLine": "45",
+ "endLine": "63",
+ "relevantVariables": [
+ "schemaText",
+ "fs.readFileSync",
+ "schemaText.replace",
+ "schemaDest",
+ "fs.writeFileSync"
+ ]
+ },
+ "inputDataExample": "{\"schemaSrc\": \"...with-auth.prisma\", \"schemaText\": \"datasource db {\\n provider = \\\"sqlite\\\"\\n url = env(\\\"DATABASE_URL\\\")\\n}\"}",
+ "outputDataExample": "{\"schemaDest\": \"/path/to/my-t3-app/prisma/schema.prisma\", \"finalSchemaText\": \"datasource db {\\n provider = \\\"postgresql\\\"\\n url = env(\\\"DATABASE_URL\\\")\\n}\"}"
+ },
+ {
+ "simStepId": "afe388f6-b4bd-4c9b-ade7-c17d71de973e",
+ "diagramNodeId": "688fe894-cb7f-45cf-b5ef-c35d87e49563",
+ "simStepLabel": "Prisma Flow: Select DB Client File",
+ "simStepDescription": "The installer selects the appropriate database client file (`db-prisma.ts` or `db-prisma-planetscale.ts`) based on the database provider and prepares to copy it into the new project.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/prisma.ts",
+ "startLine": "65",
+ "endLine": "71",
+ "relevantVariables": [
+ "clientSrc",
+ "clientDest"
+ ]
+ },
+ "inputDataExample": "{\"databaseProvider\": \"postgres\"}",
+ "outputDataExample": "{\"clientSrc\": \"/template/extras/src/server/db/db-prisma.ts\", \"clientDest\": \"/path/to/my-t3-app/src/server/db.ts\"}"
+ },
+ {
+ "simStepId": "c2f097d0-d5d3-4ce8-8408-e2e422307943",
+ "diagramNodeId": "2bbe148e-d909-45eb-89d2-f1176b3ac247",
+ "simStepLabel": "Prisma Flow: Copy DB Client and Add Scripts",
+ "simStepDescription": "The selected database client file is copied to `src/server/db.ts` in the target project. Concurrently, necessary scripts like `db:push`, `db:studio`, and `db:generate` are added to the project's `package.json` file.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/prisma.ts",
+ "startLine": "73",
+ "endLine": "84",
+ "relevantVariables": [
+ "addPackageScript",
+ "fs.copySync"
+ ]
+ },
+ "inputDataExample": "{\"clientSrc\": \".../db-prisma.ts\", \"clientDest\": \".../db.ts\", \"projectDir\": \"/path/to/my-t3-app\"}",
+ "outputDataExample": "{}"
+ },
+ {
+ "simStepId": "1d282367-cb63-4ebd-b982-837a2ea6ae36",
+ "diagramNodeId": "3ab3c030-71a6-4574-aaec-23ed12f5dbfb",
+ "simStepLabel": "Prisma Flow: Configuration Complete",
+ "simStepDescription": "The Prisma installer finishes execution, having successfully added dependencies, created the schema and DB client files, and configured the necessary package scripts.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/prisma.ts",
+ "startLine": "85",
+ "endLine": "85",
+ "relevantVariables": []
+ },
+ "inputDataExample": "{}",
+ "outputDataExample": "{}"
+ },
+ {
+ "simStepId": "346b226f-561f-4660-bba1-e73291a75963",
+ "diagramNodeId": "e0f1924a-83b1-4e57-a094-fd0c0c5bb7b4",
+ "simStepLabel": "Drizzle Flow: Resolve Drizzle Installer",
+ "simStepDescription": "Based on user's selection of 'drizzle' during the CLI prompts, the `buildPkgInstallerMap` function maps the package name to its corresponding installer function, `drizzleInstaller`.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/index.ts",
+ "startLine": "74",
+ "endLine": "77",
+ "relevantVariables": [
+ "buildPkgInstallerMap",
+ "drizzleInstaller"
+ ]
+ },
+ "inputDataExample": "{\"packages\": [\"nextAuth\", \"drizzle\", \"tailwind\", \"trpc\"], \"databaseProvider\": \"mysql\"}",
+ "outputDataExample": "{\"drizzle\": {\"inUse\": true, \"installer\": \"\"}}"
+ },
+ {
+ "simStepId": "c490940a-0f6e-4ee7-a482-f1e17e324133",
+ "diagramNodeId": "febf3c47-20fd-414c-9cdd-b8549ab1eab5",
+ "simStepLabel": "Drizzle Flow: Pass Options to Installer",
+ "simStepDescription": "The main installation process invokes the resolved `drizzleInstaller` function, passing along all the user-defined project configurations.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/drizzle.ts",
+ "startLine": "9",
+ "endLine": "14",
+ "relevantVariables": [
+ "drizzleInstaller",
+ "projectDir",
+ "packages",
+ "databaseProvider"
+ ]
+ },
+ "inputDataExample": "{\"projectDir\": \"/path/to/my-t3-app\", \"pkgManager\": \"pnpm\", \"noInstall\": false, \"packages\": {\"...\"}, \"appRouter\": true, \"projectName\": \"my-t3-app\", \"scopedAppName\": \"my-t3-app\", \"databaseProvider\": \"mysql\"}",
+ "outputDataExample": "{\"projectDir\": \"/path/to/my-t3-app\", \"pkgManager\": \"pnpm\", \"noInstall\": false, \"packages\": {\"...\"}, \"appRouter\": true, \"projectName\": \"my-t3-app\", \"scopedAppName\": \"my-t3-app\", \"databaseProvider\": \"mysql\"}"
+ },
+ {
+ "simStepId": "3b58f7d6-97ee-4a76-be16-f88aac032bfb",
+ "diagramNodeId": "d01873cf-3396-4ab9-bd97-5feb0e4f0176",
+ "simStepLabel": "Drizzle Flow: Add Dependencies",
+ "simStepDescription": "The `drizzleInstaller` begins by adding `drizzle-kit` as a dev dependency, `drizzle-orm`, and the specific database driver (e.g., `mysql2` for MySQL) as regular dependencies to `package.json`.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/drizzle.ts",
+ "startLine": "15",
+ "endLine": "34",
+ "relevantVariables": [
+ "addPackageDependency"
+ ]
+ },
+ "inputDataExample": "{\"projectDir\": \"/path/to/my-t3-app\", \"databaseProvider\": \"mysql\"}",
+ "outputDataExample": "{}"
+ },
+ {
+ "simStepId": "50719bc2-46f9-487e-88b8-ad41079bfe44",
+ "diagramNodeId": "269bf727-90b9-44f4-9989-eab3d4d9a873",
+ "simStepLabel": "Drizzle Flow: Select Config and Schema Templates",
+ "simStepDescription": "The installer determines the correct `drizzle.config.ts` and schema template files to use based on the database provider and whether an auth package was selected.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/drizzle.ts",
+ "startLine": "38",
+ "endLine": "55",
+ "relevantVariables": [
+ "configFile",
+ "schemaBaseName",
+ "schemaSrc"
+ ]
+ },
+ "inputDataExample": "{\"databaseProvider\": \"mysql\", \"packages\": {\"nextAuth\": {\"inUse\": true}}}",
+ "outputDataExample": "{\"configFile\": \".../drizzle-config-mysql.ts\", \"schemaSrc\": \".../with-auth-mysql.ts\"}"
+ },
+ {
+ "simStepId": "cd03a6c2-7284-4536-83d4-d323dceb2c11",
+ "diagramNodeId": "f9144dc9-82f4-4e58-94e0-bd58e4f168a2",
+ "simStepLabel": "Drizzle Flow: Customize and Write Files",
+ "simStepDescription": "The content of the selected templates is read from the filesystem. Placeholders for table prefixes are replaced with the scoped application name (e.g., 'project1_*' becomes 'my-t3-app_*'). The customized content is then written to `drizzle.config.ts` and `src/server/db/schema.ts`.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/drizzle.ts",
+ "startLine": "58",
+ "endLine": "68",
+ "relevantVariables": [
+ "schemaContent",
+ "configContent",
+ "fs.readFileSync",
+ "schemaContent.replace",
+ "configContent.replace"
+ ]
+ },
+ "inputDataExample": "{\"schemaContent\": \"...table('project1_post', ...)\", \"configContent\": \"...tablesFilter: ['project1_*']...\", \"scopedAppName\": \"my-t3-app\"}",
+ "outputDataExample": "{\"schemaContent\": \"...table('my-t3-app_post', ...)\", \"configContent\": \"...tablesFilter: ['my-t3-app_*']...\"}"
+ },
+ {
+ "simStepId": "9799f85f-6d01-4fbb-9eaf-02638b03e0bb",
+ "diagramNodeId": "08e62a9b-8bcf-41fc-a4a9-d43c4f0faee4",
+ "simStepLabel": "Drizzle Flow: Write Files to Project",
+ "simStepDescription": "The customized configuration and schema content are written to their respective files in the new project directory.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/drizzle.ts",
+ "startLine": "85",
+ "endLine": "88",
+ "relevantVariables": [
+ "fs.copySync",
+ "fs.writeFileSync"
+ ]
+ },
+ "inputDataExample": "{\"configDest\": \"/path/to/my-t3-app/drizzle.config.ts\", \"schemaDest\": \"/path/to/my-t3-app/src/server/db/schema.ts\"}",
+ "outputDataExample": "{\"configDest\": \"/path/to/my-t3-app/drizzle.config.ts\", \"schemaDest\": \"/path/to/my-t3-app/src/server/db/schema.ts\"}"
+ },
+ {
+ "simStepId": "961c0c28-126c-479c-b722-bf21fe2dc6e2",
+ "diagramNodeId": "ca527877-c651-49e3-8fbf-4ff5999fc713",
+ "simStepLabel": "Drizzle Flow: Copy DB Client and Add Scripts",
+ "simStepDescription": "The Drizzle database client file corresponding to the selected provider is copied to `src/server/db/index.ts`. Drizzle-specific scripts like `db:push`, `db:studio`, and `db:generate` are also added to `package.json`.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/drizzle.ts",
+ "startLine": "69",
+ "endLine": "83",
+ "relevantVariables": [
+ "clientSrc",
+ "addPackageScript",
+ "fs.copySync"
+ ]
+ },
+ "inputDataExample": "{\"clientSrc\": \".../src/server/db/index-drizzle/with-mysql.ts\", \"projectDir\": \"/path/to/my-t3-app\"}",
+ "outputDataExample": "{}"
+ },
+ {
+ "simStepId": "0c32ea2f-ddb6-4090-83d9-bdd32aeda836",
+ "diagramNodeId": "",
+ "simStepLabel": "Drizzle Flow: Configuration Complete",
+ "simStepDescription": "The Drizzle installer finishes its execution, successfully configuring the project with Drizzle ORM, including dependencies, schema, config, client, and package scripts.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/drizzle.ts",
+ "startLine": "90",
+ "endLine": "90",
+ "relevantVariables": []
+ },
+ "inputDataExample": "{}",
+ "outputDataExample": "{}"
+ }
+ ],
+ "description": "Allows users to select either Prisma or Drizzle as their Object-Relational Mapper The CLI configures the chosen ORM for a specific database provider (SQLite, PostgreSQL, MySQL, PlanetScale) It generates initial database schema files that are pre-configured to work with other selected packages like NextAuth js and adds necessary package json scripts for database migrations ",
+ "simulationNodesAndEdges": {
+ "c2592411-a35f-464d-aae2-e5dd82b2eae9": {
+ "simStepIds": [
+ "1f66343c-581b-4ba0-bafa-16a289d49088"
+ ]
+ },
+ "190a78a0-b7ac-4244-a5d5-30f286665976": {
+ "simStepIds": [
+ "317777e2-f59a-42a8-bf9e-d827f0aa36ae"
+ ]
+ },
+ "adb4326c-4465-4845-9040-1cbdf556ab2f": {
+ "simStepIds": [
+ "fb261ed9-b27e-4ed9-9e88-99ee06534683"
+ ]
+ },
+ "2bbe148e-d909-45eb-89d2-f1176b3ac247": {
+ "simStepIds": [
+ "c2f097d0-d5d3-4ce8-8408-e2e422307943"
+ ]
+ },
+ "e0f1924a-83b1-4e57-a094-fd0c0c5bb7b4": {
+ "simStepIds": [
+ "346b226f-561f-4660-bba1-e73291a75963"
+ ]
+ },
+ "d01873cf-3396-4ab9-bd97-5feb0e4f0176": {
+ "simStepIds": [
+ "3b58f7d6-97ee-4a76-be16-f88aac032bfb"
+ ]
+ },
+ "f9144dc9-82f4-4e58-94e0-bd58e4f168a2": {
+ "simStepIds": [
+ "cd03a6c2-7284-4536-83d4-d323dceb2c11"
+ ]
+ },
+ "ca527877-c651-49e3-8fbf-4ff5999fc713": {
+ "simStepIds": [
+ "961c0c28-126c-479c-b722-bf21fe2dc6e2"
+ ]
+ },
+ "a4e822e3-e854-4405-b97e-e07bbb1ea596": {
+ "simStepIds": [
+ "6208ad0b-72fc-4115-9c0f-d529448857e6"
+ ]
+ },
+ "ffe49cb0-254a-4f12-a363-7ae52f5914af": {
+ "simStepIds": [
+ "b73c412c-12b7-4c1b-b601-0928e398cc8a"
+ ]
+ },
+ "688fe894-cb7f-45cf-b5ef-c35d87e49563": {
+ "simStepIds": [
+ "afe388f6-b4bd-4c9b-ade7-c17d71de973e"
+ ]
+ },
+ "3ab3c030-71a6-4574-aaec-23ed12f5dbfb": {
+ "simStepIds": [
+ "1d282367-cb63-4ebd-b982-837a2ea6ae36"
+ ]
+ },
+ "febf3c47-20fd-414c-9cdd-b8549ab1eab5": {
+ "simStepIds": [
+ "c490940a-0f6e-4ee7-a482-f1e17e324133"
+ ]
+ },
+ "269bf727-90b9-44f4-9989-eab3d4d9a873": {
+ "simStepIds": [
+ "50719bc2-46f9-487e-88b8-ad41079bfe44"
+ ]
+ },
+ "08e62a9b-8bcf-41fc-a4a9-d43c4f0faee4": {
+ "simStepIds": [
+ "9799f85f-6d01-4fbb-9eaf-02638b03e0bb"
+ ]
+ }
+ },
+ "isAIGenerated": true,
+ "keywords": "prismaInstaller, drizzleInstaller, schema.prisma, drizzle.config.ts, src/server/db.ts",
+ "generationPrompt": "Configure a database with Prisma or Drizzle ORM",
+ "generationKeywords": "prismaInstaller, drizzleInstaller, schema.prisma, drizzle.config.ts, src/server/db.ts",
+ "meta": {
+ "containerCoverage": {
+ "perContainerTotals": {
+ "frontend": {
+ "promptFileCount": 21,
+ "promptTokenCount": 19820,
+ "suggestedFileCount": 26
+ },
+ "server": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 0
+ },
+ "drawio": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 0
+ },
+ "shared": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 3
+ },
+ "unknown": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 0
+ }
+ },
+ "missingContainers": [],
+ "addedFiles": []
+ }
+ }
+ },
+ "Set up authentication using NextAuth.js": {
+ "name": "Set up authentication using NextAuth.js",
+ "simSteps": [
+ {
+ "simStepId": "f70bea20-ed17-483b-a458-8a62176faca4",
+ "diagramNodeId": "a2eea980-78d7-4669-8f45-611617818b6c",
+ "simStepLabel": "[Scaffolding] Select NextAuth Package",
+ "simStepDescription": "The `create-t3-app` CLI is executed, and the user selects 'nextAuth' as one of the packages to install. This selection is used to determine which installer logic to run.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/index.ts",
+ "startLine": "62",
+ "endLine": "65",
+ "relevantVariables": [
+ "buildPkgInstallerMap",
+ "nextAuthInstaller"
+ ]
+ },
+ "inputDataExample": "{\"selectedPackages\": [\"nextAuth\", \"prisma\", \"trpc\", \"tailwind\"]}",
+ "outputDataExample": "{\"PkgInstallerMap\": {\"nextAuth\": {\"inUse\": true, \"installer\": \"[Function: nextAuthInstaller]\"}}}"
+ },
+ {
+ "simStepId": "b54b26ac-dc82-4312-b041-95a820e16f2b",
+ "diagramNodeId": "95d6db55-5b63-4fc0-95eb-93c5c639aae9",
+ "simStepLabel": "[Scaffolding] Trigger NextAuth Installer",
+ "simStepDescription": "The main CLI logic invokes the `nextAuthInstaller` function, passing in project details like the directory, selected packages, and ORM choice.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/index.ts",
+ "startLine": "64",
+ "endLine": "64",
+ "relevantVariables": [
+ "nextAuthInstaller"
+ ]
+ },
+ "inputDataExample": "{\"projectDir\": \"/path/to/my-t3-app\", \"packages\": {\"prisma\": {\"inUse\": true}, \"nextAuth\": {\"inUse\": true}}}",
+ "outputDataExample": "{\"projectDir\": \"/path/to/my-t3-app\", \"packages\": {\"prisma\": {\"inUse\": true}, \"nextAuth\": {\"inUse\": true}}}"
+ },
+ {
+ "simStepId": "979a587d-9993-4855-bae6-b2d84b9caa02",
+ "diagramNodeId": "169f3a4d-8d19-4d99-af9b-1e517017fded",
+ "simStepLabel": "[Scaffolding] Determine and Prepare Auth Files",
+ "simStepDescription": "The `nextAuthInstaller` runs. It adds the `next-auth` and `@auth/prisma-adapter` dependencies. It then determines the correct template files to use based on the project configuration (e.g., using Prisma), defining source and destination paths for the API handler and configuration files.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/nextAuth.ts",
+ "startLine": "9",
+ "endLine": "42",
+ "relevantVariables": [
+ "nextAuthInstaller",
+ "addPackageDependency",
+ "authConfigSrc",
+ "apiHandlerSrc"
+ ]
+ },
+ "inputDataExample": "{\"projectDir\": \"/path/to/my-t3-app\", \"packages\": {\"prisma\": {\"inUse\": true}}}",
+ "outputDataExample": "{\"apiHandlerSrc\": \".../route.ts\", \"authConfigSrc\": \".../with-prisma.ts\", \"authIndexSrc\": \".../index.ts\"}"
+ },
+ {
+ "simStepId": "0429d8fa-ce25-4f7e-900b-de8ec92ace7a",
+ "diagramNodeId": "04744038-130c-4ea9-8f53-f6c68669f405",
+ "simStepLabel": "[Scaffolding] File Paths for Copying",
+ "simStepDescription": "The calculated source and destination paths for the NextAuth.js template files are passed to the file system utility to be copied into the new project.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/nextAuth.ts",
+ "startLine": "44",
+ "endLine": "46",
+ "relevantVariables": [
+ "apiHandlerSrc",
+ "apiHandlerDest",
+ "authConfigSrc",
+ "authConfigDest"
+ ]
+ },
+ "inputDataExample": "{\"source\": \"/cli/template/extras/src/server/auth/config/with-prisma.ts\", \"destination\": \"/path/to/my-t3-app/src/server/auth/config.ts\"}",
+ "outputDataExample": "{\"source\": \"/cli/template/extras/src/server/auth/config/with-prisma.ts\", \"destination\": \"/path/to/my-t3-app/src/server/auth/config.ts\"}"
+ },
+ {
+ "simStepId": "447bee75-fc5a-460c-b086-c061d70f93e5",
+ "diagramNodeId": "6ca52bcf-5157-4a2a-ac62-f1dd8860c5b2",
+ "simStepLabel": "[Scaffolding] Copy Auth Files into Project",
+ "simStepDescription": "The file system utility copies the necessary NextAuth.js files from the `create-t3-app` template directory into the newly generated project. This includes the API route handler, the ORM-specific configuration, and the main auth index file, effectively setting up the authentication boilerplate.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/nextAuth.ts",
+ "startLine": "44",
+ "endLine": "46",
+ "relevantVariables": [
+ "fs.copySync"
+ ]
+ },
+ "inputDataExample": "{\"filesToCopy\": [\"api/auth/[...nextauth]/route.ts\", \"server/auth/config.ts\", \"server/auth/index.ts\"]}",
+ "outputDataExample": "{\"status\": \"File copy complete\"}"
+ },
+ {
+ "simStepId": "f2f8c5e1-844d-4c6e-97e1-cd6c6f93b4d0",
+ "diagramNodeId": "0fb31c20-8330-40f8-9f79-7e3abf0744f4",
+ "simStepLabel": "[Runtime] Page Load Initiates Session Check",
+ "simStepDescription": "A user visits a page in the generated application. A React component on that page, `AuthShowcase`, calls the `useSession` hook to begin the process of fetching the current user's authentication state.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/template/extras/src/pages/index/with-auth-trpc-tw.tsx",
+ "startLine": "59",
+ "endLine": "59",
+ "relevantVariables": [
+ "useSession"
+ ]
+ },
+ "inputDataExample": "{}",
+ "outputDataExample": "{}"
+ },
+ {
+ "simStepId": "1621d9a7-9cba-4d68-9d62-fa20a7f13dc7",
+ "diagramNodeId": "a512298a-9dba-4bca-8d3f-52936b73e86a",
+ "simStepLabel": "[Runtime] Client Requests Session Data",
+ "simStepDescription": "The `useSession` hook makes a client-side API call to the `/api/auth/session` endpoint to get the current session information.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/template/extras/src/pages/index/with-auth-trpc-tw.tsx",
+ "startLine": "59",
+ "endLine": "59",
+ "relevantVariables": [
+ "useSession"
+ ]
+ },
+ "inputDataExample": "{\"method\": \"GET\", \"url\": \"/api/auth/session\"}",
+ "outputDataExample": "{\"session\": {\"user\": {\"name\": \"john_doe\", \"id\": \"user_123\"}}}"
+ },
+ {
+ "simStepId": "addf4232-963a-4700-af13-3a04cc8d5b3c",
+ "diagramNodeId": "bd686086-86a5-4f00-ae4b-978fa6ce76f2",
+ "simStepLabel": "[Runtime] Auth API Route Handles Request",
+ "simStepDescription": "The API request is routed to the NextAuth.js catch-all handler, which initializes NextAuth with the project's specific configuration.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/template/extras/src/server/auth/index.ts",
+ "startLine": "6",
+ "endLine": "6",
+ "relevantVariables": [
+ "NextAuth",
+ "authConfig"
+ ]
+ },
+ "inputDataExample": "{\"request\": \"GET /api/auth/session\"}",
+ "outputDataExample": "{\"request\": \"GET /api/auth/session\"}"
+ },
+ {
+ "simStepId": "a015b59c-1f2a-4c21-bb5c-b980f96161d5",
+ "diagramNodeId": "6179e1d1-cef5-4852-9925-2575e6b8b2f7",
+ "simStepLabel": "[Runtime] Load Auth Configuration with DB Adapter",
+ "simStepDescription": "NextAuth.js loads the configuration from `authConfig`. This configuration specifies using the Prisma adapter to interact with the database for session, user, and account management. It also defines callbacks to customize session data.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/template/extras/src/server/auth/config/with-prisma.ts",
+ "startLine": "33",
+ "endLine": "56",
+ "relevantVariables": [
+ "authConfig",
+ "PrismaAdapter",
+ "db"
+ ]
+ },
+ "inputDataExample": "{}",
+ "outputDataExample": "{\"authConfig\": {\"adapter\": \"PrismaAdapter\", \"providers\": [\"DiscordProvider\"], \"callbacks\": {\"session\": \"[Function]\"}}}"
+ },
+ {
+ "simStepId": "7fef5ad7-0bb9-4f49-b833-a920d5c212b2",
+ "diagramNodeId": "6f54ede3-90b5-4528-885a-ff9380a3ee96",
+ "simStepLabel": "[Runtime] Session Data Returned to Client",
+ "simStepDescription": "Using the Prisma adapter, NextAuth retrieves the session from the database, runs the `session` callback to add the user ID to the payload, and returns the final session object in the API response.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/template/extras/src/server/auth/config/with-prisma.ts",
+ "startLine": "48",
+ "endLine": "54",
+ "relevantVariables": [
+ "session"
+ ]
+ },
+ "inputDataExample": "{\"sessionFromDB\": {\"sessionToken\": \"...\", \"userId\": \"user_123\"}, \"userFromDB\": {\"id\": \"user_123\", \"name\": \"john_doe\"}}",
+ "outputDataExample": "{\"body\": {\"user\": {\"name\": \"john_doe\", \"id\": \"user_123\"}, \"expires\": \"...\"}}"
+ },
+ {
+ "simStepId": "6bad09b8-afb0-407e-8ffe-05d7c4b6e50a",
+ "diagramNodeId": "9f72d2bd-5c83-4c61-a68f-d6d66ff726d7",
+ "simStepLabel": "[Runtime] Frontend Renders UI with Session Data",
+ "simStepDescription": "The client-side `useSession` hook receives the session data. This triggers a re-render of the `AuthShowcase` component, which now displays a welcome message with the user's name and enables the tRPC query for a secret message.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/template/extras/src/pages/index/with-auth-trpc-tw.tsx",
+ "startLine": "69",
+ "endLine": "70",
+ "relevantVariables": [
+ "sessionData"
+ ]
+ },
+ "inputDataExample": "{\"sessionData\": {\"user\": {\"name\": \"john_doe\", \"id\": \"user_123\"}}}",
+ "outputDataExample": "{\"uiState\": \"Display 'Logged in as john_doe'\"}"
+ },
+ {
+ "simStepId": "6057145f-d6b7-41ed-ba18-24c74dde34a6",
+ "diagramNodeId": "7f821db3-2427-4e78-8ad1-92542cf827ab",
+ "simStepLabel": "[Runtime] Client Triggers Protected tRPC Query",
+ "simStepDescription": "Now that the user is logged in, the `enabled` flag on the `useQuery` hook becomes true, and the client makes a tRPC request to the `post.getSecretMessage` procedure.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/template/extras/src/pages/index/with-auth-trpc-tw.tsx",
+ "startLine": "61",
+ "endLine": "63",
+ "relevantVariables": [
+ "api.post.getSecretMessage.useQuery",
+ "sessionData"
+ ]
+ },
+ "inputDataExample": "{\"enabled\": true}",
+ "outputDataExample": "{\"trpcRequest\": {\"path\": \"post.getSecretMessage\", \"input\": null}}"
+ },
+ {
+ "simStepId": "a685579d-061d-4396-a2d7-a4af2ea6de50",
+ "diagramNodeId": "9d66c615-14cd-436e-8ffe-efb75b44a93d",
+ "simStepLabel": "[Runtime] Protected Procedure Middleware Verifies Session",
+ "simStepDescription": "On the server, the tRPC request is handled. Before the resolver logic is executed, the `protectedProcedure` middleware runs. It checks the request context to ensure a valid user session exists.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/template/extras/src/server/api/trpc-app/with-auth-db.ts",
+ "startLine": "123",
+ "endLine": "133",
+ "relevantVariables": [
+ "protectedProcedure",
+ "ctx.session"
+ ]
+ },
+ "inputDataExample": "{\"ctx\": {\"session\": {\"user\": {\"id\": \"user_123\", \"name\": \"john_doe\"}}}}",
+ "outputDataExample": "{\"nextMiddlewareInput\": {\"ctx\": {\"session\": {\"user\": {\"id\": \"user_123\", \"name\": \"john_doe\"}}}}}"
+ },
+ {
+ "simStepId": "661f19d8-ac62-4c14-9dea-92b5deff0f51",
+ "diagramNodeId": "a1232a9e-ee54-4d7a-b352-d2bd842a0ab0",
+ "simStepLabel": "[Runtime] Authentication Confirmed, Control Passed to Resolver",
+ "simStepDescription": "As the session is valid, the middleware confirms the user is authorized and passes control to the actual resolver function for `getSecretMessage`.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/template/extras/src/server/api/trpc-app/with-auth-db.ts",
+ "startLine": "127",
+ "endLine": "127",
+ "relevantVariables": [
+ "next"
+ ]
+ },
+ "inputDataExample": "{\"ctx\": {\"session\": {\"user\": {\"id\": \"user_123\"}}}}",
+ "outputDataExample": "{\"ctx\": {\"session\": {\"user\": {\"id\": \"user_123\"}}}}"
+ },
+ {
+ "simStepId": "4499ec8c-9843-4f07-8954-f027e8c6e149",
+ "diagramNodeId": "680768d5-64c0-4f8d-be33-11ca0a4c0d3a",
+ "simStepLabel": "[Runtime] Resolver Executes and Returns Secret Data",
+ "simStepDescription": "The `getSecretMessage` resolver, now confirmed to be accessed by an authenticated user, executes its logic and returns a secret message.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/template/extras/src/server/api/routers/post/with-auth-prisma.ts",
+ "startLine": "38",
+ "endLine": "40",
+ "relevantVariables": [
+ "getSecretMessage",
+ "protectedProcedure"
+ ]
+ },
+ "inputDataExample": "{\"ctx\": {\"session\": {\"user\": {\"id\": \"user_123\"}}}}",
+ "outputDataExample": "{\"message\": \"you can now see this secret message!\"}"
+ },
+ {
+ "simStepId": "6983d3db-c70c-44fc-a4a5-af42d2a00121",
+ "diagramNodeId": "a5eefd48-f544-4ee6-a06d-68cc973d32f8",
+ "simStepLabel": "[Runtime] Protected Data Returned to Client",
+ "simStepDescription": "The tRPC server sends the successful result from the protected procedure back to the client.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/template/extras/src/server/api/routers/post/with-auth-prisma.ts",
+ "startLine": "39",
+ "endLine": "39",
+ "relevantVariables": [
+ "return \"you can now see this secret message!\""
+ ]
+ },
+ "inputDataExample": "{\"data\": \"you can now see this secret message!\"}",
+ "outputDataExample": "{\"data\": \"you can now see this secret message!\"}"
+ },
+ {
+ "simStepId": "f6138753-dab0-4fbf-ab35-638ab9d27900",
+ "diagramNodeId": "bab9190f-6722-4566-a1ad-aa24cadd8a52",
+ "simStepLabel": "[Runtime] Frontend Renders Protected Data",
+ "simStepDescription": "The `useQuery` hook receives the secret message from the API call, triggering a final re-render of the `AuthShowcase` component to display the protected data.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/template/extras/src/pages/index/with-auth-trpc-tw.tsx",
+ "startLine": "70",
+ "endLine": "70",
+ "relevantVariables": [
+ "secretMessage"
+ ]
+ },
+ "inputDataExample": "{\"secretMessage\": \"you can now see this secret message!\"}",
+ "outputDataExample": "{\"uiState\": \"Display ' - you can now see this secret message!'\"}"
+ }
+ ],
+ "description": "Integrates NextAuth js for robust authentication, including the necessary API routes and configuration It automatically configures the NextAuth js adapter for the selected ORM (Prisma or Drizzle), linking user sessions and accounts to the database The generated boilerplate includes example UI components and protected API routes to demonstrate session management ",
+ "simulationNodesAndEdges": {
+ "a2eea980-78d7-4669-8f45-611617818b6c": {
+ "simStepIds": [
+ "f70bea20-ed17-483b-a458-8a62176faca4"
+ ]
+ },
+ "169f3a4d-8d19-4d99-af9b-1e517017fded": {
+ "simStepIds": [
+ "979a587d-9993-4855-bae6-b2d84b9caa02"
+ ]
+ },
+ "6ca52bcf-5157-4a2a-ac62-f1dd8860c5b2": {
+ "simStepIds": [
+ "447bee75-fc5a-460c-b086-c061d70f93e5"
+ ]
+ },
+ "a512298a-9dba-4bca-8d3f-52936b73e86a": {
+ "simStepIds": [
+ "1621d9a7-9cba-4d68-9d62-fa20a7f13dc7"
+ ]
+ },
+ "6179e1d1-cef5-4852-9925-2575e6b8b2f7": {
+ "simStepIds": [
+ "a015b59c-1f2a-4c21-bb5c-b980f96161d5"
+ ]
+ },
+ "9f72d2bd-5c83-4c61-a68f-d6d66ff726d7": {
+ "simStepIds": [
+ "6bad09b8-afb0-407e-8ffe-05d7c4b6e50a"
+ ]
+ },
+ "9d66c615-14cd-436e-8ffe-efb75b44a93d": {
+ "simStepIds": [
+ "a685579d-061d-4396-a2d7-a4af2ea6de50"
+ ]
+ },
+ "680768d5-64c0-4f8d-be33-11ca0a4c0d3a": {
+ "simStepIds": [
+ "4499ec8c-9843-4f07-8954-f027e8c6e149"
+ ]
+ },
+ "bab9190f-6722-4566-a1ad-aa24cadd8a52": {
+ "simStepIds": [
+ "f6138753-dab0-4fbf-ab35-638ab9d27900"
+ ]
+ },
+ "95d6db55-5b63-4fc0-95eb-93c5c639aae9": {
+ "simStepIds": [
+ "b54b26ac-dc82-4312-b041-95a820e16f2b"
+ ]
+ },
+ "04744038-130c-4ea9-8f53-f6c68669f405": {
+ "simStepIds": [
+ "0429d8fa-ce25-4f7e-900b-de8ec92ace7a"
+ ]
+ },
+ "0fb31c20-8330-40f8-9f79-7e3abf0744f4": {
+ "simStepIds": [
+ "f2f8c5e1-844d-4c6e-97e1-cd6c6f93b4d0"
+ ]
+ },
+ "bd686086-86a5-4f00-ae4b-978fa6ce76f2": {
+ "simStepIds": [
+ "addf4232-963a-4700-af13-3a04cc8d5b3c"
+ ]
+ },
+ "6f54ede3-90b5-4528-885a-ff9380a3ee96": {
+ "simStepIds": [
+ "7fef5ad7-0bb9-4f49-b833-a920d5c212b2"
+ ]
+ },
+ "7f821db3-2427-4e78-8ad1-92542cf827ab": {
+ "simStepIds": [
+ "6057145f-d6b7-41ed-ba18-24c74dde34a6"
+ ]
+ },
+ "a1232a9e-ee54-4d7a-b352-d2bd842a0ab0": {
+ "simStepIds": [
+ "661f19d8-ac62-4c14-9dea-92b5deff0f51"
+ ]
+ },
+ "a5eefd48-f544-4ee6-a06d-68cc973d32f8": {
+ "simStepIds": [
+ "6983d3db-c70c-44fc-a4a5-af42d2a00121"
+ ]
+ }
+ },
+ "isAIGenerated": true,
+ "keywords": "nextAuthInstaller, nextauth/route.ts, authConfig, protectedProcedure, useSession",
+ "generationPrompt": "Set up authentication using NextAuth.js",
+ "generationKeywords": "nextAuthInstaller, nextauth/route.ts, authConfig, protectedProcedure, useSession",
+ "meta": {
+ "containerCoverage": {
+ "perContainerTotals": {
+ "frontend": {
+ "promptFileCount": 31,
+ "promptTokenCount": 15703,
+ "suggestedFileCount": 26
+ },
+ "server": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 0
+ },
+ "drawio": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 0
+ },
+ "shared": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 3
+ },
+ "unknown": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 0
+ }
+ },
+ "missingContainers": [],
+ "addedFiles": []
+ }
+ }
+ },
+ "Generate dynamic, interconnected boilerplate code": {
+ "name": "Generate dynamic, interconnected boilerplate code",
+ "simSteps": [
+ {
+ "simStepId": "de4e966a-ceca-43fb-88b6-975128e1ab21",
+ "diagramNodeId": "177076bf-da3d-4009-a28e-8beea8347e59",
+ "simStepLabel": "Project Creation Initiated",
+ "simStepDescription": "The project creation process begins inside the `createProject` function. It receives the user's choices for the project name, selected packages, and other configuration options.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/createProject.ts",
+ "startLine": "29",
+ "endLine": "36",
+ "relevantVariables": [
+ "createProject",
+ "CreateProjectOptions"
+ ]
+ },
+ "inputDataExample": "{\n \"projectName\": \"my-t3-app\",\n \"scopedAppName\": \"my-t3-app\",\n \"packages\": {\n \"nextAuth\": { \"inUse\": true, \"installer\": \"\" },\n \"prisma\": { \"inUse\": true, \"installer\": \"\" },\n \"trpc\": { \"inUse\": true, \"installer\": \"\" },\n \"tailwind\": { \"inUse\": true, \"installer\": \"\" },\n \"betterAuth\": { \"inUse\": false, \"installer\": \"\" },\n \"drizzle\": { \"inUse\": false, \"installer\": \"\" }\n },\n \"noInstall\": false,\n \"appRouter\": true,\n \"databaseProvider\": \"sqlite\"\n}",
+ "outputDataExample": "{\n \"projectDir\": \"/path/to/current/dir/my-t3-app\",\n \"pkgManager\": \"pnpm\"\n}"
+ },
+ {
+ "simStepId": "a420b1fc-f902-4c8c-8b96-3e1ce086385d",
+ "diagramNodeId": "9cb9b456-7ea9-444f-a2f3-675e6738f009",
+ "simStepLabel": "Configuration -> Package Installer",
+ "simStepDescription": "The `createProject` function calls `installPackages`, passing along all the project configuration details to start the process of scaffolding the selected packages.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/createProject.ts",
+ "startLine": "52",
+ "endLine": "61",
+ "relevantVariables": [
+ "installPackages"
+ ]
+ },
+ "inputDataExample": "{\n \"projectName\": \"my-t3-app\",\n \"scopedAppName\": \"my-t3-app\",\n \"projectDir\": \"/path/to/current/dir/my-t3-app\",\n \"pkgManager\": \"pnpm\",\n \"packages\": {\n \"nextAuth\": { \"inUse\": true, \"installer\": \"\" },\n \"prisma\": { \"inUse\": true, \"installer\": \"\" },\n \"trpc\": { \"inUse\": true, \"installer\": \"\" },\n \"tailwind\": { \"inUse\": true, \"installer\": \"\" }\n },\n \"noInstall\": false,\n \"appRouter\": true,\n \"databaseProvider\": \"sqlite\"\n}",
+ "outputDataExample": "{\n \"projectName\": \"my-t3-app\",\n \"scopedAppName\": \"my-t3-app\",\n \"projectDir\": \"/path/to/current/dir/my-t3-app\",\n \"pkgManager\": \"pnpm\",\n \"packages\": {\n \"nextAuth\": { \"inUse\": true, \"installer\": \"\" },\n \"prisma\": { \"inUse\": true, \"installer\": \"\" },\n \"trpc\": { \"inUse\": true, \"installer\": \"\" },\n \"tailwind\": { \"inUse\": true, \"installer\": \"\" }\n },\n \"noInstall\": false,\n \"appRouter\": true,\n \"databaseProvider\": \"sqlite\"\n}"
+ },
+ {
+ "simStepId": "1c34f5ac-cb00-4e58-821f-042443cdf4a7",
+ "diagramNodeId": "8af610d5-4a33-4f74-a9f3-457adc87cee9",
+ "simStepLabel": "Iterate and Run Package Installers",
+ "simStepDescription": "The `installPackages` function iterates through the map of packages. For each package marked `inUse`, it invokes the corresponding installer function to add the specific boilerplate for that technology.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/installPackages.ts",
+ "startLine": "18",
+ "endLine": "28",
+ "relevantVariables": [
+ "packages",
+ "pkgOpts.installer"
+ ]
+ },
+ "inputDataExample": "{\n \"packages\": {\n \"nextAuth\": { \"inUse\": true, \"installer\": \"\" },\n \"prisma\": { \"inUse\": true, \"installer\": \"\" },\n \"trpc\": { \"inUse\": true, \"installer\": \"\" },\n \"tailwind\": { \"inUse\": true, \"installer\": \"\" }\n }\n}",
+ "outputDataExample": "{\n \"name\": \"trpc\",\n \"pkgOpts\": {\n \"inUse\": true,\n \"installer\": \"\"\n }\n}"
+ },
+ {
+ "simStepId": "07489ec1-deeb-4c9b-8601-d0dfa0c5f840",
+ "diagramNodeId": "668f1aab-854f-48b0-a3cb-541172daa2f3",
+ "simStepLabel": "Invoke tRPC Installer",
+ "simStepDescription": "During the iteration, the installer for `tRPC` is called with the project options.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/installPackages.ts",
+ "startLine": "21",
+ "endLine": "21",
+ "relevantVariables": [
+ "pkgOpts.installer",
+ "options"
+ ]
+ },
+ "inputDataExample": "{\n \"projectDir\": \"/path/to/current/dir/my-t3-app\",\n \"packages\": {\n \"nextAuth\": { \"inUse\": true },\n \"prisma\": { \"inUse\": true },\n \"trpc\": { \"inUse\": true }\n },\n \"appRouter\": true\n}",
+ "outputDataExample": "{\n \"projectDir\": \"/path/to/current/dir/my-t3-app\",\n \"packages\": {\n \"nextAuth\": { \"inUse\": true },\n \"prisma\": { \"inUse\": true },\n \"trpc\": { \"inUse\": true }\n },\n \"appRouter\": true\n}"
+ },
+ {
+ "simStepId": "14ff0e0e-dfa1-4779-b5ea-48140ee16cec",
+ "diagramNodeId": "4c50b970-c419-4242-8081-969c1976de48",
+ "simStepLabel": "Select tRPC Boilerplate",
+ "simStepDescription": "Inside the `trpcInstaller`, the code checks which other packages (like Auth and Prisma) are being used. Based on these combinations, it dynamically selects the correct template file for the example tRPC router. In this case, since NextAuth and Prisma are enabled, it chooses 'with-auth-prisma.ts'.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/trpc.ts",
+ "startLine": "59",
+ "endLine": "70",
+ "relevantVariables": [
+ "exampleRouterFile",
+ "usingAuth",
+ "usingPrisma"
+ ]
+ },
+ "inputDataExample": "{\n \"packages\": {\n \"nextAuth\": { \"inUse\": true },\n \"prisma\": { \"inUse\": true },\n \"drizzle\": { \"inUse\": false },\n \"betterAuth\": { \"inUse\": false }\n }\n}",
+ "outputDataExample": "{\n \"exampleRouterFile\": \"with-auth-prisma.ts\"\n}"
+ },
+ {
+ "simStepId": "f9d52577-4c0d-4800-805c-9b36ab0d95fa",
+ "diagramNodeId": "10a59b71-51b3-4231-b7ba-1a746ce638a4",
+ "simStepLabel": "Copy tRPC Router File",
+ "simStepDescription": "The selected tRPC router template is copied from the CLI's internal template directory to the newly created project's `src/server/api/routers/post.ts` file.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/trpc.ts",
+ "startLine": "131",
+ "endLine": "133",
+ "relevantVariables": [
+ "copySrcDest",
+ "fs.copySync"
+ ]
+ },
+ "inputDataExample": "{\n \"src\": \"/template/extras/src/server/api/routers/post/with-auth-prisma.ts\",\n \"dest\": \"/path/to/current/dir/my-t3-app/src/server/api/routers/post.ts\"\n}",
+ "outputDataExample": "{\n \"src\": \"/template/extras/src/server/api/routers/post/with-auth-prisma.ts\",\n \"dest\": \"/path/to/current/dir/my-t3-app/src/server/api/routers/post.ts\"\n}"
+ },
+ {
+ "simStepId": "226a5291-4ded-4539-b9a6-1786a4cbe8ef",
+ "diagramNodeId": "8b85fe88-0901-4170-9de0-5020741016c7",
+ "simStepLabel": "Select Frontend Page Component",
+ "simStepDescription": "After all package installers have run, control returns to `createProject`, which then calls `selectPageFile` to determine the correct frontend component for the main page based on the user's selections.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/createProject.ts",
+ "startLine": "72",
+ "endLine": "72",
+ "relevantVariables": [
+ "selectPageFile",
+ "packages"
+ ]
+ },
+ "inputDataExample": "{\n \"projectDir\": \"/path/to/current/dir/my-t3-app\",\n \"appRouter\": true\n}",
+ "outputDataExample": "{}"
+ },
+ {
+ "simStepId": "8816c70f-8e0f-485d-bd6e-f7838aee8e2e",
+ "diagramNodeId": "2c10e351-4c6e-44ec-a223-152dfc06d401",
+ "simStepLabel": "Configuration -> Page Selector",
+ "simStepDescription": "The project directory and the map of selected packages are passed to the `selectPageFile` function.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/createProject.ts",
+ "startLine": "72",
+ "endLine": "72",
+ "relevantVariables": [
+ "selectPageFile"
+ ]
+ },
+ "inputDataExample": "{\n \"projectDir\": \"/path/to/current/dir/my-t3-app\",\n \"packages\": {\n \"trpc\": { \"inUse\": true },\n \"tailwind\": { \"inUse\": true },\n \"nextAuth\": { \"inUse\": true },\n \"betterAuth\": { \"inUse\": false }\n }\n}",
+ "outputDataExample": "{\n \"projectDir\": \"/path/to/current/dir/my-t3-app\",\n \"packages\": {\n \"trpc\": { \"inUse\": true },\n \"tailwind\": { \"inUse\": true },\n \"nextAuth\": { \"inUse\": true },\n \"betterAuth\": { \"inUse\": false }\n }\n}"
+ },
+ {
+ "simStepId": "7b8262b2-328c-45a8-9c08-a6e0e84cb48b",
+ "diagramNodeId": "e6cd2ba5-772e-432a-8f03-f6f79e150e64",
+ "simStepLabel": "Dynamically Choose Page File",
+ "simStepDescription": "Inside `selectPageFile`, a series of conditional checks determines the correct React component to use for the project's main page. With tRPC, Tailwind CSS, and NextAuth selected, the file `with-auth-trpc-tw.tsx` is chosen.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/selectBoilerplate.ts",
+ "startLine": "131",
+ "endLine": "132",
+ "relevantVariables": [
+ "indexFile",
+ "usingTRPC",
+ "usingTw",
+ "usingAuth"
+ ]
+ },
+ "inputDataExample": "{\n \"usingTRPC\": true,\n \"usingTw\": true,\n \"usingAuth\": true,\n \"usingBetterAuth\": false\n}",
+ "outputDataExample": "{\n \"indexFile\": \"with-auth-trpc-tw.tsx\"\n}"
+ },
+ {
+ "simStepId": "187750d0-1eee-4237-9056-bdf612678354",
+ "diagramNodeId": "",
+ "simStepLabel": "Copy Frontend Page File",
+ "simStepDescription": "The chosen page template, `with-auth-trpc-tw.tsx`, is copied from the CLI's internal template directory to the newly created project's `src/app/page.tsx` file, completing the dynamic generation of the boilerplate.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/selectBoilerplate.ts",
+ "startLine": "145",
+ "endLine": "145",
+ "relevantVariables": [
+ "fs.copySync",
+ "indexSrc",
+ "indexDest"
+ ]
+ },
+ "inputDataExample": "{\n \"indexSrc\": \"/template/extras/src/app/page/with-auth-trpc-tw.tsx\",\n \"indexDest\": \"/path/to/current/dir/my-t3-app/src/app/page.tsx\"\n}",
+ "outputDataExample": "{\n \"indexSrc\": \"/template/extras/src/app/page/with-auth-trpc-tw.tsx\",\n \"indexDest\": \"/path/to/current/dir/my-t3-app/src/app/page.tsx\"\n}"
+ }
+ ],
+ "description": "Dynamically selects and combines different template files based on the chosen technology stack Instead of a single monolithic template, the CLI pieces together the correct files for UI, API routes, and database schemas This provides a working, integrated example showing how all selected technologies (e g , NextAuth js, tRPC, and Prisma) interact, offering a clear and relevant starting point for development ",
+ "simulationNodesAndEdges": {
+ "177076bf-da3d-4009-a28e-8beea8347e59": {
+ "simStepIds": [
+ "de4e966a-ceca-43fb-88b6-975128e1ab21"
+ ]
+ },
+ "8af610d5-4a33-4f74-a9f3-457adc87cee9": {
+ "simStepIds": [
+ "1c34f5ac-cb00-4e58-821f-042443cdf4a7"
+ ]
+ },
+ "4c50b970-c419-4242-8081-969c1976de48": {
+ "simStepIds": [
+ "14ff0e0e-dfa1-4779-b5ea-48140ee16cec"
+ ]
+ },
+ "8b85fe88-0901-4170-9de0-5020741016c7": {
+ "simStepIds": [
+ "226a5291-4ded-4539-b9a6-1786a4cbe8ef"
+ ]
+ },
+ "e6cd2ba5-772e-432a-8f03-f6f79e150e64": {
+ "simStepIds": [
+ "7b8262b2-328c-45a8-9c08-a6e0e84cb48b"
+ ]
+ },
+ "9cb9b456-7ea9-444f-a2f3-675e6738f009": {
+ "simStepIds": [
+ "a420b1fc-f902-4c8c-8b96-3e1ce086385d"
+ ]
+ },
+ "668f1aab-854f-48b0-a3cb-541172daa2f3": {
+ "simStepIds": [
+ "07489ec1-deeb-4c9b-8601-d0dfa0c5f840"
+ ]
+ },
+ "10a59b71-51b3-4231-b7ba-1a746ce638a4": {
+ "simStepIds": [
+ "f9d52577-4c0d-4800-805c-9b36ab0d95fa"
+ ]
+ },
+ "2c10e351-4c6e-44ec-a223-152dfc06d401": {
+ "simStepIds": [
+ "8816c70f-8e0f-485d-bd6e-f7838aee8e2e"
+ ]
+ }
+ },
+ "isAIGenerated": true,
+ "keywords": "selectBoilerplate.ts, with-auth-trpc-tw.tsx, with-auth-prisma.ts, installPackages, PkgInstallerMap",
+ "generationPrompt": "Generate dynamic, interconnected boilerplate code",
+ "generationKeywords": "selectBoilerplate.ts, with-auth-trpc-tw.tsx, with-auth-prisma.ts, installPackages, PkgInstallerMap",
+ "meta": {
+ "containerCoverage": {
+ "perContainerTotals": {
+ "frontend": {
+ "promptFileCount": 5,
+ "promptTokenCount": 2935,
+ "suggestedFileCount": 26
+ },
+ "server": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 0
+ },
+ "drawio": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 0
+ },
+ "shared": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 3
+ },
+ "unknown": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 0
+ }
+ },
+ "missingContainers": [],
+ "addedFiles": []
+ }
+ }
+ },
+ "Support for both Next.js App Router and Pages Router": {
+ "name": "Support for both Next.js App Router and Pages Router",
+ "simSteps": [
+ {
+ "simStepId": "785ad8f9-622a-49df-a3c8-99427a713789",
+ "diagramNodeId": "01f6ab49-5bb1-4aaf-91a3-5ca2b53a8125",
+ "simStepLabel": "Flow 1 (App Router): Prompt for Router Choice",
+ "simStepDescription": "The command-line interface starts and prompts the user to select various project options. One of the key prompts asks whether to use the modern Next.js App Router.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/cli/index.ts",
+ "startLine": "321",
+ "endLine": "325",
+ "relevantVariables": [
+ "project.appRouter"
+ ]
+ },
+ "inputDataExample": "{}",
+ "outputDataExample": "{\"name\": \"my-t3-app\", \"language\": \"typescript\", \"styling\": true, \"trpc\": true, \"authentication\": \"next-auth\", \"database\": \"prisma\", \"appRouter\": true, \"databaseProvider\": \"sqlite\", \"linter\": \"eslint\", \"git\": true, \"install\": true, \"importAlias\": \"~/\"}"
+ },
+ {
+ "simStepId": "50c7dbbb-b13f-4a72-b509-c04effb0fd95",
+ "diagramNodeId": "dd760c03-aca2-4175-8cd8-892ff54db971",
+ "simStepLabel": "Flow 1 (App Router): Pass CLI Results to Main Process",
+ "simStepDescription": "The user's selection to use the App Router (`appRouter: true`), along with other choices, is collected and returned from the CLI prompting function.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/index.ts",
+ "startLine": "44",
+ "endLine": "44",
+ "relevantVariables": [
+ "runCli"
+ ]
+ },
+ "inputDataExample": "{\"appName\": \"my-t3-app\", \"packages\": [\"tailwind\", \"trpc\", \"nextAuth\", \"prisma\", \"eslint\"], \"databaseProvider\": \"sqlite\", \"flags\": {\"appRouter\": true, \"noGit\": false, \"noInstall\": false, \"importAlias\": \"~/\"}}",
+ "outputDataExample": "{\"appName\": \"my-t3-app\", \"packages\": [\"tailwind\", \"trpc\", \"nextAuth\", \"prisma\", \"eslint\"], \"databaseProvider\": \"sqlite\", \"flags\": {\"appRouter\": true, \"noGit\": false, \"noInstall\": false, \"importAlias\": \"~/\"}}"
+ },
+ {
+ "simStepId": "6daed3eb-ef77-4da2-bbc1-f498c8a67973",
+ "diagramNodeId": "4090eda9-db5b-4b1c-823c-ba960a6977f2",
+ "simStepLabel": "Flow 1 (App Router): Orchestrate Project Creation",
+ "simStepDescription": "The main function receives the user's choices and initiates the project scaffolding process by calling `createProject`.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/index.ts",
+ "startLine": "51",
+ "endLine": "59",
+ "relevantVariables": [
+ "createProject",
+ "appRouter"
+ ]
+ },
+ "inputDataExample": "{\"appName\": \"my-t3-app\", \"packages\": [\"tailwind\", \"trpc\", \"nextAuth\", \"prisma\", \"eslint\"], \"databaseProvider\": \"sqlite\", \"flags\": {\"appRouter\": true, \"noGit\": false, \"noInstall\": false, \"importAlias\": \"~/\"}}",
+ "outputDataExample": "{\"projectName\": \"my-t3-app\", \"scopedAppName\": \"my-t3-app\", \"packages\": {\"...\"}, \"databaseProvider\": \"sqlite\", \"importAlias\": \"~/\", \"noInstall\": false, \"appRouter\": true}"
+ },
+ {
+ "simStepId": "5b39d1cc-2edb-4656-93c5-8db21b153aa4",
+ "diagramNodeId": "54cd3187-2dbf-44f2-8a6e-dcc25b555968",
+ "simStepLabel": "Flow 1 (App Router): Pass Options to createProject",
+ "simStepDescription": "The `createProject` function is invoked with a configuration object that includes `appRouter: true`, directing it to set up an App Router-based project.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/index.ts",
+ "startLine": "51",
+ "endLine": "59",
+ "relevantVariables": [
+ "createProject"
+ ]
+ },
+ "inputDataExample": "{\"projectName\": \"my-t3-app\", \"scopedAppName\": \"my-t3-app\", \"packages\": {\"nextAuth\": {\"inUse\": true}, \"prisma\": {\"inUse\": true}, \"tailwind\": {\"inUse\": true}, \"trpc\": {\"inUse\": true}}, \"databaseProvider\": \"sqlite\", \"importAlias\": \"~/\", \"noInstall\": false, \"appRouter\": true}",
+ "outputDataExample": "{\"projectName\": \"my-t3-app\", \"scopedAppName\": \"my-t3-app\", \"packages\": {\"nextAuth\": {\"inUse\": true}, \"prisma\": {\"inUse\": true}, \"tailwind\": {\"inUse\": true}, \"trpc\": {\"inUse\": true}}, \"databaseProvider\": \"sqlite\", \"importAlias\": \"~/\", \"noInstall\": false, \"appRouter\": true}"
+ },
+ {
+ "simStepId": "deb6f16f-4059-42b2-8b21-7a611e68ccfe",
+ "diagramNodeId": "50e88448-d3db-4998-be4e-d9e17e41f882",
+ "simStepLabel": "Flow 1 (App Router): Execute App Router Scaffolding Logic",
+ "simStepDescription": "Inside `createProject`, the `appRouter` flag is checked. Since it's true, the code enters the `if` block to perform App Router-specific setup, including copying a dedicated `next.config.js` and calling functions to select the correct layout and page files.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/createProject.ts",
+ "startLine": "64",
+ "endLine": "72",
+ "relevantVariables": [
+ "appRouter",
+ "selectLayoutFile",
+ "selectPageFile"
+ ]
+ },
+ "inputDataExample": "{\"projectName\": \"my-t3-app\", \"scopedAppName\": \"my-t3-app\", \"packages\": {\"...\"}, \"noInstall\": false, \"appRouter\": true, \"databaseProvider\": \"sqlite\"}",
+ "outputDataExample": "{}"
+ },
+ {
+ "simStepId": "1b0c5857-cc4c-4bc1-b486-a650a9f4602a",
+ "diagramNodeId": "1c467c0d-7ed1-40fb-9705-5fde914f0ca7",
+ "simStepLabel": "Flow 1 (App Router): Call Layout and Page File Selectors",
+ "simStepDescription": "The `createProject` function calls `selectLayoutFile` and `selectPageFile`, passing the project directory and package information to them.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/createProject.ts",
+ "startLine": "71",
+ "endLine": "72",
+ "relevantVariables": [
+ "selectLayoutFile",
+ "selectPageFile"
+ ]
+ },
+ "inputDataExample": "{\"projectDir\": \"/path/to/my-t3-app\", \"packages\": {\"nextAuth\": {\"inUse\": true}, \"trpc\": {\"inUse\": true}, \"tailwind\": {\"inUse\": true}}}",
+ "outputDataExample": "{\"projectDir\": \"/path/to/my-t3-app\", \"packages\": {\"nextAuth\": {\"inUse\": true}, \"trpc\": {\"inUse\": true}, \"tailwind\": {\"inUse\": true}}}"
+ },
+ {
+ "simStepId": "76a15289-8c19-4b65-be3f-54d9b116435f",
+ "diagramNodeId": "303d2b11-8dca-4b46-8220-2fecde934224",
+ "simStepLabel": "Flow 1 (App Router): Select and Copy Boilerplate Files",
+ "simStepDescription": "The `selectLayoutFile` and `selectPageFile` functions determine the correct template files (`layout.tsx`, `page.tsx`) based on the combination of selected packages (e.g., with tRPC, with Tailwind CSS) and copy them into the new project's `src/app/` directory.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/selectBoilerplate.ts",
+ "startLine": "49",
+ "endLine": "69",
+ "relevantVariables": [
+ "selectLayoutFile"
+ ]
+ },
+ "inputDataExample": "{\"projectDir\": \"/path/to/my-t3-app\", \"packages\": {\"trpc\": {\"inUse\": true}, \"tailwind\": {\"inUse\": true}}}",
+ "outputDataExample": "{}"
+ },
+ {
+ "simStepId": "ed9a8658-e1e1-4f93-84c2-9d960a6cff67",
+ "diagramNodeId": "6c8f17a9-5963-420c-9402-840d3dddb818",
+ "simStepLabel": "Flow 1 (App Router): Pass appRouter Flag to Installers",
+ "simStepDescription": "During the package installation phase, the `appRouter: true` flag is passed down to individual package installers, such as the one for tRPC, to ensure they configure themselves correctly for the App Router.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/createProject.ts",
+ "startLine": "52",
+ "endLine": "61",
+ "relevantVariables": [
+ "installPackages",
+ "appRouter"
+ ]
+ },
+ "inputDataExample": "{\"projectDir\": \"/path/to/my-t3-app\", \"packages\": {\"...\"}, \"appRouter\": true}",
+ "outputDataExample": "{\"projectDir\": \"/path/to/my-t3-app\", \"packages\": {\"...\"}, \"appRouter\": true}"
+ },
+ {
+ "simStepId": "eae59e61-d018-47f3-b9f8-b76895ca2ecb",
+ "diagramNodeId": "2085ac1b-1cdf-47e4-8cc2-4b0fee237328",
+ "simStepLabel": "Flow 1 (App Router): Configure tRPC for App Router",
+ "simStepDescription": "The tRPC installer receives the `appRouter: true` flag. It then copies the App Router-specific tRPC files, including the API route handler (`src/app/api/trpc/[trpc]/route.ts`) and the necessary client/server components (`src/trpc/server.ts`, `src/trpc/react.tsx`).",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/trpc.ts",
+ "startLine": "89",
+ "endLine": "118",
+ "relevantVariables": [
+ "trpcInstaller",
+ "appRouter"
+ ]
+ },
+ "inputDataExample": "{\"projectDir\": \"/path/to/my-t3-app\", \"packages\": {\"...\"}, \"appRouter\": true}",
+ "outputDataExample": "{}"
+ },
+ {
+ "simStepId": "b8de0499-94f5-445b-b8dd-e5161916a610",
+ "diagramNodeId": "750bb2a4-371e-48b4-94e1-f51c196c40b9",
+ "simStepLabel": "Flow 2 (Pages Router): Prompt for Router Choice",
+ "simStepDescription": "The command-line interface starts and prompts the user to select various project options. One of the key prompts asks whether to use the modern Next.js App Router. The user declines.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/cli/index.ts",
+ "startLine": "321",
+ "endLine": "325",
+ "relevantVariables": [
+ "project.appRouter"
+ ]
+ },
+ "inputDataExample": "{}",
+ "outputDataExample": "{\"name\": \"my-t3-app\", \"language\": \"typescript\", \"styling\": true, \"trpc\": true, \"authentication\": \"next-auth\", \"database\": \"prisma\", \"appRouter\": false, \"databaseProvider\": \"sqlite\", \"linter\": \"eslint\", \"git\": true, \"install\": true, \"importAlias\": \"~/\"}"
+ },
+ {
+ "simStepId": "fad4fe20-944a-4288-9675-573e2ca083e7",
+ "diagramNodeId": "1b961755-e761-4311-a9d4-fae811a27e79",
+ "simStepLabel": "Flow 2 (Pages Router): Pass CLI Results to Main Process",
+ "simStepDescription": "The user's selection to not use the App Router (`appRouter: false`), along with other choices, is collected and returned from the CLI prompting function.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/index.ts",
+ "startLine": "44",
+ "endLine": "44",
+ "relevantVariables": [
+ "runCli"
+ ]
+ },
+ "inputDataExample": "{\"appName\": \"my-t3-app\", \"packages\": [\"tailwind\", \"trpc\", \"nextAuth\", \"prisma\", \"eslint\"], \"databaseProvider\": \"sqlite\", \"flags\": {\"appRouter\": false, \"noGit\": false, \"noInstall\": false, \"importAlias\": \"~/\"}}",
+ "outputDataExample": "{\"appName\": \"my-t3-app\", \"packages\": [\"tailwind\", \"trpc\", \"nextAuth\", \"prisma\", \"eslint\"], \"databaseProvider\": \"sqlite\", \"flags\": {\"appRouter\": false, \"noGit\": false, \"noInstall\": false, \"importAlias\": \"~/\"}}"
+ },
+ {
+ "simStepId": "da6033d7-7ac6-43b2-a168-afd8efcb7f57",
+ "diagramNodeId": "a497d728-6923-4460-aa63-d4623a02ba55",
+ "simStepLabel": "Flow 2 (Pages Router): Orchestrate Project Creation",
+ "simStepDescription": "The main function receives the user's choices and initiates the project scaffolding process by calling `createProject` with `appRouter` set to false.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/index.ts",
+ "startLine": "51",
+ "endLine": "59",
+ "relevantVariables": [
+ "createProject",
+ "appRouter"
+ ]
+ },
+ "inputDataExample": "{\"appName\": \"my-t3-app\", \"packages\": [\"tailwind\", \"trpc\", \"nextAuth\", \"prisma\", \"eslint\"], \"databaseProvider\": \"sqlite\", \"flags\": {\"appRouter\": false, \"noGit\": false, \"noInstall\": false, \"importAlias\": \"~/\"}}",
+ "outputDataExample": "{\"projectName\": \"my-t3-app\", \"scopedAppName\": \"my-t3-app\", \"packages\": {\"...\"}, \"databaseProvider\": \"sqlite\", \"importAlias\": \"~/\", \"noInstall\": false, \"appRouter\": false}"
+ },
+ {
+ "simStepId": "85de4be2-3ba8-4835-810f-50c09cae1275",
+ "diagramNodeId": "b5219509-efe1-420b-b691-c612e0d999ed",
+ "simStepLabel": "Flow 2 (Pages Router): Pass Options to createProject",
+ "simStepDescription": "The `createProject` function is invoked with a configuration object that includes `appRouter: false`, directing it to set up a Pages Router-based project.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/index.ts",
+ "startLine": "51",
+ "endLine": "59",
+ "relevantVariables": [
+ "createProject"
+ ]
+ },
+ "inputDataExample": "{\"projectName\": \"my-t3-app\", \"scopedAppName\": \"my-t3-app\", \"packages\": {\"nextAuth\": {\"inUse\": true}, \"prisma\": {\"inUse\": true}, \"tailwind\": {\"inUse\": true}, \"trpc\": {\"inUse\": true}}, \"databaseProvider\": \"sqlite\", \"importAlias\": \"~/\", \"noInstall\": false, \"appRouter\": false}",
+ "outputDataExample": "{\"projectName\": \"my-t3-app\", \"scopedAppName\": \"my-t3-app\", \"packages\": {\"nextAuth\": {\"inUse\": true}, \"prisma\": {\"inUse\": true}, \"tailwind\": {\"inUse\": true}, \"trpc\": {\"inUse\": true}}, \"databaseProvider\": \"sqlite\", \"importAlias\": \"~/\", \"noInstall\": false, \"appRouter\": false}"
+ },
+ {
+ "simStepId": "1b87a547-3c63-4cf1-b082-1739fd85dd23",
+ "diagramNodeId": "a7d01d31-f935-4411-a5d6-51ba42fec14f",
+ "simStepLabel": "Flow 2 (Pages Router): Execute Pages Router Scaffolding Logic",
+ "simStepDescription": "Inside `createProject`, the `appRouter` flag is checked. Since it's false, the code enters the `else` block to perform Pages Router-specific setup by calling functions to select the correct `_app.tsx` and `index.tsx` files.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/createProject.ts",
+ "startLine": "73",
+ "endLine": "76",
+ "relevantVariables": [
+ "appRouter",
+ "selectAppFile",
+ "selectIndexFile"
+ ]
+ },
+ "inputDataExample": "{\"projectName\": \"my-t3-app\", \"scopedAppName\": \"my-t3-app\", \"packages\": {\"...\"}, \"noInstall\": false, \"appRouter\": false, \"databaseProvider\": \"sqlite\"}",
+ "outputDataExample": "{}"
+ },
+ {
+ "simStepId": "102c831b-f8c7-4648-9abf-c6c0961003cc",
+ "diagramNodeId": "9556efb9-e9ae-4b04-8a00-c3ec1a6bb9fe",
+ "simStepLabel": "Flow 2 (Pages Router): Call App and Index File Selectors",
+ "simStepDescription": "The `createProject` function calls `selectAppFile` and `selectIndexFile`, passing the project directory and package information to them.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/createProject.ts",
+ "startLine": "74",
+ "endLine": "75",
+ "relevantVariables": [
+ "selectAppFile",
+ "selectIndexFile"
+ ]
+ },
+ "inputDataExample": "{\"projectDir\": \"/path/to/my-t3-app\", \"packages\": {\"nextAuth\": {\"inUse\": true}, \"trpc\": {\"inUse\": true}, \"tailwind\": {\"inUse\": true}}}",
+ "outputDataExample": "{\"projectDir\": \"/path/to/my-t3-app\", \"packages\": {\"nextAuth\": {\"inUse\": true}, \"trpc\": {\"inUse\": true}, \"tailwind\": {\"inUse\": true}}}"
+ },
+ {
+ "simStepId": "a36df07d-a088-4a7e-bc05-53781cec063e",
+ "diagramNodeId": "e7d9ebec-908c-4db6-88e6-623660fb7a1c",
+ "simStepLabel": "Flow 2 (Pages Router): Select and Copy Boilerplate Files",
+ "simStepDescription": "The `selectAppFile` and `selectIndexFile` functions determine the correct template files (`_app.tsx`, `index.tsx`) based on the combination of selected packages (e.g., with tRPC, with NextAuth) and copy them into the new project's `src/pages/` directory.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/selectBoilerplate.ts",
+ "startLine": "11",
+ "endLine": "46",
+ "relevantVariables": [
+ "selectAppFile"
+ ]
+ },
+ "inputDataExample": "{\"projectDir\": \"/path/to/my-t3-app\", \"packages\": {\"trpc\": {\"inUse\": true}, \"tailwind\": {\"inUse\": true}, \"nextAuth\": {\"inUse\": true}}}",
+ "outputDataExample": "{}"
+ },
+ {
+ "simStepId": "aabc8b03-d6c1-46d6-8a6f-612225e43fc6",
+ "diagramNodeId": "ddaec457-a32a-4ebf-84fe-34fc82b454a9",
+ "simStepLabel": "Flow 2 (Pages Router): Pass appRouter Flag to Installers",
+ "simStepDescription": "During the package installation phase, the `appRouter: false` flag is passed down to individual package installers, such as the one for tRPC, to ensure they configure themselves correctly for the Pages Router.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/createProject.ts",
+ "startLine": "52",
+ "endLine": "61",
+ "relevantVariables": [
+ "installPackages",
+ "appRouter"
+ ]
+ },
+ "inputDataExample": "{\"projectDir\": \"/path/to/my-t3-app\", \"packages\": {\"...\"}, \"appRouter\": false}",
+ "outputDataExample": "{\"projectDir\": \"/path/to/my-t3-app\", \"packages\": {\"...\"}, \"appRouter\": false}"
+ },
+ {
+ "simStepId": "a8b5924d-279b-40e2-a085-1339e78a3f4e",
+ "diagramNodeId": "eba4a02f-9ae0-4ca2-89f8-8e78001d45a9",
+ "simStepLabel": "Flow 2 (Pages Router): Configure tRPC for Pages Router",
+ "simStepDescription": "The tRPC installer receives the `appRouter: false` flag. It then copies the Pages Router-specific tRPC files, including the API handler (`src/pages/api/trpc/[trpc].ts`) and the client-side utility file (`src/utils/api.ts`).",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/trpc.ts",
+ "startLine": "119",
+ "endLine": "129",
+ "relevantVariables": [
+ "trpcInstaller",
+ "appRouter"
+ ]
+ },
+ "inputDataExample": "{\"projectDir\": \"/path/to/my-t3-app\", \"packages\": {\"...\"}, \"appRouter\": false}",
+ "outputDataExample": "{}"
+ }
+ ],
+ "description": "Prompts the user to choose between the modern App Router or the classic Pages Router It then generates the appropriate file structure (app/ or pages/) and provides distinct boilerplate templates for layout tsx/page tsx (App Router) versus _app tsx/index tsx (Pages Router) All integrations, such as tRPC and NextAuth js, are configured to work correctly with the chosen router architecture ",
+ "simulationNodesAndEdges": {
+ "01f6ab49-5bb1-4aaf-91a3-5ca2b53a8125": {
+ "simStepIds": [
+ "785ad8f9-622a-49df-a3c8-99427a713789"
+ ]
+ },
+ "4090eda9-db5b-4b1c-823c-ba960a6977f2": {
+ "simStepIds": [
+ "6daed3eb-ef77-4da2-bbc1-f498c8a67973"
+ ]
+ },
+ "50e88448-d3db-4998-be4e-d9e17e41f882": {
+ "simStepIds": [
+ "deb6f16f-4059-42b2-8b21-7a611e68ccfe"
+ ]
+ },
+ "303d2b11-8dca-4b46-8220-2fecde934224": {
+ "simStepIds": [
+ "76a15289-8c19-4b65-be3f-54d9b116435f"
+ ]
+ },
+ "2085ac1b-1cdf-47e4-8cc2-4b0fee237328": {
+ "simStepIds": [
+ "eae59e61-d018-47f3-b9f8-b76895ca2ecb"
+ ]
+ },
+ "750bb2a4-371e-48b4-94e1-f51c196c40b9": {
+ "simStepIds": [
+ "b8de0499-94f5-445b-b8dd-e5161916a610"
+ ]
+ },
+ "a497d728-6923-4460-aa63-d4623a02ba55": {
+ "simStepIds": [
+ "da6033d7-7ac6-43b2-a168-afd8efcb7f57"
+ ]
+ },
+ "a7d01d31-f935-4411-a5d6-51ba42fec14f": {
+ "simStepIds": [
+ "1b87a547-3c63-4cf1-b082-1739fd85dd23"
+ ]
+ },
+ "e7d9ebec-908c-4db6-88e6-623660fb7a1c": {
+ "simStepIds": [
+ "a36df07d-a088-4a7e-bc05-53781cec063e"
+ ]
+ },
+ "eba4a02f-9ae0-4ca2-89f8-8e78001d45a9": {
+ "simStepIds": [
+ "a8b5924d-279b-40e2-a085-1339e78a3f4e"
+ ]
+ },
+ "dd760c03-aca2-4175-8cd8-892ff54db971": {
+ "simStepIds": [
+ "50c7dbbb-b13f-4a72-b509-c04effb0fd95"
+ ]
+ },
+ "54cd3187-2dbf-44f2-8a6e-dcc25b555968": {
+ "simStepIds": [
+ "5b39d1cc-2edb-4656-93c5-8db21b153aa4"
+ ]
+ },
+ "1c467c0d-7ed1-40fb-9705-5fde914f0ca7": {
+ "simStepIds": [
+ "1b0c5857-cc4c-4bc1-b486-a650a9f4602a"
+ ]
+ },
+ "6c8f17a9-5963-420c-9402-840d3dddb818": {
+ "simStepIds": [
+ "ed9a8658-e1e1-4f93-84c2-9d960a6cff67"
+ ]
+ },
+ "1b961755-e761-4311-a9d4-fae811a27e79": {
+ "simStepIds": [
+ "fad4fe20-944a-4288-9675-573e2ca083e7"
+ ]
+ },
+ "b5219509-efe1-420b-b691-c612e0d999ed": {
+ "simStepIds": [
+ "85de4be2-3ba8-4835-810f-50c09cae1275"
+ ]
+ },
+ "9556efb9-e9ae-4b04-8a00-c3ec1a6bb9fe": {
+ "simStepIds": [
+ "102c831b-f8c7-4648-9abf-c6c0961003cc"
+ ]
+ },
+ "ddaec457-a32a-4ebf-84fe-34fc82b454a9": {
+ "simStepIds": [
+ "aabc8b03-d6c1-46d6-8a6f-612225e43fc6"
+ ]
+ }
+ },
+ "isAIGenerated": true,
+ "keywords": "appRouter, selectLayoutFile, selectPageFile, selectAppFile, selectIndexFile",
+ "generationPrompt": "Support for both Next.js App Router and Pages Router",
+ "generationKeywords": "appRouter, selectLayoutFile, selectPageFile, selectAppFile, selectIndexFile",
+ "meta": {
+ "containerCoverage": {
+ "perContainerTotals": {
+ "frontend": {
+ "promptFileCount": 28,
+ "promptTokenCount": 25474,
+ "suggestedFileCount": 26
+ },
+ "server": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 0
+ },
+ "drawio": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 0
+ },
+ "shared": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 3
+ },
+ "unknown": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 0
+ }
+ },
+ "missingContainers": [],
+ "addedFiles": []
+ }
+ }
+ },
+ "Configure project styling with Tailwind CSS": {
+ "name": "Configure project styling with Tailwind CSS",
+ "simSteps": [
+ {
+ "simStepId": "3aeb4ed8-7a7f-468f-a434-36e4e70d0eb8",
+ "diagramNodeId": "0ad39dfb-42a9-41c5-ba55-70c0af80fbff",
+ "simStepLabel": "Map 'tailwind' Package to Installer",
+ "simStepDescription": "The CLI receives the list of selected packages. The `buildPkgInstallerMap` function creates a map of these packages to their corresponding installer functions. For Tailwind CSS, the 'tailwind' key is associated with `tailwindInstaller`.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/index.ts",
+ "startLine": "78",
+ "endLine": "81",
+ "relevantVariables": [
+ "buildPkgInstallerMap",
+ "tailwindInstaller"
+ ]
+ },
+ "inputDataExample": "{\"packages\": [\"tailwind\", \"trpc\"], \"databaseProvider\": \"sqlite\"}",
+ "outputDataExample": "{\"tailwind\": {\"inUse\": true, \"installer\": \"\"}}"
+ },
+ {
+ "simStepId": "05969447-943d-4e11-a381-c4a05a82bd5a",
+ "diagramNodeId": "aa7b2852-7dde-4f1c-b129-c13fdc7c3824",
+ "simStepLabel": "Trigger Tailwind Installer",
+ "simStepDescription": "The main application logic iterates through the installer map and invokes the installer function for each selected package. The `projectDir` and other options are passed to the installer.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/index.ts",
+ "startLine": "80",
+ "endLine": "80",
+ "relevantVariables": [
+ "tailwindInstaller"
+ ]
+ },
+ "inputDataExample": "{\"opts\": {\"projectDir\": \"/path/to/my-t3-app\", \"pkgManager\": \"pnpm\", \"noInstall\": false, \"packages\": {}, \"projectName\": \"my-t3-app\"}}",
+ "outputDataExample": "{\"opts\": {\"projectDir\": \"/path/to/my-t3-app\", \"pkgManager\": \"pnpm\", \"noInstall\": false, \"packages\": {}, \"projectName\": \"my-t3-app\"}}"
+ },
+ {
+ "simStepId": "f4e2f662-5c25-456d-ba6f-37405b4aec9e",
+ "diagramNodeId": "d0378ecb-35a1-43d6-9ebf-f9452045319c",
+ "simStepLabel": "Add Tailwind Dependencies",
+ "simStepDescription": "The `tailwindInstaller` is executed. It first calls `addPackageDependency` to add `tailwindcss`, `postcss`, and `@tailwindcss/postcss` as development dependencies to the project's `package.json` file.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/tailwind.ts",
+ "startLine": "9",
+ "endLine": "13",
+ "relevantVariables": [
+ "addPackageDependency"
+ ]
+ },
+ "inputDataExample": "{\"projectDir\": \"/path/to/my-t3-app\"}",
+ "outputDataExample": "{\"sideEffect\": \"package.json is modified with new devDependencies\"}"
+ },
+ {
+ "simStepId": "41c1df93-5db2-40b1-b6d8-0ed94478c30d",
+ "diagramNodeId": "17f5944c-678b-460c-89e1-c87861b9beb4",
+ "simStepLabel": "Prepare File Paths for Scaffolding",
+ "simStepDescription": "The installer constructs the source and destination paths for the configuration and styling files required for Tailwind CSS.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/tailwind.ts",
+ "startLine": "15",
+ "endLine": "21",
+ "relevantVariables": [
+ "extrasDir",
+ "postcssCfgSrc",
+ "postcssCfgDest",
+ "cssSrc",
+ "cssDest"
+ ]
+ },
+ "inputDataExample": "{\"projectDir\": \"/path/to/my-t3-app\", \"PKG_ROOT\": \"/usr/lib/node_modules/create-t3-app/cli\"}",
+ "outputDataExample": "{\"postcssCfgSrc\": \"/usr/lib/node_modules/create-t3-app/cli/template/extras/config/postcss.config.js\", \"postcssCfgDest\": \"/path/to/my-t3-app/postcss.config.js\", \"cssSrc\": \"/usr/lib/node_modules/create-t3-app/cli/template/extras/src/styles/globals.css\", \"cssDest\": \"/path/to/my-t3-app/src/styles/globals.css\"}"
+ },
+ {
+ "simStepId": "225b03ea-d22e-4ac3-b631-266e20f87981",
+ "diagramNodeId": "889452ae-0841-422a-8bdd-597d96f1c654",
+ "simStepLabel": "Scaffold Tailwind Configuration Files",
+ "simStepDescription": "The installer uses `fs.copySync` to copy `postcss.config.js` and `globals.css` from the CLI's template directory into the new project directory. The `globals.css` file contains the essential Tailwind directives.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/tailwind.ts",
+ "startLine": "23",
+ "endLine": "24",
+ "relevantVariables": [
+ "fs.copySync"
+ ]
+ },
+ "inputDataExample": "{\"postcssCfgSrc\": \"\", \"postcssCfgDest\": \"\", \"cssSrc\": \"\", \"cssDest\": \"\"}",
+ "outputDataExample": "{\"filesCreated\": [\"/path/to/my-t3-app/postcss.config.js\", \"/path/to/my-t3-app/src/styles/globals.css\"]}"
+ },
+ {
+ "simStepId": "1cbd3b04-97d9-4f82-bcd9-3b2abc0b7fb5",
+ "diagramNodeId": "044311d7-c689-4ea8-9d96-a54cd8841068",
+ "simStepLabel": "Pass Selections for Boilerplate Generation",
+ "simStepDescription": "After the core installation, the selected packages information is passed to helper functions that select the appropriate boilerplate files for pages and layouts.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/selectBoilerplate.ts",
+ "startLine": "49",
+ "endLine": "52",
+ "relevantVariables": [
+ "selectLayoutFile",
+ "packages"
+ ]
+ },
+ "inputDataExample": "{\"projectDir\": \"/path/to/my-t3-app\", \"packages\": {\"tailwind\": {\"inUse\": true}, \"trpc\": {\"inUse\": false}, \"nextAuth\": {\"inUse\": false}}}",
+ "outputDataExample": "{\"projectDir\": \"/path/to/my-t3-app\", \"packages\": {\"tailwind\": {\"inUse\": true}, \"trpc\": {\"inUse\": false}, \"nextAuth\": {\"inUse\": false}}}"
+ },
+ {
+ "simStepId": "c8e42310-6fc2-4d2f-8e18-ee1ed90b82ff",
+ "diagramNodeId": "5eddb09c-40c9-405e-acb6-b7a837065f73",
+ "simStepLabel": "Select Tailwind-Specific Layout File",
+ "simStepDescription": "The `selectLayoutFile` function checks which packages are in use. Since Tailwind is selected (`usingTw` is true) and tRPC is not, it chooses the `with-tw.tsx` boilerplate file, which is pre-configured for Tailwind.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/selectBoilerplate.ts",
+ "startLine": "62",
+ "endLine": "63",
+ "relevantVariables": [
+ "usingTw",
+ "usingTRPC",
+ "layoutFile"
+ ]
+ },
+ "inputDataExample": "{\"packages\": {\"tailwind\": {\"inUse\": true}, \"trpc\": {\"inUse\": false}}}",
+ "outputDataExample": "{\"layoutFile\": \"with-tw.tsx\"}"
+ },
+ {
+ "simStepId": "b25005da-7772-4400-b93b-8ec508e2086b",
+ "diagramNodeId": "1baa420d-31bc-4b16-9439-60aba5caaa8e",
+ "simStepLabel": "Prepare Boilerplate File Paths",
+ "simStepDescription": "The path to the selected boilerplate file (`with-tw.tsx`) and the destination path (`src/app/layout.tsx`) are constructed to prepare for copying.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/selectBoilerplate.ts",
+ "startLine": "66",
+ "endLine": "67",
+ "relevantVariables": [
+ "appSrc",
+ "appDest"
+ ]
+ },
+ "inputDataExample": "{\"layoutFile\": \"with-tw.tsx\", \"projectDir\": \"/path/to/my-t3-app\"}",
+ "outputDataExample": "{\"appSrc\": \"/template/extras/src/app/layout/with-tw.tsx\", \"appDest\": \"/path/to/my-t3-app/src/app/layout.tsx\"}"
+ },
+ {
+ "simStepId": "0f872fc4-8d73-4e9f-86ea-626c12612df6",
+ "diagramNodeId": "1e821d51-88f8-45bc-92c9-36076c6605ec",
+ "simStepLabel": "Copy Tailwind Boilerplate to Project",
+ "simStepDescription": "The `fs.copySync` command copies the selected Tailwind-specific layout file (`with-tw.tsx`) into the user's project, renaming it to the standard Next.js file name `layout.tsx`.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/selectBoilerplate.ts",
+ "startLine": "68",
+ "endLine": "68",
+ "relevantVariables": [
+ "fs.copySync"
+ ]
+ },
+ "inputDataExample": "{\"appSrc\": \"/template/extras/src/app/layout/with-tw.tsx\", \"appDest\": \"/path/to/my-t3-app/src/app/layout.tsx\"}",
+ "outputDataExample": "{\"fileCreated\": \"/path/to/my-t3-app/src/app/layout.tsx\"}"
+ },
+ {
+ "simStepId": "e1eaf756-84cc-4353-b4c9-2ec7d2341daf",
+ "diagramNodeId": "91018bf2-c3a6-4e0e-9f80-2c8927737a79",
+ "simStepLabel": "Enable CSS Import",
+ "simStepDescription": "The content of the newly copied `layout.tsx` file includes an import statement for `globals.css`. This static content enables the final step in the browser.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/template/extras/src/app/layout/with-tw.tsx",
+ "startLine": "1",
+ "endLine": "1",
+ "relevantVariables": []
+ },
+ "inputDataExample": "{\"fileContent\": \"import \\\"~/styles/globals.css\\\"; ...\"}",
+ "outputDataExample": "{\"fileContent\": \"import \\\"~/styles/globals.css\\\"; ...\"}"
+ },
+ {
+ "simStepId": "d1ea5566-24b0-4e05-83c1-5e53d955af65",
+ "diagramNodeId": "8482481b-2a63-4856-a90a-6324f9018bbd",
+ "simStepLabel": "Load Tailwind Styles in Next.js App",
+ "simStepDescription": "When the Next.js application runs, it processes the root layout file. The `import '~/styles/globals.css'` statement causes the CSS file (containing Tailwind's directives) to be loaded, applying Tailwind's base styles, components, and utilities across the application.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/template/extras/src/app/layout/with-tw.tsx",
+ "startLine": "1",
+ "endLine": "1",
+ "relevantVariables": []
+ },
+ "inputDataExample": "{\"nextJsBuild\": \"starting\"}",
+ "outputDataExample": "{\"stylesLoaded\": \"Tailwind CSS is active\"}"
+ }
+ ],
+ "description": "Optionally adds and configures Tailwind CSS for utility-first styling The installer creates the required configuration files, includes a base globals css file with Tailwind directives, and generates example components that are styled with Tailwind if the option is selected ",
+ "simulationNodesAndEdges": {
+ "0ad39dfb-42a9-41c5-ba55-70c0af80fbff": {
+ "simStepIds": [
+ "3aeb4ed8-7a7f-468f-a434-36e4e70d0eb8"
+ ]
+ },
+ "d0378ecb-35a1-43d6-9ebf-f9452045319c": {
+ "simStepIds": [
+ "f4e2f662-5c25-456d-ba6f-37405b4aec9e"
+ ]
+ },
+ "889452ae-0841-422a-8bdd-597d96f1c654": {
+ "simStepIds": [
+ "225b03ea-d22e-4ac3-b631-266e20f87981"
+ ]
+ },
+ "5eddb09c-40c9-405e-acb6-b7a837065f73": {
+ "simStepIds": [
+ "c8e42310-6fc2-4d2f-8e18-ee1ed90b82ff"
+ ]
+ },
+ "1e821d51-88f8-45bc-92c9-36076c6605ec": {
+ "simStepIds": [
+ "0f872fc4-8d73-4e9f-86ea-626c12612df6"
+ ]
+ },
+ "8482481b-2a63-4856-a90a-6324f9018bbd": {
+ "simStepIds": [
+ "d1ea5566-24b0-4e05-83c1-5e53d955af65"
+ ]
+ },
+ "aa7b2852-7dde-4f1c-b129-c13fdc7c3824": {
+ "simStepIds": [
+ "05969447-943d-4e11-a381-c4a05a82bd5a"
+ ]
+ },
+ "17f5944c-678b-460c-89e1-c87861b9beb4": {
+ "simStepIds": [
+ "41c1df93-5db2-40b1-b6d8-0ed94478c30d"
+ ]
+ },
+ "044311d7-c689-4ea8-9d96-a54cd8841068": {
+ "simStepIds": [
+ "1cbd3b04-97d9-4f82-bcd9-3b2abc0b7fb5"
+ ]
+ },
+ "1baa420d-31bc-4b16-9439-60aba5caaa8e": {
+ "simStepIds": [
+ "b25005da-7772-4400-b93b-8ec508e2086b"
+ ]
+ },
+ "91018bf2-c3a6-4e0e-9f80-2c8927737a79": {
+ "simStepIds": [
+ "e1eaf756-84cc-4353-b4c9-2ec7d2341daf"
+ ]
+ }
+ },
+ "isAIGenerated": true,
+ "keywords": "tailwindInstaller, tailwind.config.ts, postcss.config.js, globals.css, with-tw.tsx",
+ "generationPrompt": "Configure project styling with Tailwind CSS",
+ "generationKeywords": "tailwindInstaller, tailwind.config.ts, postcss.config.js, globals.css, with-tw.tsx",
+ "meta": {
+ "containerCoverage": {
+ "perContainerTotals": {
+ "frontend": {
+ "promptFileCount": 18,
+ "promptTokenCount": 3893,
+ "suggestedFileCount": 26
+ },
+ "server": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 0
+ },
+ "drawio": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 0
+ },
+ "shared": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 3
+ },
+ "unknown": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 0
+ }
+ },
+ "missingContainers": [],
+ "addedFiles": []
+ }
+ }
+ },
+ "Enforce typesafe environment variables": {
+ "name": "Enforce typesafe environment variables",
+ "simSteps": [
+ {
+ "simStepId": "f0726e75-4342-4219-9fa9-7e1cc28d4914",
+ "diagramNodeId": "64141bc5-b599-4cfd-84b4-22d82cc156d3",
+ "simStepLabel": "Next.js Application Startup",
+ "simStepDescription": "The Next.js application process (`next dev` or `next build`) begins. As part of its initialization, it loads the `next.config.js` file, which serves as the entry point for the application's configuration.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/template/base/next.config.js",
+ "startLine": "5",
+ "endLine": "5",
+ "relevantVariables": [
+ "import \"./src/env.js\";"
+ ]
+ },
+ "inputDataExample": "{}",
+ "outputDataExample": "{}"
+ },
+ {
+ "simStepId": "f5a74f03-5919-4501-ac85-e18bf5239991",
+ "diagramNodeId": "d967f8d4-2bc9-4aca-8aa2-60b07ff53d79",
+ "simStepLabel": "Trigger Environment Validation",
+ "simStepDescription": "The `import \"./src/env.js\"` statement at the top of `next.config.js` is executed. This immediately loads and runs the environment validation module before any other application logic proceeds.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/template/base/next.config.js",
+ "startLine": "5",
+ "endLine": "5",
+ "relevantVariables": [
+ "import \"./src/env.js\";"
+ ]
+ },
+ "inputDataExample": "{\"modulePath\": \"./src/env.js\"}",
+ "outputDataExample": "{\"modulePath\": \"./src/env.js\"}"
+ },
+ {
+ "simStepId": "30310d69-af01-45ec-a7c9-4767069522c4",
+ "diagramNodeId": "06e6c413-d8f8-4b4d-bee0-7279486dc487",
+ "simStepLabel": "Define Environment Schemas",
+ "simStepDescription": "Inside `src/env.js`, the `createEnv` function is called. It is configured with Zod schemas for both `server` and `client` environment variables, defining their types and constraints. The `runtimeEnv` object maps these schema keys to the actual values from `process.env` for validation.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/template/extras/src/env/with-auth-db.js",
+ "startLine": "4",
+ "endLine": "52",
+ "relevantVariables": [
+ "createEnv",
+ "z",
+ "server",
+ "client",
+ "runtimeEnv"
+ ]
+ },
+ "inputDataExample": "{\"process.env\": {\"DATABASE_URL\": \"postgresql://user:pass@localhost:5432/mydb\", \"NODE_ENV\": \"development\", \"AUTH_SECRET\": \"a_very_secret_key\", \"AUTH_DISCORD_ID\": \"discord_client_123\", \"AUTH_DISCORD_SECRET\": \"discord_secret_abc\"}}",
+ "outputDataExample": "{\"serverSchema\": {\"AUTH_SECRET\": {}, \"AUTH_DISCORD_ID\": {}, \"AUTH_DISCORD_SECRET\": {}, \"DATABASE_URL\": {}, \"NODE_ENV\": {}}, \"clientSchema\": {}, \"runtimeEnv\": {\"DATABASE_URL\": \"postgresql://user:pass@localhost:5432/mydb\", \"NODE_ENV\": \"development\", \"AUTH_SECRET\": \"a_very_secret_key\", \"AUTH_DISCORD_ID\": \"discord_client_123\", \"AUTH_DISCORD_SECRET\": \"discord_secret_abc\"}}"
+ },
+ {
+ "simStepId": "edd00467-1311-425b-b84d-699f80742beb",
+ "diagramNodeId": "e975592b-9351-498c-a7f3-eeaa6de5940e",
+ "simStepLabel": "Pass Configuration to Validation Library",
+ "simStepDescription": "The configuration object, containing the Zod schemas and runtime environment values, is passed as an argument to the `createEnv` function from the `@t3-oss/env-nextjs` library.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/template/extras/src/env/with-auth-db.js",
+ "startLine": "4",
+ "endLine": "4",
+ "relevantVariables": [
+ "createEnv"
+ ]
+ },
+ "inputDataExample": "{\"config\": {\"server\": {\"AUTH_SECRET\": \"z.string().optional()\", \"AUTH_DISCORD_ID\": \"z.string()\", \"DATABASE_URL\": \"z.string().url()\"}, \"client\": {}, \"runtimeEnv\": {\"DATABASE_URL\": \"postgresql://user:pass@localhost:5432/mydb\", \"NODE_ENV\": \"development\", \"AUTH_SECRET\": \"mysecret\", \"AUTH_DISCORD_ID\": \"discord123\", \"AUTH_DISCORD_SECRET\": \"discord_secret_xyz\"}, \"skipValidation\": false}}",
+ "outputDataExample": "{\"config\": {\"server\": {\"AUTH_SECRET\": \"z.string().optional()\", \"AUTH_DISCORD_ID\": \"z.string()\", \"DATABASE_URL\": \"z.string().url()\"}, \"client\": {}, \"runtimeEnv\": {\"DATABASE_URL\": \"postgresql://user:pass@localhost:5432/mydb\", \"NODE_ENV\": \"development\", \"AUTH_SECRET\": \"mysecret\", \"AUTH_DISCORD_ID\": \"discord123\", \"AUTH_DISCORD_SECRET\": \"discord_secret_xyz\"}, \"skipValidation\": false}}"
+ },
+ {
+ "simStepId": "1ad8e0a5-03e7-4e39-a101-22f70c5cde1d",
+ "diagramNodeId": "9582ac1d-7dae-4afa-a612-58ca47d08b98",
+ "simStepLabel": "Execute Runtime Validation",
+ "simStepDescription": "The `createEnv` function validates the `runtimeEnv` object against the Zod schemas. If `SKIP_ENV_VALIDATION` is false and any variables are missing or have incorrect types, a formatted error is thrown, which terminates the application's startup or build process.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/template/extras/src/env/with-auth-db.js",
+ "startLine": "4",
+ "endLine": "52",
+ "relevantVariables": [
+ "createEnv",
+ "skipValidation",
+ "process.env.SKIP_ENV_VALIDATION"
+ ]
+ },
+ "inputDataExample": "{\"runtimeEnv\": {\"DATABASE_URL\": \"postgresql://user:pass@localhost:5432/mydb\", \"NODE_ENV\": \"development\", \"AUTH_SECRET\": \"mysecret\", \"AUTH_DISCORD_ID\": \"discord123\", \"AUTH_DISCORD_SECRET\": \"discord_secret_xyz\"}, \"skipValidation\": false}",
+ "outputDataExample": "{\"DATABASE_URL\": \"postgresql://user:pass@localhost:5432/mydb\", \"NODE_ENV\": \"development\", \"AUTH_SECRET\": \"mysecret\", \"AUTH_DISCORD_ID\": \"discord123\", \"AUTH_DISCORD_SECRET\": \"discord_secret_xyz\"}"
+ },
+ {
+ "simStepId": "b850604a-0b78-4c69-807e-e1b78828f719",
+ "diagramNodeId": "19753747-2d54-43f4-b583-6130fdb0dea8",
+ "simStepLabel": "Return Validated Environment Object",
+ "simStepDescription": "Upon successful validation, the `createEnv` function returns a fully typed, proxied object containing the validated environment variables.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/template/extras/src/env/with-auth-db.js",
+ "startLine": "4",
+ "endLine": "4",
+ "relevantVariables": [
+ "env"
+ ]
+ },
+ "inputDataExample": "{\"DATABASE_URL\": \"postgresql://user:pass@localhost:5432/mydb\", \"NODE_ENV\": \"development\", \"AUTH_SECRET\": \"mysecret\", \"AUTH_DISCORD_ID\": \"discord123\", \"AUTH_DISCORD_SECRET\": \"discord_secret_xyz\"}",
+ "outputDataExample": "{\"DATABASE_URL\": \"postgresql://user:pass@localhost:5432/mydb\", \"NODE_ENV\": \"development\", \"AUTH_SECRET\": \"mysecret\", \"AUTH_DISCORD_ID\": \"discord123\", \"AUTH_DISCORD_SECRET\": \"discord_secret_xyz\"}"
+ },
+ {
+ "simStepId": "bb5e9d39-c67d-4141-b580-a68cc53b3133",
+ "diagramNodeId": "3abb65b0-b42f-496b-86d1-df7502d3c371",
+ "simStepLabel": "Export Typesafe `env` Object",
+ "simStepDescription": "The validated `env` object is exported from `src/env.js`. This makes the typesafe environment variables available for import across the application, guaranteeing their presence and correct types at compile time and preventing a class of runtime errors.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/template/extras/src/env/with-auth-db.js",
+ "startLine": "4",
+ "endLine": "4",
+ "relevantVariables": [
+ "export const env"
+ ]
+ },
+ "inputDataExample": "{\"DATABASE_URL\": \"postgresql://user:pass@localhost:5432/mydb\", \"NODE_ENV\": \"development\", \"AUTH_SECRET\": \"mysecret\", \"AUTH_DISCORD_ID\": \"discord123\", \"AUTH_DISCORD_SECRET\": \"discord_secret_xyz\"}",
+ "outputDataExample": "{\"DATABASE_URL\": \"postgresql://user:pass@localhost:5432/mydb\", \"NODE_ENV\": \"development\", \"AUTH_SECRET\": \"mysecret\", \"AUTH_DISCORD_ID\": \"discord123\", \"AUTH_DISCORD_SECRET\": \"discord_secret_xyz\"}"
+ }
+ ],
+ "description": "Integrates the @t3-oss/env-nextjs library out-of-the-box to provide compile-time validation of environment variables It sets up a central src/env js file for defining server-side and client-side variable schemas with Zod This ensures the application fails to build or start if required environment variables are missing or invalid, preventing a common class of runtime errors ",
+ "simulationNodesAndEdges": {
+ "64141bc5-b599-4cfd-84b4-22d82cc156d3": {
+ "simStepIds": [
+ "f0726e75-4342-4219-9fa9-7e1cc28d4914"
+ ]
+ },
+ "06e6c413-d8f8-4b4d-bee0-7279486dc487": {
+ "simStepIds": [
+ "30310d69-af01-45ec-a7c9-4767069522c4"
+ ]
+ },
+ "9582ac1d-7dae-4afa-a612-58ca47d08b98": {
+ "simStepIds": [
+ "1ad8e0a5-03e7-4e39-a101-22f70c5cde1d"
+ ]
+ },
+ "3abb65b0-b42f-496b-86d1-df7502d3c371": {
+ "simStepIds": [
+ "bb5e9d39-c67d-4141-b580-a68cc53b3133"
+ ]
+ },
+ "d967f8d4-2bc9-4aca-8aa2-60b07ff53d79": {
+ "simStepIds": [
+ "f5a74f03-5919-4501-ac85-e18bf5239991"
+ ]
+ },
+ "e975592b-9351-498c-a7f3-eeaa6de5940e": {
+ "simStepIds": [
+ "edd00467-1311-425b-b84d-699f80742beb"
+ ]
+ },
+ "19753747-2d54-43f4-b583-6130fdb0dea8": {
+ "simStepIds": [
+ "b850604a-0b78-4c69-807e-e1b78828f719"
+ ]
+ }
+ },
+ "isAIGenerated": true,
+ "keywords": "env.js, t3-oss/env-nextjs, createEnv, zod, SKIP_ENV_VALIDATION",
+ "generationPrompt": "Enforce typesafe environment variables",
+ "generationKeywords": "env.js, t3-oss/env-nextjs, createEnv, zod, SKIP_ENV_VALIDATION",
+ "meta": {
+ "containerCoverage": {
+ "perContainerTotals": {
+ "frontend": {
+ "promptFileCount": 76,
+ "promptTokenCount": 38902,
+ "suggestedFileCount": 26
+ },
+ "server": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 0
+ },
+ "drawio": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 0
+ },
+ "shared": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 3
+ },
+ "unknown": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 0
+ }
+ },
+ "missingContainers": [],
+ "addedFiles": []
+ },
+ "crossLayerTriggers": [
+ {
+ "sourcePath": "t3-oss-create-t3-app-0c2d040/www/src/pages/ar/usage/trpc.md",
+ "identifier": "/api/user/",
+ "type": "http",
+ "matchedTargets": []
+ }
+ ]
+ }
+ },
+ "Set up code quality tools like ESLint/Prettier or Biome": {
+ "name": "Set up code quality tools like ESLint/Prettier or Biome",
+ "simSteps": [
+ {
+ "simStepId": "eb535b49-789f-4236-aa09-71a1e3a02973",
+ "diagramNodeId": "39f257a3-979b-44a0-90bf-4a0b7c436ed7",
+ "simStepLabel": "ESLint/Prettier Flow: Configure Installer",
+ "simStepDescription": "Based on the user's selection of the 'eslint' package during the CLI prompts, this function constructs a map of package installers. It associates the 'eslint' package name with the `dynamicEslintInstaller` function, preparing it for execution.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/index.ts",
+ "startLine": "58",
+ "endLine": "102",
+ "relevantVariables": [
+ "buildPkgInstallerMap",
+ "packages",
+ "dynamicEslintInstaller"
+ ]
+ },
+ "inputDataExample": "{\"packages\": [\"eslint\", \"tailwind\", \"trpc\"], \"databaseProvider\": \"sqlite\"}",
+ "outputDataExample": "{\"eslint\": {\"inUse\": true, \"installer\": \"\"}, \"tailwind\": {\"inUse\": true, \"installer\": \"\"}, \"trpc\": {\"inUse\": true, \"installer\": \"\"}}"
+ },
+ {
+ "simStepId": "c7022225-1160-44e0-bc6a-7a3c076cf5d3",
+ "diagramNodeId": "d3637476-912d-42dd-85a6-f525859e4fe2",
+ "simStepLabel": "ESLint/Prettier Flow: Transmit Installer Map",
+ "simStepDescription": "The generated installer map is passed from the `createProject` helper to the `installPackages` helper, which is responsible for executing the installers.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/createProject.ts",
+ "startLine": "89",
+ "endLine": "98",
+ "relevantVariables": [
+ "installPackages",
+ "packages"
+ ]
+ },
+ "inputDataExample": "{\"eslint\": {\"inUse\": true, \"installer\": \"\"}, \"tailwind\": {\"inUse\": true, \"installer\": \"\"}, \"trpc\": {\"inUse\": true, \"installer\": \"\"}}",
+ "outputDataExample": "{\"eslint\": {\"inUse\": true, \"installer\": \"\"}, \"tailwind\": {\"inUse\": true, \"installer\": \"\"}, \"trpc\": {\"inUse\": true, \"installer\": \"\"}}"
+ },
+ {
+ "simStepId": "cd411957-0d57-4d15-8518-7950665d57a5",
+ "diagramNodeId": "5ea011ca-b4f5-4321-ac03-096b769b1754",
+ "simStepLabel": "ESLint/Prettier Flow: Execute Installer",
+ "simStepDescription": "The `installPackages` function iterates through the installer map. Since `eslint.inUse` is true, it invokes the `dynamicEslintInstaller` function with the project configuration options.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/installPackages.ts",
+ "startLine": "12",
+ "endLine": "20",
+ "relevantVariables": [
+ "installPackages",
+ "pkg.installer"
+ ]
+ },
+ "inputDataExample": "{\"packages\": {\"eslint\": {\"inUse\": true, \"installer\": \"\"}}, \"projectDir\": \"/Users/test/my-t3-app\"}",
+ "outputDataExample": "null"
+ },
+ {
+ "simStepId": "21b92278-c756-4ae5-b7bb-ea4df3771fc2",
+ "diagramNodeId": "f868866e-e79c-429a-a218-cab9e51702ad",
+ "simStepLabel": "ESLint/Prettier Flow: Pass Project Options to Installer",
+ "simStepDescription": "The `installPackages` function passes the `InstallerOptions` object, containing details like the project directory and other selected packages, to the `dynamicEslintInstaller`.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/installPackages.ts",
+ "startLine": "16",
+ "endLine": "16",
+ "relevantVariables": [
+ "pkg.installer",
+ "opts"
+ ]
+ },
+ "inputDataExample": "{\"projectDir\": \"/Users/test/my-t3-app\", \"pkgManager\": \"pnpm\", \"noInstall\": false, \"packages\": {\"tailwind\": {\"inUse\": true}, \"drizzle\": {\"inUse\": false}}, \"projectName\": \"my-t3-app\"}",
+ "outputDataExample": "{\"projectDir\": \"/Users/test/my-t3-app\", \"pkgManager\": \"pnpm\", \"noInstall\": false, \"packages\": {\"tailwind\": {\"inUse\": true}, \"drizzle\": {\"inUse\": false}}, \"projectName\": \"my-t3-app\"}"
+ },
+ {
+ "simStepId": "efe0bbeb-1987-4db2-833e-d9a8f25a1512",
+ "diagramNodeId": "c0ab4ac4-0fd0-4ac3-bb81-ba80aa78242a",
+ "simStepLabel": "ESLint/Prettier Flow: Setup Files and Dependencies",
+ "simStepDescription": "The installer adds ESLint/Prettier dev dependencies to `package.json`, copies configuration files (`.eslintrc.js`, `prettier.config.js`) into the project, and adds `lint` and `format` scripts to `package.json`.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/eslint.ts",
+ "startLine": "12",
+ "endLine": "73",
+ "relevantVariables": [
+ "dynamicEslintInstaller",
+ "addPackageDependency",
+ "addPackageScript",
+ "fs.copySync"
+ ]
+ },
+ "inputDataExample": "{\"projectDir\": \"/Users/test/my-t3-app\", \"packages\": {\"tailwind\": {\"inUse\": true}, \"drizzle\": {\"inUse\": false}}}",
+ "outputDataExample": "null"
+ },
+ {
+ "simStepId": "230efbe1-de67-46ba-835a-d56e33d427e7",
+ "diagramNodeId": "95c9fe73-46f7-4b20-beb1-80801e9b2a00",
+ "simStepLabel": "Biome Flow: Configure Installer",
+ "simStepDescription": "If the user selects 'biome' instead of ESLint, this function constructs a map of package installers, associating the 'biome' package name with the `biomeInstaller` function.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/index.ts",
+ "startLine": "58",
+ "endLine": "102",
+ "relevantVariables": [
+ "buildPkgInstallerMap",
+ "packages",
+ "biomeInstaller"
+ ]
+ },
+ "inputDataExample": "{\"packages\": [\"biome\", \"tailwind\", \"trpc\"], \"databaseProvider\": \"sqlite\"}",
+ "outputDataExample": "{\"biome\": {\"inUse\": true, \"installer\": \"\"}, \"tailwind\": {\"inUse\": true, \"installer\": \"\"}, \"trpc\": {\"inUse\": true, \"installer\": \"\"}}"
+ },
+ {
+ "simStepId": "c80be4b5-2e02-4b1c-9ec7-213c7c117084",
+ "diagramNodeId": "c73f74a9-a2ca-43f6-a967-bd689163947b",
+ "simStepLabel": "Biome Flow: Transmit Installer Map",
+ "simStepDescription": "The generated installer map is passed from the `createProject` helper to the `installPackages` helper, which is responsible for executing the installers.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/createProject.ts",
+ "startLine": "89",
+ "endLine": "98",
+ "relevantVariables": [
+ "installPackages",
+ "packages"
+ ]
+ },
+ "inputDataExample": "{\"biome\": {\"inUse\": true, \"installer\": \"\"}, \"tailwind\": {\"inUse\": true, \"installer\": \"\"}, \"trpc\": {\"inUse\": true, \"installer\": \"\"}}",
+ "outputDataExample": "{\"biome\": {\"inUse\": true, \"installer\": \"\"}, \"tailwind\": {\"inUse\": true, \"installer\": \"\"}, \"trpc\": {\"inUse\": true, \"installer\": \"\"}}"
+ },
+ {
+ "simStepId": "f8f8c0f5-be96-4ad1-93e5-8f0f41dd8e21",
+ "diagramNodeId": "a7d2563f-2800-4449-8423-72db0469c077",
+ "simStepLabel": "Biome Flow: Execute Installer",
+ "simStepDescription": "The `installPackages` function iterates through the installer map. Since `biome.inUse` is true, it invokes the `biomeInstaller` function with the project configuration options.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/installPackages.ts",
+ "startLine": "12",
+ "endLine": "20",
+ "relevantVariables": [
+ "installPackages",
+ "pkg.installer"
+ ]
+ },
+ "inputDataExample": "{\"packages\": {\"biome\": {\"inUse\": true, \"installer\": \"\"}}, \"projectDir\": \"/Users/test/my-t3-app\"}",
+ "outputDataExample": "null"
+ },
+ {
+ "simStepId": "51648cfc-115f-4017-a6da-4217c108546f",
+ "diagramNodeId": "fb771c77-c75c-48ea-9bf3-b0d9957a4294",
+ "simStepLabel": "Biome Flow: Pass Project Options to Installer",
+ "simStepDescription": "The `installPackages` function passes the `InstallerOptions` object, containing details like the project directory, to the `biomeInstaller`.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/installPackages.ts",
+ "startLine": "16",
+ "endLine": "16",
+ "relevantVariables": [
+ "pkg.installer",
+ "opts"
+ ]
+ },
+ "inputDataExample": "{\"projectDir\": \"/Users/test/my-t3-app\", \"pkgManager\": \"pnpm\", \"noInstall\": false, \"projectName\": \"my-t3-app\"}",
+ "outputDataExample": "{\"projectDir\": \"/Users/test/my-t3-app\", \"pkgManager\": \"pnpm\", \"noInstall\": false, \"projectName\": \"my-t3-app\"}"
+ },
+ {
+ "simStepId": "b392ead7-48d0-41be-90fe-cf8ac8a3d478",
+ "diagramNodeId": "26385a13-1e32-4907-91d4-8f9a5b28b180",
+ "simStepLabel": "Biome Flow: Setup Files and Dependencies",
+ "simStepDescription": "The installer adds the `@biomejs/biome` dev dependency to `package.json`, copies the `biome.jsonc` configuration file into the project, and adds `check` scripts to `package.json`.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/biome.ts",
+ "startLine": "9",
+ "endLine": "30",
+ "relevantVariables": [
+ "biomeInstaller",
+ "addPackageDependency",
+ "fs.copySync",
+ "addPackageScript"
+ ]
+ },
+ "inputDataExample": "{\"projectDir\": \"/Users/test/my-t3-app\"}",
+ "outputDataExample": "null"
+ }
+ ],
+ "description": "Offers a choice between two modern code quality toolchains: the standard ESLint with Prettier, or the all-in-one Biome toolkit It installs and configures the selected tools with sensible defaults tailored for a T3 project and adds corresponding scripts to package json for running linting and formatting ",
+ "simulationNodesAndEdges": {
+ "39f257a3-979b-44a0-90bf-4a0b7c436ed7": {
+ "simStepIds": [
+ "eb535b49-789f-4236-aa09-71a1e3a02973"
+ ]
+ },
+ "5ea011ca-b4f5-4321-ac03-096b769b1754": {
+ "simStepIds": [
+ "cd411957-0d57-4d15-8518-7950665d57a5"
+ ]
+ },
+ "c0ab4ac4-0fd0-4ac3-bb81-ba80aa78242a": {
+ "simStepIds": [
+ "efe0bbeb-1987-4db2-833e-d9a8f25a1512"
+ ]
+ },
+ "95c9fe73-46f7-4b20-beb1-80801e9b2a00": {
+ "simStepIds": [
+ "230efbe1-de67-46ba-835a-d56e33d427e7"
+ ]
+ },
+ "a7d2563f-2800-4449-8423-72db0469c077": {
+ "simStepIds": [
+ "f8f8c0f5-be96-4ad1-93e5-8f0f41dd8e21"
+ ]
+ },
+ "26385a13-1e32-4907-91d4-8f9a5b28b180": {
+ "simStepIds": [
+ "b392ead7-48d0-41be-90fe-cf8ac8a3d478"
+ ]
+ },
+ "d3637476-912d-42dd-85a6-f525859e4fe2": {
+ "simStepIds": [
+ "c7022225-1160-44e0-bc6a-7a3c076cf5d3"
+ ]
+ },
+ "f868866e-e79c-429a-a218-cab9e51702ad": {
+ "simStepIds": [
+ "21b92278-c756-4ae5-b7bb-ea4df3771fc2"
+ ]
+ },
+ "c73f74a9-a2ca-43f6-a967-bd689163947b": {
+ "simStepIds": [
+ "c80be4b5-2e02-4b1c-9ec7-213c7c117084"
+ ]
+ },
+ "fb771c77-c75c-48ea-9bf3-b0d9957a4294": {
+ "simStepIds": [
+ "51648cfc-115f-4017-a6da-4217c108546f"
+ ]
+ }
+ },
+ "isAIGenerated": true,
+ "keywords": "biomeInstaller, dynamicEslintInstaller, eslintrc.base.js, prettier.config.mjs, biome.jsonc",
+ "generationPrompt": "Set up code quality tools like ESLint/Prettier or Biome",
+ "generationKeywords": "biomeInstaller, dynamicEslintInstaller, eslintrc.base.js, prettier.config.mjs, biome.jsonc",
+ "meta": {
+ "containerCoverage": {
+ "perContainerTotals": {
+ "frontend": {
+ "promptFileCount": 5,
+ "promptTokenCount": 1619,
+ "suggestedFileCount": 26
+ },
+ "server": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 0
+ },
+ "drawio": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 0
+ },
+ "shared": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 3
+ },
+ "unknown": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 0
+ }
+ },
+ "missingContainers": [],
+ "addedFiles": []
+ }
+ }
+ },
+ "Manage all necessary package dependencies automatically": {
+ "name": "Manage all necessary package dependencies automatically",
+ "simSteps": [
+ {
+ "simStepId": "3c4a30ab-61b2-4b44-9218-5f90989f2369",
+ "diagramNodeId": "30f62a34-97cd-46e2-a9af-7cbc9d72db25",
+ "simStepLabel": "Detect User's Package Manager",
+ "simStepDescription": "The CLI execution begins by identifying the user's package manager (npm, pnpm, yarn, or bun) by inspecting the `npm_config_user_agent` environment variable. This information is used later for installing dependencies and displaying messages.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/utils/getUserPkgManager.ts",
+ "startLine": "3",
+ "endLine": "21",
+ "relevantVariables": [
+ "getUserPkgManager",
+ "userAgent",
+ "process.env.npm_config_user_agent"
+ ]
+ },
+ "inputDataExample": "{\"npm_config_user_agent\": \"pnpm/8.6.12 npm/? node/v18.17.0 darwin arm64\"}",
+ "outputDataExample": "\"pnpm\""
+ },
+ {
+ "simStepId": "54a61672-135c-4ae6-bf69-536f04fd2d38",
+ "diagramNodeId": "78d664aa-7403-4bdc-b521-2ea19df1f71e",
+ "simStepLabel": "Transmit Detected Package Manager",
+ "simStepDescription": "The detected package manager is returned to the main CLI process to be used in subsequent steps, such as formatting user prompts and running installation commands.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/index.ts",
+ "startLine": "33",
+ "endLine": "33",
+ "relevantVariables": [
+ "pkgManager"
+ ]
+ },
+ "inputDataExample": "\"pnpm\"",
+ "outputDataExample": "\"pnpm\""
+ },
+ {
+ "simStepId": "ed556536-2301-47b9-b1cb-2897ea76367f",
+ "diagramNodeId": "fa743050-8d3d-40ee-8641-98aa13bc7a7a",
+ "simStepLabel": "Configure Project via Flags and Prompts",
+ "simStepDescription": "The CLI parses command-line arguments, including the `--noInstall` flag which prevents automatic dependency installation. If not in a non-interactive mode, it prompts the user with a confirmation message, dynamically including the name of the detected package manager, to ask if dependencies should be installed.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/cli/index.ts",
+ "startLine": "360",
+ "endLine": "369",
+ "relevantVariables": [
+ "noInstall",
+ "pkgManager",
+ "p.confirm"
+ ]
+ },
+ "inputDataExample": "[\"node\", \"create-t3-app\", \"--noInstall\"]",
+ "outputDataExample": "{\"appName\": \"my-app\", \"packages\": [\"nextAuth\", \"prisma\", \"tailwind\", \"trpc\", \"eslint\"], \"flags\": {\"noInstall\": true}}"
+ },
+ {
+ "simStepId": "fbd331fe-dfde-4afd-9ef0-e4e76dc57ead",
+ "diagramNodeId": "6f39bf6a-8045-4235-a201-0b8f9104e16b",
+ "simStepLabel": "Transmit User Configuration",
+ "simStepDescription": "The collected user choices, including the decision on whether to install dependencies (`noInstall` flag), are returned from the CLI module to the main execution script.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/index.ts",
+ "startLine": "44",
+ "endLine": "44",
+ "relevantVariables": [
+ "runCli"
+ ]
+ },
+ "inputDataExample": "{\"appName\": \"my-t3-app\", \"packages\": [\"prisma\", \"tailwind\"], \"flags\": {\"noInstall\": false, \"noGit\": false}}",
+ "outputDataExample": "{\"appName\": \"my-t3-app\", \"packages\": [\"prisma\", \"tailwind\"], \"flags\": {\"noInstall\": false, \"noGit\": false}}"
+ },
+ {
+ "simStepId": "9af6ffa7-cec2-43ad-a4c7-7164f9b0242d",
+ "diagramNodeId": "55fa59ac-7d5f-4599-8744-dae4fbc44015",
+ "simStepLabel": "Add Package Dependencies",
+ "simStepDescription": "For each technology selected by the user (e.g., Prisma, Tailwind), a corresponding installer function is executed. These installers call `addPackageDependency`, which reads the project's `package.json`, adds the required dependencies to it, and looks up the correct version for each package.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/utils/addPackageDependency.ts",
+ "startLine": "11",
+ "endLine": "36",
+ "relevantVariables": [
+ "addPackageDependency",
+ "pkgJson",
+ "dependencies",
+ "devMode"
+ ]
+ },
+ "inputDataExample": "{\"dependencies\": [\"prisma\"], \"devMode\": true, \"projectDir\": \"/Users/dev/my-t3-app\"}",
+ "outputDataExample": "{\"name\": \"my-t3-app\", \"dependencies\": {}, \"devDependencies\": {\"prisma\": \"^6.6.0\"}}"
+ },
+ {
+ "simStepId": "8a679c3e-95c6-48e5-9853-2bcfa82d1857",
+ "diagramNodeId": "f61e7f51-acdf-4797-ad3a-acf4444f0683",
+ "simStepLabel": "Look Up Dependency Versions",
+ "simStepDescription": "To ensure stability, the `addPackageDependency` function retrieves a pinned version for each dependency from a static `dependencyVersionMap` instead of fetching the latest version from a registry.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/installers/dependencyVersionMap.ts",
+ "startLine": "5",
+ "endLine": "52",
+ "relevantVariables": [
+ "dependencyVersionMap"
+ ]
+ },
+ "inputDataExample": "\"prisma\"",
+ "outputDataExample": "{\"prisma\": \"^6.6.0\"}"
+ },
+ {
+ "simStepId": "4ea89af2-88eb-42cc-bccb-06505b02e447",
+ "diagramNodeId": "e498f42b-f4f2-462b-a974-8f81e122833e",
+ "simStepLabel": "Write Updated package.json",
+ "simStepDescription": "After all dependencies for the selected packages are added to the JSON object in memory, the object is sorted alphabetically and written back to the `package.json` file on disk.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/utils/addPackageDependency.ts",
+ "startLine": "33",
+ "endLine": "35",
+ "relevantVariables": [
+ "sortedPkgJson",
+ "fs.writeJSONSync"
+ ]
+ },
+ "inputDataExample": "{\"name\": \"my-t3-app\", \"dependencies\": {\"@prisma/client\": \"^6.6.0\"}, \"devDependencies\": {\"prisma\": \"^6.6.0\", \"tailwindcss\": \"^4.0.15\"}}",
+ "outputDataExample": "null"
+ },
+ {
+ "simStepId": "a7eecbdd-b329-4b08-a19f-4404d4d96abb",
+ "diagramNodeId": "212ff099-5d1d-42d6-93af-8e86be81c578",
+ "simStepLabel": "Check Installation Flag",
+ "simStepDescription": "After `package.json` is fully configured, the main script checks the `noInstall` flag to determine if the installation command should be executed.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/index.ts",
+ "startLine": "85",
+ "endLine": "85",
+ "relevantVariables": [
+ "noInstall"
+ ]
+ },
+ "inputDataExample": "{\"noInstall\": false}",
+ "outputDataExample": "{\"noInstall\": false}"
+ },
+ {
+ "simStepId": "9ab207b6-0b57-479f-ad3f-d58f722734e7",
+ "diagramNodeId": "576dbcec-bf9f-4b0b-b5ec-be35ffa926e4",
+ "simStepLabel": "Trigger Dependency Installation",
+ "simStepDescription": "If the `noInstall` flag is `false`, the `installDependencies` function is called to handle the installation process for the detected package manager.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/index.ts",
+ "startLine": "85",
+ "endLine": "87",
+ "relevantVariables": [
+ "noInstall",
+ "installDependencies"
+ ]
+ },
+ "inputDataExample": "{\"projectDir\": \"/Users/dev/my-t3-app\"}",
+ "outputDataExample": "null"
+ },
+ {
+ "simStepId": "67a10ecd-755e-434f-a6cc-2ddff5b8e5d2",
+ "diagramNodeId": "7476e32e-da6c-4342-8100-1b1b7e2e75bf",
+ "simStepLabel": "Pass Control to Install Command Runner",
+ "simStepDescription": "The `installDependencies` function calls `runInstallCommand`, passing the package manager and project directory to execute the specific installation command.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/installDependencies.ts",
+ "startLine": "83",
+ "endLine": "83",
+ "relevantVariables": [
+ "runInstallCommand"
+ ]
+ },
+ "inputDataExample": "{\"pkgManager\": \"pnpm\", \"projectDir\": \"/Users/dev/my-t3-app\"}",
+ "outputDataExample": "{\"pkgManager\": \"pnpm\", \"projectDir\": \"/Users/dev/my-t3-app\"}"
+ },
+ {
+ "simStepId": "214077d9-7358-47c7-853c-cda9ace97c92",
+ "diagramNodeId": "973eeec5-25ef-42c7-992d-da124d5b88c8",
+ "simStepLabel": "Execute Install Command",
+ "simStepDescription": "The `runInstallCommand` function executes the appropriate installation command (e.g., `pnpm install`) in a child process using `execa`. It shows a spinner to provide feedback to the user while dependencies are being downloaded and installed.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/installDependencies.ts",
+ "startLine": "37",
+ "endLine": "73",
+ "relevantVariables": [
+ "runInstallCommand",
+ "execa",
+ "ora"
+ ]
+ },
+ "inputDataExample": "{\"pkgManager\": \"pnpm\", \"projectDir\": \"/Users/dev/my-t3-app\"}",
+ "outputDataExample": "null"
+ },
+ {
+ "simStepId": "78a9e025-78d1-4fc5-8a4f-c69cc030a8af",
+ "diagramNodeId": "34563b08-0dc0-48b0-bd88-4831148c739a",
+ "simStepLabel": "Report Installation Status",
+ "simStepDescription": "Once the installation process completes, the spinner is updated with a success message, indicating that all dependencies have been installed successfully.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/installDependencies.ts",
+ "startLine": "87",
+ "endLine": "89",
+ "relevantVariables": [
+ "installSpinner",
+ "ora().succeed"
+ ]
+ },
+ "inputDataExample": "{\"exitCode\": 0}",
+ "outputDataExample": "{\"exitCode\": 0}"
+ },
+ {
+ "simStepId": "6a5a33fd-1560-4978-a25f-2c79864c1b92",
+ "diagramNodeId": "6c45bbeb-560e-4c8d-ba13-d92f45072af8",
+ "simStepLabel": "Log Final Instructions",
+ "simStepDescription": "Finally, the CLI logs the next steps for the user. If installation was skipped (`noInstall: true`), the instructions will include the command to manually install dependencies.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "cli/src/helpers/logNextSteps.ts",
+ "startLine": "8",
+ "endLine": "66",
+ "relevantVariables": [
+ "logNextSteps",
+ "noInstall",
+ "pkgManager"
+ ]
+ },
+ "inputDataExample": "{\"projectName\": \"my-t3-app\", \"noInstall\": false, \"projectDir\": \"/Users/dev/my-t3-app\"}",
+ "outputDataExample": "\"Next steps:\\n cd my-t3-app\\n pnpm db:push\\n pnpm dev\""
+ }
+ ],
+ "description": "Detects the user's preferred package manager (npm, yarn, pnpm, bun) and uses it for all operations It adds the correct dependencies and dev dependencies to package json for all selected technologies, using a version map to ensure stability The CLI can optionally run the install command automatically to provide a ready-to-run project immediately after scaffolding ",
+ "simulationNodesAndEdges": {
+ "30f62a34-97cd-46e2-a9af-7cbc9d72db25": {
+ "simStepIds": [
+ "3c4a30ab-61b2-4b44-9218-5f90989f2369"
+ ]
+ },
+ "fa743050-8d3d-40ee-8641-98aa13bc7a7a": {
+ "simStepIds": [
+ "ed556536-2301-47b9-b1cb-2897ea76367f"
+ ]
+ },
+ "55fa59ac-7d5f-4599-8744-dae4fbc44015": {
+ "simStepIds": [
+ "9af6ffa7-cec2-43ad-a4c7-7164f9b0242d"
+ ]
+ },
+ "e498f42b-f4f2-462b-a974-8f81e122833e": {
+ "simStepIds": [
+ "4ea89af2-88eb-42cc-bccb-06505b02e447"
+ ]
+ },
+ "576dbcec-bf9f-4b0b-b5ec-be35ffa926e4": {
+ "simStepIds": [
+ "9ab207b6-0b57-479f-ad3f-d58f722734e7"
+ ]
+ },
+ "973eeec5-25ef-42c7-992d-da124d5b88c8": {
+ "simStepIds": [
+ "214077d9-7358-47c7-853c-cda9ace97c92"
+ ]
+ },
+ "6c45bbeb-560e-4c8d-ba13-d92f45072af8": {
+ "simStepIds": [
+ "6a5a33fd-1560-4978-a25f-2c79864c1b92"
+ ]
+ },
+ "78d664aa-7403-4bdc-b521-2ea19df1f71e": {
+ "simStepIds": [
+ "54a61672-135c-4ae6-bf69-536f04fd2d38"
+ ]
+ },
+ "6f39bf6a-8045-4235-a201-0b8f9104e16b": {
+ "simStepIds": [
+ "fbd331fe-dfde-4afd-9ef0-e4e76dc57ead"
+ ]
+ },
+ "f61e7f51-acdf-4797-ad3a-acf4444f0683": {
+ "simStepIds": [
+ "8a679c3e-95c6-48e5-9853-2bcfa82d1857"
+ ]
+ },
+ "212ff099-5d1d-42d6-93af-8e86be81c578": {
+ "simStepIds": [
+ "a7eecbdd-b329-4b08-a19f-4404d4d96abb"
+ ]
+ },
+ "7476e32e-da6c-4342-8100-1b1b7e2e75bf": {
+ "simStepIds": [
+ "67a10ecd-755e-434f-a6cc-2ddff5b8e5d2"
+ ]
+ },
+ "34563b08-0dc0-48b0-bd88-4831148c739a": {
+ "simStepIds": [
+ "78a9e025-78d1-4fc5-8a4f-c69cc030a8af"
+ ]
+ }
+ },
+ "isAIGenerated": true,
+ "keywords": "installDependencies, addPackageDependency, getUserPkgManager, dependencyVersionMap, noInstall",
+ "generationPrompt": "Manage all necessary package dependencies automatically",
+ "generationKeywords": "installDependencies, addPackageDependency, getUserPkgManager, dependencyVersionMap, noInstall",
+ "meta": {
+ "containerCoverage": {
+ "perContainerTotals": {
+ "frontend": {
+ "promptFileCount": 21,
+ "promptTokenCount": 11336,
+ "suggestedFileCount": 26
+ },
+ "server": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 0
+ },
+ "drawio": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 0
+ },
+ "shared": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 3
+ },
+ "unknown": {
+ "promptFileCount": 0,
+ "promptTokenCount": 0,
+ "suggestedFileCount": 0
+ }
+ },
+ "missingContainers": [],
+ "addedFiles": []
+ }
+ }
+ }
+ },
+ "cellToPath": {
+ "31605429-bdf9-44a1-9ce3-f7234ef99f87": "cli",
+ "2418c3df-0551-4276-94df-df1042ecbfa7": "cli/src",
+ "e9074847-4446-478a-baf0-62f477e06210": "cli/src/cli",
+ "a80e3f00-2d8f-40f0-9dbf-d127667352d0": "cli/src/index.ts",
+ "69671728-1902-4f50-b1a3-fd96f8df7d5c": "cli/src/helpers",
+ "7922d5c7-279f-4886-817b-8dead6dd7e57": "cli/src/cli/index.ts",
+ "2bddd99c-0b89-4485-89a0-b9fceca09629": "cli/src/helpers/createProject.ts",
+ "f8df5151-b83e-4adf-a708-7c34f24e0a77": "cli/src/helpers/scaffoldProject.ts",
+ "4307f16d-417e-4e54-a372-62eb4617c708": "cli/src/helpers/installPackages.ts",
+ "4de5d69b-c4cb-448d-a7cd-50f9e8ff669e": "cli/src/helpers/installDependencies.ts",
+ "a90d624d-9ce8-414f-8e39-b692c00dee75": "cli/src/cli/index.ts-simstep-c82f2b28-fa9e-41fb-8e93-61e6a9af0dea",
+ "aece8619-9225-43f4-9bbc-3a1d357e92ec": "cli/src/index.ts-simstep-6e30cae2-b5cf-4729-8d1f-96ffd1c3de37",
+ "97d9b337-79da-4a0f-bc33-2e650b6b8907": "cli/src/helpers/scaffoldProject.ts-simstep-78e2da4f-a478-4bb0-abfa-2d14fec158d2",
+ "5a6e3a15-4346-4fcb-9487-26a98cb7d087": "cli/src/helpers/installPackages.ts-simstep-5e1d6b81-1e28-4b2b-9064-ea7fc94e61f6",
+ "f70a59b8-7bc3-494a-a081-aab050376354": "cli/src/index.ts-simstep-450d6eab-4dd8-4235-9de3-b08fb19e2c9c",
+ "4fb6f557-f734-4005-be8b-0fc091135184": "cli/src/helpers/installDependencies.ts-simstep-5632f18c-a2ee-4cce-8878-4d77101dcf8b",
+ "e74a89d5-0a22-4336-9142-a14c5710b030": "generated-edge-simstep-a0e547e6-8c7a-4490-a741-47cfee102a49-e74a89d5-0a22-4336-9142-a14c5710b030",
+ "3bb18c1e-677c-4168-82b5-8cd08639202a": "generated-edge-simstep-57592b50-189c-49e7-99c4-e552b6571ede-3bb18c1e-677c-4168-82b5-8cd08639202a",
+ "6652caa1-9833-47e3-a32d-fc6b6f77114b": "generated-edge-simstep-e3ddad10-985f-4486-8845-46cba5902c15-6652caa1-9833-47e3-a32d-fc6b6f77114b",
+ "6d99c4bc-1b14-46b3-ba1b-cef98725bdba": "generated-edge-simstep-51dbd74a-ae92-454c-b76a-1edb7e346373-6d99c4bc-1b14-46b3-ba1b-cef98725bdba",
+ "af3cc1e9-aa6d-460d-a266-55f81aaae0e9": "generated-edge-simstep-6d27c9dc-72ee-413a-b90e-44b5ae81fd8a-af3cc1e9-aa6d-460d-a266-55f81aaae0e9",
+ "bea08117-7db8-426f-a7f4-21275af746e4": "cli/template",
+ "b7802ecf-b170-4bbb-b97c-9c22247eceab": "cli/src/installers",
+ "90b826ad-9d87-4883-9239-7dae6d3ee954": "cli/template/extras",
+ "9d353c27-f968-4ddf-b513-4ea7e667a306": "cli/src/installers/index.ts",
+ "7499353d-8b6f-4564-958b-c303fd5d636f": "cli/src/installers/trpc.ts",
+ "deb9ac89-9f73-438c-a0c6-19e615cc4422": "cli/src/helpers/selectBoilerplate.ts",
+ "7dc18668-256e-49aa-a3a2-ae908b99e905": "cli/template/extras/src",
+ "0c96cab6-da7e-4692-a9c6-043135dacc20": "cli/template/extras/src/utils",
+ "328a9527-b008-42ad-bee2-19bdd850a5ff": "cli/template/extras/src/pages",
+ "e70555d3-bf43-4b87-a620-c69507123ad5": "cli/template/extras/src/server",
+ "2c8bc2ed-571c-4e77-9057-03af51d3a848": "cli/template/extras/src/utils/api.ts",
+ "fb283e3a-3cd1-416a-b9a9-17547875ccea": "cli/template/extras/src/pages/api",
+ "b89c4d01-a3a5-464a-b911-ea775e99b290": "cli/template/extras/src/server/api",
+ "e354cf7f-e516-4146-aa96-930d168ebb80": "cli/template/extras/src/pages/api/trpc",
+ "41854670-0a03-48c9-b465-ada6f72f52c7": "cli/template/extras/src/server/api/root.ts",
+ "4df51ef7-ea96-46ac-a375-02a310597c8c": "cli/template/extras/src/server/api/routers",
+ "73af1400-460a-4e47-b82d-0558dc7fc9b8": "cli/template/extras/src/server/api/trpc-pages",
+ "c4144223-d4a5-4a03-a052-6d8b8c069811": "cli/template/extras/src/pages/api/trpc/[trpc].ts",
+ "06ebab93-5008-47de-b800-a998caa6bc8f": "cli/template/extras/src/server/api/routers/post",
+ "ceb3e5b8-b6ec-42a3-89f6-d242ba0eb807": "cli/template/extras/src/server/api/trpc-pages/base.ts",
+ "049018d1-9cd5-4439-aa03-389402c14188": "cli/template/extras/src/server/api/routers/post/base.ts",
+ "f225fee0-7abf-45ca-86df-3578947e92f4": "cli/src/cli/index.ts-simstep-a2412d9d-c686-4e24-b4fb-07a4c6a9c04f",
+ "8d5b9775-bdfb-4aa0-80ee-62c40bdb9edd": "cli/src/installers/index.ts-simstep-511ebdf9-0ac2-4523-bdf8-df1afe4dd6f5",
+ "e4df924e-2d58-436e-8e27-a91350d57455": "cli/src/installers/trpc.ts-simstep-df6034f0-03ef-493b-b23c-3f54669bb024",
+ "f06009b7-1213-4d49-9d0e-fb7aa815abf5": "cli/src/installers/trpc.ts-simstep-726591ad-6a96-4cd1-9f55-38d8cad8af59",
+ "7c88dab3-d7b7-46a7-97dd-b81090b4e0d2": "cli/src/helpers/selectBoilerplate.ts-simstep-a19527d6-389d-465f-ba7a-a53bdf97cd18",
+ "5272625a-ff39-4656-a705-d7eae74eca93": "cli/template/extras/src/utils/api.ts-simstep-465d6958-6428-42f6-8b48-a42a83f5fab7",
+ "1ef6e547-5d93-41fb-9ed4-cf9421ac1964": "cli/template/extras/src/pages/api/trpc/[trpc].ts-simstep-6d61c17d-1600-490e-93bf-44e3fa112e6a",
+ "066dcc0e-61f6-4ec4-a392-4539f8dd1b3d": "cli/template/extras/src/server/api/root.ts-simstep-104d7bb5-81af-4d61-9a57-185d94f9e28c",
+ "548e72f6-0889-4d51-91d9-2106fa15009b": "cli/template/extras/src/server/api/routers/post/base.ts-simstep-572e0d05-9d88-4a24-8e4d-2c7154d2f1d2",
+ "0edf5280-60ad-4e4a-a9cd-7872ba433ee0": "cli/template/extras/src/utils/api.ts-simstep-329d6e8f-a16e-4be8-a0ce-7680767495a6",
+ "be363e16-6699-40b9-9cf7-ee3a0ccc1e86": "generated-edge-simstep-0c85aa78-afd8-4ccf-b919-b3a28d4be75a-be363e16-6699-40b9-9cf7-ee3a0ccc1e86",
+ "56eb0fd1-14f4-46cd-85c7-a79d76f4c1b5": "generated-edge-simstep-7372cde8-0616-47af-a7fb-af2a173ff16c-56eb0fd1-14f4-46cd-85c7-a79d76f4c1b5",
+ "0022c79d-28fa-404b-98dc-bdfb9dbc8948": "generated-edge-simstep-5b560bdb-ccad-41ed-8d97-a281de3ef122-0022c79d-28fa-404b-98dc-bdfb9dbc8948",
+ "e629999a-1fbb-41ab-8857-6beee22287ec": "generated-edge-simstep-bf50d88a-65ac-44e9-95c4-741af87395cd-e629999a-1fbb-41ab-8857-6beee22287ec",
+ "14c2b71d-5ce2-4d42-87ce-a7084009adbe": "generated-edge-simstep-9cd6ffb8-20af-4fe2-a7eb-e02ee5297e40-14c2b71d-5ce2-4d42-87ce-a7084009adbe",
+ "a4f6f418-7263-4543-8117-3c13247d23c1": "generated-edge-simstep-63a9ac0b-3e97-44af-bd1f-ea530ff5a387-a4f6f418-7263-4543-8117-3c13247d23c1",
+ "3ff84179-22ea-406d-933e-6bf88e387d33": "generated-edge-simstep-e5dea768-b741-4f24-bf2b-16986d6f7dc3-3ff84179-22ea-406d-933e-6bf88e387d33",
+ "a9910f9c-4e1a-41cc-bc6b-8a0c78d2233c": "generated-edge-simstep-ad46482b-c53d-45e1-96f2-f7d8faa598c5-a9910f9c-4e1a-41cc-bc6b-8a0c78d2233c",
+ "12664725-8a7e-4347-afef-0c8594d77ca5": "cli/src/installers/prisma.ts",
+ "83e7cf3a-e72c-4bef-b10f-4b0f2909ad38": "cli/src/installers/drizzle.ts",
+ "c2592411-a35f-464d-aae2-e5dd82b2eae9": "cli/src/installers/index.ts-simstep-1f66343c-581b-4ba0-bafa-16a289d49088",
+ "190a78a0-b7ac-4244-a5d5-30f286665976": "cli/src/installers/prisma.ts-simstep-317777e2-f59a-42a8-bf9e-d827f0aa36ae",
+ "adb4326c-4465-4845-9040-1cbdf556ab2f": "cli/src/installers/prisma.ts-simstep-fb261ed9-b27e-4ed9-9e88-99ee06534683",
+ "2bbe148e-d909-45eb-89d2-f1176b3ac247": "cli/src/installers/prisma.ts-simstep-c2f097d0-d5d3-4ce8-8408-e2e422307943",
+ "e0f1924a-83b1-4e57-a094-fd0c0c5bb7b4": "cli/src/installers/index.ts-simstep-346b226f-561f-4660-bba1-e73291a75963",
+ "d01873cf-3396-4ab9-bd97-5feb0e4f0176": "cli/src/installers/drizzle.ts-simstep-3b58f7d6-97ee-4a76-be16-f88aac032bfb",
+ "f9144dc9-82f4-4e58-94e0-bd58e4f168a2": "cli/src/installers/drizzle.ts-simstep-cd03a6c2-7284-4536-83d4-d323dceb2c11",
+ "ca527877-c651-49e3-8fbf-4ff5999fc713": "cli/src/installers/drizzle.ts-simstep-961c0c28-126c-479c-b722-bf21fe2dc6e2",
+ "a4e822e3-e854-4405-b97e-e07bbb1ea596": "generated-edge-simstep-6208ad0b-72fc-4115-9c0f-d529448857e6-a4e822e3-e854-4405-b97e-e07bbb1ea596",
+ "ffe49cb0-254a-4f12-a363-7ae52f5914af": "generated-edge-simstep-b73c412c-12b7-4c1b-b601-0928e398cc8a-ffe49cb0-254a-4f12-a363-7ae52f5914af",
+ "688fe894-cb7f-45cf-b5ef-c35d87e49563": "generated-edge-simstep-afe388f6-b4bd-4c9b-ade7-c17d71de973e-688fe894-cb7f-45cf-b5ef-c35d87e49563",
+ "3ab3c030-71a6-4574-aaec-23ed12f5dbfb": "generated-edge-simstep-1d282367-cb63-4ebd-b982-837a2ea6ae36-3ab3c030-71a6-4574-aaec-23ed12f5dbfb",
+ "febf3c47-20fd-414c-9cdd-b8549ab1eab5": "generated-edge-simstep-c490940a-0f6e-4ee7-a482-f1e17e324133-febf3c47-20fd-414c-9cdd-b8549ab1eab5",
+ "269bf727-90b9-44f4-9989-eab3d4d9a873": "generated-edge-simstep-50719bc2-46f9-487e-88b8-ad41079bfe44-269bf727-90b9-44f4-9989-eab3d4d9a873",
+ "08e62a9b-8bcf-41fc-a4a9-d43c4f0faee4": "generated-edge-simstep-9799f85f-6d01-4fbb-9eaf-02638b03e0bb-08e62a9b-8bcf-41fc-a4a9-d43c4f0faee4",
+ "a4d0176d-eaec-4094-a1fd-bc289e6d7458": "cli/src/installers/nextAuth.ts",
+ "3e55e39b-63e0-4faf-8574-b36b1ec90270": "cli/template/extras/src/pages/index",
+ "792e645f-92d1-44a5-a99c-92b9031dcd9e": "cli/template/extras/src/server/auth",
+ "e79c6989-0648-4465-be78-8d16d8b2b2b8": "cli/template/extras/src/pages/index/with-auth-trpc-tw.tsx",
+ "efab3eee-f940-4181-92ab-d80a278f8c0a": "cli/template/extras/src/server/auth/index.ts",
+ "1d2f1942-d500-44a2-a52f-67ec7559531c": "cli/template/extras/src/server/auth/config",
+ "801eaefc-abfc-4ef8-afb1-657cc5748a73": "cli/template/extras/src/server/api/trpc-app",
+ "02db1526-2589-4801-bcde-e60df7e323e8": "cli/template/extras/src/server/auth/config/with-prisma.ts",
+ "719262a2-cfc8-4f23-a9b2-8f714af0be6d": "cli/template/extras/src/server/api/trpc-app/with-auth-db.ts",
+ "fcd69b1a-c154-4875-87cb-8d9e44da639b": "cli/template/extras/src/server/api/routers/post/with-auth-prisma.ts",
+ "a2eea980-78d7-4669-8f45-611617818b6c": "cli/src/installers/index.ts-simstep-f70bea20-ed17-483b-a458-8a62176faca4",
+ "169f3a4d-8d19-4d99-af9b-1e517017fded": "cli/src/installers/nextAuth.ts-simstep-979a587d-9993-4855-bae6-b2d84b9caa02",
+ "6ca52bcf-5157-4a2a-ac62-f1dd8860c5b2": "cli/src/installers/nextAuth.ts-simstep-447bee75-fc5a-460c-b086-c061d70f93e5",
+ "a512298a-9dba-4bca-8d3f-52936b73e86a": "cli/template/extras/src/pages/index/with-auth-trpc-tw.tsx-simstep-1621d9a7-9cba-4d68-9d62-fa20a7f13dc7",
+ "6179e1d1-cef5-4852-9925-2575e6b8b2f7": "cli/template/extras/src/server/auth/config/with-prisma.ts-simstep-a015b59c-1f2a-4c21-bb5c-b980f96161d5",
+ "9f72d2bd-5c83-4c61-a68f-d6d66ff726d7": "cli/template/extras/src/pages/index/with-auth-trpc-tw.tsx-simstep-6bad09b8-afb0-407e-8ffe-05d7c4b6e50a",
+ "9d66c615-14cd-436e-8ffe-efb75b44a93d": "cli/template/extras/src/server/api/trpc-app/with-auth-db.ts-simstep-a685579d-061d-4396-a2d7-a4af2ea6de50",
+ "680768d5-64c0-4f8d-be33-11ca0a4c0d3a": "cli/template/extras/src/server/api/routers/post/with-auth-prisma.ts-simstep-4499ec8c-9843-4f07-8954-f027e8c6e149",
+ "bab9190f-6722-4566-a1ad-aa24cadd8a52": "cli/template/extras/src/pages/index/with-auth-trpc-tw.tsx-simstep-f6138753-dab0-4fbf-ab35-638ab9d27900",
+ "95d6db55-5b63-4fc0-95eb-93c5c639aae9": "generated-edge-simstep-b54b26ac-dc82-4312-b041-95a820e16f2b-95d6db55-5b63-4fc0-95eb-93c5c639aae9",
+ "04744038-130c-4ea9-8f53-f6c68669f405": "generated-edge-simstep-0429d8fa-ce25-4f7e-900b-de8ec92ace7a-04744038-130c-4ea9-8f53-f6c68669f405",
+ "0fb31c20-8330-40f8-9f79-7e3abf0744f4": "generated-edge-simstep-f2f8c5e1-844d-4c6e-97e1-cd6c6f93b4d0-0fb31c20-8330-40f8-9f79-7e3abf0744f4",
+ "bd686086-86a5-4f00-ae4b-978fa6ce76f2": "generated-edge-simstep-addf4232-963a-4700-af13-3a04cc8d5b3c-bd686086-86a5-4f00-ae4b-978fa6ce76f2",
+ "6f54ede3-90b5-4528-885a-ff9380a3ee96": "generated-edge-simstep-7fef5ad7-0bb9-4f49-b833-a920d5c212b2-6f54ede3-90b5-4528-885a-ff9380a3ee96",
+ "7f821db3-2427-4e78-8ad1-92542cf827ab": "generated-edge-simstep-6057145f-d6b7-41ed-ba18-24c74dde34a6-7f821db3-2427-4e78-8ad1-92542cf827ab",
+ "a1232a9e-ee54-4d7a-b352-d2bd842a0ab0": "generated-edge-simstep-661f19d8-ac62-4c14-9dea-92b5deff0f51-a1232a9e-ee54-4d7a-b352-d2bd842a0ab0",
+ "a5eefd48-f544-4ee6-a06d-68cc973d32f8": "generated-edge-simstep-6983d3db-c70c-44fc-a4a5-af42d2a00121-a5eefd48-f544-4ee6-a06d-68cc973d32f8",
+ "177076bf-da3d-4009-a28e-8beea8347e59": "cli/src/helpers/createProject.ts-simstep-de4e966a-ceca-43fb-88b6-975128e1ab21",
+ "8af610d5-4a33-4f74-a9f3-457adc87cee9": "cli/src/helpers/installPackages.ts-simstep-1c34f5ac-cb00-4e58-821f-042443cdf4a7",
+ "4c50b970-c419-4242-8081-969c1976de48": "cli/src/installers/trpc.ts-simstep-14ff0e0e-dfa1-4779-b5ea-48140ee16cec",
+ "8b85fe88-0901-4170-9de0-5020741016c7": "cli/src/helpers/createProject.ts-simstep-226a5291-4ded-4539-b9a6-1786a4cbe8ef",
+ "e6cd2ba5-772e-432a-8f03-f6f79e150e64": "cli/src/helpers/selectBoilerplate.ts-simstep-7b8262b2-328c-45a8-9c08-a6e0e84cb48b",
+ "9cb9b456-7ea9-444f-a2f3-675e6738f009": "generated-edge-simstep-a420b1fc-f902-4c8c-8b96-3e1ce086385d-9cb9b456-7ea9-444f-a2f3-675e6738f009",
+ "668f1aab-854f-48b0-a3cb-541172daa2f3": "generated-edge-simstep-07489ec1-deeb-4c9b-8601-d0dfa0c5f840-668f1aab-854f-48b0-a3cb-541172daa2f3",
+ "10a59b71-51b3-4231-b7ba-1a746ce638a4": "generated-edge-simstep-f9d52577-4c0d-4800-805c-9b36ab0d95fa-10a59b71-51b3-4231-b7ba-1a746ce638a4",
+ "2c10e351-4c6e-44ec-a223-152dfc06d401": "generated-edge-simstep-8816c70f-8e0f-485d-bd6e-f7838aee8e2e-2c10e351-4c6e-44ec-a223-152dfc06d401",
+ "01f6ab49-5bb1-4aaf-91a3-5ca2b53a8125": "cli/src/cli/index.ts-simstep-785ad8f9-622a-49df-a3c8-99427a713789",
+ "4090eda9-db5b-4b1c-823c-ba960a6977f2": "cli/src/index.ts-simstep-6daed3eb-ef77-4da2-bbc1-f498c8a67973",
+ "50e88448-d3db-4998-be4e-d9e17e41f882": "cli/src/helpers/createProject.ts-simstep-deb6f16f-4059-42b2-8b21-7a611e68ccfe",
+ "303d2b11-8dca-4b46-8220-2fecde934224": "cli/src/helpers/selectBoilerplate.ts-simstep-76a15289-8c19-4b65-be3f-54d9b116435f",
+ "2085ac1b-1cdf-47e4-8cc2-4b0fee237328": "cli/src/installers/trpc.ts-simstep-eae59e61-d018-47f3-b9f8-b76895ca2ecb",
+ "750bb2a4-371e-48b4-94e1-f51c196c40b9": "cli/src/cli/index.ts-simstep-b8de0499-94f5-445b-b8dd-e5161916a610",
+ "a497d728-6923-4460-aa63-d4623a02ba55": "cli/src/index.ts-simstep-da6033d7-7ac6-43b2-a168-afd8efcb7f57",
+ "a7d01d31-f935-4411-a5d6-51ba42fec14f": "cli/src/helpers/createProject.ts-simstep-1b87a547-3c63-4cf1-b082-1739fd85dd23",
+ "e7d9ebec-908c-4db6-88e6-623660fb7a1c": "cli/src/helpers/selectBoilerplate.ts-simstep-a36df07d-a088-4a7e-bc05-53781cec063e",
+ "eba4a02f-9ae0-4ca2-89f8-8e78001d45a9": "cli/src/installers/trpc.ts-simstep-a8b5924d-279b-40e2-a085-1339e78a3f4e",
+ "dd760c03-aca2-4175-8cd8-892ff54db971": "generated-edge-simstep-50c7dbbb-b13f-4a72-b509-c04effb0fd95-dd760c03-aca2-4175-8cd8-892ff54db971",
+ "54cd3187-2dbf-44f2-8a6e-dcc25b555968": "generated-edge-simstep-5b39d1cc-2edb-4656-93c5-8db21b153aa4-54cd3187-2dbf-44f2-8a6e-dcc25b555968",
+ "1c467c0d-7ed1-40fb-9705-5fde914f0ca7": "generated-edge-simstep-1b0c5857-cc4c-4bc1-b486-a650a9f4602a-1c467c0d-7ed1-40fb-9705-5fde914f0ca7",
+ "6c8f17a9-5963-420c-9402-840d3dddb818": "generated-edge-simstep-ed9a8658-e1e1-4f93-84c2-9d960a6cff67-6c8f17a9-5963-420c-9402-840d3dddb818",
+ "1b961755-e761-4311-a9d4-fae811a27e79": "generated-edge-simstep-fad4fe20-944a-4288-9675-573e2ca083e7-1b961755-e761-4311-a9d4-fae811a27e79",
+ "b5219509-efe1-420b-b691-c612e0d999ed": "generated-edge-simstep-85de4be2-3ba8-4835-810f-50c09cae1275-b5219509-efe1-420b-b691-c612e0d999ed",
+ "9556efb9-e9ae-4b04-8a00-c3ec1a6bb9fe": "generated-edge-simstep-102c831b-f8c7-4648-9abf-c6c0961003cc-9556efb9-e9ae-4b04-8a00-c3ec1a6bb9fe",
+ "ddaec457-a32a-4ebf-84fe-34fc82b454a9": "generated-edge-simstep-aabc8b03-d6c1-46d6-8a6f-612225e43fc6-ddaec457-a32a-4ebf-84fe-34fc82b454a9",
+ "3f075ef8-a98b-4758-8d4b-94a2a182207c": "cli/src/installers/tailwind.ts",
+ "d6547a47-309b-4534-8e66-f936d12dea95": "cli/template/extras/src/app",
+ "a6964640-b50d-411b-af0c-80eaa4cdc92d": "cli/template/extras/src/app/layout",
+ "fc78da08-029f-4a37-a622-5ff9893d410d": "cli/template/extras/src/app/layout/with-tw.tsx",
+ "0ad39dfb-42a9-41c5-ba55-70c0af80fbff": "cli/src/installers/index.ts-simstep-3aeb4ed8-7a7f-468f-a434-36e4e70d0eb8",
+ "d0378ecb-35a1-43d6-9ebf-f9452045319c": "cli/src/installers/tailwind.ts-simstep-f4e2f662-5c25-456d-ba6f-37405b4aec9e",
+ "889452ae-0841-422a-8bdd-597d96f1c654": "cli/src/installers/tailwind.ts-simstep-225b03ea-d22e-4ac3-b631-266e20f87981",
+ "5eddb09c-40c9-405e-acb6-b7a837065f73": "cli/src/helpers/selectBoilerplate.ts-simstep-c8e42310-6fc2-4d2f-8e18-ee1ed90b82ff",
+ "1e821d51-88f8-45bc-92c9-36076c6605ec": "cli/src/helpers/selectBoilerplate.ts-simstep-0f872fc4-8d73-4e9f-86ea-626c12612df6",
+ "8482481b-2a63-4856-a90a-6324f9018bbd": "cli/template/extras/src/app/layout/with-tw.tsx-simstep-d1ea5566-24b0-4e05-83c1-5e53d955af65",
+ "aa7b2852-7dde-4f1c-b129-c13fdc7c3824": "generated-edge-simstep-05969447-943d-4e11-a381-c4a05a82bd5a-aa7b2852-7dde-4f1c-b129-c13fdc7c3824",
+ "17f5944c-678b-460c-89e1-c87861b9beb4": "generated-edge-simstep-41c1df93-5db2-40b1-b6d8-0ed94478c30d-17f5944c-678b-460c-89e1-c87861b9beb4",
+ "044311d7-c689-4ea8-9d96-a54cd8841068": "generated-edge-simstep-1cbd3b04-97d9-4f82-bcd9-3b2abc0b7fb5-044311d7-c689-4ea8-9d96-a54cd8841068",
+ "1baa420d-31bc-4b16-9439-60aba5caaa8e": "generated-edge-simstep-b25005da-7772-4400-b93b-8ec508e2086b-1baa420d-31bc-4b16-9439-60aba5caaa8e",
+ "91018bf2-c3a6-4e0e-9f80-2c8927737a79": "generated-edge-simstep-e1eaf756-84cc-4353-b4c9-2ec7d2341daf-91018bf2-c3a6-4e0e-9f80-2c8927737a79",
+ "bfe0e7d2-305f-4b5d-b78c-143f2bfcac79": "cli/template/base",
+ "925b1377-df5c-41eb-ab8b-39e2904f4e22": "cli/template/base/next.config.js",
+ "1f42fc8a-35ee-4a36-917a-3e9c0c1efc91": "cli/template/extras/src/env",
+ "3302a04d-006f-4785-b626-9391d518cf3f": "cli/template/extras/src/env/with-auth-db.js",
+ "64141bc5-b599-4cfd-84b4-22d82cc156d3": "cli/template/base/next.config.js-simstep-f0726e75-4342-4219-9fa9-7e1cc28d4914",
+ "06e6c413-d8f8-4b4d-bee0-7279486dc487": "cli/template/extras/src/env/with-auth-db.js-simstep-30310d69-af01-45ec-a7c9-4767069522c4",
+ "9582ac1d-7dae-4afa-a612-58ca47d08b98": "cli/template/extras/src/env/with-auth-db.js-simstep-1ad8e0a5-03e7-4e39-a101-22f70c5cde1d",
+ "3abb65b0-b42f-496b-86d1-df7502d3c371": "cli/template/extras/src/env/with-auth-db.js-simstep-bb5e9d39-c67d-4141-b580-a68cc53b3133",
+ "d967f8d4-2bc9-4aca-8aa2-60b07ff53d79": "generated-edge-simstep-f5a74f03-5919-4501-ac85-e18bf5239991-d967f8d4-2bc9-4aca-8aa2-60b07ff53d79",
+ "e975592b-9351-498c-a7f3-eeaa6de5940e": "generated-edge-simstep-edd00467-1311-425b-b84d-699f80742beb-e975592b-9351-498c-a7f3-eeaa6de5940e",
+ "19753747-2d54-43f4-b583-6130fdb0dea8": "generated-edge-simstep-b850604a-0b78-4c69-807e-e1b78828f719-19753747-2d54-43f4-b583-6130fdb0dea8",
+ "6e9b1999-6a26-410b-836f-ef67d1761b14": "cli/src/installers/eslint.ts",
+ "fb892a07-32fc-4053-8412-49826abb19ed": "cli/src/installers/biome.ts",
+ "39f257a3-979b-44a0-90bf-4a0b7c436ed7": "cli/src/installers/index.ts-simstep-eb535b49-789f-4236-aa09-71a1e3a02973",
+ "5ea011ca-b4f5-4321-ac03-096b769b1754": "cli/src/helpers/installPackages.ts-simstep-cd411957-0d57-4d15-8518-7950665d57a5",
+ "c0ab4ac4-0fd0-4ac3-bb81-ba80aa78242a": "cli/src/installers/eslint.ts-simstep-efe0bbeb-1987-4db2-833e-d9a8f25a1512",
+ "95c9fe73-46f7-4b20-beb1-80801e9b2a00": "cli/src/installers/index.ts-simstep-230efbe1-de67-46ba-835a-d56e33d427e7",
+ "a7d2563f-2800-4449-8423-72db0469c077": "cli/src/helpers/installPackages.ts-simstep-f8f8c0f5-be96-4ad1-93e5-8f0f41dd8e21",
+ "26385a13-1e32-4907-91d4-8f9a5b28b180": "cli/src/installers/biome.ts-simstep-b392ead7-48d0-41be-90fe-cf8ac8a3d478",
+ "d3637476-912d-42dd-85a6-f525859e4fe2": "generated-edge-simstep-c7022225-1160-44e0-bc6a-7a3c076cf5d3-d3637476-912d-42dd-85a6-f525859e4fe2",
+ "f868866e-e79c-429a-a218-cab9e51702ad": "generated-edge-simstep-21b92278-c756-4ae5-b7bb-ea4df3771fc2-f868866e-e79c-429a-a218-cab9e51702ad",
+ "c73f74a9-a2ca-43f6-a967-bd689163947b": "generated-edge-simstep-c80be4b5-2e02-4b1c-9ec7-213c7c117084-c73f74a9-a2ca-43f6-a967-bd689163947b",
+ "fb771c77-c75c-48ea-9bf3-b0d9957a4294": "generated-edge-simstep-51648cfc-115f-4017-a6da-4217c108546f-fb771c77-c75c-48ea-9bf3-b0d9957a4294",
+ "137883e2-a261-4a57-881b-20809d2382c8": "cli/src/utils",
+ "d64cc788-e508-4b60-a1d8-e1da88984f4a": "cli/src/utils/getUserPkgManager.ts",
+ "fb4ff8f6-5c53-406c-a2a3-75c41e521f40": "cli/src/utils/addPackageDependency.ts",
+ "ecb7668f-27f4-4280-b1d5-0d8d5e70e464": "cli/src/installers/dependencyVersionMap.ts",
+ "7f33bc88-de62-45a9-999b-087af8d18a6a": "cli/src/helpers/logNextSteps.ts",
+ "30f62a34-97cd-46e2-a9af-7cbc9d72db25": "cli/src/utils/getUserPkgManager.ts-simstep-3c4a30ab-61b2-4b44-9218-5f90989f2369",
+ "fa743050-8d3d-40ee-8641-98aa13bc7a7a": "cli/src/cli/index.ts-simstep-ed556536-2301-47b9-b1cb-2897ea76367f",
+ "55fa59ac-7d5f-4599-8744-dae4fbc44015": "cli/src/utils/addPackageDependency.ts-simstep-9af6ffa7-cec2-43ad-a4c7-7164f9b0242d",
+ "e498f42b-f4f2-462b-a974-8f81e122833e": "cli/src/utils/addPackageDependency.ts-simstep-4ea89af2-88eb-42cc-bccb-06505b02e447",
+ "576dbcec-bf9f-4b0b-b5ec-be35ffa926e4": "cli/src/index.ts-simstep-9ab207b6-0b57-479f-ad3f-d58f722734e7",
+ "973eeec5-25ef-42c7-992d-da124d5b88c8": "cli/src/helpers/installDependencies.ts-simstep-214077d9-7358-47c7-853c-cda9ace97c92",
+ "6c45bbeb-560e-4c8d-ba13-d92f45072af8": "cli/src/helpers/logNextSteps.ts-simstep-6a5a33fd-1560-4978-a25f-2c79864c1b92",
+ "78d664aa-7403-4bdc-b521-2ea19df1f71e": "generated-edge-simstep-54a61672-135c-4ae6-bf69-536f04fd2d38-78d664aa-7403-4bdc-b521-2ea19df1f71e",
+ "6f39bf6a-8045-4235-a201-0b8f9104e16b": "generated-edge-simstep-fbd331fe-dfde-4afd-9ef0-e4e76dc57ead-6f39bf6a-8045-4235-a201-0b8f9104e16b",
+ "f61e7f51-acdf-4797-ad3a-acf4444f0683": "generated-edge-simstep-8a679c3e-95c6-48e5-9853-2bcfa82d1857-f61e7f51-acdf-4797-ad3a-acf4444f0683",
+ "212ff099-5d1d-42d6-93af-8e86be81c578": "generated-edge-simstep-a7eecbdd-b329-4b08-a19f-4404d4d96abb-212ff099-5d1d-42d6-93af-8e86be81c578",
+ "7476e32e-da6c-4342-8100-1b1b7e2e75bf": "generated-edge-simstep-67a10ecd-755e-434f-a6cc-2ddff5b8e5d2-7476e32e-da6c-4342-8100-1b1b7e2e75bf",
+ "34563b08-0dc0-48b0-bd88-4831148c739a": "generated-edge-simstep-78a9e025-78d1-4fc5-8a4f-c69cc030a8af-34563b08-0dc0-48b0-bd88-4831148c739a"
+ }
+}
\ No newline at end of file