create-morax 1.0.14 → 1.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.github.md CHANGED
@@ -1,139 +1,139 @@
1
- <div align="center">
2
-
3
- <div style="display: flex; align-items: center; justify-content: center; gap: 18px; margin-bottom: 12px;">
4
- <img src="https://res.cloudinary.com/dnvl8mqba/image/upload/v1779642846/Morax/morax_yhqyn8.webp" alt="Morax Logo" width="70" style="border-radius: 12px;" />
5
- <h1 style="border-bottom: none; margin: 0; font-size: 2.8rem; font-weight: 900; letter-spacing: 3px; line-height: 1;">MORAX</h1>
6
- </div>
7
-
8
- ### _The Next-Generation `pnpm` Monorepo & Workspace Orchestrator_
9
-
10
- [![npm version](https://img.shields.io/npm/v/create-morax.svg?style=for-the-badge&color=8A2BE2)](https://www.npmjs.com/package/create-morax)
11
- [![TypeScript](https://img.shields.io/badge/TypeScript-5.8-blue.svg?style=for-the-badge&logo=typescript)](https://www.typescriptlang.org/)
12
- [![pnpm](https://img.shields.io/badge/pnpm-orange?style=for-the-badge&logo=pnpm)](https://pnpm.io/)
13
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=for-the-badge)](https://opensource.org/licenses/MIT)
14
-
15
- <p align="center">
16
- A highly polished, interactive CLI that bootstraps custom, modern, high-performance <b>pnpm workspaces</b> in seconds.
17
- </p>
18
-
19
- [Quick Start](#-quick-start) • [Features](#-features-matrix) • [Workflow](#-dynamic-workspace-orchestration) • [Contributing](#-contributing)
20
-
21
- ---
22
-
23
- </div>
24
-
25
- ## 🚀 Quick Start
26
-
27
- Initialize your new workspace instantly using:
28
-
29
- ```bash
30
- npm create morax@latest
31
- ```
32
-
33
- Or using `pnpm`:
34
-
35
- ```bash
36
- pnpm create morax
37
- ```
38
-
39
- Or using `bun`:
40
-
41
- ```bash
42
- bun create morax
43
- ```
44
-
45
- ---
46
-
47
- ## ⚡ Dynamic Workspace Orchestration
48
-
49
- Morax acts as a smart orchestrator. Instead of copy-pasting outdated boilerplate code, it executes official framework CLIs and programmatically connects them under the hood:
50
-
51
- ```mermaid
52
- graph TD
53
- A[npm create morax@latest] --> B[Interactive Configuration Prompt]
54
- B -->|Setup Root| C[Create pnpm-workspace.yaml & turbo.json]
55
-
56
- C --> D[Scaffold Applications]
57
- D --> D1[Next.js App: npx create-next-app]
58
- D --> D2[Express API: TypeScript Backend]
59
-
60
- C --> E[Scaffold Shared Libraries]
61
- E --> E1[packages/ui: shadcn init]
62
- E --> E2[packages/db: prisma/drizzle init]
63
- E --> E3[packages/configs: tsconfig & eslint]
64
-
65
- D1 & D2 & E1 & E2 & E3 --> F[Link Workspace Packages]
66
- F --> G[Inject workspace:* references into Package Manifests]
67
- G --> H[Run pnpm install at Workspace Root]
68
- H --> I[Ready to Code!]
69
-
70
- style A fill:#8A2BE2,stroke:#fff,stroke-width:2px,color:#fff
71
- style B fill:#1f1f1f,stroke:#8A2BE2,stroke-width:1px,color:#fff
72
- style C fill:#1f1f1f,stroke:#8A2BE2,stroke-width:1px,color:#fff
73
- style D fill:#007acc,stroke:#fff,stroke-width:1px,color:#fff
74
- style E fill:#e25c00,stroke:#fff,stroke-width:1px,color:#fff
75
- style F fill:#2ea44f,stroke:#fff,stroke-width:2px,color:#fff
76
- style I fill:#2ea44f,stroke:#fff,stroke-width:2px,color:#fff
77
- ```
78
-
79
- ---
80
-
81
- ### Interactive Prompts
82
-
83
- Morax guides you step-by-step to customize your developer experience:
84
-
85
- ```ansi
86
- ? What is the name of your workspace? › my-morax-monorepo
87
- ? Which applications would you like to scaffold? ›
88
- 🎯 [x] Next.js Web App
89
- 🔌 [x] Express.js API
90
- ? Which packages would you like to configure? ›
91
- 🎨 [x] Shared UI Library (Tailwind + Shadcn)
92
- 🗃️ [x] Shared Database Client (Prisma + PostgreSQL)
93
- ⚙️ [x] Shared Linting & TypeScript Configurations
94
- ```
95
-
96
- ### Launch Development Server
97
-
98
- Once setup is complete, navigate into your directory and launch the unified development server:
99
-
100
- ```bash
101
- cd my-morax-monorepo
102
- pnpm dev
103
- ```
104
-
105
- ---
106
-
107
- ## ✨ Features Matrix
108
-
109
- ### 🛠️ Workspace & Orchestration
110
-
111
- - **create pnpm workspace monorepo with ease**
112
- - **Zero-Config Workspaces:** Complete setup of `pnpm-workspace.yaml` and unified root lockfiles.
113
- - **Turborepo Pipeline:** Lightning-fast, cached builds and concurrent tasks (`dev`, `build`, `lint`).
114
- - **Automated Symlinking:** Direct injection of `"@workspace/ui": "workspace:*"` cross-package references.
115
- - **Always Up-to-Date:** Pulls from the latest official framework generators dynamically.
116
-
117
- ---
118
-
119
- ## 🤝 Contributing
120
-
121
- We welcome contributions to make Morax even better!
122
-
123
- 1. **Fork** the repository
124
- 2. **Create** your feature branch (`git checkout -b feature/AmazingFeature`)
125
- 3. **Commit** your changes (`git commit -m 'Add some AmazingFeature'`)
126
- 4. **Push** to the branch (`git push origin feature/AmazingFeature`)
127
- 5. **Open** a Pull Request
128
-
129
- ---
130
-
131
- ## 📝 License
132
-
133
- Distributed under the MIT License. See [LICENSE](file:///c:/Users/runak/Coding/Development/Morax/LICENSE) for details.
134
-
135
- ---
136
-
137
- <div align="center">
138
- <sub>Made with 💜 by <a href="https://github.com/AshutoshDM1">AshutoshDM1</a> & <a href="https://github.com/elitedv">EliteDV Team</a></sub>
139
- </div>
1
+ <div align="center">
2
+
3
+ <div style="display: flex; align-items: center; justify-content: center; gap: 18px; margin-bottom: 12px;">
4
+ <img src="https://res.cloudinary.com/dnvl8mqba/image/upload/v1779642846/Morax/morax_yhqyn8.webp" alt="Morax Logo" width="70" style="border-radius: 12px;" />
5
+ <h1 style="border-bottom: none; margin: 0; font-size: 2.8rem; font-weight: 900; letter-spacing: 3px; line-height: 1;">MORAX</h1>
6
+ </div>
7
+
8
+ ### _The Next-Generation `pnpm` Monorepo & Workspace Orchestrator_
9
+
10
+ [![npm version](https://img.shields.io/npm/v/create-morax.svg?style=for-the-badge&color=8A2BE2)](https://www.npmjs.com/package/create-morax)
11
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.8-blue.svg?style=for-the-badge&logo=typescript)](https://www.typescriptlang.org/)
12
+ [![pnpm](https://img.shields.io/badge/pnpm-orange?style=for-the-badge&logo=pnpm)](https://pnpm.io/)
13
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=for-the-badge)](https://opensource.org/licenses/MIT)
14
+
15
+ <p align="center">
16
+ A highly polished, interactive CLI that bootstraps custom, modern, high-performance <b>pnpm workspaces</b> in seconds.
17
+ </p>
18
+
19
+ [Quick Start](#-quick-start) • [Features](#-features-matrix) • [Workflow](#-dynamic-workspace-orchestration) • [Contributing](#-contributing)
20
+
21
+ ---
22
+
23
+ </div>
24
+
25
+ ## 🚀 Quick Start
26
+
27
+ Initialize your new workspace instantly using:
28
+
29
+ ```bash
30
+ npm create morax@latest
31
+ ```
32
+
33
+ Or using `pnpm`:
34
+
35
+ ```bash
36
+ pnpm create morax
37
+ ```
38
+
39
+ Or using `bun`:
40
+
41
+ ```bash
42
+ bun create morax
43
+ ```
44
+
45
+ ---
46
+
47
+ ## ⚡ Dynamic Workspace Orchestration
48
+
49
+ Morax acts as a smart orchestrator. Instead of copy-pasting outdated boilerplate code, it executes official framework CLIs and programmatically connects them under the hood:
50
+
51
+ ```mermaid
52
+ graph TD
53
+ A[npm create morax@latest] --> B[Interactive Configuration Prompt]
54
+ B -->|Setup Root| C[Create pnpm-workspace.yaml & turbo.json]
55
+
56
+ C --> D[Scaffold Applications]
57
+ D --> D1[Next.js App: npx create-next-app]
58
+ D --> D2[Express API: TypeScript Backend]
59
+
60
+ C --> E[Scaffold Shared Libraries]
61
+ E --> E1[packages/ui: shadcn init]
62
+ E --> E2[packages/db: prisma/drizzle init]
63
+ E --> E3[packages/configs: tsconfig & eslint]
64
+
65
+ D1 & D2 & E1 & E2 & E3 --> F[Link Workspace Packages]
66
+ F --> G[Inject workspace:* references into Package Manifests]
67
+ G --> H[Run pnpm install at Workspace Root]
68
+ H --> I[Ready to Code!]
69
+
70
+ style A fill:#8A2BE2,stroke:#fff,stroke-width:2px,color:#fff
71
+ style B fill:#1f1f1f,stroke:#8A2BE2,stroke-width:1px,color:#fff
72
+ style C fill:#1f1f1f,stroke:#8A2BE2,stroke-width:1px,color:#fff
73
+ style D fill:#007acc,stroke:#fff,stroke-width:1px,color:#fff
74
+ style E fill:#e25c00,stroke:#fff,stroke-width:1px,color:#fff
75
+ style F fill:#2ea44f,stroke:#fff,stroke-width:2px,color:#fff
76
+ style I fill:#2ea44f,stroke:#fff,stroke-width:2px,color:#fff
77
+ ```
78
+
79
+ ---
80
+
81
+ ### Interactive Prompts
82
+
83
+ Morax guides you step-by-step to customize your developer experience:
84
+
85
+ ```ansi
86
+ ? What is the name of your workspace? › my-morax-monorepo
87
+ ? Which applications would you like to scaffold? ›
88
+ 🎯 [x] Next.js Web App
89
+ 🔌 [x] Express.js API
90
+ ? Which packages would you like to configure? ›
91
+ 🎨 [x] Shared UI Library (Tailwind + Shadcn)
92
+ 🗃️ [x] Shared Database Client (Prisma + PostgreSQL)
93
+ ⚙️ [x] Shared Linting & TypeScript Configurations
94
+ ```
95
+
96
+ ### Launch Development Server
97
+
98
+ Once setup is complete, navigate into your directory and launch the unified development server:
99
+
100
+ ```bash
101
+ cd my-morax-monorepo
102
+ pnpm dev
103
+ ```
104
+
105
+ ---
106
+
107
+ ## ✨ Features Matrix
108
+
109
+ ### 🛠️ Workspace & Orchestration
110
+
111
+ - **create pnpm workspace monorepo with ease**
112
+ - **Zero-Config Workspaces:** Complete setup of `pnpm-workspace.yaml` and unified root lockfiles.
113
+ - **Turborepo Pipeline:** Lightning-fast, cached builds and concurrent tasks (`dev`, `build`, `lint`).
114
+ - **Automated Symlinking:** Direct injection of `"@workspace/ui": "workspace:*"` cross-package references.
115
+ - **Always Up-to-Date:** Pulls from the latest official framework generators dynamically.
116
+
117
+ ---
118
+
119
+ ## 🤝 Contributing
120
+
121
+ We welcome contributions to make Morax even better!
122
+
123
+ 1. **Fork** the repository
124
+ 2. **Create** your feature branch (`git checkout -b feature/AmazingFeature`)
125
+ 3. **Commit** your changes (`git commit -m 'Add some AmazingFeature'`)
126
+ 4. **Push** to the branch (`git push origin feature/AmazingFeature`)
127
+ 5. **Open** a Pull Request
128
+
129
+ ---
130
+
131
+ ## 📝 License
132
+
133
+ Distributed under the MIT License. See [LICENSE](file:///c:/Users/runak/Coding/Development/Morax/LICENSE) for details.
134
+
135
+ ---
136
+
137
+ <div align="center">
138
+ <sub>Made with 💜 by <a href="https://github.com/AshutoshDM1">AshutoshDM1</a> & <a href="https://github.com/elitedv">EliteDV Team</a></sub>
139
+ </div>
package/dist/index.js CHANGED
@@ -1381,8 +1381,8 @@ async function askServerorFrontendInclue() {
1381
1381
 
1382
1382
  // src/index.ts
1383
1383
  async function main() {
1384
- const isReactOnly = process.argv.includes("--react") || process.argv.includes("-r");
1385
- const isNextOnly = process.argv.includes("--nextjs") || process.argv.includes("--next") || process.argv.includes("-n");
1384
+ const isReactOnly = process.argv.includes("--react") || process.argv.includes("-r") || process.env.npm_config_react === "true" || process.env.npm_config_r === "true";
1385
+ const isNextOnly = process.argv.includes("--nextjs") || process.argv.includes("--next") || process.argv.includes("-n") || process.env.npm_config_nextjs === "true" || process.env.npm_config_next === "true" || process.env.npm_config_n === "true";
1386
1386
  await runWorkspaceScaffolder({ react: isReactOnly, next: isNextOnly });
1387
1387
  }
1388
1388
  main().catch((err) => {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/core/runner.ts","../src/core/startcli.ts","../src/core/workspaceName.ts","../src/utils/isCancel.ts","../src/tasks/directories.ts","../src/tasks/workspace.ts","../src/utils/exec.ts","../src/core/react-runner.ts","../src/tasks/react.ts","../src/tasks/git.ts","../src/tasks/addreadme.ts","../src/core/endcli.ts","../src/core/next-runner.ts","../src/tasks/nextjs.ts","../src/tasks/shadcn.ts","../src/tasks/prettier.ts","../src/tasks/eslint.ts","../src/tasks/typescript.ts","../src/tasks/server.ts","../src/tasks/husky.ts","../src/core/web.ts"],"sourcesContent":["import pc from 'picocolors';\nimport { runWorkspaceScaffolder } from './core/runner.js';\n\nasync function main() {\n const isReactOnly =\n process.argv.includes('--react') || process.argv.includes('-r');\n const isNextOnly =\n process.argv.includes('--nextjs') ||\n process.argv.includes('--next') ||\n process.argv.includes('-n');\n await runWorkspaceScaffolder({ react: isReactOnly, next: isNextOnly });\n}\n\nmain().catch((err) => {\n console.error(pc.red('Fatal Error during execution:'), err);\n process.exit(1);\n});\n","import path from 'path';\nimport { spinner, multiselect } from '@clack/prompts';\nimport pc from 'picocolors';\n\nimport { startCli } from './startcli.js';\nimport { promptWorkspaceName } from './workspaceName.js';\nimport { makeDirectories } from '../tasks/directories.js';\nimport { runReactScaffolder } from './react-runner.js';\nimport { runNextScaffolder } from './next-runner.js';\nimport { runPrettierSetup } from '../tasks/prettier.js';\nimport { runEslintSetup } from '../tasks/eslint.js';\nimport { runTypescriptSetup } from '../tasks/typescript.js';\nimport { runServerSetup } from '../tasks/server.js';\nimport { runGitSetup } from '../tasks/git.js';\nimport { runHuskySetup } from '../tasks/husky.js';\nimport { endCli } from './endcli.js';\nimport { runCommand } from '../utils/exec.js';\nimport { setupReadme } from '../tasks/addreadme.js';\nimport addNextjs from './web.js';\nimport handleCancel from '../utils/isCancel.js';\n\nexport async function runWorkspaceScaffolder(\n options: { react?: boolean; next?: boolean } = {},\n) {\n // 1. Greet and display premium logo\n startCli();\n\n const isMonorepo = !options.react && !options.next;\n\n // 2. Prompt for Name (Optional, defaults to morax-workspace or my-app)\n const name = await promptWorkspaceName(isMonorepo);\n const projectPath = path.join(process.cwd(), name);\n\n if (options.react) {\n await runReactScaffolder(name, projectPath);\n return;\n }\n\n if (options.next) {\n await runNextScaffolder(name, projectPath);\n return;\n }\n\n // 3. Prompt and execute directories and workspace config generation\n await makeDirectories(name, projectPath);\n\n // Add the root README silently immediately after directory creation\n await setupReadme(projectPath, name);\n\n // 4. Prompt and execute Git initialization\n const gitInitialized = await runGitSetup(projectPath);\n\n // Ask which tools and features to include upfront\n const selectedApps = await askServerorFrontendInclue();\n const selectedTools = await askWhichToolToInclude(\n selectedApps.includes('server'),\n );\n\n // 5. Execute Prettier setup if selected\n if (selectedTools.includes('prettier')) {\n await runPrettierSetup(projectPath);\n }\n\n // 6. Execute Husky setup if selected and git is initialized\n if (selectedTools.includes('husky')) {\n await runHuskySetup(projectPath, gitInitialized);\n }\n\n // 7. Execute ESLint setup if selected\n if (selectedTools.includes('eslint')) {\n await runEslintSetup(projectPath);\n }\n\n // 8. Execute TypeScript setup if selected\n if (selectedTools.includes('typescript')) {\n await runTypescriptSetup(projectPath);\n }\n\n // 9. Execute Express Backend setup if selected\n if (selectedApps.includes('server')) {\n await runServerSetup(projectPath);\n }\n\n // 10. Execute Next.js/Vite Frontend setup if selected\n if (selectedApps.includes('web')) {\n await addNextjs(projectPath);\n }\n\n // 11. Run final pnpm install to resolve all workspace configurations and symlinks\n const s = spinner();\n console.log('\\n');\n s.start('Running final workspace package installation...');\n try {\n await runCommand('pnpm install', { cwd: projectPath, silent: true });\n s.stop(\n pc.green(\n '✔ Success: Workspace dependencies and symlinks configured successfully',\n ),\n );\n } catch (error: any) {\n s.stop(pc.red('✖ Warning: Final workspace installation failed'));\n console.error(pc.red(`\\nError details: ${error.message || error}`));\n }\n console.log('\\n');\n\n // 13. Complete and show beautiful finish screen\n endCli(name, projectPath);\n}\n\nasync function askWhichToolToInclude(hasServer: boolean) {\n const options = [\n {\n value: 'prettier',\n label: 'Prettier',\n hint: 'Code formatter rules & auto-formatting script',\n },\n {\n value: 'husky',\n label: 'Husky',\n hint: 'Git pre-commit hooks setup (requires Git)',\n },\n ];\n\n if (!hasServer) {\n options.splice(\n 1,\n 0,\n {\n value: 'eslint',\n label: 'ESLint',\n hint: 'Modern Flat Config linter configurations',\n },\n {\n value: 'typescript',\n label: 'TypeScript',\n hint: 'Extendable shared TypeScript configurations',\n },\n );\n }\n\n const tools = await multiselect({\n message: hasServer\n ? 'ESLint & TypeScript are required for the Express backend. Select additional configurations/tools:'\n : 'Which configurations/linter tools would you like to set up?',\n options,\n required: false,\n });\n\n handleCancel(tools);\n\n const selectedTools = tools as string[];\n if (hasServer) {\n if (!selectedTools.includes('eslint')) selectedTools.push('eslint');\n if (!selectedTools.includes('typescript')) selectedTools.push('typescript');\n }\n\n return selectedTools;\n}\n\nasync function askServerorFrontendInclue() {\n const apps = await multiselect({\n message: 'Which backend/frontend applications would you like to set up?',\n options: [\n {\n value: 'web',\n label: 'Frontend Web App',\n hint: 'Scaffold Next.js or React (Vite) frontend in apps/web',\n },\n {\n value: 'server',\n label: 'Backend Server',\n hint: 'Scaffold Express backend in apps/server',\n },\n ],\n required: false,\n });\n\n handleCancel(apps);\n return apps as string[];\n}\n","import gradient from 'gradient-string';\nimport pc from 'picocolors';\nimport { intro } from '@clack/prompts';\nimport boxen from 'boxen';\n\nconst asciiArt = [\n '███╗ ███╗ ██████╗ ██████╗ █████╗ ██╗ ██╗',\n '████╗ ████║ ██╔═══██╗ ██╔══██╗ ██╔══██╗ ╚██╗██╔╝',\n '██╔████╔██║ ██║ ██║ ██████╔╝ ███████║ ╚███╔╝ ',\n '██║╚██╔╝██║ ██║ ██║ ██╔══██╗ ██╔══██║ ██╔██╗ ',\n '██║ ╚═╝ ██║ ╚██████╔╝ ██║ ██║ ██║ ██║ ██╔╝ ██╗',\n '╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝',\n].join('\\n');\n\nexport function startCli() {\n console.clear();\n\n // Premium fiery orange-to-yellow brand gradient\n const moraxGradient = gradient(['#FF3E00', '#FF8C00', '#FFAE19']);\n\n console.log('\\n');\n console.log(moraxGradient(asciiArt));\n console.log('\\n');\n\n intro(pc.yellow('🌌 Welcome to Morax — The Next-Gen Workspace Scaffolder'));\n\n console.log(\n boxen(\n `⚡ ${pc.bold('Morax')} automates the setup of modern ${pc.cyan('pnpm workspaces')}, linking internal shared configurations, UI packages, and framework apps concurrently.`,\n {\n padding: 1,\n margin: { top: 0, bottom: 1, left: 1, right: 1 },\n borderStyle: 'round',\n borderColor: 'yellow',\n },\n ),\n );\n}\n","import { text } from '@clack/prompts';\nimport handleCancel from '../utils/isCancel.js';\n\nexport async function promptWorkspaceName(isMonorepo = true): Promise<string> {\n const nameInput = await text({\n message: isMonorepo\n ? 'What is the name of your new monorepo workspace?'\n : 'What is the name of your new project?',\n placeholder: isMonorepo ? 'morax-workspace' : 'my-app',\n validate(value) {\n if (value && value.includes(' '))\n return isMonorepo\n ? 'Workspace name cannot contain spaces!'\n : 'Project name cannot contain spaces!';\n },\n });\n\n handleCancel(nameInput);\n\n // Fallback to defaults if left blank\n return (\n String(nameInput).trim() || (isMonorepo ? 'morax-workspace' : 'my-app')\n );\n}\n","import { isCancel, cancel } from '@clack/prompts';\nimport pc from 'picocolors';\n\nexport default function handleCancel(input: any) {\n if (isCancel(input)) {\n cancel(pc.red('✖ Morax cancelled.'));\n process.exit(0);\n }\n}\n","import { spinner } from '@clack/prompts';\nimport fsPromises from 'fs/promises';\nimport path from 'path';\nimport pc from 'picocolors';\nimport { generateWorkspaceConfig } from './workspace.js';\n\nexport async function createDirectories(\n directories: ('apps' | 'packages')[],\n projectPath: string,\n) {\n for (const dir of directories) {\n const dirPath = path.join(projectPath, dir);\n await fsPromises.mkdir(dirPath, { recursive: true });\n await fsPromises.writeFile(\n path.join(dirPath, '.gitkeep'),\n `# Placeholder to ensure git tracks the empty ${dir}/ folder\\n`,\n 'utf8',\n );\n }\n}\n\nexport async function makeDirectories(name: string, projectPath: string) {\n const directories: ('apps' | 'packages')[] = ['apps', 'packages'];\n\n const s = spinner();\n console.log('\\n');\n s.start('Generating workspace configs...');\n try {\n await generateWorkspaceConfig(name, directories, projectPath);\n await createDirectories(directories, projectPath);\n s.stop(pc.green('✔ Success: Generated Workspace Root & Folder Structures'));\n } catch (error: any) {\n s.stop(pc.red('✖ Failed: Workspace generation failed'));\n console.error(pc.red(`\\nError details: ${error.message || error}`));\n process.exit(1);\n }\n console.log('\\n');\n\n return directories;\n}\n","import fsPromises from 'fs/promises';\nimport path from 'path';\nimport { runCommand } from '../utils/exec.js';\n\nexport async function generateWorkspaceConfig(\n name: string,\n directories: ('apps' | 'packages')[],\n projectPath: string,\n) {\n // 1. Create target folder if it doesn't exist\n await fsPromises.mkdir(projectPath, { recursive: true });\n\n // 2. Generate pnpm-workspace.yaml based on user's selective input\n const workspaceYamlContent = [\n 'packages:',\n ...directories.map((dir) => ` - '${dir}/*'`),\n '',\n ].join('\\n');\n\n await fsPromises.writeFile(\n path.join(projectPath, 'pnpm-workspace.yaml'),\n workspaceYamlContent,\n 'utf8',\n );\n\n // 3. Generate Root package.json using pnpm init\n await runCommand('pnpm init', { cwd: projectPath, silent: true });\n\n // 4. Read, parse and customize the package.json\n const packageJsonPath = path.join(projectPath, 'package.json');\n const packageJsonRaw = await fsPromises.readFile(packageJsonPath, 'utf8');\n const pkg = JSON.parse(packageJsonRaw);\n\n pkg.name = name;\n pkg.description = 'High-performance monorepo workspace generated by Morax';\n pkg.private = true;\n pkg.packageManager = 'pnpm@9.15.4';\n pkg.workspaces = directories.map((dir) => `${dir}/*`);\n pkg.scripts = {\n dev: 'pnpm --filter morax-web dev',\n };\n\n // Remove entry points since workspace root is private and has no main entry\n delete pkg.main;\n\n await fsPromises.writeFile(\n packageJsonPath,\n JSON.stringify(pkg, null, 2),\n 'utf8',\n );\n}\n","import { exec } from 'child_process';\nimport { promisify } from 'util';\nimport pc from 'picocolors';\n\nconst execAsync = promisify(exec);\n\nexport interface RunCommandOptions {\n cwd?: string;\n silent?: boolean;\n}\n\n/**\n * Reusable helper to execute commands and print/return their outputs\n */\nexport async function runCommand(\n command: string,\n options: RunCommandOptions = {},\n) {\n options.silent = true;\n\n if (!options.silent) {\n console.log(pc.cyan(`> ${command}`));\n }\n\n try {\n const { stdout, stderr } = await execAsync(command, {\n cwd: options.cwd,\n env: { ...process.env, NODE_NO_WARNINGS: '1' },\n });\n\n if (!options.silent) {\n if (stdout && stdout.trim()) {\n console.log(stdout.trim());\n }\n if (stderr && stderr.trim()) {\n console.log(pc.yellow(stderr.trim()));\n }\n }\n\n return { stdout, stderr };\n } catch (error: any) {\n if (!options.silent) {\n if (error.stdout && error.stdout.trim()) {\n console.log(error.stdout.trim());\n }\n if (error.stderr && error.stderr.trim()) {\n console.error(pc.red(error.stderr.trim()));\n }\n }\n throw error;\n }\n}\n","import path from 'path';\nimport { spinner } from '@clack/prompts';\nimport pc from 'picocolors';\n\nimport { setupReact } from '../tasks/react.js';\nimport { runGitSetup } from '../tasks/git.js';\nimport { setupReadme } from '../tasks/addreadme.js';\nimport { endCli } from './endcli.js';\nimport { runCommand } from '../utils/exec.js';\n\nexport async function runReactScaffolder(name: string, projectPath: string) {\n // 1. Setup React directly at the root (non-monorepo)\n const finalProjectPath = await setupReact(projectPath, false);\n\n // 2. Add the root README inside the created project folder\n await setupReadme(finalProjectPath, path.basename(finalProjectPath));\n\n // 3. Prompt and execute Git initialization inside the created project folder\n await runGitSetup(finalProjectPath);\n\n // 4. Run final pnpm install to ensure all dependencies are installed\n const installSpinner = spinner();\n console.log('\\n');\n installSpinner.start('Running final package installation...');\n try {\n await runCommand('pnpm install', { cwd: finalProjectPath, silent: true });\n installSpinner.stop(\n pc.green('✔ Success: Dependencies configured successfully'),\n );\n } catch (error: any) {\n installSpinner.stop(pc.red('✖ Warning: Final package installation failed'));\n console.error(pc.red(`\\nError details: ${error.message || error}`));\n }\n console.log('\\n');\n\n // 5. Complete and show beautiful finish screen\n endCli(path.basename(finalProjectPath), finalProjectPath);\n}\n","import pc from 'picocolors';\nimport fsPromises from 'fs/promises';\nimport path from 'path';\nimport { spawn } from 'child_process';\nimport { confirm, spinner, text } from '@clack/prompts';\nimport handleCancel from '../utils/isCancel.js';\nimport { runCommand } from '../utils/exec.js';\n\nfunction runInteractiveCommand(\n command: string,\n args: string[],\n cwd: string,\n): Promise<void> {\n return new Promise((resolve, reject) => {\n const fullCommand =\n args.length > 0 ? `${command} ${args.join(' ')}` : command;\n const child = spawn(fullCommand, [], {\n cwd,\n stdio: 'inherit',\n shell: true,\n env: { ...process.env, NODE_NO_WARNINGS: '1' },\n });\n\n child.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(\n new Error(\n `Command \"${command} ${args.join(' ')}\" exited with code ${code}`,\n ),\n );\n }\n });\n\n child.on('error', (err) => {\n reject(err);\n });\n });\n}\n\nexport async function setupReact(projectPath: string, isMonorepo = true) {\n const appsDir = isMonorepo\n ? path.join(projectPath, 'apps')\n : path.dirname(projectPath);\n\n // 1. Print important warnings to prevent blocking\n console.log(pc.magentaBright('\\n🔷 IMPORTANT INSTRUCTIONS:'));\n console.log(\n pc.magentaBright(\n 'During the Vite interactive configuration prompts, please select:',\n ),\n );\n console.log(\n pc.magentaBright(\n ` 1. Install & Start: Choose ${pc.bold('No')} when asked \"Install with npm/pnpm and start now?\"`,\n ),\n );\n console.log(\n pc.magentaBright(\n 'This allows Morax CLI to continue automatically configuring your workspace (ESLint, Prettier, Tailwind, packages, etc.)!',\n ),\n );\n\n // 2. Run pnpm create vite@latest interactively!\n console.log(\n pc.cyan('\\nStarting interactive Vite React application setup...'),\n );\n\n // Get list of directories in appsDir before running Vite to auto-detect the chosen project name\n let beforeDirs: string[] = [];\n try {\n beforeDirs = await fsPromises.readdir(appsDir);\n } catch {}\n\n try {\n await runInteractiveCommand('pnpm', ['create', 'vite@latest'], appsDir);\n\n // Get list of directories in appsDir after running Vite\n let afterDirs: string[] = [];\n try {\n afterDirs = await fsPromises.readdir(appsDir);\n } catch {}\n\n // Find the newly created folder\n const newDirs = afterDirs.filter((d) => !beforeDirs.includes(d));\n let createdDirName = 'web'; // fallback\n if (newDirs.length > 0) {\n createdDirName = newDirs[0];\n }\n const webDir = path.join(appsDir, createdDirName);\n\n // Verify directory exists\n try {\n await fsPromises.access(webDir);\n } catch {\n throw new Error(\n `Vite React application directory \"apps/${createdDirName}\" was not found. Please ensure you complete the Vite installation.`,\n );\n }\n\n // Always configure Path Aliases & @types/node right away so import aliases are ready\n const aliasSpinner = spinner();\n aliasSpinner.start('Configuring import aliases and Node types...');\n try {\n // Inject @types/node into package.json devDependencies\n const pkgPath = path.join(webDir, 'package.json');\n try {\n const pkgRaw = await fsPromises.readFile(pkgPath, 'utf8');\n const pkg = JSON.parse(pkgRaw);\n pkg.devDependencies = pkg.devDependencies || {};\n pkg.devDependencies['@types/node'] = '^20.11.0';\n await fsPromises.writeFile(\n pkgPath,\n JSON.stringify(pkg, null, 2),\n 'utf8',\n );\n } catch {}\n\n // tsconfig.json / tsconfig.app.json\n const tsconfigPaths = [\n path.join(webDir, 'tsconfig.json'),\n path.join(webDir, 'tsconfig.app.json'),\n ];\n for (const tsPath of tsconfigPaths) {\n try {\n let content = await fsPromises.readFile(tsPath, 'utf8');\n if (content.includes('\"compilerOptions\"')) {\n if (!content.includes('\"paths\"')) {\n content = content.replace(\n /(\"compilerOptions\"\\s*:\\s*\\{)/,\n `$1\\n \"baseUrl\": \".\",\\n \"paths\": {\\n \"@/*\": [\"./src/*\"]\\n },`,\n );\n await fsPromises.writeFile(tsPath, content, 'utf8');\n }\n } else {\n content = content.replace(\n /^(\\s*\\{)/,\n `$1\\n \"compilerOptions\": {\\n \"baseUrl\": \".\",\\n \"paths\": {\\n \"@/*\": [\"./src/*\"]\\n }\\n },`,\n );\n await fsPromises.writeFile(tsPath, content, 'utf8');\n }\n } catch {}\n }\n\n // vite.config.ts\n const viteConfigPath = path.join(webDir, 'vite.config.ts');\n try {\n let content = await fsPromises.readFile(viteConfigPath, 'utf8');\n if (!content.includes(\"import path from 'path'\")) {\n content = \"import path from 'path';\\n\" + content;\n }\n if (!content.includes('resolve:')) {\n content = content.replace(\n /(plugins:\\s*\\[[^\\]]*\\]),?/,\n `$1,\\n resolve: {\\n alias: {\\n \"@\": path.resolve(__dirname, \"./src\"),\\n },\\n }`,\n );\n }\n await fsPromises.writeFile(viteConfigPath, content, 'utf8');\n } catch {}\n\n aliasSpinner.stop(\n pc.green('✔ Success: Import aliases and Node types configured'),\n );\n } catch (err: any) {\n aliasSpinner.stop(pc.red('✖ Failed: Import alias configuration failed'));\n }\n\n console.log(\n pc.green(\n isMonorepo\n ? `\\n✔ Success: Vite React frontend configured in apps/${createdDirName}\\n`\n : `\\n✔ Success: Vite React frontend configured at root\\n`,\n ),\n );\n\n // 3. Prompt for Tailwind CSS v4 and shadcn UI setup\n const setupTailwindPrompt = await confirm({\n message: 'Do you want to install and configure Tailwind CSS v4?',\n initialValue: true,\n });\n handleCancel(setupTailwindPrompt);\n\n const setupShadcnPrompt = await confirm({\n message: `Do you want to setup shadcn UI in your Vite React website (apps/${createdDirName})?`,\n initialValue: true,\n });\n handleCancel(setupShadcnPrompt);\n\n // Determine if Tailwind needs to be installed (shadcn UI requires Tailwind)\n const needsTailwind = setupTailwindPrompt || setupShadcnPrompt;\n\n if (needsTailwind) {\n const s = spinner();\n s.start(\n 'Installing Tailwind CSS v4, Vite integration, and Node types...',\n );\n try {\n // 4. Inject dependencies directly into package.json\n const pkgPath = path.join(webDir, 'package.json');\n try {\n const pkgRaw = await fsPromises.readFile(pkgPath, 'utf8');\n const pkg = JSON.parse(pkgRaw);\n pkg.dependencies = pkg.dependencies || {};\n pkg.devDependencies = pkg.devDependencies || {};\n\n pkg.dependencies['tailwindcss'] = '^4.0.0';\n pkg.devDependencies['@tailwindcss/vite'] = '^4.0.0';\n pkg.devDependencies['@types/node'] = '^20.11.0';\n\n await fsPromises.writeFile(\n pkgPath,\n JSON.stringify(pkg, null, 2),\n 'utf8',\n );\n } catch {}\n\n // Install packages via pnpm install\n await runCommand('pnpm install', { cwd: webDir, silent: true });\n\n s.message('Configuring Vite plugins and Tailwind CSS imports...');\n\n // 5. Configure the Vite plugin in vite.config.ts\n const viteConfigPath = path.join(webDir, 'vite.config.ts');\n try {\n let content = await fsPromises.readFile(viteConfigPath, 'utf8');\n if (!content.includes('@tailwindcss/vite')) {\n content =\n \"import tailwindcss from '@tailwindcss/vite';\\n\" + content;\n\n if (content.includes('plugins: [react()]')) {\n content = content.replace(\n 'plugins: [react()]',\n 'plugins: [react(), tailwindcss()]',\n );\n } else if (content.includes('plugins: [react(),]')) {\n content = content.replace(\n 'plugins: [react(),]',\n 'plugins: [react(), tailwindcss()]',\n );\n } else {\n // Use regex for multi-line or standard spacing\n content = content.replace(\n /(plugins:\\s*\\[\\s*react\\(\\),?\\s*)(\\])/g,\n '$1\\n tailwindcss(),\\n $2',\n );\n }\n await fsPromises.writeFile(viteConfigPath, content, 'utf8');\n }\n } catch {}\n\n // 6. Overwrite src/index.css to import Tailwind CSS v4\n const indexCssPath = path.join(webDir, 'src', 'index.css');\n try {\n await fsPromises.writeFile(\n indexCssPath,\n '@import \"tailwindcss\";\\n',\n 'utf8',\n );\n } catch {}\n\n s.stop(\n pc.green('✔ Success: Tailwind CSS v4 configured successfully\\n'),\n );\n } catch (err: any) {\n s.stop(pc.red('✖ Failed: Tailwind CSS v4 setup failed'));\n throw err;\n }\n }\n\n if (setupShadcnPrompt) {\n // 8. Prompt for preset and initialize shadcn UI\n const hasPreset = await confirm({\n message: 'Do you have a custom shadcn UI preset code?',\n initialValue: false,\n });\n handleCancel(hasPreset);\n\n let presetCode = '';\n if (hasPreset) {\n const enteredPreset = await text({\n message: 'Enter your custom shadcn UI preset code:',\n placeholder: 'e.g. 123456',\n validate: (val) => {\n if (!val || !val.trim()) return 'Preset code cannot be empty';\n return;\n },\n });\n handleCancel(enteredPreset);\n presetCode = (enteredPreset as string).trim();\n }\n\n const args = ['dlx', 'shadcn@latest', 'init'];\n if (presetCode) {\n args.push('--preset', presetCode);\n }\n args.push('--template', 'vite');\n\n console.log(\n pc.cyan('\\nStarting interactive shadcn UI initialization...'),\n );\n await runInteractiveCommand('pnpm', args, webDir);\n console.log(\n pc.green(\n isMonorepo\n ? `\\n✔ Success: shadcn UI successfully initialized in apps/${createdDirName}\\n`\n : `\\n✔ Success: shadcn UI successfully initialized at root\\n`,\n ),\n );\n }\n return webDir;\n } catch (error: any) {\n console.error(pc.red(`\\n✖ Failed: Vite React frontend setup failed`));\n console.error(pc.red(`Error details: ${error.message || error}\\n`));\n process.exit(1);\n }\n}\n","import { confirm, spinner } from '@clack/prompts';\nimport pc from 'picocolors';\nimport handleCancel from '../utils/isCancel.js';\nimport fsPromises from 'fs/promises';\nimport path from 'path';\nimport { runCommand } from '../utils/exec.js';\n\nexport async function promptGit() {\n return await confirm({\n message: 'Do you want to initialize a local Git repository?',\n initialValue: true,\n });\n}\n\nexport async function gitInit(projectPath: string) {\n // 1. Initialize empty git repository\n await runCommand('git init', { cwd: projectPath, silent: true });\n\n // 2. Create high-quality standard .gitignore\n const gitignore = [\n '# Dependency directories',\n 'node_modules/',\n 'jspm_packages/',\n 'web_modules/',\n '',\n '# Build and output outputs',\n 'dist/',\n 'build/',\n '.next/',\n 'out/',\n '.turbo/',\n '',\n '# Environments',\n '.env',\n '.env.local',\n '.env.development.local',\n '.env.test.local',\n '.env.production.local',\n '',\n '# Logs',\n 'npm-debug.log*',\n 'yarn-debug.log*',\n 'yarn-error.log*',\n 'pnpm-debug.log*',\n '*.log',\n '',\n '# OS Metadata',\n '.DS_Store',\n 'Thumbs.db',\n '',\n ].join('\\n');\n\n await fsPromises.writeFile(\n path.join(projectPath, '.gitignore'),\n gitignore,\n 'utf8',\n );\n}\n\nexport async function runGitSetup(projectPath: string): Promise<boolean> {\n const gitPrompt = await promptGit();\n\n handleCancel(gitPrompt);\n\n let gitInitialized = false;\n if (gitPrompt) {\n const s = spinner();\n console.log('\\n');\n s.start('Initializing Git repository...');\n try {\n await gitInit(projectPath);\n s.stop(pc.green('✔ Success: Git repository initialized'));\n gitInitialized = true;\n } catch (error: any) {\n s.stop(pc.red('✖ Failed: Git initialization failed'));\n console.error(pc.red(`\\nError details: ${error.message || error}`));\n process.exit(1);\n }\n console.log('\\n');\n }\n return gitInitialized;\n}\n","import fsPromises from 'fs/promises';\nimport path from 'path';\n\nexport async function setupReadme(projectPath: string, workspaceName: string) {\n const readmePath = path.join(projectPath, 'README.md');\n\n const readmeContent = [\n `# Morax `,\n '',\n 'Welcome to your next-generation, high-performance monorepo workspace generated by **Morax**.',\n '',\n '## Workspace Structure',\n '',\n '- **`apps/`** — Frontend applications, backend servers, and user-facing services.',\n '- **`packages/`** — Shared modules, TypeScript configurations, ESLint rule sets, and common utility libraries.',\n '',\n '## Key Commands',\n '',\n 'Run the following commands from the root directory of your workspace:',\n '',\n '### Development',\n 'Start all dev servers and hot-reloading configurations concurrently:',\n '```bash',\n 'pnpm dev',\n '```',\n '',\n '### Linting',\n 'Run static analysis across all workspaces using your shared ESLint rules:',\n '```bash',\n 'pnpm lint',\n '```',\n '',\n '### Formatting',\n 'Automatically format all codebase files using Prettier:',\n '```bash',\n 'pnpm format',\n '```',\n '',\n '---',\n '',\n '*Generated with love by [Morax Scaffolder CLI](https://github.com/Elitedv/morax).*',\n '',\n ].join('\\n');\n\n await fsPromises.writeFile(readmePath, readmeContent, 'utf8');\n}\n","import pc from 'picocolors';\nimport { outro } from '@clack/prompts';\n\nexport function endCli(name: string, projectPath: string) {\n // Complete and show beautiful finish screen\n outro(pc.yellow('Morax scaffolding completed successfully!'));\n\n console.log(\n `⚡ ${pc.bold('Workspace ready:')} ${pc.yellow(name)}\\n` +\n // `Location: ${pc.cyan(projectPath)}\\n\\n` +\n `${pc.bold('To start developing:')}\\n` +\n ` 1. ${pc.cyan(`cd ${name}`)}\\n` +\n ` 2. ${pc.cyan('pnpm dev')}`,\n );\n}\n","import path from 'path';\nimport { spinner } from '@clack/prompts';\nimport pc from 'picocolors';\n\nimport { setupNextjs } from '../tasks/nextjs.js';\nimport { runShadcnSetup } from '../tasks/shadcn.js';\nimport { runGitSetup } from '../tasks/git.js';\nimport { setupReadme } from '../tasks/addreadme.js';\nimport { endCli } from './endcli.js';\nimport { runCommand } from '../utils/exec.js';\n\nexport async function runNextScaffolder(name: string, projectPath: string) {\n // 1. Setup Next.js directly at the root (non-monorepo)\n const finalProjectPath = await setupNextjs(projectPath, false);\n\n // 2. Setup shadcn UI (non-monorepo)\n await runShadcnSetup(finalProjectPath, false);\n\n // 3. Add the root README inside the created project folder\n await setupReadme(finalProjectPath, path.basename(finalProjectPath));\n\n // 4. Prompt and execute Git initialization inside the created project folder\n await runGitSetup(finalProjectPath);\n\n // 5. Run final pnpm install to ensure all dependencies are installed\n const installSpinner = spinner();\n console.log('\\n');\n installSpinner.start('Running final package installation...');\n try {\n await runCommand('pnpm install', { cwd: finalProjectPath, silent: true });\n installSpinner.stop(\n pc.green('✔ Success: Dependencies configured successfully'),\n );\n } catch (error: any) {\n installSpinner.stop(pc.red('✖ Warning: Final package installation failed'));\n console.error(pc.red(`\\nError details: ${error.message || error}`));\n }\n console.log('\\n');\n\n // 6. Complete and show beautiful finish screen\n endCli(path.basename(finalProjectPath), finalProjectPath);\n}\n","import { confirm } from '@clack/prompts';\nimport pc from 'picocolors';\nimport handleCancel from '../utils/isCancel.js';\nimport fsPromises from 'fs/promises';\nimport path from 'path';\nimport { spawn } from 'child_process';\n\nexport async function promptNextjs() {\n return await confirm({\n message: 'Do you want to setup a Next.js frontend in apps/web?',\n initialValue: true,\n });\n}\n\nfunction runInteractiveCommand(\n command: string,\n args: string[],\n cwd: string,\n): Promise<void> {\n return new Promise((resolve, reject) => {\n const child = spawn(command, args, {\n cwd,\n stdio: 'inherit',\n shell: true,\n env: { ...process.env, NODE_NO_WARNINGS: '1' },\n });\n\n child.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(\n new Error(\n `Command \"${command} ${args.join(' ')}\" exited with code ${code}`,\n ),\n );\n }\n });\n\n child.on('error', (err) => {\n reject(err);\n });\n });\n}\n\nexport async function setupNextjs(projectPath: string, isMonorepo = true) {\n const appsDir = isMonorepo\n ? path.join(projectPath, 'apps')\n : path.dirname(projectPath);\n const targetName = isMonorepo ? 'web' : path.basename(projectPath);\n const webDir = path.join(appsDir, targetName);\n\n // 1. Delete the existing directory if it contains placeholder files (.gitkeep)\n try {\n await fsPromises.rm(webDir, { recursive: true, force: true });\n } catch {}\n\n // 2. Run npx create-next-app@latest interactively!\n console.log(pc.cyan('\\nStarting interactive Next.js application setup...'));\n await runInteractiveCommand(\n 'npx',\n ['create-next-app@latest', targetName],\n appsDir,\n );\n\n return webDir;\n}\n\nexport async function runNextjsSetup(projectPath: string) {\n // Ensure the apps folder option was generated/exists\n const appsDir = path.join(projectPath, 'apps');\n try {\n await fsPromises.access(appsDir);\n } catch {\n // If the apps folder was not scaffolded, we shouldn't attempt to setup Web there\n return;\n }\n\n const webPrompt = await promptNextjs();\n\n handleCancel(webPrompt);\n\n if (webPrompt) {\n try {\n await setupNextjs(projectPath);\n console.log(\n pc.green('\\n✔ Success: Next.js frontend configured in apps/web\\n'),\n );\n } catch (error: any) {\n console.error(pc.red(`\\n✖ Failed: Next.js frontend setup failed`));\n console.error(pc.red(`Error details: ${error.message || error}\\n`));\n process.exit(1);\n }\n }\n}\n","import { confirm } from '@clack/prompts';\nimport pc from 'picocolors';\nimport handleCancel from '../utils/isCancel.js';\nimport fsPromises from 'fs/promises';\nimport path from 'path';\nimport { spawn } from 'child_process';\n\nexport async function promptShadcn() {\n return await confirm({\n message:\n 'Do you want to setup shadcn UI in your Next.js website (apps/web)?',\n initialValue: true,\n });\n}\n\nfunction runInteractiveCommand(\n command: string,\n args: string[],\n cwd: string,\n): Promise<void> {\n return new Promise((resolve, reject) => {\n const child = spawn(command, args, {\n cwd,\n stdio: 'inherit',\n shell: true,\n env: { ...process.env, NODE_NO_WARNINGS: '1' },\n });\n\n child.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(\n new Error(\n `Command \"${command} ${args.join(' ')}\" exited with code ${code}`,\n ),\n );\n }\n });\n\n child.on('error', (err) => {\n reject(err);\n });\n });\n}\n\nexport async function setupShadcn(projectPath: string, isMonorepo = true) {\n const webDir = isMonorepo\n ? path.join(projectPath, 'apps', 'web')\n : projectPath;\n\n // Run pnpm dlx shadcn@latest init --template next interactively!\n console.log(pc.cyan('\\nStarting interactive shadcn UI initialization...'));\n await runInteractiveCommand(\n 'pnpm',\n ['dlx', 'shadcn@latest', 'init', '--template', 'next'],\n webDir,\n );\n}\n\nexport async function runShadcnSetup(projectPath: string, isMonorepo = true) {\n // Ensure the Next.js frontend actually exists\n const webDir = isMonorepo\n ? path.join(projectPath, 'apps', 'web')\n : projectPath;\n try {\n await fsPromises.access(webDir);\n } catch {\n // Next.js app was not generated, skip shadcn setup\n return;\n }\n\n const shadcnPrompt = await promptShadcn();\n\n handleCancel(shadcnPrompt);\n\n if (shadcnPrompt) {\n try {\n await setupShadcn(projectPath, isMonorepo);\n console.log(\n pc.green(\n isMonorepo\n ? '\\n✔ Success: shadcn UI successfully initialized in apps/web\\n'\n : '\\n✔ Success: shadcn UI successfully initialized at root\\n',\n ),\n );\n } catch (error: any) {\n console.error(pc.red(`\\n✖ Failed: shadcn UI setup failed`));\n console.error(pc.red(`Error details: ${error.message || error}\\n`));\n process.exit(1);\n }\n }\n}\n","import { confirm, spinner } from '@clack/prompts';\nimport pc from 'picocolors';\nimport handleCancel from '../utils/isCancel.js';\nimport fsPromises from 'fs/promises';\nimport path from 'path';\nimport { runCommand } from '../utils/exec.js';\n\nexport async function promptPrettier() {\n return await confirm({\n message: 'Do you want to setup Prettier code formatting?',\n initialValue: true,\n });\n}\n\nexport async function setupPrettier(projectPath: string) {\n // 1. Install Prettier dynamically with exact version at the workspace root\n await runCommand('pnpm add -D -E prettier -w', { cwd: projectPath });\n\n // 2. Create high-quality modern .prettierrc\n const prettierrc = {\n semi: true,\n singleQuote: true,\n tabWidth: 2,\n trailingComma: 'all',\n printWidth: 100,\n };\n\n await fsPromises.writeFile(\n path.join(projectPath, '.prettierrc'),\n JSON.stringify(prettierrc, null, 2),\n 'utf8',\n );\n\n // 3. Create comprehensive .prettierignore\n const prettierignore = [\n '# Dependencies',\n 'node_modules/',\n 'jspm_packages/',\n 'web_modules/',\n '',\n '# Build and outputs',\n 'dist/',\n 'build/',\n '.next/',\n 'out/',\n '.turbo/',\n '',\n '# Configuration locks',\n 'pnpm-lock.yaml',\n '',\n '# Environment files',\n '.env',\n '.env.*',\n '',\n ].join('\\n');\n\n await fsPromises.writeFile(\n path.join(projectPath, '.prettierignore'),\n prettierignore,\n 'utf8',\n );\n\n // 4. Inject format script to root package.json\n const rootPackagePath = path.join(projectPath, 'package.json');\n const rootPackageContent = await fsPromises.readFile(rootPackagePath, 'utf8');\n const pkg = JSON.parse(rootPackageContent);\n\n pkg.scripts = {\n ...(pkg.scripts || {}),\n format: 'prettier --write .',\n };\n\n await fsPromises.writeFile(\n rootPackagePath,\n JSON.stringify(pkg, null, 2),\n 'utf8',\n );\n\n // 5. Initial format execution to clean up generated files\n await runCommand('pnpm format', { cwd: projectPath });\n}\n\nexport async function runPrettierSetup(projectPath: string) {\n const prettierPrompt = await promptPrettier();\n\n handleCancel(prettierPrompt);\n\n if (prettierPrompt) {\n const s = spinner();\n console.log('\\n');\n s.start('Setting up Prettier auto-formatting...');\n try {\n await setupPrettier(projectPath);\n s.stop(pc.green('✔ Success: Prettier formatting configured'));\n } catch (error: any) {\n s.stop(pc.red('✖ Failed: Prettier setup failed'));\n console.error(pc.red(`\\nError details: ${error.message || error}`));\n process.exit(1);\n }\n console.log('\\n');\n }\n}\n","import { spinner } from '@clack/prompts';\nimport pc from 'picocolors';\nimport fsPromises from 'fs/promises';\nimport path from 'path';\nimport { runCommand } from '../utils/exec.js';\n\nexport async function setupEslint(projectPath: string) {\n const eslintDir = path.join(projectPath, 'packages', 'eslint');\n\n // 1. Create packages/eslint directory recursively\n await fsPromises.mkdir(eslintDir, { recursive: true });\n\n // 2. Initialize the package using pnpm init\n await runCommand('pnpm init', { cwd: eslintDir, silent: true });\n\n // 3. Customize the packages/eslint/package.json\n const eslintPackagePath = path.join(eslintDir, 'package.json');\n const eslintPackageRaw = await fsPromises.readFile(eslintPackagePath, 'utf8');\n const eslintPkg = JSON.parse(eslintPackageRaw);\n\n eslintPkg.name = '@config/eslint';\n eslintPkg.version = '1.0.0';\n eslintPkg.private = true;\n eslintPkg.type = 'module';\n eslintPkg.main = 'eslint.config.ts';\n eslintPkg.exports = {\n '.': './eslint.config.ts',\n };\n eslintPkg.scripts = {\n lint: 'eslint .',\n };\n\n // Remove defaults that are not needed\n delete eslintPkg.keywords;\n delete eslintPkg.author;\n delete eslintPkg.license;\n\n await fsPromises.writeFile(\n eslintPackagePath,\n JSON.stringify(eslintPkg, null, 2),\n 'utf8',\n );\n\n // 4. Run pnpm add -D dynamically to fetch and install only the latest packages\n await runCommand(\n 'pnpm add -D eslint @eslint/js @eslint/json globals typescript-eslint',\n { cwd: eslintDir },\n );\n\n // 5. Create Modern eslint.config.ts with Flat Config and @eslint/json support\n const eslintConfigContent = [\n 'import js from \"@eslint/js\";',\n 'import globals from \"globals\";',\n 'import tseslint from \"typescript-eslint\";',\n 'import eslintJson from \"@eslint/json\";',\n '',\n 'export default tseslint.config(',\n ' {',\n ' ignores: [\"**/dist/**\", \"**/node_modules/**\"],',\n ' },',\n ' js.configs.recommended,',\n ' ...tseslint.configs.recommended,',\n ' {',\n ' languageOptions: {',\n ' globals: {',\n ' ...globals.node,',\n ' },',\n ' },',\n ' rules: {',\n ' \"no-unused-vars\": \"off\",',\n ' \"@typescript-eslint/no-unused-vars\": [\"error\", { argsIgnorePattern: \"^_\" }],',\n ' },',\n ' },',\n ' {',\n ' files: [\"**/*.json\"],',\n ' language: \"json/json\",',\n ' ...eslintJson.configs.recommended,',\n ' }',\n ');',\n '',\n ].join('\\n');\n\n await fsPromises.writeFile(\n path.join(eslintDir, 'eslint.config.ts'),\n eslintConfigContent,\n 'utf8',\n );\n\n // 6. Inject lint script into root package.json\n const rootPackagePath = path.join(projectPath, 'package.json');\n const rootPackageContent = await fsPromises.readFile(rootPackagePath, 'utf8');\n const rootPkg = JSON.parse(rootPackageContent);\n\n rootPkg.scripts = {\n ...(rootPkg.scripts || {}),\n lint: 'pnpm --filter @config/eslint lint',\n };\n\n await fsPromises.writeFile(\n rootPackagePath,\n JSON.stringify(rootPkg, null, 2),\n 'utf8',\n );\n}\n\nexport async function runEslintSetup(projectPath: string) {\n // Ensure the packages folder option was generated/exists\n const packagesDir = path.join(projectPath, 'packages');\n try {\n await fsPromises.access(packagesDir);\n } catch {\n // If the packages folder was not scaffolded, we shouldn't attempt to setup ESLint there\n return;\n }\n\n const s = spinner();\n console.log('\\n');\n s.start('Setting up modular ESLint in packages/eslint...');\n try {\n await setupEslint(projectPath);\n s.stop(pc.green('✔ Success: Modular ESLint configured in packages/eslint'));\n } catch (error: any) {\n s.stop(pc.red('✖ Failed: ESLint setup failed'));\n console.error(pc.red(`\\nError details: ${error.message || error}`));\n process.exit(1);\n }\n console.log('\\n');\n}\n","import { spinner } from '@clack/prompts';\nimport pc from 'picocolors';\nimport fsPromises from 'fs/promises';\nimport path from 'path';\nimport { runCommand } from '../utils/exec.js';\n\nexport async function setupTypescript(projectPath: string) {\n const tsDir = path.join(projectPath, 'packages', 'typescript');\n\n // 1. Create packages/typescript directory recursively\n await fsPromises.mkdir(tsDir, { recursive: true });\n\n // 2. Initialize the package using pnpm init\n await runCommand('pnpm init', { cwd: tsDir, silent: true });\n\n // 3. Customize the packages/typescript/package.json\n const tsPackagePath = path.join(tsDir, 'package.json');\n const tsPackageRaw = await fsPromises.readFile(tsPackagePath, 'utf8');\n const tsPkg = JSON.parse(tsPackageRaw);\n\n tsPkg.name = '@config/typescript';\n tsPkg.version = '1.0.0';\n tsPkg.private = true;\n tsPkg.type = 'module';\n tsPkg.exports = {\n './tsconfig.json': './tsconfig.json',\n };\n\n // Remove defaults that are not needed\n delete tsPkg.keywords;\n delete tsPkg.author;\n delete tsPkg.license;\n delete tsPkg.main;\n delete tsPkg.scripts;\n\n await fsPromises.writeFile(\n tsPackagePath,\n JSON.stringify(tsPkg, null, 2),\n 'utf8',\n );\n\n // 4. Install typescript package dynamically as devDependency\n await runCommand(\n 'cd ../.. && pnpm add -D typescript -w && cd packages/typescript',\n { cwd: tsDir, silent: true },\n );\n\n // 5. Initialize tsconfig.json using npx tsc --init\n await runCommand('npx tsc --init', { cwd: tsDir });\n}\n\nexport async function runTypescriptSetup(projectPath: string) {\n // Ensure the packages folder option was generated/exists\n const packagesDir = path.join(projectPath, 'packages');\n try {\n await fsPromises.access(packagesDir);\n } catch {\n // If the packages folder was not scaffolded, we shouldn't attempt to setup TS config there\n return;\n }\n\n const s = spinner();\n console.log('\\n');\n s.start('Setting up modular TypeScript config in packages/typescript...');\n try {\n await setupTypescript(projectPath);\n s.stop(\n pc.green(\n '✔ Success: Modular TypeScript config configured in packages/typescript',\n ),\n );\n } catch (error: any) {\n s.stop(pc.red('✖ Failed: TypeScript config setup failed'));\n console.error(pc.red(`\\nError details: ${error.message || error}`));\n process.exit(1);\n }\n console.log('\\n');\n}\n","import { confirm, spinner } from '@clack/prompts';\nimport pc from 'picocolors';\nimport handleCancel from '../utils/isCancel.js';\nimport fsPromises from 'fs/promises';\nimport path from 'path';\nimport { runCommand } from '../utils/exec.js';\n\nexport async function promptServer() {\n return await confirm({\n message: 'Do you want to setup a Express backend in apps/server?',\n initialValue: true,\n });\n}\n\nexport async function setupServer(projectPath: string) {\n const serverDir = path.join(projectPath, 'apps', 'server');\n const srcDir = path.join(serverDir, 'src');\n\n // 1. Create directory structure apps/server/src recursively\n await fsPromises.mkdir(srcDir, { recursive: true });\n\n // 2. Initialize package.json using pnpm init\n await runCommand('pnpm init', { cwd: serverDir, silent: true });\n\n // 3. Customize apps/server/package.json\n const serverPackagePath = path.join(serverDir, 'package.json');\n const serverPackageRaw = await fsPromises.readFile(serverPackagePath, 'utf8');\n const serverPkg = JSON.parse(serverPackageRaw);\n\n // Check if modular ESLint package exists in workspace packages\n const eslintDir = path.join(projectPath, 'packages', 'eslint');\n let hasEslint = false;\n try {\n await fsPromises.access(eslintDir);\n hasEslint = true;\n } catch {}\n\n serverPkg.name = 'server';\n serverPkg.version = '1.0.0';\n serverPkg.private = true;\n serverPkg.type = 'module';\n serverPkg.main = 'dist/index.js';\n serverPkg.scripts = {\n dev: 'tsx watch src/index.ts',\n build: 'tsc',\n start: 'node dist/index.js',\n };\n serverPkg.devDependencies = {\n '@config/typescript': 'workspace:*',\n };\n\n if (hasEslint) {\n serverPkg.devDependencies['@config/eslint'] = 'workspace:*';\n serverPkg.scripts['lint'] = 'eslint .';\n }\n\n // Remove defaults that are not needed\n delete serverPkg.keywords;\n delete serverPkg.author;\n delete serverPkg.license;\n\n await fsPromises.writeFile(\n serverPackagePath,\n JSON.stringify(serverPkg, null, 2),\n 'utf8',\n );\n\n // 4. Create tsconfig.json extending the base shared config\n const tsconfigContent = {\n extends: '@config/typescript/tsconfig.json',\n compilerOptions: {\n rootDir: 'src',\n outDir: 'dist',\n },\n include: ['src/**/*'],\n };\n\n await fsPromises.writeFile(\n path.join(serverDir, 'tsconfig.json'),\n JSON.stringify(tsconfigContent, null, 2),\n 'utf8',\n );\n\n // If ESLint exists, write the server's eslint.config.ts extending the base config\n if (hasEslint) {\n const eslintConfigContent = [\n \"import baseConfig from '@config/eslint';\",\n '',\n 'export default [',\n ' ...baseConfig,',\n ' {',\n ' // Add server-specific overrides if necessary',\n ' },',\n '];',\n '',\n ].join('\\n');\n\n await fsPromises.writeFile(\n path.join(serverDir, 'eslint.config.ts'),\n eslintConfigContent,\n 'utf8',\n );\n }\n\n // 5. Install dependencies dynamically using pnpm add (fetches latest)\n await runCommand('pnpm add express cors', { cwd: serverDir, silent: false });\n await runCommand('pnpm add -D @types/express @types/cors tsx typescript', {\n cwd: serverDir,\n silent: false,\n });\n\n // 6. Create src/index.ts with premium starter code using CORS and Express\n const indexTsContent = [\n \"import express from 'express';\",\n \"import cors from 'cors';\",\n '',\n 'const app = express();',\n 'const port = process.env.PORT || 3001;',\n '',\n '// Enable CORS and parsing of JSON request bodies',\n 'app.use(cors());',\n 'app.use(express.json());',\n '',\n '// Root API health and welcome route',\n \"app.get('/api', (req, res) => {\",\n ' res.json({',\n \" message: 'Welcome to the Morax High-Performance Backend API!',\",\n ' timestamp: new Date().toISOString(),',\n \" status: 'healthy',\",\n ' });',\n '});',\n '',\n 'app.listen(port, () => {',\n ' console.log(`🚀 Server is running on http://localhost:${port}`);',\n '});',\n '',\n ].join('\\n');\n\n await fsPromises.writeFile(\n path.join(srcDir, 'index.ts'),\n indexTsContent,\n 'utf8',\n );\n}\n\nexport async function runServerSetup(projectPath: string) {\n // Ensure the apps folder option was generated/exists\n const appsDir = path.join(projectPath, 'apps');\n try {\n await fsPromises.access(appsDir);\n } catch {\n // If the apps folder was not scaffolded, we shouldn't attempt to setup Server there\n return;\n }\n\n const serverPrompt = await promptServer();\n\n handleCancel(serverPrompt);\n\n if (serverPrompt) {\n const s = spinner();\n console.log('\\n');\n s.start('Setting up modular Express backend in apps/server...');\n try {\n await setupServer(projectPath);\n s.stop(\n pc.green(\n '✔ Success: Modular Express backend configured in apps/server',\n ),\n );\n } catch (error: any) {\n s.stop(pc.red('✖ Failed: Express backend setup failed'));\n console.error(pc.red(`\\nError details: ${error.message || error}`));\n process.exit(1);\n }\n console.log('\\n');\n }\n}\n","import { confirm, spinner } from '@clack/prompts';\nimport pc from 'picocolors';\nimport handleCancel from '../utils/isCancel.js';\nimport fsPromises from 'fs/promises';\nimport path from 'path';\nimport { runCommand } from '../utils/exec.js';\n\nexport async function promptHusky() {\n return await confirm({\n message: 'Do you want to setup Husky pre-commit hooks?',\n initialValue: true,\n });\n}\n\nexport async function setupHusky(projectPath: string) {\n // 1. Install Husky dynamically with exact version at the workspace root\n await runCommand('pnpm add -D -E husky -w', { cwd: projectPath });\n\n // 2. Initialize Husky using its official init generator\n await runCommand('pnpm exec husky init', { cwd: projectPath });\n\n // 3. Update the auto-generated .husky/pre-commit file to run format and stage files\n const preCommitPath = path.join(projectPath, '.husky', 'pre-commit');\n let hookContent = '';\n try {\n hookContent = await fsPromises.readFile(preCommitPath, 'utf8');\n } catch {\n hookContent = 'pnpm test'; // Default fallback\n }\n\n // Replace default test commands with formatting checks\n hookContent = hookContent.replace('pnpm test', 'pnpm format');\n\n // Append staging of newly formatted files\n if (!hookContent.includes('git add .')) {\n hookContent = hookContent.trim() + '\\ngit add .\\n';\n }\n\n await fsPromises.writeFile(preCommitPath, hookContent, 'utf8');\n\n try {\n await fsPromises.chmod(preCommitPath, 0o755);\n } catch {}\n}\n\nexport async function runHuskySetup(\n projectPath: string,\n gitInitialized: boolean,\n) {\n if (!gitInitialized) return;\n\n const huskyPrompt = await promptHusky();\n\n handleCancel(huskyPrompt);\n\n if (huskyPrompt) {\n const s = spinner();\n console.log('\\n');\n s.start('Setting up Husky hooks...');\n try {\n await setupHusky(projectPath);\n s.stop(pc.green('✔ Success: Husky pre-commit hooks configured'));\n } catch (error: any) {\n s.stop(pc.red('✖ Failed: Husky setup failed'));\n console.error(pc.red(`\\nError details: ${error.message || error}`));\n process.exit(1);\n }\n console.log('\\n');\n }\n}\n","import { select } from '@clack/prompts';\nimport handleCancel from '../utils/isCancel.js';\nimport { runShadcnSetup } from '../tasks/shadcn.js';\nimport { setupNextjs } from '../tasks/nextjs.js';\nimport { setupReact } from '../tasks/react.js';\n\nexport default async function addweb(projectPath: string) {\n const framework = await select({\n message:\n 'Which frontend website setup would you like to include in apps/web?',\n options: [\n {\n value: 'nextjs',\n label: 'Next.js',\n hint: 'The React Framework for the Web',\n },\n {\n value: 'react',\n label: 'React (Vite)',\n hint: 'Vite React Starter Template',\n },\n {\n value: 'skip',\n label: 'Skip',\n hint: 'Skip setting up a frontend website',\n },\n ],\n initialValue: 'nextjs',\n });\n\n handleCancel(framework);\n\n if (framework === 'nextjs') {\n await setupNextjs(projectPath);\n // Prompt and execute shadcn UI setup in next.js app\n await runShadcnSetup(projectPath);\n } else if (framework === 'react') {\n await setupReact(projectPath);\n }\n}\n"],"mappings":"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","names":["pc","path","spinner","pc","pc","fsPromises","path","pc","pc","path","fsPromises","pc","path","spinner","pc","pc","fsPromises","path","spinner","text","path","pc","fsPromises","spinner","text","confirm","spinner","pc","fsPromises","path","confirm","fsPromises","path","spinner","pc","fsPromises","path","pc","path","spinner","pc","path","spinner","pc","confirm","pc","fsPromises","path","spawn","runInteractiveCommand","spawn","path","fsPromises","pc","confirm","pc","fsPromises","path","spawn","confirm","runInteractiveCommand","pc","path","spinner","pc","confirm","spinner","pc","fsPromises","path","confirm","fsPromises","path","spinner","pc","spinner","pc","fsPromises","path","path","fsPromises","spinner","pc","spinner","pc","fsPromises","path","path","fsPromises","spinner","pc","confirm","spinner","pc","fsPromises","path","confirm","path","fsPromises","spinner","pc","confirm","spinner","pc","fsPromises","path","confirm","path","fsPromises","spinner","pc","path","spinner","pc","pc"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/core/runner.ts","../src/core/startcli.ts","../src/core/workspaceName.ts","../src/utils/isCancel.ts","../src/tasks/directories.ts","../src/tasks/workspace.ts","../src/utils/exec.ts","../src/core/react-runner.ts","../src/tasks/react.ts","../src/tasks/git.ts","../src/tasks/addreadme.ts","../src/core/endcli.ts","../src/core/next-runner.ts","../src/tasks/nextjs.ts","../src/tasks/shadcn.ts","../src/tasks/prettier.ts","../src/tasks/eslint.ts","../src/tasks/typescript.ts","../src/tasks/server.ts","../src/tasks/husky.ts","../src/core/web.ts"],"sourcesContent":["import pc from 'picocolors';\nimport { runWorkspaceScaffolder } from './core/runner.js';\n\nasync function main() {\n const isReactOnly =\n process.argv.includes('--react') ||\n process.argv.includes('-r') ||\n process.env.npm_config_react === 'true' ||\n process.env.npm_config_r === 'true';\n const isNextOnly =\n process.argv.includes('--nextjs') ||\n process.argv.includes('--next') ||\n process.argv.includes('-n') ||\n process.env.npm_config_nextjs === 'true' ||\n process.env.npm_config_next === 'true' ||\n process.env.npm_config_n === 'true';\n await runWorkspaceScaffolder({ react: isReactOnly, next: isNextOnly });\n}\n\nmain().catch((err) => {\n console.error(pc.red('Fatal Error during execution:'), err);\n process.exit(1);\n});\n","import path from 'path';\nimport { spinner, multiselect } from '@clack/prompts';\nimport pc from 'picocolors';\n\nimport { startCli } from './startcli.js';\nimport { promptWorkspaceName } from './workspaceName.js';\nimport { makeDirectories } from '../tasks/directories.js';\nimport { runReactScaffolder } from './react-runner.js';\nimport { runNextScaffolder } from './next-runner.js';\nimport { runPrettierSetup } from '../tasks/prettier.js';\nimport { runEslintSetup } from '../tasks/eslint.js';\nimport { runTypescriptSetup } from '../tasks/typescript.js';\nimport { runServerSetup } from '../tasks/server.js';\nimport { runGitSetup } from '../tasks/git.js';\nimport { runHuskySetup } from '../tasks/husky.js';\nimport { endCli } from './endcli.js';\nimport { runCommand } from '../utils/exec.js';\nimport { setupReadme } from '../tasks/addreadme.js';\nimport addNextjs from './web.js';\nimport handleCancel from '../utils/isCancel.js';\n\nexport async function runWorkspaceScaffolder(\n options: { react?: boolean; next?: boolean } = {},\n) {\n // 1. Greet and display premium logo\n startCli();\n\n const isMonorepo = !options.react && !options.next;\n\n // 2. Prompt for Name (Optional, defaults to morax-workspace or my-app)\n const name = await promptWorkspaceName(isMonorepo);\n const projectPath = path.join(process.cwd(), name);\n\n if (options.react) {\n await runReactScaffolder(name, projectPath);\n return;\n }\n\n if (options.next) {\n await runNextScaffolder(name, projectPath);\n return;\n }\n\n // 3. Prompt and execute directories and workspace config generation\n await makeDirectories(name, projectPath);\n\n // Add the root README silently immediately after directory creation\n await setupReadme(projectPath, name);\n\n // 4. Prompt and execute Git initialization\n const gitInitialized = await runGitSetup(projectPath);\n\n // Ask which tools and features to include upfront\n const selectedApps = await askServerorFrontendInclue();\n const selectedTools = await askWhichToolToInclude(\n selectedApps.includes('server'),\n );\n\n // 5. Execute Prettier setup if selected\n if (selectedTools.includes('prettier')) {\n await runPrettierSetup(projectPath);\n }\n\n // 6. Execute Husky setup if selected and git is initialized\n if (selectedTools.includes('husky')) {\n await runHuskySetup(projectPath, gitInitialized);\n }\n\n // 7. Execute ESLint setup if selected\n if (selectedTools.includes('eslint')) {\n await runEslintSetup(projectPath);\n }\n\n // 8. Execute TypeScript setup if selected\n if (selectedTools.includes('typescript')) {\n await runTypescriptSetup(projectPath);\n }\n\n // 9. Execute Express Backend setup if selected\n if (selectedApps.includes('server')) {\n await runServerSetup(projectPath);\n }\n\n // 10. Execute Next.js/Vite Frontend setup if selected\n if (selectedApps.includes('web')) {\n await addNextjs(projectPath);\n }\n\n // 11. Run final pnpm install to resolve all workspace configurations and symlinks\n const s = spinner();\n console.log('\\n');\n s.start('Running final workspace package installation...');\n try {\n await runCommand('pnpm install', { cwd: projectPath, silent: true });\n s.stop(\n pc.green(\n '✔ Success: Workspace dependencies and symlinks configured successfully',\n ),\n );\n } catch (error: any) {\n s.stop(pc.red('✖ Warning: Final workspace installation failed'));\n console.error(pc.red(`\\nError details: ${error.message || error}`));\n }\n console.log('\\n');\n\n // 13. Complete and show beautiful finish screen\n endCli(name, projectPath);\n}\n\nasync function askWhichToolToInclude(hasServer: boolean) {\n const options = [\n {\n value: 'prettier',\n label: 'Prettier',\n hint: 'Code formatter rules & auto-formatting script',\n },\n {\n value: 'husky',\n label: 'Husky',\n hint: 'Git pre-commit hooks setup (requires Git)',\n },\n ];\n\n if (!hasServer) {\n options.splice(\n 1,\n 0,\n {\n value: 'eslint',\n label: 'ESLint',\n hint: 'Modern Flat Config linter configurations',\n },\n {\n value: 'typescript',\n label: 'TypeScript',\n hint: 'Extendable shared TypeScript configurations',\n },\n );\n }\n\n const tools = await multiselect({\n message: hasServer\n ? 'ESLint & TypeScript are required for the Express backend. Select additional configurations/tools:'\n : 'Which configurations/linter tools would you like to set up?',\n options,\n required: false,\n });\n\n handleCancel(tools);\n\n const selectedTools = tools as string[];\n if (hasServer) {\n if (!selectedTools.includes('eslint')) selectedTools.push('eslint');\n if (!selectedTools.includes('typescript')) selectedTools.push('typescript');\n }\n\n return selectedTools;\n}\n\nasync function askServerorFrontendInclue() {\n const apps = await multiselect({\n message: 'Which backend/frontend applications would you like to set up?',\n options: [\n {\n value: 'web',\n label: 'Frontend Web App',\n hint: 'Scaffold Next.js or React (Vite) frontend in apps/web',\n },\n {\n value: 'server',\n label: 'Backend Server',\n hint: 'Scaffold Express backend in apps/server',\n },\n ],\n required: false,\n });\n\n handleCancel(apps);\n return apps as string[];\n}\n","import gradient from 'gradient-string';\nimport pc from 'picocolors';\nimport { intro } from '@clack/prompts';\nimport boxen from 'boxen';\n\nconst asciiArt = [\n '███╗ ███╗ ██████╗ ██████╗ █████╗ ██╗ ██╗',\n '████╗ ████║ ██╔═══██╗ ██╔══██╗ ██╔══██╗ ╚██╗██╔╝',\n '██╔████╔██║ ██║ ██║ ██████╔╝ ███████║ ╚███╔╝ ',\n '██║╚██╔╝██║ ██║ ██║ ██╔══██╗ ██╔══██║ ██╔██╗ ',\n '██║ ╚═╝ ██║ ╚██████╔╝ ██║ ██║ ██║ ██║ ██╔╝ ██╗',\n '╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝',\n].join('\\n');\n\nexport function startCli() {\n console.clear();\n\n // Premium fiery orange-to-yellow brand gradient\n const moraxGradient = gradient(['#FF3E00', '#FF8C00', '#FFAE19']);\n\n console.log('\\n');\n console.log(moraxGradient(asciiArt));\n console.log('\\n');\n\n intro(pc.yellow('🌌 Welcome to Morax — The Next-Gen Workspace Scaffolder'));\n\n console.log(\n boxen(\n `⚡ ${pc.bold('Morax')} automates the setup of modern ${pc.cyan('pnpm workspaces')}, linking internal shared configurations, UI packages, and framework apps concurrently.`,\n {\n padding: 1,\n margin: { top: 0, bottom: 1, left: 1, right: 1 },\n borderStyle: 'round',\n borderColor: 'yellow',\n },\n ),\n );\n}\n","import { text } from '@clack/prompts';\nimport handleCancel from '../utils/isCancel.js';\n\nexport async function promptWorkspaceName(isMonorepo = true): Promise<string> {\n const nameInput = await text({\n message: isMonorepo\n ? 'What is the name of your new monorepo workspace?'\n : 'What is the name of your new project?',\n placeholder: isMonorepo ? 'morax-workspace' : 'my-app',\n validate(value) {\n if (value && value.includes(' '))\n return isMonorepo\n ? 'Workspace name cannot contain spaces!'\n : 'Project name cannot contain spaces!';\n },\n });\n\n handleCancel(nameInput);\n\n // Fallback to defaults if left blank\n return (\n String(nameInput).trim() || (isMonorepo ? 'morax-workspace' : 'my-app')\n );\n}\n","import { isCancel, cancel } from '@clack/prompts';\nimport pc from 'picocolors';\n\nexport default function handleCancel(input: any) {\n if (isCancel(input)) {\n cancel(pc.red('✖ Morax cancelled.'));\n process.exit(0);\n }\n}\n","import { spinner } from '@clack/prompts';\nimport fsPromises from 'fs/promises';\nimport path from 'path';\nimport pc from 'picocolors';\nimport { generateWorkspaceConfig } from './workspace.js';\n\nexport async function createDirectories(\n directories: ('apps' | 'packages')[],\n projectPath: string,\n) {\n for (const dir of directories) {\n const dirPath = path.join(projectPath, dir);\n await fsPromises.mkdir(dirPath, { recursive: true });\n await fsPromises.writeFile(\n path.join(dirPath, '.gitkeep'),\n `# Placeholder to ensure git tracks the empty ${dir}/ folder\\n`,\n 'utf8',\n );\n }\n}\n\nexport async function makeDirectories(name: string, projectPath: string) {\n const directories: ('apps' | 'packages')[] = ['apps', 'packages'];\n\n const s = spinner();\n console.log('\\n');\n s.start('Generating workspace configs...');\n try {\n await generateWorkspaceConfig(name, directories, projectPath);\n await createDirectories(directories, projectPath);\n s.stop(pc.green('✔ Success: Generated Workspace Root & Folder Structures'));\n } catch (error: any) {\n s.stop(pc.red('✖ Failed: Workspace generation failed'));\n console.error(pc.red(`\\nError details: ${error.message || error}`));\n process.exit(1);\n }\n console.log('\\n');\n\n return directories;\n}\n","import fsPromises from 'fs/promises';\nimport path from 'path';\nimport { runCommand } from '../utils/exec.js';\n\nexport async function generateWorkspaceConfig(\n name: string,\n directories: ('apps' | 'packages')[],\n projectPath: string,\n) {\n // 1. Create target folder if it doesn't exist\n await fsPromises.mkdir(projectPath, { recursive: true });\n\n // 2. Generate pnpm-workspace.yaml based on user's selective input\n const workspaceYamlContent = [\n 'packages:',\n ...directories.map((dir) => ` - '${dir}/*'`),\n '',\n ].join('\\n');\n\n await fsPromises.writeFile(\n path.join(projectPath, 'pnpm-workspace.yaml'),\n workspaceYamlContent,\n 'utf8',\n );\n\n // 3. Generate Root package.json using pnpm init\n await runCommand('pnpm init', { cwd: projectPath, silent: true });\n\n // 4. Read, parse and customize the package.json\n const packageJsonPath = path.join(projectPath, 'package.json');\n const packageJsonRaw = await fsPromises.readFile(packageJsonPath, 'utf8');\n const pkg = JSON.parse(packageJsonRaw);\n\n pkg.name = name;\n pkg.description = 'High-performance monorepo workspace generated by Morax';\n pkg.private = true;\n pkg.packageManager = 'pnpm@9.15.4';\n pkg.workspaces = directories.map((dir) => `${dir}/*`);\n pkg.scripts = {\n dev: 'pnpm --filter morax-web dev',\n };\n\n // Remove entry points since workspace root is private and has no main entry\n delete pkg.main;\n\n await fsPromises.writeFile(\n packageJsonPath,\n JSON.stringify(pkg, null, 2),\n 'utf8',\n );\n}\n","import { exec } from 'child_process';\nimport { promisify } from 'util';\nimport pc from 'picocolors';\n\nconst execAsync = promisify(exec);\n\nexport interface RunCommandOptions {\n cwd?: string;\n silent?: boolean;\n}\n\n/**\n * Reusable helper to execute commands and print/return their outputs\n */\nexport async function runCommand(\n command: string,\n options: RunCommandOptions = {},\n) {\n options.silent = true;\n\n if (!options.silent) {\n console.log(pc.cyan(`> ${command}`));\n }\n\n try {\n const { stdout, stderr } = await execAsync(command, {\n cwd: options.cwd,\n env: { ...process.env, NODE_NO_WARNINGS: '1' },\n });\n\n if (!options.silent) {\n if (stdout && stdout.trim()) {\n console.log(stdout.trim());\n }\n if (stderr && stderr.trim()) {\n console.log(pc.yellow(stderr.trim()));\n }\n }\n\n return { stdout, stderr };\n } catch (error: any) {\n if (!options.silent) {\n if (error.stdout && error.stdout.trim()) {\n console.log(error.stdout.trim());\n }\n if (error.stderr && error.stderr.trim()) {\n console.error(pc.red(error.stderr.trim()));\n }\n }\n throw error;\n }\n}\n","import path from 'path';\nimport { spinner } from '@clack/prompts';\nimport pc from 'picocolors';\n\nimport { setupReact } from '../tasks/react.js';\nimport { runGitSetup } from '../tasks/git.js';\nimport { setupReadme } from '../tasks/addreadme.js';\nimport { endCli } from './endcli.js';\nimport { runCommand } from '../utils/exec.js';\n\nexport async function runReactScaffolder(name: string, projectPath: string) {\n // 1. Setup React directly at the root (non-monorepo)\n const finalProjectPath = await setupReact(projectPath, false);\n\n // 2. Add the root README inside the created project folder\n await setupReadme(finalProjectPath, path.basename(finalProjectPath));\n\n // 3. Prompt and execute Git initialization inside the created project folder\n await runGitSetup(finalProjectPath);\n\n // 4. Run final pnpm install to ensure all dependencies are installed\n const installSpinner = spinner();\n console.log('\\n');\n installSpinner.start('Running final package installation...');\n try {\n await runCommand('pnpm install', { cwd: finalProjectPath, silent: true });\n installSpinner.stop(\n pc.green('✔ Success: Dependencies configured successfully'),\n );\n } catch (error: any) {\n installSpinner.stop(pc.red('✖ Warning: Final package installation failed'));\n console.error(pc.red(`\\nError details: ${error.message || error}`));\n }\n console.log('\\n');\n\n // 5. Complete and show beautiful finish screen\n endCli(path.basename(finalProjectPath), finalProjectPath);\n}\n","import pc from 'picocolors';\nimport fsPromises from 'fs/promises';\nimport path from 'path';\nimport { spawn } from 'child_process';\nimport { confirm, spinner, text } from '@clack/prompts';\nimport handleCancel from '../utils/isCancel.js';\nimport { runCommand } from '../utils/exec.js';\n\nfunction runInteractiveCommand(\n command: string,\n args: string[],\n cwd: string,\n): Promise<void> {\n return new Promise((resolve, reject) => {\n const fullCommand =\n args.length > 0 ? `${command} ${args.join(' ')}` : command;\n const child = spawn(fullCommand, [], {\n cwd,\n stdio: 'inherit',\n shell: true,\n env: { ...process.env, NODE_NO_WARNINGS: '1' },\n });\n\n child.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(\n new Error(\n `Command \"${command} ${args.join(' ')}\" exited with code ${code}`,\n ),\n );\n }\n });\n\n child.on('error', (err) => {\n reject(err);\n });\n });\n}\n\nexport async function setupReact(projectPath: string, isMonorepo = true) {\n const appsDir = isMonorepo\n ? path.join(projectPath, 'apps')\n : path.dirname(projectPath);\n\n // 1. Print important warnings to prevent blocking\n console.log(pc.magentaBright('\\n🔷 IMPORTANT INSTRUCTIONS:'));\n console.log(\n pc.magentaBright(\n 'During the Vite interactive configuration prompts, please select:',\n ),\n );\n console.log(\n pc.magentaBright(\n ` 1. Install & Start: Choose ${pc.bold('No')} when asked \"Install with npm/pnpm and start now?\"`,\n ),\n );\n console.log(\n pc.magentaBright(\n 'This allows Morax CLI to continue automatically configuring your workspace (ESLint, Prettier, Tailwind, packages, etc.)!',\n ),\n );\n\n // 2. Run pnpm create vite@latest interactively!\n console.log(\n pc.cyan('\\nStarting interactive Vite React application setup...'),\n );\n\n // Get list of directories in appsDir before running Vite to auto-detect the chosen project name\n let beforeDirs: string[] = [];\n try {\n beforeDirs = await fsPromises.readdir(appsDir);\n } catch {}\n\n try {\n await runInteractiveCommand('pnpm', ['create', 'vite@latest'], appsDir);\n\n // Get list of directories in appsDir after running Vite\n let afterDirs: string[] = [];\n try {\n afterDirs = await fsPromises.readdir(appsDir);\n } catch {}\n\n // Find the newly created folder\n const newDirs = afterDirs.filter((d) => !beforeDirs.includes(d));\n let createdDirName = 'web'; // fallback\n if (newDirs.length > 0) {\n createdDirName = newDirs[0];\n }\n const webDir = path.join(appsDir, createdDirName);\n\n // Verify directory exists\n try {\n await fsPromises.access(webDir);\n } catch {\n throw new Error(\n `Vite React application directory \"apps/${createdDirName}\" was not found. Please ensure you complete the Vite installation.`,\n );\n }\n\n // Always configure Path Aliases & @types/node right away so import aliases are ready\n const aliasSpinner = spinner();\n aliasSpinner.start('Configuring import aliases and Node types...');\n try {\n // Inject @types/node into package.json devDependencies\n const pkgPath = path.join(webDir, 'package.json');\n try {\n const pkgRaw = await fsPromises.readFile(pkgPath, 'utf8');\n const pkg = JSON.parse(pkgRaw);\n pkg.devDependencies = pkg.devDependencies || {};\n pkg.devDependencies['@types/node'] = '^20.11.0';\n await fsPromises.writeFile(\n pkgPath,\n JSON.stringify(pkg, null, 2),\n 'utf8',\n );\n } catch {}\n\n // tsconfig.json / tsconfig.app.json\n const tsconfigPaths = [\n path.join(webDir, 'tsconfig.json'),\n path.join(webDir, 'tsconfig.app.json'),\n ];\n for (const tsPath of tsconfigPaths) {\n try {\n let content = await fsPromises.readFile(tsPath, 'utf8');\n if (content.includes('\"compilerOptions\"')) {\n if (!content.includes('\"paths\"')) {\n content = content.replace(\n /(\"compilerOptions\"\\s*:\\s*\\{)/,\n `$1\\n \"baseUrl\": \".\",\\n \"paths\": {\\n \"@/*\": [\"./src/*\"]\\n },`,\n );\n await fsPromises.writeFile(tsPath, content, 'utf8');\n }\n } else {\n content = content.replace(\n /^(\\s*\\{)/,\n `$1\\n \"compilerOptions\": {\\n \"baseUrl\": \".\",\\n \"paths\": {\\n \"@/*\": [\"./src/*\"]\\n }\\n },`,\n );\n await fsPromises.writeFile(tsPath, content, 'utf8');\n }\n } catch {}\n }\n\n // vite.config.ts\n const viteConfigPath = path.join(webDir, 'vite.config.ts');\n try {\n let content = await fsPromises.readFile(viteConfigPath, 'utf8');\n if (!content.includes(\"import path from 'path'\")) {\n content = \"import path from 'path';\\n\" + content;\n }\n if (!content.includes('resolve:')) {\n content = content.replace(\n /(plugins:\\s*\\[[^\\]]*\\]),?/,\n `$1,\\n resolve: {\\n alias: {\\n \"@\": path.resolve(__dirname, \"./src\"),\\n },\\n }`,\n );\n }\n await fsPromises.writeFile(viteConfigPath, content, 'utf8');\n } catch {}\n\n aliasSpinner.stop(\n pc.green('✔ Success: Import aliases and Node types configured'),\n );\n } catch (err: any) {\n aliasSpinner.stop(pc.red('✖ Failed: Import alias configuration failed'));\n }\n\n console.log(\n pc.green(\n isMonorepo\n ? `\\n✔ Success: Vite React frontend configured in apps/${createdDirName}\\n`\n : `\\n✔ Success: Vite React frontend configured at root\\n`,\n ),\n );\n\n // 3. Prompt for Tailwind CSS v4 and shadcn UI setup\n const setupTailwindPrompt = await confirm({\n message: 'Do you want to install and configure Tailwind CSS v4?',\n initialValue: true,\n });\n handleCancel(setupTailwindPrompt);\n\n const setupShadcnPrompt = await confirm({\n message: `Do you want to setup shadcn UI in your Vite React website (apps/${createdDirName})?`,\n initialValue: true,\n });\n handleCancel(setupShadcnPrompt);\n\n // Determine if Tailwind needs to be installed (shadcn UI requires Tailwind)\n const needsTailwind = setupTailwindPrompt || setupShadcnPrompt;\n\n if (needsTailwind) {\n const s = spinner();\n s.start(\n 'Installing Tailwind CSS v4, Vite integration, and Node types...',\n );\n try {\n // 4. Inject dependencies directly into package.json\n const pkgPath = path.join(webDir, 'package.json');\n try {\n const pkgRaw = await fsPromises.readFile(pkgPath, 'utf8');\n const pkg = JSON.parse(pkgRaw);\n pkg.dependencies = pkg.dependencies || {};\n pkg.devDependencies = pkg.devDependencies || {};\n\n pkg.dependencies['tailwindcss'] = '^4.0.0';\n pkg.devDependencies['@tailwindcss/vite'] = '^4.0.0';\n pkg.devDependencies['@types/node'] = '^20.11.0';\n\n await fsPromises.writeFile(\n pkgPath,\n JSON.stringify(pkg, null, 2),\n 'utf8',\n );\n } catch {}\n\n // Install packages via pnpm install\n await runCommand('pnpm install', { cwd: webDir, silent: true });\n\n s.message('Configuring Vite plugins and Tailwind CSS imports...');\n\n // 5. Configure the Vite plugin in vite.config.ts\n const viteConfigPath = path.join(webDir, 'vite.config.ts');\n try {\n let content = await fsPromises.readFile(viteConfigPath, 'utf8');\n if (!content.includes('@tailwindcss/vite')) {\n content =\n \"import tailwindcss from '@tailwindcss/vite';\\n\" + content;\n\n if (content.includes('plugins: [react()]')) {\n content = content.replace(\n 'plugins: [react()]',\n 'plugins: [react(), tailwindcss()]',\n );\n } else if (content.includes('plugins: [react(),]')) {\n content = content.replace(\n 'plugins: [react(),]',\n 'plugins: [react(), tailwindcss()]',\n );\n } else {\n // Use regex for multi-line or standard spacing\n content = content.replace(\n /(plugins:\\s*\\[\\s*react\\(\\),?\\s*)(\\])/g,\n '$1\\n tailwindcss(),\\n $2',\n );\n }\n await fsPromises.writeFile(viteConfigPath, content, 'utf8');\n }\n } catch {}\n\n // 6. Overwrite src/index.css to import Tailwind CSS v4\n const indexCssPath = path.join(webDir, 'src', 'index.css');\n try {\n await fsPromises.writeFile(\n indexCssPath,\n '@import \"tailwindcss\";\\n',\n 'utf8',\n );\n } catch {}\n\n s.stop(\n pc.green('✔ Success: Tailwind CSS v4 configured successfully\\n'),\n );\n } catch (err: any) {\n s.stop(pc.red('✖ Failed: Tailwind CSS v4 setup failed'));\n throw err;\n }\n }\n\n if (setupShadcnPrompt) {\n // 8. Prompt for preset and initialize shadcn UI\n const hasPreset = await confirm({\n message: 'Do you have a custom shadcn UI preset code?',\n initialValue: false,\n });\n handleCancel(hasPreset);\n\n let presetCode = '';\n if (hasPreset) {\n const enteredPreset = await text({\n message: 'Enter your custom shadcn UI preset code:',\n placeholder: 'e.g. 123456',\n validate: (val) => {\n if (!val || !val.trim()) return 'Preset code cannot be empty';\n return;\n },\n });\n handleCancel(enteredPreset);\n presetCode = (enteredPreset as string).trim();\n }\n\n const args = ['dlx', 'shadcn@latest', 'init'];\n if (presetCode) {\n args.push('--preset', presetCode);\n }\n args.push('--template', 'vite');\n\n console.log(\n pc.cyan('\\nStarting interactive shadcn UI initialization...'),\n );\n await runInteractiveCommand('pnpm', args, webDir);\n console.log(\n pc.green(\n isMonorepo\n ? `\\n✔ Success: shadcn UI successfully initialized in apps/${createdDirName}\\n`\n : `\\n✔ Success: shadcn UI successfully initialized at root\\n`,\n ),\n );\n }\n return webDir;\n } catch (error: any) {\n console.error(pc.red(`\\n✖ Failed: Vite React frontend setup failed`));\n console.error(pc.red(`Error details: ${error.message || error}\\n`));\n process.exit(1);\n }\n}\n","import { confirm, spinner } from '@clack/prompts';\nimport pc from 'picocolors';\nimport handleCancel from '../utils/isCancel.js';\nimport fsPromises from 'fs/promises';\nimport path from 'path';\nimport { runCommand } from '../utils/exec.js';\n\nexport async function promptGit() {\n return await confirm({\n message: 'Do you want to initialize a local Git repository?',\n initialValue: true,\n });\n}\n\nexport async function gitInit(projectPath: string) {\n // 1. Initialize empty git repository\n await runCommand('git init', { cwd: projectPath, silent: true });\n\n // 2. Create high-quality standard .gitignore\n const gitignore = [\n '# Dependency directories',\n 'node_modules/',\n 'jspm_packages/',\n 'web_modules/',\n '',\n '# Build and output outputs',\n 'dist/',\n 'build/',\n '.next/',\n 'out/',\n '.turbo/',\n '',\n '# Environments',\n '.env',\n '.env.local',\n '.env.development.local',\n '.env.test.local',\n '.env.production.local',\n '',\n '# Logs',\n 'npm-debug.log*',\n 'yarn-debug.log*',\n 'yarn-error.log*',\n 'pnpm-debug.log*',\n '*.log',\n '',\n '# OS Metadata',\n '.DS_Store',\n 'Thumbs.db',\n '',\n ].join('\\n');\n\n await fsPromises.writeFile(\n path.join(projectPath, '.gitignore'),\n gitignore,\n 'utf8',\n );\n}\n\nexport async function runGitSetup(projectPath: string): Promise<boolean> {\n const gitPrompt = await promptGit();\n\n handleCancel(gitPrompt);\n\n let gitInitialized = false;\n if (gitPrompt) {\n const s = spinner();\n console.log('\\n');\n s.start('Initializing Git repository...');\n try {\n await gitInit(projectPath);\n s.stop(pc.green('✔ Success: Git repository initialized'));\n gitInitialized = true;\n } catch (error: any) {\n s.stop(pc.red('✖ Failed: Git initialization failed'));\n console.error(pc.red(`\\nError details: ${error.message || error}`));\n process.exit(1);\n }\n console.log('\\n');\n }\n return gitInitialized;\n}\n","import fsPromises from 'fs/promises';\nimport path from 'path';\n\nexport async function setupReadme(projectPath: string, workspaceName: string) {\n const readmePath = path.join(projectPath, 'README.md');\n\n const readmeContent = [\n `# Morax `,\n '',\n 'Welcome to your next-generation, high-performance monorepo workspace generated by **Morax**.',\n '',\n '## Workspace Structure',\n '',\n '- **`apps/`** — Frontend applications, backend servers, and user-facing services.',\n '- **`packages/`** — Shared modules, TypeScript configurations, ESLint rule sets, and common utility libraries.',\n '',\n '## Key Commands',\n '',\n 'Run the following commands from the root directory of your workspace:',\n '',\n '### Development',\n 'Start all dev servers and hot-reloading configurations concurrently:',\n '```bash',\n 'pnpm dev',\n '```',\n '',\n '### Linting',\n 'Run static analysis across all workspaces using your shared ESLint rules:',\n '```bash',\n 'pnpm lint',\n '```',\n '',\n '### Formatting',\n 'Automatically format all codebase files using Prettier:',\n '```bash',\n 'pnpm format',\n '```',\n '',\n '---',\n '',\n '*Generated with love by [Morax Scaffolder CLI](https://github.com/Elitedv/morax).*',\n '',\n ].join('\\n');\n\n await fsPromises.writeFile(readmePath, readmeContent, 'utf8');\n}\n","import pc from 'picocolors';\nimport { outro } from '@clack/prompts';\n\nexport function endCli(name: string, projectPath: string) {\n // Complete and show beautiful finish screen\n outro(pc.yellow('Morax scaffolding completed successfully!'));\n\n console.log(\n `⚡ ${pc.bold('Workspace ready:')} ${pc.yellow(name)}\\n` +\n // `Location: ${pc.cyan(projectPath)}\\n\\n` +\n `${pc.bold('To start developing:')}\\n` +\n ` 1. ${pc.cyan(`cd ${name}`)}\\n` +\n ` 2. ${pc.cyan('pnpm dev')}`,\n );\n}\n","import path from 'path';\nimport { spinner } from '@clack/prompts';\nimport pc from 'picocolors';\n\nimport { setupNextjs } from '../tasks/nextjs.js';\nimport { runShadcnSetup } from '../tasks/shadcn.js';\nimport { runGitSetup } from '../tasks/git.js';\nimport { setupReadme } from '../tasks/addreadme.js';\nimport { endCli } from './endcli.js';\nimport { runCommand } from '../utils/exec.js';\n\nexport async function runNextScaffolder(name: string, projectPath: string) {\n // 1. Setup Next.js directly at the root (non-monorepo)\n const finalProjectPath = await setupNextjs(projectPath, false);\n\n // 2. Setup shadcn UI (non-monorepo)\n await runShadcnSetup(finalProjectPath, false);\n\n // 3. Add the root README inside the created project folder\n await setupReadme(finalProjectPath, path.basename(finalProjectPath));\n\n // 4. Prompt and execute Git initialization inside the created project folder\n await runGitSetup(finalProjectPath);\n\n // 5. Run final pnpm install to ensure all dependencies are installed\n const installSpinner = spinner();\n console.log('\\n');\n installSpinner.start('Running final package installation...');\n try {\n await runCommand('pnpm install', { cwd: finalProjectPath, silent: true });\n installSpinner.stop(\n pc.green('✔ Success: Dependencies configured successfully'),\n );\n } catch (error: any) {\n installSpinner.stop(pc.red('✖ Warning: Final package installation failed'));\n console.error(pc.red(`\\nError details: ${error.message || error}`));\n }\n console.log('\\n');\n\n // 6. Complete and show beautiful finish screen\n endCli(path.basename(finalProjectPath), finalProjectPath);\n}\n","import { confirm } from '@clack/prompts';\nimport pc from 'picocolors';\nimport handleCancel from '../utils/isCancel.js';\nimport fsPromises from 'fs/promises';\nimport path from 'path';\nimport { spawn } from 'child_process';\n\nexport async function promptNextjs() {\n return await confirm({\n message: 'Do you want to setup a Next.js frontend in apps/web?',\n initialValue: true,\n });\n}\n\nfunction runInteractiveCommand(\n command: string,\n args: string[],\n cwd: string,\n): Promise<void> {\n return new Promise((resolve, reject) => {\n const child = spawn(command, args, {\n cwd,\n stdio: 'inherit',\n shell: true,\n env: { ...process.env, NODE_NO_WARNINGS: '1' },\n });\n\n child.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(\n new Error(\n `Command \"${command} ${args.join(' ')}\" exited with code ${code}`,\n ),\n );\n }\n });\n\n child.on('error', (err) => {\n reject(err);\n });\n });\n}\n\nexport async function setupNextjs(projectPath: string, isMonorepo = true) {\n const appsDir = isMonorepo\n ? path.join(projectPath, 'apps')\n : path.dirname(projectPath);\n const targetName = isMonorepo ? 'web' : path.basename(projectPath);\n const webDir = path.join(appsDir, targetName);\n\n // 1. Delete the existing directory if it contains placeholder files (.gitkeep)\n try {\n await fsPromises.rm(webDir, { recursive: true, force: true });\n } catch {}\n\n // 2. Run npx create-next-app@latest interactively!\n console.log(pc.cyan('\\nStarting interactive Next.js application setup...'));\n await runInteractiveCommand(\n 'npx',\n ['create-next-app@latest', targetName],\n appsDir,\n );\n\n return webDir;\n}\n\nexport async function runNextjsSetup(projectPath: string) {\n // Ensure the apps folder option was generated/exists\n const appsDir = path.join(projectPath, 'apps');\n try {\n await fsPromises.access(appsDir);\n } catch {\n // If the apps folder was not scaffolded, we shouldn't attempt to setup Web there\n return;\n }\n\n const webPrompt = await promptNextjs();\n\n handleCancel(webPrompt);\n\n if (webPrompt) {\n try {\n await setupNextjs(projectPath);\n console.log(\n pc.green('\\n✔ Success: Next.js frontend configured in apps/web\\n'),\n );\n } catch (error: any) {\n console.error(pc.red(`\\n✖ Failed: Next.js frontend setup failed`));\n console.error(pc.red(`Error details: ${error.message || error}\\n`));\n process.exit(1);\n }\n }\n}\n","import { confirm } from '@clack/prompts';\nimport pc from 'picocolors';\nimport handleCancel from '../utils/isCancel.js';\nimport fsPromises from 'fs/promises';\nimport path from 'path';\nimport { spawn } from 'child_process';\n\nexport async function promptShadcn() {\n return await confirm({\n message:\n 'Do you want to setup shadcn UI in your Next.js website (apps/web)?',\n initialValue: true,\n });\n}\n\nfunction runInteractiveCommand(\n command: string,\n args: string[],\n cwd: string,\n): Promise<void> {\n return new Promise((resolve, reject) => {\n const child = spawn(command, args, {\n cwd,\n stdio: 'inherit',\n shell: true,\n env: { ...process.env, NODE_NO_WARNINGS: '1' },\n });\n\n child.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(\n new Error(\n `Command \"${command} ${args.join(' ')}\" exited with code ${code}`,\n ),\n );\n }\n });\n\n child.on('error', (err) => {\n reject(err);\n });\n });\n}\n\nexport async function setupShadcn(projectPath: string, isMonorepo = true) {\n const webDir = isMonorepo\n ? path.join(projectPath, 'apps', 'web')\n : projectPath;\n\n // Run pnpm dlx shadcn@latest init --template next interactively!\n console.log(pc.cyan('\\nStarting interactive shadcn UI initialization...'));\n await runInteractiveCommand(\n 'pnpm',\n ['dlx', 'shadcn@latest', 'init', '--template', 'next'],\n webDir,\n );\n}\n\nexport async function runShadcnSetup(projectPath: string, isMonorepo = true) {\n // Ensure the Next.js frontend actually exists\n const webDir = isMonorepo\n ? path.join(projectPath, 'apps', 'web')\n : projectPath;\n try {\n await fsPromises.access(webDir);\n } catch {\n // Next.js app was not generated, skip shadcn setup\n return;\n }\n\n const shadcnPrompt = await promptShadcn();\n\n handleCancel(shadcnPrompt);\n\n if (shadcnPrompt) {\n try {\n await setupShadcn(projectPath, isMonorepo);\n console.log(\n pc.green(\n isMonorepo\n ? '\\n✔ Success: shadcn UI successfully initialized in apps/web\\n'\n : '\\n✔ Success: shadcn UI successfully initialized at root\\n',\n ),\n );\n } catch (error: any) {\n console.error(pc.red(`\\n✖ Failed: shadcn UI setup failed`));\n console.error(pc.red(`Error details: ${error.message || error}\\n`));\n process.exit(1);\n }\n }\n}\n","import { confirm, spinner } from '@clack/prompts';\nimport pc from 'picocolors';\nimport handleCancel from '../utils/isCancel.js';\nimport fsPromises from 'fs/promises';\nimport path from 'path';\nimport { runCommand } from '../utils/exec.js';\n\nexport async function promptPrettier() {\n return await confirm({\n message: 'Do you want to setup Prettier code formatting?',\n initialValue: true,\n });\n}\n\nexport async function setupPrettier(projectPath: string) {\n // 1. Install Prettier dynamically with exact version at the workspace root\n await runCommand('pnpm add -D -E prettier -w', { cwd: projectPath });\n\n // 2. Create high-quality modern .prettierrc\n const prettierrc = {\n semi: true,\n singleQuote: true,\n tabWidth: 2,\n trailingComma: 'all',\n printWidth: 100,\n };\n\n await fsPromises.writeFile(\n path.join(projectPath, '.prettierrc'),\n JSON.stringify(prettierrc, null, 2),\n 'utf8',\n );\n\n // 3. Create comprehensive .prettierignore\n const prettierignore = [\n '# Dependencies',\n 'node_modules/',\n 'jspm_packages/',\n 'web_modules/',\n '',\n '# Build and outputs',\n 'dist/',\n 'build/',\n '.next/',\n 'out/',\n '.turbo/',\n '',\n '# Configuration locks',\n 'pnpm-lock.yaml',\n '',\n '# Environment files',\n '.env',\n '.env.*',\n '',\n ].join('\\n');\n\n await fsPromises.writeFile(\n path.join(projectPath, '.prettierignore'),\n prettierignore,\n 'utf8',\n );\n\n // 4. Inject format script to root package.json\n const rootPackagePath = path.join(projectPath, 'package.json');\n const rootPackageContent = await fsPromises.readFile(rootPackagePath, 'utf8');\n const pkg = JSON.parse(rootPackageContent);\n\n pkg.scripts = {\n ...(pkg.scripts || {}),\n format: 'prettier --write .',\n };\n\n await fsPromises.writeFile(\n rootPackagePath,\n JSON.stringify(pkg, null, 2),\n 'utf8',\n );\n\n // 5. Initial format execution to clean up generated files\n await runCommand('pnpm format', { cwd: projectPath });\n}\n\nexport async function runPrettierSetup(projectPath: string) {\n const prettierPrompt = await promptPrettier();\n\n handleCancel(prettierPrompt);\n\n if (prettierPrompt) {\n const s = spinner();\n console.log('\\n');\n s.start('Setting up Prettier auto-formatting...');\n try {\n await setupPrettier(projectPath);\n s.stop(pc.green('✔ Success: Prettier formatting configured'));\n } catch (error: any) {\n s.stop(pc.red('✖ Failed: Prettier setup failed'));\n console.error(pc.red(`\\nError details: ${error.message || error}`));\n process.exit(1);\n }\n console.log('\\n');\n }\n}\n","import { spinner } from '@clack/prompts';\nimport pc from 'picocolors';\nimport fsPromises from 'fs/promises';\nimport path from 'path';\nimport { runCommand } from '../utils/exec.js';\n\nexport async function setupEslint(projectPath: string) {\n const eslintDir = path.join(projectPath, 'packages', 'eslint');\n\n // 1. Create packages/eslint directory recursively\n await fsPromises.mkdir(eslintDir, { recursive: true });\n\n // 2. Initialize the package using pnpm init\n await runCommand('pnpm init', { cwd: eslintDir, silent: true });\n\n // 3. Customize the packages/eslint/package.json\n const eslintPackagePath = path.join(eslintDir, 'package.json');\n const eslintPackageRaw = await fsPromises.readFile(eslintPackagePath, 'utf8');\n const eslintPkg = JSON.parse(eslintPackageRaw);\n\n eslintPkg.name = '@config/eslint';\n eslintPkg.version = '1.0.0';\n eslintPkg.private = true;\n eslintPkg.type = 'module';\n eslintPkg.main = 'eslint.config.ts';\n eslintPkg.exports = {\n '.': './eslint.config.ts',\n };\n eslintPkg.scripts = {\n lint: 'eslint .',\n };\n\n // Remove defaults that are not needed\n delete eslintPkg.keywords;\n delete eslintPkg.author;\n delete eslintPkg.license;\n\n await fsPromises.writeFile(\n eslintPackagePath,\n JSON.stringify(eslintPkg, null, 2),\n 'utf8',\n );\n\n // 4. Run pnpm add -D dynamically to fetch and install only the latest packages\n await runCommand(\n 'pnpm add -D eslint @eslint/js @eslint/json globals typescript-eslint',\n { cwd: eslintDir },\n );\n\n // 5. Create Modern eslint.config.ts with Flat Config and @eslint/json support\n const eslintConfigContent = [\n 'import js from \"@eslint/js\";',\n 'import globals from \"globals\";',\n 'import tseslint from \"typescript-eslint\";',\n 'import eslintJson from \"@eslint/json\";',\n '',\n 'export default tseslint.config(',\n ' {',\n ' ignores: [\"**/dist/**\", \"**/node_modules/**\"],',\n ' },',\n ' js.configs.recommended,',\n ' ...tseslint.configs.recommended,',\n ' {',\n ' languageOptions: {',\n ' globals: {',\n ' ...globals.node,',\n ' },',\n ' },',\n ' rules: {',\n ' \"no-unused-vars\": \"off\",',\n ' \"@typescript-eslint/no-unused-vars\": [\"error\", { argsIgnorePattern: \"^_\" }],',\n ' },',\n ' },',\n ' {',\n ' files: [\"**/*.json\"],',\n ' language: \"json/json\",',\n ' ...eslintJson.configs.recommended,',\n ' }',\n ');',\n '',\n ].join('\\n');\n\n await fsPromises.writeFile(\n path.join(eslintDir, 'eslint.config.ts'),\n eslintConfigContent,\n 'utf8',\n );\n\n // 6. Inject lint script into root package.json\n const rootPackagePath = path.join(projectPath, 'package.json');\n const rootPackageContent = await fsPromises.readFile(rootPackagePath, 'utf8');\n const rootPkg = JSON.parse(rootPackageContent);\n\n rootPkg.scripts = {\n ...(rootPkg.scripts || {}),\n lint: 'pnpm --filter @config/eslint lint',\n };\n\n await fsPromises.writeFile(\n rootPackagePath,\n JSON.stringify(rootPkg, null, 2),\n 'utf8',\n );\n}\n\nexport async function runEslintSetup(projectPath: string) {\n // Ensure the packages folder option was generated/exists\n const packagesDir = path.join(projectPath, 'packages');\n try {\n await fsPromises.access(packagesDir);\n } catch {\n // If the packages folder was not scaffolded, we shouldn't attempt to setup ESLint there\n return;\n }\n\n const s = spinner();\n console.log('\\n');\n s.start('Setting up modular ESLint in packages/eslint...');\n try {\n await setupEslint(projectPath);\n s.stop(pc.green('✔ Success: Modular ESLint configured in packages/eslint'));\n } catch (error: any) {\n s.stop(pc.red('✖ Failed: ESLint setup failed'));\n console.error(pc.red(`\\nError details: ${error.message || error}`));\n process.exit(1);\n }\n console.log('\\n');\n}\n","import { spinner } from '@clack/prompts';\nimport pc from 'picocolors';\nimport fsPromises from 'fs/promises';\nimport path from 'path';\nimport { runCommand } from '../utils/exec.js';\n\nexport async function setupTypescript(projectPath: string) {\n const tsDir = path.join(projectPath, 'packages', 'typescript');\n\n // 1. Create packages/typescript directory recursively\n await fsPromises.mkdir(tsDir, { recursive: true });\n\n // 2. Initialize the package using pnpm init\n await runCommand('pnpm init', { cwd: tsDir, silent: true });\n\n // 3. Customize the packages/typescript/package.json\n const tsPackagePath = path.join(tsDir, 'package.json');\n const tsPackageRaw = await fsPromises.readFile(tsPackagePath, 'utf8');\n const tsPkg = JSON.parse(tsPackageRaw);\n\n tsPkg.name = '@config/typescript';\n tsPkg.version = '1.0.0';\n tsPkg.private = true;\n tsPkg.type = 'module';\n tsPkg.exports = {\n './tsconfig.json': './tsconfig.json',\n };\n\n // Remove defaults that are not needed\n delete tsPkg.keywords;\n delete tsPkg.author;\n delete tsPkg.license;\n delete tsPkg.main;\n delete tsPkg.scripts;\n\n await fsPromises.writeFile(\n tsPackagePath,\n JSON.stringify(tsPkg, null, 2),\n 'utf8',\n );\n\n // 4. Install typescript package dynamically as devDependency\n await runCommand(\n 'cd ../.. && pnpm add -D typescript -w && cd packages/typescript',\n { cwd: tsDir, silent: true },\n );\n\n // 5. Initialize tsconfig.json using npx tsc --init\n await runCommand('npx tsc --init', { cwd: tsDir });\n}\n\nexport async function runTypescriptSetup(projectPath: string) {\n // Ensure the packages folder option was generated/exists\n const packagesDir = path.join(projectPath, 'packages');\n try {\n await fsPromises.access(packagesDir);\n } catch {\n // If the packages folder was not scaffolded, we shouldn't attempt to setup TS config there\n return;\n }\n\n const s = spinner();\n console.log('\\n');\n s.start('Setting up modular TypeScript config in packages/typescript...');\n try {\n await setupTypescript(projectPath);\n s.stop(\n pc.green(\n '✔ Success: Modular TypeScript config configured in packages/typescript',\n ),\n );\n } catch (error: any) {\n s.stop(pc.red('✖ Failed: TypeScript config setup failed'));\n console.error(pc.red(`\\nError details: ${error.message || error}`));\n process.exit(1);\n }\n console.log('\\n');\n}\n","import { confirm, spinner } from '@clack/prompts';\nimport pc from 'picocolors';\nimport handleCancel from '../utils/isCancel.js';\nimport fsPromises from 'fs/promises';\nimport path from 'path';\nimport { runCommand } from '../utils/exec.js';\n\nexport async function promptServer() {\n return await confirm({\n message: 'Do you want to setup a Express backend in apps/server?',\n initialValue: true,\n });\n}\n\nexport async function setupServer(projectPath: string) {\n const serverDir = path.join(projectPath, 'apps', 'server');\n const srcDir = path.join(serverDir, 'src');\n\n // 1. Create directory structure apps/server/src recursively\n await fsPromises.mkdir(srcDir, { recursive: true });\n\n // 2. Initialize package.json using pnpm init\n await runCommand('pnpm init', { cwd: serverDir, silent: true });\n\n // 3. Customize apps/server/package.json\n const serverPackagePath = path.join(serverDir, 'package.json');\n const serverPackageRaw = await fsPromises.readFile(serverPackagePath, 'utf8');\n const serverPkg = JSON.parse(serverPackageRaw);\n\n // Check if modular ESLint package exists in workspace packages\n const eslintDir = path.join(projectPath, 'packages', 'eslint');\n let hasEslint = false;\n try {\n await fsPromises.access(eslintDir);\n hasEslint = true;\n } catch {}\n\n serverPkg.name = 'server';\n serverPkg.version = '1.0.0';\n serverPkg.private = true;\n serverPkg.type = 'module';\n serverPkg.main = 'dist/index.js';\n serverPkg.scripts = {\n dev: 'tsx watch src/index.ts',\n build: 'tsc',\n start: 'node dist/index.js',\n };\n serverPkg.devDependencies = {\n '@config/typescript': 'workspace:*',\n };\n\n if (hasEslint) {\n serverPkg.devDependencies['@config/eslint'] = 'workspace:*';\n serverPkg.scripts['lint'] = 'eslint .';\n }\n\n // Remove defaults that are not needed\n delete serverPkg.keywords;\n delete serverPkg.author;\n delete serverPkg.license;\n\n await fsPromises.writeFile(\n serverPackagePath,\n JSON.stringify(serverPkg, null, 2),\n 'utf8',\n );\n\n // 4. Create tsconfig.json extending the base shared config\n const tsconfigContent = {\n extends: '@config/typescript/tsconfig.json',\n compilerOptions: {\n rootDir: 'src',\n outDir: 'dist',\n },\n include: ['src/**/*'],\n };\n\n await fsPromises.writeFile(\n path.join(serverDir, 'tsconfig.json'),\n JSON.stringify(tsconfigContent, null, 2),\n 'utf8',\n );\n\n // If ESLint exists, write the server's eslint.config.ts extending the base config\n if (hasEslint) {\n const eslintConfigContent = [\n \"import baseConfig from '@config/eslint';\",\n '',\n 'export default [',\n ' ...baseConfig,',\n ' {',\n ' // Add server-specific overrides if necessary',\n ' },',\n '];',\n '',\n ].join('\\n');\n\n await fsPromises.writeFile(\n path.join(serverDir, 'eslint.config.ts'),\n eslintConfigContent,\n 'utf8',\n );\n }\n\n // 5. Install dependencies dynamically using pnpm add (fetches latest)\n await runCommand('pnpm add express cors', { cwd: serverDir, silent: false });\n await runCommand('pnpm add -D @types/express @types/cors tsx typescript', {\n cwd: serverDir,\n silent: false,\n });\n\n // 6. Create src/index.ts with premium starter code using CORS and Express\n const indexTsContent = [\n \"import express from 'express';\",\n \"import cors from 'cors';\",\n '',\n 'const app = express();',\n 'const port = process.env.PORT || 3001;',\n '',\n '// Enable CORS and parsing of JSON request bodies',\n 'app.use(cors());',\n 'app.use(express.json());',\n '',\n '// Root API health and welcome route',\n \"app.get('/api', (req, res) => {\",\n ' res.json({',\n \" message: 'Welcome to the Morax High-Performance Backend API!',\",\n ' timestamp: new Date().toISOString(),',\n \" status: 'healthy',\",\n ' });',\n '});',\n '',\n 'app.listen(port, () => {',\n ' console.log(`🚀 Server is running on http://localhost:${port}`);',\n '});',\n '',\n ].join('\\n');\n\n await fsPromises.writeFile(\n path.join(srcDir, 'index.ts'),\n indexTsContent,\n 'utf8',\n );\n}\n\nexport async function runServerSetup(projectPath: string) {\n // Ensure the apps folder option was generated/exists\n const appsDir = path.join(projectPath, 'apps');\n try {\n await fsPromises.access(appsDir);\n } catch {\n // If the apps folder was not scaffolded, we shouldn't attempt to setup Server there\n return;\n }\n\n const serverPrompt = await promptServer();\n\n handleCancel(serverPrompt);\n\n if (serverPrompt) {\n const s = spinner();\n console.log('\\n');\n s.start('Setting up modular Express backend in apps/server...');\n try {\n await setupServer(projectPath);\n s.stop(\n pc.green(\n '✔ Success: Modular Express backend configured in apps/server',\n ),\n );\n } catch (error: any) {\n s.stop(pc.red('✖ Failed: Express backend setup failed'));\n console.error(pc.red(`\\nError details: ${error.message || error}`));\n process.exit(1);\n }\n console.log('\\n');\n }\n}\n","import { confirm, spinner } from '@clack/prompts';\nimport pc from 'picocolors';\nimport handleCancel from '../utils/isCancel.js';\nimport fsPromises from 'fs/promises';\nimport path from 'path';\nimport { runCommand } from '../utils/exec.js';\n\nexport async function promptHusky() {\n return await confirm({\n message: 'Do you want to setup Husky pre-commit hooks?',\n initialValue: true,\n });\n}\n\nexport async function setupHusky(projectPath: string) {\n // 1. Install Husky dynamically with exact version at the workspace root\n await runCommand('pnpm add -D -E husky -w', { cwd: projectPath });\n\n // 2. Initialize Husky using its official init generator\n await runCommand('pnpm exec husky init', { cwd: projectPath });\n\n // 3. Update the auto-generated .husky/pre-commit file to run format and stage files\n const preCommitPath = path.join(projectPath, '.husky', 'pre-commit');\n let hookContent = '';\n try {\n hookContent = await fsPromises.readFile(preCommitPath, 'utf8');\n } catch {\n hookContent = 'pnpm test'; // Default fallback\n }\n\n // Replace default test commands with formatting checks\n hookContent = hookContent.replace('pnpm test', 'pnpm format');\n\n // Append staging of newly formatted files\n if (!hookContent.includes('git add .')) {\n hookContent = hookContent.trim() + '\\ngit add .\\n';\n }\n\n await fsPromises.writeFile(preCommitPath, hookContent, 'utf8');\n\n try {\n await fsPromises.chmod(preCommitPath, 0o755);\n } catch {}\n}\n\nexport async function runHuskySetup(\n projectPath: string,\n gitInitialized: boolean,\n) {\n if (!gitInitialized) return;\n\n const huskyPrompt = await promptHusky();\n\n handleCancel(huskyPrompt);\n\n if (huskyPrompt) {\n const s = spinner();\n console.log('\\n');\n s.start('Setting up Husky hooks...');\n try {\n await setupHusky(projectPath);\n s.stop(pc.green('✔ Success: Husky pre-commit hooks configured'));\n } catch (error: any) {\n s.stop(pc.red('✖ Failed: Husky setup failed'));\n console.error(pc.red(`\\nError details: ${error.message || error}`));\n process.exit(1);\n }\n console.log('\\n');\n }\n}\n","import { select } from '@clack/prompts';\nimport handleCancel from '../utils/isCancel.js';\nimport { runShadcnSetup } from '../tasks/shadcn.js';\nimport { setupNextjs } from '../tasks/nextjs.js';\nimport { setupReact } from '../tasks/react.js';\n\nexport default async function addweb(projectPath: string) {\n const framework = await select({\n message:\n 'Which frontend website setup would you like to include in apps/web?',\n options: [\n {\n value: 'nextjs',\n label: 'Next.js',\n hint: 'The React Framework for the Web',\n },\n {\n value: 'react',\n label: 'React (Vite)',\n hint: 'Vite React Starter Template',\n },\n {\n value: 'skip',\n label: 'Skip',\n hint: 'Skip setting up a frontend website',\n },\n ],\n initialValue: 'nextjs',\n });\n\n handleCancel(framework);\n\n if (framework === 'nextjs') {\n await setupNextjs(projectPath);\n // Prompt and execute shadcn UI setup in next.js app\n await runShadcnSetup(projectPath);\n } else if (framework === 'react') {\n await setupReact(projectPath);\n }\n}\n"],"mappings":";;;AAAA,OAAOA,UAAQ;;;ACAf,OAAOC,YAAU;AACjB,SAAS,WAAAC,WAAS,mBAAmB;AACrC,OAAOC,UAAQ;;;ACFf,OAAO,cAAc;AACrB,OAAO,QAAQ;AACf,SAAS,aAAa;AACtB,OAAO,WAAW;AAElB,IAAM,WAAW;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,IAAI;AAEJ,SAAS,WAAW;AACzB,UAAQ,MAAM;AAGd,QAAM,gBAAgB,SAAS,CAAC,WAAW,WAAW,SAAS,CAAC;AAEhE,UAAQ,IAAI,IAAI;AAChB,UAAQ,IAAI,cAAc,QAAQ,CAAC;AACnC,UAAQ,IAAI,IAAI;AAEhB,QAAM,GAAG,OAAO,qEAAyD,CAAC;AAE1E,UAAQ;AAAA,IACN;AAAA,MACE,UAAK,GAAG,KAAK,OAAO,CAAC,kCAAkC,GAAG,KAAK,iBAAiB,CAAC;AAAA,MACjF;AAAA,QACE,SAAS;AAAA,QACT,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,EAAE;AAAA,QAC/C,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AACF;;;ACrCA,SAAS,YAAY;;;ACArB,SAAS,UAAU,cAAc;AACjC,OAAOC,SAAQ;AAEA,SAAR,aAA8B,OAAY;AAC/C,MAAI,SAAS,KAAK,GAAG;AACnB,WAAOA,IAAG,IAAI,yBAAoB,CAAC;AACnC,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;;;ADLA,eAAsB,oBAAoB,aAAa,MAAuB;AAC5E,QAAM,YAAY,MAAM,KAAK;AAAA,IAC3B,SAAS,aACL,qDACA;AAAA,IACJ,aAAa,aAAa,oBAAoB;AAAA,IAC9C,SAAS,OAAO;AACd,UAAI,SAAS,MAAM,SAAS,GAAG;AAC7B,eAAO,aACH,0CACA;AAAA,IACR;AAAA,EACF,CAAC;AAED,eAAa,SAAS;AAGtB,SACE,OAAO,SAAS,EAAE,KAAK,MAAM,aAAa,oBAAoB;AAElE;;;AEvBA,SAAS,eAAe;AACxB,OAAOC,iBAAgB;AACvB,OAAOC,WAAU;AACjB,OAAOC,SAAQ;;;ACHf,OAAO,gBAAgB;AACvB,OAAO,UAAU;;;ACDjB,SAAS,YAAY;AACrB,SAAS,iBAAiB;AAC1B,OAAOC,SAAQ;AAEf,IAAM,YAAY,UAAU,IAAI;AAUhC,eAAsB,WACpB,SACA,UAA6B,CAAC,GAC9B;AACA,UAAQ,SAAS;AAEjB,MAAI,CAAC,QAAQ,QAAQ;AACnB,YAAQ,IAAIA,IAAG,KAAK,KAAK,OAAO,EAAE,CAAC;AAAA,EACrC;AAEA,MAAI;AACF,UAAM,EAAE,QAAQ,OAAO,IAAI,MAAM,UAAU,SAAS;AAAA,MAClD,KAAK,QAAQ;AAAA,MACb,KAAK,EAAE,GAAG,QAAQ,KAAK,kBAAkB,IAAI;AAAA,IAC/C,CAAC;AAED,QAAI,CAAC,QAAQ,QAAQ;AACnB,UAAI,UAAU,OAAO,KAAK,GAAG;AAC3B,gBAAQ,IAAI,OAAO,KAAK,CAAC;AAAA,MAC3B;AACA,UAAI,UAAU,OAAO,KAAK,GAAG;AAC3B,gBAAQ,IAAIA,IAAG,OAAO,OAAO,KAAK,CAAC,CAAC;AAAA,MACtC;AAAA,IACF;AAEA,WAAO,EAAE,QAAQ,OAAO;AAAA,EAC1B,SAAS,OAAY;AACnB,QAAI,CAAC,QAAQ,QAAQ;AACnB,UAAI,MAAM,UAAU,MAAM,OAAO,KAAK,GAAG;AACvC,gBAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AAAA,MACjC;AACA,UAAI,MAAM,UAAU,MAAM,OAAO,KAAK,GAAG;AACvC,gBAAQ,MAAMA,IAAG,IAAI,MAAM,OAAO,KAAK,CAAC,CAAC;AAAA,MAC3C;AAAA,IACF;AACA,UAAM;AAAA,EACR;AACF;;;AD/CA,eAAsB,wBACpB,MACA,aACA,aACA;AAEA,QAAM,WAAW,MAAM,aAAa,EAAE,WAAW,KAAK,CAAC;AAGvD,QAAM,uBAAuB;AAAA,IAC3B;AAAA,IACA,GAAG,YAAY,IAAI,CAAC,QAAQ,QAAQ,GAAG,KAAK;AAAA,IAC5C;AAAA,EACF,EAAE,KAAK,IAAI;AAEX,QAAM,WAAW;AAAA,IACf,KAAK,KAAK,aAAa,qBAAqB;AAAA,IAC5C;AAAA,IACA;AAAA,EACF;AAGA,QAAM,WAAW,aAAa,EAAE,KAAK,aAAa,QAAQ,KAAK,CAAC;AAGhE,QAAM,kBAAkB,KAAK,KAAK,aAAa,cAAc;AAC7D,QAAM,iBAAiB,MAAM,WAAW,SAAS,iBAAiB,MAAM;AACxE,QAAM,MAAM,KAAK,MAAM,cAAc;AAErC,MAAI,OAAO;AACX,MAAI,cAAc;AAClB,MAAI,UAAU;AACd,MAAI,iBAAiB;AACrB,MAAI,aAAa,YAAY,IAAI,CAAC,QAAQ,GAAG,GAAG,IAAI;AACpD,MAAI,UAAU;AAAA,IACZ,KAAK;AAAA,EACP;AAGA,SAAO,IAAI;AAEX,QAAM,WAAW;AAAA,IACf;AAAA,IACA,KAAK,UAAU,KAAK,MAAM,CAAC;AAAA,IAC3B;AAAA,EACF;AACF;;;AD5CA,eAAsB,kBACpB,aACA,aACA;AACA,aAAW,OAAO,aAAa;AAC7B,UAAM,UAAUC,MAAK,KAAK,aAAa,GAAG;AAC1C,UAAMC,YAAW,MAAM,SAAS,EAAE,WAAW,KAAK,CAAC;AACnD,UAAMA,YAAW;AAAA,MACfD,MAAK,KAAK,SAAS,UAAU;AAAA,MAC7B,gDAAgD,GAAG;AAAA;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AACF;AAEA,eAAsB,gBAAgB,MAAc,aAAqB;AACvE,QAAM,cAAuC,CAAC,QAAQ,UAAU;AAEhE,QAAM,IAAI,QAAQ;AAClB,UAAQ,IAAI,IAAI;AAChB,IAAE,MAAM,iCAAiC;AACzC,MAAI;AACF,UAAM,wBAAwB,MAAM,aAAa,WAAW;AAC5D,UAAM,kBAAkB,aAAa,WAAW;AAChD,MAAE,KAAKE,IAAG,MAAM,8DAAyD,CAAC;AAAA,EAC5E,SAAS,OAAY;AACnB,MAAE,KAAKA,IAAG,IAAI,4CAAuC,CAAC;AACtD,YAAQ,MAAMA,IAAG,IAAI;AAAA,iBAAoB,MAAM,WAAW,KAAK,EAAE,CAAC;AAClE,YAAQ,KAAK,CAAC;AAAA,EAChB;AACA,UAAQ,IAAI,IAAI;AAEhB,SAAO;AACT;;;AGvCA,OAAOC,WAAU;AACjB,SAAS,WAAAC,gBAAe;AACxB,OAAOC,SAAQ;;;ACFf,OAAOC,SAAQ;AACf,OAAOC,iBAAgB;AACvB,OAAOC,WAAU;AACjB,SAAS,aAAa;AACtB,SAAS,SAAS,WAAAC,UAAS,QAAAC,aAAY;AAIvC,SAAS,sBACP,SACA,MACA,KACe;AACf,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,cACJ,KAAK,SAAS,IAAI,GAAG,OAAO,IAAI,KAAK,KAAK,GAAG,CAAC,KAAK;AACrD,UAAM,QAAQ,MAAM,aAAa,CAAC,GAAG;AAAA,MACnC;AAAA,MACA,OAAO;AAAA,MACP,OAAO;AAAA,MACP,KAAK,EAAE,GAAG,QAAQ,KAAK,kBAAkB,IAAI;AAAA,IAC/C,CAAC;AAED,UAAM,GAAG,SAAS,CAAC,SAAS;AAC1B,UAAI,SAAS,GAAG;AACd,gBAAQ;AAAA,MACV,OAAO;AACL;AAAA,UACE,IAAI;AAAA,YACF,YAAY,OAAO,IAAI,KAAK,KAAK,GAAG,CAAC,sBAAsB,IAAI;AAAA,UACjE;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAED,UAAM,GAAG,SAAS,CAAC,QAAQ;AACzB,aAAO,GAAG;AAAA,IACZ,CAAC;AAAA,EACH,CAAC;AACH;AAEA,eAAsB,WAAW,aAAqB,aAAa,MAAM;AACvE,QAAM,UAAU,aACZC,MAAK,KAAK,aAAa,MAAM,IAC7BA,MAAK,QAAQ,WAAW;AAG5B,UAAQ,IAAIC,IAAG,cAAc,qCAA8B,CAAC;AAC5D,UAAQ;AAAA,IACNA,IAAG;AAAA,MACD;AAAA,IACF;AAAA,EACF;AACA,UAAQ;AAAA,IACNA,IAAG;AAAA,MACD,gCAAgCA,IAAG,KAAK,IAAI,CAAC;AAAA,IAC/C;AAAA,EACF;AACA,UAAQ;AAAA,IACNA,IAAG;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAGA,UAAQ;AAAA,IACNA,IAAG,KAAK,wDAAwD;AAAA,EAClE;AAGA,MAAI,aAAuB,CAAC;AAC5B,MAAI;AACF,iBAAa,MAAMC,YAAW,QAAQ,OAAO;AAAA,EAC/C,QAAQ;AAAA,EAAC;AAET,MAAI;AACF,UAAM,sBAAsB,QAAQ,CAAC,UAAU,aAAa,GAAG,OAAO;AAGtE,QAAI,YAAsB,CAAC;AAC3B,QAAI;AACF,kBAAY,MAAMA,YAAW,QAAQ,OAAO;AAAA,IAC9C,QAAQ;AAAA,IAAC;AAGT,UAAM,UAAU,UAAU,OAAO,CAAC,MAAM,CAAC,WAAW,SAAS,CAAC,CAAC;AAC/D,QAAI,iBAAiB;AACrB,QAAI,QAAQ,SAAS,GAAG;AACtB,uBAAiB,QAAQ,CAAC;AAAA,IAC5B;AACA,UAAM,SAASF,MAAK,KAAK,SAAS,cAAc;AAGhD,QAAI;AACF,YAAME,YAAW,OAAO,MAAM;AAAA,IAChC,QAAQ;AACN,YAAM,IAAI;AAAA,QACR,0CAA0C,cAAc;AAAA,MAC1D;AAAA,IACF;AAGA,UAAM,eAAeC,SAAQ;AAC7B,iBAAa,MAAM,8CAA8C;AACjE,QAAI;AAEF,YAAM,UAAUH,MAAK,KAAK,QAAQ,cAAc;AAChD,UAAI;AACF,cAAM,SAAS,MAAME,YAAW,SAAS,SAAS,MAAM;AACxD,cAAM,MAAM,KAAK,MAAM,MAAM;AAC7B,YAAI,kBAAkB,IAAI,mBAAmB,CAAC;AAC9C,YAAI,gBAAgB,aAAa,IAAI;AACrC,cAAMA,YAAW;AAAA,UACf;AAAA,UACA,KAAK,UAAU,KAAK,MAAM,CAAC;AAAA,UAC3B;AAAA,QACF;AAAA,MACF,QAAQ;AAAA,MAAC;AAGT,YAAM,gBAAgB;AAAA,QACpBF,MAAK,KAAK,QAAQ,eAAe;AAAA,QACjCA,MAAK,KAAK,QAAQ,mBAAmB;AAAA,MACvC;AACA,iBAAW,UAAU,eAAe;AAClC,YAAI;AACF,cAAI,UAAU,MAAME,YAAW,SAAS,QAAQ,MAAM;AACtD,cAAI,QAAQ,SAAS,mBAAmB,GAAG;AACzC,gBAAI,CAAC,QAAQ,SAAS,SAAS,GAAG;AAChC,wBAAU,QAAQ;AAAA,gBAChB;AAAA,gBACA;AAAA;AAAA;AAAA;AAAA;AAAA,cACF;AACA,oBAAMA,YAAW,UAAU,QAAQ,SAAS,MAAM;AAAA,YACpD;AAAA,UACF,OAAO;AACL,sBAAU,QAAQ;AAAA,cAChB;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YACF;AACA,kBAAMA,YAAW,UAAU,QAAQ,SAAS,MAAM;AAAA,UACpD;AAAA,QACF,QAAQ;AAAA,QAAC;AAAA,MACX;AAGA,YAAM,iBAAiBF,MAAK,KAAK,QAAQ,gBAAgB;AACzD,UAAI;AACF,YAAI,UAAU,MAAME,YAAW,SAAS,gBAAgB,MAAM;AAC9D,YAAI,CAAC,QAAQ,SAAS,yBAAyB,GAAG;AAChD,oBAAU,+BAA+B;AAAA,QAC3C;AACA,YAAI,CAAC,QAAQ,SAAS,UAAU,GAAG;AACjC,oBAAU,QAAQ;AAAA,YAChB;AAAA,YACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UACF;AAAA,QACF;AACA,cAAMA,YAAW,UAAU,gBAAgB,SAAS,MAAM;AAAA,MAC5D,QAAQ;AAAA,MAAC;AAET,mBAAa;AAAA,QACXD,IAAG,MAAM,0DAAqD;AAAA,MAChE;AAAA,IACF,SAAS,KAAU;AACjB,mBAAa,KAAKA,IAAG,IAAI,kDAA6C,CAAC;AAAA,IACzE;AAEA,YAAQ;AAAA,MACNA,IAAG;AAAA,QACD,aACI;AAAA,yDAAuD,cAAc;AAAA,IACrE;AAAA;AAAA;AAAA,MACN;AAAA,IACF;AAGA,UAAM,sBAAsB,MAAM,QAAQ;AAAA,MACxC,SAAS;AAAA,MACT,cAAc;AAAA,IAChB,CAAC;AACD,iBAAa,mBAAmB;AAEhC,UAAM,oBAAoB,MAAM,QAAQ;AAAA,MACtC,SAAS,mEAAmE,cAAc;AAAA,MAC1F,cAAc;AAAA,IAChB,CAAC;AACD,iBAAa,iBAAiB;AAG9B,UAAM,gBAAgB,uBAAuB;AAE7C,QAAI,eAAe;AACjB,YAAM,IAAIE,SAAQ;AAClB,QAAE;AAAA,QACA;AAAA,MACF;AACA,UAAI;AAEF,cAAM,UAAUH,MAAK,KAAK,QAAQ,cAAc;AAChD,YAAI;AACF,gBAAM,SAAS,MAAME,YAAW,SAAS,SAAS,MAAM;AACxD,gBAAM,MAAM,KAAK,MAAM,MAAM;AAC7B,cAAI,eAAe,IAAI,gBAAgB,CAAC;AACxC,cAAI,kBAAkB,IAAI,mBAAmB,CAAC;AAE9C,cAAI,aAAa,aAAa,IAAI;AAClC,cAAI,gBAAgB,mBAAmB,IAAI;AAC3C,cAAI,gBAAgB,aAAa,IAAI;AAErC,gBAAMA,YAAW;AAAA,YACf;AAAA,YACA,KAAK,UAAU,KAAK,MAAM,CAAC;AAAA,YAC3B;AAAA,UACF;AAAA,QACF,QAAQ;AAAA,QAAC;AAGT,cAAM,WAAW,gBAAgB,EAAE,KAAK,QAAQ,QAAQ,KAAK,CAAC;AAE9D,UAAE,QAAQ,sDAAsD;AAGhE,cAAM,iBAAiBF,MAAK,KAAK,QAAQ,gBAAgB;AACzD,YAAI;AACF,cAAI,UAAU,MAAME,YAAW,SAAS,gBAAgB,MAAM;AAC9D,cAAI,CAAC,QAAQ,SAAS,mBAAmB,GAAG;AAC1C,sBACE,mDAAmD;AAErD,gBAAI,QAAQ,SAAS,oBAAoB,GAAG;AAC1C,wBAAU,QAAQ;AAAA,gBAChB;AAAA,gBACA;AAAA,cACF;AAAA,YACF,WAAW,QAAQ,SAAS,qBAAqB,GAAG;AAClD,wBAAU,QAAQ;AAAA,gBAChB;AAAA,gBACA;AAAA,cACF;AAAA,YACF,OAAO;AAEL,wBAAU,QAAQ;AAAA,gBAChB;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AACA,kBAAMA,YAAW,UAAU,gBAAgB,SAAS,MAAM;AAAA,UAC5D;AAAA,QACF,QAAQ;AAAA,QAAC;AAGT,cAAM,eAAeF,MAAK,KAAK,QAAQ,OAAO,WAAW;AACzD,YAAI;AACF,gBAAME,YAAW;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF,QAAQ;AAAA,QAAC;AAET,UAAE;AAAA,UACAD,IAAG,MAAM,2DAAsD;AAAA,QACjE;AAAA,MACF,SAAS,KAAU;AACjB,UAAE,KAAKA,IAAG,IAAI,6CAAwC,CAAC;AACvD,cAAM;AAAA,MACR;AAAA,IACF;AAEA,QAAI,mBAAmB;AAErB,YAAM,YAAY,MAAM,QAAQ;AAAA,QAC9B,SAAS;AAAA,QACT,cAAc;AAAA,MAChB,CAAC;AACD,mBAAa,SAAS;AAEtB,UAAI,aAAa;AACjB,UAAI,WAAW;AACb,cAAM,gBAAgB,MAAMG,MAAK;AAAA,UAC/B,SAAS;AAAA,UACT,aAAa;AAAA,UACb,UAAU,CAAC,QAAQ;AACjB,gBAAI,CAAC,OAAO,CAAC,IAAI,KAAK,EAAG,QAAO;AAChC;AAAA,UACF;AAAA,QACF,CAAC;AACD,qBAAa,aAAa;AAC1B,qBAAc,cAAyB,KAAK;AAAA,MAC9C;AAEA,YAAM,OAAO,CAAC,OAAO,iBAAiB,MAAM;AAC5C,UAAI,YAAY;AACd,aAAK,KAAK,YAAY,UAAU;AAAA,MAClC;AACA,WAAK,KAAK,cAAc,MAAM;AAE9B,cAAQ;AAAA,QACNH,IAAG,KAAK,oDAAoD;AAAA,MAC9D;AACA,YAAM,sBAAsB,QAAQ,MAAM,MAAM;AAChD,cAAQ;AAAA,QACNA,IAAG;AAAA,UACD,aACI;AAAA,6DAA2D,cAAc;AAAA,IACzE;AAAA;AAAA;AAAA,QACN;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT,SAAS,OAAY;AACnB,YAAQ,MAAMA,IAAG,IAAI;AAAA,gDAA8C,CAAC;AACpE,YAAQ,MAAMA,IAAG,IAAI,kBAAkB,MAAM,WAAW,KAAK;AAAA,CAAI,CAAC;AAClE,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;;;AC5TA,SAAS,WAAAI,UAAS,WAAAC,gBAAe;AACjC,OAAOC,SAAQ;AAEf,OAAOC,iBAAgB;AACvB,OAAOC,WAAU;AAGjB,eAAsB,YAAY;AAChC,SAAO,MAAMC,SAAQ;AAAA,IACnB,SAAS;AAAA,IACT,cAAc;AAAA,EAChB,CAAC;AACH;AAEA,eAAsB,QAAQ,aAAqB;AAEjD,QAAM,WAAW,YAAY,EAAE,KAAK,aAAa,QAAQ,KAAK,CAAC;AAG/D,QAAM,YAAY;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AAEX,QAAMC,YAAW;AAAA,IACfC,MAAK,KAAK,aAAa,YAAY;AAAA,IACnC;AAAA,IACA;AAAA,EACF;AACF;AAEA,eAAsB,YAAY,aAAuC;AACvE,QAAM,YAAY,MAAM,UAAU;AAElC,eAAa,SAAS;AAEtB,MAAI,iBAAiB;AACrB,MAAI,WAAW;AACb,UAAM,IAAIC,SAAQ;AAClB,YAAQ,IAAI,IAAI;AAChB,MAAE,MAAM,gCAAgC;AACxC,QAAI;AACF,YAAM,QAAQ,WAAW;AACzB,QAAE,KAAKC,IAAG,MAAM,4CAAuC,CAAC;AACxD,uBAAiB;AAAA,IACnB,SAAS,OAAY;AACnB,QAAE,KAAKA,IAAG,IAAI,0CAAqC,CAAC;AACpD,cAAQ,MAAMA,IAAG,IAAI;AAAA,iBAAoB,MAAM,WAAW,KAAK,EAAE,CAAC;AAClE,cAAQ,KAAK,CAAC;AAAA,IAChB;AACA,YAAQ,IAAI,IAAI;AAAA,EAClB;AACA,SAAO;AACT;;;ACjFA,OAAOC,iBAAgB;AACvB,OAAOC,WAAU;AAEjB,eAAsB,YAAY,aAAqB,eAAuB;AAC5E,QAAM,aAAaA,MAAK,KAAK,aAAa,WAAW;AAErD,QAAM,gBAAgB;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AAEX,QAAMD,YAAW,UAAU,YAAY,eAAe,MAAM;AAC9D;;;AC7CA,OAAOE,SAAQ;AACf,SAAS,aAAa;AAEf,SAAS,OAAO,MAAc,aAAqB;AAExD,QAAMA,IAAG,OAAO,2CAA2C,CAAC;AAE5D,UAAQ;AAAA,IACN,UAAKA,IAAG,KAAK,kBAAkB,CAAC,IAAIA,IAAG,OAAO,IAAI,CAAC;AAAA,EAE9CA,IAAG,KAAK,sBAAsB,CAAC;AAAA,MAC3BA,IAAG,KAAK,MAAM,IAAI,EAAE,CAAC;AAAA,MACrBA,IAAG,KAAK,UAAU,CAAC;AAAA,EAC9B;AACF;;;AJJA,eAAsB,mBAAmB,MAAc,aAAqB;AAE1E,QAAM,mBAAmB,MAAM,WAAW,aAAa,KAAK;AAG5D,QAAM,YAAY,kBAAkBC,MAAK,SAAS,gBAAgB,CAAC;AAGnE,QAAM,YAAY,gBAAgB;AAGlC,QAAM,iBAAiBC,SAAQ;AAC/B,UAAQ,IAAI,IAAI;AAChB,iBAAe,MAAM,uCAAuC;AAC5D,MAAI;AACF,UAAM,WAAW,gBAAgB,EAAE,KAAK,kBAAkB,QAAQ,KAAK,CAAC;AACxE,mBAAe;AAAA,MACbC,IAAG,MAAM,sDAAiD;AAAA,IAC5D;AAAA,EACF,SAAS,OAAY;AACnB,mBAAe,KAAKA,IAAG,IAAI,mDAA8C,CAAC;AAC1E,YAAQ,MAAMA,IAAG,IAAI;AAAA,iBAAoB,MAAM,WAAW,KAAK,EAAE,CAAC;AAAA,EACpE;AACA,UAAQ,IAAI,IAAI;AAGhB,SAAOF,MAAK,SAAS,gBAAgB,GAAG,gBAAgB;AAC1D;;;AKrCA,OAAOG,WAAU;AACjB,SAAS,WAAAC,gBAAe;AACxB,OAAOC,UAAQ;;;ACFf,SAAS,WAAAC,gBAAe;AACxB,OAAOC,SAAQ;AAEf,OAAOC,iBAAgB;AACvB,OAAOC,WAAU;AACjB,SAAS,SAAAC,cAAa;AAStB,SAASC,uBACP,SACA,MACA,KACe;AACf,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,QAAQC,OAAM,SAAS,MAAM;AAAA,MACjC;AAAA,MACA,OAAO;AAAA,MACP,OAAO;AAAA,MACP,KAAK,EAAE,GAAG,QAAQ,KAAK,kBAAkB,IAAI;AAAA,IAC/C,CAAC;AAED,UAAM,GAAG,SAAS,CAAC,SAAS;AAC1B,UAAI,SAAS,GAAG;AACd,gBAAQ;AAAA,MACV,OAAO;AACL;AAAA,UACE,IAAI;AAAA,YACF,YAAY,OAAO,IAAI,KAAK,KAAK,GAAG,CAAC,sBAAsB,IAAI;AAAA,UACjE;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAED,UAAM,GAAG,SAAS,CAAC,QAAQ;AACzB,aAAO,GAAG;AAAA,IACZ,CAAC;AAAA,EACH,CAAC;AACH;AAEA,eAAsB,YAAY,aAAqB,aAAa,MAAM;AACxE,QAAM,UAAU,aACZC,MAAK,KAAK,aAAa,MAAM,IAC7BA,MAAK,QAAQ,WAAW;AAC5B,QAAM,aAAa,aAAa,QAAQA,MAAK,SAAS,WAAW;AACjE,QAAM,SAASA,MAAK,KAAK,SAAS,UAAU;AAG5C,MAAI;AACF,UAAMC,YAAW,GAAG,QAAQ,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,EAC9D,QAAQ;AAAA,EAAC;AAGT,UAAQ,IAAIC,IAAG,KAAK,qDAAqD,CAAC;AAC1E,QAAMJ;AAAA,IACJ;AAAA,IACA,CAAC,0BAA0B,UAAU;AAAA,IACrC;AAAA,EACF;AAEA,SAAO;AACT;;;AClEA,SAAS,WAAAK,gBAAe;AACxB,OAAOC,UAAQ;AAEf,OAAOC,iBAAgB;AACvB,OAAOC,WAAU;AACjB,SAAS,SAAAC,cAAa;AAEtB,eAAsB,eAAe;AACnC,SAAO,MAAMC,SAAQ;AAAA,IACnB,SACE;AAAA,IACF,cAAc;AAAA,EAChB,CAAC;AACH;AAEA,SAASC,uBACP,SACA,MACA,KACe;AACf,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,QAAQF,OAAM,SAAS,MAAM;AAAA,MACjC;AAAA,MACA,OAAO;AAAA,MACP,OAAO;AAAA,MACP,KAAK,EAAE,GAAG,QAAQ,KAAK,kBAAkB,IAAI;AAAA,IAC/C,CAAC;AAED,UAAM,GAAG,SAAS,CAAC,SAAS;AAC1B,UAAI,SAAS,GAAG;AACd,gBAAQ;AAAA,MACV,OAAO;AACL;AAAA,UACE,IAAI;AAAA,YACF,YAAY,OAAO,IAAI,KAAK,KAAK,GAAG,CAAC,sBAAsB,IAAI;AAAA,UACjE;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAED,UAAM,GAAG,SAAS,CAAC,QAAQ;AACzB,aAAO,GAAG;AAAA,IACZ,CAAC;AAAA,EACH,CAAC;AACH;AAEA,eAAsB,YAAY,aAAqB,aAAa,MAAM;AACxE,QAAM,SAAS,aACXD,MAAK,KAAK,aAAa,QAAQ,KAAK,IACpC;AAGJ,UAAQ,IAAII,KAAG,KAAK,oDAAoD,CAAC;AACzE,QAAMD;AAAA,IACJ;AAAA,IACA,CAAC,OAAO,iBAAiB,QAAQ,cAAc,MAAM;AAAA,IACrD;AAAA,EACF;AACF;AAEA,eAAsB,eAAe,aAAqB,aAAa,MAAM;AAE3E,QAAM,SAAS,aACXH,MAAK,KAAK,aAAa,QAAQ,KAAK,IACpC;AACJ,MAAI;AACF,UAAMD,YAAW,OAAO,MAAM;AAAA,EAChC,QAAQ;AAEN;AAAA,EACF;AAEA,QAAM,eAAe,MAAM,aAAa;AAExC,eAAa,YAAY;AAEzB,MAAI,cAAc;AAChB,QAAI;AACF,YAAM,YAAY,aAAa,UAAU;AACzC,cAAQ;AAAA,QACNK,KAAG;AAAA,UACD,aACI,uEACA;AAAA,QACN;AAAA,MACF;AAAA,IACF,SAAS,OAAY;AACnB,cAAQ,MAAMA,KAAG,IAAI;AAAA,sCAAoC,CAAC;AAC1D,cAAQ,MAAMA,KAAG,IAAI,kBAAkB,MAAM,WAAW,KAAK;AAAA,CAAI,CAAC;AAClE,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AACF;;;AFjFA,eAAsB,kBAAkB,MAAc,aAAqB;AAEzE,QAAM,mBAAmB,MAAM,YAAY,aAAa,KAAK;AAG7D,QAAM,eAAe,kBAAkB,KAAK;AAG5C,QAAM,YAAY,kBAAkBC,MAAK,SAAS,gBAAgB,CAAC;AAGnE,QAAM,YAAY,gBAAgB;AAGlC,QAAM,iBAAiBC,SAAQ;AAC/B,UAAQ,IAAI,IAAI;AAChB,iBAAe,MAAM,uCAAuC;AAC5D,MAAI;AACF,UAAM,WAAW,gBAAgB,EAAE,KAAK,kBAAkB,QAAQ,KAAK,CAAC;AACxE,mBAAe;AAAA,MACbC,KAAG,MAAM,sDAAiD;AAAA,IAC5D;AAAA,EACF,SAAS,OAAY;AACnB,mBAAe,KAAKA,KAAG,IAAI,mDAA8C,CAAC;AAC1E,YAAQ,MAAMA,KAAG,IAAI;AAAA,iBAAoB,MAAM,WAAW,KAAK,EAAE,CAAC;AAAA,EACpE;AACA,UAAQ,IAAI,IAAI;AAGhB,SAAOF,MAAK,SAAS,gBAAgB,GAAG,gBAAgB;AAC1D;;;AGzCA,SAAS,WAAAG,UAAS,WAAAC,gBAAe;AACjC,OAAOC,UAAQ;AAEf,OAAOC,iBAAgB;AACvB,OAAOC,YAAU;AAGjB,eAAsB,iBAAiB;AACrC,SAAO,MAAMC,SAAQ;AAAA,IACnB,SAAS;AAAA,IACT,cAAc;AAAA,EAChB,CAAC;AACH;AAEA,eAAsB,cAAc,aAAqB;AAEvD,QAAM,WAAW,8BAA8B,EAAE,KAAK,YAAY,CAAC;AAGnE,QAAM,aAAa;AAAA,IACjB,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,IACV,eAAe;AAAA,IACf,YAAY;AAAA,EACd;AAEA,QAAMC,YAAW;AAAA,IACfC,OAAK,KAAK,aAAa,aAAa;AAAA,IACpC,KAAK,UAAU,YAAY,MAAM,CAAC;AAAA,IAClC;AAAA,EACF;AAGA,QAAM,iBAAiB;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AAEX,QAAMD,YAAW;AAAA,IACfC,OAAK,KAAK,aAAa,iBAAiB;AAAA,IACxC;AAAA,IACA;AAAA,EACF;AAGA,QAAM,kBAAkBA,OAAK,KAAK,aAAa,cAAc;AAC7D,QAAM,qBAAqB,MAAMD,YAAW,SAAS,iBAAiB,MAAM;AAC5E,QAAM,MAAM,KAAK,MAAM,kBAAkB;AAEzC,MAAI,UAAU;AAAA,IACZ,GAAI,IAAI,WAAW,CAAC;AAAA,IACpB,QAAQ;AAAA,EACV;AAEA,QAAMA,YAAW;AAAA,IACf;AAAA,IACA,KAAK,UAAU,KAAK,MAAM,CAAC;AAAA,IAC3B;AAAA,EACF;AAGA,QAAM,WAAW,eAAe,EAAE,KAAK,YAAY,CAAC;AACtD;AAEA,eAAsB,iBAAiB,aAAqB;AAC1D,QAAM,iBAAiB,MAAM,eAAe;AAE5C,eAAa,cAAc;AAE3B,MAAI,gBAAgB;AAClB,UAAM,IAAIE,SAAQ;AAClB,YAAQ,IAAI,IAAI;AAChB,MAAE,MAAM,wCAAwC;AAChD,QAAI;AACF,YAAM,cAAc,WAAW;AAC/B,QAAE,KAAKC,KAAG,MAAM,gDAA2C,CAAC;AAAA,IAC9D,SAAS,OAAY;AACnB,QAAE,KAAKA,KAAG,IAAI,sCAAiC,CAAC;AAChD,cAAQ,MAAMA,KAAG,IAAI;AAAA,iBAAoB,MAAM,WAAW,KAAK,EAAE,CAAC;AAClE,cAAQ,KAAK,CAAC;AAAA,IAChB;AACA,YAAQ,IAAI,IAAI;AAAA,EAClB;AACF;;;ACrGA,SAAS,WAAAC,gBAAe;AACxB,OAAOC,UAAQ;AACf,OAAOC,iBAAgB;AACvB,OAAOC,YAAU;AAGjB,eAAsB,YAAY,aAAqB;AACrD,QAAM,YAAYC,OAAK,KAAK,aAAa,YAAY,QAAQ;AAG7D,QAAMC,YAAW,MAAM,WAAW,EAAE,WAAW,KAAK,CAAC;AAGrD,QAAM,WAAW,aAAa,EAAE,KAAK,WAAW,QAAQ,KAAK,CAAC;AAG9D,QAAM,oBAAoBD,OAAK,KAAK,WAAW,cAAc;AAC7D,QAAM,mBAAmB,MAAMC,YAAW,SAAS,mBAAmB,MAAM;AAC5E,QAAM,YAAY,KAAK,MAAM,gBAAgB;AAE7C,YAAU,OAAO;AACjB,YAAU,UAAU;AACpB,YAAU,UAAU;AACpB,YAAU,OAAO;AACjB,YAAU,OAAO;AACjB,YAAU,UAAU;AAAA,IAClB,KAAK;AAAA,EACP;AACA,YAAU,UAAU;AAAA,IAClB,MAAM;AAAA,EACR;AAGA,SAAO,UAAU;AACjB,SAAO,UAAU;AACjB,SAAO,UAAU;AAEjB,QAAMA,YAAW;AAAA,IACf;AAAA,IACA,KAAK,UAAU,WAAW,MAAM,CAAC;AAAA,IACjC;AAAA,EACF;AAGA,QAAM;AAAA,IACJ;AAAA,IACA,EAAE,KAAK,UAAU;AAAA,EACnB;AAGA,QAAM,sBAAsB;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AAEX,QAAMA,YAAW;AAAA,IACfD,OAAK,KAAK,WAAW,kBAAkB;AAAA,IACvC;AAAA,IACA;AAAA,EACF;AAGA,QAAM,kBAAkBA,OAAK,KAAK,aAAa,cAAc;AAC7D,QAAM,qBAAqB,MAAMC,YAAW,SAAS,iBAAiB,MAAM;AAC5E,QAAM,UAAU,KAAK,MAAM,kBAAkB;AAE7C,UAAQ,UAAU;AAAA,IAChB,GAAI,QAAQ,WAAW,CAAC;AAAA,IACxB,MAAM;AAAA,EACR;AAEA,QAAMA,YAAW;AAAA,IACf;AAAA,IACA,KAAK,UAAU,SAAS,MAAM,CAAC;AAAA,IAC/B;AAAA,EACF;AACF;AAEA,eAAsB,eAAe,aAAqB;AAExD,QAAM,cAAcD,OAAK,KAAK,aAAa,UAAU;AACrD,MAAI;AACF,UAAMC,YAAW,OAAO,WAAW;AAAA,EACrC,QAAQ;AAEN;AAAA,EACF;AAEA,QAAM,IAAIC,SAAQ;AAClB,UAAQ,IAAI,IAAI;AAChB,IAAE,MAAM,iDAAiD;AACzD,MAAI;AACF,UAAM,YAAY,WAAW;AAC7B,MAAE,KAAKC,KAAG,MAAM,8DAAyD,CAAC;AAAA,EAC5E,SAAS,OAAY;AACnB,MAAE,KAAKA,KAAG,IAAI,oCAA+B,CAAC;AAC9C,YAAQ,MAAMA,KAAG,IAAI;AAAA,iBAAoB,MAAM,WAAW,KAAK,EAAE,CAAC;AAClE,YAAQ,KAAK,CAAC;AAAA,EAChB;AACA,UAAQ,IAAI,IAAI;AAClB;;;AC/HA,SAAS,WAAAC,gBAAe;AACxB,OAAOC,UAAQ;AACf,OAAOC,kBAAgB;AACvB,OAAOC,YAAU;AAGjB,eAAsB,gBAAgB,aAAqB;AACzD,QAAM,QAAQC,OAAK,KAAK,aAAa,YAAY,YAAY;AAG7D,QAAMC,aAAW,MAAM,OAAO,EAAE,WAAW,KAAK,CAAC;AAGjD,QAAM,WAAW,aAAa,EAAE,KAAK,OAAO,QAAQ,KAAK,CAAC;AAG1D,QAAM,gBAAgBD,OAAK,KAAK,OAAO,cAAc;AACrD,QAAM,eAAe,MAAMC,aAAW,SAAS,eAAe,MAAM;AACpE,QAAM,QAAQ,KAAK,MAAM,YAAY;AAErC,QAAM,OAAO;AACb,QAAM,UAAU;AAChB,QAAM,UAAU;AAChB,QAAM,OAAO;AACb,QAAM,UAAU;AAAA,IACd,mBAAmB;AAAA,EACrB;AAGA,SAAO,MAAM;AACb,SAAO,MAAM;AACb,SAAO,MAAM;AACb,SAAO,MAAM;AACb,SAAO,MAAM;AAEb,QAAMA,aAAW;AAAA,IACf;AAAA,IACA,KAAK,UAAU,OAAO,MAAM,CAAC;AAAA,IAC7B;AAAA,EACF;AAGA,QAAM;AAAA,IACJ;AAAA,IACA,EAAE,KAAK,OAAO,QAAQ,KAAK;AAAA,EAC7B;AAGA,QAAM,WAAW,kBAAkB,EAAE,KAAK,MAAM,CAAC;AACnD;AAEA,eAAsB,mBAAmB,aAAqB;AAE5D,QAAM,cAAcD,OAAK,KAAK,aAAa,UAAU;AACrD,MAAI;AACF,UAAMC,aAAW,OAAO,WAAW;AAAA,EACrC,QAAQ;AAEN;AAAA,EACF;AAEA,QAAM,IAAIC,SAAQ;AAClB,UAAQ,IAAI,IAAI;AAChB,IAAE,MAAM,gEAAgE;AACxE,MAAI;AACF,UAAM,gBAAgB,WAAW;AACjC,MAAE;AAAA,MACAC,KAAG;AAAA,QACD;AAAA,MACF;AAAA,IACF;AAAA,EACF,SAAS,OAAY;AACnB,MAAE,KAAKA,KAAG,IAAI,+CAA0C,CAAC;AACzD,YAAQ,MAAMA,KAAG,IAAI;AAAA,iBAAoB,MAAM,WAAW,KAAK,EAAE,CAAC;AAClE,YAAQ,KAAK,CAAC;AAAA,EAChB;AACA,UAAQ,IAAI,IAAI;AAClB;;;AC7EA,SAAS,WAAAC,UAAS,WAAAC,gBAAe;AACjC,OAAOC,UAAQ;AAEf,OAAOC,kBAAgB;AACvB,OAAOC,YAAU;AAGjB,eAAsB,eAAe;AACnC,SAAO,MAAMC,SAAQ;AAAA,IACnB,SAAS;AAAA,IACT,cAAc;AAAA,EAChB,CAAC;AACH;AAEA,eAAsB,YAAY,aAAqB;AACrD,QAAM,YAAYC,OAAK,KAAK,aAAa,QAAQ,QAAQ;AACzD,QAAM,SAASA,OAAK,KAAK,WAAW,KAAK;AAGzC,QAAMC,aAAW,MAAM,QAAQ,EAAE,WAAW,KAAK,CAAC;AAGlD,QAAM,WAAW,aAAa,EAAE,KAAK,WAAW,QAAQ,KAAK,CAAC;AAG9D,QAAM,oBAAoBD,OAAK,KAAK,WAAW,cAAc;AAC7D,QAAM,mBAAmB,MAAMC,aAAW,SAAS,mBAAmB,MAAM;AAC5E,QAAM,YAAY,KAAK,MAAM,gBAAgB;AAG7C,QAAM,YAAYD,OAAK,KAAK,aAAa,YAAY,QAAQ;AAC7D,MAAI,YAAY;AAChB,MAAI;AACF,UAAMC,aAAW,OAAO,SAAS;AACjC,gBAAY;AAAA,EACd,QAAQ;AAAA,EAAC;AAET,YAAU,OAAO;AACjB,YAAU,UAAU;AACpB,YAAU,UAAU;AACpB,YAAU,OAAO;AACjB,YAAU,OAAO;AACjB,YAAU,UAAU;AAAA,IAClB,KAAK;AAAA,IACL,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AACA,YAAU,kBAAkB;AAAA,IAC1B,sBAAsB;AAAA,EACxB;AAEA,MAAI,WAAW;AACb,cAAU,gBAAgB,gBAAgB,IAAI;AAC9C,cAAU,QAAQ,MAAM,IAAI;AAAA,EAC9B;AAGA,SAAO,UAAU;AACjB,SAAO,UAAU;AACjB,SAAO,UAAU;AAEjB,QAAMA,aAAW;AAAA,IACf;AAAA,IACA,KAAK,UAAU,WAAW,MAAM,CAAC;AAAA,IACjC;AAAA,EACF;AAGA,QAAM,kBAAkB;AAAA,IACtB,SAAS;AAAA,IACT,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,QAAQ;AAAA,IACV;AAAA,IACA,SAAS,CAAC,UAAU;AAAA,EACtB;AAEA,QAAMA,aAAW;AAAA,IACfD,OAAK,KAAK,WAAW,eAAe;AAAA,IACpC,KAAK,UAAU,iBAAiB,MAAM,CAAC;AAAA,IACvC;AAAA,EACF;AAGA,MAAI,WAAW;AACb,UAAM,sBAAsB;AAAA,MAC1B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,EAAE,KAAK,IAAI;AAEX,UAAMC,aAAW;AAAA,MACfD,OAAK,KAAK,WAAW,kBAAkB;AAAA,MACvC;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAGA,QAAM,WAAW,yBAAyB,EAAE,KAAK,WAAW,QAAQ,MAAM,CAAC;AAC3E,QAAM,WAAW,yDAAyD;AAAA,IACxE,KAAK;AAAA,IACL,QAAQ;AAAA,EACV,CAAC;AAGD,QAAM,iBAAiB;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AAEX,QAAMC,aAAW;AAAA,IACfD,OAAK,KAAK,QAAQ,UAAU;AAAA,IAC5B;AAAA,IACA;AAAA,EACF;AACF;AAEA,eAAsB,eAAe,aAAqB;AAExD,QAAM,UAAUA,OAAK,KAAK,aAAa,MAAM;AAC7C,MAAI;AACF,UAAMC,aAAW,OAAO,OAAO;AAAA,EACjC,QAAQ;AAEN;AAAA,EACF;AAEA,QAAM,eAAe,MAAM,aAAa;AAExC,eAAa,YAAY;AAEzB,MAAI,cAAc;AAChB,UAAM,IAAIC,SAAQ;AAClB,YAAQ,IAAI,IAAI;AAChB,MAAE,MAAM,sDAAsD;AAC9D,QAAI;AACF,YAAM,YAAY,WAAW;AAC7B,QAAE;AAAA,QACAC,KAAG;AAAA,UACD;AAAA,QACF;AAAA,MACF;AAAA,IACF,SAAS,OAAY;AACnB,QAAE,KAAKA,KAAG,IAAI,6CAAwC,CAAC;AACvD,cAAQ,MAAMA,KAAG,IAAI;AAAA,iBAAoB,MAAM,WAAW,KAAK,EAAE,CAAC;AAClE,cAAQ,KAAK,CAAC;AAAA,IAChB;AACA,YAAQ,IAAI,IAAI;AAAA,EAClB;AACF;;;ACjLA,SAAS,WAAAC,UAAS,WAAAC,iBAAe;AACjC,OAAOC,UAAQ;AAEf,OAAOC,kBAAgB;AACvB,OAAOC,YAAU;AAGjB,eAAsB,cAAc;AAClC,SAAO,MAAMC,SAAQ;AAAA,IACnB,SAAS;AAAA,IACT,cAAc;AAAA,EAChB,CAAC;AACH;AAEA,eAAsB,WAAW,aAAqB;AAEpD,QAAM,WAAW,2BAA2B,EAAE,KAAK,YAAY,CAAC;AAGhE,QAAM,WAAW,wBAAwB,EAAE,KAAK,YAAY,CAAC;AAG7D,QAAM,gBAAgBC,OAAK,KAAK,aAAa,UAAU,YAAY;AACnE,MAAI,cAAc;AAClB,MAAI;AACF,kBAAc,MAAMC,aAAW,SAAS,eAAe,MAAM;AAAA,EAC/D,QAAQ;AACN,kBAAc;AAAA,EAChB;AAGA,gBAAc,YAAY,QAAQ,aAAa,aAAa;AAG5D,MAAI,CAAC,YAAY,SAAS,WAAW,GAAG;AACtC,kBAAc,YAAY,KAAK,IAAI;AAAA,EACrC;AAEA,QAAMA,aAAW,UAAU,eAAe,aAAa,MAAM;AAE7D,MAAI;AACF,UAAMA,aAAW,MAAM,eAAe,GAAK;AAAA,EAC7C,QAAQ;AAAA,EAAC;AACX;AAEA,eAAsB,cACpB,aACA,gBACA;AACA,MAAI,CAAC,eAAgB;AAErB,QAAM,cAAc,MAAM,YAAY;AAEtC,eAAa,WAAW;AAExB,MAAI,aAAa;AACf,UAAM,IAAIC,UAAQ;AAClB,YAAQ,IAAI,IAAI;AAChB,MAAE,MAAM,2BAA2B;AACnC,QAAI;AACF,YAAM,WAAW,WAAW;AAC5B,QAAE,KAAKC,KAAG,MAAM,mDAA8C,CAAC;AAAA,IACjE,SAAS,OAAY;AACnB,QAAE,KAAKA,KAAG,IAAI,mCAA8B,CAAC;AAC7C,cAAQ,MAAMA,KAAG,IAAI;AAAA,iBAAoB,MAAM,WAAW,KAAK,EAAE,CAAC;AAClE,cAAQ,KAAK,CAAC;AAAA,IAChB;AACA,YAAQ,IAAI,IAAI;AAAA,EAClB;AACF;;;ACrEA,SAAS,cAAc;AAMvB,eAAO,OAA8B,aAAqB;AACxD,QAAM,YAAY,MAAM,OAAO;AAAA,IAC7B,SACE;AAAA,IACF,SAAS;AAAA,MACP;AAAA,QACE,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,cAAc;AAAA,EAChB,CAAC;AAED,eAAa,SAAS;AAEtB,MAAI,cAAc,UAAU;AAC1B,UAAM,YAAY,WAAW;AAE7B,UAAM,eAAe,WAAW;AAAA,EAClC,WAAW,cAAc,SAAS;AAChC,UAAM,WAAW,WAAW;AAAA,EAC9B;AACF;;;ApBlBA,eAAsB,uBACpB,UAA+C,CAAC,GAChD;AAEA,WAAS;AAET,QAAM,aAAa,CAAC,QAAQ,SAAS,CAAC,QAAQ;AAG9C,QAAM,OAAO,MAAM,oBAAoB,UAAU;AACjD,QAAM,cAAcC,OAAK,KAAK,QAAQ,IAAI,GAAG,IAAI;AAEjD,MAAI,QAAQ,OAAO;AACjB,UAAM,mBAAmB,MAAM,WAAW;AAC1C;AAAA,EACF;AAEA,MAAI,QAAQ,MAAM;AAChB,UAAM,kBAAkB,MAAM,WAAW;AACzC;AAAA,EACF;AAGA,QAAM,gBAAgB,MAAM,WAAW;AAGvC,QAAM,YAAY,aAAa,IAAI;AAGnC,QAAM,iBAAiB,MAAM,YAAY,WAAW;AAGpD,QAAM,eAAe,MAAM,0BAA0B;AACrD,QAAM,gBAAgB,MAAM;AAAA,IAC1B,aAAa,SAAS,QAAQ;AAAA,EAChC;AAGA,MAAI,cAAc,SAAS,UAAU,GAAG;AACtC,UAAM,iBAAiB,WAAW;AAAA,EACpC;AAGA,MAAI,cAAc,SAAS,OAAO,GAAG;AACnC,UAAM,cAAc,aAAa,cAAc;AAAA,EACjD;AAGA,MAAI,cAAc,SAAS,QAAQ,GAAG;AACpC,UAAM,eAAe,WAAW;AAAA,EAClC;AAGA,MAAI,cAAc,SAAS,YAAY,GAAG;AACxC,UAAM,mBAAmB,WAAW;AAAA,EACtC;AAGA,MAAI,aAAa,SAAS,QAAQ,GAAG;AACnC,UAAM,eAAe,WAAW;AAAA,EAClC;AAGA,MAAI,aAAa,SAAS,KAAK,GAAG;AAChC,UAAM,OAAU,WAAW;AAAA,EAC7B;AAGA,QAAM,IAAIC,UAAQ;AAClB,UAAQ,IAAI,IAAI;AAChB,IAAE,MAAM,iDAAiD;AACzD,MAAI;AACF,UAAM,WAAW,gBAAgB,EAAE,KAAK,aAAa,QAAQ,KAAK,CAAC;AACnE,MAAE;AAAA,MACAC,KAAG;AAAA,QACD;AAAA,MACF;AAAA,IACF;AAAA,EACF,SAAS,OAAY;AACnB,MAAE,KAAKA,KAAG,IAAI,qDAAgD,CAAC;AAC/D,YAAQ,MAAMA,KAAG,IAAI;AAAA,iBAAoB,MAAM,WAAW,KAAK,EAAE,CAAC;AAAA,EACpE;AACA,UAAQ,IAAI,IAAI;AAGhB,SAAO,MAAM,WAAW;AAC1B;AAEA,eAAe,sBAAsB,WAAoB;AACvD,QAAM,UAAU;AAAA,IACd;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,MACP,MAAM;AAAA,IACR;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,MACP,MAAM;AAAA,IACR;AAAA,EACF;AAEA,MAAI,CAAC,WAAW;AACd,YAAQ;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM,QAAQ,MAAM,YAAY;AAAA,IAC9B,SAAS,YACL,sGACA;AAAA,IACJ;AAAA,IACA,UAAU;AAAA,EACZ,CAAC;AAED,eAAa,KAAK;AAElB,QAAM,gBAAgB;AACtB,MAAI,WAAW;AACb,QAAI,CAAC,cAAc,SAAS,QAAQ,EAAG,eAAc,KAAK,QAAQ;AAClE,QAAI,CAAC,cAAc,SAAS,YAAY,EAAG,eAAc,KAAK,YAAY;AAAA,EAC5E;AAEA,SAAO;AACT;AAEA,eAAe,4BAA4B;AACzC,QAAM,OAAO,MAAM,YAAY;AAAA,IAC7B,SAAS;AAAA,IACT,SAAS;AAAA,MACP;AAAA,QACE,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,UAAU;AAAA,EACZ,CAAC;AAED,eAAa,IAAI;AACjB,SAAO;AACT;;;ADhLA,eAAe,OAAO;AACpB,QAAM,cACJ,QAAQ,KAAK,SAAS,SAAS,KAC/B,QAAQ,KAAK,SAAS,IAAI,KAC1B,QAAQ,IAAI,qBAAqB,UACjC,QAAQ,IAAI,iBAAiB;AAC/B,QAAM,aACJ,QAAQ,KAAK,SAAS,UAAU,KAChC,QAAQ,KAAK,SAAS,QAAQ,KAC9B,QAAQ,KAAK,SAAS,IAAI,KAC1B,QAAQ,IAAI,sBAAsB,UAClC,QAAQ,IAAI,oBAAoB,UAChC,QAAQ,IAAI,iBAAiB;AAC/B,QAAM,uBAAuB,EAAE,OAAO,aAAa,MAAM,WAAW,CAAC;AACvE;AAEA,KAAK,EAAE,MAAM,CAAC,QAAQ;AACpB,UAAQ,MAAMC,KAAG,IAAI,+BAA+B,GAAG,GAAG;AAC1D,UAAQ,KAAK,CAAC;AAChB,CAAC;","names":["pc","path","spinner","pc","pc","fsPromises","path","pc","pc","path","fsPromises","pc","path","spinner","pc","pc","fsPromises","path","spinner","text","path","pc","fsPromises","spinner","text","confirm","spinner","pc","fsPromises","path","confirm","fsPromises","path","spinner","pc","fsPromises","path","pc","path","spinner","pc","path","spinner","pc","confirm","pc","fsPromises","path","spawn","runInteractiveCommand","spawn","path","fsPromises","pc","confirm","pc","fsPromises","path","spawn","confirm","runInteractiveCommand","pc","path","spinner","pc","confirm","spinner","pc","fsPromises","path","confirm","fsPromises","path","spinner","pc","spinner","pc","fsPromises","path","path","fsPromises","spinner","pc","spinner","pc","fsPromises","path","path","fsPromises","spinner","pc","confirm","spinner","pc","fsPromises","path","confirm","path","fsPromises","spinner","pc","confirm","spinner","pc","fsPromises","path","confirm","path","fsPromises","spinner","pc","path","spinner","pc","pc"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-morax",
3
- "version": "1.0.14",
3
+ "version": "1.0.15",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "author": "Ashutosh",