create-stackkit-app 0.2.0 → 0.3.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/README.md +46 -31
- package/dist/lib/create-project.d.ts.map +1 -1
- package/dist/lib/create-project.js +140 -53
- package/dist/lib/create-project.js.map +1 -1
- package/dist/lib/template-composer.d.ts +17 -0
- package/dist/lib/template-composer.d.ts.map +1 -0
- package/dist/lib/template-composer.js +199 -0
- package/dist/lib/template-composer.js.map +1 -0
- package/package.json +4 -3
- package/templates/auth/better-auth-express/config.json +18 -0
- package/templates/auth/better-auth-express/src/lib/auth.ts +12 -0
- package/templates/auth/better-auth-express/src/routes/auth.ts +10 -0
- package/templates/auth/better-auth-nextjs/app/api/auth/[...all]/route.ts +4 -0
- package/templates/auth/better-auth-nextjs/config.json +18 -0
- package/templates/auth/better-auth-nextjs/lib/auth.ts +14 -0
- package/templates/auth/nextauth/app/api/auth/[...nextauth]/route.ts +3 -0
- package/templates/auth/nextauth/config.json +18 -0
- package/templates/auth/nextauth/lib/auth.ts +31 -0
- package/templates/bases/express-base/.env.example +2 -0
- package/templates/bases/express-base/package.json +23 -0
- package/templates/bases/express-base/src/index.ts +27 -0
- package/templates/bases/express-base/template.json +7 -0
- package/templates/bases/express-base/tsconfig.json +17 -0
- package/templates/bases/nextjs-base/.eslintrc.json +3 -0
- package/templates/bases/nextjs-base/app/globals.css +3 -0
- package/templates/{next-prisma-postgres-shadcn → bases/nextjs-base}/app/layout.tsx +3 -6
- package/templates/bases/nextjs-base/app/page.tsx +8 -0
- package/templates/{next-prisma-postgres-shadcn → bases/nextjs-base}/next.config.ts +1 -3
- package/templates/bases/nextjs-base/package.json +24 -0
- package/templates/bases/nextjs-base/template.json +7 -0
- package/templates/{next-prisma-postgres-shadcn → bases/nextjs-base}/tsconfig.json +1 -6
- package/templates/databases/prisma-mongodb/config.json +21 -0
- package/templates/{next-prisma-postgres-shadcn → databases/prisma-mongodb}/lib/db.ts +2 -3
- package/templates/databases/prisma-mongodb/prisma/schema.prisma +16 -0
- package/templates/databases/prisma-postgresql/config.json +22 -0
- package/templates/databases/prisma-postgresql/lib/db.ts +13 -0
- package/templates/databases/prisma-postgresql/prisma/schema.prisma +16 -0
- package/templates/next-prisma-postgres-shadcn/.env.example +0 -5
- package/templates/next-prisma-postgres-shadcn/.eslintrc.json +0 -7
- package/templates/next-prisma-postgres-shadcn/.prettierrc +0 -8
- package/templates/next-prisma-postgres-shadcn/README.md +0 -85
- package/templates/next-prisma-postgres-shadcn/app/api/health/route.ts +0 -25
- package/templates/next-prisma-postgres-shadcn/app/globals.css +0 -1
- package/templates/next-prisma-postgres-shadcn/app/page.tsx +0 -29
- package/templates/next-prisma-postgres-shadcn/lib/env.ts +0 -15
- package/templates/next-prisma-postgres-shadcn/package.json +0 -32
- package/templates/next-prisma-postgres-shadcn/prisma/schema.prisma +0 -20
- package/templates/next-prisma-postgres-shadcn/public/.gitkeep +0 -1
- package/templates/next-prisma-postgres-shadcn/template.json +0 -18
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# create-stackkit-app
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Production-ready project generator with interactive wizard setup.
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/create-stackkit-app)
|
|
6
6
|
|
|
@@ -20,42 +20,59 @@ yarn dlx create-stackkit-app@latest my-app
|
|
|
20
20
|
bunx create-stackkit-app@latest my-app
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
-
##
|
|
23
|
+
## Interactive Wizard
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
The wizard guides you through project setup:
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
1. **Framework Selection**
|
|
28
|
+
- Next.js
|
|
29
|
+
- Express.js
|
|
30
|
+
- React (Vite)
|
|
31
|
+
- Astro
|
|
31
32
|
|
|
32
|
-
|
|
33
|
+
2. **Database/ORM**
|
|
34
|
+
- Prisma + PostgreSQL
|
|
35
|
+
- Prisma + MongoDB
|
|
36
|
+
- Mongoose + MongoDB
|
|
37
|
+
- Drizzle + PostgreSQL
|
|
38
|
+
- None
|
|
33
39
|
|
|
34
|
-
|
|
40
|
+
3. **Authentication**
|
|
41
|
+
- Auth.js (NextAuth)
|
|
42
|
+
- Better Auth
|
|
43
|
+
- Clerk
|
|
44
|
+
- None
|
|
35
45
|
|
|
36
|
-
|
|
37
|
-
|
|
46
|
+
4. **Language**
|
|
47
|
+
- TypeScript *(recommended)*
|
|
48
|
+
- JavaScript
|
|
38
49
|
|
|
39
|
-
|
|
40
|
-
|
|
50
|
+
5. **Package Manager**
|
|
51
|
+
- pnpm *(recommended)*
|
|
52
|
+
- npm
|
|
53
|
+
- yarn
|
|
54
|
+
|
|
55
|
+
## Automatic Setup
|
|
41
56
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
57
|
+
After answering questions, the tool automatically:
|
|
58
|
+
|
|
59
|
+
✅ Creates project files
|
|
60
|
+
✅ Installs dependencies
|
|
61
|
+
✅ Initializes git repository
|
|
62
|
+
|
|
63
|
+
No manual `npm install` or `git init` needed.
|
|
48
64
|
|
|
49
65
|
## What's Included
|
|
50
66
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
-
|
|
54
|
-
-
|
|
55
|
-
-
|
|
56
|
-
-
|
|
67
|
+
Default Next.js + Prisma + PostgreSQL template:
|
|
68
|
+
|
|
69
|
+
- ⚡ Next.js 15 with App Router
|
|
70
|
+
- 🛡️ TypeScript
|
|
71
|
+
- 🗄️ Prisma ORM + PostgreSQL
|
|
72
|
+
- 🎨 shadcn/ui components
|
|
73
|
+
- 💅 Tailwind CSS
|
|
57
74
|
- ✅ Zod validation
|
|
58
|
-
-
|
|
75
|
+
- 🔧 ESLint + Prettier
|
|
59
76
|
|
|
60
77
|
## Next Steps
|
|
61
78
|
|
|
@@ -63,11 +80,10 @@ After creating your project:
|
|
|
63
80
|
|
|
64
81
|
```bash
|
|
65
82
|
cd my-app
|
|
66
|
-
pnpm install
|
|
67
83
|
pnpm dev
|
|
68
84
|
```
|
|
69
85
|
|
|
70
|
-
Add
|
|
86
|
+
Add modules to existing projects:
|
|
71
87
|
|
|
72
88
|
```bash
|
|
73
89
|
npx stackkit-cli add auth
|
|
@@ -75,13 +91,12 @@ npx stackkit-cli add auth
|
|
|
75
91
|
|
|
76
92
|
## Full CLI
|
|
77
93
|
|
|
78
|
-
For
|
|
94
|
+
For advanced features:
|
|
79
95
|
|
|
80
96
|
```bash
|
|
81
97
|
npm install -g stackkit-cli
|
|
82
98
|
|
|
83
|
-
stackkit
|
|
84
|
-
stackkit list
|
|
99
|
+
stackkit list # View all templates/modules
|
|
85
100
|
stackkit add auth
|
|
86
101
|
```
|
|
87
102
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-project.d.ts","sourceRoot":"","sources":["../../src/lib/create-project.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create-project.d.ts","sourceRoot":"","sources":["../../src/lib/create-project.ts"],"names":[],"mappings":"AAsBA,wBAAsB,aAAa,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBvE"}
|
|
@@ -5,12 +5,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.createProject = createProject;
|
|
7
7
|
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const child_process_1 = require("child_process");
|
|
8
9
|
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
9
10
|
const inquirer_1 = __importDefault(require("inquirer"));
|
|
10
11
|
const ora_1 = __importDefault(require("ora"));
|
|
11
12
|
const path_1 = __importDefault(require("path"));
|
|
12
13
|
const validate_npm_package_name_1 = __importDefault(require("validate-npm-package-name"));
|
|
13
|
-
const child_process_1 = require("child_process");
|
|
14
14
|
async function createProject(projectName) {
|
|
15
15
|
console.log(chalk_1.default.bold.cyan('\n🚀 Create StackKit App\n'));
|
|
16
16
|
// Get project configuration through wizard
|
|
@@ -85,7 +85,7 @@ async function getProjectConfig(projectName) {
|
|
|
85
85
|
return baseChoices;
|
|
86
86
|
}
|
|
87
87
|
else if (answers.framework === 'express') {
|
|
88
|
-
return baseChoices.filter(c => ['better-auth', 'none'].includes(c.value));
|
|
88
|
+
return baseChoices.filter((c) => ['better-auth', 'none'].includes(c.value));
|
|
89
89
|
}
|
|
90
90
|
else {
|
|
91
91
|
return [{ name: 'None', value: 'none' }];
|
|
@@ -121,10 +121,10 @@ async function getProjectConfig(projectName) {
|
|
|
121
121
|
}
|
|
122
122
|
async function generateProject(config, targetDir) {
|
|
123
123
|
console.log();
|
|
124
|
-
// Copy
|
|
124
|
+
// Copy and compose template
|
|
125
125
|
const copySpinner = (0, ora_1.default)('Creating project files...').start();
|
|
126
126
|
try {
|
|
127
|
-
await
|
|
127
|
+
await composeTemplate(config, targetDir);
|
|
128
128
|
copySpinner.succeed('Project files created');
|
|
129
129
|
}
|
|
130
130
|
catch (error) {
|
|
@@ -151,47 +151,154 @@ async function generateProject(config, targetDir) {
|
|
|
151
151
|
gitSpinner.warn('Failed to initialize git repository');
|
|
152
152
|
}
|
|
153
153
|
}
|
|
154
|
-
async function
|
|
154
|
+
async function composeTemplate(config, targetDir) {
|
|
155
155
|
const templatesDir = path_1.default.join(__dirname, '..', '..', 'templates');
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
}
|
|
163
|
-
else {
|
|
164
|
-
// For now, fallback to the same template until more templates are added
|
|
165
|
-
templateDir = path_1.default.join(templatesDir, 'next-prisma-postgres-shadcn');
|
|
156
|
+
await fs_extra_1.default.ensureDir(targetDir);
|
|
157
|
+
// 1. Copy base framework template
|
|
158
|
+
await copyBaseFramework(templatesDir, targetDir, config.framework);
|
|
159
|
+
// 2. Merge database configuration
|
|
160
|
+
if (config.database !== 'none') {
|
|
161
|
+
await mergeDatabaseConfig(templatesDir, targetDir, config.database);
|
|
166
162
|
}
|
|
167
|
-
//
|
|
168
|
-
if (
|
|
169
|
-
|
|
163
|
+
// 3. Merge auth configuration
|
|
164
|
+
if (config.auth !== 'none') {
|
|
165
|
+
await mergeAuthConfig(templatesDir, targetDir, config.framework, config.auth);
|
|
170
166
|
}
|
|
171
|
-
//
|
|
172
|
-
await fs_extra_1.default.ensureDir(targetDir);
|
|
173
|
-
await fs_extra_1.default.copy(templateDir, targetDir, {
|
|
174
|
-
filter: (src) => {
|
|
175
|
-
const basename = path_1.default.basename(src);
|
|
176
|
-
return basename !== 'template.json' &&
|
|
177
|
-
basename !== 'node_modules' &&
|
|
178
|
-
basename !== '.git';
|
|
179
|
-
},
|
|
180
|
-
});
|
|
181
|
-
// Update package.json with project name
|
|
167
|
+
// 4. Update package.json with project name
|
|
182
168
|
const packageJsonPath = path_1.default.join(targetDir, 'package.json');
|
|
183
169
|
if (await fs_extra_1.default.pathExists(packageJsonPath)) {
|
|
184
170
|
const packageJson = await fs_extra_1.default.readJson(packageJsonPath);
|
|
185
171
|
packageJson.name = config.projectName;
|
|
186
172
|
await fs_extra_1.default.writeJson(packageJsonPath, packageJson, { spaces: 2 });
|
|
187
173
|
}
|
|
188
|
-
//
|
|
174
|
+
// 5. Convert to JavaScript if selected
|
|
189
175
|
if (config.language === 'javascript') {
|
|
190
176
|
await convertToJavaScript(targetDir);
|
|
191
177
|
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
178
|
+
}
|
|
179
|
+
async function copyBaseFramework(templatesDir, targetDir, framework) {
|
|
180
|
+
const baseDir = path_1.default.join(templatesDir, 'bases', `${framework}-base`);
|
|
181
|
+
if (!(await fs_extra_1.default.pathExists(baseDir))) {
|
|
182
|
+
throw new Error(`Base template not found for framework: ${framework}\n` + `Expected at: ${baseDir}`);
|
|
183
|
+
}
|
|
184
|
+
await fs_extra_1.default.copy(baseDir, targetDir, {
|
|
185
|
+
filter: (src) => {
|
|
186
|
+
const basename = path_1.default.basename(src);
|
|
187
|
+
return !['template.json', 'config.json', 'node_modules', '.git'].includes(basename);
|
|
188
|
+
},
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
async function mergeDatabaseConfig(templatesDir, targetDir, database) {
|
|
192
|
+
const dbDir = path_1.default.join(templatesDir, 'databases', database);
|
|
193
|
+
if (!(await fs_extra_1.default.pathExists(dbDir))) {
|
|
194
|
+
console.warn(`Database template not found: ${database}`);
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
// Read config
|
|
198
|
+
const configPath = path_1.default.join(dbDir, 'config.json');
|
|
199
|
+
if (!(await fs_extra_1.default.pathExists(configPath))) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
const config = await fs_extra_1.default.readJson(configPath);
|
|
203
|
+
// Copy database files
|
|
204
|
+
const entries = await fs_extra_1.default.readdir(dbDir, { withFileTypes: true });
|
|
205
|
+
for (const entry of entries) {
|
|
206
|
+
if (entry.name === 'config.json')
|
|
207
|
+
continue;
|
|
208
|
+
const sourcePath = path_1.default.join(dbDir, entry.name);
|
|
209
|
+
const destPath = path_1.default.join(targetDir, entry.name);
|
|
210
|
+
if (entry.isDirectory()) {
|
|
211
|
+
await fs_extra_1.default.copy(sourcePath, destPath, { overwrite: false });
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
await fs_extra_1.default.copy(sourcePath, destPath, { overwrite: false });
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
// Merge package.json
|
|
218
|
+
await mergePackageJson(targetDir, config);
|
|
219
|
+
// Merge .env
|
|
220
|
+
await mergeEnvFile(targetDir, config.env || {});
|
|
221
|
+
}
|
|
222
|
+
async function mergeAuthConfig(templatesDir, targetDir, framework, auth) {
|
|
223
|
+
// Map auth selection to template directory
|
|
224
|
+
const authMap = {
|
|
225
|
+
'nextjs-nextauth': 'nextauth',
|
|
226
|
+
'nextjs-better-auth': 'better-auth-nextjs',
|
|
227
|
+
'express-better-auth': 'better-auth-express',
|
|
228
|
+
};
|
|
229
|
+
const authKey = authMap[`${framework}-${auth}`] || auth;
|
|
230
|
+
const authDir = path_1.default.join(templatesDir, 'auth', authKey);
|
|
231
|
+
if (!(await fs_extra_1.default.pathExists(authDir))) {
|
|
232
|
+
console.warn(`Auth template not found: ${authKey}`);
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
// Read config
|
|
236
|
+
const configPath = path_1.default.join(authDir, 'config.json');
|
|
237
|
+
if (!(await fs_extra_1.default.pathExists(configPath))) {
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
const config = await fs_extra_1.default.readJson(configPath);
|
|
241
|
+
// Copy auth files
|
|
242
|
+
const entries = await fs_extra_1.default.readdir(authDir, { withFileTypes: true });
|
|
243
|
+
for (const entry of entries) {
|
|
244
|
+
if (entry.name === 'config.json')
|
|
245
|
+
continue;
|
|
246
|
+
const sourcePath = path_1.default.join(authDir, entry.name);
|
|
247
|
+
const destPath = path_1.default.join(targetDir, entry.name);
|
|
248
|
+
if (entry.isDirectory()) {
|
|
249
|
+
await fs_extra_1.default.copy(sourcePath, destPath, { overwrite: false });
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
await fs_extra_1.default.copy(sourcePath, destPath, { overwrite: false });
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
// Merge package.json
|
|
256
|
+
await mergePackageJson(targetDir, config);
|
|
257
|
+
// Merge .env
|
|
258
|
+
await mergeEnvFile(targetDir, config.env || {});
|
|
259
|
+
}
|
|
260
|
+
async function mergePackageJson(targetDir, config) {
|
|
261
|
+
const pkgPath = path_1.default.join(targetDir, 'package.json');
|
|
262
|
+
if (!(await fs_extra_1.default.pathExists(pkgPath))) {
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
const pkg = await fs_extra_1.default.readJson(pkgPath);
|
|
266
|
+
if (config.dependencies) {
|
|
267
|
+
pkg.dependencies = { ...pkg.dependencies, ...config.dependencies };
|
|
268
|
+
}
|
|
269
|
+
if (config.devDependencies) {
|
|
270
|
+
pkg.devDependencies = { ...pkg.devDependencies, ...config.devDependencies };
|
|
271
|
+
}
|
|
272
|
+
if (config.scripts) {
|
|
273
|
+
pkg.scripts = { ...pkg.scripts, ...config.scripts };
|
|
274
|
+
}
|
|
275
|
+
await fs_extra_1.default.writeJson(pkgPath, pkg, { spaces: 2 });
|
|
276
|
+
}
|
|
277
|
+
async function mergeEnvFile(targetDir, envVars) {
|
|
278
|
+
if (Object.keys(envVars).length === 0) {
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
const envExamplePath = path_1.default.join(targetDir, '.env.example');
|
|
282
|
+
const envPath = path_1.default.join(targetDir, '.env');
|
|
283
|
+
const envContent = Object.entries(envVars)
|
|
284
|
+
.map(([key, value]) => `${key}="${value}"`)
|
|
285
|
+
.join('\n') + '\n';
|
|
286
|
+
// Update .env.example
|
|
287
|
+
if (await fs_extra_1.default.pathExists(envExamplePath)) {
|
|
288
|
+
const existing = await fs_extra_1.default.readFile(envExamplePath, 'utf-8');
|
|
289
|
+
const existingKeys = existing.split('\n').map((line) => line.split('=')[0]);
|
|
290
|
+
const newVars = Object.keys(envVars).filter((key) => !existingKeys.includes(key));
|
|
291
|
+
if (newVars.length > 0) {
|
|
292
|
+
const newContent = newVars.map((key) => `${key}="${envVars[key]}"`).join('\n');
|
|
293
|
+
await fs_extra_1.default.appendFile(envExamplePath, '\n' + newContent + '\n');
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
await fs_extra_1.default.writeFile(envExamplePath, envContent);
|
|
298
|
+
}
|
|
299
|
+
// Create .env if doesn't exist
|
|
300
|
+
if (!(await fs_extra_1.default.pathExists(envPath))) {
|
|
301
|
+
await fs_extra_1.default.writeFile(envPath, envContent);
|
|
195
302
|
}
|
|
196
303
|
}
|
|
197
304
|
async function convertToJavaScript(targetDir) {
|
|
@@ -235,26 +342,6 @@ async function convertToJavaScript(targetDir) {
|
|
|
235
342
|
await fs_extra_1.default.writeJson(packageJsonPath, packageJson, { spaces: 2 });
|
|
236
343
|
}
|
|
237
344
|
}
|
|
238
|
-
async function updatePrismaForMongoDB(targetDir) {
|
|
239
|
-
const prismaSchemaPath = path_1.default.join(targetDir, 'prisma', 'schema.prisma');
|
|
240
|
-
if (await fs_extra_1.default.pathExists(prismaSchemaPath)) {
|
|
241
|
-
let schema = await fs_extra_1.default.readFile(prismaSchemaPath, 'utf-8');
|
|
242
|
-
// Update datasource provider
|
|
243
|
-
schema = schema.replace(/provider\s*=\s*"postgresql"/g, 'provider = "mongodb"');
|
|
244
|
-
// Update connection string
|
|
245
|
-
schema = schema.replace(/DATABASE_URL/g, 'MONGODB_URL');
|
|
246
|
-
// Update id fields to use MongoDB ObjectId
|
|
247
|
-
schema = schema.replace(/@id\s+@default\(autoincrement\(\)\)/g, '@id @default(auto()) @map("_id") @db.ObjectId');
|
|
248
|
-
await fs_extra_1.default.writeFile(prismaSchemaPath, schema);
|
|
249
|
-
}
|
|
250
|
-
// Update .env file
|
|
251
|
-
const envPath = path_1.default.join(targetDir, '.env');
|
|
252
|
-
if (await fs_extra_1.default.pathExists(envPath)) {
|
|
253
|
-
let env = await fs_extra_1.default.readFile(envPath, 'utf-8');
|
|
254
|
-
env = env.replace(/DATABASE_URL\s*=.*/g, 'MONGODB_URL="mongodb://localhost:27017/myapp"');
|
|
255
|
-
await fs_extra_1.default.writeFile(envPath, env);
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
345
|
async function installDependencies(cwd, packageManager) {
|
|
259
346
|
const commands = {
|
|
260
347
|
npm: 'npm install',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-project.js","sourceRoot":"","sources":["../../src/lib/create-project.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"create-project.js","sourceRoot":"","sources":["../../src/lib/create-project.ts"],"names":[],"mappings":";;;;;AAsBA,sCAmBC;AAzCD,kDAA0B;AAC1B,iDAAyC;AACzC,wDAA0B;AAC1B,wDAAgC;AAChC,8CAAsB;AACtB,gDAAwB;AACxB,0FAA+D;AAgBxD,KAAK,UAAU,aAAa,CAAC,WAAoB;IACtD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;IAE3D,2CAA2C;IAC3C,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAEnD,4BAA4B;IAC5B,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAC/D,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,WAAW,kBAAkB,CAAC,CAAC,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC,CAAC;QAC9F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,iBAAiB;IACjB,MAAM,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAEzC,kBAAkB;IAClB,aAAa,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,WAAoB;IAClD,MAAM,OAAO,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;QACpC;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,eAAe;YACxB,OAAO,EAAE,WAAW,IAAI,QAAQ;YAChC,IAAI,EAAE,CAAC,WAAW;YAClB,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;gBAC1B,MAAM,UAAU,GAAG,IAAA,mCAAsB,EAAC,KAAK,CAAC,CAAC;gBACjD,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC;oBACpC,OAAO,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,sBAAsB,CAAC;gBAC1D,CAAC;gBACD,IAAI,kBAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;oBACnD,OAAO,0BAA0B,CAAC;gBACpC,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;SACF;QACD;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,mBAAmB;YAC5B,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;gBACpC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE;gBACxC,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE;gBAC7C,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;aAClC;SACF;QACD;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,sBAAsB;YAC/B,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,mBAAmB,EAAE;gBAC3D,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,gBAAgB,EAAE;gBACrD,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,kBAAkB,EAAE;gBACzD,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,oBAAoB,EAAE;gBAC7D,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;aAChC;SACF;QACD;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,wBAAwB;YACjC,OAAO,EAAE,CAAC,OAAY,EAAE,EAAE;gBACxB,MAAM,WAAW,GAAG;oBAClB,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,UAAU,EAAE;oBACjD,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;oBAC7C,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;oBACjC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;iBAChC,CAAC;gBAEF,kDAAkD;gBAClD,IAAI,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;oBACnC,OAAO,WAAW,CAAC;gBACrB,CAAC;qBAAM,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;oBAC3C,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC9E,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;SACF;QACD;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,WAAW;YACpB,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;gBAC3C,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;aAC5C;YACD,OAAO,EAAE,YAAY;SACtB;QACD;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,kBAAkB;YAC3B,OAAO,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;YAChC,OAAO,EAAE,MAAM;SAChB;KACF,CAAC,CAAC;IAEH,OAAO;QACL,WAAW,EAAE,WAAW,IAAI,OAAO,CAAC,WAAW;QAC/C,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,cAAc,EAAE,OAAO,CAAC,cAAc;KACvC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,MAAqB,EAAE,SAAiB;IACrE,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,4BAA4B;IAC5B,MAAM,WAAW,GAAG,IAAA,aAAG,EAAC,2BAA2B,CAAC,CAAC,KAAK,EAAE,CAAC;IAC7D,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACzC,WAAW,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QACnD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,uBAAuB;IACvB,MAAM,cAAc,GAAG,IAAA,aAAG,EAAC,4BAA4B,CAAC,CAAC,KAAK,EAAE,CAAC;IACjE,IAAI,CAAC;QACH,MAAM,mBAAmB,CAAC,SAAS,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;QAC5D,cAAc,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,cAAc,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QACtD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,iBAAiB;IACjB,MAAM,UAAU,GAAG,IAAA,aAAG,EAAC,gCAAgC,CAAC,CAAC,KAAK,EAAE,CAAC;IACjE,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;QACzB,UAAU,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,UAAU,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,MAAqB,EAAE,SAAiB;IACrE,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IAEnE,MAAM,kBAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAE9B,kCAAkC;IAClC,MAAM,iBAAiB,CAAC,YAAY,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAEnE,kCAAkC;IAClC,IAAI,MAAM,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QAC/B,MAAM,mBAAmB,CAAC,YAAY,EAAE,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtE,CAAC;IAED,8BAA8B;IAC9B,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC3B,MAAM,eAAe,CAAC,YAAY,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAChF,CAAC;IAED,2CAA2C;IAC3C,MAAM,eAAe,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAC7D,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACzC,MAAM,WAAW,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QACvD,WAAW,CAAC,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,MAAM,kBAAE,CAAC,SAAS,CAAC,eAAe,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,uCAAuC;IACvC,IAAI,MAAM,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;QACrC,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,YAAoB,EACpB,SAAiB,EACjB,SAAiB;IAEjB,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,GAAG,SAAS,OAAO,CAAC,CAAC;IAEtE,IAAI,CAAC,CAAC,MAAM,kBAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CACb,0CAA0C,SAAS,IAAI,GAAG,gBAAgB,OAAO,EAAE,CACpF,CAAC;IACJ,CAAC;IAED,MAAM,kBAAE,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE;QAChC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE;YACd,MAAM,QAAQ,GAAG,cAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACpC,OAAO,CAAC,CAAC,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtF,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,YAAoB,EACpB,SAAiB,EACjB,QAAgB;IAEhB,MAAM,KAAK,GAAG,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IAE7D,IAAI,CAAC,CAAC,MAAM,kBAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,gCAAgC,QAAQ,EAAE,CAAC,CAAC;QACzD,OAAO;IACT,CAAC;IAED,cAAc;IACd,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IACnD,IAAI,CAAC,CAAC,MAAM,kBAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QACvC,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAE7C,sBAAsB;IACtB,MAAM,OAAO,GAAG,MAAM,kBAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACjE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa;YAAE,SAAS;QAE3C,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAElD,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,kBAAE,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,MAAM,kBAAE,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,MAAM,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAE1C,aAAa;IACb,MAAM,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,YAAoB,EACpB,SAAiB,EACjB,SAAiB,EACjB,IAAY;IAEZ,2CAA2C;IAC3C,MAAM,OAAO,GAA2B;QACtC,iBAAiB,EAAE,UAAU;QAC7B,oBAAoB,EAAE,oBAAoB;QAC1C,qBAAqB,EAAE,qBAAqB;KAC7C,CAAC;IAEF,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,SAAS,IAAI,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC;IACxD,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAEzD,IAAI,CAAC,CAAC,MAAM,kBAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAC;QACpD,OAAO;IACT,CAAC;IAED,cAAc;IACd,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACrD,IAAI,CAAC,CAAC,MAAM,kBAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QACvC,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAE7C,kBAAkB;IAClB,MAAM,OAAO,GAAG,MAAM,kBAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa;YAAE,SAAS;QAE3C,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAElD,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,kBAAE,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,MAAM,kBAAE,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,MAAM,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAE1C,aAAa;IACb,MAAM,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,SAAiB,EAAE,MAAW;IAC5D,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAErD,IAAI,CAAC,CAAC,MAAM,kBAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QACpC,OAAO;IACT,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAEvC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,GAAG,CAAC,YAAY,GAAG,EAAE,GAAG,GAAG,CAAC,YAAY,EAAE,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;IACrE,CAAC;IAED,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QAC3B,GAAG,CAAC,eAAe,GAAG,EAAE,GAAG,GAAG,CAAC,eAAe,EAAE,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;IAC9E,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,GAAG,CAAC,OAAO,GAAG,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;IACtD,CAAC;IAED,MAAM,kBAAE,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,SAAiB,EAAE,OAA+B;IAC5E,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,OAAO;IACT,CAAC;IAED,MAAM,cAAc,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAE7C,MAAM,UAAU,GACd,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;SACpB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,KAAK,GAAG,CAAC;SAC1C,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAEvB,sBAAsB;IACtB,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QAC5D,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE5E,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QAClF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/E,MAAM,kBAAE,CAAC,UAAU,CAAC,cAAc,EAAE,IAAI,GAAG,UAAU,GAAG,IAAI,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,kBAAE,CAAC,SAAS,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IACjD,CAAC;IAED,+BAA+B;IAC/B,IAAI,CAAC,CAAC,MAAM,kBAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QACpC,MAAM,kBAAE,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,SAAiB;IAClD,iCAAiC;IACjC,MAAM,OAAO,GAAG,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IACnD,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC5C,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,MAAM,kBAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,gCAAgC;IAChC,MAAM,gBAAgB,GAAG,KAAK,EAAE,GAAW,EAAE,EAAE;QAC7C,MAAM,OAAO,GAAG,MAAM,kBAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBACzD,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YACnC,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC1B,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC/B,MAAM,kBAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC9D,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBACvC,MAAM,kBAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAElC,wDAAwD;IACxD,MAAM,eAAe,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAC7D,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACzC,MAAM,WAAW,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QACvD,IAAI,WAAW,CAAC,eAAe,EAAE,CAAC;YAChC,OAAO,WAAW,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YACjD,OAAO,WAAW,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;YAClD,OAAO,WAAW,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;YACnD,OAAO,WAAW,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC;QACzD,CAAC;QACD,MAAM,kBAAE,CAAC,SAAS,CAAC,eAAe,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAClE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,GAAW,EAAE,cAAsB;IACpE,MAAM,QAAQ,GAA2B;QACvC,GAAG,EAAE,aAAa;QAClB,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,cAAc;KACrB,CAAC;IAEF,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC;IACzC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,gCAAgC,cAAc,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,IAAA,wBAAQ,EAAC,OAAO,EAAE;QAChB,GAAG;QACH,KAAK,EAAE,MAAM;KACd,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,GAAW;IAChC,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,eAAe,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7C,IAAA,wBAAQ,EAAC,UAAU,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7C,IAAA,wBAAQ,EAAC,YAAY,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/C,IAAA,wBAAQ,EAAC,yDAAyD,EAAE;YAClE,GAAG;YACH,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,MAAqB;IAC1C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,QAAQ,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAC/F,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare class TemplateComposer {
|
|
2
|
+
private templatesDir;
|
|
3
|
+
constructor(templatesDir: string);
|
|
4
|
+
/**
|
|
5
|
+
* Compose a project from base + database + auth selections
|
|
6
|
+
*/
|
|
7
|
+
compose(targetDir: string, framework: string, database: string, auth: string): Promise<void>;
|
|
8
|
+
private loadConfig;
|
|
9
|
+
private getBaseFiles;
|
|
10
|
+
private collectFiles;
|
|
11
|
+
private copyFiles;
|
|
12
|
+
private mergeConfigs;
|
|
13
|
+
private writePackageJson;
|
|
14
|
+
private writeEnvFile;
|
|
15
|
+
private getAuthKey;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=template-composer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-composer.d.ts","sourceRoot":"","sources":["../../src/lib/template-composer.ts"],"names":[],"mappings":"AAoBA,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,YAAY,CAAS;gBAEjB,YAAY,EAAE,MAAM;IAIhC;;OAEG;IACG,OAAO,CACX,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC;YAwFF,UAAU;YAaV,YAAY;YAYZ,YAAY;YA4BZ,SAAS;IAOvB,OAAO,CAAC,YAAY;YAwBN,gBAAgB;YAwBhB,YAAY;IA6B1B,OAAO,CAAC,UAAU;CAUnB"}
|
|
@@ -0,0 +1,199 @@
|
|
|
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.TemplateComposer = void 0;
|
|
7
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
class TemplateComposer {
|
|
10
|
+
templatesDir;
|
|
11
|
+
constructor(templatesDir) {
|
|
12
|
+
this.templatesDir = templatesDir;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Compose a project from base + database + auth selections
|
|
16
|
+
*/
|
|
17
|
+
async compose(targetDir, framework, database, auth) {
|
|
18
|
+
const configs = [];
|
|
19
|
+
const filesToCopy = [];
|
|
20
|
+
// 1. Load base framework template
|
|
21
|
+
const baseConfig = await this.loadConfig(path_1.default.join(this.templatesDir, 'bases', `${framework}-base`));
|
|
22
|
+
configs.push(baseConfig);
|
|
23
|
+
// Copy base files
|
|
24
|
+
const baseFiles = await this.getBaseFiles(framework);
|
|
25
|
+
filesToCopy.push(...baseFiles);
|
|
26
|
+
// 2. Load database configuration if not "none"
|
|
27
|
+
if (database !== 'none') {
|
|
28
|
+
const dbConfig = await this.loadConfig(path_1.default.join(this.templatesDir, 'databases', database));
|
|
29
|
+
// Check compatibility
|
|
30
|
+
if (dbConfig.compatibleWith?.frameworks &&
|
|
31
|
+
!dbConfig.compatibleWith.frameworks.includes(framework)) {
|
|
32
|
+
throw new Error(`${dbConfig.displayName} is not compatible with ${framework}`);
|
|
33
|
+
}
|
|
34
|
+
configs.push(dbConfig);
|
|
35
|
+
// Copy database files
|
|
36
|
+
const dbDir = path_1.default.join(this.templatesDir, 'databases', database);
|
|
37
|
+
const dbFiles = await this.collectFiles(dbDir);
|
|
38
|
+
filesToCopy.push(...dbFiles.map((f) => ({
|
|
39
|
+
source: f,
|
|
40
|
+
dest: path_1.default.join(targetDir, f.replace(dbDir + path_1.default.sep, '')),
|
|
41
|
+
})));
|
|
42
|
+
}
|
|
43
|
+
// 3. Load auth configuration if not "none"
|
|
44
|
+
if (auth !== 'none') {
|
|
45
|
+
const authKey = this.getAuthKey(framework, auth);
|
|
46
|
+
const authDir = path_1.default.join(this.templatesDir, 'auth', authKey);
|
|
47
|
+
if (await fs_extra_1.default.pathExists(authDir)) {
|
|
48
|
+
const authConfig = await this.loadConfig(authDir);
|
|
49
|
+
// Check compatibility
|
|
50
|
+
if (authConfig.compatibleWith?.frameworks &&
|
|
51
|
+
!authConfig.compatibleWith.frameworks.includes(framework)) {
|
|
52
|
+
throw new Error(`${authConfig.displayName} is not compatible with ${framework}`);
|
|
53
|
+
}
|
|
54
|
+
if (authConfig.compatibleWith?.databases &&
|
|
55
|
+
!authConfig.compatibleWith.databases.includes(database)) {
|
|
56
|
+
throw new Error(`${authConfig.displayName} is not compatible with ${database}`);
|
|
57
|
+
}
|
|
58
|
+
configs.push(authConfig);
|
|
59
|
+
// Copy auth files
|
|
60
|
+
const authFiles = await this.collectFiles(authDir);
|
|
61
|
+
filesToCopy.push(...authFiles.map((f) => ({
|
|
62
|
+
source: f,
|
|
63
|
+
dest: path_1.default.join(targetDir, f.replace(authDir + path_1.default.sep, '')),
|
|
64
|
+
})));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// 4. Merge all configurations
|
|
68
|
+
const mergedConfig = this.mergeConfigs(configs);
|
|
69
|
+
// 5. Copy all files
|
|
70
|
+
await this.copyFiles(filesToCopy);
|
|
71
|
+
// 6. Create/update package.json
|
|
72
|
+
await this.writePackageJson(targetDir, mergedConfig);
|
|
73
|
+
// 7. Create/update .env
|
|
74
|
+
await this.writeEnvFile(targetDir, mergedConfig);
|
|
75
|
+
}
|
|
76
|
+
async loadConfig(dir) {
|
|
77
|
+
const configPath = path_1.default.join(dir, 'config.json');
|
|
78
|
+
const templatePath = path_1.default.join(dir, 'template.json');
|
|
79
|
+
if (await fs_extra_1.default.pathExists(configPath)) {
|
|
80
|
+
return await fs_extra_1.default.readJson(configPath);
|
|
81
|
+
}
|
|
82
|
+
else if (await fs_extra_1.default.pathExists(templatePath)) {
|
|
83
|
+
return await fs_extra_1.default.readJson(templatePath);
|
|
84
|
+
}
|
|
85
|
+
throw new Error(`No configuration found in ${dir}`);
|
|
86
|
+
}
|
|
87
|
+
async getBaseFiles(framework) {
|
|
88
|
+
// For now, use existing complete template
|
|
89
|
+
// In future, this will use minimal base templates
|
|
90
|
+
const baseDir = path_1.default.join(this.templatesDir, 'next-prisma-postgres-shadcn');
|
|
91
|
+
const files = await this.collectFiles(baseDir);
|
|
92
|
+
return files.map((source) => ({
|
|
93
|
+
source,
|
|
94
|
+
dest: source.replace(baseDir, ''),
|
|
95
|
+
}));
|
|
96
|
+
}
|
|
97
|
+
async collectFiles(dir, exclude = ['config.json', 'template.json', 'node_modules']) {
|
|
98
|
+
const files = [];
|
|
99
|
+
if (!(await fs_extra_1.default.pathExists(dir))) {
|
|
100
|
+
return files;
|
|
101
|
+
}
|
|
102
|
+
const entries = await fs_extra_1.default.readdir(dir, { withFileTypes: true });
|
|
103
|
+
for (const entry of entries) {
|
|
104
|
+
if (exclude.includes(entry.name))
|
|
105
|
+
continue;
|
|
106
|
+
const fullPath = path_1.default.join(dir, entry.name);
|
|
107
|
+
if (entry.isDirectory()) {
|
|
108
|
+
const subFiles = await this.collectFiles(fullPath, exclude);
|
|
109
|
+
files.push(...subFiles);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
files.push(fullPath);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return files;
|
|
116
|
+
}
|
|
117
|
+
async copyFiles(files) {
|
|
118
|
+
for (const { source, dest } of files) {
|
|
119
|
+
await fs_extra_1.default.ensureDir(path_1.default.dirname(dest));
|
|
120
|
+
await fs_extra_1.default.copy(source, dest, { overwrite: true });
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
mergeConfigs(configs) {
|
|
124
|
+
return configs.reduce((merged, config) => {
|
|
125
|
+
return {
|
|
126
|
+
...merged,
|
|
127
|
+
dependencies: {
|
|
128
|
+
...merged.dependencies,
|
|
129
|
+
...config.dependencies,
|
|
130
|
+
},
|
|
131
|
+
devDependencies: {
|
|
132
|
+
...merged.devDependencies,
|
|
133
|
+
...config.devDependencies,
|
|
134
|
+
},
|
|
135
|
+
scripts: {
|
|
136
|
+
...merged.scripts,
|
|
137
|
+
...config.scripts,
|
|
138
|
+
},
|
|
139
|
+
env: {
|
|
140
|
+
...merged.env,
|
|
141
|
+
...config.env,
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
}, {});
|
|
145
|
+
}
|
|
146
|
+
async writePackageJson(targetDir, config) {
|
|
147
|
+
const pkgPath = path_1.default.join(targetDir, 'package.json');
|
|
148
|
+
let pkg = {};
|
|
149
|
+
if (await fs_extra_1.default.pathExists(pkgPath)) {
|
|
150
|
+
pkg = await fs_extra_1.default.readJson(pkgPath);
|
|
151
|
+
}
|
|
152
|
+
// Merge dependencies and scripts
|
|
153
|
+
if (config.dependencies) {
|
|
154
|
+
pkg.dependencies = { ...pkg.dependencies, ...config.dependencies };
|
|
155
|
+
}
|
|
156
|
+
if (config.devDependencies) {
|
|
157
|
+
pkg.devDependencies = { ...pkg.devDependencies, ...config.devDependencies };
|
|
158
|
+
}
|
|
159
|
+
if (config.scripts) {
|
|
160
|
+
pkg.scripts = { ...pkg.scripts, ...config.scripts };
|
|
161
|
+
}
|
|
162
|
+
await fs_extra_1.default.writeJson(pkgPath, pkg, { spaces: 2 });
|
|
163
|
+
}
|
|
164
|
+
async writeEnvFile(targetDir, config) {
|
|
165
|
+
if (!config.env || Object.keys(config.env).length === 0) {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
const envPath = path_1.default.join(targetDir, '.env');
|
|
169
|
+
const envExamplePath = path_1.default.join(targetDir, '.env.example');
|
|
170
|
+
const envContent = Object.entries(config.env)
|
|
171
|
+
.map(([key, value]) => `${key}="${value}"`)
|
|
172
|
+
.join('\n') + '\n';
|
|
173
|
+
// Append or create .env.example
|
|
174
|
+
if (await fs_extra_1.default.pathExists(envExamplePath)) {
|
|
175
|
+
const existing = await fs_extra_1.default.readFile(envExamplePath, 'utf-8');
|
|
176
|
+
if (!existing.includes(envContent)) {
|
|
177
|
+
await fs_extra_1.default.appendFile(envExamplePath, '\n' + envContent);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
await fs_extra_1.default.writeFile(envExamplePath, envContent);
|
|
182
|
+
}
|
|
183
|
+
// Don't overwrite existing .env, but create if missing
|
|
184
|
+
if (!(await fs_extra_1.default.pathExists(envPath))) {
|
|
185
|
+
await fs_extra_1.default.writeFile(envPath, envContent);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
getAuthKey(framework, auth) {
|
|
189
|
+
// Map framework + auth to specific implementation
|
|
190
|
+
const mapping = {
|
|
191
|
+
'nextjs-nextauth': 'nextauth',
|
|
192
|
+
'nextjs-better-auth': 'better-auth-nextjs',
|
|
193
|
+
'express-better-auth': 'better-auth-express',
|
|
194
|
+
};
|
|
195
|
+
return mapping[`${framework}-${auth}`] || auth;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
exports.TemplateComposer = TemplateComposer;
|
|
199
|
+
//# sourceMappingURL=template-composer.js.map
|