@alagoni97/cli 0.72.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 (244) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +336 -0
  3. package/bin/dev.cmd +3 -0
  4. package/bin/dev.mjs +3 -0
  5. package/bin/run.cmd +3 -0
  6. package/bin/run.mjs +4 -0
  7. package/dist/LoggingInterface.d.ts +123 -0
  8. package/dist/LoggingInterface.js +300 -0
  9. package/dist/PersistedConfig.d.ts +46 -0
  10. package/dist/PersistedConfig.js +94 -0
  11. package/dist/browser/adapters/output.d.ts +69 -0
  12. package/dist/browser/adapters/output.js +91 -0
  13. package/dist/browser/config.d.ts +18 -0
  14. package/dist/browser/config.js +59 -0
  15. package/dist/browser/generate.d.ts +20 -0
  16. package/dist/browser/generate.js +129 -0
  17. package/dist/browser/index.d.ts +17 -0
  18. package/dist/browser/index.js +26 -0
  19. package/dist/browser/parser.d.ts +9 -0
  20. package/dist/browser/parser.js +61 -0
  21. package/dist/browser/shims/asyncapi-parser.d.ts +30 -0
  22. package/dist/browser/shims/asyncapi-parser.js +52 -0
  23. package/dist/browser/shims/fs.d.ts +190 -0
  24. package/dist/browser/shims/fs.js +188 -0
  25. package/dist/browser/shims/json-schema-ref-parser.d.ts +73 -0
  26. package/dist/browser/shims/json-schema-ref-parser.js +246 -0
  27. package/dist/browser/shims/swagger-parser.d.ts +20 -0
  28. package/dist/browser/shims/swagger-parser.js +40 -0
  29. package/dist/codegen/configurationSchemaBuilder.d.ts +15 -0
  30. package/dist/codegen/configurationSchemaBuilder.js +48 -0
  31. package/dist/codegen/configurations.d.ts +29 -0
  32. package/dist/codegen/configurations.js +260 -0
  33. package/dist/codegen/detection.d.ts +19 -0
  34. package/dist/codegen/detection.js +174 -0
  35. package/dist/codegen/errors.d.ts +111 -0
  36. package/dist/codegen/errors.js +352 -0
  37. package/dist/codegen/generators/generic/custom.d.ts +75 -0
  38. package/dist/codegen/generators/generic/custom.js +66 -0
  39. package/dist/codegen/generators/index.d.ts +14 -0
  40. package/dist/codegen/generators/index.js +42 -0
  41. package/dist/codegen/generators/typescript/channels/asyncapi.d.ts +10 -0
  42. package/dist/codegen/generators/typescript/channels/asyncapi.js +131 -0
  43. package/dist/codegen/generators/typescript/channels/index.d.ts +8 -0
  44. package/dist/codegen/generators/typescript/channels/index.js +142 -0
  45. package/dist/codegen/generators/typescript/channels/openapi.d.ts +9 -0
  46. package/dist/codegen/generators/typescript/channels/openapi.js +168 -0
  47. package/dist/codegen/generators/typescript/channels/protocols/amqp/index.d.ts +7 -0
  48. package/dist/codegen/generators/typescript/channels/protocols/amqp/index.js +149 -0
  49. package/dist/codegen/generators/typescript/channels/protocols/amqp/publishExchange.d.ts +5 -0
  50. package/dist/codegen/generators/typescript/channels/protocols/amqp/publishExchange.js +106 -0
  51. package/dist/codegen/generators/typescript/channels/protocols/amqp/publishQueue.d.ts +3 -0
  52. package/dist/codegen/generators/typescript/channels/protocols/amqp/publishQueue.js +102 -0
  53. package/dist/codegen/generators/typescript/channels/protocols/amqp/subscribeQueue.d.ts +3 -0
  54. package/dist/codegen/generators/typescript/channels/protocols/amqp/subscribeQueue.js +133 -0
  55. package/dist/codegen/generators/typescript/channels/protocols/eventsource/express.d.ts +3 -0
  56. package/dist/codegen/generators/typescript/channels/protocols/eventsource/express.js +100 -0
  57. package/dist/codegen/generators/typescript/channels/protocols/eventsource/fetch.d.ts +5 -0
  58. package/dist/codegen/generators/typescript/channels/protocols/eventsource/fetch.js +144 -0
  59. package/dist/codegen/generators/typescript/channels/protocols/eventsource/index.d.ts +6 -0
  60. package/dist/codegen/generators/typescript/channels/protocols/eventsource/index.js +132 -0
  61. package/dist/codegen/generators/typescript/channels/protocols/http/client.d.ts +10 -0
  62. package/dist/codegen/generators/typescript/channels/protocols/http/client.js +224 -0
  63. package/dist/codegen/generators/typescript/channels/protocols/http/common-types.d.ts +14 -0
  64. package/dist/codegen/generators/typescript/channels/protocols/http/common-types.js +800 -0
  65. package/dist/codegen/generators/typescript/channels/protocols/http/index.d.ts +8 -0
  66. package/dist/codegen/generators/typescript/channels/protocols/http/index.js +96 -0
  67. package/dist/codegen/generators/typescript/channels/protocols/http/security.d.ts +48 -0
  68. package/dist/codegen/generators/typescript/channels/protocols/http/security.js +491 -0
  69. package/dist/codegen/generators/typescript/channels/protocols/kafka/index.d.ts +6 -0
  70. package/dist/codegen/generators/typescript/channels/protocols/kafka/index.js +127 -0
  71. package/dist/codegen/generators/typescript/channels/protocols/kafka/publish.d.ts +3 -0
  72. package/dist/codegen/generators/typescript/channels/protocols/kafka/publish.js +108 -0
  73. package/dist/codegen/generators/typescript/channels/protocols/kafka/subscribe.d.ts +3 -0
  74. package/dist/codegen/generators/typescript/channels/protocols/kafka/subscribe.js +154 -0
  75. package/dist/codegen/generators/typescript/channels/protocols/kafka/utils.d.ts +11 -0
  76. package/dist/codegen/generators/typescript/channels/protocols/kafka/utils.js +58 -0
  77. package/dist/codegen/generators/typescript/channels/protocols/mqtt/index.d.ts +6 -0
  78. package/dist/codegen/generators/typescript/channels/protocols/mqtt/index.js +113 -0
  79. package/dist/codegen/generators/typescript/channels/protocols/mqtt/publish.d.ts +3 -0
  80. package/dist/codegen/generators/typescript/channels/protocols/mqtt/publish.js +99 -0
  81. package/dist/codegen/generators/typescript/channels/protocols/mqtt/subscribe.d.ts +3 -0
  82. package/dist/codegen/generators/typescript/channels/protocols/mqtt/subscribe.js +186 -0
  83. package/dist/codegen/generators/typescript/channels/protocols/nats/corePublish.d.ts +3 -0
  84. package/dist/codegen/generators/typescript/channels/protocols/nats/corePublish.js +90 -0
  85. package/dist/codegen/generators/typescript/channels/protocols/nats/coreReply.d.ts +3 -0
  86. package/dist/codegen/generators/typescript/channels/protocols/nats/coreReply.js +142 -0
  87. package/dist/codegen/generators/typescript/channels/protocols/nats/coreRequest.d.ts +3 -0
  88. package/dist/codegen/generators/typescript/channels/protocols/nats/coreRequest.js +100 -0
  89. package/dist/codegen/generators/typescript/channels/protocols/nats/coreSubscribe.d.ts +3 -0
  90. package/dist/codegen/generators/typescript/channels/protocols/nats/coreSubscribe.js +143 -0
  91. package/dist/codegen/generators/typescript/channels/protocols/nats/index.d.ts +11 -0
  92. package/dist/codegen/generators/typescript/channels/protocols/nats/index.js +224 -0
  93. package/dist/codegen/generators/typescript/channels/protocols/nats/jetstreamPublish.d.ts +3 -0
  94. package/dist/codegen/generators/typescript/channels/protocols/nats/jetstreamPublish.js +89 -0
  95. package/dist/codegen/generators/typescript/channels/protocols/nats/jetstreamPullSubscribe.d.ts +3 -0
  96. package/dist/codegen/generators/typescript/channels/protocols/nats/jetstreamPullSubscribe.js +146 -0
  97. package/dist/codegen/generators/typescript/channels/protocols/nats/jetstreamPushSubscription.d.ts +3 -0
  98. package/dist/codegen/generators/typescript/channels/protocols/nats/jetstreamPushSubscription.js +149 -0
  99. package/dist/codegen/generators/typescript/channels/protocols/nats/utils.d.ts +35 -0
  100. package/dist/codegen/generators/typescript/channels/protocols/nats/utils.js +120 -0
  101. package/dist/codegen/generators/typescript/channels/protocols/websocket/index.d.ts +7 -0
  102. package/dist/codegen/generators/typescript/channels/protocols/websocket/index.js +152 -0
  103. package/dist/codegen/generators/typescript/channels/protocols/websocket/publish.d.ts +3 -0
  104. package/dist/codegen/generators/typescript/channels/protocols/websocket/publish.js +64 -0
  105. package/dist/codegen/generators/typescript/channels/protocols/websocket/register.d.ts +3 -0
  106. package/dist/codegen/generators/typescript/channels/protocols/websocket/register.js +115 -0
  107. package/dist/codegen/generators/typescript/channels/protocols/websocket/subscribe.d.ts +3 -0
  108. package/dist/codegen/generators/typescript/channels/protocols/websocket/subscribe.js +151 -0
  109. package/dist/codegen/generators/typescript/channels/types.d.ts +181 -0
  110. package/dist/codegen/generators/typescript/channels/types.js +131 -0
  111. package/dist/codegen/generators/typescript/channels/utils.d.ts +64 -0
  112. package/dist/codegen/generators/typescript/channels/utils.js +163 -0
  113. package/dist/codegen/generators/typescript/client/index.d.ts +8 -0
  114. package/dist/codegen/generators/typescript/client/index.js +61 -0
  115. package/dist/codegen/generators/typescript/client/protocols/nats/corePublish.d.ts +6 -0
  116. package/dist/codegen/generators/typescript/client/protocols/nats/corePublish.js +53 -0
  117. package/dist/codegen/generators/typescript/client/protocols/nats/coreSubscribe.d.ts +6 -0
  118. package/dist/codegen/generators/typescript/client/protocols/nats/coreSubscribe.js +90 -0
  119. package/dist/codegen/generators/typescript/client/protocols/nats/jetStreamPullSubscription.d.ts +6 -0
  120. package/dist/codegen/generators/typescript/client/protocols/nats/jetStreamPullSubscription.js +83 -0
  121. package/dist/codegen/generators/typescript/client/protocols/nats/jetstreamPublish.d.ts +6 -0
  122. package/dist/codegen/generators/typescript/client/protocols/nats/jetstreamPublish.js +54 -0
  123. package/dist/codegen/generators/typescript/client/protocols/nats/jetstreamPushSubscription.d.ts +6 -0
  124. package/dist/codegen/generators/typescript/client/protocols/nats/jetstreamPushSubscription.js +82 -0
  125. package/dist/codegen/generators/typescript/client/protocols/nats.d.ts +2 -0
  126. package/dist/codegen/generators/typescript/client/protocols/nats.js +182 -0
  127. package/dist/codegen/generators/typescript/client/types.d.ts +49 -0
  128. package/dist/codegen/generators/typescript/client/types.js +37 -0
  129. package/dist/codegen/generators/typescript/headers.d.ts +54 -0
  130. package/dist/codegen/generators/typescript/headers.js +138 -0
  131. package/dist/codegen/generators/typescript/index.d.ts +7 -0
  132. package/dist/codegen/generators/typescript/index.js +38 -0
  133. package/dist/codegen/generators/typescript/models.d.ts +21761 -0
  134. package/dist/codegen/generators/typescript/models.js +64 -0
  135. package/dist/codegen/generators/typescript/parameters.d.ts +37 -0
  136. package/dist/codegen/generators/typescript/parameters.js +101 -0
  137. package/dist/codegen/generators/typescript/payloads.d.ts +73 -0
  138. package/dist/codegen/generators/typescript/payloads.js +250 -0
  139. package/dist/codegen/generators/typescript/types.d.ts +34 -0
  140. package/dist/codegen/generators/typescript/types.js +70 -0
  141. package/dist/codegen/generators/typescript/utils.d.ts +38 -0
  142. package/dist/codegen/generators/typescript/utils.js +195 -0
  143. package/dist/codegen/index.d.ts +7 -0
  144. package/dist/codegen/index.js +38 -0
  145. package/dist/codegen/inputs/asyncapi/generators/headers.d.ts +3 -0
  146. package/dist/codegen/inputs/asyncapi/generators/headers.js +41 -0
  147. package/dist/codegen/inputs/asyncapi/generators/parameters.d.ts +14 -0
  148. package/dist/codegen/inputs/asyncapi/generators/parameters.js +120 -0
  149. package/dist/codegen/inputs/asyncapi/generators/payloads.d.ts +16 -0
  150. package/dist/codegen/inputs/asyncapi/generators/payloads.js +124 -0
  151. package/dist/codegen/inputs/asyncapi/generators/types.d.ts +9 -0
  152. package/dist/codegen/inputs/asyncapi/generators/types.js +61 -0
  153. package/dist/codegen/inputs/asyncapi/index.d.ts +1 -0
  154. package/dist/codegen/inputs/asyncapi/index.js +7 -0
  155. package/dist/codegen/inputs/asyncapi/parser.d.ts +4 -0
  156. package/dist/codegen/inputs/asyncapi/parser.js +90 -0
  157. package/dist/codegen/inputs/index.d.ts +3 -0
  158. package/dist/codegen/inputs/index.js +19 -0
  159. package/dist/codegen/inputs/jsonschema/generators/index.d.ts +1 -0
  160. package/dist/codegen/inputs/jsonschema/generators/index.js +5 -0
  161. package/dist/codegen/inputs/jsonschema/generators/models.d.ts +7 -0
  162. package/dist/codegen/inputs/jsonschema/generators/models.js +26 -0
  163. package/dist/codegen/inputs/jsonschema/index.d.ts +1 -0
  164. package/dist/codegen/inputs/jsonschema/index.js +7 -0
  165. package/dist/codegen/inputs/jsonschema/parser.d.ts +31 -0
  166. package/dist/codegen/inputs/jsonschema/parser.js +128 -0
  167. package/dist/codegen/inputs/openapi/generators/headers.d.ts +3 -0
  168. package/dist/codegen/inputs/openapi/generators/headers.js +101 -0
  169. package/dist/codegen/inputs/openapi/generators/parameters.d.ts +10 -0
  170. package/dist/codegen/inputs/openapi/generators/parameters.js +852 -0
  171. package/dist/codegen/inputs/openapi/generators/payloads.d.ts +3 -0
  172. package/dist/codegen/inputs/openapi/generators/payloads.js +231 -0
  173. package/dist/codegen/inputs/openapi/generators/types.d.ts +9 -0
  174. package/dist/codegen/inputs/openapi/generators/types.js +86 -0
  175. package/dist/codegen/inputs/openapi/index.d.ts +2 -0
  176. package/dist/codegen/inputs/openapi/index.js +8 -0
  177. package/dist/codegen/inputs/openapi/parser.d.ts +4 -0
  178. package/dist/codegen/inputs/openapi/parser.js +115 -0
  179. package/dist/codegen/inputs/openapi/security.d.ts +56 -0
  180. package/dist/codegen/inputs/openapi/security.js +193 -0
  181. package/dist/codegen/modelina/index.d.ts +2 -0
  182. package/dist/codegen/modelina/index.js +20 -0
  183. package/dist/codegen/modelina/presets/index.d.ts +3 -0
  184. package/dist/codegen/modelina/presets/index.js +14 -0
  185. package/dist/codegen/modelina/presets/primitives.d.ts +34 -0
  186. package/dist/codegen/modelina/presets/primitives.js +211 -0
  187. package/dist/codegen/modelina/presets/union.d.ts +33 -0
  188. package/dist/codegen/modelina/presets/union.js +197 -0
  189. package/dist/codegen/modelina/presets/validation.d.ts +66 -0
  190. package/dist/codegen/modelina/presets/validation.js +183 -0
  191. package/dist/codegen/modelina/types.d.ts +61845 -0
  192. package/dist/codegen/modelina/types.js +412 -0
  193. package/dist/codegen/output/filesystem.d.ts +30 -0
  194. package/dist/codegen/output/filesystem.js +61 -0
  195. package/dist/codegen/output/index.d.ts +16 -0
  196. package/dist/codegen/output/index.js +57 -0
  197. package/dist/codegen/output/memory.d.ts +54 -0
  198. package/dist/codegen/output/memory.js +81 -0
  199. package/dist/codegen/output/modelina.d.ts +30 -0
  200. package/dist/codegen/output/modelina.js +30 -0
  201. package/dist/codegen/output/types.d.ts +47 -0
  202. package/dist/codegen/output/types.js +6 -0
  203. package/dist/codegen/renderer.d.ts +13 -0
  204. package/dist/codegen/renderer.js +309 -0
  205. package/dist/codegen/schemaPostProcess.d.ts +25 -0
  206. package/dist/codegen/schemaPostProcess.js +38 -0
  207. package/dist/codegen/types.d.ts +285187 -0
  208. package/dist/codegen/types.js +177 -0
  209. package/dist/codegen/utils.d.ts +126 -0
  210. package/dist/codegen/utils.js +373 -0
  211. package/dist/commands/base.d.ts +18 -0
  212. package/dist/commands/base.js +59 -0
  213. package/dist/commands/generate.d.ts +46 -0
  214. package/dist/commands/generate.js +305 -0
  215. package/dist/commands/init.d.ts +55 -0
  216. package/dist/commands/init.js +544 -0
  217. package/dist/commands/telemetry.d.ts +25 -0
  218. package/dist/commands/telemetry.js +115 -0
  219. package/dist/index.d.ts +29 -0
  220. package/dist/index.js +35 -0
  221. package/dist/telemetry/anonymize.d.ts +19 -0
  222. package/dist/telemetry/anonymize.js +73 -0
  223. package/dist/telemetry/collector.d.ts +26 -0
  224. package/dist/telemetry/collector.js +57 -0
  225. package/dist/telemetry/config.d.ts +32 -0
  226. package/dist/telemetry/config.js +97 -0
  227. package/dist/telemetry/events.d.ts +72 -0
  228. package/dist/telemetry/events.js +5 -0
  229. package/dist/telemetry/index.d.ts +46 -0
  230. package/dist/telemetry/index.js +91 -0
  231. package/dist/telemetry/notice.d.ts +8 -0
  232. package/dist/telemetry/notice.js +50 -0
  233. package/dist/telemetry/sender.d.ts +14 -0
  234. package/dist/telemetry/sender.js +125 -0
  235. package/dist/utils/gitignore.d.ts +66 -0
  236. package/dist/utils/gitignore.js +111 -0
  237. package/dist/utils/inputSource.d.ts +3 -0
  238. package/dist/utils/inputSource.js +26 -0
  239. package/dist/utils/refResolvers.d.ts +29 -0
  240. package/dist/utils/refResolvers.js +83 -0
  241. package/dist/utils/remoteFetch.d.ts +18 -0
  242. package/dist/utils/remoteFetch.js +64 -0
  243. package/oclif.manifest.json +510 -0
  244. package/package.json +155 -0
