@goast/core 0.0.1

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 (202) hide show
  1. package/README.md +11 -0
  2. package/dist/index.cjs +7 -0
  3. package/dist/index.cjs.map +1 -0
  4. package/dist/index.d.ts +3 -0
  5. package/dist/index.js +4 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/lib/codegen/config.cjs +6 -0
  8. package/dist/lib/codegen/config.cjs.map +1 -0
  9. package/dist/lib/codegen/config.d.ts +6 -0
  10. package/dist/lib/codegen/config.js +3 -0
  11. package/dist/lib/codegen/config.js.map +1 -0
  12. package/dist/lib/codegen/endpoints-generator.cjs +31 -0
  13. package/dist/lib/codegen/endpoints-generator.cjs.map +1 -0
  14. package/dist/lib/codegen/endpoints-generator.d.ts +15 -0
  15. package/dist/lib/codegen/endpoints-generator.js +27 -0
  16. package/dist/lib/codegen/endpoints-generator.js.map +1 -0
  17. package/dist/lib/codegen/generator.cjs +103 -0
  18. package/dist/lib/codegen/generator.cjs.map +1 -0
  19. package/dist/lib/codegen/generator.d.ts +36 -0
  20. package/dist/lib/codegen/generator.js +98 -0
  21. package/dist/lib/codegen/generator.js.map +1 -0
  22. package/dist/lib/codegen/index.cjs +10 -0
  23. package/dist/lib/codegen/index.cjs.map +1 -0
  24. package/dist/lib/codegen/index.d.ts +6 -0
  25. package/dist/lib/codegen/index.js +7 -0
  26. package/dist/lib/codegen/index.js.map +1 -0
  27. package/dist/lib/codegen/internal-utils.cjs +10 -0
  28. package/dist/lib/codegen/internal-utils.cjs.map +1 -0
  29. package/dist/lib/codegen/internal-utils.d.ts +1 -0
  30. package/dist/lib/codegen/internal-utils.js +6 -0
  31. package/dist/lib/codegen/internal-utils.js.map +1 -0
  32. package/dist/lib/codegen/schemas-generator.cjs +43 -0
  33. package/dist/lib/codegen/schemas-generator.cjs.map +1 -0
  34. package/dist/lib/codegen/schemas-generator.d.ts +16 -0
  35. package/dist/lib/codegen/schemas-generator.js +39 -0
  36. package/dist/lib/codegen/schemas-generator.js.map +1 -0
  37. package/dist/lib/codegen/services-generator.cjs +31 -0
  38. package/dist/lib/codegen/services-generator.cjs.map +1 -0
  39. package/dist/lib/codegen/services-generator.d.ts +15 -0
  40. package/dist/lib/codegen/services-generator.js +27 -0
  41. package/dist/lib/codegen/services-generator.js.map +1 -0
  42. package/dist/lib/codegen/types.cjs +3 -0
  43. package/dist/lib/codegen/types.cjs.map +1 -0
  44. package/dist/lib/codegen/types.d.ts +17 -0
  45. package/dist/lib/codegen/types.js +2 -0
  46. package/dist/lib/codegen/types.js.map +1 -0
  47. package/dist/lib/collect/collector.cjs +116 -0
  48. package/dist/lib/collect/collector.cjs.map +1 -0
  49. package/dist/lib/collect/collector.d.ts +3 -0
  50. package/dist/lib/collect/collector.js +112 -0
  51. package/dist/lib/collect/collector.js.map +1 -0
  52. package/dist/lib/collect/helpers.cjs +33 -0
  53. package/dist/lib/collect/helpers.cjs.map +1 -0
  54. package/dist/lib/collect/helpers.d.ts +3 -0
  55. package/dist/lib/collect/helpers.js +28 -0
  56. package/dist/lib/collect/helpers.js.map +1 -0
  57. package/dist/lib/collect/index.cjs +7 -0
  58. package/dist/lib/collect/index.cjs.map +1 -0
  59. package/dist/lib/collect/index.d.ts +3 -0
  60. package/dist/lib/collect/index.js +4 -0
  61. package/dist/lib/collect/index.js.map +1 -0
  62. package/dist/lib/collect/types.cjs +3 -0
  63. package/dist/lib/collect/types.cjs.map +1 -0
  64. package/dist/lib/collect/types.d.ts +12 -0
  65. package/dist/lib/collect/types.js +2 -0
  66. package/dist/lib/collect/types.js.map +1 -0
  67. package/dist/lib/internal-utils.cjs +8 -0
  68. package/dist/lib/internal-utils.cjs.map +1 -0
  69. package/dist/lib/internal-utils.d.ts +1 -0
  70. package/dist/lib/internal-utils.js +4 -0
  71. package/dist/lib/internal-utils.js.map +1 -0
  72. package/dist/lib/parse/deref-proxy.cjs +46 -0
  73. package/dist/lib/parse/deref-proxy.cjs.map +1 -0
  74. package/dist/lib/parse/deref-proxy.d.ts +3 -0
  75. package/dist/lib/parse/deref-proxy.js +42 -0
  76. package/dist/lib/parse/deref-proxy.js.map +1 -0
  77. package/dist/lib/parse/index.cjs +7 -0
  78. package/dist/lib/parse/index.cjs.map +1 -0
  79. package/dist/lib/parse/index.d.ts +3 -0
  80. package/dist/lib/parse/index.js +4 -0
  81. package/dist/lib/parse/index.js.map +1 -0
  82. package/dist/lib/parse/openapi-types.cjs +3 -0
  83. package/dist/lib/parse/openapi-types.cjs.map +1 -0
  84. package/dist/lib/parse/openapi-types.d.ts +897 -0
  85. package/dist/lib/parse/openapi-types.js +2 -0
  86. package/dist/lib/parse/openapi-types.js.map +1 -0
  87. package/dist/lib/parse/parser.cjs +189 -0
  88. package/dist/lib/parse/parser.cjs.map +1 -0
  89. package/dist/lib/parse/parser.d.ts +16 -0
  90. package/dist/lib/parse/parser.js +185 -0
  91. package/dist/lib/parse/parser.js.map +1 -0
  92. package/dist/lib/parse/types.cjs +3 -0
  93. package/dist/lib/parse/types.cjs.map +1 -0
  94. package/dist/lib/parse/types.d.ts +15 -0
  95. package/dist/lib/parse/types.js +2 -0
  96. package/dist/lib/parse/types.js.map +1 -0
  97. package/dist/lib/transform/api-types.cjs +3 -0
  98. package/dist/lib/transform/api-types.cjs.map +1 -0
  99. package/dist/lib/transform/api-types.d.ts +186 -0
  100. package/dist/lib/transform/api-types.js +2 -0
  101. package/dist/lib/transform/api-types.js.map +1 -0
  102. package/dist/lib/transform/helpers.cjs +121 -0
  103. package/dist/lib/transform/helpers.cjs.map +1 -0
  104. package/dist/lib/transform/helpers.d.ts +50 -0
  105. package/dist/lib/transform/helpers.js +108 -0
  106. package/dist/lib/transform/helpers.js.map +1 -0
  107. package/dist/lib/transform/index.cjs +6 -0
  108. package/dist/lib/transform/index.cjs.map +1 -0
  109. package/dist/lib/transform/index.d.ts +2 -0
  110. package/dist/lib/transform/index.js +3 -0
  111. package/dist/lib/transform/index.js.map +1 -0
  112. package/dist/lib/transform/transform-document.cjs +33 -0
  113. package/dist/lib/transform/transform-document.cjs.map +1 -0
  114. package/dist/lib/transform/transform-document.d.ts +3 -0
  115. package/dist/lib/transform/transform-document.js +29 -0
  116. package/dist/lib/transform/transform-document.js.map +1 -0
  117. package/dist/lib/transform/transform-endpoint.cjs +254 -0
  118. package/dist/lib/transform/transform-endpoint.cjs.map +1 -0
  119. package/dist/lib/transform/transform-endpoint.d.ts +4 -0
  120. package/dist/lib/transform/transform-endpoint.js +250 -0
  121. package/dist/lib/transform/transform-endpoint.js.map +1 -0
  122. package/dist/lib/transform/transform-schema.cjs +142 -0
  123. package/dist/lib/transform/transform-schema.cjs.map +1 -0
  124. package/dist/lib/transform/transform-schema.d.ts +4 -0
  125. package/dist/lib/transform/transform-schema.js +138 -0
  126. package/dist/lib/transform/transform-schema.js.map +1 -0
  127. package/dist/lib/transform/transformer.cjs +44 -0
  128. package/dist/lib/transform/transformer.cjs.map +1 -0
  129. package/dist/lib/transform/transformer.d.ts +3 -0
  130. package/dist/lib/transform/transformer.js +40 -0
  131. package/dist/lib/transform/transformer.js.map +1 -0
  132. package/dist/lib/transform/types.cjs +3 -0
  133. package/dist/lib/transform/types.cjs.map +1 -0
  134. package/dist/lib/transform/types.d.ts +23 -0
  135. package/dist/lib/transform/types.js +2 -0
  136. package/dist/lib/transform/types.js.map +1 -0
  137. package/dist/lib/utils/action-provider.cjs +35 -0
  138. package/dist/lib/utils/action-provider.cjs.map +1 -0
  139. package/dist/lib/utils/action-provider.d.ts +28 -0
  140. package/dist/lib/utils/action-provider.js +31 -0
  141. package/dist/lib/utils/action-provider.js.map +1 -0
  142. package/dist/lib/utils/common.utils.cjs +12 -0
  143. package/dist/lib/utils/common.utils.cjs.map +1 -0
  144. package/dist/lib/utils/common.utils.d.ts +3 -0
  145. package/dist/lib/utils/common.utils.js +7 -0
  146. package/dist/lib/utils/common.utils.js.map +1 -0
  147. package/dist/lib/utils/condition.cjs +9 -0
  148. package/dist/lib/utils/condition.cjs.map +1 -0
  149. package/dist/lib/utils/condition.d.ts +3 -0
  150. package/dist/lib/utils/condition.js +5 -0
  151. package/dist/lib/utils/condition.js.map +1 -0
  152. package/dist/lib/utils/endpoint.utils.cjs +13 -0
  153. package/dist/lib/utils/endpoint.utils.cjs.map +1 -0
  154. package/dist/lib/utils/endpoint.utils.d.ts +2 -0
  155. package/dist/lib/utils/endpoint.utils.js +9 -0
  156. package/dist/lib/utils/endpoint.utils.js.map +1 -0
  157. package/dist/lib/utils/factory.cjs +29 -0
  158. package/dist/lib/utils/factory.cjs.map +1 -0
  159. package/dist/lib/utils/factory.d.ts +20 -0
  160. package/dist/lib/utils/factory.js +25 -0
  161. package/dist/lib/utils/factory.js.map +1 -0
  162. package/dist/lib/utils/generator.utils.cjs +11 -0
  163. package/dist/lib/utils/generator.utils.cjs.map +1 -0
  164. package/dist/lib/utils/generator.utils.d.ts +1 -0
  165. package/dist/lib/utils/generator.utils.js +7 -0
  166. package/dist/lib/utils/generator.utils.js.map +1 -0
  167. package/dist/lib/utils/index.cjs +14 -0
  168. package/dist/lib/utils/index.cjs.map +1 -0
  169. package/dist/lib/utils/index.d.ts +10 -0
  170. package/dist/lib/utils/index.js +11 -0
  171. package/dist/lib/utils/index.js.map +1 -0
  172. package/dist/lib/utils/object.utils.cjs +21 -0
  173. package/dist/lib/utils/object.utils.cjs.map +1 -0
  174. package/dist/lib/utils/object.utils.d.ts +1 -0
  175. package/dist/lib/utils/object.utils.js +17 -0
  176. package/dist/lib/utils/object.utils.js.map +1 -0
  177. package/dist/lib/utils/schema.utils.cjs +55 -0
  178. package/dist/lib/utils/schema.utils.cjs.map +1 -0
  179. package/dist/lib/utils/schema.utils.d.ts +10 -0
  180. package/dist/lib/utils/schema.utils.js +50 -0
  181. package/dist/lib/utils/schema.utils.js.map +1 -0
  182. package/dist/lib/utils/source-builder.cjs +378 -0
  183. package/dist/lib/utils/source-builder.cjs.map +1 -0
  184. package/dist/lib/utils/source-builder.d.ts +216 -0
  185. package/dist/lib/utils/source-builder.js +374 -0
  186. package/dist/lib/utils/source-builder.js.map +1 -0
  187. package/dist/lib/utils/string.utils.cjs +337 -0
  188. package/dist/lib/utils/string.utils.cjs.map +1 -0
  189. package/dist/lib/utils/string.utils.d.ts +173 -0
  190. package/dist/lib/utils/string.utils.js +324 -0
  191. package/dist/lib/utils/string.utils.js.map +1 -0
  192. package/dist/lib/utils/string.utils.types.cjs +3 -0
  193. package/dist/lib/utils/string.utils.types.cjs.map +1 -0
  194. package/dist/lib/utils/string.utils.types.d.ts +148 -0
  195. package/dist/lib/utils/string.utils.types.js +2 -0
  196. package/dist/lib/utils/string.utils.types.js.map +1 -0
  197. package/dist/lib/utils/type.utils.cjs +3 -0
  198. package/dist/lib/utils/type.utils.cjs.map +1 -0
  199. package/dist/lib/utils/type.utils.d.ts +15 -0
  200. package/dist/lib/utils/type.utils.js +2 -0
  201. package/dist/lib/utils/type.utils.js.map +1 -0
  202. package/package.json +27 -0
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getOpenApiObjectIdentifier = exports.IdGenerator = exports.transformSchemaProperties = exports.transformAdditionalProperties = exports.determineEndpointName = exports.getCustomFields = exports.updateSchemaAccessibility = exports.determineSchemaAccessibility = exports.determineSchemaName = exports.determineSchemaKind = void 0;
4
+ const internal_utils_1 = require("../internal-utils");
5
+ const common_utils_1 = require("../utils/common.utils");
6
+ function determineSchemaKind(schema) {
7
+ if (schema.oneOf) {
8
+ return 'oneOf';
9
+ }
10
+ else if (schema.type !== 'object' && (schema.allOf || schema.anyOf)) {
11
+ return 'combined';
12
+ }
13
+ else if (Array.isArray(schema.type)) {
14
+ return 'multi-type';
15
+ }
16
+ else if (schema.type === 'object' ||
17
+ schema.type === 'string' ||
18
+ schema.type === 'boolean' ||
19
+ schema.type === 'null' ||
20
+ schema.type === 'number' ||
21
+ schema.type === 'integer' ||
22
+ schema.type === 'array') {
23
+ return schema.type;
24
+ }
25
+ return 'unknown';
26
+ }
27
+ exports.determineSchemaKind = determineSchemaKind;
28
+ function determineSchemaName(schema, id) {
29
+ if (schema.title)
30
+ return { name: schema.title, isGenerated: false };
31
+ if (!schema.$src) {
32
+ console.log('woot?');
33
+ }
34
+ const schemaNameMatch = schema.$src.path.match(/(?<=\/components\/schemas\/|\/definitions\/)[^/]+$/i);
35
+ if (schemaNameMatch) {
36
+ return { name: schemaNameMatch[0], isGenerated: false };
37
+ }
38
+ const responseMatch = schema.$src.path.match(/\/paths\/(?<path>.+)\/(?<method>.+)\/responses\/(?<status>\d+)\//);
39
+ if (responseMatch && responseMatch.groups) {
40
+ const { path, method, status } = responseMatch.groups;
41
+ return { name: `${method}_${path.replace(/\//g, '_')}_${status}_Response`, isGenerated: true };
42
+ }
43
+ return { name: id, isGenerated: true };
44
+ }
45
+ exports.determineSchemaName = determineSchemaName;
46
+ function determineSchemaAccessibility(schema) {
47
+ if (schema.readOnly === true) {
48
+ return schema.writeOnly === true ? 'none' : 'readOnly';
49
+ }
50
+ else {
51
+ return schema.writeOnly === true ? 'writeOnly' : 'all';
52
+ }
53
+ }
54
+ exports.determineSchemaAccessibility = determineSchemaAccessibility;
55
+ function updateSchemaAccessibility(accessibility, schema) {
56
+ if (accessibility === 'none')
57
+ return 'none';
58
+ if (accessibility === 'readOnly')
59
+ return schema.writeOnly === true ? 'none' : 'readOnly';
60
+ if (accessibility === 'writeOnly')
61
+ return schema.readOnly === true ? 'none' : 'writeOnly';
62
+ return determineSchemaAccessibility(schema);
63
+ }
64
+ exports.updateSchemaAccessibility = updateSchemaAccessibility;
65
+ function getCustomFields(schema) {
66
+ const result = {};
67
+ for (const key in schema) {
68
+ if (key.startsWith('x-')) {
69
+ const name = key.substring(2);
70
+ result[name] = schema[key];
71
+ }
72
+ }
73
+ return result;
74
+ }
75
+ exports.getCustomFields = getCustomFields;
76
+ function determineEndpointName(endpointInfo) {
77
+ if (endpointInfo.operation.operationId)
78
+ return endpointInfo.operation.operationId;
79
+ return endpointInfo.method + endpointInfo.path.replace(/\{([^}]+)\}/g, ':$1').replace(/\//g, '_');
80
+ }
81
+ exports.determineEndpointName = determineEndpointName;
82
+ function transformAdditionalProperties(context, schema, transformSchema) {
83
+ if ((0, common_utils_1.isNullish)(schema.additionalProperties))
84
+ return undefined;
85
+ if (typeof schema.additionalProperties === 'boolean')
86
+ return schema.additionalProperties;
87
+ return transformSchema(context, schema.additionalProperties);
88
+ }
89
+ exports.transformAdditionalProperties = transformAdditionalProperties;
90
+ function transformSchemaProperties(context, schema, transformSchema) {
91
+ const result = new Map();
92
+ if (!schema.properties)
93
+ return result;
94
+ for (const name of Object.keys(schema.properties)) {
95
+ if (!(0, internal_utils_1.isOpenApiObjectProperty)(name))
96
+ continue;
97
+ result.set(name, {
98
+ name,
99
+ schema: transformSchema(context, schema.properties[name]),
100
+ });
101
+ }
102
+ return result;
103
+ }
104
+ exports.transformSchemaProperties = transformSchemaProperties;
105
+ class IdGenerator {
106
+ constructor() {
107
+ this._idMap = new Map();
108
+ }
109
+ generateId(name) {
110
+ var _a;
111
+ const id = (_a = this._idMap.get(name)) !== null && _a !== void 0 ? _a : 1;
112
+ this._idMap.set(name, id + 1);
113
+ return `${name}-${id}`;
114
+ }
115
+ }
116
+ exports.IdGenerator = IdGenerator;
117
+ function getOpenApiObjectIdentifier(obj) {
118
+ return obj.$src.file + '#' + obj.$src.path;
119
+ }
120
+ exports.getOpenApiObjectIdentifier = getOpenApiObjectIdentifier;
121
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.cjs","sourceRoot":"","sources":["../../../../../../packages/core/src/lib/transform/helpers.ts"],"names":[],"mappings":";;;AAEA,sDAA4D;AAE5D,wDAAkD;AAElD,SAAgB,mBAAmB,CAEjC,MAAS;IACT,IAAI,MAAM,CAAC,KAAK,EAAE;QAChB,OAAO,OAAO,CAAC;KAChB;SAAM,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE;QACrE,OAAO,UAAU,CAAC;KACnB;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;QACrC,OAAO,YAAY,CAAC;KACrB;SAAM,IACL,MAAM,CAAC,IAAI,KAAK,QAAQ;QACxB,MAAM,CAAC,IAAI,KAAK,QAAQ;QACxB,MAAM,CAAC,IAAI,KAAK,SAAS;QACzB,MAAM,CAAC,IAAI,KAAK,MAAM;QACtB,MAAM,CAAC,IAAI,KAAK,QAAQ;QACxB,MAAM,CAAC,IAAI,KAAK,SAAS;QACzB,MAAM,CAAC,IAAI,KAAK,OAAO,EACvB;QACA,OAAO,MAAM,CAAC,IAAI,CAAC;KACpB;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAtBD,kDAsBC;AAED,SAAgB,mBAAmB,CACjC,MAGC,EACD,EAAU;IAEV,IAAI,MAAM,CAAC,KAAK;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IACpE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;QAChB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;KACtB;IACD,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACtG,IAAI,eAAe,EAAE;QACnB,OAAO,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;KACzD;IACD,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;IAEjH,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,EAAE;QACzC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC;QACtD,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,MAAM,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;KAChG;IAED,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AACzC,CAAC;AAvBD,kDAuBC;AAED,SAAgB,4BAA4B,CAAC,MAG5C;IACC,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE;QAC5B,OAAO,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC;KACxD;SAAM;QACL,OAAO,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC;KACxD;AACH,CAAC;AATD,oEASC;AAED,SAAgB,yBAAyB,CACvC,aAAqC,EACrC,MAGC;IAED,IAAI,aAAa,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IAC5C,IAAI,aAAa,KAAK,UAAU;QAAE,OAAO,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC;IACzF,IAAI,aAAa,KAAK,WAAW;QAAE,OAAO,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC;IAC1F,OAAO,4BAA4B,CAAC,MAAM,CAAC,CAAC;AAC9C,CAAC;AAXD,8DAWC;AAMD,SAAgB,eAAe,CAAoC,MAAS;IAC1E,MAAM,MAAM,GAAG,EAAqB,CAAC;IACrC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;QACxB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YACxB,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAkC,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;SACzD;KACF;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AATD,0CASC;AAED,SAAgB,qBAAqB,CAAC,YAIrC;IACC,IAAI,YAAY,CAAC,SAAS,CAAC,WAAW;QAAE,OAAO,YAAY,CAAC,SAAS,CAAC,WAAW,CAAC;IAClF,OAAO,YAAY,CAAC,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACpG,CAAC;AAPD,sDAOC;AAED,SAAgB,6BAA6B,CAC3C,OAAkC,EAClC,MAEC,EACD,eAGc;IAEd,IAAI,IAAA,wBAAS,EAAC,MAAM,CAAC,oBAAoB,CAAC;QAAE,OAAO,SAAS,CAAC;IAC7D,IAAI,OAAO,MAAM,CAAC,oBAAoB,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,oBAAoB,CAAC;IACzF,OAAO,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,oBAA2E,CAAC,CAAC;AACtH,CAAC;AAbD,sEAaC;AAED,SAAgB,yBAAyB,CACvC,OAAkC,EAClC,MAAyE,EACzE,eAAuF;IAEvF,MAAM,MAAM,GAAG,IAAI,GAAG,EAA6B,CAAC;IACpD,IAAI,CAAC,MAAM,CAAC,UAAU;QAAE,OAAO,MAAM,CAAC;IACtC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;QACjD,IAAI,CAAC,IAAA,wCAAuB,EAAC,IAAI,CAAC;YAAE,SAAS;QAC7C,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;YACf,IAAI;YACJ,MAAM,EAAE,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SAC1D,CAAC,CAAC;KACJ;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAfD,8DAeC;AAED,MAAa,WAAW;IAAxB;QACmB,WAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IAOtD,CAAC;IALQ,UAAU,CAAC,IAAY;;QAC5B,MAAM,EAAE,GAAG,MAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,mCAAI,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;QAC9B,OAAO,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;IACzB,CAAC;CACF;AARD,kCAQC;AAED,SAAgB,0BAA0B,CAAC,GAAiC;IAC1E,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7C,CAAC;AAFD,gEAEC"}
@@ -0,0 +1,50 @@
1
+ import { ApiSchemaKind, ApiSchemaAccessibility, ApiSchema, ApiSchemaProperty } from './api-types';
2
+ import { OpenApiTransformerContext } from './types';
3
+ import { Deref, OpenApiObject } from '../parse';
4
+ export declare function determineSchemaKind<T extends {
5
+ oneOf?: unknown;
6
+ allOf?: unknown;
7
+ anyOf?: unknown;
8
+ type?: string | string[];
9
+ }>(schema: T): ApiSchemaKind;
10
+ export declare function determineSchemaName(schema: {
11
+ title?: string;
12
+ $src: {
13
+ path: string;
14
+ };
15
+ }, id: string): {
16
+ name: string;
17
+ isGenerated: boolean;
18
+ };
19
+ export declare function determineSchemaAccessibility(schema: {
20
+ readOnly?: boolean;
21
+ writeOnly?: boolean;
22
+ }): ApiSchemaAccessibility;
23
+ export declare function updateSchemaAccessibility(accessibility: ApiSchemaAccessibility, schema: {
24
+ readOnly?: boolean;
25
+ writeOnly?: boolean;
26
+ }): ApiSchemaAccessibility;
27
+ type CustomFields<T extends Record<string, unknown>> = {
28
+ [K in keyof T as K extends `x-${string}` ? K : never]: T[K];
29
+ };
30
+ export declare function getCustomFields<T extends Record<string, unknown>>(schema: T): CustomFields<T>;
31
+ export declare function determineEndpointName(endpointInfo: {
32
+ method: string;
33
+ path: string;
34
+ operation: {
35
+ operationId?: string;
36
+ };
37
+ }): string;
38
+ export declare function transformAdditionalProperties<TAdditionalProperties>(context: OpenApiTransformerContext, schema: {
39
+ additionalProperties?: TAdditionalProperties;
40
+ }, transformSchema: (context: OpenApiTransformerContext, schema: Exclude<TAdditionalProperties, undefined | boolean>) => ApiSchema): boolean | ApiSchema | undefined;
41
+ export declare function transformSchemaProperties<TProperties>(context: OpenApiTransformerContext, schema: {
42
+ properties?: Record<string, TProperties>;
43
+ required?: string[];
44
+ }, transformSchema: (context: OpenApiTransformerContext, schema: TProperties) => ApiSchema): Map<string, ApiSchemaProperty>;
45
+ export declare class IdGenerator {
46
+ private readonly _idMap;
47
+ generateId(name: string): string;
48
+ }
49
+ export declare function getOpenApiObjectIdentifier(obj: Deref<OpenApiObject<string>>): string;
50
+ export {};
@@ -0,0 +1,108 @@
1
+ import { isOpenApiObjectProperty } from '../internal-utils';
2
+ import { isNullish } from '../utils/common.utils';
3
+ export function determineSchemaKind(schema) {
4
+ if (schema.oneOf) {
5
+ return 'oneOf';
6
+ }
7
+ else if (schema.type !== 'object' && (schema.allOf || schema.anyOf)) {
8
+ return 'combined';
9
+ }
10
+ else if (Array.isArray(schema.type)) {
11
+ return 'multi-type';
12
+ }
13
+ else if (schema.type === 'object' ||
14
+ schema.type === 'string' ||
15
+ schema.type === 'boolean' ||
16
+ schema.type === 'null' ||
17
+ schema.type === 'number' ||
18
+ schema.type === 'integer' ||
19
+ schema.type === 'array') {
20
+ return schema.type;
21
+ }
22
+ return 'unknown';
23
+ }
24
+ export function determineSchemaName(schema, id) {
25
+ if (schema.title)
26
+ return { name: schema.title, isGenerated: false };
27
+ if (!schema.$src) {
28
+ console.log('woot?');
29
+ }
30
+ const schemaNameMatch = schema.$src.path.match(/(?<=\/components\/schemas\/|\/definitions\/)[^/]+$/i);
31
+ if (schemaNameMatch) {
32
+ return { name: schemaNameMatch[0], isGenerated: false };
33
+ }
34
+ const responseMatch = schema.$src.path.match(/\/paths\/(?<path>.+)\/(?<method>.+)\/responses\/(?<status>\d+)\//);
35
+ if (responseMatch && responseMatch.groups) {
36
+ const { path, method, status } = responseMatch.groups;
37
+ return { name: `${method}_${path.replace(/\//g, '_')}_${status}_Response`, isGenerated: true };
38
+ }
39
+ return { name: id, isGenerated: true };
40
+ }
41
+ export function determineSchemaAccessibility(schema) {
42
+ if (schema.readOnly === true) {
43
+ return schema.writeOnly === true ? 'none' : 'readOnly';
44
+ }
45
+ else {
46
+ return schema.writeOnly === true ? 'writeOnly' : 'all';
47
+ }
48
+ }
49
+ export function updateSchemaAccessibility(accessibility, schema) {
50
+ if (accessibility === 'none')
51
+ return 'none';
52
+ if (accessibility === 'readOnly')
53
+ return schema.writeOnly === true ? 'none' : 'readOnly';
54
+ if (accessibility === 'writeOnly')
55
+ return schema.readOnly === true ? 'none' : 'writeOnly';
56
+ return determineSchemaAccessibility(schema);
57
+ }
58
+ export function getCustomFields(schema) {
59
+ const result = {};
60
+ for (const key in schema) {
61
+ if (key.startsWith('x-')) {
62
+ const name = key.substring(2);
63
+ result[name] = schema[key];
64
+ }
65
+ }
66
+ return result;
67
+ }
68
+ export function determineEndpointName(endpointInfo) {
69
+ if (endpointInfo.operation.operationId)
70
+ return endpointInfo.operation.operationId;
71
+ return endpointInfo.method + endpointInfo.path.replace(/\{([^}]+)\}/g, ':$1').replace(/\//g, '_');
72
+ }
73
+ export function transformAdditionalProperties(context, schema, transformSchema) {
74
+ if (isNullish(schema.additionalProperties))
75
+ return undefined;
76
+ if (typeof schema.additionalProperties === 'boolean')
77
+ return schema.additionalProperties;
78
+ return transformSchema(context, schema.additionalProperties);
79
+ }
80
+ export function transformSchemaProperties(context, schema, transformSchema) {
81
+ const result = new Map();
82
+ if (!schema.properties)
83
+ return result;
84
+ for (const name of Object.keys(schema.properties)) {
85
+ if (!isOpenApiObjectProperty(name))
86
+ continue;
87
+ result.set(name, {
88
+ name,
89
+ schema: transformSchema(context, schema.properties[name]),
90
+ });
91
+ }
92
+ return result;
93
+ }
94
+ export class IdGenerator {
95
+ constructor() {
96
+ this._idMap = new Map();
97
+ }
98
+ generateId(name) {
99
+ var _a;
100
+ const id = (_a = this._idMap.get(name)) !== null && _a !== void 0 ? _a : 1;
101
+ this._idMap.set(name, id + 1);
102
+ return `${name}-${id}`;
103
+ }
104
+ }
105
+ export function getOpenApiObjectIdentifier(obj) {
106
+ return obj.$src.file + '#' + obj.$src.path;
107
+ }
108
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../../../packages/core/src/lib/transform/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./api-types"), exports);
5
+ tslib_1.__exportStar(require("./transformer"), exports);
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../../../../../packages/core/src/lib/transform/index.ts"],"names":[],"mappings":";;;AAAA,sDAA4B;AAC5B,wDAA8B"}
@@ -0,0 +1,2 @@
1
+ export * from './api-types';
2
+ export * from './transformer';
@@ -0,0 +1,3 @@
1
+ export * from './api-types';
2
+ export * from './transformer';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/core/src/lib/transform/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.transformDocument = void 0;
4
+ const helpers_1 = require("./helpers");
5
+ function transformDocument(context, document) {
6
+ var _a;
7
+ for (const tag of (_a = document.tags) !== null && _a !== void 0 ? _a : []) {
8
+ transformTag(context, tag);
9
+ }
10
+ }
11
+ exports.transformDocument = transformDocument;
12
+ function transformTag(context, tag, isReference = false) {
13
+ var _a;
14
+ const openApiObjectId = (0, helpers_1.getOpenApiObjectIdentifier)(tag);
15
+ const existing = context.transformed.services.get(openApiObjectId);
16
+ if (existing)
17
+ return existing;
18
+ const ref = tag.$ref ? transformTag(context, tag.$ref, true) : undefined;
19
+ const id = context.idGenerator.generateId('service');
20
+ const service = {
21
+ $src: Object.assign(Object.assign({}, tag.$src), { component: tag }),
22
+ $ref: ref,
23
+ id,
24
+ name: (_a = tag.name) !== null && _a !== void 0 ? _a : id,
25
+ description: tag.description,
26
+ endpoints: [],
27
+ };
28
+ context.transformed.services.set(openApiObjectId, service);
29
+ if (!isReference)
30
+ context.services.set(service.name, service);
31
+ return service;
32
+ }
33
+ //# sourceMappingURL=transform-document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-document.cjs","sourceRoot":"","sources":["../../../../../../packages/core/src/lib/transform/transform-document.ts"],"names":[],"mappings":";;;AACA,uCAAuD;AAIvD,SAAgB,iBAAiB,CAAC,OAAkC,EAAE,QAAgC;;IACpG,KAAK,MAAM,GAAG,IAAI,MAAA,QAAQ,CAAC,IAAI,mCAAI,EAAE,EAAE;QACrC,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;KAC5B;AACH,CAAC;AAJD,8CAIC;AAED,SAAS,YAAY,CAAC,OAAkC,EAAE,GAAsB,EAAE,WAAW,GAAG,KAAK;;IACnG,MAAM,eAAe,GAAG,IAAA,oCAA0B,EAAC,GAAG,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACnE,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACrD,MAAM,OAAO,GAAe;QAC1B,IAAI,kCACC,GAAG,CAAC,IAAI,KACX,SAAS,EAAE,GAAG,GACf;QACD,IAAI,EAAE,GAAG;QACT,EAAE;QACF,IAAI,EAAE,MAAA,GAAG,CAAC,IAAI,mCAAI,EAAE;QACpB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,SAAS,EAAE,EAAE;KACd,CAAC;IAEF,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAC3D,IAAI,CAAC,WAAW;QAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9D,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { OpenApiTransformerContext } from './types';
2
+ import { Deref, OpenApiDocument } from '../parse';
3
+ export declare function transformDocument(context: OpenApiTransformerContext, document: Deref<OpenApiDocument>): void;
@@ -0,0 +1,29 @@
1
+ import { getOpenApiObjectIdentifier } from './helpers';
2
+ export function transformDocument(context, document) {
3
+ var _a;
4
+ for (const tag of (_a = document.tags) !== null && _a !== void 0 ? _a : []) {
5
+ transformTag(context, tag);
6
+ }
7
+ }
8
+ function transformTag(context, tag, isReference = false) {
9
+ var _a;
10
+ const openApiObjectId = getOpenApiObjectIdentifier(tag);
11
+ const existing = context.transformed.services.get(openApiObjectId);
12
+ if (existing)
13
+ return existing;
14
+ const ref = tag.$ref ? transformTag(context, tag.$ref, true) : undefined;
15
+ const id = context.idGenerator.generateId('service');
16
+ const service = {
17
+ $src: Object.assign(Object.assign({}, tag.$src), { component: tag }),
18
+ $ref: ref,
19
+ id,
20
+ name: (_a = tag.name) !== null && _a !== void 0 ? _a : id,
21
+ description: tag.description,
22
+ endpoints: [],
23
+ };
24
+ context.transformed.services.set(openApiObjectId, service);
25
+ if (!isReference)
26
+ context.services.set(service.name, service);
27
+ return service;
28
+ }
29
+ //# sourceMappingURL=transform-document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-document.js","sourceRoot":"","sources":["../../../../../../packages/core/src/lib/transform/transform-document.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAC;AAIvD,MAAM,UAAU,iBAAiB,CAAC,OAAkC,EAAE,QAAgC;;IACpG,KAAK,MAAM,GAAG,IAAI,MAAA,QAAQ,CAAC,IAAI,mCAAI,EAAE,EAAE;QACrC,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;KAC5B;AACH,CAAC;AAED,SAAS,YAAY,CAAC,OAAkC,EAAE,GAAsB,EAAE,WAAW,GAAG,KAAK;;IACnG,MAAM,eAAe,GAAG,0BAA0B,CAAC,GAAG,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACnE,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACrD,MAAM,OAAO,GAAe;QAC1B,IAAI,kCACC,GAAG,CAAC,IAAI,KACX,SAAS,EAAE,GAAG,GACf;QACD,IAAI,EAAE,GAAG;QACT,EAAE;QACF,IAAI,EAAE,MAAA,GAAG,CAAC,IAAI,mCAAI,EAAE;QACpB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,SAAS,EAAE,EAAE;KACd,CAAC;IAEF,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAC3D,IAAI,CAAC,WAAW;QAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9D,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,254 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.transformEndpoint = void 0;
4
+ const helpers_1 = require("./helpers");
5
+ const transform_schema_1 = require("./transform-schema");
6
+ const internal_utils_1 = require("../internal-utils");
7
+ function transformEndpoint(context, endpointInfo) {
8
+ var _a, _b, _c, _d;
9
+ const apiPath = transformApiPath(context, endpointInfo.path, endpointInfo.pathItem);
10
+ const endpoint = {
11
+ $src: Object.assign(Object.assign({}, endpointInfo.operation.$src), { component: endpointInfo.operation }),
12
+ $ref: undefined,
13
+ id: context.idGenerator.generateId('endpoint'),
14
+ name: (0, helpers_1.determineEndpointName)(endpointInfo),
15
+ path: endpointInfo.path,
16
+ pathInfo: apiPath,
17
+ method: endpointInfo.method,
18
+ summary: endpointInfo.operation.summary,
19
+ description: endpointInfo.operation.description,
20
+ parameters: combineParameters(apiPath.parameters, (_b = (_a = endpointInfo.operation.parameters) === null || _a === void 0 ? void 0 : _a.map((p) => transformParameter(context, p))) !== null && _b !== void 0 ? _b : []),
21
+ deprecated: (_c = endpointInfo.operation.deprecated) !== null && _c !== void 0 ? _c : false,
22
+ requestBody: endpointInfo.operation.requestBody
23
+ ? transformRequestBody(context, endpointInfo.operation.requestBody)
24
+ : undefined,
25
+ responses: transformResponses(context, endpointInfo.operation.responses),
26
+ tags: (_d = endpointInfo.operation.tags) !== null && _d !== void 0 ? _d : [],
27
+ custom: (0, helpers_1.getCustomFields)(endpointInfo.operation),
28
+ };
29
+ const tags = endpoint.tags.length === 0 ? [''] : endpoint.tags;
30
+ for (const tag of tags) {
31
+ let service = context.services.get(tag);
32
+ if (!service) {
33
+ const id = context.idGenerator.generateId('service');
34
+ service = {
35
+ $ref: undefined,
36
+ id,
37
+ name: tag || id,
38
+ description: undefined,
39
+ endpoints: [],
40
+ };
41
+ context.services.set(tag, service);
42
+ }
43
+ service.endpoints.push(endpoint);
44
+ }
45
+ apiPath[endpointInfo.method] = endpoint;
46
+ context.endpoints.set(`${endpointInfo.method}:${endpointInfo.path}`, endpoint);
47
+ return endpoint;
48
+ }
49
+ exports.transformEndpoint = transformEndpoint;
50
+ function transformApiPath(context, path, pathItem, isReference = false) {
51
+ var _a, _b;
52
+ const existingPath = context.paths.get(path);
53
+ if (existingPath)
54
+ return existingPath;
55
+ const openApiObjectId = (0, helpers_1.getOpenApiObjectIdentifier)(pathItem);
56
+ const existing = context.transformed.paths.get(openApiObjectId);
57
+ if (existing)
58
+ return existing;
59
+ const ref = pathItem.$ref ? transformApiPath(context, path, pathItem.$ref, true) : undefined;
60
+ const apiPath = {
61
+ $src: Object.assign(Object.assign({}, pathItem.$src), { component: pathItem }),
62
+ $ref: ref,
63
+ id: context.idGenerator.generateId('path'),
64
+ summary: pathItem.summary,
65
+ description: pathItem.description,
66
+ path: path,
67
+ parameters: (_b = (_a = pathItem.parameters) === null || _a === void 0 ? void 0 : _a.map((p) => transformParameter(context, p))) !== null && _b !== void 0 ? _b : [],
68
+ // HTTP methods are added later (see transformEndpoint)
69
+ get: undefined,
70
+ put: undefined,
71
+ post: undefined,
72
+ delete: undefined,
73
+ options: undefined,
74
+ head: undefined,
75
+ patch: undefined,
76
+ trace: undefined,
77
+ };
78
+ context.transformed.paths.set(openApiObjectId, apiPath);
79
+ if (!isReference)
80
+ context.paths.set(path, apiPath);
81
+ return apiPath;
82
+ }
83
+ function transformParameter(context, parameter) {
84
+ var _a, _b, _c;
85
+ const openApiObjectId = (0, helpers_1.getOpenApiObjectIdentifier)(parameter);
86
+ const existing = context.transformed.parameters.get(openApiObjectId);
87
+ if (existing)
88
+ return existing;
89
+ const ref = parameter.$ref ? transformParameter(context, parameter.$ref) : undefined;
90
+ const id = context.idGenerator.generateId('parameter');
91
+ const p = {
92
+ $src: Object.assign(Object.assign({}, parameter.$src), { component: parameter }),
93
+ $ref: ref,
94
+ id: id,
95
+ name: (_a = parameter.name) !== null && _a !== void 0 ? _a : id,
96
+ target: parameter.in,
97
+ description: parameter.description,
98
+ required: (_b = parameter.required) !== null && _b !== void 0 ? _b : false,
99
+ deprecated: (_c = parameter.deprecated) !== null && _c !== void 0 ? _c : false,
100
+ allowEmptyValue: parameter.allowEmptyValue,
101
+ style: parameter.style,
102
+ explode: parameter.explode,
103
+ allowReserved: parameter.allowReserved,
104
+ schema: parameter.schema ? (0, transform_schema_1.transformSchema)(context, parameter.schema) : undefined,
105
+ };
106
+ context.transformed.parameters.set(openApiObjectId, p);
107
+ return p;
108
+ }
109
+ function transformRequestBody(context, requestBody) {
110
+ var _a;
111
+ const openApiObjectId = (0, helpers_1.getOpenApiObjectIdentifier)(requestBody);
112
+ const existing = context.transformed.requestBodies.get(openApiObjectId);
113
+ if (existing)
114
+ return existing;
115
+ const ref = requestBody.$ref ? transformRequestBody(context, requestBody.$ref) : undefined;
116
+ const rb = {
117
+ $src: Object.assign(Object.assign({}, requestBody.$src), { component: requestBody }),
118
+ $ref: ref,
119
+ id: context.idGenerator.generateId('requestBody'),
120
+ description: requestBody.description,
121
+ required: (_a = requestBody.required) !== null && _a !== void 0 ? _a : false,
122
+ content: transformContent(context, requestBody.content),
123
+ };
124
+ context.transformed.requestBodies.set(openApiObjectId, rb);
125
+ return rb;
126
+ }
127
+ function transformResponses(context, responses) {
128
+ if (!responses)
129
+ return [];
130
+ const result = [];
131
+ for (const status of Object.keys(responses)) {
132
+ if (!(0, internal_utils_1.isOpenApiObjectProperty)(status))
133
+ continue;
134
+ result.push(transformResponse(context, responses[status], status));
135
+ }
136
+ return result;
137
+ }
138
+ function transformResponse(context, response, status) {
139
+ const openApiObjectId = (0, helpers_1.getOpenApiObjectIdentifier)(response);
140
+ const existing = context.transformed.responses.get(openApiObjectId);
141
+ if (existing)
142
+ return existing;
143
+ const ref = response.$ref ? transformResponse(context, response.$ref, status) : undefined;
144
+ const r = {
145
+ $src: Object.assign(Object.assign({}, response.$src), { component: response }),
146
+ $ref: ref,
147
+ id: context.idGenerator.generateId('response'),
148
+ statusCode: Number(status),
149
+ description: response.description,
150
+ headers: transformHeaders(context, response.headers),
151
+ contentOptions: transformContent(context, response.content),
152
+ };
153
+ context.transformed.responses.set(openApiObjectId, r);
154
+ return r;
155
+ }
156
+ function transformContent(context, content) {
157
+ if (!content)
158
+ return [];
159
+ const result = [];
160
+ for (const media of Object.keys(content)) {
161
+ if (!(0, internal_utils_1.isOpenApiObjectProperty)(media))
162
+ continue;
163
+ result.push(transformMediaType(context, content[media], media));
164
+ }
165
+ return result;
166
+ }
167
+ function transformMediaType(context, mediaType, media) {
168
+ const openApiObjectId = (0, helpers_1.getOpenApiObjectIdentifier)(mediaType);
169
+ const existing = context.transformed.content.get(openApiObjectId);
170
+ if (existing)
171
+ return existing;
172
+ const ref = mediaType.$ref ? transformMediaType(context, mediaType.$ref, media) : undefined;
173
+ const mt = {
174
+ $src: Object.assign(Object.assign({}, mediaType.$src), { component: mediaType }),
175
+ $ref: ref,
176
+ id: context.idGenerator.generateId('content'),
177
+ type: media,
178
+ schema: mediaType.schema ? (0, transform_schema_1.transformSchema)(context, mediaType.schema) : undefined,
179
+ };
180
+ context.transformed.content.set(openApiObjectId, mt);
181
+ return mt;
182
+ }
183
+ function combineParameters(pathParams, operationParams) {
184
+ const result = [...pathParams];
185
+ for (const opParam of operationParams) {
186
+ const existingParam = result.findIndex((p) => p.name === opParam.name);
187
+ if (existingParam >= 0) {
188
+ result[existingParam] = opParam;
189
+ }
190
+ else {
191
+ result.push(opParam);
192
+ }
193
+ }
194
+ return result;
195
+ }
196
+ function isSchema(obj) {
197
+ return obj && typeof obj === 'object' && obj['type'] !== undefined;
198
+ }
199
+ function transformHeaders(context, headers) {
200
+ if (!headers)
201
+ return [];
202
+ const result = [];
203
+ for (const name of Object.keys(headers)) {
204
+ if (!(0, internal_utils_1.isOpenApiObjectProperty)(name))
205
+ continue;
206
+ result.push(transformHeader(context, headers[name], name));
207
+ }
208
+ return result;
209
+ }
210
+ function transformHeader(context, header, name) {
211
+ var _a, _b;
212
+ const openApiObjectId = (0, helpers_1.getOpenApiObjectIdentifier)(header);
213
+ const existing = context.transformed.headers.get(openApiObjectId);
214
+ if (existing)
215
+ return existing;
216
+ let h;
217
+ const ref = header.$ref ? transformHeader(context, header.$ref, name) : undefined;
218
+ const id = context.idGenerator.generateId('header');
219
+ if (isSchema(header)) {
220
+ h = {
221
+ $src: Object.assign(Object.assign({}, header.$src), { component: header }),
222
+ $ref: ref,
223
+ id,
224
+ name,
225
+ description: header.description,
226
+ required: false,
227
+ deprecated: false,
228
+ allowEmptyValue: undefined,
229
+ style: undefined,
230
+ explode: undefined,
231
+ allowReserved: undefined,
232
+ schema: (0, transform_schema_1.transformSchema)(context, header),
233
+ };
234
+ }
235
+ else {
236
+ h = {
237
+ $src: Object.assign(Object.assign({}, header.$src), { component: header }),
238
+ $ref: ref,
239
+ id,
240
+ name,
241
+ description: header.description,
242
+ required: (_a = header.required) !== null && _a !== void 0 ? _a : false,
243
+ deprecated: (_b = header.deprecated) !== null && _b !== void 0 ? _b : false,
244
+ allowEmptyValue: header.allowEmptyValue,
245
+ style: header.style,
246
+ explode: header.explode,
247
+ allowReserved: header.allowReserved,
248
+ schema: header.schema ? (0, transform_schema_1.transformSchema)(context, header.schema) : undefined,
249
+ };
250
+ }
251
+ context.transformed.headers.set(openApiObjectId, h);
252
+ return h;
253
+ }
254
+ //# sourceMappingURL=transform-endpoint.js.map