create-turbo-mono 1.0.0

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.
Files changed (54) hide show
  1. package/.claude/settings.local.json +14 -0
  2. package/README.md +182 -0
  3. package/dist/index.d.ts +3 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +118 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/scaffold.d.ts +8 -0
  8. package/dist/scaffold.d.ts.map +1 -0
  9. package/dist/scaffold.js +42 -0
  10. package/dist/scaffold.js.map +1 -0
  11. package/dist/templates/backend.d.ts +2 -0
  12. package/dist/templates/backend.d.ts.map +1 -0
  13. package/dist/templates/backend.js +424 -0
  14. package/dist/templates/backend.js.map +1 -0
  15. package/dist/templates/cicd.d.ts +3 -0
  16. package/dist/templates/cicd.d.ts.map +1 -0
  17. package/dist/templates/cicd.js +307 -0
  18. package/dist/templates/cicd.js.map +1 -0
  19. package/dist/templates/docker.d.ts +3 -0
  20. package/dist/templates/docker.d.ts.map +1 -0
  21. package/dist/templates/docker.js +458 -0
  22. package/dist/templates/docker.js.map +1 -0
  23. package/dist/templates/docs.d.ts +3 -0
  24. package/dist/templates/docs.d.ts.map +1 -0
  25. package/dist/templates/docs.js +71 -0
  26. package/dist/templates/docs.js.map +1 -0
  27. package/dist/templates/frontend.d.ts +2 -0
  28. package/dist/templates/frontend.d.ts.map +1 -0
  29. package/dist/templates/frontend.js +441 -0
  30. package/dist/templates/frontend.js.map +1 -0
  31. package/dist/templates/root.d.ts +3 -0
  32. package/dist/templates/root.d.ts.map +1 -0
  33. package/dist/templates/root.js +210 -0
  34. package/dist/templates/root.js.map +1 -0
  35. package/dist/templates/shared.d.ts +2 -0
  36. package/dist/templates/shared.d.ts.map +1 -0
  37. package/dist/templates/shared.js +696 -0
  38. package/dist/templates/shared.js.map +1 -0
  39. package/dist/utils.d.ts +5 -0
  40. package/dist/utils.d.ts.map +1 -0
  41. package/dist/utils.js +34 -0
  42. package/dist/utils.js.map +1 -0
  43. package/package.json +40 -0
  44. package/src/index.ts +138 -0
  45. package/src/scaffold.ts +51 -0
  46. package/src/templates/backend.ts +460 -0
  47. package/src/templates/cicd.ts +334 -0
  48. package/src/templates/docker.ts +503 -0
  49. package/src/templates/docs.ts +74 -0
  50. package/src/templates/frontend.ts +469 -0
  51. package/src/templates/root.ts +216 -0
  52. package/src/templates/shared.ts +820 -0
  53. package/src/utils.ts +31 -0
  54. package/tsconfig.json +20 -0
