@engjts/nexus 0.1.6 → 0.1.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.
- package/dist/cli/templates/generators.d.ts.map +1 -1
- package/dist/cli/templates/generators.js +16 -13
- package/dist/cli/templates/generators.js.map +1 -1
- package/dist/cli/templates/index.js +25 -25
- package/package.json +1 -1
- package/src/cli/templates/generators.ts +16 -13
- package/src/cli/templates/index.ts +25 -25
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generators.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/generators.ts"],"names":[],"mappings":"AAAA,KAAK,aAAa,GAAG,OAAO,GAAG,aAAa,GAAG,YAAY,GAAG,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,CAAC;AAE/G,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,gBAAgB;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,qBAAa,kBAAkB;IAC7B,QAAQ,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,eAAe;IAqBvF,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,aAAa;IA0BrB,OAAO,CAAC,kBAAkB;IA6C1B,OAAO,CAAC,kBAAkB;IAyB1B,OAAO,CAAC,kBAAkB;
|
|
1
|
+
{"version":3,"file":"generators.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/generators.ts"],"names":[],"mappings":"AAAA,KAAK,aAAa,GAAG,OAAO,GAAG,aAAa,GAAG,YAAY,GAAG,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,CAAC;AAE/G,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,gBAAgB;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,qBAAa,kBAAkB;IAC7B,QAAQ,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,eAAe;IAqBvF,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,aAAa;IA0BrB,OAAO,CAAC,kBAAkB;IA6C1B,OAAO,CAAC,kBAAkB;IAyB1B,OAAO,CAAC,kBAAkB;IA+D1B,OAAO,CAAC,eAAe;IAwEvB,OAAO,CAAC,aAAa;IAmCrB,OAAO,CAAC,iBAAiB;CA8C1B"}
|
|
@@ -127,47 +127,50 @@ export const ${middlewareName}Middleware: Middleware = async (ctx: Context, next
|
|
|
127
127
|
@Controller('/${baseName}')
|
|
128
128
|
export class ${className} {
|
|
129
129
|
@Get('/')
|
|
130
|
-
async getAll(
|
|
131
|
-
return
|
|
130
|
+
async getAll() {
|
|
131
|
+
return {
|
|
132
132
|
message: 'Get all ${baseName}',
|
|
133
133
|
data: [],
|
|
134
|
-
}
|
|
134
|
+
};
|
|
135
135
|
}
|
|
136
136
|
|
|
137
137
|
@Get('/:id')
|
|
138
138
|
async getById(ctx: Context) {
|
|
139
139
|
const { id } = ctx.params;
|
|
140
|
-
return
|
|
140
|
+
return {
|
|
141
141
|
message: \`Get ${baseName} by id: \${id}\`,
|
|
142
142
|
data: null,
|
|
143
|
-
}
|
|
143
|
+
};
|
|
144
144
|
}
|
|
145
145
|
|
|
146
146
|
@Post('/')
|
|
147
147
|
async create(ctx: Context) {
|
|
148
148
|
const body = await ctx.body();
|
|
149
|
-
return
|
|
150
|
-
|
|
151
|
-
data:
|
|
152
|
-
|
|
149
|
+
return {
|
|
150
|
+
status: 201,
|
|
151
|
+
data: {
|
|
152
|
+
message: 'Create ${baseName}',
|
|
153
|
+
data: body,
|
|
154
|
+
},
|
|
155
|
+
};
|
|
153
156
|
}
|
|
154
157
|
|
|
155
158
|
@Put('/:id')
|
|
156
159
|
async update(ctx: Context) {
|
|
157
160
|
const { id } = ctx.params;
|
|
158
161
|
const body = await ctx.body();
|
|
159
|
-
return
|
|
162
|
+
return {
|
|
160
163
|
message: \`Update ${baseName}: \${id}\`,
|
|
161
164
|
data: body,
|
|
162
|
-
}
|
|
165
|
+
};
|
|
163
166
|
}
|
|
164
167
|
|
|
165
168
|
@Delete('/:id')
|
|
166
169
|
async delete(ctx: Context) {
|
|
167
170
|
const { id } = ctx.params;
|
|
168
|
-
return
|
|
171
|
+
return {
|
|
169
172
|
message: \`Delete ${baseName}: \${id}\`,
|
|
170
|
-
}
|
|
173
|
+
};
|
|
171
174
|
}
|
|
172
175
|
}
|
|
173
176
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generators.js","sourceRoot":"","sources":["../../../src/cli/templates/generators.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"generators.js","sourceRoot":"","sources":["../../../src/cli/templates/generators.ts"],"names":[],"mappings":"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"}
|
|
@@ -252,18 +252,18 @@ app.listen(PORT, () => {
|
|
|
252
252
|
|
|
253
253
|
export const routes = new Router();
|
|
254
254
|
|
|
255
|
-
routes.get('/', async (
|
|
256
|
-
return
|
|
255
|
+
routes.get('/', async () => {
|
|
256
|
+
return {
|
|
257
257
|
message: 'Welcome to Nexus!',
|
|
258
258
|
version: '1.0.0',
|
|
259
|
-
}
|
|
259
|
+
};
|
|
260
260
|
});
|
|
261
261
|
|
|
262
|
-
routes.get('/health', async (
|
|
263
|
-
return
|
|
262
|
+
routes.get('/health', async () => {
|
|
263
|
+
return {
|
|
264
264
|
status: 'ok',
|
|
265
265
|
timestamp: new Date().toISOString(),
|
|
266
|
-
}
|
|
266
|
+
};
|
|
267
267
|
});
|
|
268
268
|
`;
|
|
269
269
|
}
|
|
@@ -299,21 +299,21 @@ import { userRoutes } from './users';
|
|
|
299
299
|
export const routes = new Router();
|
|
300
300
|
|
|
301
301
|
// Health check
|
|
302
|
-
routes.get('/health', async (
|
|
303
|
-
return
|
|
302
|
+
routes.get('/health', async () => {
|
|
303
|
+
return {
|
|
304
304
|
status: 'ok',
|
|
305
305
|
timestamp: new Date().toISOString(),
|
|
306
306
|
uptime: process.uptime(),
|
|
307
|
-
}
|
|
307
|
+
};
|
|
308
308
|
});
|
|
309
309
|
|
|
310
310
|
// API info
|
|
311
|
-
routes.get('/api', async (
|
|
312
|
-
return
|
|
311
|
+
routes.get('/api', async () => {
|
|
312
|
+
return {
|
|
313
313
|
name: 'API',
|
|
314
314
|
version: '1.0.0',
|
|
315
315
|
endpoints: ['/api/users', '/health'],
|
|
316
|
-
}
|
|
316
|
+
};
|
|
317
317
|
});
|
|
318
318
|
|
|
319
319
|
// Mount user routes
|
|
@@ -321,7 +321,7 @@ routes.group('/api/users', userRoutes);
|
|
|
321
321
|
`;
|
|
322
322
|
}
|
|
323
323
|
getUserRoutes() {
|
|
324
|
-
return `import { Router } from '@engjts/nexus';
|
|
324
|
+
return `import { Router, HttpError } from '@engjts/nexus';
|
|
325
325
|
import { UserService } from '../services/user.service';
|
|
326
326
|
import { createUserSchema, updateUserSchema } from '../validators/user.validator';
|
|
327
327
|
|
|
@@ -329,9 +329,9 @@ export const userRoutes = new Router();
|
|
|
329
329
|
const userService = new UserService();
|
|
330
330
|
|
|
331
331
|
// GET /api/users
|
|
332
|
-
userRoutes.get('/', async (
|
|
332
|
+
userRoutes.get('/', async () => {
|
|
333
333
|
const users = await userService.findAll();
|
|
334
|
-
return
|
|
334
|
+
return { users };
|
|
335
335
|
});
|
|
336
336
|
|
|
337
337
|
// GET /api/users/:id
|
|
@@ -340,10 +340,10 @@ userRoutes.get('/:id', async (ctx) => {
|
|
|
340
340
|
const user = await userService.findById(id);
|
|
341
341
|
|
|
342
342
|
if (!user) {
|
|
343
|
-
|
|
343
|
+
throw new HttpError(404, 'User not found');
|
|
344
344
|
}
|
|
345
345
|
|
|
346
|
-
return
|
|
346
|
+
return { user };
|
|
347
347
|
});
|
|
348
348
|
|
|
349
349
|
// POST /api/users
|
|
@@ -352,7 +352,7 @@ userRoutes.post('/', async (ctx) => {
|
|
|
352
352
|
const validated = createUserSchema.parse(body);
|
|
353
353
|
|
|
354
354
|
const user = await userService.create(validated);
|
|
355
|
-
return
|
|
355
|
+
return { status: 201, data: { user } };
|
|
356
356
|
});
|
|
357
357
|
|
|
358
358
|
// PUT /api/users/:id
|
|
@@ -364,10 +364,10 @@ userRoutes.put('/:id', async (ctx) => {
|
|
|
364
364
|
const user = await userService.update(id, validated);
|
|
365
365
|
|
|
366
366
|
if (!user) {
|
|
367
|
-
|
|
367
|
+
throw new HttpError(404, 'User not found');
|
|
368
368
|
}
|
|
369
369
|
|
|
370
|
-
return
|
|
370
|
+
return { user };
|
|
371
371
|
});
|
|
372
372
|
|
|
373
373
|
// DELETE /api/users/:id
|
|
@@ -376,21 +376,21 @@ userRoutes.delete('/:id', async (ctx) => {
|
|
|
376
376
|
const deleted = await userService.delete(id);
|
|
377
377
|
|
|
378
378
|
if (!deleted) {
|
|
379
|
-
|
|
379
|
+
throw new HttpError(404, 'User not found');
|
|
380
380
|
}
|
|
381
381
|
|
|
382
|
-
return
|
|
382
|
+
return { message: 'User deleted successfully' };
|
|
383
383
|
});
|
|
384
384
|
`;
|
|
385
385
|
}
|
|
386
386
|
getAuthMiddleware() {
|
|
387
|
-
return `import { Middleware, Context } from '@engjts/nexus';
|
|
387
|
+
return `import { Middleware, Context, HttpError } from '@engjts/nexus';
|
|
388
388
|
|
|
389
389
|
export const authMiddleware: Middleware = async (ctx: Context, next) => {
|
|
390
390
|
const authHeader = ctx.headers.get('authorization');
|
|
391
391
|
|
|
392
392
|
if (!authHeader || !authHeader.startsWith('Bearer ')) {
|
|
393
|
-
|
|
393
|
+
throw new HttpError(401, 'Unauthorized');
|
|
394
394
|
}
|
|
395
395
|
|
|
396
396
|
const token = authHeader.slice(7);
|
|
@@ -402,7 +402,7 @@ export const authMiddleware: Middleware = async (ctx: Context, next) => {
|
|
|
402
402
|
|
|
403
403
|
return next();
|
|
404
404
|
} catch (error) {
|
|
405
|
-
|
|
405
|
+
throw new HttpError(401, 'Invalid token');
|
|
406
406
|
}
|
|
407
407
|
};
|
|
408
408
|
`;
|
package/package.json
CHANGED
|
@@ -149,47 +149,50 @@ export const ${middlewareName}Middleware: Middleware = async (ctx: Context, next
|
|
|
149
149
|
@Controller('/${baseName}')
|
|
150
150
|
export class ${className} {
|
|
151
151
|
@Get('/')
|
|
152
|
-
async getAll(
|
|
153
|
-
return
|
|
152
|
+
async getAll() {
|
|
153
|
+
return {
|
|
154
154
|
message: 'Get all ${baseName}',
|
|
155
155
|
data: [],
|
|
156
|
-
}
|
|
156
|
+
};
|
|
157
157
|
}
|
|
158
158
|
|
|
159
159
|
@Get('/:id')
|
|
160
160
|
async getById(ctx: Context) {
|
|
161
161
|
const { id } = ctx.params;
|
|
162
|
-
return
|
|
162
|
+
return {
|
|
163
163
|
message: \`Get ${baseName} by id: \${id}\`,
|
|
164
164
|
data: null,
|
|
165
|
-
}
|
|
165
|
+
};
|
|
166
166
|
}
|
|
167
167
|
|
|
168
168
|
@Post('/')
|
|
169
169
|
async create(ctx: Context) {
|
|
170
170
|
const body = await ctx.body();
|
|
171
|
-
return
|
|
172
|
-
|
|
173
|
-
data:
|
|
174
|
-
|
|
171
|
+
return {
|
|
172
|
+
status: 201,
|
|
173
|
+
data: {
|
|
174
|
+
message: 'Create ${baseName}',
|
|
175
|
+
data: body,
|
|
176
|
+
},
|
|
177
|
+
};
|
|
175
178
|
}
|
|
176
179
|
|
|
177
180
|
@Put('/:id')
|
|
178
181
|
async update(ctx: Context) {
|
|
179
182
|
const { id } = ctx.params;
|
|
180
183
|
const body = await ctx.body();
|
|
181
|
-
return
|
|
184
|
+
return {
|
|
182
185
|
message: \`Update ${baseName}: \${id}\`,
|
|
183
186
|
data: body,
|
|
184
|
-
}
|
|
187
|
+
};
|
|
185
188
|
}
|
|
186
189
|
|
|
187
190
|
@Delete('/:id')
|
|
188
191
|
async delete(ctx: Context) {
|
|
189
192
|
const { id } = ctx.params;
|
|
190
|
-
return
|
|
193
|
+
return {
|
|
191
194
|
message: \`Delete ${baseName}: \${id}\`,
|
|
192
|
-
}
|
|
195
|
+
};
|
|
193
196
|
}
|
|
194
197
|
}
|
|
195
198
|
`;
|
|
@@ -271,18 +271,18 @@ app.listen(PORT, () => {
|
|
|
271
271
|
|
|
272
272
|
export const routes = new Router();
|
|
273
273
|
|
|
274
|
-
routes.get('/', async (
|
|
275
|
-
return
|
|
274
|
+
routes.get('/', async () => {
|
|
275
|
+
return {
|
|
276
276
|
message: 'Welcome to Nexus!',
|
|
277
277
|
version: '1.0.0',
|
|
278
|
-
}
|
|
278
|
+
};
|
|
279
279
|
});
|
|
280
280
|
|
|
281
|
-
routes.get('/health', async (
|
|
282
|
-
return
|
|
281
|
+
routes.get('/health', async () => {
|
|
282
|
+
return {
|
|
283
283
|
status: 'ok',
|
|
284
284
|
timestamp: new Date().toISOString(),
|
|
285
|
-
}
|
|
285
|
+
};
|
|
286
286
|
});
|
|
287
287
|
`;
|
|
288
288
|
}
|
|
@@ -320,21 +320,21 @@ import { userRoutes } from './users';
|
|
|
320
320
|
export const routes = new Router();
|
|
321
321
|
|
|
322
322
|
// Health check
|
|
323
|
-
routes.get('/health', async (
|
|
324
|
-
return
|
|
323
|
+
routes.get('/health', async () => {
|
|
324
|
+
return {
|
|
325
325
|
status: 'ok',
|
|
326
326
|
timestamp: new Date().toISOString(),
|
|
327
327
|
uptime: process.uptime(),
|
|
328
|
-
}
|
|
328
|
+
};
|
|
329
329
|
});
|
|
330
330
|
|
|
331
331
|
// API info
|
|
332
|
-
routes.get('/api', async (
|
|
333
|
-
return
|
|
332
|
+
routes.get('/api', async () => {
|
|
333
|
+
return {
|
|
334
334
|
name: 'API',
|
|
335
335
|
version: '1.0.0',
|
|
336
336
|
endpoints: ['/api/users', '/health'],
|
|
337
|
-
}
|
|
337
|
+
};
|
|
338
338
|
});
|
|
339
339
|
|
|
340
340
|
// Mount user routes
|
|
@@ -343,7 +343,7 @@ routes.group('/api/users', userRoutes);
|
|
|
343
343
|
}
|
|
344
344
|
|
|
345
345
|
private getUserRoutes(): string {
|
|
346
|
-
return `import { Router } from '@engjts/nexus';
|
|
346
|
+
return `import { Router, HttpError } from '@engjts/nexus';
|
|
347
347
|
import { UserService } from '../services/user.service';
|
|
348
348
|
import { createUserSchema, updateUserSchema } from '../validators/user.validator';
|
|
349
349
|
|
|
@@ -351,9 +351,9 @@ export const userRoutes = new Router();
|
|
|
351
351
|
const userService = new UserService();
|
|
352
352
|
|
|
353
353
|
// GET /api/users
|
|
354
|
-
userRoutes.get('/', async (
|
|
354
|
+
userRoutes.get('/', async () => {
|
|
355
355
|
const users = await userService.findAll();
|
|
356
|
-
return
|
|
356
|
+
return { users };
|
|
357
357
|
});
|
|
358
358
|
|
|
359
359
|
// GET /api/users/:id
|
|
@@ -362,10 +362,10 @@ userRoutes.get('/:id', async (ctx) => {
|
|
|
362
362
|
const user = await userService.findById(id);
|
|
363
363
|
|
|
364
364
|
if (!user) {
|
|
365
|
-
|
|
365
|
+
throw new HttpError(404, 'User not found');
|
|
366
366
|
}
|
|
367
367
|
|
|
368
|
-
return
|
|
368
|
+
return { user };
|
|
369
369
|
});
|
|
370
370
|
|
|
371
371
|
// POST /api/users
|
|
@@ -374,7 +374,7 @@ userRoutes.post('/', async (ctx) => {
|
|
|
374
374
|
const validated = createUserSchema.parse(body);
|
|
375
375
|
|
|
376
376
|
const user = await userService.create(validated);
|
|
377
|
-
return
|
|
377
|
+
return { status: 201, data: { user } };
|
|
378
378
|
});
|
|
379
379
|
|
|
380
380
|
// PUT /api/users/:id
|
|
@@ -386,10 +386,10 @@ userRoutes.put('/:id', async (ctx) => {
|
|
|
386
386
|
const user = await userService.update(id, validated);
|
|
387
387
|
|
|
388
388
|
if (!user) {
|
|
389
|
-
|
|
389
|
+
throw new HttpError(404, 'User not found');
|
|
390
390
|
}
|
|
391
391
|
|
|
392
|
-
return
|
|
392
|
+
return { user };
|
|
393
393
|
});
|
|
394
394
|
|
|
395
395
|
// DELETE /api/users/:id
|
|
@@ -398,22 +398,22 @@ userRoutes.delete('/:id', async (ctx) => {
|
|
|
398
398
|
const deleted = await userService.delete(id);
|
|
399
399
|
|
|
400
400
|
if (!deleted) {
|
|
401
|
-
|
|
401
|
+
throw new HttpError(404, 'User not found');
|
|
402
402
|
}
|
|
403
403
|
|
|
404
|
-
return
|
|
404
|
+
return { message: 'User deleted successfully' };
|
|
405
405
|
});
|
|
406
406
|
`;
|
|
407
407
|
}
|
|
408
408
|
|
|
409
409
|
private getAuthMiddleware(): string {
|
|
410
|
-
return `import { Middleware, Context } from '@engjts/nexus';
|
|
410
|
+
return `import { Middleware, Context, HttpError } from '@engjts/nexus';
|
|
411
411
|
|
|
412
412
|
export const authMiddleware: Middleware = async (ctx: Context, next) => {
|
|
413
413
|
const authHeader = ctx.headers.get('authorization');
|
|
414
414
|
|
|
415
415
|
if (!authHeader || !authHeader.startsWith('Bearer ')) {
|
|
416
|
-
|
|
416
|
+
throw new HttpError(401, 'Unauthorized');
|
|
417
417
|
}
|
|
418
418
|
|
|
419
419
|
const token = authHeader.slice(7);
|
|
@@ -425,7 +425,7 @@ export const authMiddleware: Middleware = async (ctx: Context, next) => {
|
|
|
425
425
|
|
|
426
426
|
return next();
|
|
427
427
|
} catch (error) {
|
|
428
|
-
|
|
428
|
+
throw new HttpError(401, 'Invalid token');
|
|
429
429
|
}
|
|
430
430
|
};
|
|
431
431
|
`;
|