create-sprint 0.0.7 → 0.0.8

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.
@@ -1,13 +1,13 @@
1
1
  export function getTypeScriptPackageJson(name, telemetry) {
2
2
  const deps = {
3
- "sprint-es": "^0.0.24",
3
+ "sprint-es": "^0.0.28",
4
+ "sprint": "^0.0.1",
4
5
  dotenv: "^17.0.0",
5
6
  };
6
7
  const devDeps = {
7
8
  "@types/node": "^22.0.0",
8
9
  "tsx": "^4.19.0",
9
10
  typescript: "^5.6.0",
10
- vite: "^6.0.0",
11
11
  };
12
12
  if (telemetry === "sentry" || telemetry === "glitchtip") {
13
13
  deps["@sentry/node"] = "^8.0.0";
@@ -21,9 +21,9 @@ export function getTypeScriptPackageJson(name, telemetry) {
21
21
  description: "Sprint API",
22
22
  main: "dist/index.js",
23
23
  scripts: {
24
- build: "vite build",
25
- start: "NODE_ENV=production node dist/index.js",
26
- dev: "NODE_ENV=development tsx src/index.ts",
24
+ build: "sprint build",
25
+ start: "sprint start",
26
+ dev: "sprint dev",
27
27
  },
28
28
  dependencies: deps,
29
29
  devDependencies: devDeps,
@@ -31,7 +31,8 @@ export function getTypeScriptPackageJson(name, telemetry) {
31
31
  }
32
32
  export function getJavaScriptPackageJson(name, telemetry) {
33
33
  const deps = {
34
- "sprint-es": "^0.0.24",
34
+ "sprint-es": "^0.0.28",
35
+ "sprint": "^0.0.1",
35
36
  dotenv: "^17.0.0",
36
37
  };
37
38
  if (telemetry === "sentry" || telemetry === "glitchtip") {
@@ -47,8 +48,9 @@ export function getJavaScriptPackageJson(name, telemetry) {
47
48
  main: "src/index.js",
48
49
  type: "module",
49
50
  scripts: {
50
- start: "NODE_ENV=production node src/index.js",
51
- dev: "NODE_ENV=development node --watch src/index.js",
51
+ build: "sprint build",
52
+ start: "sprint start",
53
+ dev: "sprint dev",
52
54
  },
53
55
  dependencies: deps,
54
56
  };
@@ -71,6 +73,10 @@ export function getTsConfig() {
71
73
  declarationMap: true,
72
74
  sourceMap: true,
73
75
  tabWidth: 4,
76
+ baseUrl: ".",
77
+ paths: {
78
+ "@/*": ["./src/*"]
79
+ }
74
80
  },
75
81
  include: ["src/**/*"],
76
82
  exclude: ["node_modules", "dist"],
@@ -104,43 +110,35 @@ export default defineConfig({
104
110
  export function getMainFile(language) {
105
111
  if (language === "typescript") {
106
112
  return `import Sprint from "sprint-es";
107
- import { config } from "./sprint.config";
108
113
 
109
- const app = new Sprint(config);
114
+ const app = new Sprint();
110
115
  `;
111
116
  }
112
117
  return `import Sprint from "sprint-es";
113
- import { config } from "./sprint.config.js";
114
118
 
115
- const app = new Sprint(config);
119
+ const app = new Sprint();
116
120
  `;
117
121
  }
118
122
  export function getHomeRoute(language) {
119
123
  if (language === "typescript") {
120
124
  return `import { Router } from "sprint-es";
125
+ import { homeSchema } from "@/schemas/home";
126
+ import { homeController } from "@/controllers/home";
121
127
 
122
128
  const router = Router();
123
129
 
124
- router.get("/", (req, res) => {
125
- res.json({
126
- message: "Hello World",
127
- status: "ok"
128
- });
129
- });
130
+ router.get("/", homeSchema, homeController);
130
131
 
131
132
  export default router;
132
133
  `;
133
134
  }
134
135
  return `import { Router } from "sprint-es";
136
+ import { homeSchema } from "../schemas/home.js";
137
+ import { homeController } from "../controllers/home.js";
135
138
 
136
139
  const router = Router();
137
140
 
138
- router.get("/", (req, res) => {
139
- res.json({
140
- message: "Hello World",
141
- status: "ok"
142
- });
143
- });
141
+ router.get("/", homeSchema, homeController);
144
142
 
145
143
  export default router;
146
144
  `;
@@ -148,49 +146,149 @@ export default router;
148
146
  export function getAdminRoute(language) {
149
147
  if (language === "typescript") {
150
148
  return `import { Router } from "sprint-es";
149
+ import { adminSchema } from "@/schemas/admin";
150
+ import { adminController, adminUsersController } from "@/controllers/admin";
151
+
152
+ const router = Router();
153
+
154
+ router.get("/", adminSchema, adminController);
155
+ router.get("/users", adminSchema, adminUsersController);
156
+
157
+ export default router;
158
+ `;
159
+ }
160
+ return `import { Router } from "sprint-es";
161
+ import { adminSchema } from "../schemas/admin.js";
162
+ import { adminController, adminUsersController } from "../controllers/admin.js";
151
163
 
152
164
  const router = Router();
153
165
 
154
- router.get("/", (req, res) => {
166
+ router.get("/", adminSchema, adminController);
167
+ router.get("/users", adminSchema, adminUsersController);
168
+
169
+ export default router;
170
+ `;
171
+ }
172
+ export function getHomeController(language) {
173
+ if (language === "typescript") {
174
+ return `import { Handler } from "sprint-es";
175
+
176
+ export const homeController: Handler = (req, res) => {
177
+ res.json({
178
+ message: "Hello World",
179
+ status: "ok"
180
+ });
181
+ };
182
+ `;
183
+ }
184
+ return `import { Handler } from "sprint-es";
185
+
186
+ export const homeController = (req, res) => {
187
+ res.json({
188
+ message: "Hello World",
189
+ status: "ok"
190
+ });
191
+ };
192
+ `;
193
+ }
194
+ export function getAdminController(language) {
195
+ if (language === "typescript") {
196
+ return `import { Handler } from "sprint-es";
197
+
198
+ export const adminController: Handler = (req, res) => {
155
199
  res.json({
156
200
  message: "Admin Dashboard",
157
201
  status: "ok"
158
202
  });
159
- });
203
+ };
160
204
 
161
- router.get("/users", (req, res) => {
205
+ export const adminUsersController: Handler = (req, res) => {
162
206
  res.json({
163
207
  users: [
164
208
  { id: 1, name: "John Doe", role: "admin" },
165
209
  { id: 2, name: "Jane Smith", role: "user" }
166
210
  ]
167
211
  });
168
- });
169
-
170
- export default router;
212
+ };
171
213
  `;
172
214
  }
173
- return `import { Router } from "sprint-es";
215
+ return `import { Handler } from "sprint-es";
174
216
 
175
- const router = Router();
176
-
177
- router.get("/", (req, res) => {
217
+ export const adminController = (req, res) => {
178
218
  res.json({
179
219
  message: "Admin Dashboard",
180
220
  status: "ok"
181
221
  });
182
- });
222
+ };
183
223
 
184
- router.get("/users", (req, res) => {
224
+ export const adminUsersController = (req, res) => {
185
225
  res.json({
186
226
  users: [
187
227
  { id: 1, name: "John Doe", role: "admin" },
188
228
  { id: 2, name: "Jane Smith", role: "user" }
189
229
  ]
190
230
  });
231
+ };
232
+ `;
233
+ }
234
+ export function getHomeSchema(language) {
235
+ if (language === "typescript") {
236
+ return `import { z, defineRouteSchema } from "sprint-es/schemas";
237
+
238
+ export const homeSchema = defineRouteSchema({
239
+ input: z.object({
240
+ message: z.string(),
241
+ status: z.string()
242
+ })
191
243
  });
244
+ `;
245
+ }
246
+ return `import { z, defineRouteSchema } from "sprint-es/schemas";
192
247
 
193
- export default router;
248
+ export const homeSchema = defineRouteSchema({
249
+ input: z.object({
250
+ message: z.string(),
251
+ status: z.string()
252
+ })
253
+ });
254
+ `;
255
+ }
256
+ export function getAdminSchema(language) {
257
+ if (language === "typescript") {
258
+ return `import { z, defineRouteSchema } from "sprint-es/schemas";
259
+
260
+ export const adminSchema = defineRouteSchema({
261
+ params: z.object({
262
+ id: z.string().uuid()
263
+ }),
264
+ body: z.object({
265
+ name: z.string().min(1),
266
+ email: z.email().optional()
267
+ }),
268
+ input: z.object({
269
+ id: z.string().uuid(),
270
+ name: z.string(),
271
+ email: z.string().email().optional()
272
+ })
273
+ });
274
+ `;
275
+ }
276
+ return `import { z, defineRouteSchema } from "sprint-es/schemas";
277
+
278
+ export const adminSchema = defineRouteSchema({
279
+ params: z.object({
280
+ id: z.string().uuid()
281
+ }),
282
+ body: z.object({
283
+ name: z.string().min(1),
284
+ email: z.email().optional()
285
+ }),
286
+ input: z.object({
287
+ id: z.string().uuid(),
288
+ name: z.string(),
289
+ email: z.string().email().optional()
290
+ })
291
+ });
194
292
  `;
195
293
  }
196
294
  export function getAuthMiddleware(language) {
@@ -358,6 +456,11 @@ export const config: SprintOptions = {
358
456
  port: process.env.PORT ? parseInt(process.env.PORT) : 3000
359
457
  };
360
458
 
459
+ // Add Vite config here if needed
460
+ // export const vite = {
461
+ // build: { ... }
462
+ // };
463
+
361
464
  `;
362
465
  if (telemetry === "sentry" || telemetry === "glitchtip") {
363
466
  config += `import { initTelemetry } from "sprint-es/telemetry";
package/dist/index.js CHANGED
@@ -4,7 +4,7 @@ import { mkdir, writeFile } from "fs/promises";
4
4
  import { join } from "path";
5
5
  import { input, select, confirm } from "@inquirer/prompts";
6
6
  import { validateProjectName } from "./validators.js";
7
- import { getTypeScriptPackageJson, getJavaScriptPackageJson, getTsConfig, getViteConfig, getMainFile, getHomeRoute, getAdminRoute, getAuthMiddleware, getDockerfile, getDockerCompose, getGitignore, getDockerIgnore, getSprintConfigFile, getEnvExample, getEnvDevelopment, getEnvProduction } from "./generators.js";
7
+ import { getTypeScriptPackageJson, getJavaScriptPackageJson, getTsConfig, getViteConfig, getMainFile, getHomeRoute, getAdminRoute, getHomeController, getAdminController, getAuthMiddleware, getHomeSchema, getAdminSchema, getDockerfile, getDockerCompose, getGitignore, getDockerIgnore, getSprintConfigFile, getEnvDevelopment, getEnvProduction } from "./generators.js";
8
8
  export async function runCLI(args) {
9
9
  const options = parseArgs(args);
10
10
  console.log("\n🚀 Welcome to Sprint - Quickly API Framework\n");
@@ -30,7 +30,7 @@ export async function runCLI(args) {
30
30
  if (options.skipInstall) {
31
31
  installDeps = false;
32
32
  }
33
- else if (!options.skipPrompts) {
33
+ else {
34
34
  installDeps = await confirm({
35
35
  message: "Do you want to install dependencies now?",
36
36
  default: true,
@@ -64,11 +64,16 @@ function parseArgs(args) {
64
64
  if (args.includes("--yes") || args.includes("-y")) {
65
65
  options.skipPrompts = true;
66
66
  }
67
- if (hasTs) {
68
- options.language = "typescript";
67
+ if (!options.skipPrompts) {
68
+ if (hasTs) {
69
+ options.language = "typescript";
70
+ }
71
+ else if (hasJs) {
72
+ options.language = "javascript";
73
+ }
69
74
  }
70
- else if (hasJs) {
71
- options.language = "javascript";
75
+ else {
76
+ options.language = "typescript";
72
77
  }
73
78
  if (hasName !== -1 && args[hasName + 1]) {
74
79
  options.projectName = args[hasName + 1];
@@ -184,15 +189,20 @@ async function createProject(projectName, language, telemetryArg, useDockerArg)
184
189
  await mkdir(join(srcDir, "middlewares"), { recursive: true });
185
190
  await mkdir(join(srcDir, "routes"), { recursive: true });
186
191
  await mkdir(join(srcDir, "controllers"), { recursive: true });
192
+ await mkdir(join(srcDir, "schemas"), { recursive: true });
187
193
  await writeFile(join(srcDir, "middlewares", ".gitkeep"), "");
188
- await writeFile(join(srcDir, "controllers", ".gitkeep"), "");
189
194
  await writeFile(join(srcDir, "app." + (language === "typescript" ? "ts" : "js")), getMainFile(language));
190
195
  await writeFile(join(srcDir, "routes", "home." + (language === "typescript" ? "ts" : "js")), getHomeRoute(language));
191
196
  await writeFile(join(srcDir, "routes", "admin." + (language === "typescript" ? "ts" : "js")), getAdminRoute(language));
197
+ await writeFile(join(srcDir, "controllers", "home." + (language === "typescript" ? "ts" : "js")), getHomeController(language));
198
+ await writeFile(join(srcDir, "controllers", "admin." + (language === "typescript" ? "ts" : "js")), getAdminController(language));
192
199
  await writeFile(join(srcDir, "middlewares", "auth." + (language === "typescript" ? "ts" : "js")), getAuthMiddleware(language));
193
- await writeFile(join(targetDir, ".env.example"), getEnvExample(telemetry));
194
- await writeFile(join(targetDir, ".env.development"), getEnvDevelopment(telemetry));
195
- await writeFile(join(targetDir, ".env.production"), getEnvProduction(telemetry));
200
+ await writeFile(join(srcDir, "schemas", "home." + (language === "typescript" ? "ts" : "js")), getHomeSchema(language));
201
+ await writeFile(join(srcDir, "schemas", "admin." + (language === "typescript" ? "ts" : "js")), getAdminSchema(language));
202
+ await writeFile(join(targetDir, ".env.development.example"), getEnvDevelopment(telemetry));
203
+ await writeFile(join(targetDir, ".env.production.example"), getEnvProduction(telemetry));
204
+ await writeFile(join(targetDir, ".env.development"), "");
205
+ await writeFile(join(targetDir, ".env.production"), "");
196
206
  await writeFile(join(targetDir, ".gitignore"), getGitignore());
197
207
  if (useDocker) {
198
208
  await writeFile(join(targetDir, "Dockerfile"), getDockerfile(language));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-sprint",
3
- "version": "0.0.7",
3
+ "version": "0.0.8",
4
4
  "description": "Create a new Sprint API project",
5
5
  "type": "module",
6
6
  "bin": {
package/src/generators.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export function getTypeScriptPackageJson(name: string, telemetry: string) {
2
2
  const deps: Record<string, string> = {
3
- "sprint-es": "^0.0.24",
3
+ "sprint-es": "^0.0.28",
4
+ "sprint": "^0.0.1",
4
5
  dotenv: "^17.0.0",
5
6
  };
6
7
 
@@ -8,7 +9,6 @@ export function getTypeScriptPackageJson(name: string, telemetry: string) {
8
9
  "@types/node": "^22.0.0",
9
10
  "tsx": "^4.19.0",
10
11
  typescript: "^5.6.0",
11
- vite: "^6.0.0",
12
12
  };
13
13
 
14
14
  if (telemetry === "sentry" || telemetry === "glitchtip") {
@@ -23,9 +23,9 @@ export function getTypeScriptPackageJson(name: string, telemetry: string) {
23
23
  description: "Sprint API",
24
24
  main: "dist/index.js",
25
25
  scripts: {
26
- build: "vite build",
27
- start: "NODE_ENV=production node dist/index.js",
28
- dev: "NODE_ENV=development tsx src/index.ts",
26
+ build: "sprint build",
27
+ start: "sprint start",
28
+ dev: "sprint dev",
29
29
  },
30
30
  dependencies: deps,
31
31
  devDependencies: devDeps,
@@ -34,7 +34,8 @@ export function getTypeScriptPackageJson(name: string, telemetry: string) {
34
34
 
35
35
  export function getJavaScriptPackageJson(name: string, telemetry: string) {
36
36
  const deps: Record<string, string> = {
37
- "sprint-es": "^0.0.24",
37
+ "sprint-es": "^0.0.28",
38
+ "sprint": "^0.0.1",
38
39
  dotenv: "^17.0.0",
39
40
  };
40
41
 
@@ -51,8 +52,9 @@ export function getJavaScriptPackageJson(name: string, telemetry: string) {
51
52
  main: "src/index.js",
52
53
  type: "module",
53
54
  scripts: {
54
- start: "NODE_ENV=production node src/index.js",
55
- dev: "NODE_ENV=development node --watch src/index.js",
55
+ build: "sprint build",
56
+ start: "sprint start",
57
+ dev: "sprint dev",
56
58
  },
57
59
  dependencies: deps,
58
60
  };
@@ -76,6 +78,10 @@ export function getTsConfig() {
76
78
  declarationMap: true,
77
79
  sourceMap: true,
78
80
  tabWidth: 4,
81
+ baseUrl: ".",
82
+ paths: {
83
+ "@/*": ["./src/*"]
84
+ }
79
85
  },
80
86
  include: ["src/**/*"],
81
87
  exclude: ["node_modules", "dist"],
@@ -111,45 +117,37 @@ export default defineConfig({
111
117
  export function getMainFile(language: string) {
112
118
  if (language === "typescript") {
113
119
  return `import Sprint from "sprint-es";
114
- import { config } from "./sprint.config";
115
120
 
116
- const app = new Sprint(config);
121
+ const app = new Sprint();
117
122
  `;
118
123
  }
119
124
 
120
125
  return `import Sprint from "sprint-es";
121
- import { config } from "./sprint.config.js";
122
126
 
123
- const app = new Sprint(config);
127
+ const app = new Sprint();
124
128
  `;
125
129
  }
126
130
 
127
131
  export function getHomeRoute(language: string) {
128
132
  if (language === "typescript") {
129
133
  return `import { Router } from "sprint-es";
134
+ import { homeSchema } from "@/schemas/home";
135
+ import { homeController } from "@/controllers/home";
130
136
 
131
137
  const router = Router();
132
138
 
133
- router.get("/", (req, res) => {
134
- res.json({
135
- message: "Hello World",
136
- status: "ok"
137
- });
138
- });
139
+ router.get("/", homeSchema, homeController);
139
140
 
140
141
  export default router;
141
142
  `;
142
143
  }
143
144
  return `import { Router } from "sprint-es";
145
+ import { homeSchema } from "../schemas/home.js";
146
+ import { homeController } from "../controllers/home.js";
144
147
 
145
148
  const router = Router();
146
149
 
147
- router.get("/", (req, res) => {
148
- res.json({
149
- message: "Hello World",
150
- status: "ok"
151
- });
152
- });
150
+ router.get("/", homeSchema, homeController);
153
151
 
154
152
  export default router;
155
153
  `;
@@ -158,49 +156,153 @@ export default router;
158
156
  export function getAdminRoute(language: string) {
159
157
  if (language === "typescript") {
160
158
  return `import { Router } from "sprint-es";
159
+ import { adminSchema } from "@/schemas/admin";
160
+ import { adminController, adminUsersController } from "@/controllers/admin";
161
161
 
162
162
  const router = Router();
163
163
 
164
- router.get("/", (req, res) => {
164
+ router.get("/", adminSchema, adminController);
165
+ router.get("/users", adminSchema, adminUsersController);
166
+
167
+ export default router;
168
+ `;
169
+ }
170
+ return `import { Router } from "sprint-es";
171
+ import { adminSchema } from "../schemas/admin.js";
172
+ import { adminController, adminUsersController } from "../controllers/admin.js";
173
+
174
+ const router = Router();
175
+
176
+ router.get("/", adminSchema, adminController);
177
+ router.get("/users", adminSchema, adminUsersController);
178
+
179
+ export default router;
180
+ `;
181
+ }
182
+
183
+ export function getHomeController(language: string) {
184
+ if (language === "typescript") {
185
+ return `import { Handler } from "sprint-es";
186
+
187
+ export const homeController: Handler = (req, res) => {
188
+ res.json({
189
+ message: "Hello World",
190
+ status: "ok"
191
+ });
192
+ };
193
+ `;
194
+ }
195
+ return `import { Handler } from "sprint-es";
196
+
197
+ export const homeController = (req, res) => {
198
+ res.json({
199
+ message: "Hello World",
200
+ status: "ok"
201
+ });
202
+ };
203
+ `;
204
+ }
205
+
206
+ export function getAdminController(language: string) {
207
+ if (language === "typescript") {
208
+ return `import { Handler } from "sprint-es";
209
+
210
+ export const adminController: Handler = (req, res) => {
165
211
  res.json({
166
212
  message: "Admin Dashboard",
167
213
  status: "ok"
168
214
  });
169
- });
215
+ };
170
216
 
171
- router.get("/users", (req, res) => {
217
+ export const adminUsersController: Handler = (req, res) => {
172
218
  res.json({
173
219
  users: [
174
220
  { id: 1, name: "John Doe", role: "admin" },
175
221
  { id: 2, name: "Jane Smith", role: "user" }
176
222
  ]
177
223
  });
178
- });
179
-
180
- export default router;
224
+ };
181
225
  `;
182
226
  }
183
- return `import { Router } from "sprint-es";
227
+ return `import { Handler } from "sprint-es";
184
228
 
185
- const router = Router();
186
-
187
- router.get("/", (req, res) => {
229
+ export const adminController = (req, res) => {
188
230
  res.json({
189
231
  message: "Admin Dashboard",
190
232
  status: "ok"
191
233
  });
192
- });
234
+ };
193
235
 
194
- router.get("/users", (req, res) => {
236
+ export const adminUsersController = (req, res) => {
195
237
  res.json({
196
238
  users: [
197
239
  { id: 1, name: "John Doe", role: "admin" },
198
240
  { id: 2, name: "Jane Smith", role: "user" }
199
241
  ]
200
242
  });
243
+ };
244
+ `;
245
+ }
246
+
247
+ export function getHomeSchema(language: string) {
248
+ if (language === "typescript") {
249
+ return `import { z, defineRouteSchema } from "sprint-es/schemas";
250
+
251
+ export const homeSchema = defineRouteSchema({
252
+ input: z.object({
253
+ message: z.string(),
254
+ status: z.string()
255
+ })
201
256
  });
257
+ `;
258
+ }
259
+ return `import { z, defineRouteSchema } from "sprint-es/schemas";
202
260
 
203
- export default router;
261
+ export const homeSchema = defineRouteSchema({
262
+ input: z.object({
263
+ message: z.string(),
264
+ status: z.string()
265
+ })
266
+ });
267
+ `;
268
+ }
269
+
270
+ export function getAdminSchema(language: string) {
271
+ if (language === "typescript") {
272
+ return `import { z, defineRouteSchema } from "sprint-es/schemas";
273
+
274
+ export const adminSchema = defineRouteSchema({
275
+ params: z.object({
276
+ id: z.string().uuid()
277
+ }),
278
+ body: z.object({
279
+ name: z.string().min(1),
280
+ email: z.email().optional()
281
+ }),
282
+ input: z.object({
283
+ id: z.string().uuid(),
284
+ name: z.string(),
285
+ email: z.string().email().optional()
286
+ })
287
+ });
288
+ `;
289
+ }
290
+ return `import { z, defineRouteSchema } from "sprint-es/schemas";
291
+
292
+ export const adminSchema = defineRouteSchema({
293
+ params: z.object({
294
+ id: z.string().uuid()
295
+ }),
296
+ body: z.object({
297
+ name: z.string().min(1),
298
+ email: z.email().optional()
299
+ }),
300
+ input: z.object({
301
+ id: z.string().uuid(),
302
+ name: z.string(),
303
+ email: z.string().email().optional()
304
+ })
305
+ });
204
306
  `;
205
307
  }
206
308
 
@@ -374,6 +476,11 @@ export const config: SprintOptions = {
374
476
  port: process.env.PORT ? parseInt(process.env.PORT) : 3000
375
477
  };
376
478
 
479
+ // Add Vite config here if needed
480
+ // export const vite = {
481
+ // build: { ... }
482
+ // };
483
+
377
484
  `;
378
485
 
379
486
  if (telemetry === "sentry" || telemetry === "glitchtip") {
package/src/index.ts CHANGED
@@ -4,7 +4,7 @@ import { mkdir, writeFile } from "fs/promises";
4
4
  import { join } from "path";
5
5
  import { input, select, confirm } from "@inquirer/prompts";
6
6
  import { validateProjectName } from "./validators.js";
7
- import { getTypeScriptPackageJson, getJavaScriptPackageJson, getTsConfig, getViteConfig, getMainFile, getHomeRoute, getAdminRoute, getAuthMiddleware, getDockerfile, getDockerCompose, getGitignore, getDockerIgnore, getSprintConfigFile, getEnvExample, getEnvDevelopment, getEnvProduction } from "./generators.js";
7
+ import { getTypeScriptPackageJson, getJavaScriptPackageJson, getTsConfig, getViteConfig, getMainFile, getHomeRoute, getAdminRoute, getHomeController, getAdminController, getAuthMiddleware, getHomeSchema, getAdminSchema, getDockerfile, getDockerCompose, getGitignore, getDockerIgnore, getSprintConfigFile, getEnvDevelopment, getEnvProduction } from "./generators.js";
8
8
 
9
9
  export interface CLIOptions {
10
10
  projectName?: string;
@@ -48,7 +48,7 @@ export async function runCLI(args: string[]) {
48
48
  let installDeps = true;
49
49
  if (options.skipInstall) {
50
50
  installDeps = false;
51
- } else if (!options.skipPrompts) {
51
+ } else {
52
52
  installDeps = await confirm({
53
53
  message: "Do you want to install dependencies now?",
54
54
  default: true,
@@ -87,10 +87,14 @@ function parseArgs(args: string[]): CLIOptions {
87
87
  options.skipPrompts = true;
88
88
  }
89
89
 
90
- if (hasTs) {
90
+ if (!options.skipPrompts) {
91
+ if (hasTs) {
92
+ options.language = "typescript";
93
+ } else if (hasJs) {
94
+ options.language = "javascript";
95
+ }
96
+ } else {
91
97
  options.language = "typescript";
92
- } else if (hasJs) {
93
- options.language = "javascript";
94
98
  }
95
99
 
96
100
  if (hasName !== -1 && args[hasName + 1]) {
@@ -231,20 +235,28 @@ async function createProject(
231
235
  await mkdir(join(srcDir, "middlewares"), { recursive: true });
232
236
  await mkdir(join(srcDir, "routes"), { recursive: true });
233
237
  await mkdir(join(srcDir, "controllers"), { recursive: true });
238
+ await mkdir(join(srcDir, "schemas"), { recursive: true });
234
239
 
235
240
  await writeFile(join(srcDir, "middlewares", ".gitkeep"), "");
236
- await writeFile(join(srcDir, "controllers", ".gitkeep"), "");
237
241
 
238
242
  await writeFile(join(srcDir, "app." + (language === "typescript" ? "ts" : "js")), getMainFile(language));
239
243
 
240
244
  await writeFile(join(srcDir, "routes", "home." + (language === "typescript" ? "ts" : "js")), getHomeRoute(language));
241
245
  await writeFile(join(srcDir, "routes", "admin." + (language === "typescript" ? "ts" : "js")), getAdminRoute(language));
242
246
 
247
+ await writeFile(join(srcDir, "controllers", "home." + (language === "typescript" ? "ts" : "js")), getHomeController(language));
248
+ await writeFile(join(srcDir, "controllers", "admin." + (language === "typescript" ? "ts" : "js")), getAdminController(language));
249
+
243
250
  await writeFile(join(srcDir, "middlewares", "auth." + (language === "typescript" ? "ts" : "js")), getAuthMiddleware(language));
244
251
 
245
- await writeFile(join(targetDir, ".env.example"), getEnvExample(telemetry));
246
- await writeFile(join(targetDir, ".env.development"), getEnvDevelopment(telemetry));
247
- await writeFile(join(targetDir, ".env.production"), getEnvProduction(telemetry));
252
+ await writeFile(join(srcDir, "schemas", "home." + (language === "typescript" ? "ts" : "js")), getHomeSchema(language));
253
+ await writeFile(join(srcDir, "schemas", "admin." + (language === "typescript" ? "ts" : "js")), getAdminSchema(language));
254
+
255
+ await writeFile(join(targetDir, ".env.development.example"), getEnvDevelopment(telemetry));
256
+ await writeFile(join(targetDir, ".env.production.example"), getEnvProduction(telemetry));
257
+
258
+ await writeFile(join(targetDir, ".env.development"), "");
259
+ await writeFile(join(targetDir, ".env.production"), "");
248
260
 
249
261
  await writeFile(join(targetDir, ".gitignore"), getGitignore());
250
262