create-turbo-mono 1.0.6 → 1.0.7

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 (55) hide show
  1. package/.claude/settings.local.json +10 -0
  2. package/README.md +82 -27
  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 +457 -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 +470 -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 +934 -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 +30 -14
  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 +502 -0
  49. package/src/templates/docs.ts +74 -0
  50. package/src/templates/frontend.ts +498 -0
  51. package/src/templates/root.ts +216 -0
  52. package/src/templates/shared.ts +1065 -0
  53. package/src/utils.ts +31 -0
  54. package/tsconfig.json +20 -0
  55. package/pnpm-workspace.yaml +0 -4
@@ -0,0 +1,10 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(npm view:*)",
5
+ "Bash(python3:*)",
6
+ "Bash(npm install:*)",
7
+ "Bash(npm run build:*)"
8
+ ]
9
+ }
10
+ }
package/README.md CHANGED
@@ -1,32 +1,52 @@
1
- # my-monorepo
1
+ # create-turbo-mono
2
2
 
3
- A monorepo project with NestJS backends and Next.js frontends.
3
+ A production-ready monorepo scaffolding tool with **NestJS** backend, **Next.js** frontend, **Prisma** ORM, **Docker**, and **CI/CD** — all wired up with **Turborepo** and **pnpm**.
4
4
 
5
- ## Getting Started
5
+ ## Quick Start
6
+
7
+ ```bash
8
+ npx create-turbo-mono my-app
9
+ ```
6
10
 
7
11
  ### Prerequisites
8
12
 
9
13
  - Node.js >= 18
10
14
  - pnpm >= 8
15
+ - Docker (optional, for containerized development)
11
16
 
12
- ### Installation
17
+ ### Setup
13
18
 
14
19
  ```bash
20
+ cd my-app
15
21
  pnpm install
22
+ cp .env.example .env
16
23
  ```
17
24
 
18
25
  ### Development
19
26
 
20
27
  ```bash
21
- # Start all apps in development mode
28
+ # Start all apps
22
29
  pnpm dev
23
30
 
31
+ # Start specific apps (backend + frontend)
32
+ pnpm dev:all
33
+
34
+ # Start local infrastructure (Postgres + Redis)
35
+ docker compose -f docker-compose.local.yml up -d
36
+
24
37
  # Build all apps
25
38
  pnpm build
26
39
 
27
40
  # Type checking
28
41
  pnpm type-check
29
42
 
43
+ # Linting
44
+ pnpm lint
45
+ ```
46
+
47
+ ### Database
48
+
49
+ ```bash
30
50
  # Generate Prisma client
31
51
  pnpm db:generate
32
52
 
@@ -40,40 +60,75 @@ pnpm db:studio
40
60
  ## Project Structure
41
61
 
42
62
  ```
43
- my-monorepo/
44
63
  ├── apps/
45
- │ ├── backend/ # NestJS backend apps
46
- │ └── frontend/ # Next.js frontend apps
64
+ │ ├── backend/
65
+ └── api/ # NestJS API service
66
+ │ └── frontend/
67
+ │ └── web/ # Next.js web application
47
68
  ├── packages/
48
- │ ├── database/ # Prisma schema and client
49
- │ ├── shared-backend/ # Backend utilities and types
50
- │ ├── shared-frontend/ # Frontend components and hooks
51
- │ ├── shared-common/ # Universal utilities
52
- │ └── tsconfig/ # Shared TypeScript configs
53
- └── turbo.json # Turborepo configuration
69
+ │ ├── database/ # Prisma schema and client
70
+ │ ├── shared-backend/ # Backend utilities and types
71
+ │ ├── shared-frontend/ # Frontend components and hooks
72
+ │ ├── shared-common/ # Universal utilities (frontend + backend)
73
+ │ └── tsconfig/ # Shared TypeScript configurations
74
+ ├── scripts/
75
+ │ ├── deploy.sh # Production deployment script
76
+ │ └── rollback.sh # Rollback to previous release
77
+ ├── Dockerfile # Multi-stage Docker build
78
+ ├── docker-compose.local.yml # Local dev (Postgres + Redis only)
79
+ ├── docker-compose.dev.yml # Full dev environment in Docker
80
+ ├── docker-compose.prod.yml # Production deployment
81
+ └── turbo.json # Turborepo pipeline config
54
82
  ```
55
83
 
56
- ## Packages
84
+ ## What's Included
57
85
 
58
- ### @repo/database
59
- Prisma schema, migrations, and database client.
86
+ - **Turborepo** — Fast, incremental builds with caching
87
+ - **pnpm workspaces** Efficient dependency management
88
+ - **NestJS** — Backend API with modular architecture
89
+ - **Next.js** — Frontend with SSR/SSG support
90
+ - **Prisma** — Type-safe database ORM with migrations
91
+ - **Docker** — Multi-stage builds for dev and production
92
+ - **CI/CD** — GitHub Actions workflows for main and staging
93
+ - **Shared packages** — Reusable code across apps (types, utils, components)
94
+ - **TypeScript** — Strict configs for NestJS, Next.js, and React libraries
60
95
 
61
- ### @repo/shared-backend
62
- Shared backend utilities, middleware, and types.
96
+ ## Docker
63
97
 
64
- ### @repo/shared-frontend
65
- Shared frontend components, hooks, and utilities.
98
+ ```bash
99
+ # Local infrastructure only (recommended for development)
100
+ docker compose -f docker-compose.local.yml up -d
66
101
 
67
- ### @repo/shared-common
68
- Universal utilities that can be used by both frontend and backend.
102
+ # Full development environment
103
+ docker compose -f docker-compose.dev.yml up
104
+
105
+ # Production
106
+ docker compose -f docker-compose.prod.yml up -d
107
+ ```
108
+
109
+ ## Deployment
110
+
111
+ The included CI/CD pipelines (`.github/workflows/`) handle:
112
+
113
+ - **Main branch** — Builds Docker images, pushes to GHCR, deploys to production
114
+ - **Develop/Staging branch** — Builds and deploys to staging environment
115
+
116
+ Manual deployment:
117
+
118
+ ```bash
119
+ ./scripts/deploy.sh <tag>
120
+ ./scripts/rollback.sh
121
+ ```
69
122
 
70
123
  ## Adding New Apps
71
124
 
72
- ### Backend App
73
- Create a new NestJS app in `apps/backend/` and add it to `pnpm-workspace.yaml`.
125
+ ### Backend
126
+
127
+ Create a new NestJS app in `apps/backend/` — it's automatically picked up by the pnpm workspace.
128
+
129
+ ### Frontend
74
130
 
75
- ### Frontend App
76
- Create a new Next.js app in `apps/frontend/` and add it to `pnpm-workspace.yaml`.
131
+ Create a new Next.js app in `apps/frontend/` — it's automatically picked up by the pnpm workspace.
77
132
 
78
133
  ## License
79
134
 
@@ -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"}