@hazeljs/swagger 0.8.6 → 0.8.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.
@@ -18,6 +18,10 @@ describe('SwaggerService', () => {
18
18
  beforeEach(() => {
19
19
  swaggerService = new swagger_service_1.SwaggerService();
20
20
  });
21
+ const expectDefaultSchemas = (spec) => {
22
+ expect(spec.components.schemas.Error).toBeDefined();
23
+ expect(spec.components.schemas.ValidationError).toBeDefined();
24
+ };
21
25
  describe('generateSpec', () => {
22
26
  it('should generate spec for a controller with Swagger metadata', () => {
23
27
  const swaggerOptions = {
@@ -68,9 +72,7 @@ describe('SwaggerService', () => {
68
72
  (0, swagger_decorator_1.Swagger)(swaggerOptions),
69
73
  (0, core_1.Controller)({ path: '/test' })
70
74
  ], TestController);
71
- // Mock controller metadata
72
75
  Reflect.defineMetadata('hazel:controller', { path: '/test' }, TestController);
73
- // Mock route metadata
74
76
  Reflect.defineMetadata('hazel:routes', [
75
77
  { propertyKey: 'getTest', path: '', method: 'GET' },
76
78
  { propertyKey: 'createTest', path: '', method: 'POST' },
@@ -97,8 +99,9 @@ describe('SwaggerService', () => {
97
99
  tags: postOperation.tags,
98
100
  responses: postOperation.responses,
99
101
  });
102
+ expectDefaultSchemas(spec);
100
103
  });
101
- it('should handle controller without Swagger metadata', () => {
104
+ it('should auto-generate operations for controller without Swagger metadata', () => {
102
105
  let TestController = class TestController {
103
106
  getTest() { }
104
107
  };
@@ -111,11 +114,11 @@ describe('SwaggerService', () => {
111
114
  TestController = __decorate([
112
115
  (0, core_1.Controller)({ path: '/test' })
113
116
  ], TestController);
114
- // Mock route metadata
115
- Reflect.defineMetadata('hazel:routes', [{ propertyKey: 'getTest', path: '/test', method: 'GET' }], TestController);
117
+ Reflect.defineMetadata('hazel:routes', [{ propertyKey: 'getTest', path: '', method: 'GET' }], TestController);
116
118
  const spec = swaggerService.generateSpec([TestController]);
117
- expect(spec).toBeDefined();
118
- expect(spec.paths).toEqual({});
119
+ expect(spec.paths['/test']?.get).toBeDefined();
120
+ expect(spec.paths['/test'].get.summary).toBe('Get resource(s)');
121
+ expectDefaultSchemas(spec);
119
122
  });
120
123
  it('should handle invalid controllers', () => {
121
124
  class InvalidController {
@@ -123,6 +126,7 @@ describe('SwaggerService', () => {
123
126
  const spec = swaggerService.generateSpec([InvalidController]);
124
127
  expect(spec).toBeDefined();
125
128
  expect(spec.paths).toEqual({});
129
+ expectDefaultSchemas(spec);
126
130
  });
127
131
  it('should handle controller without route metadata', () => {
128
132
  let TestController = class TestController {
@@ -149,13 +153,12 @@ describe('SwaggerService', () => {
149
153
  }),
150
154
  (0, core_1.Controller)({ path: '/test' })
151
155
  ], TestController);
152
- // Explicitly remove route metadata
153
156
  Reflect.deleteMetadata('hazel:routes', TestController);
154
157
  const spec = swaggerService.generateSpec([TestController]);
155
158
  expect(spec).toBeDefined();
156
159
  expect(spec.paths).toEqual({});
157
160
  });
158
- it('should handle controller with method without operation metadata', () => {
161
+ it('should auto-generate when method has no operation metadata but controller has @Swagger', () => {
159
162
  let TestController = class TestController {
160
163
  getTest() { }
161
164
  };
@@ -174,10 +177,33 @@ describe('SwaggerService', () => {
174
177
  }),
175
178
  (0, core_1.Controller)({ path: '/test' })
176
179
  ], TestController);
177
- // Mock route metadata
178
180
  Reflect.defineMetadata('hazel:routes', [{ propertyKey: 'getTest', path: '/test', method: 'GET' }], TestController);
179
181
  const spec = swaggerService.generateSpec([TestController]);
180
- expect(spec).toBeDefined();
182
+ expect(spec.paths['/test/test']?.get).toBeDefined();
183
+ expect(spec.paths['/test/test'].get.summary).toBe('Get resource(s)');
184
+ });
185
+ it('should skip undocumented routes when autoGenerateOperations is false', () => {
186
+ let TestController = class TestController {
187
+ getTest() { }
188
+ };
189
+ __decorate([
190
+ (0, core_1.Get)(),
191
+ __metadata("design:type", Function),
192
+ __metadata("design:paramtypes", []),
193
+ __metadata("design:returntype", void 0)
194
+ ], TestController.prototype, "getTest", null);
195
+ TestController = __decorate([
196
+ (0, swagger_decorator_1.Swagger)({
197
+ title: 'Test API',
198
+ description: 'Test API description',
199
+ version: '1.0.0',
200
+ }),
201
+ (0, core_1.Controller)({ path: '/test' })
202
+ ], TestController);
203
+ Reflect.defineMetadata('hazel:routes', [{ propertyKey: 'getTest', path: '', method: 'GET' }], TestController);
204
+ const spec = swaggerService.generateSpec([TestController], {
205
+ autoGenerateOperations: false,
206
+ });
181
207
  expect(spec.paths).toEqual({});
182
208
  });
183
209
  it('should throw error when controllers is not an array', () => {
@@ -191,7 +217,6 @@ describe('SwaggerService', () => {
191
217
  expect(spec.paths).toEqual({});
192
218
  });
193
219
  it('should handle error during spec generation', () => {
194
- // Test error handling by making getSwaggerMetadata throw
195
220
  // eslint-disable-next-line @typescript-eslint/no-require-imports
196
221
  const swaggerDecorator = require('./swagger.decorator');
197
222
  jest.spyOn(swaggerDecorator, 'getSwaggerMetadata').mockImplementation(() => {
@@ -214,7 +239,6 @@ describe('SwaggerService', () => {
214
239
  expect(() => {
215
240
  swaggerService.generateSpec([TestController]);
216
241
  }).toThrow('Metadata access error');
217
- // Restore original
218
242
  jest.restoreAllMocks();
219
243
  });
220
244
  it('should normalize paths correctly', () => {
@@ -231,8 +255,7 @@ describe('SwaggerService', () => {
231
255
  getTest() { }
232
256
  };
233
257
  __decorate([
234
- (0, core_1.Get)('path') // Path without leading slash
235
- ,
258
+ (0, core_1.Get)('path'),
236
259
  (0, swagger_decorator_1.ApiOperation)(getOperation),
237
260
  __metadata("design:type", Function),
238
261
  __metadata("design:paramtypes", []),
@@ -240,17 +263,13 @@ describe('SwaggerService', () => {
240
263
  ], TestController.prototype, "getTest", null);
241
264
  TestController = __decorate([
242
265
  (0, swagger_decorator_1.Swagger)(swaggerOptions),
243
- (0, core_1.Controller)({ path: 'test' }) // Path without leading slash
266
+ (0, core_1.Controller)({ path: 'test' })
244
267
  ], TestController);
245
268
  Reflect.defineMetadata('hazel:controller', { path: 'test' }, TestController);
246
269
  Reflect.defineMetadata('hazel:routes', [{ propertyKey: 'getTest', path: 'path', method: 'GET' }], TestController);
247
270
  const spec = swaggerService.generateSpec([TestController]);
248
- // The normalizePath concatenates basePath and path: 'test' + 'path' = 'testpath', then normalizes to '/testpath'
249
- // But actually, paths should be joined with '/' if both exist
250
- // Let's check what path was actually created
251
271
  const pathKeys = Object.keys(spec.paths);
252
272
  expect(pathKeys.length).toBeGreaterThan(0);
253
- // The normalized path should start with '/'
254
273
  const createdPath = pathKeys[0];
255
274
  expect(createdPath.startsWith('/')).toBe(true);
256
275
  expect(spec.paths[createdPath].get).toBeDefined();
@@ -277,7 +296,7 @@ describe('SwaggerService', () => {
277
296
  ], TestController.prototype, "getTest", null);
278
297
  TestController = __decorate([
279
298
  (0, swagger_decorator_1.Swagger)(swaggerOptions),
280
- (0, core_1.Controller)({ path: '/test/' }) // Path with trailing slash
299
+ (0, core_1.Controller)({ path: '/test/' })
281
300
  ], TestController);
282
301
  Reflect.defineMetadata('hazel:controller', { path: '/test/' }, TestController);
283
302
  Reflect.defineMetadata('hazel:routes', [{ propertyKey: 'getTest', path: '', method: 'GET' }], TestController);
@@ -339,7 +358,6 @@ describe('SwaggerService', () => {
339
358
  const getOperation = {
340
359
  summary: 'Get test',
341
360
  responses: { '200': { description: 'Success' } },
342
- // No tags property
343
361
  };
344
362
  let TestController = class TestController {
345
363
  getTest() { }
@@ -360,5 +378,129 @@ describe('SwaggerService', () => {
360
378
  const spec = swaggerService.generateSpec([TestController]);
361
379
  expect(spec.paths['/test'].get.tags).toEqual(['TestController']);
362
380
  });
381
+ it('should prepend globalPrefix to paths', () => {
382
+ let UserController = class UserController {
383
+ list() { }
384
+ };
385
+ __decorate([
386
+ (0, core_1.Get)(),
387
+ __metadata("design:type", Function),
388
+ __metadata("design:paramtypes", []),
389
+ __metadata("design:returntype", void 0)
390
+ ], UserController.prototype, "list", null);
391
+ UserController = __decorate([
392
+ (0, core_1.Controller)({ path: '/users' })
393
+ ], UserController);
394
+ Reflect.defineMetadata('hazel:controller', { path: '/users' }, UserController);
395
+ Reflect.defineMetadata('hazel:routes', [{ propertyKey: 'list', path: '', method: 'GET' }], UserController);
396
+ const spec = swaggerService.generateSpec([UserController], { globalPrefix: '/api' });
397
+ expect(spec.paths['/api/users']?.get).toBeDefined();
398
+ });
399
+ it('should merge securitySchemes into components', () => {
400
+ let XController = class XController {
401
+ x() { }
402
+ };
403
+ __decorate([
404
+ (0, core_1.Get)(),
405
+ __metadata("design:type", Function),
406
+ __metadata("design:paramtypes", []),
407
+ __metadata("design:returntype", void 0)
408
+ ], XController.prototype, "x", null);
409
+ XController = __decorate([
410
+ (0, core_1.Controller)({ path: '/x' })
411
+ ], XController);
412
+ Reflect.defineMetadata('hazel:controller', { path: '/x' }, XController);
413
+ Reflect.defineMetadata('hazel:routes', [{ propertyKey: 'x', path: '', method: 'GET' }], XController);
414
+ const spec = swaggerService.generateSpec([XController], {
415
+ securitySchemes: {
416
+ bearer: { type: 'http', scheme: 'bearer', bearerFormat: 'JWT' },
417
+ },
418
+ security: [{ bearer: [] }],
419
+ });
420
+ expect(spec.components.securitySchemes?.bearer).toEqual({
421
+ type: 'http',
422
+ scheme: 'bearer',
423
+ bearerFormat: 'JWT',
424
+ });
425
+ expect(spec.security).toEqual([{ bearer: [] }]);
426
+ });
427
+ });
428
+ describe('generateAutoSpec', () => {
429
+ it('should collect controllers from module tree', () => {
430
+ let ItemController = class ItemController {
431
+ list() { }
432
+ };
433
+ __decorate([
434
+ (0, core_1.Get)(),
435
+ __metadata("design:type", Function),
436
+ __metadata("design:paramtypes", []),
437
+ __metadata("design:returntype", void 0)
438
+ ], ItemController.prototype, "list", null);
439
+ ItemController = __decorate([
440
+ (0, core_1.Controller)({ path: '/items' })
441
+ ], ItemController);
442
+ Reflect.defineMetadata('hazel:controller', { path: '/items' }, ItemController);
443
+ Reflect.defineMetadata('hazel:routes', [{ propertyKey: 'list', path: '', method: 'GET' }], ItemController);
444
+ let AppModule = class AppModule {
445
+ };
446
+ AppModule = __decorate([
447
+ (0, core_1.HazelModule)({
448
+ imports: [],
449
+ controllers: [ItemController],
450
+ })
451
+ ], AppModule);
452
+ const spec = swaggerService.generateAutoSpec(AppModule);
453
+ expect(spec.paths['/items']?.get).toBeDefined();
454
+ expectDefaultSchemas(spec);
455
+ });
456
+ it('should extract path parameters from route template', () => {
457
+ let UserController = class UserController {
458
+ one() { }
459
+ };
460
+ __decorate([
461
+ (0, core_1.Get)('/:id'),
462
+ __metadata("design:type", Function),
463
+ __metadata("design:paramtypes", []),
464
+ __metadata("design:returntype", void 0)
465
+ ], UserController.prototype, "one", null);
466
+ UserController = __decorate([
467
+ (0, core_1.Controller)({ path: '/users' })
468
+ ], UserController);
469
+ Reflect.defineMetadata('hazel:controller', { path: '/users' }, UserController);
470
+ Reflect.defineMetadata('hazel:routes', [{ propertyKey: 'one', path: '/:id', method: 'GET' }], UserController);
471
+ let AppModule = class AppModule {
472
+ };
473
+ AppModule = __decorate([
474
+ (0, core_1.HazelModule)({ controllers: [UserController], imports: [] })
475
+ ], AppModule);
476
+ const spec = swaggerService.generateAutoSpec(AppModule);
477
+ expect(spec.paths['/users/:id']?.get?.parameters).toEqual([
478
+ expect.objectContaining({ name: 'id', in: 'path', required: true }),
479
+ ]);
480
+ });
481
+ it('should add request body for PATCH', () => {
482
+ let UserController = class UserController {
483
+ patch() { }
484
+ };
485
+ __decorate([
486
+ (0, core_1.Patch)('/:id'),
487
+ __metadata("design:type", Function),
488
+ __metadata("design:paramtypes", []),
489
+ __metadata("design:returntype", void 0)
490
+ ], UserController.prototype, "patch", null);
491
+ UserController = __decorate([
492
+ (0, core_1.Controller)({ path: '/users' })
493
+ ], UserController);
494
+ Reflect.defineMetadata('hazel:controller', { path: '/users' }, UserController);
495
+ Reflect.defineMetadata('hazel:routes', [{ propertyKey: 'patch', path: '/:id', method: 'PATCH' }], UserController);
496
+ let AppModule = class AppModule {
497
+ };
498
+ AppModule = __decorate([
499
+ (0, core_1.HazelModule)({ controllers: [UserController], imports: [] })
500
+ ], AppModule);
501
+ const spec = swaggerService.generateAutoSpec(AppModule);
502
+ expect(spec.paths['/users/:id']?.patch?.requestBody).toBeDefined();
503
+ expect(spec.paths['/users/:id'].patch.summary).toBe('Update resource');
504
+ });
363
505
  });
364
506
  });
@@ -9,6 +9,28 @@ export interface SwaggerTag {
9
9
  name: string;
10
10
  description: string;
11
11
  }
12
+ /** OpenAPI server entry */
13
+ export interface SwaggerServer {
14
+ url: string;
15
+ description?: string;
16
+ }
17
+ /** Options for building a document from the app module (HTTP + programmatic). */
18
+ export interface SwaggerBuildOptions {
19
+ title?: string;
20
+ description?: string;
21
+ version?: string;
22
+ /** When true (default), routes without `@ApiOperation` get a generated operation. */
23
+ autoGenerateOperations?: boolean;
24
+ /** Prepended to every path (e.g. match `app.setGlobalPrefix('/api')`). */
25
+ globalPrefix?: string;
26
+ servers?: SwaggerServer[];
27
+ /** Merged into `components.securitySchemes`. */
28
+ securitySchemes?: Record<string, Record<string, unknown>>;
29
+ /** OpenAPI top-level `security` requirement. */
30
+ security?: Array<Record<string, string[]>>;
31
+ }
32
+ /** @deprecated Use `SwaggerBuildOptions` — alias kept for backward compatibility. */
33
+ export type AutoSwaggerOptions = SwaggerBuildOptions;
12
34
  export interface SwaggerOperation {
13
35
  summary?: string;
14
36
  description?: string;
@@ -40,11 +62,40 @@ export interface SwaggerResponse {
40
62
  };
41
63
  }
42
64
  export interface SwaggerSchema {
43
- type: 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'object';
65
+ type?: 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'object';
66
+ /** OpenAPI component reference, e.g. `#/components/schemas/Error` */
67
+ $ref?: string;
44
68
  format?: string;
45
69
  items?: SwaggerSchema;
46
70
  properties?: Record<string, SwaggerSchema>;
47
71
  required?: string[];
48
72
  example?: string | number | boolean | null | Record<string, unknown> | unknown[];
49
73
  }
74
+ export interface SwaggerSpec {
75
+ openapi: string;
76
+ info: {
77
+ title?: string;
78
+ description?: string;
79
+ version?: string;
80
+ };
81
+ servers?: SwaggerServer[];
82
+ paths: Record<string, Record<string, SwaggerOperation>>;
83
+ components: {
84
+ schemas: Record<string, SwaggerSchema>;
85
+ securitySchemes?: Record<string, Record<string, unknown>>;
86
+ };
87
+ security?: Array<Record<string, string[]>>;
88
+ tags?: Array<{
89
+ name: string;
90
+ description: string;
91
+ }>;
92
+ }
93
+ /** Runtime configuration for `SwaggerModule.configure()` (document + UI). */
94
+ export interface SwaggerModuleOptions extends SwaggerBuildOptions {
95
+ /**
96
+ * Base URL for Swagger UI static assets (no trailing slash).
97
+ * Example: `https://unpkg.com/swagger-ui-dist@5.11.0`
98
+ */
99
+ swaggerUiCdnBase?: string;
100
+ }
50
101
  //# sourceMappingURL=swagger.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"swagger.types.d.ts","sourceRoot":"","sources":["../src/swagger.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,UAAU,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAChC,WAAW,CAAC,EAAE;QACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,OAAO,EAAE;YACP,CAAC,WAAW,EAAE,MAAM,GAAG;gBACrB,MAAM,EAAE,aAAa,CAAC;aACvB,CAAC;SACH,CAAC;KACH,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE;QACR,CAAC,WAAW,EAAE,MAAM,GAAG;YACrB,MAAM,EAAE,aAAa,CAAC;SACvB,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC3C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,EAAE,CAAC;CAClF"}
1
+ {"version":3,"file":"swagger.types.d.ts","sourceRoot":"","sources":["../src/swagger.types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hazeljs/swagger",
3
- "version": "0.8.6",
3
+ "version": "0.8.7",
4
4
  "description": "Swagger/OpenAPI documentation module for HazelJS framework",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -14,12 +14,8 @@
14
14
  "lint:fix": "eslint \"src/**/*.ts\" --fix",
15
15
  "clean": "rm -rf dist"
16
16
  },
17
- "dependencies": {
18
- "swagger-ui-express": "^5.0.1"
19
- },
20
17
  "devDependencies": {
21
18
  "@types/node": "^20.19.39",
22
- "@types/swagger-ui-express": "^4.1.8",
23
19
  "@typescript-eslint/eslint-plugin": "^8.58.0",
24
20
  "@typescript-eslint/parser": "^8.58.0",
25
21
  "eslint": "^8.57.1",
@@ -45,11 +41,11 @@
45
41
  "author": "Muhammad Arslan <muhammad.arslan@hazeljs.ai>",
46
42
  "license": "Apache-2.0",
47
43
  "bugs": {
48
- "url": "https://github.com/hazeljs/hazel-js/issues"
44
+ "url": "https://github.com/hazel-js/hazeljs/issues"
49
45
  },
50
46
  "homepage": "https://hazeljs.ai",
51
47
  "peerDependencies": {
52
- "@hazeljs/core": "^0.8.6"
48
+ "@hazeljs/core": "^0.8.7"
53
49
  },
54
- "gitHead": "49c952f8081c2613273eda80285a2022b91dcfa8"
50
+ "gitHead": "7e6f4d6ed5e9d92cdd5f43f3577f5e0361202878"
55
51
  }