oazapfts
Version:
OpenApi TypeScript client generator
1 lines • 11.1 kB
Source Map (JSON)
{"version":3,"file":"src-DvHaU3Vh.cjs","names":[],"sources":["../src/internalPlugins/defaultComposeSource.ts","../src/internalPlugins/defaultGenerateMethod.ts","../src/internalPlugins/includeExcludeFilterEndpoint.ts","../src/internalPlugins/numericBooleanQueryParameters.ts","../src/internalPlugins/index.ts","../src/index.ts"],"sourcesContent":["import ts from \"typescript\";\nimport { createDefaultsStatement } from \"../generate/createDefaultsStatement\";\nimport { createImportStatement } from \"../generate/generateImports\";\nimport { createServersStatement } from \"../generate/generateServers\";\nimport {\n UNSTABLE_createPlugin,\n UNSTABLE_OAZAPFTS_PLUGIN_PRECEDENCE,\n} from \"../plugin\";\n\nexport function defaultComposeSourcePlugin() {\n return UNSTABLE_createPlugin(\n (hooks) => {\n hooks.composeSource.tap(\"defaultComposeSource\", (ctx, methods) => {\n return [\n ...ctx.imports.map(createImportStatement),\n createDefaultsStatement(ctx.defaults),\n ...ctx.init,\n createServersStatement(ctx.servers),\n ...ctx.aliases,\n ...methods,\n ...ctx.enumAliases,\n ] satisfies ts.Statement[];\n });\n },\n {\n precedence: UNSTABLE_OAZAPFTS_PLUGIN_PRECEDENCE.LAZY,\n },\n );\n}\n","import { generateClientMethod } from \"../generate/generateClientMethod\";\nimport {\n UNSTABLE_createPlugin,\n UNSTABLE_OAZAPFTS_PLUGIN_PRECEDENCE,\n} from \"../plugin\";\n\nexport function defaultGenerateMethodPlugin() {\n return UNSTABLE_createPlugin(\n (hooks) => {\n hooks.generateMethod.tapPromise(\n \"defaultGenerateMethod\",\n async (endpoint, ctx) => {\n return generateClientMethod(\n endpoint.method,\n endpoint.path,\n endpoint.operation,\n endpoint.pathItem,\n ctx,\n hooks,\n );\n },\n );\n },\n {\n precedence: UNSTABLE_OAZAPFTS_PLUGIN_PRECEDENCE.LAZY,\n },\n );\n}\n","import { UNSTABLE_createPlugin } from \"../plugin\";\n\nexport function includeExcludeFilterEndpointPlugin() {\n return UNSTABLE_createPlugin((hooks) => {\n hooks.filterEndpoint.tap(\n \"includeExcludeFilterEndpoint\",\n (shouldGenerate, endpoint, ctx) => {\n if (!shouldGenerate) {\n return false;\n }\n\n const tags = endpoint.operation.tags;\n const excluded =\n tags && tags.some((t) => ctx.opts?.exclude?.includes(t));\n\n if (excluded) {\n return false;\n }\n\n if (ctx.opts?.include) {\n return Boolean(\n tags && tags.some((t) => ctx.opts.include?.includes(t)),\n );\n }\n\n return true;\n },\n );\n });\n}\n","import ts from \"typescript\";\nimport { resolve } from \"@oazapfts/resolve\";\nimport type { OazapftsContext } from \"../context\";\nimport type { ParameterObject } from \"../helpers/openApi3-x\";\nimport {\n UNSTABLE_createPlugin,\n UNSTABLE_OAZAPFTS_PLUGIN_PRECEDENCE,\n} from \"../plugin\";\n\nfunction hasBooleanQueryParameter(\n query: ParameterObject[],\n ctx: OazapftsContext,\n) {\n return query.some((param) => {\n const schema = param.schema && resolve(param.schema, ctx);\n return !!schema && typeof schema === \"object\" && schema.type === \"boolean\";\n });\n}\n\nexport function numericBooleanQueryParametersPlugin() {\n return UNSTABLE_createPlugin(\n (hooks) => {\n hooks.querySerializerArgs.tap(\n \"numericBooleanQueryParameters\",\n (args, queryContext, ctx) => {\n if (!ctx.opts.numericBooleanQueryParameters) {\n return args;\n }\n\n if (!hasBooleanQueryParameter(queryContext.query, ctx)) {\n return args;\n }\n\n return [\n ...args,\n ts.factory.createPropertyAccessExpression(\n ts.factory.createIdentifier(\"QS\"),\n \"numericBooleanReserved\",\n ),\n ];\n },\n );\n },\n {\n precedence: UNSTABLE_OAZAPFTS_PLUGIN_PRECEDENCE.LAZY,\n },\n );\n}\n","import type { OazapftsContext } from \"../context\";\nimport type { UNSTABLE_OazapftsPlugin } from \"../plugin\";\nimport { defaultComposeSourcePlugin } from \"./defaultComposeSource\";\nimport { defaultGenerateMethodPlugin } from \"./defaultGenerateMethod\";\nimport { includeExcludeFilterEndpointPlugin } from \"./includeExcludeFilterEndpoint\";\nimport { numericBooleanQueryParametersPlugin } from \"./numericBooleanQueryParameters\";\n\nexport function getInternalPlugins(\n _ctx: OazapftsContext,\n): UNSTABLE_OazapftsPlugin[] {\n return [\n includeExcludeFilterEndpointPlugin(),\n numericBooleanQueryParametersPlugin(),\n defaultGenerateMethodPlugin(),\n defaultComposeSourcePlugin(),\n ];\n}\n","import * as cg from \"./generate/tscodegen\";\nimport { type SourceFile } from \"typescript\";\nimport SwaggerParser from \"@apidevtools/swagger-parser\";\nimport { createContext, OazapftsContext } from \"./context\";\nimport { generateApi } from \"./generate/generateApi\";\nimport * as OpenAPI from \"./helpers/openApi3-x\";\nimport {\n type UNSTABLE_OazapftsPlugin,\n UNSTABLE_createHooks,\n UNSTABLE_applyPlugins,\n} from \"./plugin\";\nimport { ArgumentStyle } from \"./generate/generateClientMethod\";\nimport { EnumStyle } from \"./helpers/getEnumStyle\";\nimport { getInternalPlugins } from \"./internalPlugins\";\n\nexport { cg as UNSTABLE_cg, type OpenAPI };\n\nexport type OazapftsOptions = {\n include?: string[];\n exclude?: string[];\n optimistic?: boolean;\n unionUndefined?: boolean;\n /**\n * @deprecated Use `enumStyle: \"enum\"` instead.\n */\n useEnumType?: boolean;\n /**\n * Controls how enums are generated in TypeScript.\n * Takes precedence over `useEnumType` if both are specified.\n */\n enumStyle?: EnumStyle;\n mergeReadWriteOnly?: boolean;\n useUnknown?: boolean;\n argumentStyle?: ArgumentStyle;\n allSchemas?: boolean;\n /**\n * When true, serialize boolean query parameters as 1/0.\n */\n numericBooleanQueryParameters?: boolean;\n /**\n * When true, skip generating deprecated legacy method aliases for backward\n * compatibility. Only the primary normalized operationId-based names will\n * be generated.\n */\n futureStripLegacyMethods?: boolean;\n /**\n * Plugins to apply during code generation.\n * Each plugin receives hooks and can tap into generation steps.\n */\n UNSTABLE_plugins?: UNSTABLE_OazapftsPlugin[];\n};\n\n/**\n * Create a a TypeScript source file from an OpenAPI spec.\n *\n * @param spec - Path to an OpenAPI spec file or source string\n * @param opts - Options for the code generation\n * @returns The generated TypeScript source file\n */\nexport async function generateSource(spec: string, opts: OazapftsOptions = {}) {\n const doc = await parseSpec(spec);\n\n const ctx = createContext(doc, opts);\n ctx.banner = [doc.info.title, doc.info.version, ctx.banner]\n .filter(Boolean)\n .join(\"\\n\");\n\n const ast = await generateAst(ctx, opts.UNSTABLE_plugins);\n\n return printAst(ast);\n}\nexport { generateSource as default, generateSource as oazapfts };\n\n/**\n * Create an Typescript AST from an OpenAPI document.\n *\n * @param ctx - Oazapfts context\n * @param UNSTABLE_plugins - Unstable plugins to apply\n * @returns The generated TypeScript AST\n */\nexport async function generateAst(\n ctx: OazapftsContext,\n UNSTABLE_plugins: UNSTABLE_OazapftsPlugin[] = [],\n) {\n const hooks = UNSTABLE_createHooks();\n await UNSTABLE_applyPlugins(hooks, [\n ...getInternalPlugins(ctx),\n ...UNSTABLE_plugins,\n ]);\n\n return generateApi(ctx, hooks);\n}\n\n/**\n * Print a TypeScript AST to a string.\n *\n * @param ast - The TypeScript AST to print\n * @returns The printed TypeScript source\n */\nexport function printAst(ast: SourceFile) {\n return cg.printFile(ast);\n}\n\n/**\n * Parse an OpenAPI spec into a document object.\n *\n * @param spec - Path to a local OpenAPI spec file,\n * or a URL to an OpenAPI spec file\n * or a OpenAPI document object\n * @returns The parsed OpenAPI document\n */\nexport async function parseSpec(spec: string | OpenAPI.Document) {\n if (typeof spec === \"string\" && spec.startsWith(\"http\")) {\n const response = await fetch(spec);\n spec = await response.json();\n }\n\n const doc = await SwaggerParser.bundle(spec);\n if (!isOpenApiV3(doc)) {\n throw new Error(\n \"Only OpenAPI v3 is supported\\nYou may convert you spec with https://github.com/swagger-api/swagger-converter or swagger2openapi package\",\n );\n }\n\n return doc;\n}\n\nfunction isOpenApiV3(\n doc: Awaited<ReturnType<typeof SwaggerParser.bundle>>,\n): doc is OpenAPI.Document {\n return \"openapi\" in doc && doc.openapi.startsWith(\"3\");\n}\n"],"mappings":"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"}