{"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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"}