create-sprint 0.0.32 ā 0.0.36
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/dist/generators.js +36 -10
- package/dist/index.js +3 -1
- package/package.json +1 -1
- package/src/generators.ts +37 -10
- package/src/index.ts +4 -1
package/dist/generators.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export function getTypeScriptPackageJson(name, telemetry) {
|
|
2
2
|
const deps = {
|
|
3
|
-
"sprint-es": "^0.0.
|
|
3
|
+
"sprint-es": "^0.0.35",
|
|
4
|
+
"node-cron": "^3.0.3",
|
|
4
5
|
dotenv: "^17.0.0",
|
|
5
6
|
};
|
|
6
7
|
const devDeps = {
|
|
@@ -30,7 +31,8 @@ export function getTypeScriptPackageJson(name, telemetry) {
|
|
|
30
31
|
}
|
|
31
32
|
export function getJavaScriptPackageJson(name, telemetry) {
|
|
32
33
|
const deps = {
|
|
33
|
-
"sprint-es": "^0.0.
|
|
34
|
+
"sprint-es": "^0.0.35",
|
|
35
|
+
"node-cron": "^3.0.3",
|
|
34
36
|
dotenv: "^17.0.0",
|
|
35
37
|
};
|
|
36
38
|
if (telemetry === "sentry" || telemetry === "glitchtip") {
|
|
@@ -251,7 +253,7 @@ export const adminSchema = defineRouteSchema({
|
|
|
251
253
|
}),
|
|
252
254
|
body: z.object({
|
|
253
255
|
name: z.string().min(1),
|
|
254
|
-
email: z.email().optional()
|
|
256
|
+
email: z.string().email().optional()
|
|
255
257
|
})
|
|
256
258
|
});
|
|
257
259
|
`;
|
|
@@ -264,7 +266,7 @@ export const adminSchema = defineRouteSchema({
|
|
|
264
266
|
}),
|
|
265
267
|
body: z.object({
|
|
266
268
|
name: z.string().min(1),
|
|
267
|
-
email: z.email().optional()
|
|
269
|
+
email: z.string().email().optional()
|
|
268
270
|
})
|
|
269
271
|
});
|
|
270
272
|
`;
|
|
@@ -278,13 +280,13 @@ export default defineMiddleware({
|
|
|
278
280
|
priority: 10,
|
|
279
281
|
include: "/admin/**",
|
|
280
282
|
handler: (req, res, next) => {
|
|
281
|
-
const
|
|
283
|
+
const auth = req.sprint.getAuthorization();
|
|
282
284
|
|
|
283
|
-
if (!
|
|
285
|
+
if (!auth) {
|
|
284
286
|
return res.status(401).json({ error: "No authorization header" });
|
|
285
287
|
}
|
|
286
288
|
|
|
287
|
-
const token =
|
|
289
|
+
const token = auth.replace("Bearer ", "");
|
|
288
290
|
|
|
289
291
|
if (token !== "admin-token") {
|
|
290
292
|
return res.status(403).json({ error: "Invalid token" });
|
|
@@ -302,13 +304,13 @@ export default defineMiddleware({
|
|
|
302
304
|
priority: 10,
|
|
303
305
|
include: "/admin/**",
|
|
304
306
|
handler: (req, res, next) => {
|
|
305
|
-
const
|
|
307
|
+
const auth = req.sprint.getAuthorization();
|
|
306
308
|
|
|
307
|
-
if (!
|
|
309
|
+
if (!auth) {
|
|
308
310
|
return res.status(401).json({ error: "No authorization header" });
|
|
309
311
|
}
|
|
310
312
|
|
|
311
|
-
const token =
|
|
313
|
+
const token = auth.replace("Bearer ", "");
|
|
312
314
|
|
|
313
315
|
if (token !== "admin-token") {
|
|
314
316
|
return res.status(403).json({ error: "Invalid token" });
|
|
@@ -544,3 +546,27 @@ DISCORD_WEBHOOK_URL=
|
|
|
544
546
|
}
|
|
545
547
|
return env;
|
|
546
548
|
}
|
|
549
|
+
export function getExampleCronJob(language) {
|
|
550
|
+
if (language === "typescript") {
|
|
551
|
+
return `import { defineCronJob } from "sprint-es/cronjobs";
|
|
552
|
+
|
|
553
|
+
export default defineCronJob({
|
|
554
|
+
name: "daily-task",
|
|
555
|
+
cronExpression: "0 21 * * *",
|
|
556
|
+
handler: () => {
|
|
557
|
+
console.log("Hello World from cronjob!");
|
|
558
|
+
}
|
|
559
|
+
});
|
|
560
|
+
`;
|
|
561
|
+
}
|
|
562
|
+
return `import { defineCronJob } from "sprint-es/cronjobs";
|
|
563
|
+
|
|
564
|
+
export default defineCronJob({
|
|
565
|
+
name: "daily-task",
|
|
566
|
+
cronExpression: "0 21 * * *",
|
|
567
|
+
handler: () => {
|
|
568
|
+
console.log("Hello World from cronjob!");
|
|
569
|
+
}
|
|
570
|
+
});
|
|
571
|
+
`;
|
|
572
|
+
}
|
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, getHomeController, getAdminController, getAuthMiddleware, getHomeSchema, getAdminSchema, getDockerfile, getDockerCompose, getGitignore, getDockerIgnore, getSprintConfigFile, 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, getExampleCronJob } 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");
|
|
@@ -180,6 +180,7 @@ async function createProject(projectName, language, telemetryArg, useDockerArg)
|
|
|
180
180
|
await mkdir(join(srcDir, "routes"), { recursive: true });
|
|
181
181
|
await mkdir(join(srcDir, "controllers"), { recursive: true });
|
|
182
182
|
await mkdir(join(srcDir, "schemas"), { recursive: true });
|
|
183
|
+
await mkdir(join(srcDir, "cronjobs"), { recursive: true });
|
|
183
184
|
await writeFile(join(srcDir, "middlewares", ".gitkeep"), "");
|
|
184
185
|
await writeFile(join(srcDir, "app." + (language === "typescript" ? "ts" : "js")), getMainFile(language));
|
|
185
186
|
await writeFile(join(srcDir, "routes", "home." + (language === "typescript" ? "ts" : "js")), getHomeRoute(language));
|
|
@@ -189,6 +190,7 @@ async function createProject(projectName, language, telemetryArg, useDockerArg)
|
|
|
189
190
|
await writeFile(join(srcDir, "middlewares", "auth." + (language === "typescript" ? "ts" : "js")), getAuthMiddleware(language));
|
|
190
191
|
await writeFile(join(srcDir, "schemas", "home." + (language === "typescript" ? "ts" : "js")), getHomeSchema(language));
|
|
191
192
|
await writeFile(join(srcDir, "schemas", "admin." + (language === "typescript" ? "ts" : "js")), getAdminSchema(language));
|
|
193
|
+
await writeFile(join(srcDir, "cronjobs", "example." + (language === "typescript" ? "ts" : "js")), getExampleCronJob(language));
|
|
192
194
|
await writeFile(join(targetDir, ".env.development.example"), getEnvDevelopment(telemetry));
|
|
193
195
|
await writeFile(join(targetDir, ".env.production.example"), getEnvProduction(telemetry));
|
|
194
196
|
await writeFile(join(targetDir, ".env.development"), "");
|
package/package.json
CHANGED
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.
|
|
3
|
+
"sprint-es": "^0.0.35",
|
|
4
|
+
"node-cron": "^3.0.3",
|
|
4
5
|
dotenv: "^17.0.0",
|
|
5
6
|
};
|
|
6
7
|
|
|
@@ -33,7 +34,8 @@ export function getTypeScriptPackageJson(name: string, telemetry: string) {
|
|
|
33
34
|
|
|
34
35
|
export function getJavaScriptPackageJson(name: string, telemetry: string) {
|
|
35
36
|
const deps: Record<string, string> = {
|
|
36
|
-
"sprint-es": "^0.0.
|
|
37
|
+
"sprint-es": "^0.0.35",
|
|
38
|
+
"node-cron": "^3.0.3",
|
|
37
39
|
dotenv: "^17.0.0",
|
|
38
40
|
};
|
|
39
41
|
|
|
@@ -265,7 +267,7 @@ export const adminSchema = defineRouteSchema({
|
|
|
265
267
|
}),
|
|
266
268
|
body: z.object({
|
|
267
269
|
name: z.string().min(1),
|
|
268
|
-
email: z.email().optional()
|
|
270
|
+
email: z.string().email().optional()
|
|
269
271
|
})
|
|
270
272
|
});
|
|
271
273
|
`;
|
|
@@ -278,7 +280,7 @@ export const adminSchema = defineRouteSchema({
|
|
|
278
280
|
}),
|
|
279
281
|
body: z.object({
|
|
280
282
|
name: z.string().min(1),
|
|
281
|
-
email: z.email().optional()
|
|
283
|
+
email: z.string().email().optional()
|
|
282
284
|
})
|
|
283
285
|
});
|
|
284
286
|
`;
|
|
@@ -293,13 +295,13 @@ export default defineMiddleware({
|
|
|
293
295
|
priority: 10,
|
|
294
296
|
include: "/admin/**",
|
|
295
297
|
handler: (req, res, next) => {
|
|
296
|
-
const
|
|
298
|
+
const auth = req.sprint.getAuthorization();
|
|
297
299
|
|
|
298
|
-
if (!
|
|
300
|
+
if (!auth) {
|
|
299
301
|
return res.status(401).json({ error: "No authorization header" });
|
|
300
302
|
}
|
|
301
303
|
|
|
302
|
-
const token =
|
|
304
|
+
const token = auth.replace("Bearer ", "");
|
|
303
305
|
|
|
304
306
|
if (token !== "admin-token") {
|
|
305
307
|
return res.status(403).json({ error: "Invalid token" });
|
|
@@ -317,13 +319,13 @@ export default defineMiddleware({
|
|
|
317
319
|
priority: 10,
|
|
318
320
|
include: "/admin/**",
|
|
319
321
|
handler: (req, res, next) => {
|
|
320
|
-
const
|
|
322
|
+
const auth = req.sprint.getAuthorization();
|
|
321
323
|
|
|
322
|
-
if (!
|
|
324
|
+
if (!auth) {
|
|
323
325
|
return res.status(401).json({ error: "No authorization header" });
|
|
324
326
|
}
|
|
325
327
|
|
|
326
|
-
const token =
|
|
328
|
+
const token = auth.replace("Bearer ", "");
|
|
327
329
|
|
|
328
330
|
if (token !== "admin-token") {
|
|
329
331
|
return res.status(403).json({ error: "Invalid token" });
|
|
@@ -573,3 +575,28 @@ DISCORD_WEBHOOK_URL=
|
|
|
573
575
|
|
|
574
576
|
return env;
|
|
575
577
|
}
|
|
578
|
+
|
|
579
|
+
export function getExampleCronJob(language: string) {
|
|
580
|
+
if (language === "typescript") {
|
|
581
|
+
return `import { defineCronJob } from "sprint-es/cronjobs";
|
|
582
|
+
|
|
583
|
+
export default defineCronJob({
|
|
584
|
+
name: "daily-task",
|
|
585
|
+
cronExpression: "0 21 * * *",
|
|
586
|
+
handler: () => {
|
|
587
|
+
console.log("Hello World from cronjob!");
|
|
588
|
+
}
|
|
589
|
+
});
|
|
590
|
+
`;
|
|
591
|
+
}
|
|
592
|
+
return `import { defineCronJob } from "sprint-es/cronjobs";
|
|
593
|
+
|
|
594
|
+
export default defineCronJob({
|
|
595
|
+
name: "daily-task",
|
|
596
|
+
cronExpression: "0 21 * * *",
|
|
597
|
+
handler: () => {
|
|
598
|
+
console.log("Hello World from cronjob!");
|
|
599
|
+
}
|
|
600
|
+
});
|
|
601
|
+
`;
|
|
602
|
+
}
|
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, getHomeController, getAdminController, getAuthMiddleware, getHomeSchema, getAdminSchema, getDockerfile, getDockerCompose, getGitignore, getDockerIgnore, getSprintConfigFile, 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, getExampleCronJob } from "./generators.js";
|
|
8
8
|
|
|
9
9
|
export interface CLIOptions {
|
|
10
10
|
projectName?: string;
|
|
@@ -210,6 +210,7 @@ async function createProject(
|
|
|
210
210
|
await mkdir(join(srcDir, "routes"), { recursive: true });
|
|
211
211
|
await mkdir(join(srcDir, "controllers"), { recursive: true });
|
|
212
212
|
await mkdir(join(srcDir, "schemas"), { recursive: true });
|
|
213
|
+
await mkdir(join(srcDir, "cronjobs"), { recursive: true });
|
|
213
214
|
|
|
214
215
|
await writeFile(join(srcDir, "middlewares", ".gitkeep"), "");
|
|
215
216
|
|
|
@@ -226,6 +227,8 @@ async function createProject(
|
|
|
226
227
|
await writeFile(join(srcDir, "schemas", "home." + (language === "typescript" ? "ts" : "js")), getHomeSchema(language));
|
|
227
228
|
await writeFile(join(srcDir, "schemas", "admin." + (language === "typescript" ? "ts" : "js")), getAdminSchema(language));
|
|
228
229
|
|
|
230
|
+
await writeFile(join(srcDir, "cronjobs", "example." + (language === "typescript" ? "ts" : "js")), getExampleCronJob(language));
|
|
231
|
+
|
|
229
232
|
await writeFile(join(targetDir, ".env.development.example"), getEnvDevelopment(telemetry));
|
|
230
233
|
await writeFile(join(targetDir, ".env.production.example"), getEnvProduction(telemetry));
|
|
231
234
|
|