@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.
@@ -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
- continue;
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: { [k: string]: string } = {};
142
+ let q: [string, string][] = [];
133
143
  for (let k in input.query) {
134
- const v = (input.query as any)[k];
135
- if (v === void 0) {
144
+ const _v = (input.query as any)[k];
145
+ if (_v === void 0) {
136
146
  continue;
137
147
  }
138
- q[k] = typeof v === "string" ? v : String(v);
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({ ${requestBody == null ? "" : `"Content-Type": "${requestBodyContentType}"`}});
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
- if (!interceptors?.res) {
164
- return res;
178
+ let res = await fetch(req);
179
+
180
+ if (interceptors?.res) {
181
+ res = await interceptors.res(req, res);
165
182
  }
166
183
 
167
- return interceptors.res(req, res);
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 = ` ${requestBodySchema == null
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
- return { methodCode, restCode };
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":"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"}
1
+ {"version":3,"file":"generate-remix.js","sourceRoot":"","sources":["../src/generate-remix.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@technicity/openapi-sdk-generator",
3
- "version": "4.0.0",
3
+ "version": "5.0.0",
4
4
  "license": "MIT",
5
5
  "main": "./dist/index.js",
6
6
  "bin": {
@@ -21,8 +21,12 @@ export async function generate(input: {
21
21
  throw new Error("No paths found.");
22
22
  }
23
23
 
24
- let results: { operationId: string; methodCode: string; restCode: string }[] =
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
- continue;
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: { [k: string]: string } = {};
177
+ let q: [string, string][] = [];
154
178
  for (let k in input.query) {
155
- const v = (input.query as any)[k];
156
- if (v === void 0) {
179
+ const _v = (input.query as any)[k];
180
+ if (_v === void 0) {
157
181
  continue;
158
182
  }
159
- q[k] = typeof v === "string" ? v : String(v);
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 ? "" : `"Content-Type": "${requestBodyContentType}"`
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
- if (!interceptors?.res) {
192
- return res;
220
+ let res = await fetch(req);
221
+
222
+ if (interceptors?.res) {
223
+ res = await interceptors.res(req, res);
193
224
  }
194
225
 
195
- return interceptors.res(req, res);
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[]) {