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.
Files changed (49) hide show
  1. package/README.md +46 -31
  2. package/dist/lib/create-project.d.ts.map +1 -1
  3. package/dist/lib/create-project.js +140 -53
  4. package/dist/lib/create-project.js.map +1 -1
  5. package/dist/lib/template-composer.d.ts +17 -0
  6. package/dist/lib/template-composer.d.ts.map +1 -0
  7. package/dist/lib/template-composer.js +199 -0
  8. package/dist/lib/template-composer.js.map +1 -0
  9. package/package.json +4 -3
  10. package/templates/auth/better-auth-express/config.json +18 -0
  11. package/templates/auth/better-auth-express/src/lib/auth.ts +12 -0
  12. package/templates/auth/better-auth-express/src/routes/auth.ts +10 -0
  13. package/templates/auth/better-auth-nextjs/app/api/auth/[...all]/route.ts +4 -0
  14. package/templates/auth/better-auth-nextjs/config.json +18 -0
  15. package/templates/auth/better-auth-nextjs/lib/auth.ts +14 -0
  16. package/templates/auth/nextauth/app/api/auth/[...nextauth]/route.ts +3 -0
  17. package/templates/auth/nextauth/config.json +18 -0
  18. package/templates/auth/nextauth/lib/auth.ts +31 -0
  19. package/templates/bases/express-base/.env.example +2 -0
  20. package/templates/bases/express-base/package.json +23 -0
  21. package/templates/bases/express-base/src/index.ts +27 -0
  22. package/templates/bases/express-base/template.json +7 -0
  23. package/templates/bases/express-base/tsconfig.json +17 -0
  24. package/templates/bases/nextjs-base/.eslintrc.json +3 -0
  25. package/templates/bases/nextjs-base/app/globals.css +3 -0
  26. package/templates/{next-prisma-postgres-shadcn → bases/nextjs-base}/app/layout.tsx +3 -6
  27. package/templates/bases/nextjs-base/app/page.tsx +8 -0
  28. package/templates/{next-prisma-postgres-shadcn → bases/nextjs-base}/next.config.ts +1 -3
  29. package/templates/bases/nextjs-base/package.json +24 -0
  30. package/templates/bases/nextjs-base/template.json +7 -0
  31. package/templates/{next-prisma-postgres-shadcn → bases/nextjs-base}/tsconfig.json +1 -6
  32. package/templates/databases/prisma-mongodb/config.json +21 -0
  33. package/templates/{next-prisma-postgres-shadcn → databases/prisma-mongodb}/lib/db.ts +2 -3
  34. package/templates/databases/prisma-mongodb/prisma/schema.prisma +16 -0
  35. package/templates/databases/prisma-postgresql/config.json +22 -0
  36. package/templates/databases/prisma-postgresql/lib/db.ts +13 -0
  37. package/templates/databases/prisma-postgresql/prisma/schema.prisma +16 -0
  38. package/templates/next-prisma-postgres-shadcn/.env.example +0 -5
  39. package/templates/next-prisma-postgres-shadcn/.eslintrc.json +0 -7
  40. package/templates/next-prisma-postgres-shadcn/.prettierrc +0 -8
  41. package/templates/next-prisma-postgres-shadcn/README.md +0 -85
  42. package/templates/next-prisma-postgres-shadcn/app/api/health/route.ts +0 -25
  43. package/templates/next-prisma-postgres-shadcn/app/globals.css +0 -1
  44. package/templates/next-prisma-postgres-shadcn/app/page.tsx +0 -29
  45. package/templates/next-prisma-postgres-shadcn/lib/env.ts +0 -15
  46. package/templates/next-prisma-postgres-shadcn/package.json +0 -32
  47. package/templates/next-prisma-postgres-shadcn/prisma/schema.prisma +0 -20
  48. package/templates/next-prisma-postgres-shadcn/public/.gitkeep +0 -1
  49. 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
- Quick project scaffolder for StackKit - create production-ready Next.js projects instantly.
3
+ Production-ready project generator with interactive wizard setup.
4
4
 