@@ -0,0 +1,14 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(npm install:*)",
5
+ "Bash(npm run build:*)",
6
+ "Bash(npx turbo:*)",
7
+ "Bash(npx prisma generate:*)",
8
+ "Bash(npx tsx:*)",
9
+ "Bash(pnpm build:*)"
10
+ ],
11
+ "deny": [],
12
+ "ask": []
13
+ }
14
+ }
package/README.md ADDED
@@ -0,0 +1,182 @@
1
+ # @abdulahad/create-repo
2
+
3
+ A CLI tool to quickly scaffold a production-ready monorepo with NestJS backends and Next.js frontends.
4
+
5
+ ## Features
6
+
7
+ ✨ **Interactive CLI** - Prompts for project name, backend apps, and frontend apps
8
+ šŸ—ļø **Turborepo** - Fast, modern monorepo build system
9
+ šŸ“¦ **Workspace Management** - Using pnpm workspaces
10
+ šŸ”„ **NestJS Backends** - Pre-configured with TypeScript, validation, and CORS
11
+ āš›ļø **Next.js Frontends** - Page Router setup with TypeScript
12
+ šŸ—„ļø **Prisma Integration** - Shared database package with example schema
13
+ šŸ”§ **Shared Packages** - Utilities for backend, frontend, and common code
14
+ šŸ“ **TypeScript** - Fully typed across all packages
15
+ šŸŽØ **Ready to Use** - Just run and start coding!
16
+
17
+ ## Usage
18
+
19
+ ```bash
20
+ # Using npx (recommended)
21
+ npx @abdulahad/create-repo my-awesome-app
22
+
23
+ # Or with a custom project name
24
+ npx @abdulahad/create-repo
25
+ ```
26
+
27
+ The CLI will prompt you for:
28
+ 1. Project name (if not provided)
29
+ 2. Backend app names (comma-separated)
30
+ 3. Frontend app names (comma-separated)
31
+
32
+ ## Example
33
+
34
+ ```bash
35
+ $ npx @abdulahad/create-repo my-project
36
+
37
+ šŸš€ Welcome to Monorepo Generator!
38
+
39
+ ? Enter backend app names (comma-separated): api, admin-api
40
+ ? Enter frontend app names (comma-separated): web, admin
41
+
42
+ ✨ Creating your monorepo...
43
+ šŸ“¦ Project: my-project
44
+ šŸ“‚ Backends: api, admin-api
45
+ šŸŽØ Frontends: web, admin
46
+
47
+ āœ… Your monorepo is ready!
48
+ ```
49
+
50
+ ## Generated Structure
51
+
52
+ ```
53
+ my-project/
54
+ ā”œā”€ā”€ apps/
55
+ │ ā”œā”€ā”€ backend/
56
+ │ │ ā”œā”€ā”€ api/ # NestJS app
57
+ │ │ └── admin-api/ # NestJS app
58
+ │ └── frontend/
59
+ │ ā”œā”€ā”€ web/ # Next.js app
60
+ │ └── admin/ # Next.js app
61
+ ā”œā”€ā”€ packages/
62
+ │ ā”œā”€ā”€ database/ # Prisma schema & client
63
+ │ ā”œā”€ā”€ shared-backend/ # Backend utilities
64
+ │ ā”œā”€ā”€ shared-frontend/ # Frontend components & hooks
65
+ │ ā”œā”€ā”€ shared-common/ # Universal utilities
66
+ │ └── tsconfig/ # Shared TypeScript configs
67
+ ā”œā”€ā”€ package.json
68
+ ā”œā”€ā”€ pnpm-workspace.yaml
69
+ └── turbo.json
70
+ ```
71
+
72
+ ## What's Included
73
+
74
+ ### Backend Apps (NestJS)
75
+ - TypeScript configuration
76
+ - Global validation pipes
77
+ - CORS enabled
78
+ - Environment variable setup
79
+ - Health check endpoint
80
+ - Shared backend utilities imported
81
+
82
+ ### Frontend Apps (Next.js)
83
+ - Page Router setup
84
+ - TypeScript configuration
85
+ - CSS Modules
86
+ - Environment variables
87
+ - Shared components imported
88
+
89
+ ### Shared Packages
90
+
91
+ #### @repo/database
92
+ - Prisma schema with example models
93
+ - Configured Prisma client
94
+ - Migration scripts
95
+
96
+ #### @repo/shared-backend
97
+ - Logger utility
98
+ - API response helpers
99
+ - Common types (Pagination, etc.)
100
+
101
+ #### @repo/shared-frontend
102
+ - React components (Button, etc.)
103
+ - Custom hooks (useLocalStorage)
104
+ - Utility functions
105
+
106
+ #### @repo/shared-common
107
+ - Validation utilities (isEmail, isValidUrl)
108
+ - Formatting helpers (formatDate, capitalize)
109
+ - Shared constants and types
110
+
111
+ ## After Creation
112
+
113
+ ```bash
114
+ cd my-project
115
+
116
+ # Install dependencies
117
+ pnpm install
118
+
119
+ # Start all apps in development
120
+ pnpm dev
121
+
122
+ # Build all packages and apps
123
+ pnpm build
124
+
125
+ # Generate Prisma client
126
+ pnpm db:generate
127
+
128
+ # Run database migrations
129
+ pnpm db:migrate
130
+
131
+ # Open Prisma Studio
132
+ pnpm db:studio
133
+ ```
134
+
135
+ ## Requirements
136
+
137
+ - Node.js >= 18
138
+ - pnpm >= 8 (optional - CLI will prompt to install if missing)
139
+
140
+ If you don't have pnpm installed:
141
+ ```bash
142
+ npm install -g pnpm
143
+ ```
144
+
145
+ > **Note:** The CLI will detect if pnpm is missing and provide instructions. You can still create the project structure without pnpm, then install dependencies manually later.
146
+
147
+ ## Development
148
+
149
+ To work on this CLI tool:
150
+
151
+ ```bash
152
+ # Clone the repo
153
+ git clone <your-repo>
154
+ cd template-repo
155
+
156
+ # Install dependencies
157
+ npm install
158
+
159
+ # Build
160
+ npm run build
161
+
162
+ # Test locally
163
+ node dist/index.js my-test-project
164
+ ```
165
+
166
+ ## Publishing
167
+
168
+ ```bash
169
+ # Build the project
170
+ npm run build
171
+
172
+ # Publish to npm
173
+ npm publish
174
+ ```
175
+
176
+ ## License
177
+
178
+ MIT
179
+
180
+ ## Author
181
+
182
+ Abdul Ahad
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,118 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const commander_1 = require("commander");
8
+ const prompts_1 = __importDefault(require("prompts"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const fs_extra_1 = __importDefault(require("fs-extra"));
11
+ const chalk_1 = __importDefault(require("chalk"));
12
+ const ora_1 = __importDefault(require("ora"));
13
+ const scaffold_1 = require("./scaffold");
14
+ const utils_1 = require("./utils");
15
+ const program = new commander_1.Command();
16
+ program
17
+ .name('create-repo')
18
+ .description('Create a new monorepo with NestJS and Next.js apps')
19
+ .argument('[project-name]', 'Name of the project')
20
+ .action(async (projectName) => {
21
+ console.log(chalk_1.default.blue.bold('\nšŸš€ Welcome to Monorepo Generator!\n'));
22
+ const questions = [];
23
+ if (!projectName) {
24
+ questions.push({
25
+ type: 'text',
26
+ name: 'projectName',
27
+ message: 'What is your project name?',
28
+ initial: 'my-monorepo',
29
+ validate: (value) => value.length > 0 ? true : 'Project name is required',
30
+ });
31
+ }
32
+ questions.push({
33
+ type: 'list',
34
+ name: 'backends',
35
+ message: 'Enter backend app names (comma-separated):',
36
+ initial: 'api',
37
+ separator: ',',
38
+ format: (val) => val.map(v => v.trim()).filter(Boolean),
39
+ }, {
40
+ type: 'list',
41
+ name: 'frontends',
42
+ message: 'Enter frontend app names (comma-separated):',
43
+ initial: 'web',
44
+ separator: ',',
45
+ format: (val) => val.map(v => v.trim()).filter(Boolean),
46
+ });
47
+ const answers = await (0, prompts_1.default)(questions, {
48
+ onCancel: () => {
49
+ console.log(chalk_1.default.red('\nāŒ Operation cancelled'));
50
+ process.exit(0);
51
+ },
52
+ });
53
+ const config = {
54
+ projectName: projectName || answers.projectName,
55
+ targetDir: path_1.default.join(process.cwd(), projectName || answers.projectName),
56
+ backends: answers.backends,
57
+ frontends: answers.frontends,
58
+ };
59
+ // Check if directory exists
60
+ if (fs_extra_1.default.existsSync(config.targetDir)) {
61
+ const { overwrite } = await (0, prompts_1.default)({
62
+ type: 'confirm',
63
+ name: 'overwrite',
64
+ message: `Directory ${chalk_1.default.yellow(config.projectName)} already exists. Overwrite?`,
65
+ initial: false,
66
+ });
67
+ if (!overwrite) {
68
+ console.log(chalk_1.default.red('\nāŒ Operation cancelled'));
69
+ process.exit(0);
70
+ }
71
+ await fs_extra_1.default.remove(config.targetDir);
72
+ }
73
+ console.log(chalk_1.default.green('\n✨ Creating your monorepo...\n'));
74
+ console.log(chalk_1.default.gray(`šŸ“¦ Project: ${config.projectName}`));
75
+ console.log(chalk_1.default.gray(`šŸ“‚ Backends: ${config.backends.join(', ')}`));
76
+ console.log(chalk_1.default.gray(`šŸŽØ Frontends: ${config.frontends.join(', ')}\n`));
77
+ const spinner = (0, ora_1.default)('Scaffolding project...').start();
78
+ try {
79
+ await (0, scaffold_1.scaffoldProject)(config);
80
+ spinner.succeed('Project scaffolded successfully!');
81
+ // Check if pnpm is installed
82
+ const hasPnpm = await (0, utils_1.checkPnpmInstalled)();
83
+ if (hasPnpm) {
84
+ spinner.start('Installing dependencies...');
85
+ try {
86
+ await (0, utils_1.installDependencies)(config.targetDir);
87
+ spinner.succeed('Dependencies installed!');
88
+ }
89
+ catch (error) {
90
+ spinner.warn('Failed to install dependencies');
91
+ console.log(chalk_1.default.yellow('\nāš ļø Could not install dependencies automatically.'));
92
+ console.log(chalk_1.default.yellow(' Please run manually: cd ' + config.projectName + ' && pnpm install\n'));
93
+ }
94
+ }
95
+ else {
96
+ spinner.warn('pnpm not found - skipping dependency installation');
97
+ console.log(chalk_1.default.yellow('\nāš ļø pnpm is not installed. Install it with:'));
98
+ console.log(chalk_1.default.yellow(' npm install -g pnpm\n'));
99
+ }
100
+ console.log(chalk_1.default.green.bold('\nāœ… Your monorepo is ready!\n'));
101
+ console.log(chalk_1.default.blue('šŸ“– Next steps:\n'));
102
+ console.log(chalk_1.default.gray(` cd ${config.projectName}`));
103
+ if (!hasPnpm) {
104
+ console.log(chalk_1.default.yellow(' npm install -g pnpm # Install pnpm first'));
105
+ }
106
+ console.log(chalk_1.default.gray(' pnpm install # Install dependencies'));
107
+ console.log(chalk_1.default.gray(' pnpm db:generate # Generate Prisma client'));
108
+ console.log(chalk_1.default.gray(' pnpm dev # Start all apps'));
109
+ console.log(chalk_1.default.gray(' pnpm build # Build all apps\n'));
110
+ }
111
+ catch (error) {
112
+ spinner.fail('Failed to create project');
113
+ console.error(chalk_1.default.red(error));
114
+ process.exit(1);
115
+ }
116
+ });
117
+ program.parse();
118
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface ProjectConfig {
2
+ projectName: string;
3
+ targetDir: string;
4
+ backends: string[];
5
+ frontends: string[];
6
+ }
7
+ export declare function scaffoldProject(config: ProjectConfig): Promise<void>;
8
+ //# sourceMappingURL=scaffold.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAiC1E"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.scaffoldProject = scaffoldProject;
7
+ const fs_extra_1 = __importDefault(require("fs-extra"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const root_1 = require("./templates/root");
10
+ const backend_1 = require("./templates/backend");
11
+ const frontend_1 = require("./templates/frontend");
12
+ const shared_1 = require("./templates/shared");
13
+ const docker_1 = require("./templates/docker");
14
+ const cicd_1 = require("./templates/cicd");
15
+ const docs_1 = require("./templates/docs");
16
+ async function scaffoldProject(config) {
17
+ const { targetDir, backends, frontends } = config;
18
+ // Create directory structure
19
+ await fs_extra_1.default.ensureDir(targetDir);
20
+ await fs_extra_1.default.ensureDir(path_1.default.join(targetDir, 'apps', 'backend'));
21
+ await fs_extra_1.default.ensureDir(path_1.default.join(targetDir, 'apps', 'frontend'));
22
+ await fs_extra_1.default.ensureDir(path_1.default.join(targetDir, 'packages'));
23
+ // Create root configuration files
24
+ await (0, root_1.createRootFiles)(config);
25
+ // Create backend apps
26
+ for (const backendName of backends) {
27
+ await (0, backend_1.createBackendApp)(targetDir, backendName);
28
+ }
29
+ // Create frontend apps
30
+ for (const frontendName of frontends) {
31
+ await (0, frontend_1.createFrontendApp)(targetDir, frontendName);
32
+ }
33
+ // Create shared packages
34
+ await (0, shared_1.createSharedPackages)(targetDir);
35
+ // Create Docker files
36
+ await (0, docker_1.createDockerFiles)(config);
37
+ // Create CI/CD files
38
+ await (0, cicd_1.createCICDFiles)(config);
39
+ // Create documentation
40
+ await (0, docs_1.createDocumentation)(config);
41
+ }
42
+ //# sourceMappingURL=scaffold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":";;;;;AAiBA,0CAiCC;AAlDD,wDAA0B;AAC1B,gDAAwB;AACxB,2CAAmD;AACnD,iDAAuD;AACvD,mDAAyD;AACzD,+CAA0D;AAC1D,+CAAuD;AACvD,2CAAmD;AACnD,2CAAuD;AAShD,KAAK,UAAU,eAAe,CAAC,MAAqB;IACzD,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;IAElD,6BAA6B;IAC7B,MAAM,kBAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC9B,MAAM,kBAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IAC5D,MAAM,kBAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IAC7D,MAAM,kBAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;IAErD,kCAAkC;IAClC,MAAM,IAAA,sBAAe,EAAC,MAAM,CAAC,CAAC;IAE9B,sBAAsB;IACtB,KAAK,MAAM,WAAW,IAAI,QAAQ,EAAE,CAAC;QACnC,MAAM,IAAA,0BAAgB,EAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACjD,CAAC;IAED,uBAAuB;IACvB,KAAK,MAAM,YAAY,IAAI,SAAS,EAAE,CAAC;QACrC,MAAM,IAAA,4BAAiB,EAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACnD,CAAC;IAED,yBAAyB;IACzB,MAAM,IAAA,6BAAoB,EAAC,SAAS,CAAC,CAAC;IAEtC,sBAAsB;IACtB,MAAM,IAAA,0BAAiB,EAAC,MAAM,CAAC,CAAC;IAEhC,qBAAqB;IACrB,MAAM,IAAA,sBAAe,EAAC,MAAM,CAAC,CAAC;IAE9B,uBAAuB;IACvB,MAAM,IAAA,0BAAmB,EAAC,MAAM,CAAC,CAAC;AACpC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function createBackendApp(targetDir: string, appName: string): Promise<void>;
2
+ //# sourceMappingURL=backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/templates/backend.ts"],"names":[],"mappings":"AAIA,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAocf"}