UNPKG

@hey-api/openapi-ts

Version:

🌀 OpenAPI to TypeScript codegen. Production-grade SDKs, Zod schemas, TanStack Query hooks, and 20+ plugins. Used by Vercel, OpenCode, and PayPal.

1 lines 1.3 MB
{"version":3,"file":"init-D3VuY80Z.mjs","names":["__filename","__dirname","resolvePath","resolvePath","Mixed","Mixed","Mixed","tsOld","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","fromValue","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","tsOld","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","Mixed","exprValue","typeValue","source","attachComment","createShellMeta","createShell","toNode","source","handler","defaultConfig","defineConfig","Api","defaultConfig","Api","defineConfig","defaultConfig","defineConfig","defaultConfig","defineConfig","defaultConfig","defineConfig","defaultConfig","defineConfig","defaultConfig","defineConfig","defaultConfig","defineConfig","defaultConfig","defineConfig","handler","defaultConfig","defineConfig","normalizeConfig","resolvePath","resolveStrategy","handlerV1","createShell","resolveStrategy","toNode","handler","handlerV1","validatorInferWarn","defaultConfig","defineConfig","handler","defaultConfig","defineConfig","exportAst","defaultMeta","composeMeta","inheritMeta","baseNode","arrayResolver","arrayToAst","baseNode","constNode","booleanResolver","booleanToAst","itemsNode","baseNode","enumResolver","enumToAst","baseNode","intersectionResolver","intersectionToAst","baseNode","neverResolver","neverToAst","baseNode","nullResolver","nullToAst","constNode","baseNode","numberResolver","shapeNode","baseNode","objectResolver","objectToAst","constNode","formatNode","baseNode","stringResolver","stringToAst","baseNode","constNode","tupleResolver","tupleToAst","baseNode","undefinedResolver","undefinedToAst","baseNode","unionResolver","unionToAst","baseNode","unknownResolver","unknownToAst","baseNode","voidResolver","voidToAst","createVisitor","arrayToAst","defaultMeta","booleanToAst","enumToAst","intersectionToAst","inheritMeta","neverToAst","nullToAst","objectToAst","stringToAst","tupleToAst","undefinedToAst","unionToAst","unknownToAst","voidToAst","createProcessor","createVisitor","Api","createProcessor","createProcessor","createProcessor","handlerV1","createProcessor","handler","handlerV1","defaultConfig","Api","defineConfig","handleMeta","useTypeData","useTypeError","useTypeResponse","useTypeData","createMutationOptions","handleMeta","useTypeResponse","useTypeError","TOptionsType","createQueryKeyFunction","createQueryKeyLiteral","createQueryKeyType","queryKeyStatement","optionsParamName","createQueryOptions","queryKeyStatement","handleMeta","useTypeResponse","useTypeError","handler","defaultConfig","handler","defineConfig","TOptionsType","optionsParamName","handler","defaultConfig","handler","defineConfig","defaultConfig","handler","defineConfig","defaultConfig","handler","defineConfig","defaultConfig","handler","defineConfig","defaultConfig","handler","defineConfig","defaultConfig","handler","defineConfig","Api","identifiers","exportAst","identifiers","nullToAst","identifiers","objectToAst","identifiers","nullToAst","objectToAst","handlerV2","handler","handlerV2","defaultConfig","Api","defineConfig","handler","defaultConfig","defineConfig","handler","defaultConfig","defineConfig","toNode","handlerV1","toNode","handler","handlerV1","defaultConfig","defineConfig","handler","defaultConfig","handler","defineConfig","identifiers","identifiers","exportAst","buildOperationSchema","getDefaultRequestValidatorLayers","buildOperationSchema","emptyNode","identifiers","optionalNode","compositeNode","getDefaultRequestValidatorLayers","requestValidatorResolver","responseValidatorResolver","runRequestResolver","runResponseResolver","createRequestSchemaContext","exportAst","Api","irOperationToAst","buildOperationSchema","irWebhookToAst","buildOperationSchema","defaultMeta","composeMeta","inheritMeta","baseNode","identifiers","unknownResolver","baseNode","identifiers","lengthNode","maxLengthNode","minLengthNode","arrayResolver","baseNode","identifiers","constNode","booleanResolver","itemsNode","baseNode","identifiers","enumResolver","baseNode","identifiers","intersectionResolver","baseNode","identifiers","neverResolver","baseNode","identifiers","nullResolver","baseNode","identifiers","constNode","maxNode","minNode","numberResolver","additionalPropertiesNode","baseNode","identifiers","objectResolver","shapeNode","baseNode","identifiers","constNode","formatNode","lengthNode","maxLengthNode","minLengthNode","patternNode","stringResolver","baseNode","identifiers","constNode","tupleResolver","baseNode","identifiers","undefinedResolver","baseNode","identifiers","unionResolver","baseNode","identifiers","voidResolver","getDefaultValue","createVisitor","identifiers","inheritMeta","defaultMeta","composeMeta","createProcessor","createVisitor","createProcessor","handler","defaultConfig","Api","defineConfig","emptyNode","optionalNode","compositeNode","requestValidatorResolver","responseValidatorResolver","runRequestResolver","runResponseResolver","createRequestSchemaContext","emptyNode","optionalNode","compositeNode","requestValidatorResolver","responseValidatorResolver","runRequestResolver","runResponseResolver","createRequestSchemaContext","baseNode","unknownResolver","unknownToAst","baseNode","unknownToAst","lengthNode","maxLengthNode","minLengthNode","arrayResolver","arrayToAst","baseNode","constNode","booleanResolver","booleanToAst","itemsNode","baseNode","unknownToAst","enumResolver","enumToAst","baseNode","intersectionResolver","intersectionToAst","baseNode","neverResolver","neverToAst","baseNode","nullResolver","nullToAst","baseNode","constNode","maxNode","minNode","numberResolver","numberToNode","additionalPropertiesNode","baseNode","objectResolver","shapeNode","objectToAst","baseNode","constNode","formatNode","lengthNode","maxLengthNode","minLengthNode","patternNode","stringResolver","stringToNode","baseNode","constNode","tupleResolver","tupleToAst","baseNode","undefinedResolver","undefinedToAst","baseNode","unionResolver","unionToAst","baseNode","voidResolver","voidToAst","getDefaultValue","createVisitor","arrayToAst","booleanToAst","enumToAst","numberToNode","intersectionToAst","neverToAst","nullToAst","objectToAst","stringToNode","tupleToAst","undefinedToAst","unionToAst","unknownToAst","voidToAst","createProcessor","createVisitor","createProcessor","baseNode","unknownResolver","unknownToAst","baseNode","unknownToAst","lengthNode","maxLengthNode","minLengthNode","arrayResolver","arrayToAst","baseNode","constNode","booleanResolver","booleanToAst","itemsNode","baseNode","unknownToAst","enumResolver","enumToAst","baseNode","intersectionResolver","intersectionToAst","baseNode","neverResolver","neverToAst","baseNode","nullResolver","nullToAst","baseNode","constNode","maxNode","minNode","numberResolver","numberToNode","additionalPropertiesNode","baseNode","objectResolver","shapeNode","objectToAst","baseNode","constNode","formatNode","lengthNode","maxLengthNode","minLengthNode","patternNode","stringResolver","stringToNode","baseNode","constNode","tupleResolver","tupleToAst","baseNode","undefinedResolver","undefinedToAst","baseNode","unionResolver","unionToAst","baseNode","voidResolver","voidToAst","getDefaultValue","createVisitor","arrayToAst","booleanToAst","enumToAst","numberToNode","intersectionToAst","neverToAst","nullToAst","objectToAst","stringToNode","tupleToAst","undefinedToAst","unionToAst","unknownToAst","voidToAst","createProcessor","createVisitor","createProcessor","baseNode","baseNode","lengthNode","maxLengthNode","minLengthNode","baseNode","constNode","baseNode","baseNode","baseNode","baseNode","baseNode","constNode","baseNode","baseNode","constNode","baseNode","baseNode","baseNode","angularCommon","fakerJsFaker","heyApiClientAngular","heyApiClientAxios","heyApiClientFetch","heyApiClientKy","heyApiClientNext","heyApiClientNuxt","heyApiClientOfetch","heyApiSchemas","heyApiSdk","heyApiTransformers","heyApiTypeScript","piniaColada","tanStackAngularQuery","tanStackPreactQuery","tanStackReactQuery","tanStackSolidQuery","tanStackSvelteQuery","tanStackVueQuery"],"sources":["../src/config/expand.ts","../src/config/packages.ts","../src/config/output/postprocess.ts","../src/config/output/config.ts","../src/plugins/@angular/common/httpRequests/config.ts","../src/plugins/@angular/common/httpRequests/resolve.ts","../src/plugins/@angular/common/httpResources/config.ts","../src/plugins/@angular/common/httpResources/resolve.ts","../src/config/utils.ts","../src/plugins/@hey-api/client-core/utils.ts","../src/ts-dsl/base.ts","../src/ts-dsl/expr/id.ts","../src/ts-dsl/layout/newline.ts","../src/ts-dsl/mixins/args.ts","../src/ts-dsl/expr/prefix.ts","../src/ts-dsl/utils/factories.ts","../src/ts-dsl/mixins/as.ts","../src/ts-dsl/expr/literal.ts","../src/ts-dsl/utils/regexp.ts","../src/ts-dsl/utils/keywords.ts","../src/ts-dsl/utils/reserved.ts","../src/ts-dsl/utils/name.ts","../src/ts-dsl/decl/decorator.ts","../src/ts-dsl/mixins/decorator.ts","../src/ts-dsl/utils/context.ts","../src/ts-dsl/layout/doc.ts","../src/ts-dsl/mixins/doc.ts","../src/ts-dsl/mixins/modifiers.ts","../src/ts-dsl/type/param.ts","../src/ts-dsl/mixins/type-params.ts","../src/ts-dsl/mixins/optional.ts","../src/ts-dsl/mixins/value.ts","../src/ts-dsl/token.ts","../src/ts-dsl/mixins/type-args.ts","../src/ts-dsl/mixins/type-expr.ts","../src/ts-dsl/type/attr.ts","../src/ts-dsl/type/expr.ts","../src/ts-dsl/decl/field.ts","../src/ts-dsl/stmt/stmt.ts","../src/ts-dsl/mixins/do.ts","../src/ts-dsl/decl/pattern.ts","../src/ts-dsl/mixins/pattern.ts","../src/ts-dsl/decl/param.ts","../src/ts-dsl/mixins/param.ts","../src/ts-dsl/mixins/layout.ts","../src/ts-dsl/stmt/block.ts","../src/ts-dsl/decl/init.ts","../src/ts-dsl/mixins/type-returns.ts","../src/ts-dsl/decl/method.ts","../src/ts-dsl/decl/class.ts","../src/ts-dsl/decl/member.ts","../src/ts-dsl/decl/enum.ts","../src/ts-dsl/decl/func.ts","../src/ts-dsl/decl/getter.ts","../src/ts-dsl/decl/setter.ts","../src/ts-dsl/mixins/expr.ts","../src/ts-dsl/mixins/spread.ts","../src/ts-dsl/expr/array.ts","../src/ts-dsl/expr/as.ts","../src/ts-dsl/expr/binary.ts","../src/ts-dsl/mixins/operator.ts","../src/ts-dsl/expr/attr.ts","../src/ts-dsl/expr/await.ts","../src/ts-dsl/expr/call.ts","../src/ts-dsl/expr/expr.ts","../src/ts-dsl/layout/hint.ts","../src/ts-dsl/mixins/hint.ts","../src/ts-dsl/expr/prop.ts","../src/ts-dsl/expr/object.ts","../src/ts-dsl/expr/from-value.ts","../src/ts-dsl/expr/new.ts","../src/ts-dsl/expr/postfix.ts","../src/ts-dsl/expr/regexp.ts","../src/ts-dsl/expr/spread.ts","../src/ts-dsl/expr/template.ts","../src/ts-dsl/expr/ternary.ts","../src/ts-dsl/expr/typeof.ts","../src/ts-dsl/layout/note.ts","../src/ts-dsl/stmt/for.ts","../src/ts-dsl/stmt/if.ts","../src/ts-dsl/stmt/return.ts","../src/ts-dsl/stmt/throw.ts","../src/ts-dsl/stmt/try.ts","../src/ts-dsl/stmt/var.ts","../src/ts-dsl/type/alias.ts","../src/ts-dsl/type/and.ts","../src/ts-dsl/type/literal.ts","../src/ts-dsl/type/idx-sig.ts","../src/ts-dsl/type/prop.ts","../src/ts-dsl/type/object.ts","../src/ts-dsl/type/tuple.ts","../src/ts-dsl/type/from-value.ts","../src/ts-dsl/type/func.ts","../src/ts-dsl/type/idx.ts","../src/ts-dsl/type/mapped.ts","../src/ts-dsl/type/operator.ts","../src/ts-dsl/type/or.ts","../src/ts-dsl/type/query.ts","../src/ts-dsl/type/template.ts","../src/ts-dsl/type/tuple-member.ts","../src/ts-dsl/utils/lazy.ts","../src/ts-dsl/utils/render-utils.ts","../src/ts-dsl/utils/render.ts","../src/ts-dsl/index.ts","../src/plugins/@hey-api/sdk/shared/class.ts","../src/plugins/@hey-api/sdk/shared/constants.ts","../src/plugins/@hey-api/sdk/shared/auth.ts","../src/plugins/@hey-api/sdk/shared/transformer.ts","../src/plugins/@hey-api/sdk/shared/validator.ts","../src/plugins/@hey-api/sdk/shared/handlers.ts","../src/plugins/@hey-api/sdk/shared/signature.ts","../src/plugins/@hey-api/sdk/shared/operation.ts","../src/plugins/@hey-api/sdk/v1/node.ts","../src/plugins/shared/utils/operation.ts","../src/plugins/@angular/common/shared/node.ts","../src/plugins/@angular/common/plugin.ts","../src/plugins/@angular/common/config.ts","../src/plugins/@faker-js/faker/api.ts","../src/plugins/@faker-js/faker/config.ts","../src/plugins/@hey-api/client-core/config.ts","../src/generate/client.ts","../src/plugins/@hey-api/client-core/client.ts","../src/plugins/@hey-api/client-core/createClientConfig.ts","../src/plugins/@hey-api/client-core/plugin.ts","../src/plugins/@hey-api/client-angular/config.ts","../src/plugins/@hey-api/client-axios/config.ts","../src/plugins/@hey-api/client-fetch/config.ts","../src/plugins/@hey-api/client-ky/config.ts","../src/plugins/@hey-api/client-next/config.ts","../src/plugins/@hey-api/client-nuxt/config.ts","../src/plugins/@hey-api/client-ofetch/config.ts","../src/plugins/@hey-api/schemas/plugin.ts","../src/plugins/@hey-api/schemas/config.ts","../src/plugins/@hey-api/sdk/examples/config.ts","../src/plugins/@hey-api/sdk/operations/config.ts","../src/plugins/@hey-api/sdk/operations/resolve.ts","../src/plugins/@hey-api/sdk/shared/typeOptions.ts","../src/plugins/@hey-api/sdk/v1/plugin.ts","../src/plugins/@hey-api/sdk/plugin.ts","../src/plugins/@hey-api/sdk/config.ts","../src/plugins/@hey-api/transformers/expressions.ts","../src/plugins/@hey-api/transformers/plugin.ts","../src/plugins/@hey-api/transformers/config.ts","../src/plugins/shared/utils/schema.ts","../src/plugins/@hey-api/typescript/shared/enum.ts","../src/plugins/@hey-api/typescript/shared/export.ts","../src/plugins/@hey-api/typescript/shared/meta.ts","../src/plugins/@hey-api/typescript/v1/toAst/array.ts","../src/plugins/@hey-api/typescript/v1/toAst/boolean.ts","../src/plugins/@hey-api/typescript/v1/toAst/enum.ts","../src/plugins/@hey-api/typescript/v1/toAst/intersection.ts","../src/plugins/@hey-api/typescript/v1/toAst/never.ts","../src/plugins/@hey-api/typescript/v1/toAst/null.ts","../src/plugins/@hey-api/typescript/v1/toAst/number.ts","../src/plugins/@hey-api/typescript/v1/toAst/object.ts","../src/plugins/@hey-api/typescript/v1/toAst/string.ts","../src/plugins/@hey-api/typescript/v1/toAst/tuple.ts","../src/plugins/@hey-api/typescript/v1/toAst/undefined.ts","../src/plugins/@hey-api/typescript/v1/toAst/union.ts","../src/plugins/@hey-api/typescript/v1/toAst/unknown.ts","../src/plugins/@hey-api/typescript/v1/toAst/void.ts","../src/plugins/@hey-api/typescript/v1/visitor.ts","../src/plugins/@hey-api/typescript/v1/processor.ts","../src/plugins/@hey-api/typescript/api.ts","../src/plugins/@hey-api/typescript/shared/clientOptions.ts","../src/plugins/@hey-api/typescript/shared/operation.ts","../src/plugins/@hey-api/typescript/shared/webhook.ts","../src/plugins/@hey-api/typescript/v1/plugin.ts","../src/plugins/@hey-api/typescript/plugin.ts","../src/plugins/@hey-api/typescript/config.ts","../src/plugins/@pinia/colada/meta.ts","../src/plugins/@pinia/colada/useType.ts","../src/plugins/@pinia/colada/utils.ts","../src/plugins/@pinia/colada/mutationOptions.ts","../src/plugins/@pinia/colada/queryKey.ts","../src/plugins/@pinia/colada/queryOptions.ts","../src/plugins/@pinia/colada/v0/plugin.ts","../src/plugins/@pinia/colada/plugin.ts","../src/plugins/@pinia/colada/config.ts","../src/plugins/@tanstack/query-core/shared/useType.ts","../src/plugins/@tanstack/query-core/v5/getQueryData.ts","../src/plugins/@tanstack/query-core/queryKey.ts","../src/plugins/@tanstack/query-core/shared/meta.ts","../src/plugins/@tanstack/query-core/v5/infiniteQueryOptions.ts","../src/plugins/@tanstack/query-core/mutationKey.ts","../src/plugins/@tanstack/query-core/v5/mutationOptions.ts","../src/plugins/@tanstack/query-core/v5/queryOptions.ts","../src/plugins/@tanstack/query-core/v5/setQueryData.ts","../src/plugins/@tanstack/query-core/v5/useGetQueryData.ts","../src/plugins/@tanstack/query-core/v5/useMutation.ts","../src/plugins/@tanstack/query-core/v5/useQuery.ts","../src/plugins/@tanstack/query-core/v5/useSetQueryData.ts","../src/plugins/@tanstack/query-core/v5/plugin.ts","../src/plugins/@tanstack/query-core/plugin.ts","../src/plugins/@tanstack/angular-query-experimental/config.ts","../src/plugins/@tanstack/preact-query/config.ts","../src/plugins/@tanstack/react-query/config.ts","../src/plugins/@tanstack/solid-query/config.ts","../src/plugins/@tanstack/svelte-query/config.ts","../src/plugins/@tanstack/vue-query/config.ts","../src/plugins/arktype/v2/api.ts","../src/plugins/arktype/api.ts","../src/plugins/arktype/constants.ts","../src/plugins/arktype/shared/export.ts","../src/plugins/arktype/v2/toAst/null.ts","../src/plugins/arktype/v2/toAst/object.ts","../src/plugins/arktype/v2/toAst/string.ts","../src/plugins/arktype/v2/toAst/index.ts","../src/plugins/arktype/v2/plugin.ts","../src/plugins/arktype/plugin.ts","../src/plugins/arktype/config.ts","../src/plugins/fastify/plugin.ts","../src/plugins/fastify/config.ts","../src/plugins/nestjs/plugin.ts","../src/plugins/nestjs/config.ts","../src/plugins/orpc/contracts/config.ts","../src/plugins/orpc/shared/operation.ts","../src/plugins/orpc/contracts/node.ts","../src/plugins/orpc/contracts/resolve.ts","../src/plugins/orpc/v1/plugin.ts","../src/plugins/orpc/plugin.ts","../src/plugins/orpc/config.ts","../src/plugins/swr/v2/useSwr.ts","../src/plugins/swr/v2/plugin.ts","../src/plugins/swr/plugin.ts","../src/plugins/swr/config.ts","../src/plugins/valibot/v1/constants.ts","../src/plugins/valibot/shared/pipes.ts","../src/plugins/valibot/shared/export.ts","../src/plugins/valibot/shared/operation-schema.ts","../src/plugins/valibot/shared/validator.ts","../src/plugins/valibot/v1/api.ts","../src/plugins/valibot/api.ts","../src/plugins/valibot/shared/operation.ts","../src/plugins/valibot/shared/webhook.ts","../src/plugins/shared/utils/coerce.ts","../src/plugins/valibot/shared/meta.ts","../src/plugins/valibot/v1/toAst/unknown.ts","../src/plugins/valibot/v1/toAst/array.ts","../src/plugins/valibot/v1/toAst/boolean.ts","../src/plugins/valibot/v1/toAst/enum.ts","../src/plugins/valibot/v1/toAst/intersection.ts","../src/plugins/valibot/v1/toAst/never.ts","../src/plugins/valibot/v1/toAst/null.ts","../src/plugins/shared/utils/formats.ts","../src/plugins/valibot/v1/toAst/number.ts","../src/plugins/valibot/v1/toAst/object.ts","../src/plugins/valibot/v1/toAst/string.ts","../src/plugins/valibot/v1/toAst/tuple.ts","../src/plugins/valibot/v1/toAst/undefined.ts","../src/plugins/valibot/shared/discriminated-union.ts","../src/plugins/valibot/v1/toAst/union.ts","../src/plugins/valibot/v1/toAst/void.ts","../src/plugins/valibot/v1/visitor.ts","../src/plugins/valibot/v1/processor.ts","../src/plugins/valibot/v1/plugin.ts","../src/plugins/valibot/plugin.ts","../src/plugins/valibot/config.ts","../src/plugins/zod/constants.ts","../src/plugins/zod/shared/export.ts","../src/plugins/zod/shared/operation-schema.ts","../src/plugins/zod/shared/validator.ts","../src/plugins/zod/mini/api.ts","../src/plugins/zod/v3/api.ts","../src/plugins/zod/v4/api.ts","../src/plugins/zod/api.ts","../src/plugins/zod/shared/module.ts","../src/plugins/zod/shared/operation.ts","../src/plugins/zod/shared/webhook.ts","../src/plugins/zod/shared/meta.ts","../src/plugins/zod/mini/toAst/unknown.ts","../src/plugins/zod/mini/toAst/array.ts","../src/plugins/zod/mini/toAst/boolean.ts","../src/plugins/zod/mini/toAst/enum.ts","../src/plugins/zod/mini/toAst/intersection.ts","../src/plugins/zod/mini/toAst/never.ts","../src/plugins/zod/mini/toAst/null.ts","../src/plugins/zod/mini/toAst/number.ts","../src/plugins/zod/mini/toAst/object.ts","../src/plugins/zod/mini/toAst/string.ts","../src/plugins/zod/mini/toAst/tuple.ts","../src/plugins/zod/mini/toAst/undefined.ts","../src/plugins/zod/shared/discriminated-union.ts","../src/plugins/zod/mini/toAst/union.ts","../src/plugins/zod/mini/toAst/void.ts","../src/plugins/zod/mini/visitor.ts","../src/plugins/zod/mini/processor.ts","../src/plugins/zod/mini/plugin.ts","../src/plugins/zod/v3/toAst/unknown.ts","../src/plugins/zod/v3/toAst/array.ts","../src/plugins/zod/v3/toAst/boolean.ts","../src/plugins/zod/v3/toAst/enum.ts","../src/plugins/zod/v3/toAst/intersection.ts","../src/plugins/zod/v3/toAst/never.ts","../src/plugins/zod/v3/toAst/null.ts","../src/plugins/zod/v3/toAst/number.ts","../src/plugins/zod/v3/toAst/object.ts","../src/plugins/zod/v3/toAst/string.ts","../src/plugins/zod/v3/toAst/tuple.ts","../src/plugins/zod/v3/toAst/undefined.ts","../src/plugins/zod/v3/toAst/union.ts","../src/plugins/zod/v3/toAst/void.ts","../src/plugins/zod/v3/visitor.ts","../src/plugins/zod/v3/processor.ts","../src/plugins/zod/v3/plugin.ts","../src/plugins/zod/v4/toAst/unknown.ts","../src/plugins/zod/v4/toAst/array.ts","../src/plugins/zod/v4/toAst/boolean.ts","../src/plugins/zod/v4/toAst/enum.ts","../src/plugins/zod/v4/toAst/intersection.ts","../src/plugins/zod/v4/toAst/never.ts","../src/plugins/zod/v4/toAst/null.ts","../src/plugins/zod/v4/toAst/number.ts","../src/plugins/zod/v4/toAst/object.ts","../src/plugins/zod/v4/toAst/string.ts","../src/plugins/zod/v4/toAst/tuple.ts","../src/plugins/zod/v4/toAst/undefined.ts","../src/plugins/zod/v4/toAst/union.ts","../src/plugins/zod/v4/toAst/void.ts","../src/plugins/zod/v4/visitor.ts","../src/plugins/zod/v4/processor.ts","../src/plugins/zod/v4/plugin.ts","../src/plugins/zod/plugin.ts","../src/plugins/zod/config.ts","../src/plugins/config.ts","../src/config/plugins.ts","../src/config/resolve.ts","../src/config/validate.ts","../src/config/init.ts"],"sourcesContent":["import { getInput } from '@hey-api/shared';\nimport colors from 'ansi-colors';\n\nimport type { UserConfig } from './types';\n\nexport interface Job {\n config: UserConfig;\n index: number;\n}\n\nexport function expandToJobs(configs: ReadonlyArray<UserConfig>): ReadonlyArray<Job> {\n const jobs: Array<Job> = [];\n let jobIndex = 0;\n\n for (const config of configs) {\n const inputs = getInput(config);\n const outputs = config.output instanceof Array ? config.output : [config.output];\n\n if (outputs.length === 1) {\n jobs.push({\n config: {\n ...config,\n input: inputs,\n output: outputs[0]!, // output array with single item\n },\n index: jobIndex++,\n });\n } else if (outputs.length > 1 && inputs.length !== outputs.length) {\n // Warn and create job per output (all with same inputs)\n console.warn(\n `⚙️ ${colors.yellow('Warning:')} You provided ${colors.cyan(String(inputs.length))} ${colors.cyan(inputs.length === 1 ? 'input' : 'inputs')} and ${colors.yellow(String(outputs.length))} ${colors.yellow('outputs')}. This will produce identical output in multiple locations. You likely want to provide a single output or the same number of outputs as inputs.`,\n );\n for (const output of outputs) {\n jobs.push({\n config: { ...config, input: inputs, output },\n index: jobIndex++,\n });\n }\n } else if (outputs.length > 1) {\n // Pair inputs with outputs by index\n outputs.forEach((output, index) => {\n jobs.push({\n config: { ...config, input: inputs[index]!, output },\n index: jobIndex++,\n });\n });\n }\n }\n\n return jobs;\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\n\n/**\n * Finds and reads the project's package.json file by searching upwards from the config file location,\n * or from process.cwd() if no config file is provided.\n * This ensures we get the correct dependencies even in monorepo setups.\n *\n * @param configFilePath - The path to the configuration file (e.g., openapi-ts.config.ts)\n * @returns An object containing all project dependencies (dependencies, devDependencies, peerDependencies, optionalDependencies)\n */\nexport const getProjectDependencies = (configFilePath?: string): Record<string, string> => {\n let currentDir = configFilePath ? path.dirname(configFilePath) : process.cwd();\n\n while (currentDir !== path.dirname(currentDir)) {\n const packageJsonPath = path.join(currentDir, 'package.json');\n\n if (fs.existsSync(packageJsonPath)) {\n try {\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));\n return {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n ...packageJson.peerDependencies,\n ...packageJson.optionalDependencies,\n };\n } catch {\n // Silently ignore JSON parsing errors and continue searching\n }\n }\n\n const parentDir = path.dirname(currentDir);\n if (parentDir === currentDir) {\n break;\n }\n currentDir = parentDir;\n }\n\n return {};\n};\n","import type { PostProcessor } from '@hey-api/shared';\n\n/**\n * @deprecated Use `PostProcessorPreset` instead.\n */\nexport type Formatters = 'biome' | 'prettier';\n\n/**\n * @deprecated Use `PostProcessorPreset` instead.\n */\nexport type Linters = 'biome' | 'eslint' | 'oxlint';\n\nexport const postProcessors = {\n 'biome:check': {\n args: ['check', '--write', '{{path}}'],\n command: 'biome',\n name: 'Biome (Check)',\n },\n 'biome:format': {\n args: ['format', '--write', '{{path}}'],\n command: 'biome',\n name: 'Biome (Format)',\n },\n 'biome:lint': {\n args: ['lint', '--write', '{{path}}'],\n command: 'biome',\n name: 'Biome (Lint)',\n },\n eslint: {\n args: ['{{path}}', '--fix'],\n command: 'eslint',\n name: 'ESLint',\n },\n oxfmt: {\n args: ['{{path}}'],\n command: 'oxfmt',\n name: 'Oxfmt',\n },\n oxlint: {\n args: ['--fix', '{{path}}'],\n command: 'oxlint',\n name: 'Oxlint',\n },\n prettier: {\n args: ['--ignore-unknown', '{{path}}', '--write', '--ignore-path', './.prettierignore'],\n command: 'prettier',\n name: 'Prettier',\n },\n} as const satisfies Record<string, PostProcessor>;\n\nexport type PostProcessorPreset = keyof typeof postProcessors;\n","import path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport { log } from '@hey-api/codegen-core';\nimport type { PostProcessor, UserPostProcessor } from '@hey-api/shared';\nimport { findTsConfigPath, resolveSource, valueToObject } from '@hey-api/shared';\nimport type { MaybeArray } from '@hey-api/types';\nimport type { TsConfigJsonResolved } from 'get-tsconfig';\nimport { parseTsconfig } from 'get-tsconfig';\n\nimport { postProcessors } from './postprocess';\nimport type { Output, UserOutput } from './types';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nexport function getOutput(userConfig: { output: MaybeArray<string | UserOutput> }): Output {\n if (userConfig.output instanceof Array) {\n throw new Error(\n 'Unexpected array of outputs in user configuration. This should have been expanded already.',\n );\n }\n\n const userOutput =\n typeof userConfig.output === 'string' ? { path: userConfig.output } : (userConfig.output ?? {});\n\n const legacyPostProcess = resolveLegacyPostProcess(userOutput);\n\n const output = valueToObject({\n defaultValue: {\n clean: true,\n entryFile: true,\n fileName: {\n case: 'preserve',\n name: '{{name}}',\n suffix: '.gen',\n },\n format: null,\n lint: null,\n module: {},\n path: '',\n postProcess: [],\n preferExportAll: false,\n },\n mappers: {\n object: (fields, defaultValue) => ({\n ...fields,\n fileName: valueToObject({\n defaultValue: {\n ...(defaultValue.fileName as Extract<\n typeof defaultValue.fileName,\n Record<string, unknown>\n >),\n },\n mappers: {\n function: (name) => ({ name }),\n string: (name) => ({ name }),\n },\n value: fields.fileName,\n }),\n module: valueToObject({\n defaultValue: {\n extension: fields.importFileExtension,\n resolve: fields.resolveModuleName,\n },\n mappers: {\n object: (moduleFields) => ({\n ...moduleFields,\n extension: fields.importFileExtension ?? moduleFields.extension,\n resolve: fields.resolveModuleName ?? moduleFields.resolve,\n }),\n },\n value: fields.module,\n }),\n }),\n },\n value: userOutput,\n }) as Output;\n output.tsConfig = loadTsConfig(findTsConfigPath(__dirname, output.tsConfigPath));\n if (\n output.module.extension === undefined &&\n (output.tsConfig?.compilerOptions?.moduleResolution === 'nodenext' ||\n output.tsConfig?.compilerOptions?.moduleResolution === 'NodeNext' ||\n output.tsConfig?.compilerOptions?.moduleResolution === 'node16' ||\n output.tsConfig?.compilerOptions?.moduleResolution === 'Node16' ||\n output.tsConfig?.compilerOptions?.module === 'nodenext' ||\n output.tsConfig?.compilerOptions?.module === 'NodeNext' ||\n output.tsConfig?.compilerOptions?.module === 'node16' ||\n output.tsConfig?.compilerOptions?.module === 'Node16')\n ) {\n output.module.extension = '.js';\n }\n if (output.module.extension && !output.module.extension.startsWith('.')) {\n output.module.extension = `.${output.module.extension}`;\n }\n output.postProcess = normalizePostProcess(userOutput.postProcess ?? legacyPostProcess);\n output.source = resolveSource(output);\n return output;\n}\n\nfunction resolveLegacyPostProcess(config: Partial<UserOutput>): ReadonlyArray<UserPostProcessor> {\n const result: Array<UserPostProcessor> = [];\n\n if (config.lint !== undefined) {\n let processor: PostProcessor | undefined;\n let preset: keyof typeof postProcessors | undefined;\n if (config.lint) {\n preset = config.lint === 'biome' ? 'biome:lint' : config.lint;\n processor = postProcessors[preset];\n if (processor) result.push(processor);\n }\n\n log.warnDeprecated({\n context: 'output',\n field: 'lint',\n replacement: `postProcess: [${processor && preset ? `'${preset}'` : ''}]`,\n });\n }\n\n if (config.format !== undefined) {\n let processor: PostProcessor | undefined;\n let preset: keyof typeof postProcessors | undefined;\n if (config.format) {\n preset = config.format === 'biome' ? 'biome:format' : config.format;\n processor = postProcessors[preset];\n if (processor) result.push(processor);\n }\n\n log.warnDeprecated({\n context: 'output',\n field: 'format',\n replacement: `postProcess: [${processor && preset ? `'${preset}'` : ''}]`,\n });\n }\n\n return result;\n}\n\nfunction normalizePostProcess(input: UserOutput['postProcess']): ReadonlyArray<PostProcessor> {\n if (!input) return [];\n\n return input.map((item) => {\n if (typeof item === 'string') {\n const preset = postProcessors[item];\n if (!preset) {\n throw new Error(`Unknown post-processor preset: \"${item}\"`);\n }\n return preset;\n }\n return {\n name: item.name ?? item.command,\n ...item,\n };\n });\n}\n\nfunction loadTsConfig(configPath: string | null): TsConfigJsonResolved | null {\n if (!configPath) {\n return null;\n }\n\n try {\n return parseTsconfig(configPath);\n } catch {\n throw new Error(`Couldn't read tsconfig from path: ${configPath}`);\n }\n}\n","import type { PluginContext } from '@hey-api/shared';\n\nimport type { UserConfig } from '../types';\nimport type { HttpRequestsConfig, UserHttpRequestsConfig } from './types';\n\ntype Config = Omit<UserConfig, 'name'>;\n\nexport function resolveHttpRequests(config: Config, context: PluginContext): HttpRequestsConfig {\n let input = config.httpRequests;\n if (typeof input === 'string' || typeof input === 'function') {\n input = { strategy: input };\n } else if (typeof input === 'boolean') {\n input = { enabled: input };\n } else if (!input) {\n input = {};\n }\n\n const strategy = input.strategy ?? 'flat';\n\n return context.valueToObject({\n defaultValue: {\n container: 'class',\n enabled: true,\n methods: 'instance',\n nesting: 'operationId',\n nestingDelimiters: /[./]/,\n strategy,\n strategyDefaultTag: 'default',\n },\n mappers: {\n object(value) {\n value.containerName = context.valueToObject({\n defaultValue:\n strategy === 'single'\n ? { casing: 'PascalCase', name: 'HttpRequests' }\n : { casing: 'PascalCase' },\n mappers: {\n function: (name) => ({ name }),\n string: (name) => ({ name }),\n },\n value: value.containerName,\n });\n value.methodName = context.valueToObject({\n defaultValue:\n strategy === 'flat'\n ? { casing: 'camelCase', name: '{{name}}Request' }\n : { casing: 'camelCase' },\n mappers: {\n function: (name) => ({ name }),\n string: (name) => ({ name }),\n },\n value: value.methodName,\n });\n value.segmentName = context.valueToObject({\n defaultValue: { casing: 'PascalCase', name: '{{name}}Requests' },\n mappers: {\n function: (name) => ({ name }),\n string: (name) => ({ name }),\n },\n value: value.segmentName,\n });\n return value;\n },\n },\n value: input as UserHttpRequestsConfig,\n }) as HttpRequestsConfig;\n}\n","import type { OperationPathStrategy, OperationStructureStrategy } from '@hey-api/shared';\nimport { OperationPath, OperationStrategy } from '@hey-api/shared';\n\nimport type { AngularCommonPlugin } from '../types';\n\nfunction resolvePath(plugin: AngularCommonPlugin['Instance']): OperationPathStrategy {\n if (plugin.config.httpRequests.nesting === 'id') {\n return OperationPath.id();\n }\n\n if (plugin.config.httpRequests.nesting === 'operationId') {\n return OperationPath.fromOperationId({\n delimiters: plugin.config.httpRequests.nestingDelimiters,\n fallback: OperationPath.id(),\n });\n }\n\n return plugin.config.httpRequests.nesting;\n}\n\nexport function resolveHttpRequestsStrategy(\n plugin: AngularCommonPlugin['Instance'],\n): OperationStructureStrategy {\n if (plugin.config.httpRequests.strategy === 'flat') {\n return OperationStrategy.flat({\n path: (operation) => [resolvePath(plugin)(operation).join('.')],\n });\n }\n\n if (plugin.config.httpRequests.strategy === 'single') {\n const root = plugin.config.httpRequests.containerName;\n return OperationStrategy.single({\n path: resolvePath(plugin),\n root: typeof root.name === 'string' ? root.name : (root.name?.('') ?? ''),\n });\n }\n\n if (plugin.config.httpRequests.strategy === 'byTags') {\n return OperationStrategy.byTags({\n fallback: plugin.config.httpRequests.strategyDefaultTag,\n path: resolvePath(plugin),\n });\n }\n\n return plugin.config.httpRequests.strategy;\n}\n","import type { PluginContext } from '@hey-api/shared';\n\nimport type { UserConfig } from '../types';\nimport type { HttpResourcesConfig, UserHttpResourcesConfig } from './types';\n\ntype Config = Omit<UserConfig, 'name'>;\n\nexport function resolveHttpResources(config: Config, context: PluginContext): HttpResourcesConfig {\n let input = config.httpResources;\n if (typeof input === 'string' || typeof input === 'function') {\n input = { strategy: input };\n } else if (typeof input === 'boolean') {\n input = { enabled: input };\n } else if (!input) {\n input = {};\n }\n\n const strategy = input.strategy ?? 'flat';\n\n return context.valueToObject({\n defaultValue: {\n container: 'class',\n enabled: true,\n methods: 'instance',\n nesting: 'operationId',\n nestingDelimiters: /[./]/,\n strategy,\n strategyDefaultTag: 'default',\n },\n mappers: {\n object(value) {\n value.containerName = context.valueToObject({\n defaultValue:\n strategy === 'single'\n ? { casing: 'PascalCase', name: 'HttpResources' }\n : { casing: 'PascalCase' },\n mappers: {\n function: (name) => ({ name }),\n string: (name) => ({ name }),\n },\n value: value.containerName,\n });\n value.methodName = context.valueToObject({\n defaultValue:\n strategy === 'flat'\n ? { casing: 'camelCase', name: '{{name}}Resource' }\n : { casing: 'camelCase' },\n mappers: {\n function: (name) => ({ name }),\n string: (name) => ({ name }),\n },\n value: value.methodName,\n });\n value.segmentName = context.valueToObject({\n defaultValue: { casing: 'PascalCase', name: '{{name}}Resources' },\n mappers: {\n function: (name) => ({ name }),\n string: (name) => ({ name }),\n },\n value: value.segmentName,\n });\n return value;\n },\n },\n value: input as UserHttpResourcesConfig,\n }) as HttpResourcesConfig;\n}\n","import type { OperationPathStrategy, OperationStructureStrategy } from '@hey-api/shared';\nimport { OperationPath, OperationStrategy } from '@hey-api/shared';\n\nimport type { AngularCommonPlugin } from '../types';\n\nfunction resolvePath(plugin: AngularCommonPlugin['Instance']): OperationPathStrategy {\n if (plugin.config.httpResources.nesting === 'id') {\n return OperationPath.id();\n }\n\n if (plugin.config.httpResources.nesting === 'operationId') {\n return OperationPath.fromOperationId({\n delimiters: plugin.config.httpResources.nestingDelimiters,\n fallback: OperationPath.id(),\n });\n }\n\n return plugin.config.httpResources.nesting;\n}\n\nexport function resolveHttpResourcesStrategy(\n plugin: AngularCommonPlugin['Instance'],\n): OperationStructureStrategy {\n if (plugin.config.httpResources.strategy === 'flat') {\n return OperationStrategy.flat({\n path: (operation) => [resolvePath(plugin)(operation).join('.')],\n });\n }\n\n if (plugin.config.httpResources.strategy === 'single') {\n const root = plugin.config.httpResources.containerName;\n return OperationStrategy.single({\n path: resolvePath(plugin),\n root: typeof root.name === 'string' ? root.name : (root.name?.('') ?? ''),\n });\n }\n\n if (plugin.config.httpResources.strategy === 'byTags') {\n return OperationStrategy.byTags({\n fallback: plugin.config.httpResources.strategyDefaultTag,\n path: resolvePath(plugin),\n });\n }\n\n return plugin.config.httpResources.strategy;\n}\n","import type { Context, PluginInstance } from '@hey-api/shared';\n\nimport type { Config } from './types';\n\nexport function getTypedConfig(\n plugin: Pick<PluginInstance, 'context'> | Pick<Context, 'config'>,\n): Config {\n if ('context' in plugin) {\n return plugin.context.config as Config;\n }\n return plugin.config as Config;\n}\n","import type { Config } from '../../../config/types';\nimport type { PluginClientNames } from '../../types';\n\nexport function getClientBaseUrlKey(config: Config) {\n const client = getClientPlugin(config);\n if (client.name === '@hey-api/client-axios' || client.name === '@hey-api/client-nuxt') {\n return 'baseURL';\n }\n return 'baseUrl';\n}\n\nexport function getClientPlugin(\n config: Config,\n): Config['plugins'][PluginClientNames] & { name: PluginClientNames } {\n for (const name of config.pluginOrder) {\n const plugin = config.plugins[name];\n if (plugin?.tags?.includes('client')) {\n return plugin as Config['plugins'][PluginClientNames] & {\n name: PluginClientNames;\n };\n }\n }\n\n return {\n config: {\n // @ts-expect-error\n name: '',\n },\n // @ts-expect-error\n name: '',\n };\n}\n","// TODO: symbol should be protected, but needs to be public to satisfy types\nimport type {\n AnalysisContext,\n File,\n FromRef,\n Language,\n Node,\n NodeName,\n NodeNameSanitizer,\n NodeRelationship,\n NodeScope,\n Ref,\n Symbol,\n} from '@hey-api/codegen-core';\nimport { fromRef, isNode, isRef, isSymbol, nodeBrand, ref } from '@hey-api/codegen-core';\nimport type { AnyString } from '@hey-api/types';\nimport ts from 'typescript';\n\nimport type { AccessOptions } from './utils/context';\n\nexport abstract class TsDsl<T extends ts.Node = ts.Node> implements Node<T> {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n analyze(_: AnalysisContext): void {}\n clone(): this {\n const cloned = Object.create(Object.getPrototypeOf(this));\n Object.assign(cloned, this);\n return cloned;\n }\n exported?: boolean;\n file?: File;\n get name(): Node['name'] {\n return {\n ...this._name,\n set: (value) => {\n this._name = ref(value);\n if (isSymbol(value)) {\n value.setNode(this);\n }\n },\n toString: () => (this._name ? this.$name(this._name) : ''),\n } as Node['name'];\n }\n readonly nameSanitizer?: NodeNameSanitizer;\n language: Language = 'typescript';\n parent?: Node;\n root: boolean = false;\n scope?: NodeScope = 'value';\n structuralChildren?: Map<TsDsl, NodeRelationship>;\n structuralParents?: Map<TsDsl, NodeRelationship>;\n symbol?: Symbol;\n toAst(): T {\n return undefined as unknown as T;\n }\n readonly '~brand' = nodeBrand;\n\n /** Branding property to identify the DSL class at runtime. */\n abstract readonly '~dsl': AnyString;\n\n /** Conditionally applies a callback to this builder. */\n $if<T extends TsDsl, V, R extends TsDsl = T>(\n this: T,\n value: V,\n ifTrue: (self: T, v: Exclude<V, false | null | undefined>) => R | void,\n ifFalse?: (self: T, v: Extract<V, false | null | undefined>) => R | void,\n ): R | T;\n $if<T extends TsDsl, V, R extends TsDsl = T>(\n this: T,\n value: V,\n ifTrue: (v: Exclude<V, false | null | undefined>) => R | void,\n ifFalse?: (v: Extract<V, false | null | undefined>) => R | void,\n ): R | T;\n $if<T extends TsDsl, V, R extends TsDsl = T>(\n this: T,\n value: V,\n ifTrue: () => R | void,\n ifFalse?: () => R | void,\n ): R | T;\n $if<T extends TsDsl, V, R extends TsDsl = T>(\n this: T,\n value: V,\n ifTrue: any,\n ifFalse?: any,\n ): R | T {\n if (value) {\n // Try calling with (self, value), then (value), then ()\n let result: R | void | undefined;\n try {\n result = ifTrue?.(this, value as Exclude<V, false | null | undefined>);\n } catch {\n // ignore and try other signatures\n }\n if (result === undefined) {\n try {\n result = ifTrue?.(value as Exclude<V, false | null | undefined>);\n } catch {\n // ignore and try zero-arg\n }\n }\n if (result === undefined) {\n try {\n result = ifTrue?.();\n } catch {\n // swallow\n }\n }\n return (result ?? this) as R | T;\n }\n if (ifFalse) {\n let result: R | void | undefined;\n try {\n result = ifFalse?.(this, value as Extract<V, false | null | undefined>);\n } catch {\n // ignore\n }\n if (result === undefined) {\n try {\n result = ifFalse?.(value as Extract<V, false | null | undefined>);\n } catch {\n // ignore\n }\n }\n if (result === undefined) {\n try {\n result = ifFalse?.();\n } catch {\n // ignore\n }\n }\n return (result ?? this) as R | T;\n }\n return this;\n }\n\n /** Access patterns for this node. */\n toAccessNode?(\n node: this,\n options: AccessOptions,\n ctx: {\n /** The full chain. */\n chain: ReadonlyArray<TsDsl>;\n /** Position in the chain (0 = root). */\n index: number;\n /** Is this the leaf node? */\n isLeaf: boolean;\n /** Is this the root node? */\n isRoot: boolean;\n /** Total length of the chain. */\n length: number;\n },\n ): TsDsl | undefined;\n\n protected $maybeId<T extends string | ts.Expression>(\n expr: T,\n ): T extends string ? ts.Identifier : T {\n return (typeof expr === 'string' ? ts.factory.createIdentifier(expr) : expr) as T extends string\n ? ts.Identifier\n : T;\n }\n\n protected $name(name: Ref<NodeName>): string {\n const value = fromRef(name);\n if (isSymbol(value)) {\n try {\n return value.finalName;\n } catch {\n return value.name;\n }\n }\n return String(value);\n }\n\n protected $node<I>(value: I): NodeOfMaybe<I> {\n if (value === undefined) {\n return undefined as NodeOfMaybe<I>;\n }\n // @ts-expect-error\n if (isRef(value)) value = fromRef(value);\n if (isSymbol(value)) {\n return this.$maybeId(value.finalName) as NodeOfMaybe<I>;\n }\n if (typeof value === 'string') {\n return this.$maybeId(value) as NodeOfMaybe<I>;\n }\n if (value instanceof Array) {\n return value.map((item) => {\n if (isRef(item)) item = fromRef(item);\n return this.unwrap(item);\n }) as NodeOfMaybe<I>;\n }\n return this.unwrap(value as any) as NodeOfMaybe<I>;\n }\n\n protected $type<I>(value: I, args?: ReadonlyArray<ts.TypeNode>): TypeOfMaybe<I> {\n if (value === undefined) {\n return undefined as TypeOfMaybe<I>;\n }\n // @ts-expect-error\n if (isRef(value)) value = fromRef(value);\n if (isSymbol(value)) {\n return ts.factory.createTypeReferenceNode(value.finalName, args) as TypeOfMaybe<I>;\n }\n if (typeof value === 'string') {\n return ts.factory.createTypeReferenceNode(value, args) as TypeOfMaybe<I>;\n }\n if (typeof value === 'boolean') {\n const literal = value ? ts.factory.createTrue() : ts.factory.createFalse();\n return ts.factory.createLiteralTypeNode(literal) as TypeOfMaybe<I>;\n }\n if (typeof value === 'number') {\n return ts.factory.createLiteralTypeNode(\n ts.factory.createNumericLiteral(value),\n ) as TypeOfMaybe<I>;\n }\n if (value instanceof Array) {\n return value.map((item) => this.$type(item, args)) as TypeOfMaybe<I>;\n }\n return this.unwrap(value as any) as TypeOfMaybe<I>;\n }\n\n private _name?: Ref<NodeName>;\n\n /** Unwraps nested nodes into raw TypeScript AST. */\n private unwrap<I>(value: I): I extends TsDsl<infer N> ? N : I {\n return (isNode(value) ? value.toAst() : value) as I extends TsDsl<infer N> ? N : I;\n }\n}\n\ntype NodeOfMaybe<I> = undefined extends I\n ? NodeOf<NonNullable<FromRef<I>>> | undefined\n : NodeOf<FromRef<I>>;\n\ntype NodeOf<I> =\n I extends ReadonlyArray<infer U>\n ? ReadonlyArray<U extends TsDsl<infer N> ? N : U>\n : I extends string\n ? ts.Expression\n : I extends TsDsl<infer N>\n ? N\n : I extends ts.Node\n ? I\n : never;\n\nexport type MaybeTsDsl<T> =\n T extends TsDsl<infer U> ? U | TsDsl<U> : T extends ts.Node ? T | TsDsl<T> : never;\n\nexport abstract class TypeTsDsl<\n T extends\n | ts.LiteralTypeNode\n | ts.QualifiedName\n | ts.TypeElement\n | ts.TypeNode\n | ts.TypeParameterDeclaration = ts.TypeNode,\n> extends TsDsl<T> {}\n\ntype TypeOfMaybe<I> = undefined extends I\n ? TypeOf<NonNullable<FromRef<I>>> | undefined\n : TypeOf<FromRef<I>>;\n\ntype TypeOf<I> =\n I extends ReadonlyArray<infer U>\n ? ReadonlyArray<TypeOf<U>>\n : I extends string\n ? ts.TypeNode\n : I extends boolean\n ? ts.LiteralTypeNode\n : I extends TsDsl<infer N>\n ? N\n : I extends ts.TypeNode\n ? I\n : never;\n","import type { AnalysisContext } from '@hey-api/codegen-core';\nimport ts from 'typescript';\n\nimport { TsDsl } from '../base';\n\nconst Mixed = TsDsl<ts.Identifier>;\n\nexport class IdTsDsl extends Mixed {\n readonly '~dsl' = 'IdTsDsl';\n\n constructor(name: string) {\n super();\n this.name.set(name);\n }\n\n override analyze(ctx: AnalysisContext): void {\n super.analyze(ctx);\n }\n\n override toAst() {\n return ts.factory.createIdentifier(this.name.toString());\n }\n}\n","import type { AnalysisContext } from '@hey-api/codegen-core';\nimport type ts from 'typescript';\n\nimport { TsDsl } from '../base';\nimport { IdTsDsl } from '../expr/id';\n\nexport class NewlineTsDsl extends TsDsl<ts.Identifier> {\n readonly '~dsl' = 'NewlineTsDsl';\n\n override analyze(ctx: AnalysisContext): void {\n super.analyze(ctx);\n }\n\n override toAst() {\n return this.$node(new IdTsDsl('\\n'));\n }\n}\n","import type { AnalysisContext, Node, NodeName, Ref } from '@hey-api/codegen-core';\nimport { ref } from '@hey-api/codegen-core';\nimport type ts from 'typescript';\n\nimport type { MaybeTsDsl } from '../base';\nimport type { BaseCtor, MixinCtor } from './types';\n\ntype Arg = NodeName | MaybeTsDsl<ts.Expression | ts.SpreadElement>;\n\nexport interface ArgsMethods extends Node {\n /** Renders the arguments into an array of `Expression`s or `SpreadElement`s. */\n $args(): ReadonlyArray<ts.Expression | ts.SpreadElement>;\n /** Adds a single expression argument. */\n arg(arg: Arg | undefined): this;\n /** Adds one or more expression arguments. */\n args(...args: ReadonlyArray<Arg | undefined>): this;\n}\n\n/**\n * Adds `.arg()` and `.args()` for managing expression arguments in call-like nodes.\n */\nexport function ArgsMixin<T extends ts.Node, TBase extends BaseCtor<T>>(Base: TBase) {\n abstract class Args extends Base {\n protected _args: Array<Ref<Arg>> = [];\n\n override analyze(ctx: AnalysisContext): void {\n super.analyze(ctx);\n for (const arg of this._args) {\n ctx.analyze(arg);\n }\n }\n\n protected arg(arg: Arg | undefined): this {\n if (arg !== undefined) this._args.push(ref(arg));