create-morax 1.0.0 → 1.0.1

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.
@@ -0,0 +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>
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  ### _The Next-Generation `pnpm` Monorepo & Workspace Orchestrator_
9
9
 
10
- [![npm version](https://img.shields.io/npm/v/@elitedv/morax.svg?style=for-the-badge&color=8A2BE2)](https://www.npmjs.com/package/@elitedv/morax)
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
11
  [![TypeScript](https://img.shields.io/badge/TypeScript-5.8-blue.svg?style=for-the-badge&logo=typescript)](https://www.typescriptlang.org/)
12
12
  [![pnpm](https://img.shields.io/badge/pnpm-orange?style=for-the-badge&logo=pnpm)](https://pnpm.io/)
13
13
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=for-the-badge)](https://opensource.org/licenses/MIT)
@@ -16,15 +16,15 @@
16
16
  A highly polished, interactive CLI that bootstraps custom, modern, high-performance <b>pnpm workspaces</b> in seconds.
17
17
  </p>
18
18
 
19
- [Quick Start](#-quick-start) • [Features](#-features-matrix) • [Workflow](#-dynamic-workspace-orchestration) • [Contributing](#-contributing)
19
+ [Quick Start](#-quick-start) • [Features](#-features-matrix) • [Contributing](#-contributing)
20
20
 
21
21
  ---
22
22
 
23
23
  </div>
24
24
 
25
- ## 🚀 Quick Start
25
+ ## Quick Start
26
26
 
27
- Initialize your new workspace instantly using:
27
+ Initialize your new workspace instantly using `npm`:
28
28
 
29
29
  ```bash
30
30
  npm create morax@latest
@@ -42,63 +42,10 @@ Or using `bun`:
42
42
  bun create morax
43
43
  ```
44
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
45
  Once setup is complete, navigate into your directory and launch the unified development server:
99
46
 
100
47
  ```bash
101
- cd my-morax-monorepo
48
+ cd my-morax-workspace
102
49
  pnpm dev
103
50
  ```
104
51
 
@@ -120,6 +67,8 @@ pnpm dev
120
67
 
121
68
  We welcome contributions to make Morax even better!
122
69
 
70
+ Please check our [GitHub Repository](https://github.com/Elitedv/morax) for issues, pull requests, and dev instructions.
71
+
123
72
  1. **Fork** the repository
124
73
  2. **Create** your feature branch (`git checkout -b feature/AmazingFeature`)
125
74
  3. **Commit** your changes (`git commit -m 'Add some AmazingFeature'`)
@@ -130,7 +79,7 @@ We welcome contributions to make Morax even better!
130
79
 
131
80
  ## 📝 License
132
81
 
133
- Distributed under the MIT License. See [LICENSE](file:///c:/Users/runak/Coding/Development/Morax/LICENSE) for details.
82
+ Distributed under the MIT License. See [LICENSE](https://github.com/Elitedv/morax/blob/main/LICENSE) for details.
134
83
 
135
84
  ---
136
85
 
package/dist/index.js CHANGED
@@ -58,7 +58,8 @@ async function promptWorkspaceName() {
58
58
  message: "What is the name of your new monorepo workspace?",
59
59
  placeholder: "morax-workspace",
60
60
  validate(value) {
61
- if (value && value.includes(" ")) return "Workspace name cannot contain spaces!";
61
+ if (value && value.includes(" "))
62
+ return "Workspace name cannot contain spaces!";
62
63
  }
63
64
  });
64
65
  handleCancel(nameInput);
@@ -257,7 +258,11 @@ async function setupPrettier(projectPath) {
257
258
  ...pkg.scripts || {},
258
259
  format: "prettier --write ."
259
260
  };
260
- await fsPromises3.writeFile(rootPackagePath, JSON.stringify(pkg, null, 2), "utf8");
261
+ await fsPromises3.writeFile(
262
+ rootPackagePath,
263
+ JSON.stringify(pkg, null, 2),
264
+ "utf8"
265
+ );
261
266
  await runCommand("pnpm format", { cwd: projectPath });
262
267
  }
263
268
  async function runPrettierSetup(projectPath) {
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/tasks/prettier.ts","../src/tasks/git.ts","../src/tasks/husky.ts","../src/core/endcli.ts"],"sourcesContent":["import pc from 'picocolors';\nimport { runWorkspaceScaffolder } from './core/runner.js';\n\nasync function main() {\n await runWorkspaceScaffolder();\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';\n\nimport { startCli } from './startcli.js';\nimport { promptWorkspaceName } from './workspaceName.js';\nimport { makeDirectories } from '../tasks/directories.js';\nimport { runPrettierSetup } from '../tasks/prettier.js';\nimport { runGitSetup } from '../tasks/git.js';\nimport { runHuskySetup } from '../tasks/husky.js';\nimport { endCli } from './endcli.js';\n\nexport async function runWorkspaceScaffolder() {\n // 1. Greet and display premium logo\n startCli();\n\n // 2. Prompt for Name (Optional, defaults to morax-workspace)\n const name = await promptWorkspaceName();\n const projectPath = path.join(process.cwd(), name);\n\n // 3. Prompt and execute directories and workspace config generation\n await makeDirectories(name, projectPath);\n\n // 4. Prompt and execute Git initialization\n const gitInitialized = await runGitSetup(projectPath);\n\n // 5. Prompt and execute Prettier setup\n await runPrettierSetup(projectPath);\n\n // 6. Prompt and execute Husky setup\n await runHuskySetup(projectPath, gitInitialized);\n\n // 7. Complete and show beautiful finish screen\n endCli(name, projectPath);\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(): Promise<string> {\n const nameInput = await text({\n message: 'What is the name of your new monorepo workspace?',\n placeholder: 'morax-workspace',\n validate(value) {\n if (value && value.includes(' ')) return 'Workspace name cannot contain spaces!';\n },\n });\n\n handleCancel(nameInput);\n\n // Fallback to morax-workspace if left blank\n return String(nameInput).trim() || 'morax-workspace';\n}\n","import { isCancel, cancel } from \"@clack/prompts\";\r\nimport pc from \"picocolors\";\r\n\r\nexport default function handleCancel(input:any) {\r\n if (isCancel(input)) {\r\n cancel(pc.red('✖ Morax cancelled.'));\r\n process.exit(0);\r\n }\r\n}","import { multiselect, spinner } from '@clack/prompts';\nimport fsPromises from 'fs/promises';\nimport path from 'path';\nimport pc from 'picocolors';\nimport handleCancel from '../utils/isCancel.js';\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 = await multiselect({\n message: 'Which directories do you want to include in your workspace?',\n options: [\n {\n value: 'apps',\n label: 'apps/*',\n hint: 'For frontend apps and backend services',\n },\n {\n value: 'packages',\n label: 'packages/*',\n hint: 'For shared components, configs, and utilities',\n },\n ],\n required: true,\n });\n\n handleCancel(directories);\n\n const s = spinner();\n console.log('\\n');\n s.start('Generating workspace configs...');\n try {\n await generateWorkspaceConfig(\n name,\n directories as ('apps' | 'packages')[],\n projectPath,\n );\n await createDirectories(\n directories as ('apps' | 'packages')[],\n projectPath,\n );\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}","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\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(command: string, options: RunCommandOptions = {}) {\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 { 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(rootPackagePath, JSON.stringify(pkg, null, 2), 'utf8');\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 { 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 { 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\n .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(projectPath: string, gitInitialized: boolean) {\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 pc from 'picocolors';\nimport { outro } from '@clack/prompts';\nimport boxen from 'boxen';\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 boxen(\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 `💡 Code formatting & git orchestration is fully active.`,\n {\n padding: 0,\n margin: 0,\n borderStyle: 'round',\n borderColor: 'yellow',\n title: pc.black(pc.bold(' Setup Complete ')),\n titleAlignment: 'center',\n },\n ),\n );\n}\n"],"mappings":";;;AAAA,OAAOA,SAAQ;;;ACAf,OAAOC,WAAU;;;ACAjB,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,OAAW;AAC5C,MAAI,SAAS,KAAK,GAAG;AACjB,WAAOA,IAAG,IAAI,yBAAoB,CAAC;AACnC,YAAQ,KAAK,CAAC;AAAA,EAClB;AACJ;;;ADLA,eAAsB,sBAAuC;AAC3D,QAAM,YAAY,MAAM,KAAK;AAAA,IAC3B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,SAAS,OAAO;AACd,UAAI,SAAS,MAAM,SAAS,GAAG,EAAG,QAAO;AAAA,IAC3C;AAAA,EACF,CAAC;AAED,eAAa,SAAS;AAGtB,SAAO,OAAO,SAAS,EAAE,KAAK,KAAK;AACrC;;;AEhBA,SAAS,aAAa,eAAe;AACrC,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,WAAW,SAAiB,UAA6B,CAAC,GAAG;AACjF,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;;;AD1CA,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;;;AD3CA,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,cAAc,MAAM,YAAY;AAAA,IACpC,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,WAAW;AAExB,QAAM,IAAI,QAAQ;AAClB,UAAQ,IAAI,IAAI;AAChB,IAAE,MAAM,iCAAiC;AACzC,MAAI;AACF,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,IACF;AACA,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;;;AGhEA,SAAS,SAAS,WAAAC,gBAAe;AACjC,OAAOC,SAAQ;AAEf,OAAOC,iBAAgB;AACvB,OAAOC,WAAU;AAGjB,eAAsB,iBAAiB;AACrC,SAAO,MAAM,QAAQ;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,MAAK,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,MAAK,KAAK,aAAa,iBAAiB;AAAA,IACxC;AAAA,IACA;AAAA,EACF;AAGA,QAAM,kBAAkBA,MAAK,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,UAAU,iBAAiB,KAAK,UAAU,KAAK,MAAM,CAAC,GAAG,MAAM;AAGhF,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,IAAG,MAAM,gDAA2C,CAAC;AAAA,IAC9D,SAAS,OAAY;AACnB,QAAE,KAAKA,IAAG,IAAI,sCAAiC,CAAC;AAChD,cAAQ,MAAMA,IAAG,IAAI;AAAA,iBAAoB,MAAM,WAAW,KAAK,EAAE,CAAC;AAClE,cAAQ,KAAK,CAAC;AAAA,IAChB;AACA,YAAQ,IAAI,IAAI;AAAA,EAClB;AACF;;;ACjGA,SAAS,WAAAC,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,SAAS,WAAAC,UAAS,WAAAC,gBAAe;AACjC,OAAOC,SAAQ;AAEf,OAAOC,iBAAgB;AACvB,OAAOC,WAAU;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,MAAK,KAAK,aAAa,UAAU,YAAY;AACnE,MAAI,cAAc;AAClB,MAAI;AACF,kBAAc,MAAMC,YAAW,SAAS,eAAe,MAAM;AAAA,EAC/D,QAAQ;AACN,kBAAc;AAAA,EAChB;AAGA,gBAAc,YACX,QAAQ,aAAa,aAAa;AAGrC,MAAI,CAAC,YAAY,SAAS,WAAW,GAAG;AACtC,kBAAc,YAAY,KAAK,IAAI;AAAA,EACrC;AAEA,QAAMA,YAAW,UAAU,eAAe,aAAa,MAAM;AAE7D,MAAI;AACF,UAAMA,YAAW,MAAM,eAAe,GAAK;AAAA,EAC7C,QAAQ;AAAA,EAAE;AACZ;AAEA,eAAsB,cAAc,aAAqB,gBAAyB;AAChF,MAAI,CAAC,eAAgB;AAErB,QAAM,cAAc,MAAM,YAAY;AAEtC,eAAa,WAAW;AAExB,MAAI,aAAa;AACf,UAAM,IAAIC,SAAQ;AAClB,YAAQ,IAAI,IAAI;AAChB,MAAE,MAAM,2BAA2B;AACnC,QAAI;AACF,YAAM,WAAW,WAAW;AAC5B,QAAE,KAAKC,IAAG,MAAM,mDAA8C,CAAC;AAAA,IACjE,SAAS,OAAY;AACnB,QAAE,KAAKA,IAAG,IAAI,mCAA8B,CAAC;AAC7C,cAAQ,MAAMA,IAAG,IAAI;AAAA,iBAAoB,MAAM,WAAW,KAAK,EAAE,CAAC;AAClE,cAAQ,KAAK,CAAC;AAAA,IAChB;AACA,YAAQ,IAAI,IAAI;AAAA,EAClB;AACF;;;ACnEA,OAAOC,SAAQ;AACf,SAAS,aAAa;AACtB,OAAOC,YAAW;AAEX,SAAS,OAAO,MAAc,aAAqB;AAExD,QAAMD,IAAG,OAAO,2CAA2C,CAAC;AAE5D,UAAQ;AAAA,IACNC;AAAA,MACE,UAAKD,IAAG,KAAK,kBAAkB,CAAC,IAAIA,IAAG,OAAO,IAAI,CAAC;AAAA,YACtCA,IAAG,KAAK,WAAW,CAAC;AAAA;AAAA,EAC9BA,IAAG,KAAK,sBAAsB,CAAC;AAAA,MAC3BA,IAAG,KAAK,MAAM,IAAI,EAAE,CAAC;AAAA,MACrBA,IAAG,KAAK,UAAU,CAAC;AAAA;AAAA;AAAA,MAE1B;AAAA,QACE,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,aAAa;AAAA,QACb,OAAOA,IAAG,MAAMA,IAAG,KAAK,kBAAkB,CAAC;AAAA,QAC3C,gBAAgB;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AACF;;;AVhBA,eAAsB,yBAAyB;AAE7C,WAAS;AAGT,QAAM,OAAO,MAAM,oBAAoB;AACvC,QAAM,cAAcE,MAAK,KAAK,QAAQ,IAAI,GAAG,IAAI;AAGjD,QAAM,gBAAgB,MAAM,WAAW;AAGvC,QAAM,iBAAiB,MAAM,YAAY,WAAW;AAGpD,QAAM,iBAAiB,WAAW;AAGlC,QAAM,cAAc,aAAa,cAAc;AAG/C,SAAO,MAAM,WAAW;AAC1B;;;AD7BA,eAAe,OAAO;AACpB,QAAM,uBAAuB;AAC/B;AAEA,KAAK,EAAE,MAAM,CAAC,QAAQ;AACpB,UAAQ,MAAMC,IAAG,IAAI,+BAA+B,GAAG,GAAG;AAC1D,UAAQ,KAAK,CAAC;AAChB,CAAC;","names":["pc","path","pc","fsPromises","path","pc","pc","path","fsPromises","pc","spinner","pc","fsPromises","path","fsPromises","path","spinner","pc","confirm","spinner","pc","fsPromises","path","confirm","fsPromises","path","spinner","pc","confirm","spinner","pc","fsPromises","path","confirm","path","fsPromises","spinner","pc","pc","boxen","path","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/tasks/prettier.ts","../src/tasks/git.ts","../src/tasks/husky.ts","../src/core/endcli.ts"],"sourcesContent":["import pc from 'picocolors';\nimport { runWorkspaceScaffolder } from './core/runner.js';\n\nasync function main() {\n await runWorkspaceScaffolder();\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';\n\nimport { startCli } from './startcli.js';\nimport { promptWorkspaceName } from './workspaceName.js';\nimport { makeDirectories } from '../tasks/directories.js';\nimport { runPrettierSetup } from '../tasks/prettier.js';\nimport { runGitSetup } from '../tasks/git.js';\nimport { runHuskySetup } from '../tasks/husky.js';\nimport { endCli } from './endcli.js';\n\nexport async function runWorkspaceScaffolder() {\n // 1. Greet and display premium logo\n startCli();\n\n // 2. Prompt for Name (Optional, defaults to morax-workspace)\n const name = await promptWorkspaceName();\n const projectPath = path.join(process.cwd(), name);\n\n // 3. Prompt and execute directories and workspace config generation\n await makeDirectories(name, projectPath);\n\n // 4. Prompt and execute Git initialization\n const gitInitialized = await runGitSetup(projectPath);\n\n // 5. Prompt and execute Prettier setup\n await runPrettierSetup(projectPath);\n\n // 6. Prompt and execute Husky setup\n await runHuskySetup(projectPath, gitInitialized);\n\n // 7. Complete and show beautiful finish screen\n endCli(name, projectPath);\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(): Promise<string> {\n const nameInput = await text({\n message: 'What is the name of your new monorepo workspace?',\n placeholder: 'morax-workspace',\n validate(value) {\n if (value && value.includes(' '))\n return 'Workspace name cannot contain spaces!';\n },\n });\n\n handleCancel(nameInput);\n\n // Fallback to morax-workspace if left blank\n return String(nameInput).trim() || 'morax-workspace';\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 { multiselect, spinner } from '@clack/prompts';\nimport fsPromises from 'fs/promises';\nimport path from 'path';\nimport pc from 'picocolors';\nimport handleCancel from '../utils/isCancel.js';\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 = await multiselect({\n message: 'Which directories do you want to include in your workspace?',\n options: [\n {\n value: 'apps',\n label: 'apps/*',\n hint: 'For frontend apps and backend services',\n },\n {\n value: 'packages',\n label: 'packages/*',\n hint: 'For shared components, configs, and utilities',\n },\n ],\n required: true,\n });\n\n handleCancel(directories);\n\n const s = spinner();\n console.log('\\n');\n s.start('Generating workspace configs...');\n try {\n await generateWorkspaceConfig(\n name,\n directories as ('apps' | 'packages')[],\n projectPath,\n );\n await createDirectories(\n directories as ('apps' | 'packages')[],\n projectPath,\n );\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 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 { 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 { 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 { 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 pc from 'picocolors';\nimport { outro } from '@clack/prompts';\nimport boxen from 'boxen';\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 boxen(\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 `💡 Code formatting & git orchestration is fully active.`,\n {\n padding: 0,\n margin: 0,\n borderStyle: 'round',\n borderColor: 'yellow',\n title: pc.black(pc.bold(' Setup Complete ')),\n titleAlignment: 'center',\n },\n ),\n );\n}\n"],"mappings":"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","names":["pc","path","pc","fsPromises","path","pc","pc","path","fsPromises","pc","spinner","pc","fsPromises","path","fsPromises","path","spinner","pc","confirm","spinner","pc","fsPromises","path","confirm","fsPromises","path","spinner","pc","confirm","spinner","pc","fsPromises","path","confirm","path","fsPromises","spinner","pc","pc","boxen","path","pc"]}
package/package.json CHANGED
@@ -1,10 +1,18 @@
1
1
  {
2
2
  "name": "create-morax",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "author": "Ashutosh",
7
7
  "license": "MIT",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/Elitedv/morax.git"
11
+ },
12
+ "bugs": {
13
+ "url": "https://github.com/Elitedv/morax/issues"
14
+ },
15
+ "homepage": "https://github.com/Elitedv/morax#readme",
8
16
  "bin": {
9
17
  "create-morax": "dist/index.js",
10
18
  "morax": "dist/index.js"
@@ -12,7 +20,9 @@
12
20
  "scripts": {
13
21
  "dev": "npx tsx src/index.ts",
14
22
  "build": "tsup",
15
- "start": "node dist/index.js"
23
+ "start": "node dist/index.js",
24
+ "prepublishOnly": "node -e \"const fs = require('fs'); fs.renameSync('README.md', 'README.github.md'); fs.renameSync('README.npm.md', 'README.md')\"",
25
+ "postpublish": "node -e \"const fs = require('fs'); fs.renameSync('README.md', 'README.npm.md'); fs.renameSync('README.github.md', 'README.md')\""
16
26
  },
17
27
  "files": [
18
28
  "dist"