@samchon/openapi
Version:
Universal OpenAPI to LLM function calling schemas. Transform any Swagger/OpenAPI document into type-safe schemas for OpenAI, Claude, Qwen, and more.
1 lines • 8.01 kB
Source Map (JSON)
{"version":3,"file":"HttpMigrateRouteAccessor.mjs","sources":["../../src/composers/HttpMigrateRouteAccessor.ts"],"sourcesContent":["import { IHttpMigrateRoute } from \"../structures/IHttpMigrateRoute\";\nimport { EndpointUtil } from \"../utils/EndpointUtil\";\nimport { Escaper } from \"../utils/Escaper\";\nimport { MapUtil } from \"../utils/MapUtil\";\n\nexport namespace HttpMigrateRouteAccessor {\n export const overwrite = (routes: IHttpMigrateRoute[]): void => {\n const predefined: Map<string, number> = getPredefinedAccessors(routes);\n const dict: Map<string, IElement> = collect((op) =>\n op.emendedPath\n .split(\"/\")\n .filter((str) => !!str.length && str[0] !== \":\")\n .map(EndpointUtil.normalize)\n .map((str) => (Escaper.variable(str) ? str : `_${str}`)),\n )(routes) as Map<string, IElement>;\n\n for (const props of dict.values())\n props.entries.forEach((entry, i) => {\n entry.alias = EndpointUtil.escapeDuplicate(\n [\n ...props.children,\n ...props.entries.filter((_, j) => i !== j).map((e) => e.alias),\n ].map(EndpointUtil.normalize),\n )(EndpointUtil.normalize(entry.alias));\n\n const parameters: { name: string; key: string }[] = [\n ...entry.route.parameters,\n ...(entry.route.body ? [entry.route.body] : []),\n ...(entry.route.headers ? [entry.route.headers] : []),\n ...(entry.route.query ? [entry.route.query] : []),\n ];\n parameters.forEach(\n (p, i) =>\n (p.key = EndpointUtil.escapeDuplicate([\n \"connection\",\n entry.alias,\n ...parameters.filter((_, j) => i !== j).map((y) => y.key),\n ])(p.key)),\n );\n\n const accessor: string[] | undefined =\n entry.route.operation()[\"x-samchon-accessor\"];\n if (accessor !== undefined && predefined.get(accessor.join(\".\")) === 1)\n entry.route.accessor = accessor;\n else entry.route.accessor = [...props.namespace, entry.alias];\n });\n\n for (const x of routes) {\n while (true) {\n const neighbor: IHttpMigrateRoute | undefined = routes.find(\n (y) =>\n y.accessor.length < x.accessor.length &&\n x.accessor\n .slice(0, y.accessor.length)\n .every((v, i) => v === y.accessor[i]),\n );\n if (neighbor === undefined) break;\n x.accessor[neighbor.accessor.length - 1] =\n `_${x.accessor[neighbor.accessor.length - 1]}`;\n }\n }\n };\n\n const collect =\n (getter: (r: IHttpMigrateRoute) => string[]) =>\n (routes: IHttpMigrateRoute[]): Map<string, IElement> => {\n const dict: Map<string, IElement> = new Map();\n for (const r of routes) {\n const namespace: string[] = getter(r);\n let last: IElement = MapUtil.take(dict)(namespace.join(\".\"))(() => ({\n namespace,\n children: new Set(),\n entries: [],\n }));\n last.entries.push({\n route: r,\n alias: getName(r),\n });\n namespace.slice(0, -1).forEach((_i, i, array) => {\n const partial: string[] = namespace.slice(0, array.length - i);\n const element: IElement = MapUtil.take(dict)(partial.join(\".\"))(\n () => ({\n namespace: partial,\n children: new Set(),\n entries: [],\n }),\n );\n element.children.add(last.namespace.at(-1)!);\n });\n const top = MapUtil.take(dict)(\"\")(() => ({\n namespace: [],\n children: new Set(),\n entries: [],\n }));\n if (namespace.length) top.children.add(namespace[0]);\n }\n return dict;\n };\n\n const getName = (op: IHttpMigrateRoute): string => {\n const method = op.method === \"delete\" ? \"erase\" : op.method;\n if (op.parameters.length === 0) return method;\n return (\n method +\n \"By\" +\n op.parameters.map((p) => EndpointUtil.capitalize(p.key)).join(\"And\")\n );\n };\n\n const getPredefinedAccessors = (\n routes: IHttpMigrateRoute[],\n ): Map<string, number> => {\n const dict: Map<string, number> = new Map();\n for (const r of routes) {\n const accessor = r.operation()[\"x-samchon-accessor\"]?.join(\".\");\n if (accessor === undefined) continue;\n else if (dict.has(accessor)) dict.set(accessor, dict.get(accessor)! + 1);\n else dict.set(accessor, 1);\n }\n return dict;\n };\n\n interface IElement {\n namespace: string[];\n entries: IEntry[];\n children: Set<string>;\n }\n interface IEntry {\n route: IHttpMigrateRoute;\n alias: string;\n }\n}\n"],"names":["HttpMigrateRouteAccessor","overwrite","routes","predefined","getPredefinedAccessors","dict","collect","op","emendedPath","split","filter","str","length","map","EndpointUtil","normalize","Escaper","variable","props","values","entries","forEach","entry","i","alias","escapeDuplicate","children","_","j","e","parameters","route","body","headers","query","p","key","y","accessor","operation","undefined","get","join","namespace","x","neighbor","find","slice","every","v","getter","Map","r","last","MapUtil","take","Set","push","getName","_i","array","partial","element","add","at","top","method","capitalize","has","set"],"mappings":"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"}