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.
- package/.claude/settings.local.json +14 -0
- package/README.md +182 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +118 -0
- package/dist/index.js.map +1 -0
- package/dist/scaffold.d.ts +8 -0
- package/dist/scaffold.d.ts.map +1 -0
- package/dist/scaffold.js +42 -0
- package/dist/scaffold.js.map +1 -0
- package/dist/templates/backend.d.ts +2 -0
- package/dist/templates/backend.d.ts.map +1 -0
- package/dist/templates/backend.js +424 -0
- package/dist/templates/backend.js.map +1 -0
- package/dist/templates/cicd.d.ts +3 -0
- package/dist/templates/cicd.d.ts.map +1 -0
- package/dist/templates/cicd.js +307 -0
- package/dist/templates/cicd.js.map +1 -0
- package/dist/templates/docker.d.ts +3 -0
- package/dist/templates/docker.d.ts.map +1 -0
- package/dist/templates/docker.js +458 -0
- package/dist/templates/docker.js.map +1 -0
- package/dist/templates/docs.d.ts +3 -0
- package/dist/templates/docs.d.ts.map +1 -0
- package/dist/templates/docs.js +71 -0
- package/dist/templates/docs.js.map +1 -0
- package/dist/templates/frontend.d.ts +2 -0
- package/dist/templates/frontend.d.ts.map +1 -0
- package/dist/templates/frontend.js +441 -0
- package/dist/templates/frontend.js.map +1 -0
- package/dist/templates/root.d.ts +3 -0
- package/dist/templates/root.d.ts.map +1 -0
- package/dist/templates/root.js +210 -0
- package/dist/templates/root.js.map +1 -0
- package/dist/templates/shared.d.ts +2 -0
- package/dist/templates/shared.d.ts.map +1 -0
- package/dist/templates/shared.js +696 -0
- package/dist/templates/shared.js.map +1 -0
- package/dist/utils.d.ts +5 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +34 -0
- package/dist/utils.js.map +1 -0
- package/package.json +40 -0
- package/src/index.ts +138 -0
- package/src/scaffold.ts +51 -0
- package/src/templates/backend.ts +460 -0
- package/src/templates/cicd.ts +334 -0
- package/src/templates/docker.ts +503 -0
- package/src/templates/docs.ts +74 -0
- package/src/templates/frontend.ts +469 -0
- package/src/templates/root.ts +216 -0
- package/src/templates/shared.ts +820 -0
- package/src/utils.ts +31 -0
- package/tsconfig.json +20 -0
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
|
package/dist/index.d.ts
ADDED
|
@@ -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":";;;;;;AAEA,yCAAoC;AACpC,sDAA8B;AAC9B,gDAAwB;AACxB,wDAA0B;AAC1B,kDAA0B;AAC1B,8CAAsB;AACtB,yCAA6C;AAC7C,mCAAkE;AAElE,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAS9B,OAAO;KACJ,IAAI,CAAC,aAAa,CAAC;KACnB,WAAW,CAAC,oDAAoD,CAAC;KACjE,QAAQ,CAAC,gBAAgB,EAAE,qBAAqB,CAAC;KACjD,MAAM,CAAC,KAAK,EAAE,WAAoB,EAAE,EAAE;IACrC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,CAAC;IAEtE,MAAM,SAAS,GAA2B,EAAE,CAAC;IAE7C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,SAAS,CAAC,IAAI,CAAC;YACb,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,4BAA4B;YACrC,OAAO,EAAE,aAAa;YACtB,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAC1B,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,0BAA0B;SACvD,CAAC,CAAC;IACL,CAAC;IAED,SAAS,CAAC,IAAI,CACZ;QACE,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,4CAA4C;QACrD,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,GAAG;QACd,MAAM,EAAE,CAAC,GAAa,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;KAClE,EACD;QACE,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,6CAA6C;QACtD,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,GAAG;QACd,MAAM,EAAE,CAAC,GAAa,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;KAClE,CACF,CAAC;IAEF,MAAM,OAAO,GAAG,MAAM,IAAA,iBAAO,EAAC,SAAS,EAAE;QACvC,QAAQ,EAAE,GAAG,EAAE;YACb,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,MAAM,GAAkB;QAC5B,WAAW,EAAE,WAAW,IAAI,OAAO,CAAC,WAAW;QAC/C,SAAS,EAAE,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC;QACvE,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC;IAEF,4BAA4B;IAC5B,IAAI,kBAAE,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QACpC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,IAAA,iBAAO,EAAC;YAClC,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,aAAa,eAAK,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,6BAA6B;YACnF,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,kBAAE,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAE1E,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,wBAAwB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEtD,IAAI,CAAC;QACH,MAAM,IAAA,0BAAe,EAAC,MAAM,CAAC,CAAC;QAC9B,OAAO,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;QAEpD,6BAA6B;QAC7B,MAAM,OAAO,GAAG,MAAM,IAAA,0BAAkB,GAAE,CAAC;QAE3C,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAC5C,IAAI,CAAC;gBACH,MAAM,IAAA,2BAAmB,EAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC5C,OAAO,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;YAC7C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;gBAC/C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,qDAAqD,CAAC,CAAC,CAAC;gBACjF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,6BAA6B,GAAG,MAAM,CAAC,WAAW,GAAG,oBAAoB,CAAC,CAAC,CAAC;YACvG,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,+CAA+C,CAAC,CAAC,CAAC;YAC3E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACxD,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACvD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,8CAA8C,CAAC,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC,CAAC;IACtE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACzC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAChC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -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"}
|
package/dist/scaffold.js
ADDED
|
@@ -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 @@
|
|
|
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"}
|