create-stackkit-app 0.1.5 → 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 (42) hide show
  1. package/README.md +46 -31
  2. package/dist/index.js +4 -12
  3. package/dist/index.js.map +1 -1
  4. package/dist/lib/create-project.d.ts +2 -0
  5. package/dist/lib/create-project.d.ts.map +1 -0
  6. package/dist/lib/create-project.js +380 -0
  7. package/dist/lib/create-project.js.map +1 -0
  8. package/dist/lib/template-composer.d.ts +17 -0
  9. package/dist/lib/template-composer.d.ts.map +1 -0
  10. package/dist/lib/template-composer.js +199 -0
  11. package/dist/lib/template-composer.js.map +1 -0
  12. package/package.json +17 -5
  13. package/templates/auth/better-auth-express/config.json +18 -0
  14. package/templates/auth/better-auth-express/src/lib/auth.ts +12 -0
  15. package/templates/auth/better-auth-express/src/routes/auth.ts +10 -0
  16. package/templates/auth/better-auth-nextjs/app/api/auth/[...all]/route.ts +4 -0
  17. package/templates/auth/better-auth-nextjs/config.json +18 -0
  18. package/templates/auth/better-auth-nextjs/lib/auth.ts +14 -0
  19. package/templates/auth/nextauth/app/api/auth/[...nextauth]/route.ts +3 -0
  20. package/templates/auth/nextauth/config.json +18 -0
  21. package/templates/auth/nextauth/lib/auth.ts +31 -0
  22. package/templates/bases/express-base/.env.example +2 -0
  23. package/templates/bases/express-base/package.json +23 -0
  24. package/templates/bases/express-base/src/index.ts +27 -0
  25. package/templates/bases/express-base/template.json +7 -0
  26. package/templates/bases/express-base/tsconfig.json +17 -0
  27. package/templates/bases/nextjs-base/.eslintrc.json +3 -0
  28. package/templates/bases/nextjs-base/app/globals.css +3 -0
  29. package/templates/bases/nextjs-base/app/layout.tsx +19 -0
  30. package/templates/bases/nextjs-base/app/page.tsx +8 -0
  31. package/templates/bases/nextjs-base/next.config.ts +5 -0
  32. package/templates/bases/nextjs-base/package.json +24 -0
  33. package/templates/bases/nextjs-base/template.json +7 -0
  34. package/templates/bases/nextjs-base/tsconfig.json +27 -0
  35. package/templates/databases/prisma-mongodb/config.json +21 -0
  36. package/templates/databases/prisma-mongodb/lib/db.ts +13 -0
  37. package/templates/databases/prisma-mongodb/prisma/schema.prisma +16 -0
  38. package/templates/databases/prisma-postgresql/config.json +22 -0
  39. package/templates/databases/prisma-postgresql/lib/db.ts +13 -0
  40. package/templates/databases/prisma-postgresql/prisma/schema.prisma +16 -0
  41. package/src/index.ts +0 -21
  42. package/tsconfig.json +0 -9
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
 
package/dist/index.js CHANGED
@@ -1,23 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
- var __importDefault = (this && this.__importDefault) || function (mod) {
4
- return (mod && mod.__esModule) ? mod : { "default": mod };
5
- };
6
3
  Object.defineProperty(exports, "__esModule", { value: true });
