UNPKG

openapi-typescript

Version:

Convert OpenAPI 3.0 & 3.1 schemas to TypeScript

1 lines 7.08 kB
{"version":3,"file":"index.cjs","sources":["../../src/transform/index.ts"],"sourcesContent":["import ts, { type InterfaceDeclaration, type TypeLiteralNode } from \"typescript\";\nimport { performance } from \"node:perf_hooks\";\nimport { NEVER, STRING, stringToAST, tsModifiers, tsRecord } from \"../lib/ts.js\";\nimport { createRef, debug } from \"../lib/utils.js\";\nimport type { GlobalContext, OpenAPI3 } from \"../types.js\";\nimport transformComponentsObject from \"./components-object.js\";\nimport transformPathsObject from \"./paths-object.js\";\nimport transformSchemaObject from \"./schema-object.js\";\nimport transformWebhooksObject from \"./webhooks-object.js\";\nimport makeApiPathsEnum from \"./paths-enum.js\";\n\ntype SchemaTransforms = keyof Pick<OpenAPI3, \"paths\" | \"webhooks\" | \"components\" | \"$defs\">;\n\nconst transformers: Record<SchemaTransforms, (node: any, options: GlobalContext) => ts.Node | ts.Node[]> = {\n paths: transformPathsObject,\n webhooks: transformWebhooksObject,\n components: transformComponentsObject,\n $defs: (node, options) => transformSchemaObject(node, { path: createRef([\"$defs\"]), ctx: options, schema: node }),\n};\n\nexport default function transformSchema(schema: OpenAPI3, ctx: GlobalContext) {\n const type: ts.Node[] = [];\n\n if (ctx.inject) {\n const injectNodes = stringToAST(ctx.inject) as ts.Node[];\n type.push(...injectNodes);\n }\n\n for (const root of Object.keys(transformers) as SchemaTransforms[]) {\n const emptyObj = ts.factory.createTypeAliasDeclaration(\n /* modifiers */ tsModifiers({ export: true }),\n /* name */ root,\n /* typeParameters */ undefined,\n /* type */ tsRecord(STRING, NEVER),\n );\n\n if (schema[root] && typeof schema[root] === \"object\") {\n const rootT = performance.now();\n const subTypes = ([] as ts.Node[]).concat(transformers[root](schema[root], ctx));\n for (const subType of subTypes) {\n if (ts.isTypeNode(subType)) {\n if ((subType as ts.TypeLiteralNode).members?.length) {\n type.push(\n ctx.exportType\n ? ts.factory.createTypeAliasDeclaration(\n /* modifiers */ tsModifiers({ export: true }),\n /* name */ root,\n /* typeParameters */ undefined,\n /* type */ subType,\n )\n : ts.factory.createInterfaceDeclaration(\n /* modifiers */ tsModifiers({ export: true }),\n /* name */ root,\n /* typeParameters */ undefined,\n /* heritageClauses */ undefined,\n /* members */ (subType as TypeLiteralNode).members,\n ),\n );\n debug(`${root} done`, \"ts\", performance.now() - rootT);\n } else {\n type.push(emptyObj);\n debug(`${root} done (skipped)`, \"ts\", 0);\n }\n } else if (ts.isTypeAliasDeclaration(subType)) {\n type.push(subType);\n } else {\n type.push(emptyObj);\n debug(`${root} done (skipped)`, \"ts\", 0);\n }\n }\n } else {\n type.push(emptyObj);\n debug(`${root} done (skipped)`, \"ts\", 0);\n }\n }\n\n // inject\n let hasOperations = false;\n for (const injectedType of ctx.injectFooter) {\n if (!hasOperations && (injectedType as InterfaceDeclaration)?.name?.escapedText === \"operations\") {\n hasOperations = true;\n }\n type.push(injectedType);\n }\n if (!hasOperations) {\n // if no operations created, inject empty operations type\n type.push(\n ts.factory.createTypeAliasDeclaration(\n /* modifiers */ tsModifiers({ export: true }),\n /* name */ \"operations\",\n /* typeParameters */ undefined,\n /* type */ tsRecord(STRING, NEVER),\n ),\n );\n }\n\n if (ctx.makePathsEnum && schema.paths) {\n type.push(makeApiPathsEnum(schema.paths));\n }\n\n return type;\n}\n"],"names":["transformPathsObject","transformWebhooksObject","transformComponentsObject","transformSchemaObject","createRef","stringToAST","ts","tsModifiers","tsRecord","STRING","NEVER","performance","debug","makeApiPathsEnum"],"mappings":";;;;;;;;;;;;;;;;AAaA,MAAM,YAAqG,GAAA;AAAA,EACzG,KAAO,EAAAA,WAAA;AAAA,EACP,QAAU,EAAAC,cAAA;AAAA,EACV,UAAY,EAAAC,wBAAA;AAAA,EACZ,OAAO,CAAC,IAAA,EAAM,OAAY,KAAAC,oBAAA,CAAsB,MAAM,EAAE,IAAA,EAAMC,eAAU,CAAA,CAAC,OAAO,CAAC,CAAA,EAAG,KAAK,OAAS,EAAA,MAAA,EAAQ,MAAM;AAClH,CAAA;AAEwB,SAAA,eAAA,CAAgB,QAAkB,GAAoB,EAAA;AAC5E,EAAA,MAAM,OAAkB,EAAC;AAEzB,EAAA,IAAI,IAAI,MAAQ,EAAA;AACd,IAAM,MAAA,WAAA,GAAcC,cAAY,CAAA,GAAA,CAAI,MAAM,CAAA;AAC1C,IAAK,IAAA,CAAA,IAAA,CAAK,GAAG,WAAW,CAAA;AAAA;AAG1B,EAAA,KAAA,MAAW,IAAQ,IAAA,MAAA,CAAO,IAAK,CAAA,YAAY,CAAyB,EAAA;AAClE,IAAM,MAAA,QAAA,GAAWC,YAAG,OAAQ,CAAA,0BAAA;AAAA;AAAA,MACLC,cAAY,CAAA,EAAE,MAAQ,EAAA,IAAA,EAAM,CAAA;AAAA;AAAA,MAC5B,IAAA;AAAA;AAAA,MACA,MAAA;AAAA;AAAA,MACAC,WAAA,CAASC,WAAQC,QAAK;AAAA,KAC7C;AAEA,IAAA,IAAI,OAAO,IAAI,CAAA,IAAK,OAAO,MAAO,CAAA,IAAI,MAAM,QAAU,EAAA;AACpD,MAAM,MAAA,KAAA,GAAQC,4BAAY,GAAI,EAAA;AAC9B,MAAM,MAAA,QAAA,GAAY,EAAC,CAAgB,MAAO,CAAA,YAAA,CAAa,IAAI,CAAA,CAAE,MAAO,CAAA,IAAI,CAAG,EAAA,GAAG,CAAC,CAAA;AAC/E,MAAA,KAAA,MAAW,WAAW,QAAU,EAAA;AAC9B,QAAI,IAAAL,WAAA,CAAG,UAAW,CAAA,OAAO,CAAG,EAAA;AAC1B,UAAK,IAAA,OAAA,CAA+B,SAAS,MAAQ,EAAA;AACnD,YAAK,IAAA,CAAA,IAAA;AAAA,cACH,GAAA,CAAI,UACA,GAAAA,WAAA,CAAG,OAAQ,CAAA,0BAAA;AAAA;AAAA,gBACYC,cAAY,CAAA,EAAE,MAAQ,EAAA,IAAA,EAAM,CAAA;AAAA;AAAA,gBAC5B,IAAA;AAAA;AAAA,gBACA,MAAA;AAAA;AAAA,gBACA;AAAA,eACvB,GACAD,YAAG,OAAQ,CAAA,0BAAA;AAAA;AAAA,gBACaC,cAAY,CAAA,EAAE,MAAQ,EAAA,IAAA,EAAM,CAAA;AAAA;AAAA,gBAC5B,IAAA;AAAA;AAAA,gBACA,MAAA;AAAA;AAAA,gBACA,MAAA;AAAA;AAAA,gBACC,OAA4B,CAAA;AAAA;AACrD,aACN;AACA,YAAAK,WAAA,CAAM,GAAG,IAAI,CAAA,KAAA,CAAA,EAAS,MAAMD,2BAAY,CAAA,GAAA,KAAQ,KAAK,CAAA;AAAA,WAChD,MAAA;AACL,YAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAClB,YAAAC,WAAA,CAAM,CAAG,EAAA,IAAI,CAAmB,eAAA,CAAA,EAAA,IAAA,EAAM,CAAC,CAAA;AAAA;AACzC,SACS,MAAA,IAAAN,WAAA,CAAG,sBAAuB,CAAA,OAAO,CAAG,EAAA;AAC7C,UAAA,IAAA,CAAK,KAAK,OAAO,CAAA;AAAA,SACZ,MAAA;AACL,UAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAClB,UAAAM,WAAA,CAAM,CAAG,EAAA,IAAI,CAAmB,eAAA,CAAA,EAAA,IAAA,EAAM,CAAC,CAAA;AAAA;AACzC;AACF,KACK,MAAA;AACL,MAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAClB,MAAAA,WAAA,CAAM,CAAG,EAAA,IAAI,CAAmB,eAAA,CAAA,EAAA,IAAA,EAAM,CAAC,CAAA;AAAA;AACzC;AAIF,EAAA,IAAI,aAAgB,GAAA,KAAA;AACpB,EAAW,KAAA,MAAA,YAAA,IAAgB,IAAI,YAAc,EAAA;AAC3C,IAAA,IAAI,CAAC,aAAA,IAAkB,YAAuC,EAAA,IAAA,EAAM,gBAAgB,YAAc,EAAA;AAChG,MAAgB,aAAA,GAAA,IAAA;AAAA;AAElB,IAAA,IAAA,CAAK,KAAK,YAAY,CAAA;AAAA;AAExB,EAAA,IAAI,CAAC,aAAe,EAAA;AAElB,IAAK,IAAA,CAAA,IAAA;AAAA,MACHN,YAAG,OAAQ,CAAA,0BAAA;AAAA;AAAA,QACYC,cAAY,CAAA,EAAE,MAAQ,EAAA,IAAA,EAAM,CAAA;AAAA;AAAA,QAC5B,YAAA;AAAA;AAAA,QACA,MAAA;AAAA;AAAA,QACAC,WAAA,CAASC,WAAQC,QAAK;AAAA;AAC7C,KACF;AAAA;AAGF,EAAI,IAAA,GAAA,CAAI,aAAiB,IAAA,MAAA,CAAO,KAAO,EAAA;AACrC,IAAA,IAAA,CAAK,IAAK,CAAAG,SAAA,CAAiB,MAAO,CAAA,KAAK,CAAC,CAAA;AAAA;AAG1C,EAAO,OAAA,IAAA;AACT;;;;"}