@automatons/parser 0.0.263 → 1.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 (210) hide show
  1. package/README.md +7 -45
  2. package/index.d.ts +206 -3
  3. package/index.js +633 -18
  4. package/index.js.map +1 -1
  5. package/package.json +39 -35
  6. package/converters/allOf.d.ts +0 -4
  7. package/converters/allOf.d.ts.map +0 -1
  8. package/converters/allOf.js +0 -11
  9. package/converters/allOf.js.map +0 -1
  10. package/converters/array.d.ts +0 -4
  11. package/converters/array.d.ts.map +0 -1
  12. package/converters/array.js +0 -14
  13. package/converters/array.js.map +0 -1
  14. package/converters/boolean.d.ts +0 -4
  15. package/converters/boolean.d.ts.map +0 -1
  16. package/converters/boolean.js +0 -10
  17. package/converters/boolean.js.map +0 -1
  18. package/converters/map.d.ts +0 -7
  19. package/converters/map.d.ts.map +0 -1
  20. package/converters/map.js +0 -6
  21. package/converters/map.js.map +0 -1
  22. package/converters/model.d.ts +0 -3
  23. package/converters/model.d.ts.map +0 -1
  24. package/converters/model.js +0 -12
  25. package/converters/model.js.map +0 -1
  26. package/converters/number.d.ts +0 -4
  27. package/converters/number.d.ts.map +0 -1
  28. package/converters/number.js +0 -12
  29. package/converters/number.js.map +0 -1
  30. package/converters/object.d.ts +0 -4
  31. package/converters/object.d.ts.map +0 -1
  32. package/converters/object.js +0 -11
  33. package/converters/object.js.map +0 -1
  34. package/converters/oneOf.d.ts +0 -4
  35. package/converters/oneOf.d.ts.map +0 -1
  36. package/converters/oneOf.js +0 -11
  37. package/converters/oneOf.js.map +0 -1
  38. package/converters/schema.d.ts +0 -4
  39. package/converters/schema.d.ts.map +0 -1
  40. package/converters/schema.js +0 -14
  41. package/converters/schema.js.map +0 -1
  42. package/converters/schemaModel.d.ts +0 -4
  43. package/converters/schemaModel.d.ts.map +0 -1
  44. package/converters/schemaModel.js +0 -12
  45. package/converters/schemaModel.js.map +0 -1
  46. package/converters/security.d.ts +0 -4
  47. package/converters/security.d.ts.map +0 -1
  48. package/converters/security.js +0 -19
  49. package/converters/security.js.map +0 -1
  50. package/converters/server.d.ts +0 -4
  51. package/converters/server.d.ts.map +0 -1
  52. package/converters/server.js +0 -12
  53. package/converters/server.js.map +0 -1
  54. package/converters/string.d.ts +0 -4
  55. package/converters/string.d.ts.map +0 -1
  56. package/converters/string.js +0 -12
  57. package/converters/string.js.map +0 -1
  58. package/extractors/index.d.ts +0 -4
  59. package/extractors/index.d.ts.map +0 -1
  60. package/extractors/index.js +0 -20
  61. package/extractors/index.js.map +0 -1
  62. package/extractors/model/allOf.d.ts +0 -4
  63. package/extractors/model/allOf.d.ts.map +0 -1
  64. package/extractors/model/allOf.js +0 -12
  65. package/extractors/model/allOf.js.map +0 -1
  66. package/extractors/model/array.d.ts +0 -4
  67. package/extractors/model/array.d.ts.map +0 -1
  68. package/extractors/model/array.js +0 -16
  69. package/extractors/model/array.js.map +0 -1
  70. package/extractors/model/index.d.ts +0 -4
  71. package/extractors/model/index.d.ts.map +0 -1
  72. package/extractors/model/index.js +0 -42
  73. package/extractors/model/index.js.map +0 -1
  74. package/extractors/model/object.d.ts +0 -4
  75. package/extractors/model/object.d.ts.map +0 -1
  76. package/extractors/model/object.js +0 -23
  77. package/extractors/model/object.js.map +0 -1
  78. package/extractors/model/of.d.ts +0 -8
  79. package/extractors/model/of.d.ts.map +0 -1
  80. package/extractors/model/of.js +0 -15
  81. package/extractors/model/of.js.map +0 -1
  82. package/extractors/model/oneOf.d.ts +0 -6
  83. package/extractors/model/oneOf.d.ts.map +0 -1
  84. package/extractors/model/oneOf.js +0 -12
  85. package/extractors/model/oneOf.js.map +0 -1
  86. package/extractors/model/ref.d.ts +0 -4
  87. package/extractors/model/ref.d.ts.map +0 -1
  88. package/extractors/model/ref.js +0 -14
  89. package/extractors/model/ref.js.map +0 -1
  90. package/extractors/model/type.d.ts +0 -6
  91. package/extractors/model/type.d.ts.map +0 -1
  92. package/extractors/model/type.js +0 -3
  93. package/extractors/model/type.js.map +0 -1
  94. package/extractors/path/index.d.ts +0 -8
  95. package/extractors/path/index.d.ts.map +0 -1
  96. package/extractors/path/index.js +0 -18
  97. package/extractors/path/index.js.map +0 -1
  98. package/extractors/path/mediaType.d.ts +0 -3
  99. package/extractors/path/mediaType.d.ts.map +0 -1
  100. package/extractors/path/mediaType.js +0 -11
  101. package/extractors/path/mediaType.js.map +0 -1
  102. package/extractors/path/method.d.ts +0 -4
  103. package/extractors/path/method.d.ts.map +0 -1
  104. package/extractors/path/method.js +0 -76
  105. package/extractors/path/method.js.map +0 -1
  106. package/extractors/path/parameter.d.ts +0 -4
  107. package/extractors/path/parameter.d.ts.map +0 -1
  108. package/extractors/path/parameter.js +0 -84
  109. package/extractors/path/parameter.js.map +0 -1
  110. package/extractors/path/requestBody.d.ts +0 -8
  111. package/extractors/path/requestBody.d.ts.map +0 -1
  112. package/extractors/path/requestBody.js +0 -35
  113. package/extractors/path/requestBody.js.map +0 -1
  114. package/extractors/path/response.d.ts +0 -5
  115. package/extractors/path/response.d.ts.map +0 -1
  116. package/extractors/path/response.js +0 -20
  117. package/extractors/path/response.js.map +0 -1
  118. package/extractors/path/security.d.ts +0 -4
  119. package/extractors/path/security.d.ts.map +0 -1
  120. package/extractors/path/security.js +0 -11
  121. package/extractors/path/security.js.map +0 -1
  122. package/extractors/path/status.d.ts +0 -3
  123. package/extractors/path/status.d.ts.map +0 -1
  124. package/extractors/path/status.js +0 -12
  125. package/extractors/path/status.js.map +0 -1
  126. package/extractors/path/type.d.ts +0 -20
  127. package/extractors/path/type.d.ts.map +0 -1
  128. package/extractors/path/type.js +0 -3
  129. package/extractors/path/type.js.map +0 -1
  130. package/extractors/schema/allOf.d.ts +0 -7
  131. package/extractors/schema/allOf.d.ts.map +0 -1
  132. package/extractors/schema/allOf.js +0 -17
  133. package/extractors/schema/allOf.js.map +0 -1
  134. package/extractors/schema/array.d.ts +0 -12
  135. package/extractors/schema/array.d.ts.map +0 -1
  136. package/extractors/schema/array.js +0 -31
  137. package/extractors/schema/array.js.map +0 -1
  138. package/extractors/schema/boolean.d.ts +0 -11
  139. package/extractors/schema/boolean.d.ts.map +0 -1
  140. package/extractors/schema/boolean.js +0 -16
  141. package/extractors/schema/boolean.js.map +0 -1
  142. package/extractors/schema/index.d.ts +0 -9
  143. package/extractors/schema/index.d.ts.map +0 -1
  144. package/extractors/schema/index.js +0 -41
  145. package/extractors/schema/index.js.map +0 -1
  146. package/extractors/schema/number.d.ts +0 -11
  147. package/extractors/schema/number.d.ts.map +0 -1
  148. package/extractors/schema/number.js +0 -16
  149. package/extractors/schema/number.js.map +0 -1
  150. package/extractors/schema/object.d.ts +0 -7
  151. package/extractors/schema/object.d.ts.map +0 -1
  152. package/extractors/schema/object.js +0 -17
  153. package/extractors/schema/object.js.map +0 -1
  154. package/extractors/schema/oneOf.d.ts +0 -7
  155. package/extractors/schema/oneOf.d.ts.map +0 -1
  156. package/extractors/schema/oneOf.js +0 -17
  157. package/extractors/schema/oneOf.js.map +0 -1
  158. package/extractors/schema/ref.d.ts +0 -7
  159. package/extractors/schema/ref.d.ts.map +0 -1
  160. package/extractors/schema/ref.js +0 -17
  161. package/extractors/schema/ref.js.map +0 -1
  162. package/extractors/schema/string.d.ts +0 -11
  163. package/extractors/schema/string.d.ts.map +0 -1
  164. package/extractors/schema/string.js +0 -16
  165. package/extractors/schema/string.js.map +0 -1
  166. package/index.d.ts.map +0 -1
  167. package/parser.d.ts +0 -8
  168. package/parser.d.ts.map +0 -1
  169. package/parser.js +0 -16
  170. package/parser.js.map +0 -1
  171. package/parsers/api.d.ts +0 -7
  172. package/parsers/api.d.ts.map +0 -1
  173. package/parsers/api.js +0 -30
  174. package/parsers/api.js.map +0 -1
  175. package/parsers/model.d.ts +0 -4
  176. package/parsers/model.d.ts.map +0 -1
  177. package/parsers/model.js +0 -12
  178. package/parsers/model.js.map +0 -1
  179. package/types/api.d.ts +0 -105
  180. package/types/api.d.ts.map +0 -1
  181. package/types/api.js +0 -3
  182. package/types/api.js.map +0 -1
  183. package/types/index.d.ts +0 -3
  184. package/types/index.d.ts.map +0 -1
  185. package/types/index.js +0 -19
  186. package/types/index.js.map +0 -1
  187. package/types/model.d.ts +0 -94
  188. package/types/model.d.ts.map +0 -1
  189. package/types/model.js +0 -3
  190. package/types/model.js.map +0 -1
  191. package/utils/method.d.ts +0 -4
  192. package/utils/method.d.ts.map +0 -1
  193. package/utils/method.js +0 -6
  194. package/utils/method.js.map +0 -1
  195. package/utils/omitCopy.d.ts +0 -2
  196. package/utils/omitCopy.d.ts.map +0 -1
  197. package/utils/omitCopy.js +0 -7
  198. package/utils/omitCopy.js.map +0 -1
  199. package/utils/overwrite.d.ts +0 -2
  200. package/utils/overwrite.d.ts.map +0 -1
  201. package/utils/overwrite.js +0 -6
  202. package/utils/overwrite.js.map +0 -1
  203. package/utils/sort.d.ts +0 -6
  204. package/utils/sort.d.ts.map +0 -1
  205. package/utils/sort.js +0 -6
  206. package/utils/sort.js.map +0 -1
  207. package/utils/uniq.d.ts +0 -2
  208. package/utils/uniq.d.ts.map +0 -1
  209. package/utils/uniq.js +0 -6
  210. package/utils/uniq.js.map +0 -1