5
5
  [![npm](https://img.shields.io/npm/v/create-stackkit-app)](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
- ## What It Does
23
+ ## Interactive Wizard
24
24
 
25
- `create-stackkit-app` is a thin wrapper around `stackkit-cli` that provides quick project initialization without global installation.
25
+ The wizard guides you through project setup:
26
26
 
27
- It automatically:
28
- 1. Installs `stackkit-cli` temporarily
29
- 2. Runs `stackkit init` with your options
30
- 3. Creates a production-ready Next.js project
27
+ 1. **Framework Selection**
28
+ - Next.js
29
+ - Express.js
30
+ - React (Vite)
31
+ - Astro
31
32
 
32
- ## Options
33
+ 2. **Database/ORM**
34
+ - Prisma + PostgreSQL
35
+ - Prisma + MongoDB
36
+ - Mongoose + MongoDB
37
+ - Drizzle + PostgreSQL
38
+ - None
33
39
 
34
- All `stackkit-cli init` options are supported:
40
+ 3. **Authentication**
41
+ - Auth.js (NextAuth)
42
+ - Better Auth
43
+ - Clerk
44
+ - None
35
45
 
36
- ```bash
37
- npx create-stackkit-app my-app --template next-prisma-postgres-shadcn --pm pnpm
46
+ 4. **Language**
47
+ - TypeScript *(recommended)*
48
+ - JavaScript
38
49
 
39
- npx create-stackkit-app my-app --no-install --no-git --yes
40
- ```
50
+ 5. **Package Manager**
51
+ - pnpm *(recommended)*
52
+ - npm
53
+ - yarn
54
+
55
+ ## Automatic Setup
41
56
 
42
- **Available options:**
43
- - `--template <name>` - Template to use
44
- - `--pm <npm|yarn|pnpm>` - Package manager
45
- - `--no-install` - Skip dependency installation
46
- - `--no-git` - Skip git initialization
47
- - `--yes` - Skip all prompts
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
- The default template includes:
52
- - ✅ Next.js 15 with App Router
53
- - TypeScript
54
- - Prisma ORM + PostgreSQL
55
- - shadcn/ui components
56
- - Tailwind CSS
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
- - ESLint + Prettier
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 features with modules:
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 more features, use the full CLI:
94
+ For advanced features:
79
95
 
80
96
  ```bash
81
97
  npm install -g stackkit-cli
82
98
 
83
- stackkit init my-app
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":"AAiBA,wBAAsB,aAAa,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBvE"}
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 base template
124
+ // Copy and compose template
125
125
  const copySpinner = (0, ora_1.default)('Creating project files...').start();
126
126
  try {
127
- await copyBaseTemplate(config, targetDir);
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 copyBaseTemplate(config, targetDir) {
154
+ async function composeTemplate(config, targetDir) {
155
155
  const templatesDir = path_1.default.join(__dirname, '..', '..', 'templates');
156
- // Map configuration to template directory
157
- let templateDir;
158
- if (config.framework === 'nextjs' &&
159
- (config.database === 'prisma-postgresql' || config.database === 'prisma-mongodb')) {
160
- // Use existing Next.js + Prisma template
161
- templateDir = path_1.default.join(templatesDir, 'next-prisma-postgres-shadcn');
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
- // Verify template exists
168
- if (!(await fs_extra_1.default.pathExists(templateDir))) {
169
- throw new Error(`Template not found at ${templateDir}`);
163
+ // 3. Merge auth configuration
164
+ if (config.auth !== 'none') {
165
+ await mergeAuthConfig(templatesDir, targetDir, config.framework, config.auth);
170
166
  }
171
- // Copy template to target directory
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
- // Handle language conversion if JavaScript selected
174
+ // 5. Convert to JavaScript if selected
189
175
  if (config.language === 'javascript') {
190
176
  await convertToJavaScript(targetDir);
191
177
  }
192
- // Update database configuration if MongoDB selected
193
- if (config.database === 'prisma-mongodb') {
194
- await updatePrismaForMongoDB(targetDir);
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":"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"}
@@ -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