@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.
- package/README.md +7 -45
- package/index.d.ts +206 -3
- package/index.js +633 -18
- package/index.js.map +1 -1
- package/package.json +39 -35
- package/converters/allOf.d.ts +0 -4
- package/converters/allOf.d.ts.map +0 -1
- package/converters/allOf.js +0 -11
- package/converters/allOf.js.map +0 -1
- package/converters/array.d.ts +0 -4
- package/converters/array.d.ts.map +0 -1
- package/converters/array.js +0 -14
- package/converters/array.js.map +0 -1
- package/converters/boolean.d.ts +0 -4
- package/converters/boolean.d.ts.map +0 -1
- package/converters/boolean.js +0 -10
- package/converters/boolean.js.map +0 -1
- package/converters/map.d.ts +0 -7
- package/converters/map.d.ts.map +0 -1
- package/converters/map.js +0 -6
- package/converters/map.js.map +0 -1
- package/converters/model.d.ts +0 -3
- package/converters/model.d.ts.map +0 -1
- package/converters/model.js +0 -12
- package/converters/model.js.map +0 -1
- package/converters/number.d.ts +0 -4
- package/converters/number.d.ts.map +0 -1
- package/converters/number.js +0 -12
- package/converters/number.js.map +0 -1
- package/converters/object.d.ts +0 -4
- package/converters/object.d.ts.map +0 -1
- package/converters/object.js +0 -11
- package/converters/object.js.map +0 -1
- package/converters/oneOf.d.ts +0 -4
- package/converters/oneOf.d.ts.map +0 -1
- package/converters/oneOf.js +0 -11
- package/converters/oneOf.js.map +0 -1
- package/converters/schema.d.ts +0 -4
- package/converters/schema.d.ts.map +0 -1
- package/converters/schema.js +0 -14
- package/converters/schema.js.map +0 -1
- package/converters/schemaModel.d.ts +0 -4
- package/converters/schemaModel.d.ts.map +0 -1
- package/converters/schemaModel.js +0 -12
- package/converters/schemaModel.js.map +0 -1
- package/converters/security.d.ts +0 -4
- package/converters/security.d.ts.map +0 -1
- package/converters/security.js +0 -19
- package/converters/security.js.map +0 -1
- package/converters/server.d.ts +0 -4
- package/converters/server.d.ts.map +0 -1
- package/converters/server.js +0 -12
- package/converters/server.js.map +0 -1
- package/converters/string.d.ts +0 -4
- package/converters/string.d.ts.map +0 -1
- package/converters/string.js +0 -12
- package/converters/string.js.map +0 -1
- package/extractors/index.d.ts +0 -4
- package/extractors/index.d.ts.map +0 -1
- package/extractors/index.js +0 -20
- package/extractors/index.js.map +0 -1
- package/extractors/model/allOf.d.ts +0 -4
- package/extractors/model/allOf.d.ts.map +0 -1
- package/extractors/model/allOf.js +0 -12
- package/extractors/model/allOf.js.map +0 -1
- package/extractors/model/array.d.ts +0 -4
- package/extractors/model/array.d.ts.map +0 -1
- package/extractors/model/array.js +0 -16
- package/extractors/model/array.js.map +0 -1
- package/extractors/model/index.d.ts +0 -4
- package/extractors/model/index.d.ts.map +0 -1
- package/extractors/model/index.js +0 -42
- package/extractors/model/index.js.map +0 -1
- package/extractors/model/object.d.ts +0 -4
- package/extractors/model/object.d.ts.map +0 -1
- package/extractors/model/object.js +0 -23
- package/extractors/model/object.js.map +0 -1
- package/extractors/model/of.d.ts +0 -8
- package/extractors/model/of.d.ts.map +0 -1
- package/extractors/model/of.js +0 -15
- package/extractors/model/of.js.map +0 -1
- package/extractors/model/oneOf.d.ts +0 -6
- package/extractors/model/oneOf.d.ts.map +0 -1
- package/extractors/model/oneOf.js +0 -12
- package/extractors/model/oneOf.js.map +0 -1
- package/extractors/model/ref.d.ts +0 -4
- package/extractors/model/ref.d.ts.map +0 -1
- package/extractors/model/ref.js +0 -14
- package/extractors/model/ref.js.map +0 -1
- package/extractors/model/type.d.ts +0 -6
- package/extractors/model/type.d.ts.map +0 -1
- package/extractors/model/type.js +0 -3
- package/extractors/model/type.js.map +0 -1
- package/extractors/path/index.d.ts +0 -8
- package/extractors/path/index.d.ts.map +0 -1
- package/extractors/path/index.js +0 -18
- package/extractors/path/index.js.map +0 -1
- package/extractors/path/mediaType.d.ts +0 -3
- package/extractors/path/mediaType.d.ts.map +0 -1
- package/extractors/path/mediaType.js +0 -11
- package/extractors/path/mediaType.js.map +0 -1
- package/extractors/path/method.d.ts +0 -4
- package/extractors/path/method.d.ts.map +0 -1
- package/extractors/path/method.js +0 -76
- package/extractors/path/method.js.map +0 -1
- package/extractors/path/parameter.d.ts +0 -4
- package/extractors/path/parameter.d.ts.map +0 -1
- package/extractors/path/parameter.js +0 -84
- package/extractors/path/parameter.js.map +0 -1
- package/extractors/path/requestBody.d.ts +0 -8
- package/extractors/path/requestBody.d.ts.map +0 -1
- package/extractors/path/requestBody.js +0 -35
- package/extractors/path/requestBody.js.map +0 -1
- package/extractors/path/response.d.ts +0 -5
- package/extractors/path/response.d.ts.map +0 -1
- package/extractors/path/response.js +0 -20
- package/extractors/path/response.js.map +0 -1
- package/extractors/path/security.d.ts +0 -4
- package/extractors/path/security.d.ts.map +0 -1
- package/extractors/path/security.js +0 -11
- package/extractors/path/security.js.map +0 -1
- package/extractors/path/status.d.ts +0 -3
- package/extractors/path/status.d.ts.map +0 -1
- package/extractors/path/status.js +0 -12
- package/extractors/path/status.js.map +0 -1
- package/extractors/path/type.d.ts +0 -20
- package/extractors/path/type.d.ts.map +0 -1
- package/extractors/path/type.js +0 -3
- package/extractors/path/type.js.map +0 -1
- package/extractors/schema/allOf.d.ts +0 -7
- package/extractors/schema/allOf.d.ts.map +0 -1
- package/extractors/schema/allOf.js +0 -17
- package/extractors/schema/allOf.js.map +0 -1
- package/extractors/schema/array.d.ts +0 -12
- package/extractors/schema/array.d.ts.map +0 -1
- package/extractors/schema/array.js +0 -31
- package/extractors/schema/array.js.map +0 -1
- package/extractors/schema/boolean.d.ts +0 -11
- package/extractors/schema/boolean.d.ts.map +0 -1
- package/extractors/schema/boolean.js +0 -16
- package/extractors/schema/boolean.js.map +0 -1
- package/extractors/schema/index.d.ts +0 -9
- package/extractors/schema/index.d.ts.map +0 -1
- package/extractors/schema/index.js +0 -41
- package/extractors/schema/index.js.map +0 -1
- package/extractors/schema/number.d.ts +0 -11
- package/extractors/schema/number.d.ts.map +0 -1
- package/extractors/schema/number.js +0 -16
- package/extractors/schema/number.js.map +0 -1
- package/extractors/schema/object.d.ts +0 -7
- package/extractors/schema/object.d.ts.map +0 -1
- package/extractors/schema/object.js +0 -17
- package/extractors/schema/object.js.map +0 -1
- package/extractors/schema/oneOf.d.ts +0 -7
- package/extractors/schema/oneOf.d.ts.map +0 -1
- package/extractors/schema/oneOf.js +0 -17
- package/extractors/schema/oneOf.js.map +0 -1
- package/extractors/schema/ref.d.ts +0 -7
- package/extractors/schema/ref.d.ts.map +0 -1
- package/extractors/schema/ref.js +0 -17
- package/extractors/schema/ref.js.map +0 -1
- package/extractors/schema/string.d.ts +0 -11
- package/extractors/schema/string.d.ts.map +0 -1
- package/extractors/schema/string.js +0 -16
- package/extractors/schema/string.js.map +0 -1
- package/index.d.ts.map +0 -1
- package/parser.d.ts +0 -8
- package/parser.d.ts.map +0 -1
- package/parser.js +0 -16
- package/parser.js.map +0 -1
- package/parsers/api.d.ts +0 -7
- package/parsers/api.d.ts.map +0 -1
- package/parsers/api.js +0 -30
- package/parsers/api.js.map +0 -1
- package/parsers/model.d.ts +0 -4
- package/parsers/model.d.ts.map +0 -1
- package/parsers/model.js +0 -12
- package/parsers/model.js.map +0 -1
- package/types/api.d.ts +0 -105
- package/types/api.d.ts.map +0 -1
- package/types/api.js +0 -3
- package/types/api.js.map +0 -1
- package/types/index.d.ts +0 -3
- package/types/index.d.ts.map +0 -1
- package/types/index.js +0 -19
- package/types/index.js.map +0 -1
- package/types/model.d.ts +0 -94
- package/types/model.d.ts.map +0 -1
- package/types/model.js +0 -3
- package/types/model.js.map +0 -1
- package/utils/method.d.ts +0 -4
- package/utils/method.d.ts.map +0 -1
- package/utils/method.js +0 -6
- package/utils/method.js.map +0 -1
- package/utils/omitCopy.d.ts +0 -2
- package/utils/omitCopy.d.ts.map +0 -1
- package/utils/omitCopy.js +0 -7
- package/utils/omitCopy.js.map +0 -1
- package/utils/overwrite.d.ts +0 -2
- package/utils/overwrite.d.ts.map +0 -1
- package/utils/overwrite.js +0 -6
- package/utils/overwrite.js.map +0 -1
- package/utils/sort.d.ts +0 -6
- package/utils/sort.d.ts.map +0 -1
- package/utils/sort.js +0 -6
- package/utils/sort.js.map +0 -1
- package/utils/uniq.d.ts +0 -2
- package/utils/uniq.d.ts.map +0 -1
- package/utils/uniq.js +0 -6
- package/utils/uniq.js.map +0 -1
package/index.js
CHANGED
|
@@ -1,19 +1,634 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|