7
- const execa_1 = __importDefault(require("execa"));
8
- /**
9
- * Thin wrapper that calls `stackkit init` with arguments
10
- * This allows users to run `npx create-stackkit@latest my-app`
11
- */
4
+ const create_project_1 = require("./lib/create-project");
12
5
  async function main() {
13
6
  const args = process.argv.slice(2);
7
+ const projectName = args[0];
14
8
  try {
15
- // Call stackkit init with forwarded arguments
16
- await (0, execa_1.default)('npx', ['stackkit-cli@latest', 'init', ...args], {
17
- stdio: 'inherit',
18
- });
9
+ await (0, create_project_1.createProject)(projectName);
19
10
  }
20
11
  catch (error) {
12
+ console.error('Error:', error.message);
21
13
  process.exit(1);
22
14
  }
23
15
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AACA,kDAA0B;AAE1B;;;GAGG;AACH,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,IAAI,CAAC;QACH,8CAA8C;QAC9C,MAAM,IAAA,eAAK,EAAC,KAAK,EAAE,CAAC,qBAAqB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE;YAC3D,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,yDAAqD;AAErD,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAE5B,IAAI,CAAC;QACH,MAAM,IAAA,8BAAa,EAAC,WAAW,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function createProject(projectName?: string): Promise<void>;
2
+ //# sourceMappingURL=create-project.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,380 @@
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.createProject = createProject;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const child_process_1 = require("child_process");
9
+ const fs_extra_1 = __importDefault(require("fs-extra"));
10
+ const inquirer_1 = __importDefault(require("inquirer"));
11
+ const ora_1 = __importDefault(require("ora"));
12
+ const path_1 = __importDefault(require("path"));
13
+ const validate_npm_package_name_1 = __importDefault(require("validate-npm-package-name"));
14
+ async function createProject(projectName) {
15
+ console.log(chalk_1.default.bold.cyan('\n🚀 Create StackKit App\n'));
16
+ // Get project configuration through wizard
17
+ const config = await getProjectConfig(projectName);
18
+ // Validate target directory
19
+ const targetDir = path_1.default.join(process.cwd(), config.projectName);
20
+ if (await fs_extra_1.default.pathExists(targetDir)) {
21
+ console.log(chalk_1.default.red(`\n✖ Directory "${config.projectName}" already exists`));
22
+ console.log(chalk_1.default.gray('Please choose a different name or remove the existing directory.\n'));
23
+ process.exit(1);
24
+ }
25
+ // Create project
26
+ await generateProject(config, targetDir);
27
+ // Show next steps
28
+ showNextSteps(config);
29
+ }
30
+ async function getProjectConfig(projectName) {
31
+ const answers = await inquirer_1.default.prompt([
32
+ {
33
+ type: 'input',
34
+ name: 'projectName',
35
+ message: 'Project name:',
36
+ default: projectName || 'my-app',
37
+ when: !projectName,
38
+ validate: (input) => {
39
+ const validation = (0, validate_npm_package_name_1.default)(input);
40
+ if (!validation.validForNewPackages) {
41
+ return validation.errors?.[0] || 'Invalid package name';
42
+ }
43
+ if (fs_extra_1.default.existsSync(path_1.default.join(process.cwd(), input))) {
44
+ return 'Directory already exists';
45
+ }
46
+ return true;
47
+ },
48
+ },
49
+ {
50
+ type: 'list',
51
+ name: 'framework',
52
+ message: 'Select framework:',
53
+ choices: [
54
+ { name: 'Next.js', value: 'nextjs' },
55
+ { name: 'Express.js', value: 'express' },
56
+ { name: 'React (Vite)', value: 'react-vite' },
57
+ { name: 'Astro', value: 'astro' },
58
+ ],
59
+ },
60
+ {
61
+ type: 'list',
62
+ name: 'database',
63
+ message: 'Select database/ORM:',
64
+ choices: [
65
+ { name: 'Prisma + PostgreSQL', value: 'prisma-postgresql' },
66
+ { name: 'Prisma + MongoDB', value: 'prisma-mongodb' },
67
+ { name: 'Mongoose + MongoDB', value: 'mongoose-mongodb' },
68
+ { name: 'Drizzle + PostgreSQL', value: 'drizzle-postgresql' },
69
+ { name: 'None', value: 'none' },
70
+ ],
71
+ },
72
+ {
73
+ type: 'list',
74
+ name: 'auth',
75
+ message: 'Select authentication:',
76
+ choices: (answers) => {
77
+ const baseChoices = [
78
+ { name: 'Auth.js (NextAuth)', value: 'nextauth' },
79
+ { name: 'Better Auth', value: 'better-auth' },
80
+ { name: 'Clerk', value: 'clerk' },
81
+ { name: 'None', value: 'none' },
82
+ ];
83
+ // Filter choices based on framework compatibility
84
+ if (answers.framework === 'nextjs') {
85
+ return baseChoices;
86
+ }
87
+ else if (answers.framework === 'express') {
88
+ return baseChoices.filter((c) => ['better-auth', 'none'].includes(c.value));
89
+ }
90
+ else {
91
+ return [{ name: 'None', value: 'none' }];
92
+ }
93
+ },
94
+ },
95
+ {
96
+ type: 'list',
97
+ name: 'language',
98
+ message: 'Language:',
99
+ choices: [
100
+ { name: 'TypeScript', value: 'typescript' },
101
+ { name: 'JavaScript', value: 'javascript' },
102
+ ],
103
+ default: 'typescript',
104
+ },
105
+ {
106
+ type: 'list',
107
+ name: 'packageManager',
108
+ message: 'Package manager:',
109
+ choices: ['pnpm', 'npm', 'yarn'],
110
+ default: 'pnpm',
111
+ },
112
+ ]);
113
+ return {
114
+ projectName: projectName || answers.projectName,
115
+ framework: answers.framework,
116
+ database: answers.database,
117
+ auth: answers.auth,
118
+ language: answers.language,
119
+ packageManager: answers.packageManager,
120
+ };
121
+ }
122
+ async function generateProject(config, targetDir) {
123
+ console.log();
124
+ // Copy and compose template
125
+ const copySpinner = (0, ora_1.default)('Creating project files...').start();
126
+ try {
127
+ await composeTemplate(config, targetDir);
128
+ copySpinner.succeed('Project files created');
129
+ }
130
+ catch (error) {
131
+ copySpinner.fail('Failed to create project files');
132
+ throw error;
133
+ }
134
+ // Install dependencies
135
+ const installSpinner = (0, ora_1.default)('Installing dependencies...').start();
136
+ try {
137
+ await installDependencies(targetDir, config.packageManager);
138
+ installSpinner.succeed('Dependencies installed');
139
+ }
140
+ catch (error) {
141
+ installSpinner.fail('Failed to install dependencies');
142
+ throw error;
143
+ }
144
+ // Initialize git
145
+ const gitSpinner = (0, ora_1.default)('Initializing git repository...').start();
146
+ try {
147
+ await initGit(targetDir);
148
+ gitSpinner.succeed('Git repository initialized');
149
+ }
150
+ catch (error) {
151
+ gitSpinner.warn('Failed to initialize git repository');
152
+ }
153
+ }
154
+ async function composeTemplate(config, targetDir) {
155
+ const templatesDir = path_1.default.join(__dirname, '..', '..', 'templates');
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);
162
+ }
163
+ // 3. Merge auth configuration
164
+ if (config.auth !== 'none') {
165
+ await mergeAuthConfig(templatesDir, targetDir, config.framework, config.auth);
166
+ }
167
+ // 4. Update package.json with project name
168
+ const packageJsonPath = path_1.default.join(targetDir, 'package.json');
169
+ if (await fs_extra_1.default.pathExists(packageJsonPath)) {
170
+ const packageJson = await fs_extra_1.default.readJson(packageJsonPath);
171
+ packageJson.name = config.projectName;
172
+ await fs_extra_1.default.writeJson(packageJsonPath, packageJson, { spaces: 2 });
173
+ }
174
+ // 5. Convert to JavaScript if selected
175
+ if (config.language === 'javascript') {
176
+ await convertToJavaScript(targetDir);
177
+ }
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);
302
+ }
303
+ }
304
+ async function convertToJavaScript(targetDir) {
305
+ // Remove TypeScript config files
306
+ const tsFiles = ['tsconfig.json', 'next-env.d.ts'];
307
+ for (const file of tsFiles) {
308
+ const filePath = path_1.default.join(targetDir, file);
309
+ if (await fs_extra_1.default.pathExists(filePath)) {
310
+ await fs_extra_1.default.remove(filePath);
311
+ }
312
+ }
313
+ // Rename .ts(x) files to .js(x)
314
+ const renameExtensions = async (dir) => {
315
+ const entries = await fs_extra_1.default.readdir(dir, { withFileTypes: true });
316
+ for (const entry of entries) {
317
+ const fullPath = path_1.default.join(dir, entry.name);
318
+ if (entry.isDirectory() && entry.name !== 'node_modules') {
319
+ await renameExtensions(fullPath);
320
+ }
321
+ else if (entry.isFile()) {
322
+ if (entry.name.endsWith('.ts')) {
323
+ await fs_extra_1.default.rename(fullPath, fullPath.replace(/\.ts$/, '.js'));
324
+ }
325
+ else if (entry.name.endsWith('.tsx')) {
326
+ await fs_extra_1.default.rename(fullPath, fullPath.replace(/\.tsx$/, '.jsx'));
327
+ }
328
+ }
329
+ }
330
+ };
331
+ await renameExtensions(targetDir);
332
+ // Update package.json to remove TypeScript dependencies
333
+ const packageJsonPath = path_1.default.join(targetDir, 'package.json');
334
+ if (await fs_extra_1.default.pathExists(packageJsonPath)) {
335
+ const packageJson = await fs_extra_1.default.readJson(packageJsonPath);
336
+ if (packageJson.devDependencies) {
337
+ delete packageJson.devDependencies['typescript'];
338
+ delete packageJson.devDependencies['@types/node'];
339
+ delete packageJson.devDependencies['@types/react'];
340
+ delete packageJson.devDependencies['@types/react-dom'];
341
+ }
342
+ await fs_extra_1.default.writeJson(packageJsonPath, packageJson, { spaces: 2 });
343
+ }
344
+ }
345
+ async function installDependencies(cwd, packageManager) {
346
+ const commands = {
347
+ npm: 'npm install',
348
+ yarn: 'yarn install',
349
+ pnpm: 'pnpm install',
350
+ };
351
+ const command = commands[packageManager];
352
+ if (!command) {
353
+ throw new Error(`Unsupported package manager: ${packageManager}`);
354
+ }
355
+ (0, child_process_1.execSync)(command, {
356
+ cwd,
357
+ stdio: 'pipe',
358
+ });
359
+ }
360
+ async function initGit(cwd) {
361
+ try {
362
+ (0, child_process_1.execSync)('git --version', { stdio: 'pipe' });
363
+ (0, child_process_1.execSync)('git init', { cwd, stdio: 'pipe' });
364
+ (0, child_process_1.execSync)('git add -A', { cwd, stdio: 'pipe' });
365
+ (0, child_process_1.execSync)('git commit -m "Initial commit from create-stackkit-app"', {
366
+ cwd,
367
+ stdio: 'pipe',
368
+ });
369
+ }
370
+ catch (error) {
371
+ throw new Error('Git initialization failed');
372
+ }
373
+ }
374
+ function showNextSteps(config) {
375
+ console.log(chalk_1.default.green.bold(`\n✓ Created ${config.projectName}\n`));
376
+ console.log(chalk_1.default.bold('Next steps:'));
377
+ console.log(chalk_1.default.cyan(` cd ${config.projectName}`));
378
+ console.log(chalk_1.default.cyan(` ${config.packageManager}${config.packageManager === 'npm' ? ' run' : ''} dev\n`));
379
+ }
380
+ //# sourceMappingURL=create-project.js.map
@@ -0,0 +1 @@
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"}