@technicity/openapi-sdk-generator 2.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.
@@ -0,0 +1,5 @@
1
+ import { OpenAPI } from "openapi-types";
2
+ export declare function generate(input: {
3
+ api: OpenAPI.Document;
4
+ outdir: string;
5
+ }): Promise<void>;
@@ -0,0 +1,264 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.generate = void 0;
30
+ const fs = __importStar(require("fs/promises"));
31
+ const path = __importStar(require("path"));
32
+ const fse = __importStar(require("fs-extra"));
33
+ const getOperationId_1 = require("./getOperationId");
34
+ const json_schema_to_typescript_1 = require("json-schema-to-typescript");
35
+ const path_to_regexp_1 = require("path-to-regexp");
36
+ const openapi_schema_to_json_schema_1 = __importDefault(require("@openapi-contrib/openapi-schema-to-json-schema"));
37
+ const json_schema_traverse_1 = __importDefault(require("json-schema-traverse"));
38
+ const pascal_case_1 = require("pascal-case");
39
+ const prettier = __importStar(require("prettier"));
40
+ const del_1 = __importDefault(require("del"));
41
+ async function generate(input) {
42
+ const { api, outdir } = input;
43
+ if (api.paths == null || Object.keys(api.paths).length === 0) {
44
+ throw new Error("No paths found.");
45
+ }
46
+ let results = [];
47
+ // Sort
48
+ api.paths = Object.fromEntries(Object.entries(api.paths).sort((a, b) => a[0].localeCompare(b[0])));
49
+ for (let p of Object.keys(api.paths)) {
50
+ // Sort
51
+ let v1 = Object.fromEntries(Object.entries(api.paths[p]).sort((a, b) => a[0].localeCompare(b[0])));
52
+ for (let [method, v2] of Object.entries(v1 ?? {})) {
53
+ const operationId = (0, getOperationId_1.getOperationId)(v2);
54
+ const parameters = v1?.[method]?.parameters;
55
+ const responses = v1?.[method]?.responses;
56
+ const requestBody = v1?.[method]?.requestBody;
57
+ results.push({
58
+ operationId,
59
+ ...(await getCode({
60
+ operationId,
61
+ path: p,
62
+ method,
63
+ parameters,
64
+ requestBody,
65
+ responses,
66
+ })),
67
+ });
68
+ }
69
+ }
70
+ await (0, del_1.default)(outdir);
71
+ await fse.mkdirp(outdir);
72
+ await fs.writeFile(path.join(outdir, `Sdk.ts`), prettier.format(`export type Interceptors = { req?: (req: Request) => Promise<Request>, res?: (req: Request, res: Response) => Promise<Response> };
73
+
74
+ export class Sdk {
75
+ baseUrl: string;
76
+
77
+ constructor(opts: { baseUrl: string }) {
78
+ this.baseUrl = opts.baseUrl;
79
+ }
80
+
81
+ ${results.map((x) => x.methodCode).join("\n\n")}
82
+ }
83
+
84
+ ${results.map((x) => x.restCode).join("\n\n")}
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
+ }));
89
+ }
90
+ exports.generate = generate;
91
+ async function getCode(input) {
92
+ const { operationId, path, method, parameters, requestBody, responses } = input;
93
+ const pathParams = (parameters ?? []).filter((x) => x.in === "path");
94
+ const queryParams = (parameters ?? []).filter((x) => x.in === "query");
95
+ const { contentType: requestBodyContentType, schema: requestBodySchema } = getRequestBodyInfo(requestBody, operationId) ?? {};
96
+ const requestBodySchemaName = `ReqData${(0, pascal_case_1.pascalCase)(operationId)}`;
97
+ if (requestBodySchema?.title) {
98
+ requestBodySchema.title = requestBodySchemaName;
99
+ }
100
+ let resBodyTypes = [];
101
+ if (responses != null) {
102
+ for (let [status, response] of Object.entries(responses)) {
103
+ if (status === "204") {
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 });
111
+ }
112
+ }
113
+ }
114
+ const methodCode = `async ${operationId}(input: {
115
+ ${pathParams.length > 0
116
+ ? `params: ${await getInlineTypeScriptType(getParamsSchema(pathParams))};`
117
+ : ""}${queryParams.length > 0
118
+ ? `query: ${await getInlineTypeScriptType(getParamsSchema(queryParams))};`
119
+ : ""}${requestBody == null ? "" : `data: ${requestBodySchemaName};`}headers?: { [k: string]: string };
120
+ interceptors: Interceptors;
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(" | ")}>`} {
127
+ ${pathParams
128
+ .filter((x) => x.required)
129
+ .map((x) => `
130
+ if (input.params.${x.name} == null) {
131
+ throw new Error("Missing \`params.${x.name}\`");
132
+ }
133
+ `)
134
+ .join("\n")}
135
+ let url = \`\${this.baseUrl}${(0, path_to_regexp_1.compile)(path.replace(/{/g, ":").replace(/}/g, ""))(pathParams.reduce((acc, v) => {
136
+ acc[v.name] = `\${input.params.${v.name}}`;
137
+ return acc;
138
+ }, {}))}\`
139
+ ${queryParams.length > 0
140
+ ? `
141
+ if (input.query) {
142
+ let q: [string, string][] = [];
143
+ for (let k in input.query) {
144
+ const _v = (input.query as any)[k];
145
+ if (_v === void 0) {
146
+ continue;
147
+ }
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]);
156
+ }
157
+ url += \`?\${new URLSearchParams(q)}\`;
158
+ }`
159
+ : ""}
160
+
161
+ const headers = new Headers( ${requestBody == null ? "" : `{"content-type": "${requestBodyContentType}"}`});
162
+ if (input?.headers) {
163
+ for (let k in input.headers) {
164
+ headers.append(k, input.headers[k]);
165
+ }
166
+ }
167
+
168
+ let req = new Request(url, { ${method !== "get" ? `method: "${method.toLocaleUpperCase()}",` : ""}headers,${requestBodyContentType?.startsWith("application/json")
169
+ ? `body: JSON.stringify(input.data),`
170
+ : ""}});
171
+
172
+ const interceptors = input.interceptors;
173
+
174
+ if (interceptors?.req) {
175
+ req = await interceptors.req(req);
176
+ }
177
+
178
+ let res = await fetch(req);
179
+
180
+ if (interceptors?.res) {
181
+ res = await interceptors.res(req, res);
182
+ }
183
+
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 };
187
+ }
188
+ `;
189
+ const restCode = `${requestBodySchema == null
190
+ ? ""
191
+ : await getTsInterface(requestBodySchema, requestBodySchemaName)}
192
+
193
+ ${resBodyTypes.map((x) => `export ${x.type}`).join("\n\n")}
194
+ `;
195
+ const reqBodySchemas = `${requestBodySchema == null
196
+ ? ""
197
+ : `export const schemaReqData${(0, pascal_case_1.pascalCase)(operationId)} = ${JSON.stringify(requestBodySchema)}`}`;
198
+ return { methodCode, restCode, reqBodySchemas };
199
+ }
200
+ function getParamsSchema(params) {
201
+ const properties = params.reduce((acc, v) => {
202
+ acc[v.name] = v.schema;
203
+ return acc;
204
+ }, {});
205
+ const required = params.filter((x) => x.required).map((x) => x.name);
206
+ return { type: "object", properties, additionalProperties: false, required };
207
+ }
208
+ function getRequestBodyInfo(requestBody, operationId) {
209
+ const content = requestBody?.content;
210
+ if (content == null) {
211
+ return null;
212
+ }
213
+ const keys = Object.keys(content);
214
+ if (keys.length === 0) {
215
+ throw new Error("No content type: " + operationId);
216
+ }
217
+ if (keys.length > 1) {
218
+ throw new Error("More than 1 content type. Not allowed: " + operationId);
219
+ }
220
+ const contentType = keys[0];
221
+ return { contentType, schema: content[contentType].schema };
222
+ }
223
+ async function getTsInterface(schema_, name) {
224
+ let schema = { ...schema_ };
225
+ schema = prepareSchema(schema);
226
+ return (0, json_schema_to_typescript_1.compile)(schema, name, {
227
+ bannerComment: "",
228
+ declareExternallyReferenced: false,
229
+ });
230
+ }
231
+ async function getInlineTypeScriptType(schema_) {
232
+ let schema = { ...schema_ };
233
+ schema = prepareSchema(schema);
234
+ // `compile` seems to mutate schema, so shallow clone
235
+ let _out = await (0, json_schema_to_typescript_1.compile)(schema, "IStub", {
236
+ bannerComment: "",
237
+ declareExternallyReferenced: false,
238
+ });
239
+ return (_out
240
+ .replace(/export interface IStub/g, "")
241
+ .replace(/export type IStub =/g, "")
242
+ // .replace(/};/g, "}")
243
+ .replace(/\n/g, ""));
244
+ }
245
+ function prepareSchema(schema) {
246
+ schema = (0, openapi_schema_to_json_schema_1.default)(schema, { strictMode: false });
247
+ // Delete title, since if there's a title, json-schema-to-typescript
248
+ // generates references.
249
+ if (schema != null) {
250
+ (0, json_schema_traverse_1.default)(schema, {
251
+ cb: (schema) => {
252
+ if (schema.title) {
253
+ delete schema.title;
254
+ }
255
+ // TODO: this is a workaround for attribute SDK bad patterns
256
+ if (schema.pattern) {
257
+ delete schema.pattern;
258
+ }
259
+ },
260
+ });
261
+ }
262
+ return schema;
263
+ }
264
+ //# sourceMappingURL=generate-remix.js.map
@@ -0,0 +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,GAKL,EAAE,CAAC;IAET,OAAO;IACP,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW,CAC5B,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACnE,CAAC;IAEF,KAAK,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QACpC,OAAO;QACP,IAAI,EAAE,GAAG,MAAM,CAAC,WAAW,CACzB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACtE,CAAC;QACF,KAAK,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;YACjD,MAAM,WAAW,GAAG,IAAA,+BAAc,EAAC,EAAE,CAAC,CAAC;YACvC,MAAM,UAAU,GAAI,EAAU,EAAE,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;YACrD,MAAM,SAAS,GAAI,EAAU,EAAE,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;YACnD,MAAM,WAAW,GAAI,EAAU,EAAE,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;YAEvD,OAAO,CAAC,IAAI,CAAC;gBACX,WAAW;gBACX,GAAG,CAAC,MAAM,OAAO,CAAC;oBAChB,WAAW;oBACX,IAAI,EAAE,CAAC;oBACP,MAAM;oBACN,UAAU;oBACV,WAAW;oBACX,SAAS;iBACV,CAAC,CAAC;aACJ,CAAC,CAAC;SACJ;KACF;IAED,MAAM,IAAA,aAAG,EAAC,MAAM,CAAC,CAAC;IAClB,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAEzB,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,EAC3B,QAAQ,CAAC,MAAM,CACb;;;;;;;;;QASE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;;;MAG/C,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;KAC5C,EACC,EAAE,MAAM,EAAE,YAAY,EAAE,CACzB,CACF,CAAC;IAEF,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAC/B,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;QACjE,MAAM,EAAE,YAAY;KACrB,CAAC,CACH,CAAC;AACJ,CAAC;AA7ED,4BA6EC;AAED,KAAK,UAAU,OAAO,CAAC,KAOtB;IACC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,GACrE,KAAK,CAAC;IACR,MAAM,UAAU,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;IACrE,MAAM,WAAW,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;IACvE,MAAM,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,EAAE,iBAAiB,EAAE,GACtE,kBAAkB,CAAC,WAAW,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC;IAErD,MAAM,qBAAqB,GAAG,UAAU,IAAA,wBAAU,EAAC,WAAW,CAAC,EAAE,CAAC;IAClE,IAAI,iBAAiB,EAAE,KAAK,EAAE;QAC5B,iBAAiB,CAAC,KAAK,GAAG,qBAAqB,CAAC;KACjD;IAED,IAAI,YAAY,GAAqD,EAAE,CAAC;IACxE,IAAI,SAAS,IAAI,IAAI,EAAE;QACrB,KAAK,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YACxD,IAAI,MAAM,KAAK,KAAK,EAAE;gBACpB,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;aACrD;iBAAM;gBACL,MAAM,MAAM,GAAI,QAAgB,EAAE,OAAO,EAAE,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;gBACxE,MAAM,IAAI,GAAG,UAAU,MAAM,GAAG,IAAA,wBAAU,EAAC,WAAW,CAAC,EAAE,CAAC;gBAC1D,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAChD,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;aAC3C;SACF;KACF;IAED,MAAM,UAAU,GAAG,SAAS,WAAW;MAEnC,UAAU,CAAC,MAAM,GAAG,CAAC;QACnB,CAAC,CAAC,WAAW,MAAM,uBAAuB,CACtC,eAAe,CAAC,UAAU,CAAC,CAC5B,GAAG;QACN,CAAC,CAAC,EACN,GACA,WAAW,CAAC,MAAM,GAAG,CAAC;QACpB,CAAC,CAAC,UAAU,MAAM,uBAAuB,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,GAAG;QAC1E,CAAC,CAAC,EACN,GACE,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,qBAAqB,GAC3D;;QAGE,YAAY,CAAC,MAAM,KAAK,CAAC;QACvB,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC;IACJ,YAAY;aACX,GAAG,CACF,CAAC,CAAC,EAAE,EAAE,CACJ,SAAS,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,aAAa,CAAC,CAAC,MAAM,WACrD,CAAC,CAAC,IACJ,mBAAmB,CACtB;aACA,IAAI,CAAC,KAAK,CAAC,GACd;MACI,UAAU;SACT,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;SACzB,GAAG,CACF,CAAC,CAAC,EAAE,EAAE,CAAC;uBACQ,CAAC,CAAC,IAAI;0CACa,CAAC,CAAC,IAAI;;KAE3C,CACE;SACA,IAAI,CAAC,IAAI,CAAC;kCACiB,IAAA,wBAAW,EACvC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAC1C,CACC,UAAU,CAAC,MAAM,CAAC,CAAC,GAA4B,EAAE,CAAC,EAAE,EAAE;QACpD,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,CAAC,IAAI,GAAG,CAAC;QAC3C,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CACP;MAEC,WAAW,CAAC,MAAM,GAAG,CAAC;QACpB,CAAC,CAAC;;;;;;;;;;;;;;;;;;MAkBJ;QACE,CAAC,CAAC,EACN;;mCAGE,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAqB,sBAAsB,IACxE;;;;;;;mCAQE,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC,CAAC,EAClE,WACA,sBAAsB,EAAE,UAAU,CAAC,kBAAkB,CAAC;QACpD,CAAC,CAAC,mCAAmC;QACrC,CAAC,CAAC,EACN;;;;;;;;;;;;;;;;;;CAkBD,CAAC;IAEA,MAAM,QAAQ,GAAG,GACf,iBAAiB,IAAI,IAAI;QACvB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,MAAM,cAAc,CAAC,iBAAiB,EAAE,qBAAqB,CACnE;;IAEE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;GACzD,CAAC;IAEF,MAAM,cAAc,GAAG,GACrB,iBAAiB,IAAI,IAAI;QACvB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,6BAA6B,IAAA,wBAAU,EACrC,WAAW,CACZ,MAAM,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAC9C,EAAE,CAAC;IAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,eAAe,CAAC,MAAqC;IAC5D,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAyB,EAAE,CAAC,EAAE,EAAE;QAChE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;QACvB,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACrE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,oBAAoB,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC/E,CAAC;AAED,SAAS,kBAAkB,CAAC,WAAgB,EAAE,WAAmB;IAC/D,MAAM,OAAO,GAAG,WAAW,EAAE,OAAO,CAAC;IACrC,IAAI,OAAO,IAAI,IAAI,EAAE;QACnB,OAAO,IAAI,CAAC;KACb;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QACrB,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,WAAW,CAAC,CAAC;KACpD;IACD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;QACnB,MAAM,IAAI,KAAK,CAAC,yCAAyC,GAAG,WAAW,CAAC,CAAC;KAC1E;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,CAAC;AAC9D,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,OAAY,EAAE,IAAY;IACtD,IAAI,MAAM,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;IAC5B,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/B,OAAO,IAAA,mCAAO,EAAC,MAAM,EAAE,IAAI,EAAE;QAC3B,aAAa,EAAE,EAAE;QACjB,2BAA2B,EAAE,KAAK;KACnC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAC,OAAY;IACjD,IAAI,MAAM,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;IAC5B,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/B,qDAAqD;IACrD,IAAI,IAAI,GAAG,MAAM,IAAA,mCAAO,EAAC,MAAM,EAAE,OAAO,EAAE;QACxC,aAAa,EAAE,EAAE;QACjB,2BAA2B,EAAE,KAAK;KACnC,CAAC,CAAC;IACH,OAAO,CACL,IAAI;SACD,OAAO,CAAC,yBAAyB,EAAE,EAAE,CAAC;SACtC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC;QACpC,uBAAuB;SACtB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CACtB,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,MAAW;IAChC,MAAM,GAAG,IAAA,uCAAY,EAAC,MAAM,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;IACrD,oEAAoE;IACpE,wBAAwB;IACxB,IAAI,MAAM,IAAI,IAAI,EAAE;QAClB,IAAA,8BAAQ,EAAC,MAAM,EAAE;YACf,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE;gBACb,IAAI,MAAM,CAAC,KAAK,EAAE;oBAChB,OAAO,MAAM,CAAC,KAAK,CAAC;iBACrB;gBACD,4DAA4D;gBAC5D,IAAI,MAAM,CAAC,OAAO,EAAE;oBAClB,OAAO,MAAM,CAAC,OAAO,CAAC;iBACvB;YACH,CAAC;SACF,CAAC,CAAC;KACJ;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -39,6 +39,10 @@ export declare const schema: {
39
39
  default: string;
40
40
  description: string;
41
41
  };
42
+ variant: {
43
+ enum: string[];
44
+ default: string;
45
+ };
42
46
  };
43
47
  additionalProperties: boolean;
44
48
  required: string[];
package/dist/generate.js CHANGED
@@ -1,19 +1,48 @@
1
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
2
28
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const path = require("path");
4
- const fs = require("fs");
5
- const os = require("os");
6
- const child_process = require("child_process");
7
- const fetch = require("node-fetch");
29
+ exports.generate = exports.schema = void 0;
30
+ const path = __importStar(require("path"));
31
+ const fs = __importStar(require("fs"));
32
+ const os = __importStar(require("os"));
33
+ const child_process = __importStar(require("child_process"));
34
+ const fetch = __importStar(require("node-fetch"));
8
35
  const json_schema_to_typescript_1 = require("json-schema-to-typescript");
9
- const SwaggerParser = require("@apidevtools/swagger-parser");
10
- const Ajv = require("ajv");
11
- const toJsonSchema = require("@openapi-contrib/openapi-schema-to-json-schema");
12
- const fse = require("fs-extra");
13
- const traverse = require("json-schema-traverse");
36
+ const swagger_parser_1 = __importDefault(require("@apidevtools/swagger-parser"));
37
+ const fse = __importStar(require("fs-extra"));
38
+ const ajv_1 = __importDefault(require("ajv"));
39
+ const openapi_schema_to_json_schema_1 = __importDefault(require("@openapi-contrib/openapi-schema-to-json-schema"));
40
+ const json_schema_traverse_1 = __importDefault(require("json-schema-traverse"));
41
+ const prettier = __importStar(require("prettier"));
14
42
  const { json2ts } = require("json-ts");
15
- const prettier = require("prettier");
16
43
  const prependFile = require("prepend-file");
44
+ const generate_remix_1 = require("./generate-remix");
45
+ const getOperationId_1 = require("./getOperationId");
17
46
  exports.schema = {
18
47
  type: "object",
19
48
  properties: {
@@ -32,12 +61,12 @@ exports.schema = {
32
61
  cacheType: {
33
62
  type: "string",
34
63
  enum: ["memory", "none"],
35
- default: "memory",
64
+ default: "none",
36
65
  description: "'memory' | 'none'",
37
66
  },
38
67
  throwOnNotOkayRes: {
39
68
  type: "boolean",
40
- default: false,
69
+ default: true,
41
70
  description: "Whether a SDK method should throw when the response status code is not okay",
42
71
  },
43
72
  packageName: {
@@ -55,11 +84,12 @@ exports.schema = {
55
84
  default: "CommonJS",
56
85
  description: "module type for generated SDK",
57
86
  },
87
+ variant: { enum: ["default", "remix"], default: "default" },
58
88
  },
59
89
  additionalProperties: false,
60
90
  required: ["def", "outdir"],
61
91
  };
62
- const ajv = new Ajv({ allErrors: true, useDefaults: true, coerceTypes: true });
92
+ const ajv = new ajv_1.default({ allErrors: true, useDefaults: true, coerceTypes: true });
63
93
  async function generate(opts) {
64
94
  const valid = ajv.validate(exports.schema, opts);
65
95
  if (!valid) {
@@ -78,16 +108,19 @@ async function generate(opts) {
78
108
  doc = fn(doc);
79
109
  }
80
110
  // https://apitools.dev/swagger-parser/docs/options.html
81
- const api = await SwaggerParser.validate(doc);
111
+ const api = await swagger_parser_1.default.validate(doc);
82
112
  // Ignore defs without operationId
83
113
  for (let [p, v1] of Object.entries(api.paths)) {
84
114
  for (let [m, v2] of Object.entries(v1)) {
85
- if (!getOperationId(v2) ||
115
+ if (!(0, getOperationId_1.getOperationId)(v2) ||
86
116
  opts.filterDef?.({ pathname: p, method: m }) === false) {
87
117
  delete api.paths[p][m];
88
118
  }
89
119
  }
90
120
  }
121
+ if (opts.variant === "remix") {
122
+ return (0, generate_remix_1.generate)({ api, outdir: path.resolve(opts.outdir) });
123
+ }
91
124
  const optsTypeGet = "{headers?: {[k: string]: string}, strategy?: 'network'}";
92
125
  const optsType = "{headers?: {[k: string]: string}, clearCache?: boolean}";
93
126
  let routes = await Promise.all(Object.keys(api.paths)
@@ -98,7 +131,7 @@ async function generate(opts) {
98
131
  let responseType = await createResponseBodyType(api.paths[path], "get", opts.throwOnNotOkayRes);
99
132
  let queryType = await createQueryType(api.paths[path].get.parameters);
100
133
  const hasUrlParameters = (api.paths[path].get.parameters || []).some((x) => x.in === "path");
101
- let getFcn = `${getOperationId(api.paths[path].get)}(
134
+ let getFcn = `${(0, getOperationId_1.getOperationId)(api.paths[path].get)}(
102
135
  params${hasUrlParameters ? "" : "?"}: ${createParamType(path).type},
103
136
  query?: ${queryType},
104
137
  opts?: ${optsTypeGet}
@@ -112,12 +145,13 @@ async function generate(opts) {
112
145
  const method = "post";
113
146
  let requestBodyType = await createRequestBodyType(api.paths[path], method);
114
147
  const hasNoBody = requestBodyType.type === "undefined";
115
- const requestBodyContentType = api.paths[path][method]?.requestBody
148
+ const requestBodyContentType = api.paths[path][method]
149
+ ?.requestBody
116
150
  ? getRequestBodyContentType(api.paths[path], method)
117
151
  : undefined;
118
152
  let responseType = await createResponseBodyType(api.paths[path], method, opts.throwOnNotOkayRes);
119
153
  // https://stackoverflow.com/a/35799817
120
- let fcn = `${getOperationId(api.paths[path][method])}(
154
+ let fcn = `${(0, getOperationId_1.getOperationId)(api.paths[path][method])}(
121
155
  params: ${createParamType(path).type},
122
156
  data${hasNoBody ? "?" : ""}: ${requestBodyType.type},
123
157
  query?: ${await createQueryType(api.paths[path][method].parameters)},
@@ -135,12 +169,13 @@ async function generate(opts) {
135
169
  const method = "patch";
136
170
  let requestBodyType = await createRequestBodyType(api.paths[path], method);
137
171
  const hasNoBody = requestBodyType.type === "undefined";
138
- const requestBodyContentType = api.paths[path][method]?.requestBody
172
+ const requestBodyContentType = api.paths[path][method]
173
+ ?.requestBody
139
174
  ? getRequestBodyContentType(api.paths[path], method)
140
175
  : undefined;
141
176
  let responseType = await createResponseBodyType(api.paths[path], method, opts.throwOnNotOkayRes);
142
177
  // https://stackoverflow.com/a/35799817
143
- let fcn = `${getOperationId(api.paths[path][method])}(
178
+ let fcn = `${(0, getOperationId_1.getOperationId)(api.paths[path][method])}(
144
179
  params: ${createParamType(path).type},
145
180
  data${hasNoBody ? "?" : ""}: ${requestBodyType.type},
146
181
  query?: ${await createQueryType(api.paths[path][method].parameters)},
@@ -158,12 +193,13 @@ async function generate(opts) {
158
193
  const method = "put";
159
194
  let requestBodyType = await createRequestBodyType(api.paths[path], method);
160
195
  const hasNoBody = requestBodyType.type === "undefined";
161
- const requestBodyContentType = api.paths[path][method]?.requestBody
196
+ const requestBodyContentType = api.paths[path][method]
197
+ ?.requestBody
162
198
  ? getRequestBodyContentType(api.paths[path], method)
163
199
  : undefined;
164
200
  let responseType = await createResponseBodyType(api.paths[path], method, opts.throwOnNotOkayRes);
165
201
  // https://stackoverflow.com/a/35799817
166
- let fcn = `${getOperationId(api.paths[path][method])}(
202
+ let fcn = `${(0, getOperationId_1.getOperationId)(api.paths[path][method])}(
167
203
  params: ${createParamType(path).type},
168
204
  data${hasNoBody ? "?" : ""}: ${requestBodyType.type},
169
205
  query?: ${await createQueryType(api.paths[path][method].parameters)},
@@ -180,7 +216,7 @@ async function generate(opts) {
180
216
  if (api.paths[path].delete) {
181
217
  let responseType = await createResponseBodyType(api.paths[path], "delete", opts.throwOnNotOkayRes);
182
218
  const hasUrlParameters = (api.paths[path].delete.parameters || []).some((x) => x.in === "path");
183
- let deleteFcn = `${getOperationId(api.paths[path].delete)}(
219
+ let deleteFcn = `${(0, getOperationId_1.getOperationId)(api.paths[path].delete)}(
184
220
  params${hasUrlParameters ? "" : "?"}: ${createParamType(path).type},
185
221
  query?: ${await createQueryType(api.paths[path].delete.parameters)},
186
222
  opts?: ${optsType}
@@ -228,7 +264,7 @@ async function generate(opts) {
228
264
  const buildOutputPath = path.join(tmpDirPath, "dist");
229
265
  // const nccVersion = "0.33.1";
230
266
  // child_process.execSync(
231
- // `npx --yes -p @vercel/ncc@${nccVersion} ncc build ./index.ts -o dist`,
267
+ // `npm_config_yes=true npx -p @vercel/ncc@${nccVersion} ncc build ./index.ts -o dist`,
232
268
  // { cwd: tmpDirPath, stdio: "inherit" }
233
269
  // );
234
270
  // TODO - remove if we get ncc build output to work with CRA build
@@ -587,19 +623,19 @@ function getSDKCode(methods, throwOnNotOkayRes, cacheType) {
587
623
  function getRequestBodyContentType(operationDef, method) {
588
624
  const content = operationDef?.[method]?.requestBody?.content;
589
625
  if (content == null) {
590
- throw new Error("No content: " + getOperationId(operationDef));
626
+ throw new Error("No content: " + (0, getOperationId_1.getOperationId)(operationDef));
591
627
  }
592
628
  const keys = Object.keys(content);
593
629
  if (keys.length === 0) {
594
- throw new Error("No content type: " + getOperationId(operationDef));
630
+ throw new Error("No content type: " + (0, getOperationId_1.getOperationId)(operationDef));
595
631
  }
596
632
  if (keys.length > 1) {
597
- throw new Error("More than 1 content type. Not allowed: " + getOperationId(operationDef));
633
+ throw new Error("More than 1 content type. Not allowed: " + (0, getOperationId_1.getOperationId)(operationDef));
598
634
  }
599
635
  return keys[0];
600
636
  }
601
637
  async function createRequestBodyType(operationDef, method) {
602
- let typeName = capitalize(getOperationId(operationDef[method])) + "Body";
638
+ let typeName = capitalize((0, getOperationId_1.getOperationId)(operationDef[method])) + "Body";
603
639
  if (operationDef?.[method]?.requestBody == null) {
604
640
  return { type: "undefined", name: "" };
605
641
  }
@@ -612,10 +648,10 @@ async function createRequestBodyType(operationDef, method) {
612
648
  .length === 0) {
613
649
  return { type: "object", name: "" };
614
650
  }
615
- const schema = toJsonSchema(operationDef[method].requestBody.content["application/json"].schema);
651
+ const schema = (0, openapi_schema_to_json_schema_1.default)(operationDef[method].requestBody.content["application/json"].schema);
616
652
  // Delete title, since if there's a title, json-schema-to-typescript
617
653
  // generates references.
618
- traverse(schema, {
654
+ (0, json_schema_traverse_1.default)(schema, {
619
655
  cb: (schema) => {
620
656
  if (schema.title) {
621
657
  delete schema.title;
@@ -623,7 +659,7 @@ async function createRequestBodyType(operationDef, method) {
623
659
  },
624
660
  });
625
661
  return {
626
- type: (await json_schema_to_typescript_1.compile(schema, "IRootObject", {
662
+ type: (await (0, json_schema_to_typescript_1.compile)(schema, "IRootObject", {
627
663
  bannerComment: "",
628
664
  declareExternallyReferenced: false,
629
665
  }))
@@ -662,14 +698,14 @@ async function createQueryType(parameters) {
662
698
  }, { properties: {}, required: [] });
663
699
  // Delete title, since if there's a title, json-schema-to-typescript
664
700
  // generates references.
665
- traverse(schema, {
701
+ (0, json_schema_traverse_1.default)(schema, {
666
702
  cb: (schema) => {
667
703
  if (schema.title) {
668
704
  delete schema.title;
669
705
  }
670
706
  },
671
707
  });
672
- return (await json_schema_to_typescript_1.compile(schema, "IRootObject", {
708
+ return (await (0, json_schema_to_typescript_1.compile)(schema, "IRootObject", {
673
709
  bannerComment: "",
674
710
  declareExternallyReferenced: false,
675
711
  }))
@@ -682,11 +718,11 @@ async function createResponseBodyType(operationDef, method, throwOnNotOkayRes) {
682
718
  let out = "";
683
719
  for (let [status, response] of Object.entries(responses)) {
684
720
  const _schema = response?.content?.["application/json"]?.schema;
685
- const schema = _schema == null ? _schema : toJsonSchema(_schema, { strictMode: false });
721
+ const schema = _schema == null ? _schema : (0, openapi_schema_to_json_schema_1.default)(_schema, { strictMode: false });
686
722
  // Delete title, since if there's a title, json-schema-to-typescript
687
723
  // generates references.
688
724
  if (schema != null) {
689
- traverse(schema, {
725
+ (0, json_schema_traverse_1.default)(schema, {
690
726
  cb: (schema) => {
691
727
  if (schema.title) {
692
728
  delete schema.title;
@@ -696,7 +732,7 @@ async function createResponseBodyType(operationDef, method, throwOnNotOkayRes) {
696
732
  }
697
733
  let type = schema == null
698
734
  ? schema
699
- : (await json_schema_to_typescript_1.compile(schema, "IRootObject", {
735
+ : (await (0, json_schema_to_typescript_1.compile)(schema, "IRootObject", {
700
736
  bannerComment: "",
701
737
  declareExternallyReferenced: false,
702
738
  }))
@@ -732,9 +768,6 @@ async function createResponseBodyType(operationDef, method, throwOnNotOkayRes) {
732
768
  }
733
769
  return out;
734
770
  }
735
- function getOperationId(x) {
736
- return x?.["x-technicity-sdk-name"] ?? x?.["operationId"];
737
- }
738
771
  function findParamArguments(path) {
739
772
  let parts = path.split(/\//);
740
773
  let params = parts
@@ -1 +1 @@
1
- {"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function getOperationId(x: any): any;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getOperationId = void 0;
4
+ function getOperationId(x) {
5
+ return x?.["x-technicity-sdk-name"] ?? x?.["operationId"];
6
+ }
7
+ exports.getOperationId = getOperationId;
8
+ //# sourceMappingURL=getOperationId.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getOperationId.js","sourceRoot":"","sources":["../src/getOperationId.ts"],"names":[],"mappings":";;;AAAA,SAAgB,cAAc,CAAC,CAAM;IACnC,OAAO,CAAC,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;AAC5D,CAAC;AAFD,wCAEC"}
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generate = void 0;
3
4
  var generate_1 = require("./generate");
4
- exports.generate = generate_1.generate;
5
+ Object.defineProperty(exports, "generate", { enumerable: true, get: function () { return generate_1.generate; } });
5
6
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,uCAAsC;AAA7B,8BAAA,QAAQ,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA"}
@@ -12,7 +12,7 @@ const commands = [
12
12
  const k = xs[0];
13
13
  const v = xs[1];
14
14
  return {
15
- name: "--" + param_case_1.paramCase(k),
15
+ name: "--" + (0, param_case_1.paramCase)(k),
16
16
  required: generate_1.schema.required.includes(k),
17
17
  type: v.type,
18
18
  default: v.default,
@@ -1 +1 @@
1
- {"version":3,"file":"openapi-sdk-generator.js","sourceRoot":"","sources":["../src/openapi-sdk-generator.ts"],"names":[],"mappings":";;;AAEA,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AACvC,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAC/B,2CAAuC;AACvC,yCAA8C;AAE9C,MAAM,QAAQ,GAAG;IACf;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,iBAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;YACjD,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAChB,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAQ,CAAC;YACvB,OAAO;gBACL,IAAI,EAAE,IAAI,GAAG,sBAAS,CAAC,CAAC,CAAC;gBACzB,QAAQ,EAAE,iBAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACrC,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,MAAM,EAAE,CAAC;aACV,CAAC;QACJ,CAAC,CAAC;QACF,MAAM,EAAE,mBAAQ;KACjB;CACF,CAAC;AAEF,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAC7B,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE9B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE;IAC1B,SAAS,CAAC,UAAU,EAAE,CAAC;CACxB;AAED,SAAS,UAAU,CAAC,GAAG;IACrB,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAE5C,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACvB,OAAO,CAAC,MAAM,CACZ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,MAAM,EACvD,GAAG,CAAC,WAAW,CAChB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QACzB,IAAI;YACF,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CACjD,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACrC,EAAE,CACH,CAAC;YACF,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACjB;QAAC,OAAO,GAAG,EAAE;YACZ,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACjB;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,4BAA4B;AAC5B,8CAA8C;AAC9C,IAAI;AAEJ,2BAA2B;AAC3B,4BAA4B;AAC5B,IAAI"}
1
+ {"version":3,"file":"openapi-sdk-generator.js","sourceRoot":"","sources":["../src/openapi-sdk-generator.ts"],"names":[],"mappings":";;;AAEA,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AACvC,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAC/B,2CAAuC;AACvC,yCAA8C;AAE9C,MAAM,QAAQ,GAAG;IACf;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,iBAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;YACjD,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAChB,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAQ,CAAC;YACvB,OAAO;gBACL,IAAI,EAAE,IAAI,GAAG,IAAA,sBAAS,EAAC,CAAC,CAAC;gBACzB,QAAQ,EAAE,iBAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACrC,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,MAAM,EAAE,CAAC;aACV,CAAC;QACJ,CAAC,CAAC;QACF,MAAM,EAAE,mBAAQ;KACjB;CACF,CAAC;AAEF,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAC7B,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE9B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE;IAC1B,SAAS,CAAC,UAAU,EAAE,CAAC;CACxB;AAED,SAAS,UAAU,CAAC,GAAQ;IAC1B,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAE5C,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAQ,EAAE,EAAE;QAC5B,OAAO,CAAC,MAAM,CACZ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,MAAM,EACvD,GAAG,CAAC,WAAW,CAChB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAM,EAAE,EAAE;QAC9B,IAAI;YACF,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAChD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CACjD,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACrC,EAAE,CACH,CAAC;YACF,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACjB;QAAC,OAAO,GAAG,EAAE;YACZ,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAE,GAAW,CAAC,OAAO,CAAC,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACjB;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,4BAA4B;AAC5B,8CAA8C;AAC9C,IAAI;AAEJ,2BAA2B;AAC3B,4BAA4B;AAC5B,IAAI"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@technicity/openapi-sdk-generator",
3
- "version": "2.0.0",
3
+ "version": "5.0.0",
4
4
  "license": "MIT",
5
5
  "main": "./dist/index.js",
6
6
  "bin": {
@@ -15,19 +15,23 @@
15
15
  "dependencies": {
16
16
  "@apidevtools/swagger-parser": "^10.0.3",
17
17
  "@openapi-contrib/openapi-schema-to-json-schema": "3.1.1",
18
- "@types/node": "^12.7.2",
19
- "ajv": "^6.12.3",
18
+ "@types/fs-extra": "^9.0.13",
19
+ "@types/node": "^17.0.21",
20
+ "ajv": "^8.10.0",
20
21
  "commander": "2.15.0",
21
- "fs-extra": "^8.1.0",
22
+ "del": "^6.0.0",
23
+ "fs-extra": "^10.0.1",
22
24
  "json-schema-to-typescript": "10.1.4",
23
- "json-schema-traverse": "^0.4.1",
25
+ "json-schema-traverse": "^1.0.0",
24
26
  "json-ts": "^1.6.4",
25
- "lodash": "^4.17.11",
27
+ "lodash": "^4.17.21",
26
28
  "node-fetch": "^2.6.0",
27
29
  "openapi-types": "^9.3.0",
28
- "param-case": "^3.0.3",
30
+ "param-case": "^3.0.4",
31
+ "pascal-case": "^3.1.2",
32
+ "path-to-regexp": "^6.2.0",
29
33
  "prepend-file": "^1.3.1",
30
- "prettier": "^1.18.2",
31
- "typescript": "3.8.3"
34
+ "prettier": "^2.5.1",
35
+ "typescript": "^4.6.2"
32
36
  }
33
37
  }
@@ -0,0 +1,321 @@
1
+ import * as fs from "fs/promises";
2
+ import * as path from "path";
3
+ import * as fse from "fs-extra";
4
+ import { OpenAPI, OpenAPIV3_1 } from "openapi-types";
5
+ import { getOperationId } from "./getOperationId";
6
+ import { compile } from "json-schema-to-typescript";
7
+ import { compile as compilePath } from "path-to-regexp";
8
+ import toJsonSchema from "@openapi-contrib/openapi-schema-to-json-schema";
9
+ import traverse from "json-schema-traverse";
10
+ import { pascalCase } from "pascal-case";
11
+ import * as prettier from "prettier";
12
+ import del from "del";
13
+
14
+ export async function generate(input: {
15
+ api: OpenAPI.Document;
16
+ outdir: string;
17
+ }) {
18
+ const { api, outdir } = input;
19
+
20
+ if (api.paths == null || Object.keys(api.paths).length === 0) {
21
+ throw new Error("No paths found.");
22
+ }
23
+
24
+ let results: {
25
+ operationId: string;
26
+ methodCode: string;
27
+ restCode: string;
28
+ reqBodySchemas: string;
29
+ }[] = [];
30
+
31
+ // Sort
32
+ api.paths = Object.fromEntries(
33
+ Object.entries(api.paths).sort((a, b) => a[0].localeCompare(b[0]))
34
+ );
35
+
36
+ for (let p of Object.keys(api.paths)) {
37
+ // Sort
38
+ let v1 = Object.fromEntries(
39
+ Object.entries(api.paths[p]).sort((a, b) => a[0].localeCompare(b[0]))
40
+ );
41
+ for (let [method, v2] of Object.entries(v1 ?? {})) {
42
+ const operationId = getOperationId(v2);
43
+ const parameters = (v1 as any)?.[method]?.parameters;
44
+ const responses = (v1 as any)?.[method]?.responses;
45
+ const requestBody = (v1 as any)?.[method]?.requestBody;
46
+
47
+ results.push({
48
+ operationId,
49
+ ...(await getCode({
50
+ operationId,
51
+ path: p,
52
+ method,
53
+ parameters,
54
+ requestBody,
55
+ responses,
56
+ })),
57
+ });
58
+ }
59
+ }
60
+
61
+ await del(outdir);
62
+ await fse.mkdirp(outdir);
63
+
64
+ await fs.writeFile(
65
+ path.join(outdir, `Sdk.ts`),
66
+ prettier.format(
67
+ `export type Interceptors = { req?: (req: Request) => Promise<Request>, res?: (req: Request, res: Response) => Promise<Response> };
68
+
69
+ export class Sdk {
70
+ baseUrl: string;
71
+
72
+ constructor(opts: { baseUrl: string }) {
73
+ this.baseUrl = opts.baseUrl;
74
+ }
75
+
76
+ ${results.map((x) => x.methodCode).join("\n\n")}
77
+ }
78
+
79
+ ${results.map((x) => x.restCode).join("\n\n")}
80
+ `,
81
+ { parser: "typescript" }
82
+ )
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
+ );
91
+ }
92
+
93
+ async function getCode(input: {
94
+ operationId: string;
95
+ path: string;
96
+ method: string;
97
+ parameters: OpenAPIV3_1.ParameterObject[] | null;
98
+ requestBody: any;
99
+ responses: OpenAPIV3_1.ResponsesObject | null;
100
+ }) {
101
+ const { operationId, path, method, parameters, requestBody, responses } =
102
+ input;
103
+ const pathParams = (parameters ?? []).filter((x) => x.in === "path");
104
+ const queryParams = (parameters ?? []).filter((x) => x.in === "query");
105
+ const { contentType: requestBodyContentType, schema: requestBodySchema } =
106
+ getRequestBodyInfo(requestBody, operationId) ?? {};
107
+
108
+ const requestBodySchemaName = `ReqData${pascalCase(operationId)}`;
109
+ if (requestBodySchema?.title) {
110
+ requestBodySchema.title = requestBodySchemaName;
111
+ }
112
+
113
+ let resBodyTypes: { name: string; status: string; type: string }[] = [];
114
+ if (responses != null) {
115
+ for (let [status, response] of Object.entries(responses)) {
116
+ if (status === "204") {
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 });
123
+ }
124
+ }
125
+ }
126
+
127
+ const methodCode = `async ${operationId}(input: {
128
+ ${
129
+ pathParams.length > 0
130
+ ? `params: ${await getInlineTypeScriptType(
131
+ getParamsSchema(pathParams)
132
+ )};`
133
+ : ""
134
+ }${
135
+ queryParams.length > 0
136
+ ? `query: ${await getInlineTypeScriptType(getParamsSchema(queryParams))};`
137
+ : ""
138
+ }${
139
+ requestBody == null ? "" : `data: ${requestBodySchemaName};`
140
+ }headers?: { [k: string]: string };
141
+ interceptors: Interceptors;
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
+ } {
155
+ ${pathParams
156
+ .filter((x) => x.required)
157
+ .map(
158
+ (x) => `
159
+ if (input.params.${x.name} == null) {
160
+ throw new Error("Missing \`params.${x.name}\`");
161
+ }
162
+ `
163
+ )
164
+ .join("\n")}
165
+ let url = \`\${this.baseUrl}${compilePath(
166
+ path.replace(/{/g, ":").replace(/}/g, "")
167
+ )(
168
+ pathParams.reduce((acc: { [k: string]: string }, v) => {
169
+ acc[v.name] = `\${input.params.${v.name}}`;
170
+ return acc;
171
+ }, {})
172
+ )}\`
173
+ ${
174
+ queryParams.length > 0
175
+ ? `
176
+ if (input.query) {
177
+ let q: [string, string][] = [];
178
+ for (let k in input.query) {
179
+ const _v = (input.query as any)[k];
180
+ if (_v === void 0) {
181
+ continue;
182
+ }
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]);
191
+ }
192
+ url += \`?\${new URLSearchParams(q)}\`;
193
+ }`
194
+ : ""
195
+ }
196
+
197
+ const headers = new Headers( ${
198
+ requestBody == null ? "" : `{"content-type": "${requestBodyContentType}"}`
199
+ });
200
+ if (input?.headers) {
201
+ for (let k in input.headers) {
202
+ headers.append(k, input.headers[k]);
203
+ }
204
+ }
205
+
206
+ let req = new Request(url, { ${
207
+ method !== "get" ? `method: "${method.toLocaleUpperCase()}",` : ""
208
+ }headers,${
209
+ requestBodyContentType?.startsWith("application/json")
210
+ ? `body: JSON.stringify(input.data),`
211
+ : ""
212
+ }});
213
+
214
+ const interceptors = input.interceptors;
215
+
216
+ if (interceptors?.req) {
217
+ req = await interceptors.req(req);
218
+ }
219
+
220
+ let res = await fetch(req);
221
+
222
+ if (interceptors?.res) {
223
+ res = await interceptors.res(req, res);
224
+ }
225
+
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 };
229
+ }
230
+ `;
231
+
232
+ const restCode = `${
233
+ requestBodySchema == null
234
+ ? ""
235
+ : await getTsInterface(requestBodySchema, requestBodySchemaName)
236
+ }
237
+
238
+ ${resBodyTypes.map((x) => `export ${x.type}`).join("\n\n")}
239
+ `;
240
+
241
+ const reqBodySchemas = `${
242
+ requestBodySchema == null
243
+ ? ""
244
+ : `export const schemaReqData${pascalCase(
245
+ operationId
246
+ )} = ${JSON.stringify(requestBodySchema)}`
247
+ }`;
248
+
249
+ return { methodCode, restCode, reqBodySchemas };
250
+ }
251
+
252
+ function getParamsSchema(params: OpenAPIV3_1.ParameterObject[]) {
253
+ const properties = params.reduce((acc: { [k: string]: any }, v) => {
254
+ acc[v.name] = v.schema;
255
+ return acc;
256
+ }, {});
257
+ const required = params.filter((x) => x.required).map((x) => x.name);
258
+ return { type: "object", properties, additionalProperties: false, required };
259
+ }
260
+
261
+ function getRequestBodyInfo(requestBody: any, operationId: string) {
262
+ const content = requestBody?.content;
263
+ if (content == null) {
264
+ return null;
265
+ }
266
+ const keys = Object.keys(content);
267
+ if (keys.length === 0) {
268
+ throw new Error("No content type: " + operationId);
269
+ }
270
+ if (keys.length > 1) {
271
+ throw new Error("More than 1 content type. Not allowed: " + operationId);
272
+ }
273
+ const contentType = keys[0];
274
+ return { contentType, schema: content[contentType].schema };
275
+ }
276
+
277
+ async function getTsInterface(schema_: any, name: string) {
278
+ let schema = { ...schema_ };
279
+ schema = prepareSchema(schema);
280
+ return compile(schema, name, {
281
+ bannerComment: "",
282
+ declareExternallyReferenced: false,
283
+ });
284
+ }
285
+
286
+ async function getInlineTypeScriptType(schema_: any) {
287
+ let schema = { ...schema_ };
288
+ schema = prepareSchema(schema);
289
+ // `compile` seems to mutate schema, so shallow clone
290
+ let _out = await compile(schema, "IStub", {
291
+ bannerComment: "",
292
+ declareExternallyReferenced: false,
293
+ });
294
+ return (
295
+ _out
296
+ .replace(/export interface IStub/g, "")
297
+ .replace(/export type IStub =/g, "")
298
+ // .replace(/};/g, "}")
299
+ .replace(/\n/g, "")
300
+ );
301
+ }
302
+
303
+ function prepareSchema(schema: any) {
304
+ schema = toJsonSchema(schema, { strictMode: false });
305
+ // Delete title, since if there's a title, json-schema-to-typescript
306
+ // generates references.
307
+ if (schema != null) {
308
+ traverse(schema, {
309
+ cb: (schema) => {
310
+ if (schema.title) {
311
+ delete schema.title;
312
+ }
313
+ // TODO: this is a workaround for attribute SDK bad patterns
314
+ if (schema.pattern) {
315
+ delete schema.pattern;
316
+ }
317
+ },
318
+ });
319
+ }
320
+ return schema;
321
+ }
package/src/generate.ts CHANGED
@@ -4,14 +4,16 @@ import * as os from "os";
4
4
  import * as child_process from "child_process";
5
5
  import * as fetch from "node-fetch";
6
6
  import { compile } from "json-schema-to-typescript";
7
- const SwaggerParser = require("@apidevtools/swagger-parser");
8
- const Ajv = require("ajv");
9
- const toJsonSchema = require("@openapi-contrib/openapi-schema-to-json-schema");
10
- const fse = require("fs-extra");
11
- const traverse = require("json-schema-traverse");
7
+ import SwaggerParser from "@apidevtools/swagger-parser";
8
+ import * as fse from "fs-extra";
9
+ import Ajv from "ajv";
10
+ import toJsonSchema from "@openapi-contrib/openapi-schema-to-json-schema";
11
+ import traverse from "json-schema-traverse";
12
+ import * as prettier from "prettier";
12
13
  const { json2ts } = require("json-ts");
13
- const prettier = require("prettier");
14
14
  const prependFile = require("prepend-file");
15
+ import { generate as generateRemix } from "./generate-remix";
16
+ import { getOperationId } from "./getOperationId";
15
17
 
16
18
  export const schema = {
17
19
  type: "object",
@@ -32,12 +34,12 @@ export const schema = {
32
34
  cacheType: {
33
35
  type: "string",
34
36
  enum: ["memory", "none"],
35
- default: "memory",
37
+ default: "none",
36
38
  description: "'memory' | 'none'",
37
39
  },
38
40
  throwOnNotOkayRes: {
39
41
  type: "boolean",
40
- default: false,
42
+ default: true,
41
43
  description:
42
44
  "Whether a SDK method should throw when the response status code is not okay",
43
45
  },
@@ -56,6 +58,7 @@ export const schema = {
56
58
  default: "CommonJS",
57
59
  description: "module type for generated SDK",
58
60
  },
61
+ variant: { enum: ["default", "remix"], default: "default" },
59
62
  },
60
63
  additionalProperties: false,
61
64
  required: ["def", "outdir"],
@@ -101,6 +104,10 @@ export async function generate(opts) {
101
104
  }
102
105
  }
103
106
 
107
+ if (opts.variant === "remix") {
108
+ return generateRemix({ api, outdir: path.resolve(opts.outdir) });
109
+ }
110
+
104
111
  const optsTypeGet = "{headers?: {[k: string]: string}, strategy?: 'network'}";
105
112
  const optsType = "{headers?: {[k: string]: string}, clearCache?: boolean}";
106
113
 
@@ -140,7 +147,8 @@ export async function generate(opts) {
140
147
  method
141
148
  );
142
149
  const hasNoBody = requestBodyType.type === "undefined";
143
- const requestBodyContentType = api.paths[path][method]?.requestBody
150
+ const requestBodyContentType = (api.paths[path][method] as any)
151
+ ?.requestBody
144
152
  ? getRequestBodyContentType(api.paths[path], method)
145
153
  : undefined;
146
154
  let responseType = await createResponseBodyType(
@@ -176,7 +184,8 @@ export async function generate(opts) {
176
184
  method
177
185
  );
178
186
  const hasNoBody = requestBodyType.type === "undefined";
179
- const requestBodyContentType = api.paths[path][method]?.requestBody
187
+ const requestBodyContentType = (api.paths[path][method] as any)
188
+ ?.requestBody
180
189
  ? getRequestBodyContentType(api.paths[path], method)
181
190
  : undefined;
182
191
  let responseType = await createResponseBodyType(
@@ -212,7 +221,8 @@ export async function generate(opts) {
212
221
  method
213
222
  );
214
223
  const hasNoBody = requestBodyType.type === "undefined";
215
- const requestBodyContentType = api.paths[path][method]?.requestBody
224
+ const requestBodyContentType = (api.paths[path][method] as any)
225
+ ?.requestBody
216
226
  ? getRequestBodyContentType(api.paths[path], method)
217
227
  : undefined;
218
228
  let responseType = await createResponseBodyType(
@@ -317,7 +327,7 @@ export async function generate(opts) {
317
327
  const buildOutputPath = path.join(tmpDirPath, "dist");
318
328
  // const nccVersion = "0.33.1";
319
329
  // child_process.execSync(
320
- // `npx --yes -p @vercel/ncc@${nccVersion} ncc build ./index.ts -o dist`,
330
+ // `npm_config_yes=true npx -p @vercel/ncc@${nccVersion} ncc build ./index.ts -o dist`,
321
331
  // { cwd: tmpDirPath, stdio: "inherit" }
322
332
  // );
323
333
  // TODO - remove if we get ncc build output to work with CRA build
@@ -921,10 +931,6 @@ async function createResponseBodyType(
921
931
  return out;
922
932
  }
923
933
 
924
- function getOperationId(x: any) {
925
- return x?.["x-technicity-sdk-name"] ?? x?.["operationId"];
926
- }
927
-
928
934
  function findParamArguments(path: string) {
929
935
  let parts = path.split(/\//);
930
936
  let params = parts
@@ -0,0 +1,3 @@
1
+ export function getOperationId(x: any) {
2
+ return x?.["x-technicity-sdk-name"] ?? x?.["operationId"];
3
+ }
@@ -31,19 +31,19 @@ if (!commander.args.length) {
31
31
  commander.outputHelp();
32
32
  }
33
33
 
34
- function addCommand(cmd) {
34
+ function addCommand(cmd: any) {
35
35
  const command = commander.command(cmd.name);
36
36
 
37
- cmd.opts.forEach((opt) => {
37
+ cmd.opts.forEach((opt: any) => {
38
38
  command.option(
39
39
  (opt.alias ? opt.alias + ", " : "") + opt.name + " <x>",
40
40
  opt.description
41
41
  );
42
42
  });
43
43
 
44
- command.action(async (c) => {
44
+ command.action(async (c: any) => {
45
45
  try {
46
- const keys = cmd.opts.map((o) => o.optKey);
46
+ const keys = cmd.opts.map((o: any) => o.optKey);
47
47
  const opts = Object.entries(_.pick(keys, c)).reduce(
48
48
  (acc, [k, v]) => ({ ...acc, [k]: v }),
49
49
  {}
@@ -52,7 +52,7 @@ function addCommand(cmd) {
52
52
  process.exit(0);
53
53
  } catch (err) {
54
54
  // eslint-disable-next-line no-console
55
- console.error(err.message);
55
+ console.error((err as any).message);
56
56
  process.exit(1);
57
57
  }
58
58
  });
package/tsconfig.json CHANGED
@@ -2,6 +2,7 @@
2
2
  "compilerOptions": {
3
3
  "target": "ES2020",
4
4
  "module": "CommonJS",
5
+ "esModuleInterop": true,
5
6
  "declaration": true,
6
7
  "outDir": "./dist",
7
8
  "sourceMap": true,