create-sprint 0.0.6 → 0.0.7

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.
@@ -105,20 +105,14 @@ export function getMainFile(language) {
105
105
  if (language === "typescript") {
106
106
  return `import Sprint from "sprint-es";
107
107
  import { config } from "./sprint.config";
108
- import homeRouter from "./routes/home";
109
108
 
110
109
  const app = new Sprint(config);
111
-
112
- app.use(homeRouter);
113
110
  `;
114
111
  }
115
112
  return `import Sprint from "sprint-es";
116
113
  import { config } from "./sprint.config.js";
117
- import homeRouter from "./routes/home.js";
118
114
 
119
115
  const app = new Sprint(config);
120
-
121
- app.use(homeRouter);
122
116
  `;
123
117
  }
124
118
  export function getHomeRoute(language) {
@@ -151,6 +145,104 @@ router.get("/", (req, res) => {
151
145
  export default router;
152
146
  `;
153
147
  }
148
+ export function getAdminRoute(language) {
149
+ if (language === "typescript") {
150
+ return `import { Router } from "sprint-es";
151
+
152
+ const router = Router();
153
+
154
+ router.get("/", (req, res) => {
155
+ res.json({
156
+ message: "Admin Dashboard",
157
+ status: "ok"
158
+ });
159
+ });
160
+
161
+ router.get("/users", (req, res) => {
162
+ res.json({
163
+ users: [
164
+ { id: 1, name: "John Doe", role: "admin" },
165
+ { id: 2, name: "Jane Smith", role: "user" }
166
+ ]
167
+ });
168
+ });
169
+
170
+ export default router;
171
+ `;
172
+ }
173
+ return `import { Router } from "sprint-es";
174
+
175
+ const router = Router();
176
+
177
+ router.get("/", (req, res) => {
178
+ res.json({
179
+ message: "Admin Dashboard",
180
+ status: "ok"
181
+ });
182
+ });
183
+
184
+ router.get("/users", (req, res) => {
185
+ res.json({
186
+ users: [
187
+ { id: 1, name: "John Doe", role: "admin" },
188
+ { id: 2, name: "Jane Smith", role: "user" }
189
+ ]
190
+ });
191
+ });
192
+
193
+ export default router;
194
+ `;
195
+ }
196
+ export function getAuthMiddleware(language) {
197
+ if (language === "typescript") {
198
+ return `import { defineMiddleware } from "sprint-es";
199
+
200
+ export default defineMiddleware({
201
+ name: "auth",
202
+ priority: 10,
203
+ include: "/admin/**",
204
+ handler: (req, res, next) => {
205
+ const authHeader = req.headers.authorization;
206
+
207
+ if (!authHeader) {
208
+ return res.status(401).json({ error: "No authorization header" });
209
+ }
210
+
211
+ const token = authHeader.replace("Bearer ", "");
212
+
213
+ if (token !== "admin-token") {
214
+ return res.status(403).json({ error: "Invalid token" });
215
+ }
216
+
217
+ next();
218
+ }
219
+ });
220
+ `;
221
+ }
222
+ return `import { defineMiddleware } from "sprint-es";
223
+
224
+ export default defineMiddleware({
225
+ name: "auth",
226
+ priority: 10,
227
+ include: "/admin/**",
228
+ handler: (req, res, next) => {
229
+ const authHeader = req.headers.authorization;
230
+
231
+ if (!authHeader) {
232
+ return res.status(401).json({ error: "No authorization header" });
233
+ }
234
+
235
+ const token = authHeader.replace("Bearer ", "");
236
+
237
+ if (token !== "admin-token") {
238
+ return res.status(403).json({ error: "Invalid token" });
239
+ }
240
+
241
+ next();
242
+ }
243
+ });
244
+ `;
245
+ }
154
246
  export function getDockerfile(language) {
155
247
  if (language === "typescript") {
156
248
  return `FROM node:20-alpine
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, getDockerfile, getDockerCompose, getGitignore, getDockerIgnore, getSprintConfigFile, getEnvExample, getEnvDevelopment, getEnvProduction } from "./generators.js";
7
+ import { getTypeScriptPackageJson, getJavaScriptPackageJson, getTsConfig, getViteConfig, getMainFile, getHomeRoute, getAdminRoute, getAuthMiddleware, getDockerfile, getDockerCompose, getGitignore, getDockerIgnore, getSprintConfigFile, getEnvExample, 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");
@@ -63,9 +63,8 @@ function parseArgs(args) {
63
63
  const telemetryArg = args.includes("--telemetry") ? args[args.indexOf("--telemetry") + 1] : null;
64
64
  if (args.includes("--yes") || args.includes("-y")) {
65
65
  options.skipPrompts = true;
66
- options.language = "typescript";
67
66
  }
68
- else if (hasTs) {
67
+ if (hasTs) {
69
68
  options.language = "typescript";
70
69
  }
71
70
  else if (hasJs) {
@@ -189,6 +188,8 @@ async function createProject(projectName, language, telemetryArg, useDockerArg)
189
188
  await writeFile(join(srcDir, "controllers", ".gitkeep"), "");
190
189
  await writeFile(join(srcDir, "app." + (language === "typescript" ? "ts" : "js")), getMainFile(language));
191
190
  await writeFile(join(srcDir, "routes", "home." + (language === "typescript" ? "ts" : "js")), getHomeRoute(language));
191
+ await writeFile(join(srcDir, "routes", "admin." + (language === "typescript" ? "ts" : "js")), getAdminRoute(language));
192
+ await writeFile(join(srcDir, "middlewares", "auth." + (language === "typescript" ? "ts" : "js")), getAuthMiddleware(language));
192
193
  await writeFile(join(targetDir, ".env.example"), getEnvExample(telemetry));
193
194
  await writeFile(join(targetDir, ".env.development"), getEnvDevelopment(telemetry));
194
195
  await writeFile(join(targetDir, ".env.production"), getEnvProduction(telemetry));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-sprint",
3
- "version": "0.0.6",
3
+ "version": "0.0.7",
4
4
  "description": "Create a new Sprint API project",
5
5
  "type": "module",
6
6
  "bin": {
package/src/generators.ts CHANGED
@@ -112,21 +112,15 @@ export function getMainFile(language: string) {
112
112
  if (language === "typescript") {
113
113
  return `import Sprint from "sprint-es";
114
114
  import { config } from "./sprint.config";
115
- import homeRouter from "./routes/home";
116
115
 
117
116
  const app = new Sprint(config);
118
-
119
- app.use(homeRouter);
120
117
  `;
121
118
  }
122
119
 
123
120
  return `import Sprint from "sprint-es";
124
121
  import { config } from "./sprint.config.js";
125
- import homeRouter from "./routes/home.js";
126
122
 
127
123
  const app = new Sprint(config);
128
-
129
- app.use(homeRouter);
130
124
  `;
131
125
  }
132
126
 
@@ -161,6 +155,106 @@ export default router;
161
155
  `;
162
156
  }
163
157
 
158
+ export function getAdminRoute(language: string) {
159
+ if (language === "typescript") {
160
+ return `import { Router } from "sprint-es";
161
+
162
+ const router = Router();
163
+
164
+ router.get("/", (req, res) => {
165
+ res.json({
166
+ message: "Admin Dashboard",
167
+ status: "ok"
168
+ });
169
+ });
170
+
171
+ router.get("/users", (req, res) => {
172
+ res.json({
173
+ users: [
174
+ { id: 1, name: "John Doe", role: "admin" },
175
+ { id: 2, name: "Jane Smith", role: "user" }
176
+ ]
177
+ });
178
+ });
179
+
180
+ export default router;
181
+ `;
182
+ }
183
+ return `import { Router } from "sprint-es";
184
+
185
+ const router = Router();
186
+
187
+ router.get("/", (req, res) => {
188
+ res.json({
189
+ message: "Admin Dashboard",
190
+ status: "ok"
191
+ });
192
+ });
193
+
194
+ router.get("/users", (req, res) => {
195
+ res.json({
196
+ users: [
197
+ { id: 1, name: "John Doe", role: "admin" },
198
+ { id: 2, name: "Jane Smith", role: "user" }
199
+ ]
200
+ });
201
+ });
202
+
203
+ export default router;
204
+ `;
205
+ }
206
+
207
+ export function getAuthMiddleware(language: string) {
208
+ if (language === "typescript") {
209
+ return `import { defineMiddleware } from "sprint-es";
210
+
211
+ export default defineMiddleware({
212
+ name: "auth",
213
+ priority: 10,
214
+ include: "/admin/**",
215
+ handler: (req, res, next) => {
216
+ const authHeader = req.headers.authorization;
217
+
218
+ if (!authHeader) {
219
+ return res.status(401).json({ error: "No authorization header" });
220
+ }
221
+
222
+ const token = authHeader.replace("Bearer ", "");
223
+
224
+ if (token !== "admin-token") {
225
+ return res.status(403).json({ error: "Invalid token" });
226
+ }
227
+
228
+ next();
229
+ }
230
+ });
231
+ `;
232
+ }
233
+ return `import { defineMiddleware } from "sprint-es";
234
+
235
+ export default defineMiddleware({
236
+ name: "auth",
237
+ priority: 10,
238
+ include: "/admin/**",
239
+ handler: (req, res, next) => {
240
+ const authHeader = req.headers.authorization;
241
+
242
+ if (!authHeader) {
243
+ return res.status(401).json({ error: "No authorization header" });
244
+ }
245
+
246
+ const token = authHeader.replace("Bearer ", "");
247
+
248
+ if (token !== "admin-token") {
249
+ return res.status(403).json({ error: "Invalid token" });
250
+ }
251
+
252
+ next();
253
+ }
254
+ });
255
+ `;
256
+ }
257
+
164
258
  export function getDockerfile(language: string) {
165
259
  if (language === "typescript") {
166
260
  return `FROM node:20-alpine
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, getDockerfile, getDockerCompose, getGitignore, getDockerIgnore, getSprintConfigFile, getEnvExample, getEnvDevelopment, getEnvProduction } from "./generators.js";
7
+ import { getTypeScriptPackageJson, getJavaScriptPackageJson, getTsConfig, getViteConfig, getMainFile, getHomeRoute, getAdminRoute, getAuthMiddleware, getDockerfile, getDockerCompose, getGitignore, getDockerIgnore, getSprintConfigFile, getEnvExample, getEnvDevelopment, getEnvProduction } from "./generators.js";
8
8
 
9
9
  export interface CLIOptions {
10
10
  projectName?: string;
@@ -85,8 +85,9 @@ function parseArgs(args: string[]): CLIOptions {
85
85
 
86
86
  if (args.includes("--yes") || args.includes("-y")) {
87
87
  options.skipPrompts = true;
88
- options.language = "typescript";
89
- } else if (hasTs) {
88
+ }
89
+
90
+ if (hasTs) {
90
91
  options.language = "typescript";
91
92
  } else if (hasJs) {
92
93
  options.language = "javascript";
@@ -237,6 +238,9 @@ async function createProject(
237
238
  await writeFile(join(srcDir, "app." + (language === "typescript" ? "ts" : "js")), getMainFile(language));
238
239
 
239
240
  await writeFile(join(srcDir, "routes", "home." + (language === "typescript" ? "ts" : "js")), getHomeRoute(language));
241
+ await writeFile(join(srcDir, "routes", "admin." + (language === "typescript" ? "ts" : "js")), getAdminRoute(language));
242
+
243
+ await writeFile(join(srcDir, "middlewares", "auth." + (language === "typescript" ? "ts" : "js")), getAuthMiddleware(language));
240
244
 
241
245
  await writeFile(join(targetDir, ".env.example"), getEnvExample(telemetry));
242
246
  await writeFile(join(targetDir, ".env.development"), getEnvDevelopment(telemetry));