@loopback/rest 3.2.0 → 3.3.2
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/CHANGELOG.md +38 -0
- package/dist/body-parsers/index.d.ts +4 -3
- package/dist/body-parsers/index.js +4 -3
- package/dist/body-parsers/index.js.map +1 -1
- package/dist/coercion/utils.d.ts +1 -1
- package/dist/http-handler.d.ts +21 -3
- package/dist/http-handler.js +25 -2
- package/dist/http-handler.js.map +1 -1
- package/dist/providers/parse-params.provider.js +4 -1
- package/dist/providers/parse-params.provider.js.map +1 -1
- package/dist/rest.component.d.ts +2 -1
- package/dist/rest.component.js +2 -0
- package/dist/rest.component.js.map +1 -1
- package/dist/rest.server.d.ts +5 -0
- package/dist/rest.server.js +10 -15
- package/dist/rest.server.js.map +1 -1
- package/dist/spec-enhancers/consolidate.spec-enhancer.d.ts +68 -0
- package/dist/spec-enhancers/consolidate.spec-enhancer.js +141 -0
- package/dist/spec-enhancers/consolidate.spec-enhancer.js.map +1 -0
- package/dist/types.d.ts +22 -0
- package/dist/validation/ajv-factory.provider.js +11 -4
- package/dist/validation/ajv-factory.provider.js.map +1 -1
- package/dist/validation/request-body.validator.js +3 -3
- package/dist/validation/request-body.validator.js.map +1 -1
- package/package.json +20 -18
- package/src/body-parsers/index.ts +4 -3
- package/src/http-handler.ts +35 -4
- package/src/rest.component.ts +2 -0
- package/src/rest.server.ts +13 -12
- package/src/spec-enhancers/consolidate.spec-enhancer.ts +182 -0
- package/src/types.ts +25 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,44 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [3.3.2](https://github.com/strongloop/loopback-next/compare/@loopback/rest@3.3.1...@loopback/rest@3.3.2) (2020-04-29)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @loopback/rest
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
## [3.3.1](https://github.com/strongloop/loopback-next/compare/@loopback/rest@3.3.0...@loopback/rest@3.3.1) (2020-04-23)
|
|
15
|
+
|
|
16
|
+
**Note:** Version bump only for package @loopback/rest
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
# [3.3.0](https://github.com/strongloop/loopback-next/compare/@loopback/rest@3.2.1...@loopback/rest@3.3.0) (2020-04-22)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### Features
|
|
26
|
+
|
|
27
|
+
* **rest:** ensure OpenAPI spec components are merged ([2efa27b](https://github.com/strongloop/loopback-next/commit/2efa27b283d86258fe705914c557536abaf2c435))
|
|
28
|
+
* migrate loopback-example-passport repo as lb4 example ([dd3c328](https://github.com/strongloop/loopback-next/commit/dd3c328a138621bb3f6ae770b4db83ba21ecc2d6))
|
|
29
|
+
* update package.json and .travis.yml for builds ([cb2b8e6](https://github.com/strongloop/loopback-next/commit/cb2b8e6a18616dda7783c0193091039d4e608131))
|
|
30
|
+
* **rest:** add openapi schema consolidation ([6a039ed](https://github.com/strongloop/loopback-next/commit/6a039edd4e056089bca8cf2acd4ed7ddab55d55e))
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
## [3.2.1](https://github.com/strongloop/loopback-next/compare/@loopback/rest@3.2.0...@loopback/rest@3.2.1) (2020-04-11)
|
|
37
|
+
|
|
38
|
+
**Note:** Version bump only for package @loopback/rest
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
6
44
|
# [3.2.0](https://github.com/strongloop/loopback-next/compare/@loopback/rest@3.1.0...@loopback/rest@3.2.0) (2020-04-08)
|
|
7
45
|
|
|
8
46
|
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
export * from './types';
|
|
2
1
|
export * from './body-parser';
|
|
2
|
+
export * from './body-parser.helpers';
|
|
3
3
|
export * from './body-parser.json';
|
|
4
|
+
export * from './body-parser.raw';
|
|
5
|
+
export * from './body-parser.stream';
|
|
4
6
|
export * from './body-parser.text';
|
|
5
7
|
export * from './body-parser.urlencoded';
|
|
6
|
-
export * from './
|
|
7
|
-
export * from './body-parser.raw';
|
|
8
|
+
export * from './types';
|
|
@@ -5,11 +5,12 @@
|
|
|
5
5
|
// License text available at https://opensource.org/licenses/MIT
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
const tslib_1 = require("tslib");
|
|
8
|
-
tslib_1.__exportStar(require("./types"), exports);
|
|
9
8
|
tslib_1.__exportStar(require("./body-parser"), exports);
|
|
9
|
+
tslib_1.__exportStar(require("./body-parser.helpers"), exports);
|
|
10
10
|
tslib_1.__exportStar(require("./body-parser.json"), exports);
|
|
11
|
+
tslib_1.__exportStar(require("./body-parser.raw"), exports);
|
|
12
|
+
tslib_1.__exportStar(require("./body-parser.stream"), exports);
|
|
11
13
|
tslib_1.__exportStar(require("./body-parser.text"), exports);
|
|
12
14
|
tslib_1.__exportStar(require("./body-parser.urlencoded"), exports);
|
|
13
|
-
tslib_1.__exportStar(require("./
|
|
14
|
-
tslib_1.__exportStar(require("./body-parser.raw"), exports);
|
|
15
|
+
tslib_1.__exportStar(require("./types"), exports);
|
|
15
16
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/body-parsers/index.ts"],"names":[],"mappings":";AAAA,iDAAiD;AACjD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;AAEhE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/body-parsers/index.ts"],"names":[],"mappings":";AAAA,iDAAiD;AACjD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;AAEhE,wDAA8B;AAC9B,gEAAsC;AACtC,6DAAmC;AACnC,4DAAkC;AAClC,+DAAqC;AACrC,6DAAmC;AACnC,mEAAyC;AACzC,kDAAwB"}
|
package/dist/coercion/utils.d.ts
CHANGED
|
@@ -40,4 +40,4 @@ export declare function matchDateFormat(date: string): boolean;
|
|
|
40
40
|
* @param type - The type in an OpenAPI schema specification
|
|
41
41
|
* @param format - The format in an OpenAPI schema specification
|
|
42
42
|
*/
|
|
43
|
-
export declare function getOAIPrimitiveType(type?: string, format?: string): "object" | "
|
|
43
|
+
export declare function getOAIPrimitiveType(type?: string, format?: string): "object" | "boolean" | "string" | "number" | "array" | "byte" | "binary" | "date" | "date-time" | "password" | "float" | "double" | "long" | "integer" | undefined;
|
package/dist/http-handler.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="express" />
|
|
2
2
|
import { Context } from '@loopback/context';
|
|
3
|
-
import { ControllerSpec, PathObject, SchemasObject } from '@loopback/openapi-v3';
|
|
3
|
+
import { ComponentsObject, ControllerSpec, PathObject, SchemasObject } from '@loopback/openapi-v3';
|
|
4
4
|
import { RestServerResolvedConfig } from './rest.server';
|
|
5
5
|
import { ControllerClass, ControllerFactory, ResolvedRoute, RouteEntry, RoutingTable } from './router';
|
|
6
6
|
import { Request, Response } from './types';
|
|
@@ -8,13 +8,31 @@ export declare class HttpHandler {
|
|
|
8
8
|
protected readonly _rootContext: Context;
|
|
9
9
|
protected readonly _serverConfig: RestServerResolvedConfig;
|
|
10
10
|
protected readonly _routes: RoutingTable;
|
|
11
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Shared OpenAPI spec objects as `components`
|
|
13
|
+
*/
|
|
14
|
+
protected _openApiComponents: ComponentsObject;
|
|
12
15
|
handleRequest: (request: Request, response: Response) => Promise<void>;
|
|
13
16
|
constructor(_rootContext: Context, _serverConfig: RestServerResolvedConfig, _routes?: RoutingTable);
|
|
14
17
|
registerController<T>(spec: ControllerSpec, controllerCtor: ControllerClass<T>, controllerFactory?: ControllerFactory<T>): void;
|
|
15
18
|
registerRoute(route: RouteEntry): void;
|
|
19
|
+
/**
|
|
20
|
+
* @deprecated Use `registerApiComponents`
|
|
21
|
+
* @param defs Schemas
|
|
22
|
+
*/
|
|
16
23
|
registerApiDefinitions(defs: SchemasObject): void;
|
|
17
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Merge components into the OpenApi spec
|
|
26
|
+
* @param defs - Components
|
|
27
|
+
*/
|
|
28
|
+
registerApiComponents(defs: ComponentsObject): void;
|
|
29
|
+
getApiComponents(): ComponentsObject;
|
|
30
|
+
/**
|
|
31
|
+
* @deprecated Use `getApiComponents`
|
|
32
|
+
*/
|
|
33
|
+
getApiDefinitions(): {
|
|
34
|
+
[schema: string]: import("@loopback/openapi-v3").SchemaObject | import("@loopback/openapi-v3").ReferenceObject;
|
|
35
|
+
} | undefined;
|
|
18
36
|
describeApiPaths(): PathObject;
|
|
19
37
|
findRoute(request: Request): ResolvedRoute;
|
|
20
38
|
protected _handleRequest(request: Request, response: Response): Promise<void>;
|
package/dist/http-handler.js
CHANGED
|
@@ -20,11 +20,34 @@ class HttpHandler {
|
|
|
20
20
|
registerRoute(route) {
|
|
21
21
|
this._routes.registerRoute(route);
|
|
22
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* @deprecated Use `registerApiComponents`
|
|
25
|
+
* @param defs Schemas
|
|
26
|
+
*/
|
|
23
27
|
registerApiDefinitions(defs) {
|
|
24
|
-
this.
|
|
28
|
+
this.registerApiComponents({ schemas: defs });
|
|
25
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* Merge components into the OpenApi spec
|
|
32
|
+
* @param defs - Components
|
|
33
|
+
*/
|
|
34
|
+
registerApiComponents(defs) {
|
|
35
|
+
var _a;
|
|
36
|
+
this._openApiComponents = (_a = this._openApiComponents) !== null && _a !== void 0 ? _a : {};
|
|
37
|
+
for (const p in defs) {
|
|
38
|
+
// Merge each child, such as `schemas`, `parameters`, and `headers`
|
|
39
|
+
this._openApiComponents[p] = { ...this._openApiComponents[p], ...defs[p] };
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
getApiComponents() {
|
|
43
|
+
return this._openApiComponents;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* @deprecated Use `getApiComponents`
|
|
47
|
+
*/
|
|
26
48
|
getApiDefinitions() {
|
|
27
|
-
|
|
49
|
+
var _a;
|
|
50
|
+
return (_a = this._openApiComponents) === null || _a === void 0 ? void 0 : _a.schemas;
|
|
28
51
|
}
|
|
29
52
|
describeApiPaths() {
|
|
30
53
|
return this._routes.describeApiPaths();
|
package/dist/http-handler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-handler.js","sourceRoot":"","sources":["../src/http-handler.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;
|
|
1
|
+
{"version":3,"file":"http-handler.js","sourceRoot":"","sources":["../src/http-handler.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;AAShE,iCAAoC;AACpC,uDAAiD;AAEjD,qCAMkB;AAIlB,MAAa,WAAW;IAQtB,YACqB,YAAqB,EACrB,aAAuC,EACvC,UAAU,IAAI,qBAAY,EAAE;QAF5B,iBAAY,GAAZ,YAAY,CAAS;QACrB,kBAAa,GAAb,aAAa,CAA0B;QACvC,YAAO,GAAP,OAAO,CAAqB;QAE/C,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACnE,CAAC;IAED,kBAAkB,CAChB,IAAoB,EACpB,cAAkC,EAClC,iBAAwC;QAExC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,EAAE,cAAc,EAAE,iBAAiB,CAAC,CAAC;IAC3E,CAAC;IAED,aAAa,CAAC,KAAiB;QAC7B,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED;;;OAGG;IACH,sBAAsB,CAAC,IAAmB;QACxC,IAAI,CAAC,qBAAqB,CAAC,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,CAAC;IAC9C,CAAC;IAED;;;OAGG;IACH,qBAAqB,CAAC,IAAsB;;QAC1C,IAAI,CAAC,kBAAkB,SAAG,IAAI,CAAC,kBAAkB,mCAAI,EAAE,CAAC;QACxD,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;YACpB,mEAAmE;YACnE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,GAAG,EAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC;SAC1E;IACH,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,iBAAiB;;QACf,aAAO,IAAI,CAAC,kBAAkB,0CAAE,OAAO,CAAC;IAC1C,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;IACzC,CAAC;IAED,SAAS,CAAC,OAAgB;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;QACvD,OAAO,KAAK,CAAC;IACf,CAAC;IAES,KAAK,CAAC,cAAc,CAC5B,OAAgB,EAChB,QAAkB;QAElB,MAAM,cAAc,GAAG,IAAI,gCAAc,CACvC,OAAO,EACP,QAAQ,EACR,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,aAAa,CACnB,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,GAAG,CACvC,mBAAY,CAAC,QAAQ,CACtB,CAAC;QACF,MAAM,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACxC,CAAC;CACF;AArFD,kCAqFC"}
|
|
@@ -21,7 +21,10 @@ let ParseParamsProvider = class ParseParamsProvider {
|
|
|
21
21
|
this.ajvFactory = ajvFactory;
|
|
22
22
|
}
|
|
23
23
|
value() {
|
|
24
|
-
return (request, route) => parser_1.parseOperationArgs(request, route, this.requestBodyParser,
|
|
24
|
+
return (request, route) => parser_1.parseOperationArgs(request, route, this.requestBodyParser, {
|
|
25
|
+
ajvFactory: this.ajvFactory,
|
|
26
|
+
...this.validationOptions,
|
|
27
|
+
});
|
|
25
28
|
}
|
|
26
29
|
};
|
|
27
30
|
ParseParamsProvider = tslib_1.__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-params.provider.js","sourceRoot":"","sources":["../../src/providers/parse-params.provider.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;AAEhE,+CAAmD;AACnD,kDAAkD;AAClD,kCAAqC;AACrC,sCAA6C;AAQ7C;;;;GAIG;AACH,IAAa,mBAAmB,GAAhC,MAAa,mBAAmB;IAC9B,YAEU,iBAAoC,EAKpC,oBAAkD,EAAE,EAEpD,UAAuB;QAPvB,sBAAiB,GAAjB,iBAAiB,CAAmB;QAKpC,sBAAiB,GAAjB,iBAAiB,CAAmC;QAEpD,eAAU,GAAV,UAAU,CAAa;IAC9B,CAAC;IAEJ,KAAK;QACH,OAAO,CAAC,OAAgB,EAAE,KAAoB,EAAE,EAAE,CAChD,2BAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,iBAAiB,
|
|
1
|
+
{"version":3,"file":"parse-params.provider.js","sourceRoot":"","sources":["../../src/providers/parse-params.provider.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;AAEhE,+CAAmD;AACnD,kDAAkD;AAClD,kCAAqC;AACrC,sCAA6C;AAQ7C;;;;GAIG;AACH,IAAa,mBAAmB,GAAhC,MAAa,mBAAmB;IAC9B,YAEU,iBAAoC,EAKpC,oBAAkD,EAAE,EAEpD,UAAuB;QAPvB,sBAAiB,GAAjB,iBAAiB,CAAmB;QAKpC,sBAAiB,GAAjB,iBAAiB,CAAmC;QAEpD,eAAU,GAAV,UAAU,CAAa;IAC9B,CAAC;IAEJ,KAAK;QACH,OAAO,CAAC,OAAgB,EAAE,KAAoB,EAAE,EAAE,CAChD,2BAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE;YACzD,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,GAAG,IAAI,CAAC,iBAAiB;SAC1B,CAAC,CAAC;IACP,CAAC;CACF,CAAA;AApBY,mBAAmB;IAE3B,mBAAA,gBAAM,CAAC,mBAAY,CAAC,mBAAmB,CAAC,CAAA;IAExC,mBAAA,gBAAM,CACL,mBAAY,CAAC,2BAA2B,CAAC,YAAY,CAAC,YAAY,CAAC,EACnE,EAAC,QAAQ,EAAE,IAAI,EAAC,CACjB,CAAA;IAEA,mBAAA,gBAAM,CAAC,mBAAY,CAAC,WAAW,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAA;6CANxB,gCAAiB;GAHnC,mBAAmB,CAoB/B;AApBY,kDAAmB"}
|
package/dist/rest.component.d.ts
CHANGED
|
@@ -2,13 +2,14 @@ import { Binding, Constructor } from '@loopback/context';
|
|
|
2
2
|
import { Application, Component, ProviderMap, Server } from '@loopback/core';
|
|
3
3
|
import { RequestBodyParser } from './body-parsers';
|
|
4
4
|
import { RestServerConfig } from './rest.server';
|
|
5
|
+
import { ConsolidationEnhancer } from './spec-enhancers/consolidate.spec-enhancer';
|
|
5
6
|
import { InfoSpecEnhancer } from './spec-enhancers/info.spec-enhancer';
|
|
6
7
|
export declare class RestComponent implements Component {
|
|
7
8
|
providers: ProviderMap;
|
|
8
9
|
/**
|
|
9
10
|
* Add built-in body parsers
|
|
10
11
|
*/
|
|
11
|
-
bindings: (Binding<import("./body-parsers").BodyParser> | Binding<RequestBodyParser> | Binding<InfoSpecEnhancer>)[];
|
|
12
|
+
bindings: (Binding<import("./body-parsers").BodyParser> | Binding<RequestBodyParser> | Binding<InfoSpecEnhancer> | Binding<ConsolidationEnhancer>)[];
|
|
12
13
|
servers: {
|
|
13
14
|
[name: string]: Constructor<Server>;
|
|
14
15
|
};
|
package/dist/rest.component.js
CHANGED
|
@@ -14,6 +14,7 @@ const keys_1 = require("./keys");
|
|
|
14
14
|
const providers_1 = require("./providers");
|
|
15
15
|
const rest_server_1 = require("./rest.server");
|
|
16
16
|
const sequence_1 = require("./sequence");
|
|
17
|
+
const consolidate_spec_enhancer_1 = require("./spec-enhancers/consolidate.spec-enhancer");
|
|
17
18
|
const info_spec_enhancer_1 = require("./spec-enhancers/info.spec-enhancer");
|
|
18
19
|
const ajv_factory_provider_1 = require("./validation/ajv-factory.provider");
|
|
19
20
|
let RestComponent = class RestComponent {
|
|
@@ -43,6 +44,7 @@ let RestComponent = class RestComponent {
|
|
|
43
44
|
rest_server_1.createBodyParserBinding(body_parser_raw_1.RawBodyParser, keys_1.RestBindings.REQUEST_BODY_PARSER_RAW),
|
|
44
45
|
rest_server_1.createBodyParserBinding(body_parsers_1.StreamBodyParser, keys_1.RestBindings.REQUEST_BODY_PARSER_STREAM),
|
|
45
46
|
context_1.createBindingFromClass(info_spec_enhancer_1.InfoSpecEnhancer),
|
|
47
|
+
context_1.createBindingFromClass(consolidate_spec_enhancer_1.ConsolidationEnhancer),
|
|
46
48
|
];
|
|
47
49
|
this.servers = {
|
|
48
50
|
RestServer: rest_server_1.RestServer,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rest.component.js","sourceRoot":"","sources":["../src/rest.component.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;AAEhE,+CAK2B;AAC3B,yCAMwB;AACxB,qDAAwD;AACxD,iDAMwB;AACxB,oEAA6D;AAC7D,iCAAoC;AACpC,2CASqB;AACrB,+CAIuB;AACvB,yCAA2C;AAC3C,4EAAqE;AACrE,4EAAqE;AAErE,IAAa,aAAa,GAA1B,MAAa,aAAa;
|
|
1
|
+
{"version":3,"file":"rest.component.js","sourceRoot":"","sources":["../src/rest.component.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;AAEhE,+CAK2B;AAC3B,yCAMwB;AACxB,qDAAwD;AACxD,iDAMwB;AACxB,oEAA6D;AAC7D,iCAAoC;AACpC,2CASqB;AACrB,+CAIuB;AACvB,yCAA2C;AAC3C,0FAAiF;AACjF,4EAAqE;AACrE,4EAAqE;AAErE,IAAa,aAAa,GAA1B,MAAa,aAAa;IAgDxB,YAC6C,GAAgB,EAC9B,MAA4B;;QAjD3D,cAAS,GAAgB;YACvB,CAAC,mBAAY,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,4BAAgB;YAC9D,CAAC,mBAAY,CAAC,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,6BAAiB;YAChE,CAAC,mBAAY,CAAC,eAAe,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,gCAAoB;YACtE,CAAC,mBAAY,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,0BAAc;YACzD,CAAC,mBAAY,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,+BAAmB;YACpD,CAAC,mBAAY,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,kCAAsB;YAC3D,CAAC,mBAAY,CAAC,eAAe,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,+BAAmB;YACpE,CAAC,mBAAY,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,wBAAY;YACrD,CAAC,mBAAY,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,yCAAkB;SACnD,CAAC;QACF;;WAEG;QACH,aAAQ,GAAG;YACT,wEAAwE;YACxE,2DAA2D;YAC3D,iBAAO,CAAC,IAAI,CAAC,mBAAY,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,gCAAiB,CAAC;YACzE,qCAAuB,CACrB,6BAAc,EACd,mBAAY,CAAC,wBAAwB,CACtC;YACD,qCAAuB,CACrB,6BAAc,EACd,mBAAY,CAAC,wBAAwB,CACtC;YACD,qCAAuB,CACrB,mCAAoB,EACpB,mBAAY,CAAC,8BAA8B,CAC5C;YACD,qCAAuB,CACrB,+BAAa,EACb,mBAAY,CAAC,uBAAuB,CACrC;YACD,qCAAuB,CACrB,+BAAgB,EAChB,mBAAY,CAAC,0BAA0B,CACxC;YACD,gCAAsB,CAAC,qCAAgB,CAAC;YACxC,gCAAsB,CAAC,iDAAqB,CAAC;SAC9C,CAAC;QACF,YAAO,GAEH;YACF,UAAU,EAAV,wBAAU;SACX,CAAC;QAMA,GAAG,CAAC,IAAI,CAAC,mBAAY,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,0BAAe,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,+BAAkB,EAAE,CAAC;QACrC,sEAAsE;QACtE,UAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,0CAAE,OAAO,EAAE;YAChC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,EAAC,CAAC,CAAC;SAC/D;QACD,GAAG,CAAC,IAAI,CAAC,mBAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;CACF,CAAA;AA5DY,aAAa;IAiDrB,mBAAA,gBAAM,CAAC,mBAAY,CAAC,oBAAoB,CAAC,CAAA;IACzC,mBAAA,gBAAM,CAAC,mBAAY,CAAC,MAAM,CAAC,CAAA;6CADoB,kBAAW;GAjDlD,aAAa,CA4DzB;AA5DY,sCAAa"}
|
package/dist/rest.server.d.ts
CHANGED
|
@@ -383,6 +383,11 @@ export interface OpenApiSpecOptions {
|
|
|
383
383
|
* Set this flag to disable the endpoint for OpenAPI spec
|
|
384
384
|
*/
|
|
385
385
|
disabled?: true;
|
|
386
|
+
/**
|
|
387
|
+
* Set this flag to `false` to disable OAS schema consolidation. If not set,
|
|
388
|
+
* the value defaults to `true`.
|
|
389
|
+
*/
|
|
390
|
+
consolidate?: boolean;
|
|
386
391
|
}
|
|
387
392
|
export interface ApiExplorerOptions {
|
|
388
393
|
/**
|
package/dist/rest.server.js
CHANGED
|
@@ -14,6 +14,7 @@ const cors_1 = tslib_1.__importDefault(require("cors"));
|
|
|
14
14
|
const debug_1 = tslib_1.__importDefault(require("debug"));
|
|
15
15
|
const express_1 = tslib_1.__importDefault(require("express"));
|
|
16
16
|
const js_yaml_1 = require("js-yaml");
|
|
17
|
+
const lodash_1 = require("lodash");
|
|
17
18
|
const strong_error_handler_1 = require("strong-error-handler");
|
|
18
19
|
const body_parsers_1 = require("./body-parsers");
|
|
19
20
|
const http_handler_1 = require("./http-handler");
|
|
@@ -24,11 +25,6 @@ const router_spec_1 = require("./router/router-spec");
|
|
|
24
25
|
const sequence_1 = require("./sequence");
|
|
25
26
|
const debug = debug_1.default('loopback:rest:server');
|
|
26
27
|
const SequenceActions = keys_1.RestBindings.SequenceActions;
|
|
27
|
-
// NOTE(bajtos) we cannot use `import cloneDeep from 'lodash/cloneDeep'
|
|
28
|
-
// because it produces the following TypeScript error:
|
|
29
|
-
// Module '"(...)/node_modules/@types/lodash/cloneDeep/index"' resolves to
|
|
30
|
-
// a non-module entity and cannot be imported using this construct.
|
|
31
|
-
const cloneDeep = require('lodash/cloneDeep');
|
|
32
28
|
/**
|
|
33
29
|
* A REST API server for use with Loopback.
|
|
34
30
|
* Add this server to your application by importing the RestComponent.
|
|
@@ -281,8 +277,8 @@ let RestServer = class RestServer extends context_1.Context {
|
|
|
281
277
|
continue;
|
|
282
278
|
}
|
|
283
279
|
debug('Registering controller %s', controllerName);
|
|
284
|
-
if (apiSpec.components
|
|
285
|
-
this._httpHandler.
|
|
280
|
+
if (apiSpec.components) {
|
|
281
|
+
this._httpHandler.registerApiComponents(apiSpec.components);
|
|
286
282
|
}
|
|
287
283
|
const controllerFactory = router_1.createControllerFactoryForBinding(b.key);
|
|
288
284
|
const routes = router_1.createRoutesForController(apiSpec, ctor, controllerFactory);
|
|
@@ -498,15 +494,14 @@ let RestServer = class RestServer extends context_1.Context {
|
|
|
498
494
|
* in the returned spec
|
|
499
495
|
*/
|
|
500
496
|
async getApiSpec(requestContext) {
|
|
501
|
-
var _a;
|
|
502
497
|
let spec = await this.get(keys_1.RestBindings.API_SPEC);
|
|
503
|
-
const
|
|
498
|
+
const components = this.httpHandler.getApiComponents();
|
|
504
499
|
// Apply deep clone to prevent getApiSpec() callers from
|
|
505
500
|
// accidentally modifying our internal routing data
|
|
506
|
-
spec.paths = cloneDeep(this.httpHandler.describeApiPaths());
|
|
507
|
-
if (
|
|
508
|
-
|
|
509
|
-
spec.components
|
|
501
|
+
spec.paths = lodash_1.cloneDeep(this.httpHandler.describeApiPaths());
|
|
502
|
+
if (components) {
|
|
503
|
+
const defs = lodash_1.cloneDeep(components);
|
|
504
|
+
spec.components = { ...spec.components, ...defs };
|
|
510
505
|
}
|
|
511
506
|
router_spec_1.assignRouterSpec(spec, this._externalRoutes.routerSpec);
|
|
512
507
|
if (requestContext) {
|
|
@@ -720,7 +715,7 @@ const DEFAULT_CONFIG = {
|
|
|
720
715
|
listenOnStart: true,
|
|
721
716
|
};
|
|
722
717
|
function resolveRestServerConfig(config) {
|
|
723
|
-
const result = Object.assign(cloneDeep(DEFAULT_CONFIG), config);
|
|
718
|
+
const result = Object.assign(lodash_1.cloneDeep(DEFAULT_CONFIG), config);
|
|
724
719
|
// Can't check falsiness, 0 is a valid port.
|
|
725
720
|
if (result.port == null) {
|
|
726
721
|
result.port = 3000;
|
|
@@ -732,7 +727,7 @@ function resolveRestServerConfig(config) {
|
|
|
732
727
|
if (!result.openApiSpec.endpointMapping) {
|
|
733
728
|
// mapping may be mutated by addOpenApiSpecEndpoint, be sure that doesn't
|
|
734
729
|
// pollute the default mapping configuration
|
|
735
|
-
result.openApiSpec.endpointMapping = cloneDeep(OPENAPI_SPEC_MAPPING);
|
|
730
|
+
result.openApiSpec.endpointMapping = lodash_1.cloneDeep(OPENAPI_SPEC_MAPPING);
|
|
736
731
|
}
|
|
737
732
|
result.apiExplorer = normalizeApiExplorerConfig(config.apiExplorer);
|
|
738
733
|
if (result.openApiSpec.disabled) {
|
package/dist/rest.server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rest.server.js","sourceRoot":"","sources":["../src/rest.server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rest.server.js","sourceRoot":"","sources":["../src/rest.server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { ApplicationConfig } from '@loopback/core';
|
|
2
|
+
import { OASEnhancer, OpenApiSpec } from '@loopback/openapi-v3';
|
|
3
|
+
/**
|
|
4
|
+
* This enhancer consolidates schemas into `/components/schemas` and replaces
|
|
5
|
+
* instances of said schema with a $ref pointer.
|
|
6
|
+
*
|
|
7
|
+
* Please note that the title property must be set on a schema in order to be
|
|
8
|
+
* considered for consolidation.
|
|
9
|
+
*
|
|
10
|
+
* For example, with the following schema instance:
|
|
11
|
+
*
|
|
12
|
+
* ```json
|
|
13
|
+
* schema: {
|
|
14
|
+
* title: 'loopback.example',
|
|
15
|
+
* properties: {
|
|
16
|
+
* test: {
|
|
17
|
+
* type: 'string',
|
|
18
|
+
* },
|
|
19
|
+
* },
|
|
20
|
+
* }
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* The consolidator will copy the schema body to
|
|
24
|
+
* `/components/schemas/loopback.example` and replace any instance of the schema
|
|
25
|
+
* with a reference to the component schema as follows:
|
|
26
|
+
*
|
|
27
|
+
* ```json
|
|
28
|
+
* schema: {
|
|
29
|
+
* $ref: '#/components/schemas/loopback.example',
|
|
30
|
+
* }
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* When comparing schemas to avoid naming collisions, the description field
|
|
34
|
+
* is ignored.
|
|
35
|
+
*/
|
|
36
|
+
export declare class ConsolidationEnhancer implements OASEnhancer {
|
|
37
|
+
readonly config?: ApplicationConfig | undefined;
|
|
38
|
+
name: string;
|
|
39
|
+
disabled: boolean;
|
|
40
|
+
constructor(config?: ApplicationConfig | undefined);
|
|
41
|
+
modifySpec(spec: OpenApiSpec): OpenApiSpec;
|
|
42
|
+
/**
|
|
43
|
+
* Recursively search OpenApiSpec PathsObject for SchemaObjects with title
|
|
44
|
+
* property. Moves reusable schema bodies to #/components/schemas and replace
|
|
45
|
+
* with json pointer. It handles title collisions with schema body comparision.
|
|
46
|
+
*/
|
|
47
|
+
private consolidateSchemaObjects;
|
|
48
|
+
private recursiveWalk;
|
|
49
|
+
/**
|
|
50
|
+
* Carry out schema consolidation after tree traversal. If 'title' property
|
|
51
|
+
* set then we consider current schema for consolidation. SchemaObjects with
|
|
52
|
+
* properties (and title set) are moved to #/components/schemas/<title> and
|
|
53
|
+
* replaced with ReferenceObject.
|
|
54
|
+
*
|
|
55
|
+
* Features:
|
|
56
|
+
* - name collision protection
|
|
57
|
+
*
|
|
58
|
+
* @param schema - current schema element to process
|
|
59
|
+
* @param parentPath - path object to parent
|
|
60
|
+
* @param spec - subject OpenApi specification
|
|
61
|
+
*/
|
|
62
|
+
private processSchema;
|
|
63
|
+
private getRefSchema;
|
|
64
|
+
private patchRef;
|
|
65
|
+
private patchPath;
|
|
66
|
+
private ifConsolidationCandidate;
|
|
67
|
+
private isTraversable;
|
|
68
|
+
}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright IBM Corp. 2020. All Rights Reserved.
|
|
3
|
+
// Node module: @loopback/rest
|
|
4
|
+
// This file is licensed under the MIT License.
|
|
5
|
+
// License text available at https://opensource.org/licenses/MIT
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const tslib_1 = require("tslib");
|
|
8
|
+
const core_1 = require("@loopback/core");
|
|
9
|
+
const openapi_v3_1 = require("@loopback/openapi-v3");
|
|
10
|
+
const debug_1 = tslib_1.__importDefault(require("debug"));
|
|
11
|
+
const json_schema_compare_1 = tslib_1.__importDefault(require("json-schema-compare"));
|
|
12
|
+
const lodash_1 = tslib_1.__importDefault(require("lodash"));
|
|
13
|
+
const debug = debug_1.default('loopback:openapi:spec-enhancer:consolidate');
|
|
14
|
+
/**
|
|
15
|
+
* This enhancer consolidates schemas into `/components/schemas` and replaces
|
|
16
|
+
* instances of said schema with a $ref pointer.
|
|
17
|
+
*
|
|
18
|
+
* Please note that the title property must be set on a schema in order to be
|
|
19
|
+
* considered for consolidation.
|
|
20
|
+
*
|
|
21
|
+
* For example, with the following schema instance:
|
|
22
|
+
*
|
|
23
|
+
* ```json
|
|
24
|
+
* schema: {
|
|
25
|
+
* title: 'loopback.example',
|
|
26
|
+
* properties: {
|
|
27
|
+
* test: {
|
|
28
|
+
* type: 'string',
|
|
29
|
+
* },
|
|
30
|
+
* },
|
|
31
|
+
* }
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* The consolidator will copy the schema body to
|
|
35
|
+
* `/components/schemas/loopback.example` and replace any instance of the schema
|
|
36
|
+
* with a reference to the component schema as follows:
|
|
37
|
+
*
|
|
38
|
+
* ```json
|
|
39
|
+
* schema: {
|
|
40
|
+
* $ref: '#/components/schemas/loopback.example',
|
|
41
|
+
* }
|
|
42
|
+
* ```
|
|
43
|
+
*
|
|
44
|
+
* When comparing schemas to avoid naming collisions, the description field
|
|
45
|
+
* is ignored.
|
|
46
|
+
*/
|
|
47
|
+
let ConsolidationEnhancer = class ConsolidationEnhancer {
|
|
48
|
+
constructor(config) {
|
|
49
|
+
var _a, _b, _c;
|
|
50
|
+
this.config = config;
|
|
51
|
+
this.name = 'consolidate';
|
|
52
|
+
this.disabled = ((_c = (_b = (_a = this.config) === null || _a === void 0 ? void 0 : _a.rest) === null || _b === void 0 ? void 0 : _b.openApiSpec) === null || _c === void 0 ? void 0 : _c.consolidate) === false;
|
|
53
|
+
}
|
|
54
|
+
modifySpec(spec) {
|
|
55
|
+
return !this.disabled ? this.consolidateSchemaObjects(spec) : spec;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Recursively search OpenApiSpec PathsObject for SchemaObjects with title
|
|
59
|
+
* property. Moves reusable schema bodies to #/components/schemas and replace
|
|
60
|
+
* with json pointer. It handles title collisions with schema body comparision.
|
|
61
|
+
*/
|
|
62
|
+
consolidateSchemaObjects(spec) {
|
|
63
|
+
// use 'paths' as crawl root
|
|
64
|
+
this.recursiveWalk(spec.paths, ['paths'], spec);
|
|
65
|
+
return spec;
|
|
66
|
+
}
|
|
67
|
+
recursiveWalk(rootSchema, parentPath, spec) {
|
|
68
|
+
if (this.isTraversable(rootSchema)) {
|
|
69
|
+
Object.entries(rootSchema).forEach(([key, subSchema]) => {
|
|
70
|
+
if (subSchema) {
|
|
71
|
+
this.recursiveWalk(subSchema, parentPath.concat(key), spec);
|
|
72
|
+
this.processSchema(subSchema, parentPath.concat(key), spec);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Carry out schema consolidation after tree traversal. If 'title' property
|
|
79
|
+
* set then we consider current schema for consolidation. SchemaObjects with
|
|
80
|
+
* properties (and title set) are moved to #/components/schemas/<title> and
|
|
81
|
+
* replaced with ReferenceObject.
|
|
82
|
+
*
|
|
83
|
+
* Features:
|
|
84
|
+
* - name collision protection
|
|
85
|
+
*
|
|
86
|
+
* @param schema - current schema element to process
|
|
87
|
+
* @param parentPath - path object to parent
|
|
88
|
+
* @param spec - subject OpenApi specification
|
|
89
|
+
*/
|
|
90
|
+
processSchema(schema, parentPath, spec) {
|
|
91
|
+
const schemaObj = this.ifConsolidationCandidate(schema);
|
|
92
|
+
if (schemaObj) {
|
|
93
|
+
// name collison protection
|
|
94
|
+
let instanceNo = 1;
|
|
95
|
+
let title = schemaObj.title;
|
|
96
|
+
let refSchema = this.getRefSchema(title, spec);
|
|
97
|
+
while (refSchema &&
|
|
98
|
+
!json_schema_compare_1.default(schemaObj, refSchema, {
|
|
99
|
+
ignore: ['description'],
|
|
100
|
+
})) {
|
|
101
|
+
title = `${schemaObj.title}${instanceNo++}`;
|
|
102
|
+
refSchema = this.getRefSchema(title, spec);
|
|
103
|
+
}
|
|
104
|
+
if (!refSchema) {
|
|
105
|
+
debug('Creating new component $ref with schema %j', schema);
|
|
106
|
+
this.patchRef(title, schema, spec);
|
|
107
|
+
}
|
|
108
|
+
debug('Creating link to $ref %j', title);
|
|
109
|
+
this.patchPath(title, parentPath, spec);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
getRefSchema(name, spec) {
|
|
113
|
+
const schema = lodash_1.default.get(spec, ['components', 'schemas', name]);
|
|
114
|
+
return schema;
|
|
115
|
+
}
|
|
116
|
+
patchRef(name, value, spec) {
|
|
117
|
+
lodash_1.default.set(spec, ['components', 'schemas', name], value);
|
|
118
|
+
}
|
|
119
|
+
patchPath(name, path, spec) {
|
|
120
|
+
const patch = {
|
|
121
|
+
$ref: `#/components/schemas/${name}`,
|
|
122
|
+
};
|
|
123
|
+
lodash_1.default.set(spec, path, patch);
|
|
124
|
+
}
|
|
125
|
+
ifConsolidationCandidate(schema) {
|
|
126
|
+
// use title to discriminate references
|
|
127
|
+
return openapi_v3_1.isSchemaObject(schema) && schema.properties && schema.title
|
|
128
|
+
? schema
|
|
129
|
+
: undefined;
|
|
130
|
+
}
|
|
131
|
+
isTraversable(schema) {
|
|
132
|
+
return schema && typeof schema === 'object' ? true : false;
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
ConsolidationEnhancer = tslib_1.__decorate([
|
|
136
|
+
core_1.bind(openapi_v3_1.asSpecEnhancer, { scope: core_1.BindingScope.SINGLETON }),
|
|
137
|
+
tslib_1.__param(0, core_1.inject(core_1.CoreBindings.APPLICATION_CONFIG, { optional: true })),
|
|
138
|
+
tslib_1.__metadata("design:paramtypes", [Object])
|
|
139
|
+
], ConsolidationEnhancer);
|
|
140
|
+
exports.ConsolidationEnhancer = ConsolidationEnhancer;
|
|
141
|
+
//# sourceMappingURL=consolidate.spec-enhancer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consolidate.spec-enhancer.js","sourceRoot":"","sources":["../../src/spec-enhancers/consolidate.spec-enhancer.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -162,3 +162,25 @@ export declare type OperationArgs = any[];
|
|
|
162
162
|
export declare type OperationRetval = any;
|
|
163
163
|
export declare type GetFromContext = (key: string) => Promise<BoundValue>;
|
|
164
164
|
export declare type BindElement = (key: string) => Binding;
|
|
165
|
+
/**
|
|
166
|
+
* user profile to add in session
|
|
167
|
+
*/
|
|
168
|
+
export interface SessionUserProfile {
|
|
169
|
+
provider: string;
|
|
170
|
+
token: string;
|
|
171
|
+
email: string;
|
|
172
|
+
[attribute: string]: any;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* interface to set variables in user session
|
|
176
|
+
*/
|
|
177
|
+
export interface Session {
|
|
178
|
+
profile: SessionUserProfile;
|
|
179
|
+
[key: string]: any;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* extending express request type with a session field
|
|
183
|
+
*/
|
|
184
|
+
export interface RequestWithSession extends Request {
|
|
185
|
+
session: Session;
|
|
186
|
+
}
|
|
@@ -22,13 +22,20 @@ let AjvFactoryProvider = class AjvFactoryProvider {
|
|
|
22
22
|
value() {
|
|
23
23
|
return options => {
|
|
24
24
|
var _a;
|
|
25
|
-
let validationOptions =
|
|
25
|
+
let validationOptions = {
|
|
26
|
+
...this.options,
|
|
27
|
+
...options,
|
|
28
|
+
};
|
|
26
29
|
// See https://github.com/epoberezkin/ajv#options
|
|
27
|
-
validationOptions =
|
|
30
|
+
validationOptions = {
|
|
31
|
+
allErrors: true,
|
|
32
|
+
jsonPointers: true,
|
|
28
33
|
// nullable: support keyword "nullable" from Open API 3 specification.
|
|
29
|
-
nullable: true,
|
|
34
|
+
nullable: true,
|
|
30
35
|
// Allow OpenAPI spec binary format
|
|
31
|
-
unknownFormats: ['binary']
|
|
36
|
+
unknownFormats: ['binary'],
|
|
37
|
+
...validationOptions,
|
|
38
|
+
};
|
|
32
39
|
debug('AJV options', validationOptions);
|
|
33
40
|
const ajvInst = new ajv_1.default(validationOptions);
|
|
34
41
|
if (validationOptions.ajvKeywords === true) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ajv-factory.provider.js","sourceRoot":"","sources":["../../src/validation/ajv-factory.provider.ts"],"names":[],"mappings":";AAAA,iDAAiD;AACjD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;AAEhE,yCAMwB;AACxB,sDAA0B;AAC1B,0DAAgC;AAChC,kCAA+C;AAO/C,MAAM,KAAK,GAAG,eAAW,CAAC,mBAAmB,CAAC,CAAC;AAE/C,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AAC5C,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AAExC;;GAEG;AAEH,IAAa,kBAAkB,GAA/B,MAAa,kBAAkB;IAC7B,YAKU,UAAwC,EAAE;QAA1C,YAAO,GAAP,OAAO,CAAmC;IACjD,CAAC;IAQJ,KAAK;QACH,OAAO,OAAO,CAAC,EAAE;;YACf,IAAI,iBAAiB,
|
|
1
|
+
{"version":3,"file":"ajv-factory.provider.js","sourceRoot":"","sources":["../../src/validation/ajv-factory.provider.ts"],"names":[],"mappings":";AAAA,iDAAiD;AACjD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;AAEhE,yCAMwB;AACxB,sDAA0B;AAC1B,0DAAgC;AAChC,kCAA+C;AAO/C,MAAM,KAAK,GAAG,eAAW,CAAC,mBAAmB,CAAC,CAAC;AAE/C,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AAC5C,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AAExC;;GAEG;AAEH,IAAa,kBAAkB,GAA/B,MAAa,kBAAkB;IAC7B,YAKU,UAAwC,EAAE;QAA1C,YAAO,GAAP,OAAO,CAAmC;IACjD,CAAC;IAQJ,KAAK;QACH,OAAO,OAAO,CAAC,EAAE;;YACf,IAAI,iBAAiB,GAAiC;gBACpD,GAAG,IAAI,CAAC,OAAO;gBACf,GAAG,OAAO;aACX,CAAC;YACF,iDAAiD;YACjD,iBAAiB,GAAG;gBAClB,SAAS,EAAE,IAAI;gBACf,YAAY,EAAE,IAAI;gBAClB,sEAAsE;gBACtE,QAAQ,EAAE,IAAI;gBACd,mCAAmC;gBACnC,cAAc,EAAE,CAAC,QAAQ,CAAC;gBAC1B,GAAG,iBAAiB;aACrB,CAAC;YAEF,KAAK,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;YACxC,MAAM,OAAO,GAAG,IAAI,aAAO,CAAC,iBAAiB,CAAC,CAAC;YAE/C,IAAI,iBAAiB,CAAC,WAAW,KAAK,IAAI,EAAE;gBAC1C,WAAW,CAAC,OAAO,CAAC,CAAC;aACtB;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE;gBACvD,WAAW,CAAC,OAAO,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAC;aACrD;YAED,IAAI,iBAAiB,CAAC,SAAS,KAAK,IAAI,EAAE;gBACxC,SAAS,CAAC,OAAO,CAAC,CAAC;aACpB;iBAAM,IAAI,OAAA,iBAAiB,CAAC,SAAS,0CAAE,WAAW,MAAK,MAAM,EAAE;gBAC9D,SAAS,CAAC,OAAO,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;aACjD;YAED,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;oBAC9B,KAAK,CAAC,uBAAuB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;oBAC7C,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC5C,CAAC,CAAC,CAAC;aACJ;YAED,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;oBAC5B,KAAK,CAAC,sBAAsB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;oBAC3C,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACzC,CAAC,CAAC,CAAC;aACJ;YACD,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC;IACJ,CAAC;CACF,CAAA;AArDC;IADC,aAAM,CAAC,kBAAW,CAAC,eAAQ,CAAC,WAAW,CAAC,CAAC;;oDACX;AAG/B;IADC,aAAM,CAAC,kBAAW,CAAC,eAAQ,CAAC,UAAU,CAAC,CAAC;;mDACZ;AAblB,kBAAkB;IAD9B,WAAI,CAAC,EAAC,KAAK,EAAE,mBAAY,CAAC,SAAS,EAAC,CAAC;IAGjC,mBAAA,aAAM,CACL,mBAAY,CAAC,2BAA2B,CAAC,YAAY,CAAC,YAAY,CAAC,EACnE,EAAC,QAAQ,EAAE,IAAI,EAAC,CACjB,CAAA;;GALQ,kBAAkB,CA+D9B;AA/DY,gDAAkB"}
|
|
@@ -45,7 +45,7 @@ async function validateRequestBody(body, requestBodySpec, globalSchemas = {}, op
|
|
|
45
45
|
}
|
|
46
46
|
if (!schema)
|
|
47
47
|
return;
|
|
48
|
-
options =
|
|
48
|
+
options = { coerceTypes: !!body.coercionRequired, ...options };
|
|
49
49
|
await validateValueAgainstSchema(body.value, schema, globalSchemas, options);
|
|
50
50
|
}
|
|
51
51
|
exports.validateRequestBody = validateRequestBody;
|
|
@@ -150,9 +150,9 @@ function createValidator(schema, globalSchemas = {}, ajvInst) {
|
|
|
150
150
|
const schemas = {};
|
|
151
151
|
for (const name in globalSchemas) {
|
|
152
152
|
// See https://github.com/strongloop/loopback-next/issues/4939
|
|
153
|
-
schemas[name] =
|
|
153
|
+
schemas[name] = { ...globalSchemas[name], $async: true };
|
|
154
154
|
}
|
|
155
|
-
const schemaWithRef =
|
|
155
|
+
const schemaWithRef = { components: { schemas }, ...jsonSchema };
|
|
156
156
|
// See https://ajv.js.org/#asynchronous-validation for async validation
|
|
157
157
|
schemaWithRef.$async = true;
|
|
158
158
|
return ajvInst.compile(schemaWithRef);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-body.validator.js","sourceRoot":"","sources":["../../src/validation/request-body.validator.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;AAEhE,qDAM8B;AAE9B,0DAAgC;AAChC,4DAAuB;AACvB,wDAAwB;AACxB,0BAA2D;AAE3D,iEAA0D;AAE1D,MAAM,YAAY,GAAG,OAAO,CAAC,gDAAgD,CAAC,CAAC;AAC/E,MAAM,KAAK,GAAG,eAAW,CAAC,0BAA0B,CAAC,CAAC;AAEtD;;;;;;;;;GASG;AACI,KAAK,UAAU,mBAAmB,CACvC,IAAiB,EACjB,eAAmC,EACnC,gBAA+B,EAAE,EACjC,UAAwC,EAAE;IAE1C,MAAM,QAAQ,GAAG,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,QAAQ,CAAC;IAE3C,IAAI,QAAQ,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE;QAClC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CACvB,IAAI,cAAU,CAAC,UAAU,CAAC,0BAA0B,CAAC,EACrD;YACE,IAAI,EAAE,4BAA4B;YAClC,aAAa,EAAE,cAAc;SAC9B,CACF,CAAC;QACF,MAAM,GAAG,CAAC;KACX;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,wBAAwB;IACxB,IAAI,KAAK,CAAC,OAAO,EAAE;QACjB,KAAK,CAAC,sBAAsB,EAAE,cAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC;QACnE,IACE,MAAM;YACN,8BAAiB,CAAC,MAAM,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,EAC/C;YACA,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;YAC9D,KAAK,CAAC,gBAAgB,EAAE,cAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC;SAC1E;KACF;IACD,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,OAAO,
|
|
1
|
+
{"version":3,"file":"request-body.validator.js","sourceRoot":"","sources":["../../src/validation/request-body.validator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loopback/rest",
|
|
3
|
-
"version": "3.2
|
|
3
|
+
"version": "3.3.2",
|
|
4
4
|
"description": "",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=10"
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"scripts": {
|
|
9
9
|
"acceptance": "lb-mocha \"dist/__tests__/acceptance/**/*.js\"",
|
|
10
10
|
"build": "lb-tsc",
|
|
11
|
-
"clean": "lb-clean loopback-rest*.tgz dist
|
|
11
|
+
"clean": "lb-clean loopback-rest*.tgz dist *.tsbuildinfo package",
|
|
12
12
|
"pretest": "npm run build",
|
|
13
13
|
"integration": "lb-mocha \"dist/__tests__/integration/**/*.js\"",
|
|
14
14
|
"test": "lb-mocha \"dist/__tests__/**/*.js\"",
|
|
@@ -19,20 +19,20 @@
|
|
|
19
19
|
"copyright.owner": "IBM Corp.",
|
|
20
20
|
"license": "MIT",
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@loopback/context": "^3.
|
|
23
|
-
"@loopback/core": "^2.2
|
|
24
|
-
"@loopback/http-server": "^2.
|
|
25
|
-
"@loopback/openapi-v3": "^3.
|
|
22
|
+
"@loopback/context": "^3.6.0",
|
|
23
|
+
"@loopback/core": "^2.4.2",
|
|
24
|
+
"@loopback/http-server": "^2.1.2",
|
|
25
|
+
"@loopback/openapi-v3": "^3.3.0",
|
|
26
26
|
"@openapi-contrib/openapi-schema-to-json-schema": "^3.0.0",
|
|
27
27
|
"@types/body-parser": "^1.19.0",
|
|
28
28
|
"@types/cors": "^2.8.6",
|
|
29
|
-
"@types/express": "^4.17.
|
|
30
|
-
"@types/express-serve-static-core": "^4.17.
|
|
29
|
+
"@types/express": "^4.17.6",
|
|
30
|
+
"@types/express-serve-static-core": "^4.17.5",
|
|
31
31
|
"@types/http-errors": "^1.6.3",
|
|
32
32
|
"@types/on-finished": "^2.3.1",
|
|
33
33
|
"@types/serve-static": "1.13.3",
|
|
34
34
|
"@types/type-is": "^1.6.3",
|
|
35
|
-
"ajv": "^6.12.
|
|
35
|
+
"ajv": "^6.12.2",
|
|
36
36
|
"ajv-errors": "^1.0.1",
|
|
37
37
|
"ajv-keywords": "^3.4.1",
|
|
38
38
|
"body-parser": "^1.19.0",
|
|
@@ -41,6 +41,7 @@
|
|
|
41
41
|
"express": "^4.17.1",
|
|
42
42
|
"http-errors": "^1.7.3",
|
|
43
43
|
"js-yaml": "^3.13.1",
|
|
44
|
+
"json-schema-compare": "^0.2.2",
|
|
44
45
|
"lodash": "^4.17.15",
|
|
45
46
|
"on-finished": "^2.3.0",
|
|
46
47
|
"path-to-regexp": "^6.1.0",
|
|
@@ -51,16 +52,17 @@
|
|
|
51
52
|
"validator": "^13.0.0"
|
|
52
53
|
},
|
|
53
54
|
"devDependencies": {
|
|
54
|
-
"@loopback/build": "^5.0
|
|
55
|
-
"@loopback/eslint-config": "^6.0.
|
|
56
|
-
"@loopback/openapi-spec-builder": "^2.
|
|
57
|
-
"@loopback/repository": "^2.
|
|
58
|
-
"@loopback/testlab": "^3.
|
|
55
|
+
"@loopback/build": "^5.3.0",
|
|
56
|
+
"@loopback/eslint-config": "^6.0.5",
|
|
57
|
+
"@loopback/openapi-spec-builder": "^2.1.2",
|
|
58
|
+
"@loopback/repository": "^2.3.0",
|
|
59
|
+
"@loopback/testlab": "^3.1.2",
|
|
59
60
|
"@types/debug": "^4.1.5",
|
|
60
61
|
"@types/js-yaml": "^3.12.3",
|
|
61
|
-
"@types/
|
|
62
|
-
"@types/
|
|
63
|
-
"@types/
|
|
62
|
+
"@types/json-schema-compare": "^0.2.0",
|
|
63
|
+
"@types/lodash": "^4.14.150",
|
|
64
|
+
"@types/multer": "^1.4.3",
|
|
65
|
+
"@types/node": "^10.17.21",
|
|
64
66
|
"@types/on-finished": "^2.3.1",
|
|
65
67
|
"@types/qs": "^6.9.1",
|
|
66
68
|
"multer": "^1.4.2"
|
|
@@ -78,5 +80,5 @@
|
|
|
78
80
|
"url": "https://github.com/strongloop/loopback-next.git",
|
|
79
81
|
"directory": "packages/rest"
|
|
80
82
|
},
|
|
81
|
-
"gitHead": "
|
|
83
|
+
"gitHead": "9ecee6fc8648b8f0999be6c13934d4756e9b0ddc"
|
|
82
84
|
}
|
|
@@ -3,10 +3,11 @@
|
|
|
3
3
|
// This file is licensed under the MIT License.
|
|
4
4
|
// License text available at https://opensource.org/licenses/MIT
|
|
5
5
|
|
|
6
|
-
export * from './types';
|
|
7
6
|
export * from './body-parser';
|
|
7
|
+
export * from './body-parser.helpers';
|
|
8
8
|
export * from './body-parser.json';
|
|
9
|
+
export * from './body-parser.raw';
|
|
10
|
+
export * from './body-parser.stream';
|
|
9
11
|
export * from './body-parser.text';
|
|
10
12
|
export * from './body-parser.urlencoded';
|
|
11
|
-
export * from './
|
|
12
|
-
export * from './body-parser.raw';
|
|
13
|
+
export * from './types';
|
package/src/http-handler.ts
CHANGED
|
@@ -4,7 +4,12 @@
|
|
|
4
4
|
// License text available at https://opensource.org/licenses/MIT
|
|
5
5
|
|
|
6
6
|
import {Context} from '@loopback/context';
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
ComponentsObject,
|
|
9
|
+
ControllerSpec,
|
|
10
|
+
PathObject,
|
|
11
|
+
SchemasObject,
|
|
12
|
+
} from '@loopback/openapi-v3';
|
|
8
13
|
import {RestBindings} from './keys';
|
|
9
14
|
import {RequestContext} from './request-context';
|
|
10
15
|
import {RestServerResolvedConfig} from './rest.server';
|
|
@@ -19,7 +24,10 @@ import {SequenceHandler} from './sequence';
|
|
|
19
24
|
import {Request, Response} from './types';
|
|
20
25
|
|
|
21
26
|
export class HttpHandler {
|
|
22
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Shared OpenAPI spec objects as `components`
|
|
29
|
+
*/
|
|
30
|
+
protected _openApiComponents: ComponentsObject;
|
|
23
31
|
|
|
24
32
|
public handleRequest: (request: Request, response: Response) => Promise<void>;
|
|
25
33
|
|
|
@@ -43,12 +51,35 @@ export class HttpHandler {
|
|
|
43
51
|
this._routes.registerRoute(route);
|
|
44
52
|
}
|
|
45
53
|
|
|
54
|
+
/**
|
|
55
|
+
* @deprecated Use `registerApiComponents`
|
|
56
|
+
* @param defs Schemas
|
|
57
|
+
*/
|
|
46
58
|
registerApiDefinitions(defs: SchemasObject) {
|
|
47
|
-
this.
|
|
59
|
+
this.registerApiComponents({schemas: defs});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Merge components into the OpenApi spec
|
|
64
|
+
* @param defs - Components
|
|
65
|
+
*/
|
|
66
|
+
registerApiComponents(defs: ComponentsObject) {
|
|
67
|
+
this._openApiComponents = this._openApiComponents ?? {};
|
|
68
|
+
for (const p in defs) {
|
|
69
|
+
// Merge each child, such as `schemas`, `parameters`, and `headers`
|
|
70
|
+
this._openApiComponents[p] = {...this._openApiComponents[p], ...defs[p]};
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
getApiComponents() {
|
|
75
|
+
return this._openApiComponents;
|
|
48
76
|
}
|
|
49
77
|
|
|
78
|
+
/**
|
|
79
|
+
* @deprecated Use `getApiComponents`
|
|
80
|
+
*/
|
|
50
81
|
getApiDefinitions() {
|
|
51
|
-
return this.
|
|
82
|
+
return this._openApiComponents?.schemas;
|
|
52
83
|
}
|
|
53
84
|
|
|
54
85
|
describeApiPaths(): PathObject {
|
package/src/rest.component.ts
CHANGED
|
@@ -42,6 +42,7 @@ import {
|
|
|
42
42
|
RestServerConfig,
|
|
43
43
|
} from './rest.server';
|
|
44
44
|
import {DefaultSequence} from './sequence';
|
|
45
|
+
import {ConsolidationEnhancer} from './spec-enhancers/consolidate.spec-enhancer';
|
|
45
46
|
import {InfoSpecEnhancer} from './spec-enhancers/info.spec-enhancer';
|
|
46
47
|
import {AjvFactoryProvider} from './validation/ajv-factory.provider';
|
|
47
48
|
|
|
@@ -85,6 +86,7 @@ export class RestComponent implements Component {
|
|
|
85
86
|
RestBindings.REQUEST_BODY_PARSER_STREAM,
|
|
86
87
|
),
|
|
87
88
|
createBindingFromClass(InfoSpecEnhancer),
|
|
89
|
+
createBindingFromClass(ConsolidationEnhancer),
|
|
88
90
|
];
|
|
89
91
|
servers: {
|
|
90
92
|
[name: string]: Constructor<Server>;
|
package/src/rest.server.ts
CHANGED
|
@@ -35,6 +35,7 @@ import {PathParams} from 'express-serve-static-core';
|
|
|
35
35
|
import {IncomingMessage, ServerResponse} from 'http';
|
|
36
36
|
import {ServerOptions} from 'https';
|
|
37
37
|
import {safeDump} from 'js-yaml';
|
|
38
|
+
import {cloneDeep} from 'lodash';
|
|
38
39
|
import {ServeStaticOptions} from 'serve-static';
|
|
39
40
|
import {writeErrorToResponse} from 'strong-error-handler';
|
|
40
41
|
import {BodyParser, REQUEST_BODY_PARSER_TAG} from './body-parsers';
|
|
@@ -83,12 +84,6 @@ export interface HttpServerLike {
|
|
|
83
84
|
|
|
84
85
|
const SequenceActions = RestBindings.SequenceActions;
|
|
85
86
|
|
|
86
|
-
// NOTE(bajtos) we cannot use `import cloneDeep from 'lodash/cloneDeep'
|
|
87
|
-
// because it produces the following TypeScript error:
|
|
88
|
-
// Module '"(...)/node_modules/@types/lodash/cloneDeep/index"' resolves to
|
|
89
|
-
// a non-module entity and cannot be imported using this construct.
|
|
90
|
-
const cloneDeep: <T>(value: T) => T = require('lodash/cloneDeep');
|
|
91
|
-
|
|
92
87
|
/**
|
|
93
88
|
* A REST API server for use with Loopback.
|
|
94
89
|
* Add this server to your application by importing the RestComponent.
|
|
@@ -421,8 +416,8 @@ export class RestServer extends Context implements Server, HttpServerLike {
|
|
|
421
416
|
}
|
|
422
417
|
|
|
423
418
|
debug('Registering controller %s', controllerName);
|
|
424
|
-
if (apiSpec.components
|
|
425
|
-
this._httpHandler.
|
|
419
|
+
if (apiSpec.components) {
|
|
420
|
+
this._httpHandler.registerApiComponents(apiSpec.components);
|
|
426
421
|
}
|
|
427
422
|
const controllerFactory = createControllerFactoryForBinding(b.key);
|
|
428
423
|
const routes = createRoutesForController(
|
|
@@ -798,14 +793,14 @@ export class RestServer extends Context implements Server, HttpServerLike {
|
|
|
798
793
|
*/
|
|
799
794
|
async getApiSpec(requestContext?: RequestContext): Promise<OpenApiSpec> {
|
|
800
795
|
let spec = await this.get<OpenApiSpec>(RestBindings.API_SPEC);
|
|
801
|
-
const
|
|
796
|
+
const components = this.httpHandler.getApiComponents();
|
|
802
797
|
|
|
803
798
|
// Apply deep clone to prevent getApiSpec() callers from
|
|
804
799
|
// accidentally modifying our internal routing data
|
|
805
800
|
spec.paths = cloneDeep(this.httpHandler.describeApiPaths());
|
|
806
|
-
if (
|
|
807
|
-
|
|
808
|
-
spec.components
|
|
801
|
+
if (components) {
|
|
802
|
+
const defs = cloneDeep(components);
|
|
803
|
+
spec.components = {...spec.components, ...defs};
|
|
809
804
|
}
|
|
810
805
|
|
|
811
806
|
assignRouterSpec(spec, this._externalRoutes.routerSpec);
|
|
@@ -1066,6 +1061,12 @@ export interface OpenApiSpecOptions {
|
|
|
1066
1061
|
* Set this flag to disable the endpoint for OpenAPI spec
|
|
1067
1062
|
*/
|
|
1068
1063
|
disabled?: true;
|
|
1064
|
+
|
|
1065
|
+
/**
|
|
1066
|
+
* Set this flag to `false` to disable OAS schema consolidation. If not set,
|
|
1067
|
+
* the value defaults to `true`.
|
|
1068
|
+
*/
|
|
1069
|
+
consolidate?: boolean;
|
|
1069
1070
|
}
|
|
1070
1071
|
|
|
1071
1072
|
export interface ApiExplorerOptions {
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
// Copyright IBM Corp. 2020. All Rights Reserved.
|
|
2
|
+
// Node module: @loopback/rest
|
|
3
|
+
// This file is licensed under the MIT License.
|
|
4
|
+
// License text available at https://opensource.org/licenses/MIT
|
|
5
|
+
|
|
6
|
+
import {
|
|
7
|
+
ApplicationConfig,
|
|
8
|
+
bind,
|
|
9
|
+
BindingScope,
|
|
10
|
+
CoreBindings,
|
|
11
|
+
inject,
|
|
12
|
+
} from '@loopback/core';
|
|
13
|
+
import {
|
|
14
|
+
asSpecEnhancer,
|
|
15
|
+
ISpecificationExtension,
|
|
16
|
+
isSchemaObject,
|
|
17
|
+
OASEnhancer,
|
|
18
|
+
OpenApiSpec,
|
|
19
|
+
ReferenceObject,
|
|
20
|
+
SchemaObject,
|
|
21
|
+
} from '@loopback/openapi-v3';
|
|
22
|
+
import debugFactory from 'debug';
|
|
23
|
+
import compare from 'json-schema-compare';
|
|
24
|
+
import _ from 'lodash';
|
|
25
|
+
|
|
26
|
+
const debug = debugFactory('loopback:openapi:spec-enhancer:consolidate');
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* This enhancer consolidates schemas into `/components/schemas` and replaces
|
|
30
|
+
* instances of said schema with a $ref pointer.
|
|
31
|
+
*
|
|
32
|
+
* Please note that the title property must be set on a schema in order to be
|
|
33
|
+
* considered for consolidation.
|
|
34
|
+
*
|
|
35
|
+
* For example, with the following schema instance:
|
|
36
|
+
*
|
|
37
|
+
* ```json
|
|
38
|
+
* schema: {
|
|
39
|
+
* title: 'loopback.example',
|
|
40
|
+
* properties: {
|
|
41
|
+
* test: {
|
|
42
|
+
* type: 'string',
|
|
43
|
+
* },
|
|
44
|
+
* },
|
|
45
|
+
* }
|
|
46
|
+
* ```
|
|
47
|
+
*
|
|
48
|
+
* The consolidator will copy the schema body to
|
|
49
|
+
* `/components/schemas/loopback.example` and replace any instance of the schema
|
|
50
|
+
* with a reference to the component schema as follows:
|
|
51
|
+
*
|
|
52
|
+
* ```json
|
|
53
|
+
* schema: {
|
|
54
|
+
* $ref: '#/components/schemas/loopback.example',
|
|
55
|
+
* }
|
|
56
|
+
* ```
|
|
57
|
+
*
|
|
58
|
+
* When comparing schemas to avoid naming collisions, the description field
|
|
59
|
+
* is ignored.
|
|
60
|
+
*/
|
|
61
|
+
@bind(asSpecEnhancer, {scope: BindingScope.SINGLETON})
|
|
62
|
+
export class ConsolidationEnhancer implements OASEnhancer {
|
|
63
|
+
name = 'consolidate';
|
|
64
|
+
disabled: boolean;
|
|
65
|
+
|
|
66
|
+
constructor(
|
|
67
|
+
@inject(CoreBindings.APPLICATION_CONFIG, {optional: true})
|
|
68
|
+
readonly config?: ApplicationConfig,
|
|
69
|
+
) {
|
|
70
|
+
this.disabled = this.config?.rest?.openApiSpec?.consolidate === false;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
modifySpec(spec: OpenApiSpec): OpenApiSpec {
|
|
74
|
+
return !this.disabled ? this.consolidateSchemaObjects(spec) : spec;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Recursively search OpenApiSpec PathsObject for SchemaObjects with title
|
|
79
|
+
* property. Moves reusable schema bodies to #/components/schemas and replace
|
|
80
|
+
* with json pointer. It handles title collisions with schema body comparision.
|
|
81
|
+
*/
|
|
82
|
+
private consolidateSchemaObjects(spec: OpenApiSpec): OpenApiSpec {
|
|
83
|
+
// use 'paths' as crawl root
|
|
84
|
+
this.recursiveWalk(spec.paths, ['paths'], spec);
|
|
85
|
+
|
|
86
|
+
return spec;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
private recursiveWalk(
|
|
90
|
+
rootSchema: ISpecificationExtension,
|
|
91
|
+
parentPath: Array<string>,
|
|
92
|
+
spec: OpenApiSpec,
|
|
93
|
+
) {
|
|
94
|
+
if (this.isTraversable(rootSchema)) {
|
|
95
|
+
Object.entries(rootSchema).forEach(([key, subSchema]) => {
|
|
96
|
+
if (subSchema) {
|
|
97
|
+
this.recursiveWalk(subSchema, parentPath.concat(key), spec);
|
|
98
|
+
this.processSchema(subSchema, parentPath.concat(key), spec);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Carry out schema consolidation after tree traversal. If 'title' property
|
|
106
|
+
* set then we consider current schema for consolidation. SchemaObjects with
|
|
107
|
+
* properties (and title set) are moved to #/components/schemas/<title> and
|
|
108
|
+
* replaced with ReferenceObject.
|
|
109
|
+
*
|
|
110
|
+
* Features:
|
|
111
|
+
* - name collision protection
|
|
112
|
+
*
|
|
113
|
+
* @param schema - current schema element to process
|
|
114
|
+
* @param parentPath - path object to parent
|
|
115
|
+
* @param spec - subject OpenApi specification
|
|
116
|
+
*/
|
|
117
|
+
private processSchema(
|
|
118
|
+
schema: SchemaObject | ReferenceObject,
|
|
119
|
+
parentPath: Array<string>,
|
|
120
|
+
spec: OpenApiSpec,
|
|
121
|
+
) {
|
|
122
|
+
const schemaObj = this.ifConsolidationCandidate(schema);
|
|
123
|
+
if (schemaObj) {
|
|
124
|
+
// name collison protection
|
|
125
|
+
let instanceNo = 1;
|
|
126
|
+
let title = schemaObj.title!;
|
|
127
|
+
let refSchema = this.getRefSchema(title, spec);
|
|
128
|
+
while (
|
|
129
|
+
refSchema &&
|
|
130
|
+
!compare(schemaObj as ISpecificationExtension, refSchema, {
|
|
131
|
+
ignore: ['description'],
|
|
132
|
+
})
|
|
133
|
+
) {
|
|
134
|
+
title = `${schemaObj.title}${instanceNo++}`;
|
|
135
|
+
refSchema = this.getRefSchema(title, spec);
|
|
136
|
+
}
|
|
137
|
+
if (!refSchema) {
|
|
138
|
+
debug('Creating new component $ref with schema %j', schema);
|
|
139
|
+
this.patchRef(title, schema, spec);
|
|
140
|
+
}
|
|
141
|
+
debug('Creating link to $ref %j', title);
|
|
142
|
+
this.patchPath(title, parentPath, spec);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
private getRefSchema(
|
|
147
|
+
name: string,
|
|
148
|
+
spec: OpenApiSpec,
|
|
149
|
+
): ISpecificationExtension | undefined {
|
|
150
|
+
const schema = _.get(spec, ['components', 'schemas', name]);
|
|
151
|
+
|
|
152
|
+
return schema;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
private patchRef(
|
|
156
|
+
name: string,
|
|
157
|
+
value: ISpecificationExtension,
|
|
158
|
+
spec: OpenApiSpec,
|
|
159
|
+
) {
|
|
160
|
+
_.set(spec, ['components', 'schemas', name], value);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
private patchPath(name: string, path: Array<string>, spec: OpenApiSpec) {
|
|
164
|
+
const patch = {
|
|
165
|
+
$ref: `#/components/schemas/${name}`,
|
|
166
|
+
};
|
|
167
|
+
_.set(spec, path, patch);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
private ifConsolidationCandidate(
|
|
171
|
+
schema: SchemaObject | ReferenceObject,
|
|
172
|
+
): SchemaObject | undefined {
|
|
173
|
+
// use title to discriminate references
|
|
174
|
+
return isSchemaObject(schema) && schema.properties && schema.title
|
|
175
|
+
? schema
|
|
176
|
+
: undefined;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
private isTraversable(schema: ISpecificationExtension): boolean {
|
|
180
|
+
return schema && typeof schema === 'object' ? true : false;
|
|
181
|
+
}
|
|
182
|
+
}
|
package/src/types.ts
CHANGED
|
@@ -199,3 +199,28 @@ export type OperationRetval = any;
|
|
|
199
199
|
|
|
200
200
|
export type GetFromContext = (key: string) => Promise<BoundValue>;
|
|
201
201
|
export type BindElement = (key: string) => Binding;
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* user profile to add in session
|
|
205
|
+
*/
|
|
206
|
+
export interface SessionUserProfile {
|
|
207
|
+
provider: string;
|
|
208
|
+
token: string;
|
|
209
|
+
email: string;
|
|
210
|
+
[attribute: string]: any;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* interface to set variables in user session
|
|
215
|
+
*/
|
|
216
|
+
export interface Session {
|
|
217
|
+
profile: SessionUserProfile;
|
|
218
|
+
[key: string]: any;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* extending express request type with a session field
|
|
223
|
+
*/
|
|
224
|
+
export interface RequestWithSession extends Request {
|
|
225
|
+
session: Session;
|
|
226
|
+
}
|