@smartlyio/oats-runtime 4.0.2 → 4.0.3
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/client.d.ts +43 -0
- package/dist/client.js +131 -0
- package/dist/client.js.map +1 -0
- package/dist/make.d.ts +123 -0
- package/dist/make.js +645 -0
- package/dist/make.js.map +1 -0
- package/dist/reflection-type.d.ts +93 -0
- package/dist/reflection-type.js +198 -0
- package/dist/reflection-type.js.map +1 -0
- package/dist/runtime.d.ts +35 -0
- package/dist/runtime.js +172 -0
- package/dist/runtime.js.map +1 -0
- package/dist/server.d.ts +84 -0
- package/dist/server.js +123 -0
- package/dist/server.js.map +1 -0
- package/dist/union-discriminator.d.ts +26 -0
- package/dist/union-discriminator.js +116 -0
- package/dist/union-discriminator.js.map +1 -0
- package/dist/value-class.d.ts +14 -0
- package/dist/value-class.js +29 -0
- package/dist/value-class.js.map +1 -0
- package/package.json +2 -2
package/dist/server.js
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createHandlerFactory = exports.assertMethod = exports.supportedMethods = exports.safe = exports.ResponseValidationError = exports.RequestValidationError = void 0;
|
|
4
|
+
const assert = require("assert");
|
|
5
|
+
const safe_navigation_1 = require("@smartlyio/safe-navigation");
|
|
6
|
+
const make_1 = require("./make");
|
|
7
|
+
class RequestValidationError extends Error {
|
|
8
|
+
constructor(tag, errors) {
|
|
9
|
+
super('invalid request ' + tag + ' ' + errors.map(make_1.validationErrorPrinter).join('\n'));
|
|
10
|
+
this.tag = tag;
|
|
11
|
+
this.errors = errors;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.RequestValidationError = RequestValidationError;
|
|
15
|
+
class ResponseValidationError extends Error {
|
|
16
|
+
constructor(tag, originalResponse, errors) {
|
|
17
|
+
super('invalid response ' + tag + ' ' + errors.map(make_1.validationErrorPrinter).join('\n'));
|
|
18
|
+
this.tag = tag;
|
|
19
|
+
this.originalResponse = originalResponse;
|
|
20
|
+
this.errors = errors;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.ResponseValidationError = ResponseValidationError;
|
|
24
|
+
function throwRequestValidationError(tag, e) {
|
|
25
|
+
throw new RequestValidationError(tag, e.errors);
|
|
26
|
+
}
|
|
27
|
+
function throwResponseValidationError(tag, originalValue, e) {
|
|
28
|
+
throw new ResponseValidationError(tag, originalValue, e.errors);
|
|
29
|
+
}
|
|
30
|
+
function lowercaseObject(o) {
|
|
31
|
+
if (o == null) {
|
|
32
|
+
return o;
|
|
33
|
+
}
|
|
34
|
+
const result = {};
|
|
35
|
+
for (const key of Object.keys(o)) {
|
|
36
|
+
result[key.toLowerCase()] = o[key];
|
|
37
|
+
}
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
function voidify(value) {
|
|
41
|
+
if (value && Object.keys(value).length > 0) {
|
|
42
|
+
return value;
|
|
43
|
+
}
|
|
44
|
+
if (value && Array.isArray(value)) {
|
|
45
|
+
return value;
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
function cleanHeaders(maker, headers) {
|
|
50
|
+
const normalized = voidify(lowercaseObject(headers));
|
|
51
|
+
const acceptsNull = maker(null);
|
|
52
|
+
if (acceptsNull.isSuccess()) {
|
|
53
|
+
return acceptsNull.success();
|
|
54
|
+
}
|
|
55
|
+
return maker(normalized, {
|
|
56
|
+
unknownField: 'drop'
|
|
57
|
+
}).success(throwRequestValidationError.bind(null, 'headers'));
|
|
58
|
+
}
|
|
59
|
+
function safe(headers, params, query, body, response, endpoint, { validationOptions = {} } = {}) {
|
|
60
|
+
return async (ctx) => {
|
|
61
|
+
const result = await endpoint({
|
|
62
|
+
path: ctx.path,
|
|
63
|
+
method: ctx.method,
|
|
64
|
+
servers: ctx.servers,
|
|
65
|
+
op: ctx.op,
|
|
66
|
+
headers: cleanHeaders(headers, ctx.headers),
|
|
67
|
+
params: params(voidify(ctx.params), validationOptions.params).success(throwRequestValidationError.bind(null, 'params')),
|
|
68
|
+
query: query(ctx.query || {}, validationOptions.query).success(throwRequestValidationError.bind(null, 'query')),
|
|
69
|
+
body: body(voidify(ctx.body)).success(throwRequestValidationError.bind(null, 'body')),
|
|
70
|
+
requestContext: ctx.requestContext
|
|
71
|
+
});
|
|
72
|
+
return response(result).success(throwResponseValidationError.bind(null, `body ${ctx.path}`, result.value.value));
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
exports.safe = safe;
|
|
76
|
+
exports.supportedMethods = [
|
|
77
|
+
'get',
|
|
78
|
+
'post',
|
|
79
|
+
'head',
|
|
80
|
+
'put',
|
|
81
|
+
'patch',
|
|
82
|
+
'options',
|
|
83
|
+
'delete'
|
|
84
|
+
];
|
|
85
|
+
function createTree(handlers) {
|
|
86
|
+
return handlers.reduce((memo, element) => {
|
|
87
|
+
if (!memo[element.path]) {
|
|
88
|
+
memo[element.path] = {};
|
|
89
|
+
}
|
|
90
|
+
memo[element.path][element.method] = {
|
|
91
|
+
safeHandler: (e, opts) => safe(element.headers, element.params, element.query, element.body, element.response, e, opts),
|
|
92
|
+
op: element.op,
|
|
93
|
+
servers: element.servers
|
|
94
|
+
};
|
|
95
|
+
return memo;
|
|
96
|
+
}, {});
|
|
97
|
+
}
|
|
98
|
+
function assertMethod(method) {
|
|
99
|
+
assert(exports.supportedMethods.indexOf(method) >= 0, 'unsupported method name ' + method);
|
|
100
|
+
return method;
|
|
101
|
+
}
|
|
102
|
+
exports.assertMethod = assertMethod;
|
|
103
|
+
function createHandlerFactory(handlers, opts) {
|
|
104
|
+
const tree = createTree(handlers);
|
|
105
|
+
return (adapter) => {
|
|
106
|
+
return (spec) => {
|
|
107
|
+
Object.keys(spec).forEach(path => {
|
|
108
|
+
const endpoint = spec[path];
|
|
109
|
+
Object.keys(endpoint).forEach(method => {
|
|
110
|
+
const methodHandler = endpoint[method];
|
|
111
|
+
const endpointWrapper = (0, safe_navigation_1.default)(tree)[path][method].$;
|
|
112
|
+
if (!endpointWrapper) {
|
|
113
|
+
assert.fail('unknown endpoint ' + method.toUpperCase() + ' ' + path);
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
adapter(path, endpointWrapper.op, assertMethod(method), endpointWrapper.safeHandler(methodHandler, opts), endpointWrapper.servers);
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
};
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
exports.createHandlerFactory = createHandlerFactory;
|
|
123
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Type } from './reflection-type';
|
|
2
|
+
export declare function intersectMap(a: Map<string, any>, b: Map<string, any>): Map<string, any>;
|
|
3
|
+
export declare function getTags(type: Type): Map<string, unknown[]>;
|
|
4
|
+
export interface TypeTags {
|
|
5
|
+
/** type definition*/
|
|
6
|
+
type: Type;
|
|
7
|
+
/** possible type tags with values from the type */
|
|
8
|
+
tags: Map<string, unknown[]>;
|
|
9
|
+
}
|
|
10
|
+
export interface Differentator {
|
|
11
|
+
/** property key that is used for discriminating the types*/
|
|
12
|
+
key: string;
|
|
13
|
+
/** map from object[key] values to type definitions */
|
|
14
|
+
map: Map<unknown, Type>;
|
|
15
|
+
}
|
|
16
|
+
export declare function differentator(types: TypeTags[]): Differentator | null;
|
|
17
|
+
export interface UnionDiscriminator {
|
|
18
|
+
/** map from type tag prop values to types
|
|
19
|
+
* if there is no best discriminator property return null
|
|
20
|
+
* and return all types in the undiscriminated list
|
|
21
|
+
* */
|
|
22
|
+
discriminator: Differentator | null;
|
|
23
|
+
/** non discriminated types */
|
|
24
|
+
undiscriminated: Type[];
|
|
25
|
+
}
|
|
26
|
+
export declare function discriminateUnion(types: Type[]): UnionDiscriminator;
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.discriminateUnion = exports.differentator = exports.getTags = exports.intersectMap = void 0;
|
|
4
|
+
function intersectMap(a, b) {
|
|
5
|
+
const result = new Map();
|
|
6
|
+
for (const [key, values] of a) {
|
|
7
|
+
const gots = b.get(key);
|
|
8
|
+
if (gots && values && arrayEq(gots, values)) {
|
|
9
|
+
result.set(key, values);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
return result;
|
|
13
|
+
}
|
|
14
|
+
exports.intersectMap = intersectMap;
|
|
15
|
+
function arrayEq(a, b) {
|
|
16
|
+
if (a.length !== b.length) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
for (let i = 0; i < a.length; i++) {
|
|
20
|
+
if (a[i] !== b[i]) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
function getTags(type) {
|
|
27
|
+
const root = rootType(type);
|
|
28
|
+
if (root.type === 'object') {
|
|
29
|
+
const values = Object.entries(root.properties).flatMap(([key, prop]) => {
|
|
30
|
+
if (prop.required) {
|
|
31
|
+
const tags = typeTag(rootType(prop.value));
|
|
32
|
+
if (tags.length) {
|
|
33
|
+
return [[key, tags.sort()]];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return [];
|
|
37
|
+
});
|
|
38
|
+
return new Map(values);
|
|
39
|
+
}
|
|
40
|
+
if (root.type === 'union') {
|
|
41
|
+
const [fst, ...rest] = root.options.map(getTags);
|
|
42
|
+
if (!fst) {
|
|
43
|
+
return new Map();
|
|
44
|
+
}
|
|
45
|
+
return rest.reduce((memo, r) => intersectMap(memo, r), fst);
|
|
46
|
+
}
|
|
47
|
+
return new Map();
|
|
48
|
+
}
|
|
49
|
+
exports.getTags = getTags;
|
|
50
|
+
function rootType(type) {
|
|
51
|
+
if (type.type === 'named') {
|
|
52
|
+
return rootType(type.reference().definition);
|
|
53
|
+
}
|
|
54
|
+
return type;
|
|
55
|
+
}
|
|
56
|
+
function typeTag(v) {
|
|
57
|
+
if (v.type === 'named') {
|
|
58
|
+
return typeTag(v.reference().definition);
|
|
59
|
+
}
|
|
60
|
+
if (v.type === 'string' || v.type === 'boolean' || v.type === 'number' || v.type === 'integer') {
|
|
61
|
+
if (v.enum) {
|
|
62
|
+
return v.enum;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return [];
|
|
66
|
+
}
|
|
67
|
+
function discriminators(candidates, type) {
|
|
68
|
+
const invalid = new Set();
|
|
69
|
+
for (const [key, tags] of candidates) {
|
|
70
|
+
const tagValues = type.tags.get(key);
|
|
71
|
+
if (tagValues && tagValues.length > 0) {
|
|
72
|
+
for (const tagValue of tagValues) {
|
|
73
|
+
if (!tags.has(tagValue)) {
|
|
74
|
+
tags.set(tagValue, type.type);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
invalid.add(key);
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
invalid.add(key);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
for (const key of invalid.keys()) {
|
|
87
|
+
candidates.delete(key);
|
|
88
|
+
}
|
|
89
|
+
return candidates;
|
|
90
|
+
}
|
|
91
|
+
function differentator(types) {
|
|
92
|
+
const fst = types[0];
|
|
93
|
+
if (!fst) {
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
const init = new Map([...fst.tags.keys()].map(key => [key, new Map()]));
|
|
97
|
+
const discs = types.reduce((memo, type) => discriminators(memo, type), init);
|
|
98
|
+
const [found] = discs.entries();
|
|
99
|
+
if (!found || found[1].size === 0) {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
return { key: found[0], map: found[1] };
|
|
103
|
+
}
|
|
104
|
+
exports.differentator = differentator;
|
|
105
|
+
function discriminateUnion(types) {
|
|
106
|
+
const tagged = types.map(type => ({ tags: getTags(type), type }));
|
|
107
|
+
const withTag = tagged.filter(tags => tags.tags.size > 0);
|
|
108
|
+
const undiscriminated = tagged.filter(tags => tags.tags.size === 0);
|
|
109
|
+
const discriminator = differentator(withTag);
|
|
110
|
+
if (!discriminator) {
|
|
111
|
+
return { discriminator: null, undiscriminated: types };
|
|
112
|
+
}
|
|
113
|
+
return { discriminator, undiscriminated: undiscriminated.map(u => u.type) };
|
|
114
|
+
}
|
|
115
|
+
exports.discriminateUnion = discriminateUnion;
|
|
116
|
+
//# sourceMappingURL=union-discriminator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"union-discriminator.js","sourceRoot":"","sources":["../src/union-discriminator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { NamedTypeDefinitionDeferred } from './reflection-type';
|
|
2
|
+
import { ShapeOf } from './runtime';
|
|
3
|
+
export declare class ValueClass {
|
|
4
|
+
static reflection: NamedTypeDefinitionDeferred<ValueClass>;
|
|
5
|
+
}
|
|
6
|
+
declare type WritableArray<T> = Array<Writable<T>>;
|
|
7
|
+
declare type Fun = (...a: any[]) => any;
|
|
8
|
+
declare type WritableObject<T> = {
|
|
9
|
+
-readonly [P in keyof T]: Writable<T[P]>;
|
|
10
|
+
};
|
|
11
|
+
export declare type Writable<T> = T extends ReadonlyArray<infer R> ? WritableArray<R> : T extends Fun ? T : T extends object ? WritableObject<T> : T;
|
|
12
|
+
export declare function toJSON<Cls>(value: Cls): Cls extends ValueClass ? Writable<ShapeOf<Cls>> : never;
|
|
13
|
+
export declare function toShape<Cls>(value: Cls): Cls extends ValueClass ? ShapeOf<Cls> : never;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toShape = exports.toJSON = exports.ValueClass = void 0;
|
|
4
|
+
function asPlainObject(value) {
|
|
5
|
+
if (Array.isArray(value)) {
|
|
6
|
+
return value.map(asPlainObject);
|
|
7
|
+
}
|
|
8
|
+
if (value && typeof value === 'object') {
|
|
9
|
+
return Object.keys(value).reduce((memo, key) => {
|
|
10
|
+
memo[key] = asPlainObject(value[key]);
|
|
11
|
+
return memo;
|
|
12
|
+
}, {});
|
|
13
|
+
}
|
|
14
|
+
return value;
|
|
15
|
+
}
|
|
16
|
+
class ValueClass {
|
|
17
|
+
}
|
|
18
|
+
exports.ValueClass = ValueClass;
|
|
19
|
+
function toJSON(value) {
|
|
20
|
+
return toShape(value);
|
|
21
|
+
}
|
|
22
|
+
exports.toJSON = toJSON;
|
|
23
|
+
function toShape(value) {
|
|
24
|
+
// we cant use _.cloneDeep as that copies the instance allowing a surprising way to
|
|
25
|
+
// create proof carrying objects that do not respect the class constraints
|
|
26
|
+
return asPlainObject(value); // how to say that 'this' is the extending class
|
|
27
|
+
}
|
|
28
|
+
exports.toShape = toShape;
|
|
29
|
+
//# sourceMappingURL=value-class.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"value-class.js","sourceRoot":"","sources":["../src/value-class.ts"],"names":[],"mappings":";;;AAGA,SAAS,aAAa,CAAC,KAAU;IAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACxB,OAAO,KAAK,CAAC,GAAG,CAAC,aAAa,CAAQ,CAAC;KACxC;IACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QACtC,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YAC5C,IAAY,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/C,OAAO,IAAW,CAAC;QACrB,CAAC,EAAE,EAAE,CAAC,CAAC;KACR;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAa,UAAU;CAEtB;AAFD,gCAEC;AAcD,SAAgB,MAAM,CAAM,KAAU;IACpC,OAAO,OAAO,CAAC,KAAK,CAAQ,CAAC;AAC/B,CAAC;AAFD,wBAEC;AAED,SAAgB,OAAO,CAAM,KAAU;IACrC,mFAAmF;IACnF,0EAA0E;IAC1E,OAAO,aAAa,CAAC,KAAY,CAAC,CAAC,CAAC,gDAAgD;AACtF,CAAC;AAJD,0BAIC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@smartlyio/oats-runtime",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.3",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Runtime for Oats a Openapi3 based generator for typescript aware servers and clients",
|
|
6
6
|
"private": false,
|
|
@@ -47,5 +47,5 @@
|
|
|
47
47
|
"tsconfig-paths": "3.12.0",
|
|
48
48
|
"typescript": "4.5.4"
|
|
49
49
|
},
|
|
50
|
-
"gitHead": "
|
|
50
|
+
"gitHead": "5897af3aa6bea0c602978a10816c577a6b051c90"
|
|
51
51
|
}
|