@technicity/openapi-sdk-generator 4.0.0 → 5.0.0
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/dist/generate-remix.js +40 -37
- package/dist/generate-remix.js.map +1 -1
- package/package.json +1 -1
- package/src/generate-remix.ts +60 -49
package/dist/generate-remix.js
CHANGED
|
@@ -83,6 +83,9 @@ async function generate(input) {
|
|
|
83
83
|
|
|
84
84
|
${results.map((x) => x.restCode).join("\n\n")}
|
|
85
85
|
`, { parser: "typescript" }));
|
|
86
|
+
await fs.writeFile(path.join(outdir, `schemas.ts`), prettier.format(results.map((x) => x.reqBodySchemas).join("\n\n"), {
|
|
87
|
+
parser: "typescript",
|
|
88
|
+
}));
|
|
86
89
|
}
|
|
87
90
|
exports.generate = generate;
|
|
88
91
|
async function getCode(input) {
|
|
@@ -98,12 +101,14 @@ async function getCode(input) {
|
|
|
98
101
|
if (responses != null) {
|
|
99
102
|
for (let [status, response] of Object.entries(responses)) {
|
|
100
103
|
if (status === "204") {
|
|
101
|
-
|
|
104
|
+
resBodyTypes.push({ name: null, status, type: "" });
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
const schema = response?.content?.["application/json"]?.schema;
|
|
108
|
+
const name = `ResBody${status}${(0, pascal_case_1.pascalCase)(operationId)}`;
|
|
109
|
+
const type = await getTsInterface(schema, name);
|
|
110
|
+
resBodyTypes.push({ name, status, type });
|
|
102
111
|
}
|
|
103
|
-
const schema = response?.content?.["application/json"]?.schema;
|
|
104
|
-
const name = `ResBody${status}${(0, pascal_case_1.pascalCase)(operationId)}`;
|
|
105
|
-
const type = await getTsInterface(schema, name);
|
|
106
|
-
resBodyTypes.push({ name, status, type });
|
|
107
112
|
}
|
|
108
113
|
}
|
|
109
114
|
const methodCode = `async ${operationId}(input: {
|
|
@@ -113,7 +118,12 @@ async function getCode(input) {
|
|
|
113
118
|
? `query: ${await getInlineTypeScriptType(getParamsSchema(queryParams))};`
|
|
114
119
|
: ""}${requestBody == null ? "" : `data: ${requestBodySchemaName};`}headers?: { [k: string]: string };
|
|
115
120
|
interceptors: Interceptors;
|
|
116
|
-
}) {
|
|
121
|
+
}): ${resBodyTypes.length === 0
|
|
122
|
+
? `Promise<any>`
|
|
123
|
+
: `Promise<
|
|
124
|
+
${resBodyTypes
|
|
125
|
+
.map((x) => `{ ok: ${parseInt(x.status) <= 299}; status: ${x.status}; body: ${x.name}, res: Response }`)
|
|
126
|
+
.join(" | ")}>`} {
|
|
117
127
|
${pathParams
|
|
118
128
|
.filter((x) => x.required)
|
|
119
129
|
.map((x) => `
|
|
@@ -129,19 +139,26 @@ async function getCode(input) {
|
|
|
129
139
|
${queryParams.length > 0
|
|
130
140
|
? `
|
|
131
141
|
if (input.query) {
|
|
132
|
-
let q:
|
|
142
|
+
let q: [string, string][] = [];
|
|
133
143
|
for (let k in input.query) {
|
|
134
|
-
const
|
|
135
|
-
if (
|
|
144
|
+
const _v = (input.query as any)[k];
|
|
145
|
+
if (_v === void 0) {
|
|
136
146
|
continue;
|
|
137
147
|
}
|
|
138
|
-
|
|
148
|
+
if (Array.isArray(_v)) {
|
|
149
|
+
for (let __v of _v) {
|
|
150
|
+
const v = typeof __v === "string" ? __v : String(__v);
|
|
151
|
+
q.push([k, v]);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
const v = typeof _v === "string" ? _v : String(_v);
|
|
155
|
+
q.push([k, v]);
|
|
139
156
|
}
|
|
140
157
|
url += \`?\${new URLSearchParams(q)}\`;
|
|
141
158
|
}`
|
|
142
159
|
: ""}
|
|
143
160
|
|
|
144
|
-
const headers = new Headers(
|
|
161
|
+
const headers = new Headers( ${requestBody == null ? "" : `{"content-type": "${requestBodyContentType}"}`});
|
|
145
162
|
if (input?.headers) {
|
|
146
163
|
for (let k in input.headers) {
|
|
147
164
|
headers.append(k, input.headers[k]);
|
|
@@ -157,42 +174,28 @@ async function getCode(input) {
|
|
|
157
174
|
if (interceptors?.req) {
|
|
158
175
|
req = await interceptors.req(req);
|
|
159
176
|
}
|
|
160
|
-
|
|
161
|
-
const res = await fetch(req);
|
|
162
177
|
|
|
163
|
-
|
|
164
|
-
|
|
178
|
+
let res = await fetch(req);
|
|
179
|
+
|
|
180
|
+
if (interceptors?.res) {
|
|
181
|
+
res = await interceptors.res(req, res);
|
|
165
182
|
}
|
|
166
183
|
|
|
167
|
-
|
|
184
|
+
const body = res.status === 204 ? null : await res.json();
|
|
185
|
+
|
|
186
|
+
return { ok: res.ok as any, status: res.status as any, body, res };
|
|
168
187
|
}
|
|
169
188
|
`;
|
|
170
|
-
const restCode =
|
|
189
|
+
const restCode = `${requestBodySchema == null
|
|
171
190
|
? ""
|
|
172
191
|
: await getTsInterface(requestBodySchema, requestBodySchemaName)}
|
|
173
192
|
|
|
174
|
-
${requestBodySchema == null
|
|
175
|
-
? ""
|
|
176
|
-
: `export const schemaReqData${(0, pascal_case_1.pascalCase)(operationId)} = ${JSON.stringify(requestBodySchema)}`}
|
|
177
|
-
|
|
178
|
-
${resBodyTypes.length === 0
|
|
179
|
-
? ""
|
|
180
|
-
: `export async function getResData${(0, pascal_case_1.pascalCase)(operationId)}(
|
|
181
|
-
res: Response
|
|
182
|
-
): Promise<
|
|
183
|
-
${resBodyTypes
|
|
184
|
-
.map((x) => `{ ok: ${parseInt(x.status) <= 299}; status: ${x.status}; body: ${x.name}}`)
|
|
185
|
-
.join(" | ")}
|
|
186
|
-
> {
|
|
187
|
-
const ok: any = res.ok;
|
|
188
|
-
const status: any = res.status;
|
|
189
|
-
const body = await res.json();
|
|
190
|
-
return { ok, status, body };
|
|
191
|
-
}`}
|
|
192
|
-
|
|
193
193
|
${resBodyTypes.map((x) => `export ${x.type}`).join("\n\n")}
|
|
194
194
|
`;
|
|
195
|
-
|
|
195
|
+
const reqBodySchemas = `${requestBodySchema == null
|
|
196
|
+
? ""
|
|
197
|
+
: `export const schemaReqData${(0, pascal_case_1.pascalCase)(operationId)} = ${JSON.stringify(requestBodySchema)}`}`;
|
|
198
|
+
return { methodCode, restCode, reqBodySchemas };
|
|
196
199
|
}
|
|
197
200
|
function getParamsSchema(params) {
|
|
198
201
|
const properties = params.reduce((acc, v) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-remix.js","sourceRoot":"","sources":["../src/generate-remix.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAClC,2CAA6B;AAC7B,8CAAgC;AAEhC,qDAAkD;AAClD,yEAAoD;AACpD,mDAAwD;AACxD,mHAA0E;AAC1E,gFAA4C;AAC5C,6CAAyC;AACzC,mDAAqC;AACrC,8CAAsB;AAEf,KAAK,UAAU,QAAQ,CAAC,KAG9B;IACC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAE9B,IAAI,GAAG,CAAC,KAAK,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;QAC5D,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;KACpC;IAED,IAAI,OAAO,
|
|
1
|
+
{"version":3,"file":"generate-remix.js","sourceRoot":"","sources":["../src/generate-remix.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/generate-remix.ts
CHANGED
|
@@ -21,8 +21,12 @@ export async function generate(input: {
|
|
|
21
21
|
throw new Error("No paths found.");
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
let results: {
|
|
25
|
-
|
|
24
|
+
let results: {
|
|
25
|
+
operationId: string;
|
|
26
|
+
methodCode: string;
|
|
27
|
+
restCode: string;
|
|
28
|
+
reqBodySchemas: string;
|
|
29
|
+
}[] = [];
|
|
26
30
|
|
|
27
31
|
// Sort
|
|
28
32
|
api.paths = Object.fromEntries(
|
|
@@ -77,6 +81,13 @@ export async function generate(input: {
|
|
|
77
81
|
{ parser: "typescript" }
|
|
78
82
|
)
|
|
79
83
|
);
|
|
84
|
+
|
|
85
|
+
await fs.writeFile(
|
|
86
|
+
path.join(outdir, `schemas.ts`),
|
|
87
|
+
prettier.format(results.map((x) => x.reqBodySchemas).join("\n\n"), {
|
|
88
|
+
parser: "typescript",
|
|
89
|
+
})
|
|
90
|
+
);
|
|
80
91
|
}
|
|
81
92
|
|
|
82
93
|
async function getCode(input: {
|
|
@@ -103,12 +114,13 @@ async function getCode(input: {
|
|
|
103
114
|
if (responses != null) {
|
|
104
115
|
for (let [status, response] of Object.entries(responses)) {
|
|
105
116
|
if (status === "204") {
|
|
106
|
-
|
|
117
|
+
resBodyTypes.push({ name: null, status, type: "" });
|
|
118
|
+
} else {
|
|
119
|
+
const schema = (response as any)?.content?.["application/json"]?.schema;
|
|
120
|
+
const name = `ResBody${status}${pascalCase(operationId)}`;
|
|
121
|
+
const type = await getTsInterface(schema, name);
|
|
122
|
+
resBodyTypes.push({ name, status, type });
|
|
107
123
|
}
|
|
108
|
-
const schema = (response as any)?.content?.["application/json"]?.schema;
|
|
109
|
-
const name = `ResBody${status}${pascalCase(operationId)}`;
|
|
110
|
-
const type = await getTsInterface(schema, name);
|
|
111
|
-
resBodyTypes.push({ name, status, type });
|
|
112
124
|
}
|
|
113
125
|
}
|
|
114
126
|
|
|
@@ -127,7 +139,19 @@ async function getCode(input: {
|
|
|
127
139
|
requestBody == null ? "" : `data: ${requestBodySchemaName};`
|
|
128
140
|
}headers?: { [k: string]: string };
|
|
129
141
|
interceptors: Interceptors;
|
|
130
|
-
}) {
|
|
142
|
+
}): ${
|
|
143
|
+
resBodyTypes.length === 0
|
|
144
|
+
? `Promise<any>`
|
|
145
|
+
: `Promise<
|
|
146
|
+
${resBodyTypes
|
|
147
|
+
.map(
|
|
148
|
+
(x) =>
|
|
149
|
+
`{ ok: ${parseInt(x.status) <= 299}; status: ${x.status}; body: ${
|
|
150
|
+
x.name
|
|
151
|
+
}, res: Response }`
|
|
152
|
+
)
|
|
153
|
+
.join(" | ")}>`
|
|
154
|
+
} {
|
|
131
155
|
${pathParams
|
|
132
156
|
.filter((x) => x.required)
|
|
133
157
|
.map(
|
|
@@ -150,22 +174,29 @@ async function getCode(input: {
|
|
|
150
174
|
queryParams.length > 0
|
|
151
175
|
? `
|
|
152
176
|
if (input.query) {
|
|
153
|
-
let q:
|
|
177
|
+
let q: [string, string][] = [];
|
|
154
178
|
for (let k in input.query) {
|
|
155
|
-
const
|
|
156
|
-
if (
|
|
179
|
+
const _v = (input.query as any)[k];
|
|
180
|
+
if (_v === void 0) {
|
|
157
181
|
continue;
|
|
158
182
|
}
|
|
159
|
-
|
|
183
|
+
if (Array.isArray(_v)) {
|
|
184
|
+
for (let __v of _v) {
|
|
185
|
+
const v = typeof __v === "string" ? __v : String(__v);
|
|
186
|
+
q.push([k, v]);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
const v = typeof _v === "string" ? _v : String(_v);
|
|
190
|
+
q.push([k, v]);
|
|
160
191
|
}
|
|
161
192
|
url += \`?\${new URLSearchParams(q)}\`;
|
|
162
193
|
}`
|
|
163
194
|
: ""
|
|
164
195
|
}
|
|
165
196
|
|
|
166
|
-
const headers = new Headers(
|
|
167
|
-
requestBody == null ? "" : `"
|
|
168
|
-
}
|
|
197
|
+
const headers = new Headers( ${
|
|
198
|
+
requestBody == null ? "" : `{"content-type": "${requestBodyContentType}"}`
|
|
199
|
+
});
|
|
169
200
|
if (input?.headers) {
|
|
170
201
|
for (let k in input.headers) {
|
|
171
202
|
headers.append(k, input.headers[k]);
|
|
@@ -185,57 +216,37 @@ async function getCode(input: {
|
|
|
185
216
|
if (interceptors?.req) {
|
|
186
217
|
req = await interceptors.req(req);
|
|
187
218
|
}
|
|
188
|
-
|
|
189
|
-
const res = await fetch(req);
|
|
190
219
|
|
|
191
|
-
|
|
192
|
-
|
|
220
|
+
let res = await fetch(req);
|
|
221
|
+
|
|
222
|
+
if (interceptors?.res) {
|
|
223
|
+
res = await interceptors.res(req, res);
|
|
193
224
|
}
|
|
194
225
|
|
|
195
|
-
|
|
226
|
+
const body = res.status === 204 ? null : await res.json();
|
|
227
|
+
|
|
228
|
+
return { ok: res.ok as any, status: res.status as any, body, res };
|
|
196
229
|
}
|
|
197
230
|
`;
|
|
198
231
|
|
|
199
|
-
const restCode =
|
|
232
|
+
const restCode = `${
|
|
200
233
|
requestBodySchema == null
|
|
201
234
|
? ""
|
|
202
235
|
: await getTsInterface(requestBodySchema, requestBodySchemaName)
|
|
203
236
|
}
|
|
204
237
|
|
|
205
|
-
${
|
|
238
|
+
${resBodyTypes.map((x) => `export ${x.type}`).join("\n\n")}
|
|
239
|
+
`;
|
|
240
|
+
|
|
241
|
+
const reqBodySchemas = `${
|
|
206
242
|
requestBodySchema == null
|
|
207
243
|
? ""
|
|
208
244
|
: `export const schemaReqData${pascalCase(
|
|
209
245
|
operationId
|
|
210
246
|
)} = ${JSON.stringify(requestBodySchema)}`
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
${
|
|
214
|
-
resBodyTypes.length === 0
|
|
215
|
-
? ""
|
|
216
|
-
: `export async function getResData${pascalCase(operationId)}(
|
|
217
|
-
res: Response
|
|
218
|
-
): Promise<
|
|
219
|
-
${resBodyTypes
|
|
220
|
-
.map(
|
|
221
|
-
(x) =>
|
|
222
|
-
`{ ok: ${parseInt(x.status) <= 299}; status: ${x.status}; body: ${
|
|
223
|
-
x.name
|
|
224
|
-
}}`
|
|
225
|
-
)
|
|
226
|
-
.join(" | ")}
|
|
227
|
-
> {
|
|
228
|
-
const ok: any = res.ok;
|
|
229
|
-
const status: any = res.status;
|
|
230
|
-
const body = await res.json();
|
|
231
|
-
return { ok, status, body };
|
|
232
|
-
}`
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
${resBodyTypes.map((x) => `export ${x.type}`).join("\n\n")}
|
|
236
|
-
`;
|
|
247
|
+
}`;
|
|
237
248
|
|
|
238
|
-
return { methodCode, restCode };
|
|
249
|
+
return { methodCode, restCode, reqBodySchemas };
|
|
239
250
|
}
|
|
240
251
|
|
|
241
252
|
function getParamsSchema(params: OpenAPIV3_1.ParameterObject[]) {
|