UNPKG

infinity-forge

Version:
114 lines 5.11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateOpenApiClient = generateOpenApiClient; // Convert an OpenAPI schema (or reference) into a valid TypeScript type string. function convertSchemaToTs(schema, indent) { var _a; if (indent === void 0) { indent = 0; } var space = function (lvl) { return " ".repeat(lvl); }; if (!schema) return "any"; // Handle plain object mapping (already processed params/request body) if (typeof schema === "object" && !Array.isArray(schema) && !schema["type"] && !schema["$ref"]) { var props = Object.entries(schema) .map(function (_a) { var k = _a[0], v = _a[1]; var safeKey = /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(k) ? k : "'".concat(k, "'"); var valueTs = Array.isArray(v) ? v.length ? "".concat(convertSchemaToTs(v[0], indent + 2), "[]") : "any[]" : typeof v === "string" ? (function () { var raw = v.trim(); var primitiveRegex = /^(string|number|boolean|any|unknown|void|never|object|Record<.*>|Date)$/; var looksLikeType = primitiveRegex.test(raw) || raw.includes(" | ") || raw.includes("<") || raw.includes("| undefined") || raw.includes("["); return looksLikeType ? raw : "'".concat(raw.replace(/'/g, "\\'"), "'"); })() : typeof v === "number" || typeof v === "bigint" ? "".concat(v) : typeof v === "boolean" ? "".concat(v) : typeof v === "object" ? convertSchemaToTs(v, indent + 2) : "any"; return "".concat(space(indent + 1)).concat(safeKey, ": ").concat(valueTs, ";"); }) .join("\n"); return "{\n".concat(props, "\n").concat(space(indent), "}"); } // Handle $ref references if (schema["$ref"]) { return schema["$ref"].replace("#/components/schemas/", ""); } var s = schema; // Arrays if (s.type === "array" && s.items) { return "".concat(convertSchemaToTs(s.items, indent), "[]"); } // Objects if (s.type === "object" || s.properties || s.additionalProperties) { // Dictionaries (additionalProperties) if (s.additionalProperties) { var valueTs = convertSchemaToTs(s.additionalProperties, indent + 1); return "Record<string, ".concat(valueTs, ">"); } // Regular object with defined props if (s.properties) { var props = Object.entries(s.properties) .map(function (_a) { var key = _a[0], value = _a[1]; var safeKey = /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(key) ? key : "'".concat(key, "'"); return "".concat(space(indent + 1)).concat(safeKey, ": ").concat(convertSchemaToTs(value, indent + 1), ";"); }) .join("\n"); return "{\n".concat(props, "\n").concat(space(indent), "}"); } // Fallback to generic object return "Record<string, any>"; } // Primitive & formatted types switch (s.type) { case "integer": case "number": return "number"; case "boolean": return "boolean"; case "string": if (s.format === "date-time" || s.format === "date") { return "Date"; } return "string"; default: // allOf with single reference if (((_a = s.allOf) === null || _a === void 0 ? void 0 : _a[0]) && s.allOf[0]["$ref"]) { return s.allOf[0]["$ref"].replace("#/components/schemas/", ""); } return "any"; } } function generateMethodsString(methods) { return Object.keys(methods) .map(function (method) { var _a = methods[method], params = _a.params, requestBody = _a.requestBody, result = _a.result; var paramsString = params ? convertSchemaToTs(params, 3) : "null"; var requestBodyString = requestBody ? convertSchemaToTs(requestBody, 3) : "null"; var resultString = result ? convertSchemaToTs(result, 3) : "null"; return " ".concat(method, ": {\n params: ").concat(paramsString, ",\n requestBody: ").concat(requestBodyString, ",\n result: ").concat(resultString, "\n }"); }) .join(",\n"); } function generateOpenApiClient(routesApi, interfacesOpenApi) { var apiLiteral = Object.keys(routesApi) .map(function (path) { var methods = routesApi[path]; return " \"".concat(path, "\": {\n").concat(generateMethodsString(methods), "\n }"); }) .join(",\n"); return "export type Swagger = {\n".concat(apiLiteral, "\n};\n\n").concat(interfacesOpenApi); } //# sourceMappingURL=index.js.map