@@ -0,0 +1,3 @@
1
+ import { OpenAPIV2, OpenAPIV3, OpenAPIV3_1 } from 'openapi-types';
2
+ import { ProcessedPayloadSchemaData } from '../../asyncapi/generators/payloads';
3
+ export declare function processOpenAPIPayloads(openapiDocument: OpenAPIV3.Document | OpenAPIV2.Document | OpenAPIV3_1.Document): ProcessedPayloadSchemaData;
@@ -0,0 +1,231 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.processOpenAPIPayloads = void 0;
4
+ const utils_1 = require("../../../generators/typescript/utils");
5
+ const utils_2 = require("../../../utils");
6
+ // Constants
7
+ const JSON_SCHEMA_DRAFT_07 = 'http://json-schema.org/draft-07/schema';
8
+ // Helper function to extract schema from OpenAPI 2.0 response
9
+ function extractOpenAPI2ResponseSchema(response) {
10
+ if (response.schema) {
11
+ return response.schema;
12
+ }
13
+ return null;
14
+ }
15
+ // Helper function to extract schema from OpenAPI 3.x response content
16
+ function extractOpenAPI3ResponseSchema(response) {
17
+ if (!response.content) {
18
+ return null;
19
+ }
20
+ // Prioritize JSON content types
21
+ const jsonContentTypes = [
22
+ 'application/json',
23
+ 'application/vnd.api+json',
24
+ 'text/json'
25
+ ];
26
+ // Fall back to any content type with a schema
27
+ for (const [contentType, mediaType] of Object.entries(response.content)) {
28
+ if (!jsonContentTypes.includes(contentType)) {
29
+ continue;
30
+ }
31
+ if (mediaType.schema) {
32
+ return mediaType.schema;
33
+ }
34
+ }
35
+ return null;
36
+ }
37
+ // Helper function to extract schema from OpenAPI 2.0 request body parameter
38
+ function extractOpenAPI2RequestSchema(parameters) {
39
+ const bodyParam = parameters.find((param) => param.in === 'body');
40
+ return bodyParam?.schema ?? null;
41
+ }
42
+ // Helper function to extract schema from OpenAPI 3.x request body
43
+ function extractOpenAPI3RequestSchema(requestBody) {
44
+ if (!requestBody?.content) {
45
+ return null;
46
+ }
47
+ // Prioritize JSON content types
48
+ const jsonContentTypes = [
49
+ 'application/json',
50
+ 'application/vnd.api+json',
51
+ 'text/json'
52
+ ];
53
+ // Fall back to any content type with a schema
54
+ for (const [contentType, mediaType] of Object.entries(requestBody.content)) {
55
+ if (!jsonContentTypes.includes(contentType)) {
56
+ continue;
57
+ }
58
+ if (mediaType.schema) {
59
+ return mediaType.schema;
60
+ }
61
+ }
62
+ return null;
63
+ }
64
+ // Helper function to create a union schema from multiple response schemas
65
+ function createUnionSchema(schemas, baseId, hasStatusCodes = false) {
66
+ if (schemas.length === 0) {
67
+ return null;
68
+ }
69
+ if (schemas.length === 1) {
70
+ const schema = schemas[0];
71
+ return {
72
+ ...schema,
73
+ $id: schema.$id ?? baseId,
74
+ $schema: JSON_SCHEMA_DRAFT_07
75
+ };
76
+ }
77
+ const unionSchema = {
78
+ type: 'object',
79
+ oneOf: schemas,
80
+ $id: baseId,
81
+ $schema: JSON_SCHEMA_DRAFT_07
82
+ };
83
+ if (hasStatusCodes) {
84
+ unionSchema['x-modelina-has-status-codes'] = true;
85
+ }
86
+ return unionSchema;
87
+ }
88
+ // Extract payload schemas from OpenAPI operations
89
+ function extractPayloadsFromOperations(paths) {
90
+ const requestPayloads = {};
91
+ const responsePayloads = {};
92
+ for (const [pathKey, pathItem] of Object.entries(paths)) {
93
+ if (!pathItem) {
94
+ continue;
95
+ }
96
+ for (const [method, operation] of Object.entries(pathItem)) {
97
+ if (!operation || typeof operation !== 'object') {
98
+ continue;
99
+ }
100
+ const operationObj = operation;
101
+ const operationId = operationObj.operationId ??
102
+ `${method}${pathKey.replace(/[^a-zA-Z0-9]/g, '')}`;
103
+ // Extract request payload schema
104
+ let requestSchema = null;
105
+ // Check if this is OpenAPI 2.0 vs 3.x based on the structure
106
+ if ('parameters' in operationObj && operationObj.parameters) {
107
+ // OpenAPI 2.0 style
108
+ requestSchema = extractOpenAPI2RequestSchema(operationObj.parameters);
109
+ }
110
+ else if ('requestBody' in operationObj && operationObj.requestBody) {
111
+ // OpenAPI 3.x style
112
+ requestSchema = extractOpenAPI3RequestSchema(operationObj.requestBody);
113
+ }
114
+ if (requestSchema) {
115
+ const requestSchemaId = (0, utils_1.pascalCase)(`${operationId}_Request`);
116
+ requestPayloads[operationId] = {
117
+ schema: {
118
+ ...requestSchema,
119
+ $id: requestSchemaId,
120
+ $schema: JSON_SCHEMA_DRAFT_07
121
+ },
122
+ schemaId: requestSchemaId
123
+ };
124
+ }
125
+ // Extract response payload schemas
126
+ if (operationObj.responses) {
127
+ const responseSchemas = [];
128
+ let hasStatusCodes = false;
129
+ for (const [statusCode, response] of Object.entries(operationObj.responses)) {
130
+ if (!response || typeof response !== 'object') {
131
+ continue;
132
+ }
133
+ let responseSchema = null;
134
+ // Determine if this is OpenAPI 2.0 or 3.x response
135
+ if ('schema' in response) {
136
+ // OpenAPI 2.0 style
137
+ responseSchema = extractOpenAPI2ResponseSchema(response);
138
+ }
139
+ else {
140
+ // OpenAPI 3.x style
141
+ responseSchema = extractOpenAPI3ResponseSchema(response);
142
+ }
143
+ if (responseSchema) {
144
+ // Add status code information for proper discrimination
145
+ if (statusCode !== 'default' && !isNaN(Number(statusCode))) {
146
+ hasStatusCodes = true;
147
+ responseSchema['x-modelina-status-codes'] = {
148
+ code: Number(statusCode)
149
+ };
150
+ }
151
+ responseSchemas.push({
152
+ ...responseSchema,
153
+ $id: `${operationId}_Response_${statusCode}`
154
+ });
155
+ }
156
+ }
157
+ if (responseSchemas.length > 0) {
158
+ const responseSchemaId = (0, utils_1.pascalCase)(`${operationId}_Response`);
159
+ const unionSchema = createUnionSchema(responseSchemas, responseSchemaId, hasStatusCodes);
160
+ if (unionSchema) {
161
+ responsePayloads[`${operationId}_Response`] = {
162
+ schema: unionSchema,
163
+ schemaId: responseSchemaId
164
+ };
165
+ }
166
+ }
167
+ }
168
+ }
169
+ }
170
+ return { requestPayloads, responsePayloads };
171
+ }
172
+ // Helper function to extract schemas from components/definitions
173
+ function extractComponentSchemas(openapiDocument) {
174
+ const componentSchemas = [];
175
+ // OpenAPI 3.x components
176
+ if ('components' in openapiDocument && openapiDocument.components?.schemas) {
177
+ for (const [schemaName, schema] of Object.entries(openapiDocument.components.schemas)) {
178
+ if (schema && typeof schema === 'object') {
179
+ componentSchemas.push({
180
+ schema: {
181
+ ...schema,
182
+ $id: schemaName,
183
+ $schema: JSON_SCHEMA_DRAFT_07
184
+ },
185
+ schemaId: schemaName
186
+ });
187
+ }
188
+ }
189
+ }
190
+ // OpenAPI 2.0 definitions
191
+ if ('definitions' in openapiDocument && openapiDocument.definitions) {
192
+ for (const [schemaName, schema] of Object.entries(openapiDocument.definitions)) {
193
+ if (schema && typeof schema === 'object') {
194
+ componentSchemas.push({
195
+ schema: {
196
+ ...schema,
197
+ $id: schemaName,
198
+ $schema: JSON_SCHEMA_DRAFT_07
199
+ },
200
+ schemaId: schemaName
201
+ });
202
+ }
203
+ }
204
+ }
205
+ return componentSchemas;
206
+ }
207
+ // OpenAPI input processor
208
+ function processOpenAPIPayloads(openapiDocument) {
209
+ const channelPayloads = {};
210
+ const operationPayloads = {};
211
+ const otherPayloads = [];
212
+ // Extract request and response payloads from operations
213
+ const { requestPayloads, responsePayloads } = extractPayloadsFromOperations(openapiDocument.paths ?? {});
214
+ // Map request payloads to operation payloads
215
+ for (const [operationId, payload] of Object.entries(requestPayloads)) {
216
+ operationPayloads[operationId] = payload;
217
+ }
218
+ // Map response payloads to operation payloads
219
+ for (const [responseId, payload] of Object.entries(responsePayloads)) {
220
+ operationPayloads[responseId] = payload;
221
+ }
222
+ // Extract component schemas
223
+ const componentSchemas = extractComponentSchemas(openapiDocument);
224
+ otherPayloads.push(...componentSchemas);
225
+ return {
226
+ channelPayloads,
227
+ operationPayloads,
228
+ otherPayloads: (0, utils_2.onlyUnique)(otherPayloads)
229
+ };
230
+ }
231
+ exports.processOpenAPIPayloads = processOpenAPIPayloads;
@@ -0,0 +1,9 @@
1
+ import { OpenAPIV2, OpenAPIV3, OpenAPIV3_1 } from 'openapi-types';
2
+ import { TypescriptTypesGeneratorInternal } from '../../../generators/typescript/types';
3
+ import { GeneratedFile } from '../../../types';
4
+ export interface TypesGeneratorResult {
5
+ result: string;
6
+ /** Generated files with path and content */
7
+ files: GeneratedFile[];
8
+ }
9
+ export declare function generateOpenAPITypes(openapiDocument: OpenAPIV3.Document | OpenAPIV2.Document | OpenAPIV3_1.Document, generator: TypescriptTypesGeneratorInternal): Promise<TypesGeneratorResult>;
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateOpenAPITypes = void 0;
4
+ async function generateOpenAPITypes(openapiDocument, generator) {
5
+ const paths = openapiDocument.paths ?? {};
6
+ const allPaths = Object.keys(paths);
7
+ // Generate union type for all paths
8
+ const pathsUnion = allPaths
9
+ .map((pathStr) => {
10
+ return `'${pathStr}'`;
11
+ })
12
+ .join(' | ');
13
+ let result = `export type Paths = ${pathsUnion};\n`;
14
+ // Generate operation IDs and their corresponding paths
15
+ const operationIds = [];
16
+ const operationIdToPathMap = {};
17
+ const pathToOperationIdMap = {};
18
+ for (const [pathStr, pathItem] of Object.entries(paths)) {
19
+ const pathOperationIds = [];
20
+ for (const [method, operation] of Object.entries(pathItem)) {
21
+ const operationObj = operation;
22
+ if (operationObj &&
23
+ typeof operationObj === 'object' &&
24
+ method !== 'parameters') {
25
+ const operationId = operationObj.operationId ??
26
+ `${method}${pathStr.replace(/[^a-zA-Z0-9]/g, '')}`;
27
+ operationIds.push(operationId);
28
+ operationIdToPathMap[operationId] = pathStr;
29
+ pathOperationIds.push(operationId);
30
+ }
31
+ }
32
+ if (pathOperationIds.length > 0) {
33
+ pathToOperationIdMap[pathStr] = pathOperationIds;
34
+ }
35
+ }
36
+ // Generate operation IDs union type
37
+ if (operationIds.length > 0) {
38
+ const operationIdsUnion = operationIds.map((id) => `'${id}'`).join(' | ');
39
+ result += `export type OperationIds = ${operationIdsUnion};\n`;
40
+ // Generate helper function to get path from operation ID
41
+ const operationIdToPathSwitch = Object.entries(operationIdToPathMap)
42
+ .map(([operationId, pathStr]) => {
43
+ return `case '${operationId}':
44
+ return '${pathStr}';`;
45
+ })
46
+ .join('\n ');
47
+ const toPathPart = `export function ToPath(operationId: OperationIds): Paths {
48
+ switch (operationId) {
49
+ ${operationIdToPathSwitch}
50
+ default:
51
+ throw new Error('Unknown operation ID: ' + operationId);
52
+ }
53
+ }\n`;
54
+ // Generate helper function to get operation IDs from path
55
+ const pathToOperationIdSwitch = Object.entries(pathToOperationIdMap)
56
+ .map(([pathStr, operationIds]) => {
57
+ const operationIdsArray = operationIds
58
+ .map((id) => `'${id}'`)
59
+ .join(', ');
60
+ return `case '${pathStr}':
61
+ return [${operationIdsArray}];`;
62
+ })
63
+ .join('\n ');
64
+ const toOperationIdsPart = `export function ToOperationIds(path: Paths): OperationIds[] {
65
+ switch (path) {
66
+ ${pathToOperationIdSwitch}
67
+ default:
68
+ throw new Error('Unknown path: ' + path);
69
+ }
70
+ }\n`;
71
+ const pathsMap = `export const PathsMap: Record<OperationIds, Paths> = {
72
+ ${Object.entries(operationIdToPathMap)
73
+ .map(([operationId, pathStr]) => {
74
+ return ` '${operationId}': '${pathStr}'`;
75
+ })
76
+ .join(',\n')}
77
+ };\n`;
78
+ result += toPathPart + toOperationIdsPart + pathsMap;
79
+ }
80
+ const filePath = `${generator.outputPath}/Types.ts`;
81
+ return {
82
+ result,
83
+ files: [{ path: filePath, content: result }]
84
+ };
85
+ }
86
+ exports.generateOpenAPITypes = generateOpenAPITypes;
@@ -0,0 +1,2 @@
1
+ export { loadOpenapi, loadOpenapiDocument } from './parser';
2
+ export { processOpenAPIPayloads } from './generators/payloads';
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.processOpenAPIPayloads = exports.loadOpenapiDocument = exports.loadOpenapi = void 0;
4
+ var parser_1 = require("./parser");
5
+ Object.defineProperty(exports, "loadOpenapi", { enumerable: true, get: function () { return parser_1.loadOpenapi; } });
6
+ Object.defineProperty(exports, "loadOpenapiDocument", { enumerable: true, get: function () { return parser_1.loadOpenapiDocument; } });
7
+ var payloads_1 = require("./generators/payloads");
8
+ Object.defineProperty(exports, "processOpenAPIPayloads", { enumerable: true, get: function () { return payloads_1.processOpenAPIPayloads; } });
@@ -0,0 +1,4 @@
1
+ import { InputAuthConfig, RunGeneratorContext } from '../../types';
2
+ import { OpenAPIV2, OpenAPIV3, OpenAPIV3_1 } from 'openapi-types';
3
+ export declare function loadOpenapi(context: RunGeneratorContext): Promise<OpenAPIV3.Document | OpenAPIV2.Document | OpenAPIV3_1.Document>;
4
+ export declare function loadOpenapiDocument(documentPath: string, auth?: InputAuthConfig): Promise<OpenAPIV3.Document | OpenAPIV2.Document | OpenAPIV3_1.Document>;
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.loadOpenapiDocument = exports.loadOpenapi = void 0;
7
+ const openapi_parser_1 = require("@readme/openapi-parser");
8
+ const json_schema_ref_parser_1 = __importDefault(require("@apidevtools/json-schema-ref-parser"));
9
+ const fs_1 = require("fs");
10
+ const yaml_1 = require("yaml");
11
+ const LoggingInterface_1 = require("../../../LoggingInterface");
12
+ const errors_1 = require("../../errors");
13
+ const inputSource_1 = require("../../../utils/inputSource");
14
+ const remoteFetch_1 = require("../../../utils/remoteFetch");
15
+ const refResolvers_1 = require("../../../utils/refResolvers");
16
+ async function loadOpenapi(context) {
17
+ return loadOpenapiDocument(context.documentPath, context.inputAuth);
18
+ }
19
+ exports.loadOpenapi = loadOpenapi;
20
+ async function loadOpenapiDocument(documentPath, auth) {
21
+ LoggingInterface_1.Logger.verbose(`Loading OpenAPI document from ${documentPath}`);
22
+ try {
23
+ let documentContent;
24
+ let contentType = null;
25
+ if ((0, inputSource_1.isRemoteUrl)(documentPath)) {
26
+ const fetched = await (0, remoteFetch_1.fetchRemoteDocument)(documentPath, auth);
27
+ documentContent = fetched.content;
28
+ contentType = fetched.contentType;
29
+ }
30
+ else {
31
+ try {
32
+ documentContent = (0, fs_1.readFileSync)(documentPath, 'utf-8');
33
+ }
34
+ catch (error) {
35
+ throw (0, errors_1.createInputDocumentError)({
36
+ inputPath: documentPath,
37
+ inputType: 'openapi',
38
+ errorMessage: `Could not read file: ${error}`
39
+ });
40
+ }
41
+ }
42
+ const document = parseDocumentContent(documentContent, documentPath, contentType);
43
+ let dereferenced;
44
+ if ((0, inputSource_1.isRemoteUrl)(documentPath)) {
45
+ // Use $RefParser directly so cross-spec $refs go through our
46
+ // auth-aware http resolver. The root document is already in memory.
47
+ const refParser = new json_schema_ref_parser_1.default();
48
+ dereferenced = await refParser.dereference(documentPath, document, {
49
+ resolve: {
50
+ http: (0, refResolvers_1.createOpenapiRefParserResolver)(auth, { rootUrl: documentPath })
51
+ }
52
+ });
53
+ }
54
+ else {
55
+ // Local file path: keep the existing @readme/openapi-parser flow
56
+ // which handles file:// $refs via the built-in resolver.
57
+ const parsedDocument = await (0, openapi_parser_1.parse)(document);
58
+ const { dereference } = await import('@readme/openapi-parser');
59
+ dereferenced = await dereference(parsedDocument);
60
+ }
61
+ // Run @readme/openapi-parser validation on the (already-dereferenced)
62
+ // document so we still get OpenAPI 3.x-spec-aware error messages.
63
+ if ((0, inputSource_1.isRemoteUrl)(documentPath)) {
64
+ try {
65
+ await (0, openapi_parser_1.parse)(JSON.parse(JSON.stringify(dereferenced)));
66
+ }
67
+ catch (validationError) {
68
+ LoggingInterface_1.Logger.debug(`OpenAPI validation warning after dereferencing: ${validationError}`);
69
+ }
70
+ }
71
+ LoggingInterface_1.Logger.debug(`OpenAPI document loaded and dereferenced`);
72
+ return dereferenced;
73
+ }
74
+ catch (error) {
75
+ if (error?.type) {
76
+ // Already a CodegenError from a sub-step
77
+ throw error;
78
+ }
79
+ throw (0, errors_1.createInputDocumentError)({
80
+ inputPath: documentPath,
81
+ inputType: 'openapi',
82
+ errorMessage: error instanceof Error ? error.message : String(error)
83
+ });
84
+ }
85
+ }
86
+ exports.loadOpenapiDocument = loadOpenapiDocument;
87
+ function parseDocumentContent(content, documentPath, contentType) {
88
+ const ct = contentType?.toLowerCase() ?? '';
89
+ const isYaml = ct.includes('yaml') ||
90
+ documentPath.endsWith('.yaml') ||
91
+ documentPath.endsWith('.yml');
92
+ const isJson = ct.includes('json') || documentPath.endsWith('.json');
93
+ try {
94
+ if (isYaml && !isJson) {
95
+ return (0, yaml_1.parse)(content);
96
+ }
97
+ if (isJson) {
98
+ return JSON.parse(content);
99
+ }
100
+ // Ambiguous: try JSON first, then YAML.
101
+ try {
102
+ return JSON.parse(content);
103
+ }
104
+ catch {
105
+ return (0, yaml_1.parse)(content);
106
+ }
107
+ }
108
+ catch (error) {
109
+ throw (0, errors_1.createInputDocumentError)({
110
+ inputPath: documentPath,
111
+ inputType: 'openapi',
112
+ errorMessage: `Could not parse document: ${error}`
113
+ });
114
+ }
115
+ }
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Extracts security scheme information from OpenAPI 2.0/3.x documents.
3
+ * Converts security definitions to a normalized internal format.
4
+ */
5
+ import { OpenAPIV2, OpenAPIV3, OpenAPIV3_1 } from 'openapi-types';
6
+ /**
7
+ * Security scheme configuration options.
8
+ *
9
+ * Provides a normalized representation of security schemes from OpenAPI documents,
10
+ * supporting both OpenAPI 3.x securitySchemes and Swagger 2.0 securityDefinitions.
11
+ * This interface is used by generators to configure authentication in generated code.
12
+ */
13
+ export interface SecuritySchemeOptions {
14
+ /** The name/key of the security scheme as defined in the spec */
15
+ name: string;
16
+ /** Security scheme type */
17
+ type: 'apiKey' | 'http' | 'oauth2' | 'openIdConnect';
18
+ /** For apiKey type: the name of the key parameter */
19
+ apiKeyName?: string;
20
+ /** For apiKey type: where to place the key */
21
+ apiKeyIn?: 'header' | 'query' | 'cookie';
22
+ /** For http type: the authentication scheme (bearer, basic, etc.) */
23
+ httpScheme?: 'bearer' | 'basic' | string;
24
+ /** For http bearer: the format of the bearer token */
25
+ bearerFormat?: string;
26
+ /** For oauth2 type: the available flows */
27
+ oauth2Flows?: {
28
+ implicit?: {
29
+ authorizationUrl: string;
30
+ scopes: Record<string, string>;
31
+ };
32
+ password?: {
33
+ tokenUrl: string;
34
+ scopes: Record<string, string>;
35
+ };
36
+ clientCredentials?: {
37
+ tokenUrl: string;
38
+ scopes: Record<string, string>;
39
+ };
40
+ authorizationCode?: {
41
+ authorizationUrl: string;
42
+ tokenUrl: string;
43
+ scopes: Record<string, string>;
44
+ };
45
+ };
46
+ /** For openIdConnect type: the OpenID Connect discovery URL */
47
+ openIdConnectUrl?: string;
48
+ }
49
+ type OpenAPIDocument = OpenAPIV3.Document | OpenAPIV2.Document | OpenAPIV3_1.Document;
50
+ /**
51
+ * Extracts security schemes from an OpenAPI document.
52
+ * Handles both OpenAPI 3.x (components.securitySchemes) and
53
+ * Swagger 2.0 (securityDefinitions) formats.
54
+ */
55
+ export declare function extractSecuritySchemes(document: OpenAPIDocument): SecuritySchemeOptions[];
56
+ export {};