package/index.js CHANGED
@@ -1,19 +1,634 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./parser"), exports);
18
- __exportStar(require("./types"), exports);
1
+ // src/converters/security.ts
2
+ import { camelCase } from "change-case";
3
+ var convertSecurity = (name, security, scopes) => {
4
+ switch (security.type) {
5
+ case "apiKey":
6
+ return { ...security, name: camelCase(name), key: security.name };
7
+ case "http":
8
+ return { ...security, name: camelCase(name) };
9
+ case "oauth2":
10
+ case "openIdConnect":
11
+ return { ...security, name: camelCase(name), scopes };
12
+ default:
13
+ return void 0;
14
+ }
15
+ };
16
+
17
+ // src/parsers/api.ts
18
+ import { camelCase as camelCase4, pascalCase as pascalCase9 } from "change-case";
19
+
20
+ // src/converters/map.ts
21
+ var convertMap = (map = {}) => Object.entries(map).map(([key, schema]) => ({ key, schema }));
22
+
23
+ // src/extractors/model/index.ts
24
+ import {
25
+ isSchemaAllOf as isSchemaAllOf2,
26
+ isSchemaArray as isSchemaArray2,
27
+ isSchemaBoolean as isSchemaBoolean2,
28
+ isSchemaInteger as isSchemaInteger2,
29
+ isSchemaNumber as isSchemaNumber2,
30
+ isSchemaObject as isSchemaObject2,
31
+ isSchemaOneOf as isSchemaOneOf2,
32
+ isSchemaRef as isSchemaRef2,
33
+ isSchemaString as isSchemaString2
34
+ } from "@automatons/tools";
35
+
36
+ // src/converters/schema.ts
37
+ var convertSchema = (schema) => ({
38
+ description: schema.description,
39
+ nullable: schema.nullable,
40
+ readOnly: schema.readOnly,
41
+ writeOnly: schema.writeOnly,
42
+ deprecated: schema.deprecated,
43
+ example: schema.example,
44
+ defaultValue: schema.default
45
+ });
46
+
47
+ // src/converters/boolean.ts
48
+ var convertBoolean = (schema) => ({
49
+ type: "boolean",
50
+ ...convertSchema(schema)
51
+ });
52
+
53
+ // src/converters/model.ts
54
+ import { camelCase as camelCase2, pascalCase } from "change-case";
55
+ var convertModel = (title, schema, imports = []) => ({
56
+ title: pascalCase(title),
57
+ filename: camelCase2(title),
58
+ imports,
59
+ schema
60
+ });
61
+
62
+ // src/converters/number.ts
63
+ var convertNumber = (schema) => ({
64
+ type: "number",
65
+ format: schema.format,
66
+ ...convertSchema(schema),
67
+ enum: schema.enum ?? []
68
+ });
69
+
70
+ // src/converters/string.ts
71
+ var convertString = (schema) => ({
72
+ type: "string",
73
+ format: schema.format,
74
+ enum: schema.enum ?? [],
75
+ ...convertSchema(schema)
76
+ });
77
+
78
+ // src/converters/allOf.ts
79
+ var convertAllOf = (schema, schemas) => ({
80
+ type: "allOf",
81
+ ...convertSchema(schema),
82
+ schemas
83
+ });
84
+
85
+ // src/extractors/schema/index.ts
86
+ import {
87
+ isSchemaAllOf,
88
+ isSchemaArray,
89
+ isSchemaBoolean,
90
+ isSchemaInteger,
91
+ isSchemaNumber,
92
+ isSchemaObject,
93
+ isSchemaOneOf,
94
+ isSchemaRef,
95
+ isSchemaString
96
+ } from "@automatons/tools";
97
+
98
+ // src/converters/schemaModel.ts
99
+ import { pascalCase as pascalCase2 } from "change-case";
100
+ var convertSchemaModel = (model, schema) => ({
101
+ type: "model",
102
+ name: pascalCase2(model),
103
+ ...convertSchema(schema)
104
+ });
105
+
106
+ // src/extractors/schema/number.ts
107
+ var extractNumberSchema = (title, schema) => {
108
+ if (schema.title) {
109
+ const modelSchema = convertSchemaModel(title, schema);
110
+ const models = [convertModel(title, convertNumber(schema))];
111
+ return { schema: modelSchema, models, imports: models };
112
+ }
113
+ return { schema: convertNumber(schema), models: [] };
114
+ };
115
+
116
+ // src/extractors/schema/array.ts
117
+ import { pascalCase as pascalCase3 } from "change-case";
118
+
119
+ // src/converters/array.ts
120
+ var convertArray = (schema, itemSchema) => ({
121
+ type: "array",
122
+ ...convertSchema(schema),
123
+ uniqueItems: schema.uniqueItems,
124
+ minItems: schema.minItems,
125
+ maxItems: schema.maxItems,
126
+ items: itemSchema
127
+ });
128
+
129
+ // src/extractors/schema/array.ts
130
+ var extractArraySchema = async (title, schema, context) => {
131
+ const models = [];
132
+ const imports = [];
133
+ let itemSchema = void 0;
134
+ if (schema.items) {
135
+ const { schema: shm, models: itemModels, imports: itemImports } = await extractSchema(pascalCase3([title, "Item"].join(" ")), schema.items, context);
136
+ itemSchema = shm;
137
+ models.push(...itemModels);
138
+ imports.push(...itemImports ?? []);
139
+ }
140
+ if (schema.title) {
141
+ const modelSchema = convertSchemaModel(title, schema);
142
+ const model = convertModel(title, convertArray(schema, itemSchema));
143
+ return { schema: modelSchema, models: [model, ...models], imports: [...models] };
144
+ }
145
+ return {
146
+ schema: convertArray(schema, itemSchema),
147
+ models,
148
+ imports
149
+ };
150
+ };
151
+
152
+ // src/extractors/schema/object.ts
153
+ var extractObjectSchema = async (title, schema, context) => {
154
+ const modelSchema = convertSchemaModel(title, schema);
155
+ const { model, insides } = await extractModel(title, schema, context);
156
+ return {
157
+ schema: modelSchema,
158
+ models: [model, ...insides],
159
+ imports: [convertModel(title, modelSchema)]
160
+ };
161
+ };
162
+
163
+ // src/extractors/schema/allOf.ts
164
+ var extractAllOfSchema = async (title, schema, context) => {
165
+ const modelSchema = convertSchemaModel(title, schema);
166
+ const { model, insides } = await extractModel(title, schema, context);
167
+ return {
168
+ schema: modelSchema,
169
+ models: [model, ...insides],
170
+ imports: [convertModel(title, modelSchema)]
171
+ };
172
+ };
173
+
174
+ // src/extractors/schema/oneOf.ts
175
+ var extractOneOfSchema = async (title, schema, context) => {
176
+ const modelSchema = convertSchemaModel(title, schema);
177
+ const { model, insides } = await extractModel(title, schema, context);
178
+ return {
179
+ schema: modelSchema,
180
+ models: [model, ...insides],
181
+ imports: [convertModel(title, modelSchema)]
182
+ };
183
+ };
184
+
185
+ // src/extractors/schema/ref.ts
186
+ import { referenceTitle } from "@automatons/tools";
187
+ var extractRefSchema = (title, schema) => {
188
+ const name = referenceTitle(schema) ?? title;
189
+ const modelSchema = convertSchemaModel(name, schema);
190
+ return {
191
+ schema: modelSchema,
192
+ models: [],
193
+ imports: [convertModel(name, modelSchema)]
194
+ };
195
+ };
196
+
197
+ // src/extractors/schema/string.ts
198
+ var extractStringSchema = (title, schema) => {
199
+ if (schema.title) {
200
+ const modelSchema = convertSchemaModel(title, schema);
201
+ const models = [convertModel(title, convertString(schema))];
202
+ return { schema: modelSchema, models, imports: models };
203
+ }
204
+ return { schema: convertString(schema), models: [] };
205
+ };
206
+
207
+ // src/extractors/schema/boolean.ts
208
+ var extractBooleanSchema = (title, schema) => {
209
+ if (schema.title) {
210
+ const modelSchema = convertSchemaModel(title, schema);
211
+ const models = [convertModel(title, convertBoolean(schema))];
212
+ return { schema: modelSchema, models, imports: models };
213
+ }
214
+ return { schema: convertBoolean(schema), models: [] };
215
+ };
216
+
217
+ // src/extractors/schema/index.ts
218
+ var extractSchema = async (title, schema, context) => {
219
+ if (isSchemaString(schema)) {
220
+ return extractStringSchema(title, schema);
221
+ } else if (isSchemaNumber(schema) || isSchemaInteger(schema)) {
222
+ return extractNumberSchema(title, schema);
223
+ } else if (isSchemaBoolean(schema)) {
224
+ return extractBooleanSchema(title, schema);
225
+ } else if (isSchemaArray(schema)) {
226
+ return extractArraySchema(title, schema, context);
227
+ } else if (isSchemaObject(schema)) {
228
+ return extractObjectSchema(title, schema, context);
229
+ } else if (isSchemaAllOf(schema)) {
230
+ return extractAllOfSchema(title, schema, context);
231
+ } else if (isSchemaOneOf(schema)) {
232
+ return extractOneOfSchema(title, schema, context);
233
+ } else if (isSchemaRef(schema)) {
234
+ return extractRefSchema(title, schema);
235
+ }
236
+ throw new Error(`Unknown type
237
+ ${JSON.stringify(schema, void 0, 2)}`);
238
+ };
239
+
240
+ // src/extractors/model/of.ts
241
+ import { pascalCase as pascalCase4 } from "change-case";
242
+ var extractOfModel = (title, schemas, context) => {
243
+ return schemas.map((item, index) => extractSchema(pascalCase4([title, index].join(" ")), item, context)).reduce(async (pre, cur) => ({
244
+ schemas: [...(await pre).schemas, (await cur).schema],
245
+ models: [...(await pre).models, ...(await cur).models],
246
+ imports: [...(await pre).imports, ...(await cur).imports ?? []]
247
+ }), Promise.resolve({ schemas: [], models: [], imports: [] }));
248
+ };
249
+
250
+ // src/extractors/model/allOf.ts
251
+ var extractAllOfModel = async (title, schema, context) => {
252
+ const { models, schemas, imports } = await extractOfModel(title, schema.allOf, context);
253
+ return { model: convertModel(title, convertAllOf(schema, schemas), imports), insides: models };
254
+ };
255
+
256
+ // src/extractors/model/array.ts
257
+ import { pascalCase as pascalCase5 } from "change-case";
258
+ var extractArrayModel = async (title, schema, context) => {
259
+ if (schema.items) {
260
+ const { schema: shm, models, imports } = await extractSchema(pascalCase5([title, "Item"].join(" ")), schema.items, context);
261
+ return { model: convertModel(title, convertArray(schema, shm), imports), insides: models };
262
+ }
263
+ return { model: convertModel(title, convertArray(schema)), insides: [] };
264
+ };
265
+
266
+ // src/extractors/model/object.ts
267
+ import { pascalCase as pascalCase6 } from "change-case";
268
+
269
+ // src/converters/object.ts
270
+ var convertObjectSchema = (schema, properties) => ({
271
+ type: "object",
272
+ ...convertSchema(schema),
273
+ properties
274
+ });
275
+
276
+ // src/extractors/model/object.ts
277
+ var extractObjectModel = async (title, schema, context) => {
278
+ const models = [];
279
+ const imports = [];
280
+ const propertySchemas = schema.properties;
281
+ const properties = await Promise.all(convertMap(propertySchemas).map(async ({ key, schema: propertySchema }) => {
282
+ const extractPropertySchema = await extractSchema(pascalCase6([title, key].join(" ")), propertySchema, context);
283
+ models.push(...extractPropertySchema.models);
284
+ imports.push(...extractPropertySchema.imports ?? []);
285
+ return { name: key, required: schema.required?.includes(key) ?? false, schema: extractPropertySchema.schema };
286
+ }));
287
+ return { model: convertModel(title, convertObjectSchema(schema, properties), imports), insides: models };
288
+ };
289
+
290
+ // src/converters/oneOf.ts
291
+ var convertOneOf = (schema, schemas) => ({
292
+ type: "oneOf",
293
+ ...convertSchema(schema),
294
+ schemas
295
+ });
296
+
297
+ // src/extractors/model/oneOf.ts
298
+ var extractOneOfModel = async (title, schema, context) => {
299
+ const { models, schemas, imports } = await extractOfModel(title, schema.oneOf, context);
300
+ return { model: convertModel(title, convertOneOf(schema, schemas), imports), insides: models };
301
+ };
302
+
303
+ // src/extractors/model/ref.ts
304
+ import {
305
+ referenceSchema,
306
+ referenceTitle as referenceTitle2
307
+ } from "@automatons/tools";
308
+ var extractRefModel = async (title, schema, context) => {
309
+ const refSchema = await referenceSchema(schema, context);
310
+ const refTitle = referenceTitle2(schema);
311
+ const ref = convertSchemaModel(refTitle, refSchema);
312
+ return { model: convertModel(title, ref, [convertModel(refTitle, ref)]), insides: [] };
313
+ };
314
+
315
+ // src/extractors/model/index.ts
316
+ var extractModel = async (title, schema, context) => {
317
+ if (isSchemaString2(schema)) {
318
+ return { model: convertModel(title, convertString(schema)), insides: [] };
319
+ } else if (isSchemaNumber2(schema) || isSchemaInteger2(schema)) {
320
+ return { model: convertModel(title, convertNumber(schema)), insides: [] };
321
+ } else if (isSchemaBoolean2(schema)) {
322
+ return { model: convertModel(title, convertBoolean(schema)), insides: [] };
323
+ } else if (isSchemaArray2(schema)) {
324
+ return extractArrayModel(title, schema, context);
325
+ } else if (isSchemaObject2(schema)) {
326
+ return extractObjectModel(title, schema, context);
327
+ } else if (isSchemaAllOf2(schema)) {
328
+ return extractAllOfModel(title, schema, context);
329
+ } else if (isSchemaOneOf2(schema)) {
330
+ return extractOneOfModel(title, schema, context);
331
+ } else if (isSchemaRef2(schema)) {
332
+ return extractRefModel(title, schema, context);
333
+ }
334
+ throw new Error(`Unknown type
335
+ ${JSON.stringify(schema, void 0, 2)}`);
336
+ };
337
+
338
+ // src/extractors/path/index.ts
339
+ import { HTTP_METHODS } from "@automatons/tools";
340
+
341
+ // src/extractors/path/method.ts
342
+ import { camelCase as camelCase3 } from "change-case";
343
+
344
+ // src/converters/server.ts
345
+ import { pascalCase as pascalCase7 } from "change-case";
346
+ var convertServer = (schema) => ({
347
+ name: pascalCase7(schema["x-name"] ?? schema.url),
348
+ url: schema.url,
349
+ values: convertMap(schema.variables).map(({ key, schema: schema2 }) => ({ name: key, defaultValue: schema2.default, enums: schema2.enum }))
350
+ });
351
+
352
+ // src/utils/sort.ts
353
+ var requiredCompare = (a, b) => a.required && b.required || !a.required && !b.required ? 0 : b.required ? 1 : -1;
354
+
355
+ // src/extractors/path/parameter.ts
356
+ import {
357
+ hasSchema,
358
+ isCookieParam,
359
+ isHeaderParam,
360
+ isPathParam,
361
+ isQueryParam,
362
+ referenceSchema as referenceSchema2
363
+ } from "@automatons/tools";
364
+ import { pascalCase as pascalCase8 } from "change-case";
365
+
366
+ // src/extractors/path/mediaType.ts
367
+ var extractMediaType = (schema) => Object.hasOwn(schema, "application/json") ? "application/json" : Object.hasOwn(schema, "application/*") ? "application/*" : Object.hasOwn(schema, "default") ? "default" : Object.keys(schema)[0] ?? "";
368
+
369
+ // src/extractors/path/parameter.ts
370
+ var extractParameter = (schema, { path, ...context }) => schema.map((param) => referenceSchema2(param, context)).map(async (param) => {
371
+ const _param = await param;
372
+ const paramSchema = hasSchema(_param) ? _param.schema : Object.keys(_param.content).length ? _param.content[extractMediaType(_param.content)]?.schema : void 0;
373
+ if (!paramSchema) return;
374
+ const { schema: schema2, models, imports } = await extractSchema(
375
+ pascalCase8([path, "parameter", _param.name].join(" ")),
376
+ paramSchema,
377
+ context
378
+ );
379
+ if (isPathParam(_param)) {
380
+ return {
381
+ parameter: {
382
+ name: _param.name,
383
+ schema: schema2,
384
+ style: _param.style,
385
+ explode: _param.explode
386
+ },
387
+ models,
388
+ imports
389
+ };
390
+ } else if (isQueryParam(_param)) {
391
+ return {
392
+ query: {
393
+ name: _param.name,
394
+ schema: schema2,
395
+ style: _param.style,
396
+ required: _param.required,
397
+ explode: _param.explode
398
+ },
399
+ models,
400
+ imports
401
+ };
402
+ } else if (isHeaderParam(_param)) {
403
+ return {
404
+ header: {
405
+ name: _param.name,
406
+ schema: schema2,
407
+ style: _param.style,
408
+ required: _param.required,
409
+ explode: _param.explode
410
+ },
411
+ models,
412
+ imports
413
+ };
414
+ } else if (isCookieParam(_param)) {
415
+ return {
416
+ cookie: {
417
+ name: _param.name,
418
+ schema: schema2,
419
+ style: _param.style,
420
+ required: _param.required,
421
+ explode: _param.explode
422
+ },
423
+ models,
424
+ imports
425
+ };
426
+ }
427
+ return;
428
+ }).reduce(async (pre, cur) => {
429
+ const previous = await pre;
430
+ const current = await cur;
431
+ return current ? {
432
+ parameters: current.parameter ? [...previous.parameters, current.parameter] : previous.parameters,
433
+ queries: current.query ? [...previous.queries, current.query] : previous.queries,
434
+ headers: current.header ? [...previous.headers, current.header] : previous.headers,
435
+ cookies: current.cookie ? [...previous.cookies, current.cookie] : previous.cookies,
436
+ models: [...previous.models, ...current.models],
437
+ imports: [...previous.imports, ...current.imports ?? []]
438
+ } : previous;
439
+ }, Promise.resolve({ parameters: [], queries: [], headers: [], cookies: [], models: [], imports: [] }));
440
+
441
+ // src/extractors/path/requestBody.ts
442
+ import {
443
+ referenceSchema as referenceSchema3
444
+ } from "@automatons/tools";
445
+ import { isDeepStrictEqual } from "util";
446
+ var extractRequestBody = async (schema, path, method, context) => {
447
+ const requestBody = await referenceSchema3(schema, context);
448
+ const extracts = await Promise.all(Object.entries(requestBody.content).filter(
449
+ (item) => !!item[1].schema
450
+ ).map(async ([key, value]) => ({
451
+ key,
452
+ required: requestBody.required,
453
+ extract: await extractSchema(
454
+ [...path.split("/"), method, ...key.split("/"), "Request"].join(" "),
455
+ value.schema,
456
+ context
457
+ )
458
+ })));
459
+ return extracts.map(({ key, required, extract }) => ({
460
+ form: { types: [key], required, schema: extract.schema },
461
+ models: extract.models,
462
+ imports: extract.imports
463
+ })).reduce((pre, cur) => ({
464
+ forms: pre.forms.some((form) => isDeepStrictEqual(form.schema, cur.form.schema)) ? pre.forms.map(
465
+ (form) => isDeepStrictEqual(form.schema, cur.form.schema) ? {
466
+ ...form,
467
+ types: [...form.types, ...cur.form.types]
468
+ } : form
469
+ ) : [...pre.forms, cur.form],
470
+ models: [...pre.models, ...cur.models],
471
+ imports: [...pre.imports, ...cur.imports ?? []]
472
+ }), { forms: [], models: [], imports: [] });
473
+ };
474
+
475
+ // src/extractors/path/response.ts
476
+ import { referenceSchema as referenceSchema4 } from "@automatons/tools";
477
+
478
+ // src/extractors/path/status.ts
479
+ var extractStatus = (schema) => {
480
+ const statuses = Object.keys(schema);
481
+ return statuses.map((status) => Number(status)).filter((status) => Number(status) >= 200 && Number(status) < 300).sort()[0] ?? statuses[0] ?? "";
482
+ };
483
+
484
+ // src/extractors/path/response.ts
485
+ var extractResponse = async (schema, method, context) => {
486
+ const status = extractStatus(schema);
487
+ const response = await referenceSchema4(schema[status], context);
488
+ const content = response.content;
489
+ if (!content || !Object.keys(content).length) return;
490
+ const resSchema = content[extractMediaType(content)]?.schema;
491
+ if (!resSchema) return;
492
+ return extractSchema(
493
+ [...context.path.split("/"), method, "Response"].join(" "),
494
+ resSchema,
495
+ context
496
+ );
497
+ };
498
+
499
+ // src/extractors/path/security.ts
500
+ var extractSecurity = (operation, openapi) => operation.security && operation.security.map((value) => Object.entries(value).map(([name, scopes]) => {
501
+ const security = openapi.components?.securitySchemes?.[name];
502
+ return security ? convertSecurity(name, security, scopes) : void 0;
503
+ }).filter((value2) => value2 !== void 0)).flat();
504
+
505
+ // src/extractors/path/method.ts
506
+ var mergeModels = (main, adding) => {
507
+ main.models.push(...adding.models);
508
+ main.imports.push(...adding.imports);
509
+ };
510
+ var mergeParameter = async (parameters, path, params, models, { openapi, settings }) => {
511
+ const {
512
+ parameters: _parameters,
513
+ queries: _queries,
514
+ headers: _headers,
515
+ cookies: _cookies,
516
+ models: _models,
517
+ imports: _imports
518
+ } = await extractParameter(parameters, { path, openapi, settings });
519
+ params.parameters.push(..._parameters);
520
+ params.queries.push(..._queries);
521
+ params.headers.push(..._headers);
522
+ params.cookies.push(..._cookies);
523
+ mergeModels(models, { models: _models, imports: _imports });
524
+ };
525
+ var extractMethod = async (path, method, operation, schema, { openapi, settings }) => {
526
+ const models = {
527
+ models: [],
528
+ imports: []
529
+ };
530
+ const params = {
531
+ parameters: [],
532
+ queries: [],
533
+ headers: [],
534
+ cookies: []
535
+ };
536
+ const data = {
537
+ params,
538
+ servers: (operation.servers || schema.servers || openapi.servers || []).map(convertServer),
539
+ securities: extractSecurity(operation, openapi)
540
+ };
541
+ if (schema.parameters) {
542
+ await mergeParameter(schema.parameters, path, params, models, { openapi, settings });
543
+ }
544
+ if (operation.parameters) {
545
+ await mergeParameter(operation.parameters, path, params, models, { openapi, settings });
546
+ }
547
+ if (operation.requestBody) {
548
+ const bodies = await extractRequestBody(operation.requestBody, path, method, { openapi, settings });
549
+ data.forms = bodies.forms;
550
+ mergeModels(models, { models: bodies.models, imports: bodies.imports });
551
+ }
552
+ const response = await extractResponse(operation.responses, method, { path, openapi, settings });
553
+ if (response) {
554
+ data.schema = response.schema;
555
+ mergeModels(models, { models: response.models, imports: response.imports ?? [] });
556
+ }
557
+ return convertPath(path, method, operation, data, models);
558
+ };
559
+ var convertPath = (path, method, operation, { params, servers, securities, forms, schema }, models) => ({
560
+ tags: operation.tags && operation.tags.length ? operation.tags : ["default"],
561
+ path: {
562
+ name: camelCase3(operation.operationId ?? [method, ...path.split("/")].join(" ")),
563
+ path,
564
+ method,
565
+ servers,
566
+ parameters: params.parameters,
567
+ queries: params.queries.sort(requiredCompare),
568
+ headers: params.headers.sort(requiredCompare),
569
+ cookies: params.cookies.sort(requiredCompare),
570
+ ...securities ? { securities } : {},
571
+ ...forms ? { forms } : {},
572
+ ...schema ? { schema } : {}
573
+ },
574
+ ...models
575
+ });
576
+
577
+ // src/extractors/path/index.ts
578
+ import { isRef, referenceSchema as referenceSchema5 } from "@automatons/tools";
579
+
580
+ // src/utils/omitCopy.ts
581
+ var omitCopy = (schema, key) => Object.entries(schema).reduce((pre, [name, value]) => ({ ...pre, ...name !== key ? { [name]: value } : {} }), {});
582
+
583
+ // src/extractors/path/index.ts
584
+ var extractPath = async (schema, { path, openapi, settings }) => {
585
+ const _schema = isRef(schema) ? { ...await referenceSchema5(schema, { openapi, settings }), ...omitCopy(schema, "$ref") } : schema;
586
+ return Promise.all(HTTP_METHODS.map((method) => ({ method, operation: _schema[method] })).filter(
587
+ (operation) => !!operation.operation
588
+ ).map(({ method, operation }) => extractMethod(path, method, operation, _schema, { openapi, settings })));
589
+ };
590
+
591
+ // src/utils/uniq.ts
592
+ var uniq = (items, key) => items.reduce(
593
+ (pre, cur) => pre.some((item) => cur[key] === item[key]) ? pre : [...pre, cur],
594
+ []
595
+ );
596
+
597
+ // src/utils/overwrite.ts
598
+ var overwrite = (items, item, predicate) => [...items.filter(predicate), item];
599
+
600
+ // src/parsers/api.ts
601
+ var parseApi = async ({ openapi, settings }) => {
602
+ const paths = (await Promise.all(convertMap(openapi.paths).map(({ key, schema }) => extractPath(schema, { path: key, openapi, settings })))).flat();
603
+ return {
604
+ apis: paths.reduce((apis, path) => path.tags.reduce((_apis, tag) => {
605
+ const title = pascalCase9([tag, "Api"].join(" "));
606
+ const api = _apis.find((api2) => api2.title === title);
607
+ return overwrite(_apis, createApi(title, path.path, path.imports, api), (item) => item.title !== title);
608
+ }, apis), []),
609
+ models: paths.reduce((models, cur) => uniq([...models, ...cur.models], "title"), [])
610
+ };
611
+ };
612
+ var createApi = (title, path, imports, base) => ({
613
+ title: pascalCase9(title),
614
+ filename: camelCase4(title),
615
+ imports: uniq([...base?.imports ?? [], ...imports], "title"),
616
+ servers: uniq([...base?.servers ?? [], ...path.servers], "name"),
617
+ paths: [...base?.paths ?? [], path]
618
+ });
619
+
620
+ // src/parsers/model.ts
621
+ import { pascalCase as pascalCase10 } from "change-case";
622
+ var parseModel = async (context) => (await Promise.all(convertMap(context.openapi.components?.schemas).map(({ key, schema }) => ({ title: pascalCase10(key), schema })).map(async ({ title, schema }) => Object.values(await extractModel(title, schema, context))))).flat(2);
623
+
624
+ // src/parser.ts
625
+ var parser = async (openapi, settings) => {
626
+ const { apis, models } = await parseApi({ openapi, settings });
627
+ models.push(...await parseModel({ openapi, settings }));
628
+ const securities = Object.entries(openapi.components?.securitySchemes ?? {}).map(([key, schema]) => convertSecurity(key, schema, [])).filter((value) => value !== void 0);
629
+ return { models, apis, securities };
630
+ };
631
+ export {
632
+ parser
633
+ };
19
634
  //# sourceMappingURL=index.js.map