@trayio/tray-openapi 0.0.1-beta

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.
Files changed (62) hide show
  1. package/LICENSE.txt +22 -0
  2. package/README.md +39 -0
  3. package/dist/OpenApiCodecs.d.ts +5 -0
  4. package/dist/OpenApiCodecs.d.ts.map +1 -0
  5. package/dist/OpenApiCodecs.js +8 -0
  6. package/dist/OpenApiSchemaImporter.d.ts +17 -0
  7. package/dist/OpenApiSchemaImporter.d.ts.map +1 -0
  8. package/dist/OpenApiSchemaImporter.js +138 -0
  9. package/dist/OpenApiSchemaImporter.test.d.ts +2 -0
  10. package/dist/OpenApiSchemaImporter.test.d.ts.map +1 -0
  11. package/dist/OpenApiSchemaImporter.test.js +85 -0
  12. package/dist/OpenApiSchemaTransformer.d.ts +9 -0
  13. package/dist/OpenApiSchemaTransformer.d.ts.map +1 -0
  14. package/dist/OpenApiSchemaTransformer.js +68 -0
  15. package/dist/OpenApiSchemaTransformer.test.d.ts +2 -0
  16. package/dist/OpenApiSchemaTransformer.test.d.ts.map +1 -0
  17. package/dist/OpenApiSchemaTransformer.test.js +118 -0
  18. package/dist/OpenApiTypeDescriptors.d.ts +109 -0
  19. package/dist/OpenApiTypeDescriptors.d.ts.map +1 -0
  20. package/dist/OpenApiTypeDescriptors.js +107 -0
  21. package/dist/file-generators/GenerateHandler.d.ts +15 -0
  22. package/dist/file-generators/GenerateHandler.d.ts.map +1 -0
  23. package/dist/file-generators/GenerateHandler.js +110 -0
  24. package/dist/file-generators/GenerateHandler.test.d.ts +2 -0
  25. package/dist/file-generators/GenerateHandler.test.d.ts.map +1 -0
  26. package/dist/file-generators/GenerateHandler.test.js +427 -0
  27. package/dist/file-generators/GenerateHandlerTest.d.ts +9 -0
  28. package/dist/file-generators/GenerateHandlerTest.d.ts.map +1 -0
  29. package/dist/file-generators/GenerateHandlerTest.js +88 -0
  30. package/dist/file-generators/GenerateHandlerTest.test.d.ts +2 -0
  31. package/dist/file-generators/GenerateHandlerTest.test.d.ts.map +1 -0
  32. package/dist/file-generators/GenerateHandlerTest.test.js +640 -0
  33. package/dist/file-generators/GenerateOperationJson.d.ts +4 -0
  34. package/dist/file-generators/GenerateOperationJson.d.ts.map +1 -0
  35. package/dist/file-generators/GenerateOperationJson.js +44 -0
  36. package/dist/file-generators/GenerateOperationJson.test.d.ts +2 -0
  37. package/dist/file-generators/GenerateOperationJson.test.d.ts.map +1 -0
  38. package/dist/file-generators/GenerateOperationJson.test.js +78 -0
  39. package/dist/file-generators/types/GenerateInputSchema.d.ts +4 -0
  40. package/dist/file-generators/types/GenerateInputSchema.d.ts.map +1 -0
  41. package/dist/file-generators/types/GenerateInputSchema.js +131 -0
  42. package/dist/file-generators/types/GenerateInputSchema.test.d.ts +2 -0
  43. package/dist/file-generators/types/GenerateInputSchema.test.d.ts.map +1 -0
  44. package/dist/file-generators/types/GenerateInputSchema.test.js +260 -0
  45. package/dist/file-generators/types/GenerateInputType.test.d.ts +2 -0
  46. package/dist/file-generators/types/GenerateInputType.test.d.ts.map +1 -0
  47. package/dist/file-generators/types/GenerateInputType.test.js +447 -0
  48. package/dist/file-generators/types/GenerateInputTypes.d.ts +4 -0
  49. package/dist/file-generators/types/GenerateInputTypes.d.ts.map +1 -0
  50. package/dist/file-generators/types/GenerateInputTypes.js +45 -0
  51. package/dist/file-generators/types/GenerateOutput.d.ts +8 -0
  52. package/dist/file-generators/types/GenerateOutput.d.ts.map +1 -0
  53. package/dist/file-generators/types/GenerateOutput.js +81 -0
  54. package/dist/file-generators/types/GenerateOutput.test.d.ts +2 -0
  55. package/dist/file-generators/types/GenerateOutput.test.d.ts.map +1 -0
  56. package/dist/file-generators/types/GenerateOutput.test.js +213 -0
  57. package/dist/file-generators/types/JsonSchemaToTypescriptOptions.d.ts +9 -0
  58. package/dist/file-generators/types/JsonSchemaToTypescriptOptions.d.ts.map +1 -0
  59. package/dist/file-generators/types/JsonSchemaToTypescriptOptions.js +11 -0
  60. package/dist/templates/connector-template.zip +0 -0
  61. package/dist/test-openapi-spec.json +160 -0
  62. package/package.json +30 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GenerateOperationJson.test.d.ts","sourceRoot":"","sources":["../../src/file-generators/GenerateOperationJson.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,78 @@
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
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ const E = __importStar(require("fp-ts/Either"));
36
+ const FakeFileStorage_1 = require("@trayio/commons/file/FakeFileStorage");
37
+ const O = __importStar(require("fp-ts/Option"));
38
+ const GenerateOperationJson_1 = require("./GenerateOperationJson");
39
+ describe('generateOperationJson', () => {
40
+ const fileStorage = new FakeFileStorage_1.FakeFileStorage();
41
+ it('should generate operation.json file', () => __awaiter(void 0, void 0, void 0, function* () {
42
+ const writeSpy = jest.spyOn(fileStorage, 'write');
43
+ const operationDirPath = '/path/to/operation';
44
+ const operationNameSnakeCase = 'get_photo';
45
+ const operationNameKebabCase = 'get-photo';
46
+ const operationDescription = 'Get photo operation';
47
+ const result = yield (0, GenerateOperationJson_1.generateOperationJson)(fileStorage, operationDirPath, operationNameSnakeCase, operationNameKebabCase, operationDescription)();
48
+ if (E.isLeft(result)) {
49
+ throw new Error('expected result to be right');
50
+ }
51
+ expect(writeSpy).toHaveBeenCalledWith({
52
+ content: expect.anything(),
53
+ key: '/path/to/operation/operation.json',
54
+ metadata: { name: 'operation.json' },
55
+ }, O.none);
56
+ expect(result.right).toBeUndefined();
57
+ expect(fileStorage.files.has('/path/to/operation/operation.json')).toEqual(true);
58
+ }));
59
+ it('should generate correct data for operation.json', () => __awaiter(void 0, void 0, void 0, function* () {
60
+ const operationDirPath = '/path/to/operation';
61
+ const operationNameSnakeCase = 'get_photo';
62
+ const operationNameKebabCase = 'get-photo';
63
+ const operationDescription = 'Get photo operation';
64
+ const result = yield (0, GenerateOperationJson_1.generateOperationJson)(fileStorage, operationDirPath, operationNameSnakeCase, operationNameKebabCase, operationDescription)();
65
+ if (E.isLeft(result)) {
66
+ throw new Error('expected result to be right');
67
+ }
68
+ const operationJson = fileStorage.files.get('/path/to/operation/operation.json');
69
+ if (operationJson === undefined) {
70
+ throw new Error('expected operationJson to be defined');
71
+ }
72
+ expect(operationJson.content.read()).toEqual(JSON.stringify({
73
+ name: 'get_photo',
74
+ title: 'get-photo',
75
+ description: 'Get photo operation',
76
+ }));
77
+ }));
78
+ });
@@ -0,0 +1,4 @@
1
+ import * as E from 'fp-ts/Either';
2
+ import { Path, SchemaObject } from '../../OpenApiTypeDescriptors';
3
+ export declare const generateInputSchema: (endpoint: Path) => E.Either<Error, SchemaObject>;
4
+ //# sourceMappingURL=GenerateInputSchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GenerateInputSchema.d.ts","sourceRoot":"","sources":["../../../src/file-generators/types/GenerateInputSchema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAQlC,OAAO,EACN,IAAI,EAGJ,YAAY,EAEZ,MAAM,8BAA8B,CAAC;AA4ItC,eAAO,MAAM,mBAAmB,aACrB,IAAI,KACZ,EAAE,MAAM,CAAC,KAAK,EAAE,YAAY,CAiC9B,CAAC"}
@@ -0,0 +1,131 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.generateInputSchema = void 0;
27
+ const E = __importStar(require("fp-ts/Either"));
28
+ const function_1 = require("fp-ts/function");
29
+ const lodash_1 = require("lodash");
30
+ const O = __importStar(require("fp-ts/Option"));
31
+ const openapi_schema_to_json_schema_1 = require("@openapi-contrib/openapi-schema-to-json-schema");
32
+ const CompositeCodec_1 = require("@trayio/commons/codec/CompositeCodec");
33
+ const RemoveNullValuesCodec_1 = require("@trayio/commons/codec/RemoveNullValuesCodec");
34
+ const OpenApiCodecs_1 = require("../../OpenApiCodecs");
35
+ const OpenApiTypeDescriptors_1 = require("../../OpenApiTypeDescriptors");
36
+ const mergeRequired = (params, body) => {
37
+ const requiredBody = O.fold(() => [], (required) => required)(body.required);
38
+ const requiredParams = O.fold(() => [], (required) => required)(params.required);
39
+ if ((0, lodash_1.isArray)(requiredBody) && (0, lodash_1.isArray)(requiredParams)) {
40
+ return [...requiredBody, ...requiredParams];
41
+ }
42
+ return [];
43
+ };
44
+ const mergeParamsAndBody = (params, body) => ({
45
+ title: O.none,
46
+ type: O.some('object'),
47
+ properties: O.some(Object.assign(Object.assign({}, (O.isSome(body.properties) && body.properties.value)), (O.isSome(params.properties) && params.properties.value))),
48
+ required: O.some(mergeRequired(params, body)),
49
+ additionalProperties: O.some(false),
50
+ allOf: O.none,
51
+ anyOf: O.none,
52
+ oneOf: O.none,
53
+ not: O.none,
54
+ in: O.none,
55
+ });
56
+ const transformInput = (parameters) => {
57
+ const transformedParameters = {};
58
+ const requiredParameters = [];
59
+ parameters.forEach((parameter) => {
60
+ const codecWithNullValueRemoval = CompositeCodec_1.CompositeCodec.fromCodecs(OpenApiCodecs_1.parameterSchemaCodec, RemoveNullValuesCodec_1.RemoveNullValuesCodec.instance);
61
+ const parameterWithNoOptions = codecWithNullValueRemoval.encode(parameter);
62
+ const parameterWithJsdocAnnotation = Object.assign(Object.assign({}, parameterWithNoOptions), { description: `@description ${parameter.description}` });
63
+ const decodedParam = OpenApiTypeDescriptors_1.schemaObjectTypeDescriptor.decode(Object.assign(Object.assign({}, (0, openapi_schema_to_json_schema_1.fromParameter)(parameterWithJsdocAnnotation)), { in: parameter.in }));
64
+ if (decodedParam._tag === 'Left') {
65
+ throw new Error('Failed to decode params');
66
+ }
67
+ transformedParameters[parameter.name] = decodedParam.right;
68
+ if (O.isSome(parameter.required) && parameter.required.value === true) {
69
+ requiredParameters.push(parameter.name);
70
+ }
71
+ });
72
+ return {
73
+ title: O.none,
74
+ type: O.some('object'),
75
+ properties: O.some(transformedParameters),
76
+ required: O.some([...requiredParameters]),
77
+ additionalProperties: O.some(false),
78
+ allOf: O.none,
79
+ anyOf: O.none,
80
+ oneOf: O.none,
81
+ not: O.none,
82
+ in: O.none,
83
+ };
84
+ };
85
+ /**
86
+ * OpenAPI spec's body params don't have an .in property, we add one in here since query, path, and header params do
87
+ */
88
+ const appendInPropertyToBody = (body) => O.fold(() => body, (properties) => {
89
+ const propsWithInBody = Object.keys(properties).reduce((acc, name) => (Object.assign(Object.assign({}, acc), { [name]: Object.assign(Object.assign({}, properties[name]), { in: O.some('body') }) })), {});
90
+ return Object.assign(Object.assign({}, body), { properties: O.some(propsWithInBody) });
91
+ })(body.properties);
92
+ const blankOutputSchema = () => ({
93
+ title: O.none,
94
+ type: O.none,
95
+ properties: O.none,
96
+ required: O.none,
97
+ additionalProperties: O.some(false),
98
+ allOf: O.none,
99
+ anyOf: O.none,
100
+ oneOf: O.none,
101
+ not: O.none,
102
+ in: O.none,
103
+ });
104
+ const getApplicationJsonMediaType = (content) => {
105
+ if (!Object.keys(content).length)
106
+ return E.right({ schema: O.none });
107
+ // TODO: we should support any value here, but there may also be more than 1 media type so we need to iterate through
108
+ // and combine all the schemas within into a single set of inputs
109
+ const mediaTypeApplicationJson = Object.keys(content).find((mediaType) => /^application\/.*json$/.test(mediaType));
110
+ if (mediaTypeApplicationJson) {
111
+ return E.right(content[mediaTypeApplicationJson]);
112
+ }
113
+ const mediaTypes = Object.keys(content);
114
+ return E.left(new Error(`Unsupported media type: ${mediaTypes}`));
115
+ };
116
+ const generateInputSchema = (endpoint) => {
117
+ const parameters = O.toNullable(endpoint.parameters);
118
+ const requestBody = O.toNullable(endpoint.requestBody);
119
+ if (parameters && !requestBody) {
120
+ return E.right(transformInput(parameters));
121
+ }
122
+ if (requestBody && !parameters) {
123
+ return (0, function_1.pipe)(getApplicationJsonMediaType(requestBody.content), E.map((mediaTypeObject) => O.fold(() => blankOutputSchema(), (schema) => appendInPropertyToBody(schema))(mediaTypeObject.schema)));
124
+ }
125
+ if (requestBody && parameters) {
126
+ const params = transformInput(parameters);
127
+ return (0, function_1.pipe)(getApplicationJsonMediaType(requestBody.content), E.map((mediaTypeObject) => O.fold(() => blankOutputSchema(), (schema) => appendInPropertyToBody(schema))(mediaTypeObject.schema)), E.chain((schema) => E.right(mergeParamsAndBody(params, schema))));
128
+ }
129
+ return E.right(blankOutputSchema());
130
+ };
131
+ exports.generateInputSchema = generateInputSchema;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=GenerateInputSchema.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GenerateInputSchema.test.d.ts","sourceRoot":"","sources":["../../../src/file-generators/types/GenerateInputSchema.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,260 @@
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
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ const E = __importStar(require("fp-ts/Either"));
36
+ const TE = __importStar(require("fp-ts/TaskEither"));
37
+ const O = __importStar(require("fp-ts/Option"));
38
+ const GenerateInputSchema_1 = require("./GenerateInputSchema");
39
+ const GenerateInputTypes_1 = require("./GenerateInputTypes");
40
+ describe('GenerateInputSchema', () => {
41
+ it('it should process an endpoint with path and query string parameters and generate input.ts file contents', () => __awaiter(void 0, void 0, void 0, function* () {
42
+ const endpoint = {
43
+ operationId: 'getPost',
44
+ description: '',
45
+ tags: O.some([]),
46
+ parameters: O.some([
47
+ {
48
+ name: 'id',
49
+ in: 'path',
50
+ required: O.some(true),
51
+ description: 'The user id.',
52
+ schema: {
53
+ type: O.some('integer'),
54
+ title: O.none,
55
+ properties: O.none,
56
+ additionalProperties: O.some(false),
57
+ required: O.none,
58
+ allOf: O.none,
59
+ anyOf: O.none,
60
+ oneOf: O.none,
61
+ not: O.none,
62
+ in: O.none,
63
+ },
64
+ additionalProperties: O.none,
65
+ },
66
+ {
67
+ name: 'date',
68
+ in: 'query',
69
+ required: O.none,
70
+ description: 'The date of the post.',
71
+ schema: {
72
+ type: O.some('string'),
73
+ title: O.none,
74
+ properties: O.none,
75
+ additionalProperties: O.some(false),
76
+ format: O.none,
77
+ items: O.none,
78
+ required: O.none,
79
+ allOf: O.none,
80
+ anyOf: O.none,
81
+ oneOf: O.none,
82
+ not: O.none,
83
+ in: O.none,
84
+ },
85
+ additionalProperties: O.none,
86
+ },
87
+ ]),
88
+ requestBody: O.none,
89
+ responses: O.none,
90
+ };
91
+ const inputSchema = E.getOrElse(() => {
92
+ throw new Error('Should have been right');
93
+ })((0, GenerateInputSchema_1.generateInputSchema)(endpoint));
94
+ const inputTypes = (0, GenerateInputTypes_1.generateInputTypes)(endpoint.operationId, inputSchema);
95
+ const generatedInputFile = yield TE.getOrElse((error) => {
96
+ throw new Error('Should have been right');
97
+ })(inputTypes)();
98
+ const expectedInputFile = `export interface GetPostInput {
99
+ /**
100
+ * @description The user id.
101
+ */
102
+ id: number;
103
+ /**
104
+ * @description The date of the post.
105
+ */
106
+ date?: string;
107
+ }
108
+ `;
109
+ expect(generatedInputFile).toEqual(expectedInputFile);
110
+ }));
111
+ it('it should process an endpoint with body parameters and generate input.ts file contents', () => __awaiter(void 0, void 0, void 0, function* () {
112
+ const endpoint = {
113
+ operationId: 'createPost',
114
+ description: 'Create a new post',
115
+ tags: O.some([]),
116
+ parameters: O.none,
117
+ requestBody: O.some({
118
+ content: {
119
+ 'application/json': {
120
+ schema: O.some({
121
+ type: O.some('object'),
122
+ title: O.some('Post'),
123
+ required: O.some(['id', 'userId', 'title', 'body']),
124
+ properties: O.some({
125
+ id: {
126
+ type: O.some('integer'),
127
+ title: O.none,
128
+ properties: O.none,
129
+ additionalProperties: O.some(false),
130
+ required: O.none,
131
+ allOf: O.none,
132
+ anyOf: O.none,
133
+ oneOf: O.none,
134
+ not: O.none,
135
+ in: O.none,
136
+ },
137
+ userId: {
138
+ type: O.some('integer'),
139
+ title: O.none,
140
+ properties: O.none,
141
+ additionalProperties: O.some(false),
142
+ required: O.none,
143
+ allOf: O.none,
144
+ anyOf: O.none,
145
+ oneOf: O.none,
146
+ not: O.none,
147
+ in: O.none,
148
+ },
149
+ title: {
150
+ type: O.some('string'),
151
+ title: O.none,
152
+ properties: O.none,
153
+ additionalProperties: O.some(false),
154
+ required: O.none,
155
+ allOf: O.none,
156
+ anyOf: O.none,
157
+ oneOf: O.none,
158
+ not: O.none,
159
+ in: O.none,
160
+ },
161
+ body: {
162
+ type: O.some('string'),
163
+ title: O.none,
164
+ properties: O.none,
165
+ additionalProperties: O.some(false),
166
+ required: O.none,
167
+ allOf: O.none,
168
+ anyOf: O.none,
169
+ oneOf: O.none,
170
+ not: O.none,
171
+ in: O.none,
172
+ },
173
+ }),
174
+ additionalProperties: O.some(false),
175
+ allOf: O.none,
176
+ anyOf: O.none,
177
+ oneOf: O.none,
178
+ not: O.none,
179
+ in: O.none,
180
+ }),
181
+ },
182
+ },
183
+ }),
184
+ responses: O.none,
185
+ };
186
+ const inputSchema = E.getOrElse(() => {
187
+ throw new Error('Should have been right');
188
+ })((0, GenerateInputSchema_1.generateInputSchema)(endpoint));
189
+ const inputTypes = (0, GenerateInputTypes_1.generateInputTypes)(endpoint.operationId, inputSchema);
190
+ const generatedInputFile = yield TE.getOrElse((error) => {
191
+ throw new Error('Should have been right');
192
+ })(inputTypes)();
193
+ const expectedInputFile = `export interface CreatePostInput {
194
+ id: number;
195
+ userId: number;
196
+ title: string;
197
+ body: string;
198
+ }
199
+ `;
200
+ expect(generatedInputFile).toEqual(expectedInputFile);
201
+ }));
202
+ it('it should process an endpoint with query string parameter array and generate input.ts file contents', () => __awaiter(void 0, void 0, void 0, function* () {
203
+ const endpoint = {
204
+ operationId: 'getPost',
205
+ description: '',
206
+ tags: O.some([]),
207
+ parameters: O.some([
208
+ {
209
+ name: 'tags',
210
+ in: 'query',
211
+ required: O.some(true),
212
+ description: 'tags to filter by.',
213
+ schema: {
214
+ title: O.none,
215
+ type: 'array',
216
+ format: O.none,
217
+ items: {
218
+ type: O.some('string'),
219
+ title: O.none,
220
+ properties: O.none,
221
+ additionalProperties: O.some(false),
222
+ required: O.none,
223
+ allOf: O.none,
224
+ anyOf: O.none,
225
+ oneOf: O.none,
226
+ not: O.none,
227
+ in: O.none,
228
+ },
229
+ properties: O.none,
230
+ additionalProperties: O.some(false),
231
+ required: O.none,
232
+ allOf: O.none,
233
+ anyOf: O.none,
234
+ oneOf: O.none,
235
+ not: O.none,
236
+ in: O.none,
237
+ },
238
+ additionalProperties: O.none,
239
+ },
240
+ ]),
241
+ requestBody: O.none,
242
+ responses: O.none,
243
+ };
244
+ const inputSchema = E.getOrElse(() => {
245
+ throw new Error('Should have been right');
246
+ })((0, GenerateInputSchema_1.generateInputSchema)(endpoint));
247
+ const inputTypes = (0, GenerateInputTypes_1.generateInputTypes)(endpoint.operationId, inputSchema);
248
+ const generatedInputFile = yield TE.getOrElse((error) => {
249
+ throw new Error('Should have been right');
250
+ })(inputTypes)();
251
+ const expectedInputFile = `export interface GetPostInput {
252
+ /**
253
+ * @description tags to filter by.
254
+ */
255
+ tags: string[];
256
+ }
257
+ `;
258
+ expect(generatedInputFile).toEqual(expectedInputFile);
259
+ }));
260
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=GenerateInputType.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GenerateInputType.test.d.ts","sourceRoot":"","sources":["../../../src/file-generators/types/GenerateInputType.test.ts"],"names":[],"mappings":""}