@spinajs/http-swagger 2.0.480 → 2.0.482
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/lib/cjs/cli/GenerateSwaggerCache.d.ts +1 -1
- package/lib/cjs/cli/GenerateSwaggerCache.d.ts.map +1 -1
- package/lib/cjs/cli/GenerateSwaggerCache.js +3 -2
- package/lib/cjs/cli/GenerateSwaggerCache.js.map +1 -1
- package/lib/cjs/config/http-swagger.d.ts.map +1 -1
- package/lib/cjs/config/http-swagger.js +6 -1
- package/lib/cjs/config/http-swagger.js.map +1 -1
- package/lib/cjs/controllers/SwaggerController.d.ts +3 -3
- package/lib/cjs/controllers/SwaggerController.d.ts.map +1 -1
- package/lib/cjs/controllers/SwaggerController.js +2 -2
- package/lib/cjs/controllers/SwaggerController.js.map +1 -1
- package/lib/cjs/openapi-builder.d.ts +13 -0
- package/lib/cjs/openapi-builder.d.ts.map +1 -1
- package/lib/cjs/openapi-builder.js +87 -25
- package/lib/cjs/openapi-builder.js.map +1 -1
- package/lib/cjs/swagger-service.d.ts +18 -0
- package/lib/cjs/swagger-service.d.ts.map +1 -1
- package/lib/cjs/swagger-service.js +37 -4
- package/lib/cjs/swagger-service.js.map +1 -1
- package/lib/mjs/cli/GenerateSwaggerCache.d.ts +1 -1
- package/lib/mjs/cli/GenerateSwaggerCache.d.ts.map +1 -1
- package/lib/mjs/cli/GenerateSwaggerCache.js +3 -2
- package/lib/mjs/cli/GenerateSwaggerCache.js.map +1 -1
- package/lib/mjs/config/http-swagger.d.ts.map +1 -1
- package/lib/mjs/config/http-swagger.js +6 -1
- package/lib/mjs/config/http-swagger.js.map +1 -1
- package/lib/mjs/controllers/SwaggerController.d.ts +3 -3
- package/lib/mjs/controllers/SwaggerController.d.ts.map +1 -1
- package/lib/mjs/controllers/SwaggerController.js +3 -3
- package/lib/mjs/controllers/SwaggerController.js.map +1 -1
- package/lib/mjs/openapi-builder.d.ts +13 -0
- package/lib/mjs/openapi-builder.d.ts.map +1 -1
- package/lib/mjs/openapi-builder.js +87 -25
- package/lib/mjs/openapi-builder.js.map +1 -1
- package/lib/mjs/swagger-service.d.ts +18 -0
- package/lib/mjs/swagger-service.d.ts.map +1 -1
- package/lib/mjs/swagger-service.js +37 -4
- package/lib/mjs/swagger-service.js.map +1 -1
- package/lib/tsconfig.cjs.tsbuildinfo +1 -1
- package/lib/tsconfig.mjs.tsbuildinfo +1 -1
- package/package.json +13 -11
|
@@ -12,9 +12,27 @@ export declare class SwaggerService extends AsyncService {
|
|
|
12
12
|
protected ControllersService: Controllers;
|
|
13
13
|
protected DocCache: SwaggerDocCache;
|
|
14
14
|
protected SwaggerConfig: ISwaggerConfig;
|
|
15
|
+
/**
|
|
16
|
+
* The global route prefix the runtime prepends to every controller route
|
|
17
|
+
* (see BaseController route registration). Documented paths must include it
|
|
18
|
+
* or Swagger "Try it out" hits the wrong URL. Only used as a fallback when
|
|
19
|
+
* an explicit swagger.basePath isn't configured.
|
|
20
|
+
*/
|
|
21
|
+
protected RoutePrefix: string;
|
|
15
22
|
private _spec;
|
|
23
|
+
/**
|
|
24
|
+
* In-flight build, shared so concurrent first requests don't each kick off a
|
|
25
|
+
* full (expensive) rebuild. Cleared once the build settles.
|
|
26
|
+
*/
|
|
27
|
+
private _buildPromise;
|
|
16
28
|
get IsEnabled(): boolean;
|
|
17
29
|
resolve(): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Drop the cached spec so the next getSpec() rebuilds it. Call after
|
|
32
|
+
* registering controllers at runtime (Controllers.add) so they appear in
|
|
33
|
+
* the documentation.
|
|
34
|
+
*/
|
|
35
|
+
invalidate(): void;
|
|
18
36
|
getSpec(): Promise<IOpenApiDocument | null>;
|
|
19
37
|
/**
|
|
20
38
|
* Rebuild the OpenAPI specification from current controllers.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swagger-service.d.ts","sourceRoot":"","sources":["../../src/swagger-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAyC,MAAM,aAAa,CAAC;AAElF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAU,GAAG,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnE;;;GAGG;AACH,qBACa,cAAe,SAAQ,YAAY;IAE9C,SAAS,CAAC,GAAG,EAAG,GAAG,CAAC;IAGpB,SAAS,CAAC,kBAAkB,EAAG,WAAW,CAAC;IAG3C,SAAS,CAAC,QAAQ,EAAG,eAAe,CAAC;IAGrC,SAAS,CAAC,aAAa,EAAG,cAAc,CAAC;IAEzC,OAAO,CAAC,KAAK,CAAiC;IAE9C,IAAW,SAAS,IAAI,OAAO,CAE9B;IAEY,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"swagger-service.d.ts","sourceRoot":"","sources":["../../src/swagger-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAyC,MAAM,aAAa,CAAC;AAElF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAU,GAAG,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnE;;;GAGG;AACH,qBACa,cAAe,SAAQ,YAAY;IAE9C,SAAS,CAAC,GAAG,EAAG,GAAG,CAAC;IAGpB,SAAS,CAAC,kBAAkB,EAAG,WAAW,CAAC;IAG3C,SAAS,CAAC,QAAQ,EAAG,eAAe,CAAC;IAGrC,SAAS,CAAC,aAAa,EAAG,cAAc,CAAC;IAEzC;;;;;OAKG;IAEH,SAAS,CAAC,WAAW,EAAG,MAAM,CAAC;IAE/B,OAAO,CAAC,KAAK,CAAiC;IAE9C;;;OAGG;IACH,OAAO,CAAC,aAAa,CAA0C;IAE/D,IAAW,SAAS,IAAI,OAAO,CAE9B;IAEY,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrC;;;;OAIG;IACI,UAAU,IAAI,IAAI;IAIZ,OAAO,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAqBxD;;OAEG;IACU,SAAS,IAAI,OAAO,CAAC,gBAAgB,CAAC;CA6BpD"}
|
|
@@ -21,6 +21,11 @@ let SwaggerService = class SwaggerService extends AsyncService {
|
|
|
21
21
|
constructor() {
|
|
22
22
|
super(...arguments);
|
|
23
23
|
this._spec = null;
|
|
24
|
+
/**
|
|
25
|
+
* In-flight build, shared so concurrent first requests don't each kick off a
|
|
26
|
+
* full (expensive) rebuild. Cleared once the build settles.
|
|
27
|
+
*/
|
|
28
|
+
this._buildPromise = null;
|
|
24
29
|
}
|
|
25
30
|
get IsEnabled() {
|
|
26
31
|
return this.SwaggerConfig?.enabled !== false;
|
|
@@ -28,25 +33,49 @@ let SwaggerService = class SwaggerService extends AsyncService {
|
|
|
28
33
|
async resolve() {
|
|
29
34
|
await super.resolve();
|
|
30
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Drop the cached spec so the next getSpec() rebuilds it. Call after
|
|
38
|
+
* registering controllers at runtime (Controllers.add) so they appear in
|
|
39
|
+
* the documentation.
|
|
40
|
+
*/
|
|
41
|
+
invalidate() {
|
|
42
|
+
this._spec = null;
|
|
43
|
+
}
|
|
31
44
|
async getSpec() {
|
|
32
45
|
if (!this.IsEnabled)
|
|
33
46
|
return null;
|
|
34
|
-
if (
|
|
47
|
+
if (this._spec)
|
|
48
|
+
return this._spec;
|
|
49
|
+
// Coalesce concurrent builds onto a single in-flight promise.
|
|
50
|
+
if (!this._buildPromise) {
|
|
35
51
|
this.Log.info('Building Swagger/OpenAPI documentation...');
|
|
36
|
-
|
|
37
|
-
|
|
52
|
+
this._buildPromise = this.buildSpec()
|
|
53
|
+
.then((spec) => {
|
|
54
|
+
this.Log.info(`Swagger documentation ready. ${Object.keys(spec.paths ?? {}).length} paths documented.`);
|
|
55
|
+
return spec;
|
|
56
|
+
})
|
|
57
|
+
.finally(() => {
|
|
58
|
+
this._buildPromise = null;
|
|
59
|
+
});
|
|
38
60
|
}
|
|
61
|
+
await this._buildPromise;
|
|
39
62
|
return this._spec;
|
|
40
63
|
}
|
|
41
64
|
/**
|
|
42
65
|
* Rebuild the OpenAPI specification from current controllers.
|
|
43
66
|
*/
|
|
44
67
|
async buildSpec() {
|
|
45
|
-
const
|
|
68
|
+
const baseConfig = this.SwaggerConfig || {
|
|
46
69
|
enabled: true,
|
|
47
70
|
title: 'API Documentation',
|
|
48
71
|
version: '1.0.0',
|
|
49
72
|
};
|
|
73
|
+
// Fall back to the runtime route prefix so documented paths match the
|
|
74
|
+
// actual mounted URLs when no explicit swagger.basePath is set.
|
|
75
|
+
const config = {
|
|
76
|
+
...baseConfig,
|
|
77
|
+
basePath: baseConfig.basePath || this.RoutePrefix || '',
|
|
78
|
+
};
|
|
50
79
|
const builder = await DI.resolve(OpenApiBuilder, [config]);
|
|
51
80
|
const controllers = await this.ControllersService.Controllers;
|
|
52
81
|
for (const controller of controllers) {
|
|
@@ -78,6 +107,10 @@ __decorate([
|
|
|
78
107
|
Config('http.swagger'),
|
|
79
108
|
__metadata("design:type", Object)
|
|
80
109
|
], SwaggerService.prototype, "SwaggerConfig", void 0);
|
|
110
|
+
__decorate([
|
|
111
|
+
Config('http.controllers.route.prefix', { defaultValue: '' }),
|
|
112
|
+
__metadata("design:type", String)
|
|
113
|
+
], SwaggerService.prototype, "RoutePrefix", void 0);
|
|
81
114
|
SwaggerService = __decorate([
|
|
82
115
|
Singleton()
|
|
83
116
|
], SwaggerService);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swagger-service.js","sourceRoot":"","sources":["../../src/swagger-service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAClF,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD;;;GAGG;AAEI,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,YAAY;IAAzC;;
|
|
1
|
+
{"version":3,"file":"swagger-service.js","sourceRoot":"","sources":["../../src/swagger-service.ts"],"names":[],"mappings":"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"}
|