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.
- package/README.md +46 -31
- package/dist/index.js +4 -12
- package/dist/index.js.map +1 -1
- package/dist/lib/create-project.d.ts +2 -0
- package/dist/lib/create-project.d.ts.map +1 -0
- package/dist/lib/create-project.js +380 -0
- package/dist/lib/create-project.js.map +1 -0
- 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 +17 -5
- 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/bases/nextjs-base/app/layout.tsx +19 -0
- package/templates/bases/nextjs-base/app/page.tsx +8 -0
- package/templates/bases/nextjs-base/next.config.ts +5 -0
- package/templates/bases/nextjs-base/package.json +24 -0
- package/templates/bases/nextjs-base/template.json +7 -0
- package/templates/bases/nextjs-base/tsconfig.json +27 -0
- package/templates/databases/prisma-mongodb/config.json +21 -0
- package/templates/databases/prisma-mongodb/lib/db.ts +13 -0
- 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/src/index.ts +0 -21
- package/tsconfig.json +0 -9
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
|
|
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
|
|
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
|
-
|
|
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":"
|
|
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 @@
|
|
|
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"}
|