@trayio/tray-openapi 5.34.0 → 5.35.0-unstable.fd7158a
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/OpenApiCodecs.d.ts +207 -4
- package/dist/OpenApiCodecs.d.ts.map +1 -1
- package/dist/OpenApiCodecs.js +3 -3
- package/dist/OpenApiSchemaImporter.d.ts +2 -2
- package/dist/OpenApiSchemaImporter.d.ts.map +1 -1
- package/dist/OpenApiSchemaImporter.js +33 -55
- package/dist/OpenApiSchemaImporter.unit.test.js +24 -13
- package/dist/OpenApiSchemaTransformer.d.ts +2 -2
- package/dist/OpenApiSchemaTransformer.d.ts.map +1 -1
- package/dist/OpenApiSchemaTransformer.js +2 -25
- package/dist/OpenApiSchemaTransformer.unit.test.js +30 -44
- package/dist/OpenApiTypeDescriptors.d.ts +389 -32
- package/dist/OpenApiTypeDescriptors.d.ts.map +1 -1
- package/dist/OpenApiTypeDescriptors.js +80 -109
- package/dist/file-generators/GenerateHandler.d.ts +2 -2
- package/dist/file-generators/GenerateHandler.d.ts.map +1 -1
- package/dist/file-generators/GenerateHandler.js +75 -78
- package/dist/file-generators/GenerateHandler.unit.test.js +73 -97
- package/dist/file-generators/GenerateHandlerTest.d.ts +2 -2
- package/dist/file-generators/GenerateHandlerTest.d.ts.map +1 -1
- package/dist/file-generators/GenerateHandlerTest.js +69 -76
- package/dist/file-generators/GenerateHandlerTest.unit.test.js +206 -230
- package/dist/file-generators/GenerateOperationJson.d.ts +2 -2
- package/dist/file-generators/GenerateOperationJson.d.ts.map +1 -1
- package/dist/file-generators/GenerateOperationJson.js +4 -29
- package/dist/file-generators/GenerateOperationJson.unit.test.js +25 -49
- package/dist/file-generators/SchemaGenerator.d.ts.map +1 -1
- package/dist/file-generators/SchemaGenerator.js +14 -37
- package/dist/file-generators/types/GenerateInputSchema.d.ts +2 -2
- package/dist/file-generators/types/GenerateInputSchema.d.ts.map +1 -1
- package/dist/file-generators/types/GenerateInputSchema.js +88 -95
- package/dist/file-generators/types/GenerateInputSchema.test.js +60 -91
- package/dist/file-generators/types/GenerateInputType.test.js +143 -169
- package/dist/file-generators/types/GenerateInputTypes.d.ts +2 -2
- package/dist/file-generators/types/GenerateInputTypes.d.ts.map +1 -1
- package/dist/file-generators/types/GenerateInputTypes.js +7 -28
- package/dist/file-generators/types/GenerateOutput.d.ts +4 -6
- package/dist/file-generators/types/GenerateOutput.d.ts.map +1 -1
- package/dist/file-generators/types/GenerateOutput.js +46 -57
- package/dist/file-generators/types/GenerateOutput.test.js +35 -62
- package/package.json +6 -8
|
@@ -1,41 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
3
|
exports.generateOperationJson = void 0;
|
|
27
|
-
const
|
|
28
|
-
const O = __importStar(require("fp-ts/Option"));
|
|
29
|
-
const function_1 = require("fp-ts/function");
|
|
4
|
+
const effect_1 = require("effect");
|
|
30
5
|
const lodash_1 = require("lodash");
|
|
31
6
|
const generateOperationJson = (operationName, path) => {
|
|
32
|
-
const operationDescription =
|
|
7
|
+
const operationDescription = effect_1.Option.getOrElse(path.description, () => effect_1.Option.getOrElse(path.summary, () => ''));
|
|
33
8
|
const operationNameSnakeCase = (0, lodash_1.snakeCase)(operationName);
|
|
34
9
|
const operationNameTitleCase = (0, lodash_1.startCase)((0, lodash_1.camelCase)(operationName));
|
|
35
|
-
return (0,
|
|
10
|
+
return (0, effect_1.pipe)(operationDescription, effect_1.Effect.liftPredicate((description) => description.length > 0, () => new Error('Operation description is empty')), effect_1.Effect.map((description) => ({
|
|
36
11
|
name: operationNameSnakeCase,
|
|
37
12
|
title: operationNameTitleCase,
|
|
38
13
|
description,
|
|
39
|
-
})),
|
|
14
|
+
})), effect_1.Effect.map((operationJson) => JSON.stringify(operationJson, null, 2)), effect_1.Effect.mapError((error) => new Error(`Failed to generate operation.json for operation: ${error}`)));
|
|
40
15
|
};
|
|
41
16
|
exports.generateOperationJson = generateOperationJson;
|
|
@@ -1,45 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
const
|
|
27
|
-
const O = __importStar(require("fp-ts/Option"));
|
|
3
|
+
const effect_1 = require("effect");
|
|
28
4
|
const GenerateOperationJson_1 = require("./GenerateOperationJson");
|
|
29
5
|
describe('generateOperationJson', () => {
|
|
30
6
|
it('should generate correct data for operation.json', async () => {
|
|
31
7
|
const operationName = 'getPhoto';
|
|
32
8
|
const path = {
|
|
33
9
|
operationId: 'get_photo',
|
|
34
|
-
description:
|
|
35
|
-
summary:
|
|
36
|
-
tags:
|
|
37
|
-
parameters:
|
|
38
|
-
requestBody:
|
|
39
|
-
responses:
|
|
10
|
+
description: effect_1.Option.some('Get a photo'),
|
|
11
|
+
summary: effect_1.Option.none(),
|
|
12
|
+
tags: effect_1.Option.some([]),
|
|
13
|
+
parameters: effect_1.Option.none(),
|
|
14
|
+
requestBody: effect_1.Option.none(),
|
|
15
|
+
responses: effect_1.Option.none(),
|
|
40
16
|
};
|
|
41
|
-
const result = await (0, GenerateOperationJson_1.generateOperationJson)(operationName, path)
|
|
42
|
-
if (
|
|
17
|
+
const result = await effect_1.Effect.runPromise(effect_1.Effect.either((0, GenerateOperationJson_1.generateOperationJson)(operationName, path)));
|
|
18
|
+
if (effect_1.Either.isLeft(result)) {
|
|
43
19
|
throw new Error('expected result to be right');
|
|
44
20
|
}
|
|
45
21
|
expect(result.right).toEqual(JSON.stringify({
|
|
@@ -52,15 +28,15 @@ describe('generateOperationJson', () => {
|
|
|
52
28
|
const operationName = 'getPhoto';
|
|
53
29
|
const path = {
|
|
54
30
|
operationId: 'get_photo',
|
|
55
|
-
description:
|
|
56
|
-
summary:
|
|
57
|
-
tags:
|
|
58
|
-
parameters:
|
|
59
|
-
requestBody:
|
|
60
|
-
responses:
|
|
31
|
+
description: effect_1.Option.none(),
|
|
32
|
+
summary: effect_1.Option.some('Get a photo'),
|
|
33
|
+
tags: effect_1.Option.some([]),
|
|
34
|
+
parameters: effect_1.Option.none(),
|
|
35
|
+
requestBody: effect_1.Option.none(),
|
|
36
|
+
responses: effect_1.Option.none(),
|
|
61
37
|
};
|
|
62
|
-
const result = await (0, GenerateOperationJson_1.generateOperationJson)(operationName, path)
|
|
63
|
-
if (
|
|
38
|
+
const result = await effect_1.Effect.runPromise(effect_1.Effect.either((0, GenerateOperationJson_1.generateOperationJson)(operationName, path)));
|
|
39
|
+
if (effect_1.Either.isLeft(result)) {
|
|
64
40
|
throw new Error('expected result to be right');
|
|
65
41
|
}
|
|
66
42
|
expect(result.right).toEqual(JSON.stringify({
|
|
@@ -73,15 +49,15 @@ describe('generateOperationJson', () => {
|
|
|
73
49
|
const operationName = 'getPhoto';
|
|
74
50
|
const path = {
|
|
75
51
|
operationId: 'Get Photo',
|
|
76
|
-
description:
|
|
77
|
-
summary:
|
|
78
|
-
tags:
|
|
79
|
-
parameters:
|
|
80
|
-
requestBody:
|
|
81
|
-
responses:
|
|
52
|
+
description: effect_1.Option.none(),
|
|
53
|
+
summary: effect_1.Option.some('Get a photo'),
|
|
54
|
+
tags: effect_1.Option.some([]),
|
|
55
|
+
parameters: effect_1.Option.none(),
|
|
56
|
+
requestBody: effect_1.Option.none(),
|
|
57
|
+
responses: effect_1.Option.none(),
|
|
82
58
|
};
|
|
83
|
-
const result = await (0, GenerateOperationJson_1.generateOperationJson)(operationName, path)
|
|
84
|
-
if (
|
|
59
|
+
const result = await effect_1.Effect.runPromise(effect_1.Effect.either((0, GenerateOperationJson_1.generateOperationJson)(operationName, path)));
|
|
60
|
+
if (effect_1.Either.isLeft(result)) {
|
|
85
61
|
throw new Error('expected result to be right');
|
|
86
62
|
}
|
|
87
63
|
expect(result.right).toEqual(JSON.stringify({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaGenerator.d.ts","sourceRoot":"","sources":["../../src/file-generators/SchemaGenerator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE/E,eAAO,MAAM,4BAA4B,
|
|
1
|
+
{"version":3,"file":"SchemaGenerator.d.ts","sourceRoot":"","sources":["../../src/file-generators/SchemaGenerator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE/E,eAAO,MAAM,4BAA4B,GACxC,cAAc,OAAO,CAAC,oBAAoB,CAAC,KACzC,YAeD,CAAC"}
|
|
@@ -1,44 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
3
|
exports.generateNonArraySchemaObject = void 0;
|
|
27
|
-
const
|
|
4
|
+
const effect_1 = require("effect");
|
|
28
5
|
const generateNonArraySchemaObject = (schemaObject) => ({
|
|
29
|
-
title:
|
|
30
|
-
type:
|
|
31
|
-
properties:
|
|
32
|
-
required:
|
|
33
|
-
additionalProperties:
|
|
34
|
-
allOf:
|
|
35
|
-
anyOf:
|
|
36
|
-
oneOf:
|
|
37
|
-
not:
|
|
38
|
-
in:
|
|
39
|
-
default:
|
|
40
|
-
nullable:
|
|
41
|
-
enum:
|
|
6
|
+
title: effect_1.Option.none(),
|
|
7
|
+
type: effect_1.Option.none(),
|
|
8
|
+
properties: effect_1.Option.none(),
|
|
9
|
+
required: effect_1.Option.none(),
|
|
10
|
+
additionalProperties: effect_1.Option.some(false),
|
|
11
|
+
allOf: effect_1.Option.none(),
|
|
12
|
+
anyOf: effect_1.Option.none(),
|
|
13
|
+
oneOf: effect_1.Option.none(),
|
|
14
|
+
not: effect_1.Option.none(),
|
|
15
|
+
in: effect_1.Option.none(),
|
|
16
|
+
default: effect_1.Option.none(),
|
|
17
|
+
nullable: effect_1.Option.none(),
|
|
18
|
+
enum: effect_1.Option.none(),
|
|
42
19
|
...schemaObject,
|
|
43
20
|
});
|
|
44
21
|
exports.generateNonArraySchemaObject = generateNonArraySchemaObject;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { Either } from 'effect';
|
|
2
2
|
import { Path, SchemaObject } from '../../OpenApiTypeDescriptors';
|
|
3
|
-
export declare const generateInputSchema: (endpoint: Path) =>
|
|
3
|
+
export declare const generateInputSchema: (endpoint: Path) => Either.Either<SchemaObject, Error>;
|
|
4
4
|
//# sourceMappingURL=GenerateInputSchema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GenerateInputSchema.d.ts","sourceRoot":"","sources":["../../../src/file-generators/types/GenerateInputSchema.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"GenerateInputSchema.d.ts","sourceRoot":"","sources":["../../../src/file-generators/types/GenerateInputSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAgB,MAAM,QAAQ,CAAC;AAM9C,OAAO,EACN,IAAI,EAGJ,YAAY,EAEZ,MAAM,8BAA8B,CAAC;AAgKtC,eAAO,MAAM,mBAAmB,GAC/B,UAAU,IAAI,KACZ,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAmCnC,CAAC"}
|
|
@@ -1,63 +1,44 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
3
|
exports.generateInputSchema = void 0;
|
|
27
|
-
const
|
|
28
|
-
const function_1 = require("fp-ts/function");
|
|
4
|
+
const effect_1 = require("effect");
|
|
29
5
|
const lodash_1 = require("lodash");
|
|
30
|
-
const O = __importStar(require("fp-ts/Option"));
|
|
31
6
|
const openapi_schema_to_json_schema_1 = require("@openapi-contrib/openapi-schema-to-json-schema");
|
|
32
7
|
const CompositeCodec_1 = require("@trayio/commons/codec/CompositeCodec");
|
|
33
8
|
const RemoveNullValuesCodec_1 = require("@trayio/commons/codec/RemoveNullValuesCodec");
|
|
34
9
|
const OpenApiCodecs_1 = require("../../OpenApiCodecs");
|
|
35
10
|
const OpenApiTypeDescriptors_1 = require("../../OpenApiTypeDescriptors");
|
|
36
11
|
const mergeRequired = (params, body) => {
|
|
37
|
-
const requiredBody =
|
|
38
|
-
|
|
12
|
+
const requiredBody = effect_1.Option.match(body.required, {
|
|
13
|
+
onNone: () => [],
|
|
14
|
+
onSome: (required) => required,
|
|
15
|
+
});
|
|
16
|
+
const requiredParams = effect_1.Option.match(params.required, {
|
|
17
|
+
onNone: () => [],
|
|
18
|
+
onSome: (required) => required,
|
|
19
|
+
});
|
|
39
20
|
if ((0, lodash_1.isArray)(requiredBody) && (0, lodash_1.isArray)(requiredParams)) {
|
|
40
21
|
return [...requiredBody, ...requiredParams];
|
|
41
22
|
}
|
|
42
23
|
return [];
|
|
43
24
|
};
|
|
44
25
|
const mergeParamsAndBody = (params, body) => ({
|
|
45
|
-
title:
|
|
46
|
-
type:
|
|
47
|
-
properties:
|
|
48
|
-
...(
|
|
49
|
-
...(
|
|
26
|
+
title: effect_1.Option.none(),
|
|
27
|
+
type: effect_1.Option.some('object'),
|
|
28
|
+
properties: effect_1.Option.some({
|
|
29
|
+
...(effect_1.Option.isSome(body.properties) && body.properties.value),
|
|
30
|
+
...(effect_1.Option.isSome(params.properties) && params.properties.value),
|
|
50
31
|
}),
|
|
51
|
-
required:
|
|
52
|
-
additionalProperties:
|
|
53
|
-
allOf:
|
|
54
|
-
anyOf:
|
|
55
|
-
oneOf:
|
|
56
|
-
not:
|
|
57
|
-
in:
|
|
58
|
-
default:
|
|
59
|
-
nullable:
|
|
60
|
-
enum:
|
|
32
|
+
required: effect_1.Option.some(mergeRequired(params, body)),
|
|
33
|
+
additionalProperties: effect_1.Option.some(false),
|
|
34
|
+
allOf: effect_1.Option.none(),
|
|
35
|
+
anyOf: effect_1.Option.none(),
|
|
36
|
+
oneOf: effect_1.Option.none(),
|
|
37
|
+
not: effect_1.Option.none(),
|
|
38
|
+
in: effect_1.Option.none(),
|
|
39
|
+
default: effect_1.Option.none(),
|
|
40
|
+
nullable: effect_1.Option.none(),
|
|
41
|
+
enum: effect_1.Option.none(),
|
|
61
42
|
});
|
|
62
43
|
const transformInput = (parameters) => {
|
|
63
44
|
const transformedParameters = {};
|
|
@@ -67,9 +48,10 @@ const transformInput = (parameters) => {
|
|
|
67
48
|
const parameterWithNoOptions = codecWithNullValueRemoval.encode(parameter);
|
|
68
49
|
const parameterWithJsdocAnnotation = {
|
|
69
50
|
...parameterWithNoOptions,
|
|
70
|
-
description: `@description ${
|
|
51
|
+
description: `@description ${effect_1.Option.getOrElse(parameter.description, () => '<Replace Description>')}`,
|
|
71
52
|
};
|
|
72
|
-
|
|
53
|
+
// TypeCodec keeps properties the schema does not declare (the jsdoc description above), a bare Schema decode drops them
|
|
54
|
+
const decodedParam = OpenApiTypeDescriptors_1.schemaObjectTypeCodec.decode({
|
|
73
55
|
...(0, openapi_schema_to_json_schema_1.fromParameter)(parameterWithJsdocAnnotation),
|
|
74
56
|
in: parameter.in,
|
|
75
57
|
});
|
|
@@ -77,82 +59,93 @@ const transformInput = (parameters) => {
|
|
|
77
59
|
throw new Error('Failed to decode params');
|
|
78
60
|
}
|
|
79
61
|
transformedParameters[parameter.name] = decodedParam.right;
|
|
80
|
-
if (
|
|
62
|
+
if (effect_1.Option.isSome(parameter.required) &&
|
|
63
|
+
parameter.required.value === true) {
|
|
81
64
|
requiredParameters.push(parameter.name);
|
|
82
65
|
}
|
|
83
66
|
});
|
|
84
67
|
return {
|
|
85
|
-
title:
|
|
86
|
-
type:
|
|
87
|
-
properties:
|
|
88
|
-
required:
|
|
89
|
-
additionalProperties:
|
|
90
|
-
allOf:
|
|
91
|
-
anyOf:
|
|
92
|
-
oneOf:
|
|
93
|
-
not:
|
|
94
|
-
in:
|
|
95
|
-
default:
|
|
96
|
-
nullable:
|
|
97
|
-
enum:
|
|
68
|
+
title: effect_1.Option.none(),
|
|
69
|
+
type: effect_1.Option.some('object'),
|
|
70
|
+
properties: effect_1.Option.some(transformedParameters),
|
|
71
|
+
required: effect_1.Option.some([...requiredParameters]),
|
|
72
|
+
additionalProperties: effect_1.Option.some(false),
|
|
73
|
+
allOf: effect_1.Option.none(),
|
|
74
|
+
anyOf: effect_1.Option.none(),
|
|
75
|
+
oneOf: effect_1.Option.none(),
|
|
76
|
+
not: effect_1.Option.none(),
|
|
77
|
+
in: effect_1.Option.none(),
|
|
78
|
+
default: effect_1.Option.none(),
|
|
79
|
+
nullable: effect_1.Option.none(),
|
|
80
|
+
enum: effect_1.Option.none(),
|
|
98
81
|
};
|
|
99
82
|
};
|
|
100
83
|
/**
|
|
101
84
|
* OpenAPI spec's body params don't have an .in property, we add one in here since query, path, and header params do
|
|
102
85
|
*/
|
|
103
|
-
const appendInPropertyToBody = (body) =>
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
...
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
86
|
+
const appendInPropertyToBody = (body) => effect_1.Option.match(body.properties, {
|
|
87
|
+
onNone: () => body,
|
|
88
|
+
onSome: (properties) => {
|
|
89
|
+
const propsWithInBody = Object.keys(properties).reduce((acc, name) => ({
|
|
90
|
+
...acc,
|
|
91
|
+
[name]: {
|
|
92
|
+
...properties[name],
|
|
93
|
+
in: effect_1.Option.some('body'),
|
|
94
|
+
},
|
|
95
|
+
}), {});
|
|
96
|
+
return {
|
|
97
|
+
...body,
|
|
98
|
+
properties: effect_1.Option.some(propsWithInBody),
|
|
99
|
+
};
|
|
100
|
+
},
|
|
101
|
+
});
|
|
116
102
|
const blankOutputSchema = () => ({
|
|
117
|
-
title:
|
|
118
|
-
type:
|
|
119
|
-
properties:
|
|
120
|
-
required:
|
|
121
|
-
additionalProperties:
|
|
122
|
-
allOf:
|
|
123
|
-
anyOf:
|
|
124
|
-
oneOf:
|
|
125
|
-
not:
|
|
126
|
-
in:
|
|
127
|
-
default:
|
|
128
|
-
nullable:
|
|
129
|
-
enum:
|
|
103
|
+
title: effect_1.Option.none(),
|
|
104
|
+
type: effect_1.Option.none(),
|
|
105
|
+
properties: effect_1.Option.none(),
|
|
106
|
+
required: effect_1.Option.none(),
|
|
107
|
+
additionalProperties: effect_1.Option.some(false),
|
|
108
|
+
allOf: effect_1.Option.none(),
|
|
109
|
+
anyOf: effect_1.Option.none(),
|
|
110
|
+
oneOf: effect_1.Option.none(),
|
|
111
|
+
not: effect_1.Option.none(),
|
|
112
|
+
in: effect_1.Option.none(),
|
|
113
|
+
default: effect_1.Option.none(),
|
|
114
|
+
nullable: effect_1.Option.none(),
|
|
115
|
+
enum: effect_1.Option.none(),
|
|
130
116
|
});
|
|
131
117
|
const getApplicationJsonMediaType = (content) => {
|
|
132
|
-
if (!Object.keys(content).length)
|
|
133
|
-
return
|
|
118
|
+
if (!Object.keys(content).length) {
|
|
119
|
+
return effect_1.Either.right({ schema: effect_1.Option.none() });
|
|
120
|
+
}
|
|
134
121
|
// TODO: we should support any value here, but there may also be more than 1 media type so we need to iterate through
|
|
135
122
|
// and combine all the schemas within into a single set of inputs
|
|
136
123
|
const mediaTypeApplicationJson = Object.keys(content).find((mediaType) => /^application\/.*json$/.test(mediaType));
|
|
137
124
|
if (mediaTypeApplicationJson) {
|
|
138
|
-
return
|
|
125
|
+
return effect_1.Either.right(content[mediaTypeApplicationJson]);
|
|
139
126
|
}
|
|
140
127
|
const mediaTypes = Object.keys(content);
|
|
141
|
-
return
|
|
128
|
+
return effect_1.Either.left(new Error(`Unsupported media type: ${mediaTypes}`));
|
|
142
129
|
};
|
|
143
130
|
const generateInputSchema = (endpoint) => {
|
|
144
|
-
const parameters =
|
|
145
|
-
const requestBody =
|
|
131
|
+
const parameters = effect_1.Option.getOrNull(endpoint.parameters);
|
|
132
|
+
const requestBody = effect_1.Option.getOrNull(endpoint.requestBody);
|
|
146
133
|
if (parameters && !requestBody) {
|
|
147
|
-
return
|
|
134
|
+
return effect_1.Either.right(transformInput(parameters));
|
|
148
135
|
}
|
|
149
136
|
if (requestBody && !parameters) {
|
|
150
|
-
return (0,
|
|
137
|
+
return (0, effect_1.pipe)(getApplicationJsonMediaType(requestBody.content), effect_1.Either.map((mediaTypeObject) => effect_1.Option.match(mediaTypeObject.schema, {
|
|
138
|
+
onNone: () => blankOutputSchema(),
|
|
139
|
+
onSome: (schema) => appendInPropertyToBody(schema),
|
|
140
|
+
})));
|
|
151
141
|
}
|
|
152
142
|
if (requestBody && parameters) {
|
|
153
143
|
const params = transformInput(parameters);
|
|
154
|
-
return (0,
|
|
144
|
+
return (0, effect_1.pipe)(getApplicationJsonMediaType(requestBody.content), effect_1.Either.map((mediaTypeObject) => effect_1.Option.match(mediaTypeObject.schema, {
|
|
145
|
+
onNone: () => blankOutputSchema(),
|
|
146
|
+
onSome: (schema) => appendInPropertyToBody(schema),
|
|
147
|
+
})), effect_1.Either.flatMap((schema) => effect_1.Either.right(mergeParamsAndBody(params, schema))));
|
|
155
148
|
}
|
|
156
|
-
return
|
|
149
|
+
return effect_1.Either.right(blankOutputSchema());
|
|
157
150
|
};
|
|
158
151
|
exports.generateInputSchema = generateInputSchema;
|