@sohcah/openapi-generator 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-DYFKRlHt.js → chunk-BcJDCUAU.mjs} +24 -15
- package/dist/cli.d.mts +1 -0
- package/dist/{cli.js → cli.mjs} +8 -9
- package/dist/cli.mjs.map +1 -0
- package/dist/{config.d.ts → config.d.mts} +3 -3
- package/dist/config.d.mts.map +1 -0
- package/dist/{config.js → config.mjs} +1 -1
- package/dist/config.mjs.map +1 -0
- package/dist/generators/{index.d.ts → index.d.mts} +2 -2
- package/dist/generators/index.d.mts.map +1 -0
- package/dist/generators/index.mjs +739 -0
- package/dist/generators/index.mjs.map +1 -0
- package/dist/{helpers-CqzmoMek.js → helpers-BwQQbllq.mjs} +1944 -1901
- package/dist/helpers-BwQQbllq.mjs.map +1 -0
- package/dist/{index-nKXk7_RC.d.ts → index-D4xeswCF.d.mts} +4 -4
- package/dist/index-D4xeswCF.d.mts.map +1 -0
- package/dist/index.d.mts +3 -0
- package/dist/index.mjs +4 -0
- package/dist/{src-BhVleMDu.js → src-9VHrwwX3.mjs} +1316 -1436
- package/dist/src-9VHrwwX3.mjs.map +1 -0
- package/dist/{types-CHhQKnbs.d.ts → types-C83IhMq9.d.mts} +2 -2
- package/dist/types-C83IhMq9.d.mts.map +1 -0
- package/package.json +29 -29
- package/dist/cli.d.ts +0 -2
- package/dist/cli.js.map +0 -1
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js.map +0 -1
- package/dist/generators/index.d.ts.map +0 -1
- package/dist/generators/index.js +0 -748
- package/dist/generators/index.js.map +0 -1
- package/dist/helpers-CqzmoMek.js.map +0 -1
- package/dist/index-nKXk7_RC.d.ts.map +0 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.js +0 -4
- package/dist/src-BhVleMDu.js.map +0 -1
- package/dist/types-CHhQKnbs.d.ts.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["t","t","t","t","t","t","generationHelpers.getKey","generationHelpers.ensureImport","schema","result","t","generationHelpers.ensureNamespaceImport","generationHelpers.ensureImport","t","generationHelpers.ensureImport","t","generationHelpers.ensureImport"],"sources":["../../src/generators/requestFormats/json.ts","../../src/generators/requestFormats/formData.ts","../../src/generators/generatePathExpression.ts","../../src/generators/responseFormats/json.ts","../../src/generators/responseFormats/blob.ts","../../src/generators/schema.ts","../../src/generators/effect.ts","../../src/generators/zod.ts","../../src/generators/client.ts"],"sourcesContent":["import { Effect } from \"effect\";\nimport type { SchemaObject } from \"../../types.js\";\nimport type { DefaultSchemaGeneratorOptions } from \"../schema.js\";\nimport * as t from \"@babel/types\";\nimport { notImplementedStatement } from \"../helpers.js\";\n\nexport const generateJsonRequestCodec = Effect.fn(function* (\n options: DefaultSchemaGeneratorOptions,\n schema: SchemaObject,\n decoded: t.Expression\n) {\n return options.transformer({\n encoded: options.schema.string,\n decoded,\n decode: notImplementedStatement,\n encode: t.callExpression(\n t.memberExpression(t.identifier(\"JSON\"), t.identifier(\"stringify\")),\n [t.identifier(\"from\")]\n ),\n });\n});\n","import type { ReferenceObject, SchemaObject } from \"../../types.js\";\nimport {\n resolveSchema,\n type DefaultSchemaGeneratorOptions,\n} from \"../schema.js\";\nimport * as t from \"@babel/types\";\nimport { Effect } from \"effect\";\nimport { notImplementedStatement } from \"../helpers.js\";\n\nconst maybeStringify = Effect.fn(function* (\n expression: t.Expression,\n schema: SchemaObject | ReferenceObject\n) {\n const resolved = yield* resolveSchema(schema);\n if (resolved.type === \"object\" || resolved.type === \"array\") {\n return t.callExpression(\n t.memberExpression(t.identifier(\"JSON\"), t.identifier(\"stringify\")),\n [expression]\n );\n }\n if (resolved.type === \"string\") {\n return expression;\n }\n return t.callExpression(t.identifier(\"String\"), [expression]);\n});\n\nexport const generateFormDataRequestCodec = Effect.fn(function* (\n options: DefaultSchemaGeneratorOptions,\n schema: SchemaObject,\n decoded: t.Expression\n) {\n const encode = t.blockStatement([\n t.variableDeclaration(\"const\", [\n t.variableDeclarator(\n t.identifier(\"formData\"),\n t.newExpression(t.identifier(\"FormData\"), [])\n ),\n ]),\n ]);\n const properties: Record<string, SchemaObject | ReferenceObject> =\n schema.properties ?? {};\n for (const [propertyKey, rawProperty] of Object.entries(properties)) {\n const property = yield* resolveSchema(rawProperty);\n\n const propertyExpression = t.memberExpression(\n t.identifier(\"from\"),\n t.stringLiteral(propertyKey),\n true\n );\n\n if (property.type === \"array\") {\n encode.body.push(\n t.forOfStatement(\n t.variableDeclaration(\"const\", [\n t.variableDeclarator(t.identifier(\"propertyValue\")),\n ]),\n propertyExpression,\n t.blockStatement([\n t.expressionStatement(\n t.callExpression(\n t.memberExpression(\n t.identifier(\"formData\"),\n t.identifier(\"append\")\n ),\n [\n t.stringLiteral(propertyKey),\n yield* maybeStringify(\n t.identifier(\"propertyValue\"),\n property.items\n ),\n ]\n )\n ),\n ])\n )\n );\n continue;\n }\n\n encode.body.push(\n t.expressionStatement(\n t.callExpression(\n t.memberExpression(t.identifier(\"formData\"), t.identifier(\"append\")),\n [\n t.stringLiteral(propertyKey),\n yield* maybeStringify(propertyExpression, property),\n ]\n )\n )\n );\n }\n\n encode.body.push(t.returnStatement(t.identifier(\"formData\")));\n\n return options.transformer({\n encoded: t.callExpression(options.schema.instanceOf, [\n t.identifier(\"FormData\"),\n ]),\n decoded,\n decode: notImplementedStatement,\n encode,\n });\n});\n","import * as t from \"@babel/types\";\nimport escapeRegex from \"regex-escape\";\n\nexport function generatePathExpression(\n path: string,\n pathParameters: Record<string, t.Expression>,\n queryParameter: t.Expression | null\n): t.TemplateLiteral {\n let modifiedPath = path;\n if (queryParameter) {\n modifiedPath += \"?\";\n }\n\n const split = modifiedPath.split(\n new RegExp(\n `\\\\{(${Object.keys(pathParameters)\n .map((i) => escapeRegex(i))\n .join(\"|\")})\\\\}`,\n \"g\"\n )\n );\n\n const quasis: t.TemplateElement[] = [];\n const expressions: t.Expression[] = [];\n\n for (const [i, part] of split.entries()) {\n if (i % 2 === 0) {\n quasis.push(t.templateElement({ raw: part, cooked: part }, false));\n } else {\n const paramExpression = pathParameters[part];\n if (!paramExpression) {\n throw new Error(`Path parameter ${part} not found`);\n }\n expressions.push(paramExpression);\n }\n }\n\n if (queryParameter) {\n expressions.push(queryParameter);\n quasis.push(t.templateElement({ raw: \"\", cooked: \"\" }, false));\n }\n\n return t.templateLiteral(quasis, expressions);\n}\n","import { Effect } from \"effect\";\nimport type { SchemaObject } from \"../../types.js\";\nimport type { DefaultSchemaGeneratorOptions } from \"../schema.js\";\nimport * as t from \"@babel/types\";\nimport { notImplementedStatement } from \"../helpers.js\";\n\nexport const generateJsonResponseCodec = Effect.fn(function* (\n options: DefaultSchemaGeneratorOptions,\n schema: SchemaObject,\n decoded: t.Expression\n) {\n return options.transformer({\n encoded: t.callExpression(options.schema.instanceOf, [\n t.identifier(\"Response\"),\n ]),\n decoded,\n decode: t.blockStatement([\n t.tryStatement(\n t.blockStatement([\n t.returnStatement(\n t.tsAsExpression(\n t.awaitExpression(\n t.callExpression(\n t.memberExpression(\n t.identifier(\"from\"),\n t.identifier(\"json\")\n ),\n []\n )\n ),\n t.tsAnyKeyword()\n )\n ),\n ]),\n t.catchClause(\n Object.assign(t.identifier(\"error\"), {\n typeAnnotation: t.tsTypeAnnotation(t.tsUnknownKeyword()),\n }),\n options.transformerCatch(t.identifier(\"error\"))\n )\n ),\n ]),\n decodeAsync: true,\n encode: notImplementedStatement,\n });\n});\n","import { Effect } from \"effect\";\nimport type { DefaultSchemaGeneratorOptions } from \"../schema.js\";\nimport * as t from \"@babel/types\";\nimport { notImplementedStatement } from \"../helpers.js\";\n\nexport const generateBlobResponseCodec = Effect.fn(function* (\n options: DefaultSchemaGeneratorOptions\n) {\n return options.transformer({\n encoded: t.callExpression(options.schema.instanceOf, [\n t.identifier(\"Response\"),\n ]),\n decoded: t.callExpression(options.schema.instanceOf, [\n t.identifier(\"Blob\"),\n ]),\n decode: t.blockStatement([\n t.tryStatement(\n t.blockStatement([\n t.returnStatement(\n t.tsAsExpression(\n t.awaitExpression(\n t.callExpression(\n t.memberExpression(\n t.identifier(\"from\"),\n t.identifier(\"blob\")\n ),\n []\n )\n ),\n t.tsAnyKeyword()\n )\n ),\n ]),\n t.catchClause(\n Object.assign(t.identifier(\"error\"), {\n typeAnnotation: t.tsTypeAnnotation(t.tsUnknownKeyword()),\n }),\n options.transformerCatch(t.identifier(\"error\"))\n )\n ),\n ]),\n decodeAsync: true,\n encode: notImplementedStatement,\n });\n});\n","import * as t from \"@babel/types\";\nimport type {\n MediaTypeObject,\n OperationObject,\n ReferenceObject,\n ResponseObject,\n SchemaObject,\n} from \"../types.js\";\nimport { Context, Effect } from \"effect\";\nimport { DocumentContext, type DocumentContextData } from \"../context.js\";\nimport * as generationHelpers from \"./helpers.js\";\nimport type { YieldWrap } from \"effect/Utils\";\nimport type { ImportReference, OpenApiSchemaGenerator } from \"./types.js\";\nimport { NotImplementedError } from \"../errors.js\";\nimport { generateJsonRequestCodec } from \"./requestFormats/json.js\";\nimport { generateFormDataRequestCodec } from \"./requestFormats/formData.js\";\nimport { generatePathExpression } from \"./generatePathExpression.js\";\nimport { generateJsonResponseCodec } from \"./responseFormats/json.js\";\nimport { generateBlobResponseCodec } from \"./responseFormats/blob.js\";\n\nexport interface SchemaGeneratorOptions {\n /** @default null */\n custom?: (schema: SchemaObject) => ImportReference | null;\n\n /** @default false */\n experimental_includeTypes?: boolean;\n\n /** @default false */\n includeSchemas?: boolean;\n\n /** @default false */\n includeOperations?: boolean;\n\n /** @default \"unknown\" */\n deprecationHandling?: \"unknown\" | \"optional\";\n}\n\nexport interface DefaultSchemaGeneratorOptions extends SchemaGeneratorOptions {\n modifiers: {\n lazy: (expression: t.Expression) => t.Expression;\n optional: (expression: t.Expression) => t.Expression;\n regex: (expression: t.Expression, pattern: string) => t.Expression;\n immutable: (expression: t.Expression) => t.Expression;\n mutable: (expression: t.Expression) => t.Expression;\n nullable: (expression: t.Expression) => t.Expression;\n };\n types: {\n schema: t.TSQualifiedName;\n typeDecoded: t.TSQualifiedName;\n typeEncoded: t.TSQualifiedName;\n };\n schema: {\n record: (key: t.Expression, value: t.Expression) => t.Expression;\n catchall: (object: t.Expression, value: t.Expression) => t.Expression;\n union: (expressions: t.Expression[]) => t.Expression;\n intersection: (expressions: t.Expression[]) => t.Expression;\n objectExtend: (expressions: t.Expression[]) => t.Expression;\n enum: (expressions: t.Expression[]) => t.Expression;\n instanceOf: t.Expression;\n boolean: t.Expression;\n string: t.Expression;\n number: t.Expression;\n integer: t.Expression;\n array: t.Expression;\n object: t.Expression;\n null: t.Expression;\n unknown: t.Expression;\n };\n transformer: (options: {\n encoded: t.Expression;\n decoded: t.Expression;\n decode: t.Expression | t.BlockStatement;\n decodeAsync?: boolean;\n encode: t.Expression | t.BlockStatement;\n encodeAsync?: boolean;\n }) => t.Expression;\n transformerCatch: (expression: t.Expression) => t.BlockStatement;\n methods: {\n encode: (schema: t.Expression, value: t.Expression) => t.Expression;\n decode: (schema: t.Expression, value: t.Expression) => t.Expression;\n parse: (schema: t.Expression, value: t.Expression) => t.Expression;\n };\n supportsImmutability: boolean;\n}\n\nexport type ExpressionWithType = {\n expression: t.Expression;\n typeDecoded: t.TSType;\n typeEncoded: t.TSType;\n typeMeta: {\n readonly?: boolean;\n optional?: boolean;\n isObject?: boolean;\n isNull?: boolean;\n };\n};\n\nconst equivalentType = (type: t.TSType) => ({\n typeDecoded: type,\n typeEncoded: type,\n});\n\nexport const resolveSchema = Effect.fn(function* (\n schema: SchemaObject | ReferenceObject\n): Generator<\n | YieldWrap<Effect.Effect<SchemaObject, NotImplementedError, DocumentContext>>\n | YieldWrap<Context.Tag<DocumentContext, DocumentContextData>>,\n SchemaObject,\n never\n> {\n const ctx = yield* DocumentContext;\n let resolvedSchema = schema;\n for (let i = 0; i < 10; i++) {\n if (!(\"$ref\" in resolvedSchema))\n return resolvedSchema satisfies SchemaObject as SchemaObject;\n const ref = resolvedSchema.$ref;\n if (!ref.startsWith(\"#/components/schemas/\"))\n return yield* new NotImplementedError({\n message: `$ref ${ref}`,\n });\n const schemaName = ref.slice(\"#/components/schemas/\".length);\n\n const nextSchema = ctx.document.components?.schemas?.[schemaName];\n if (!nextSchema) {\n return yield* new NotImplementedError({\n message: `Missing $ref ${ref}`,\n });\n }\n resolvedSchema = nextSchema;\n }\n return yield* new NotImplementedError({\n message: `Too many $ref in schema`,\n });\n});\n\nconst stringLiteralOrIdentifier = (value: string) => {\n if (value.match(/^[a-zA-Z_][a-zA-Z0-9_]*$/)) {\n return t.identifier(value);\n }\n return t.stringLiteral(value);\n};\n\nconst memberExpressionWithStringProperty = (\n object: t.Expression,\n property: string\n) => {\n if (property.match(/^[a-zA-Z_][a-zA-Z0-9_]*$/)) {\n return t.memberExpression(object, t.identifier(property));\n }\n return t.memberExpression(object, t.stringLiteral(property), true);\n};\n\nexport function createSchemaGenerator(\n options: DefaultSchemaGeneratorOptions\n): OpenApiSchemaGenerator {\n const ensureStandardParametersSchema = Effect.fn(function* () {\n const ctx = yield* DocumentContext;\n if (!ctx.schemas.has(\"ParametersSchema\")) {\n ctx.schemas.set(\"ParametersSchema\", [\n t.exportNamedDeclaration(\n t.variableDeclaration(\"const\", [\n t.variableDeclarator(\n t.identifier(\"ParametersSchema\"),\n t.callExpression(options.schema.object, [\n t.objectExpression([\n t.objectProperty(t.identifier(\"path\"), options.schema.string),\n t.objectProperty(\n t.identifier(\"headers\"),\n options.modifiers.optional(\n t.callExpression(options.schema.instanceOf, [\n t.identifier(\"Headers\"),\n ])\n )\n ),\n t.objectProperty(\n t.identifier(\"body\"),\n options.modifiers.optional(\n options.schema.union([\n options.schema.string,\n t.callExpression(options.schema.instanceOf, [\n t.identifier(\"Blob\"),\n ]),\n t.callExpression(options.schema.instanceOf, [\n t.identifier(\"FormData\"),\n ]),\n t.callExpression(options.schema.instanceOf, [\n t.identifier(\"URLSearchParams\"),\n ]),\n ])\n )\n ),\n ]),\n ])\n ),\n ])\n ),\n ]);\n }\n\n return t.identifier(\"ParametersSchema\");\n });\n\n const getBaseEffectSchema = Effect.fn(function* (\n schema: SchemaObject | ReferenceObject\n ) {\n const ctx = yield* DocumentContext;\n\n const typeMeta: ExpressionWithType[\"typeMeta\"] = {};\n\n if (\"$ref\" in schema) {\n const ref = schema.$ref;\n if (!ref.startsWith(\"#/components/schemas/\"))\n return yield* new NotImplementedError({\n message: `$ref ${ref}`,\n });\n const schemaName = ref.slice(\"#/components/schemas/\".length);\n const schemaKey = yield* generationHelpers.getKey(schemaName);\n\n const resolvedSchema = ctx.document.components?.schemas?.[schemaName];\n if (!resolvedSchema) {\n return yield* new NotImplementedError({\n message: `Missing $ref ${ref}`,\n });\n }\n\n if (ctx.processingSchemas.has(schemaName)) {\n const fn = t.arrowFunctionExpression([], t.identifier(schemaKey.upper));\n if (ctx.processingSchemaTypes.has(schemaName)) {\n return {\n expression: t.nullLiteral(),\n typeDecoded: t.tsTypeReference(\n options.types.typeDecoded,\n t.tsTypeParameterInstantiation([\n t.tsTypeQuery(t.identifier(schemaKey.upper)),\n ])\n ),\n typeEncoded: t.tsTypeReference(\n options.types.typeEncoded,\n t.tsTypeParameterInstantiation([\n t.tsTypeQuery(t.identifier(schemaKey.upper)),\n ])\n ),\n typeMeta,\n };\n }\n ctx.processingSchemaTypes.add(schemaName);\n const typeSchema = yield* ensureSchema(resolvedSchema);\n fn.returnType = t.tsTypeAnnotation(\n t.tsTypeReference(\n options.types.schema,\n t.tsTypeParameterInstantiation([\n typeSchema.typeDecoded,\n typeSchema.typeEncoded,\n ])\n )\n );\n ctx.processingSchemaTypes.delete(schemaName);\n return {\n expression: options.modifiers.lazy(fn),\n typeDecoded: t.tsTypeReference(\n options.types.typeDecoded,\n t.tsTypeParameterInstantiation([\n t.tsTypeQuery(t.identifier(schemaKey.upper)),\n ])\n ),\n typeEncoded: t.tsTypeReference(\n options.types.typeEncoded,\n t.tsTypeParameterInstantiation([\n t.tsTypeQuery(t.identifier(schemaKey.upper)),\n ])\n ),\n typeMeta,\n };\n }\n\n if (!ctx.schemas.has(schemaName)) {\n ctx.processingSchemas.add(schemaName);\n\n const schemaExpression = yield* ensureSchema(resolvedSchema);\n\n const schemaKeyIdentifier = t.identifier(schemaKey.upper);\n if (options.experimental_includeTypes) {\n schemaKeyIdentifier.typeAnnotation = t.tsTypeAnnotation(\n t.tsTypeReference(\n options.types.schema,\n t.tsTypeParameterInstantiation([\n schemaExpression.typeDecoded,\n schemaExpression.typeEncoded,\n ])\n )\n );\n }\n\n ctx.schemas.set(schemaName, [\n t.exportNamedDeclaration(\n t.variableDeclaration(\"const\", [\n t.variableDeclarator(\n schemaKeyIdentifier,\n schemaExpression.expression\n ),\n ])\n ),\n\n t.exportNamedDeclaration(\n t.tsTypeAliasDeclaration(\n t.identifier(schemaKey.upper),\n null,\n t.tsTypeReference(\n options.types.typeDecoded,\n t.tsTypeParameterInstantiation([\n t.tsTypeQuery(t.identifier(schemaKey.upper)),\n ])\n )\n )\n ),\n ]);\n ctx.schemaTypeMeta.set(schemaName, schemaExpression.typeMeta);\n ctx.processingSchemas.delete(schemaName);\n }\n\n return {\n expression: t.identifier(schemaKey.upper),\n typeDecoded: t.tsTypeReference(\n options.types.typeDecoded,\n t.tsTypeParameterInstantiation([\n t.tsTypeQuery(t.identifier(schemaKey.upper)),\n ])\n ),\n typeEncoded: t.tsTypeReference(\n options.types.typeEncoded,\n t.tsTypeParameterInstantiation([\n t.tsTypeQuery(t.identifier(schemaKey.upper)),\n ])\n ),\n typeMeta: ctx.schemaTypeMeta.get(schemaName)!,\n };\n }\n\n if (schema.deprecated) {\n if (options.deprecationHandling === \"optional\") {\n typeMeta.optional = true;\n } else {\n return {\n expression: options.modifiers.optional(options.schema.unknown),\n ...equivalentType(\n t.tsUnionType([t.tsUnknownKeyword(), t.tsUndefinedKeyword()])\n ),\n typeMeta,\n };\n }\n }\n\n const customResult = options.custom?.(schema);\n\n if (customResult) {\n const identifier = yield* generationHelpers.ensureImport(\n customResult.name,\n customResult.from\n );\n const returnType = t.tsTypeReference(\n t.identifier(\"ReturnType\"),\n t.tsTypeParameterInstantiation([t.tsTypeQuery(identifier)])\n );\n return {\n expression: t.callExpression(identifier, []),\n typeDecoded: t.tsTypeReference(\n options.types.typeDecoded,\n t.tsTypeParameterInstantiation([returnType])\n ),\n typeEncoded: t.tsTypeReference(\n options.types.typeEncoded,\n t.tsTypeParameterInstantiation([returnType])\n ),\n typeMeta,\n };\n }\n\n if (schema.allOf) {\n const results = yield* Effect.forEach(\n (schema: SchemaObject | ReferenceObject) => ensureSchema(schema)\n )(schema.allOf);\n\n let result: ExpressionWithType;\n if (results.length === 1) {\n result = results[0]!;\n } else {\n result = {\n expression: options.schema[\n results.every((i) => i.typeMeta.isObject)\n ? \"objectExtend\"\n : \"intersection\"\n ](results.map((result) => result.expression)),\n typeDecoded: t.tsIntersectionType(\n results.map((result) => result.typeDecoded)\n ),\n typeEncoded: t.tsIntersectionType(\n results.map((result) => result.typeEncoded)\n ),\n typeMeta,\n };\n }\n\n // Workaround to support Swashbuckle.AspNetCore's nullable attribute on allOf objects.\n if (\"nullable\" in schema && schema.nullable) {\n result.expression = options.modifiers.nullable(result.expression);\n result.typeDecoded = t.tsUnionType([\n result.typeDecoded,\n t.tsNullKeyword(),\n ]);\n result.typeEncoded = t.tsUnionType([\n result.typeEncoded,\n t.tsNullKeyword(),\n ]);\n }\n return result;\n }\n\n if (schema.enum) {\n const unsupportedEnumValue = schema.enum.find(\n (i: unknown) =>\n typeof i !== \"string\" &&\n typeof i !== \"number\" &&\n typeof i !== \"boolean\" &&\n i !== null\n );\n if (unsupportedEnumValue !== undefined) {\n return yield* new NotImplementedError({\n message: `Unsupported 'enum' value: ${JSON.stringify(unsupportedEnumValue)}`,\n });\n }\n const getLiteral = (value: unknown) => {\n if (typeof value === \"number\") {\n return t.numericLiteral(value);\n }\n if (typeof value === \"boolean\") {\n return t.booleanLiteral(value);\n }\n return t.stringLiteral(value as string);\n };\n return {\n expression: options.schema.enum(\n schema.enum.map((e: unknown) =>\n e === null ? t.nullLiteral() : getLiteral(e)\n )\n ),\n ...equivalentType(\n t.tsUnionType(\n schema.enum.map((e: unknown) =>\n e === null ? t.tsNullKeyword() : t.tsLiteralType(getLiteral(e))\n )\n )\n ),\n typeMeta,\n };\n }\n\n if (schema.contentMediaType) {\n if (schema.contentEncoding) {\n return yield* new NotImplementedError({\n message: `Unsupported 'contentEncoding' value: ${schema.contentEncoding}`,\n });\n }\n return {\n expression: t.callExpression(options.schema.instanceOf, [\n t.identifier(\"Blob\"),\n ]),\n ...equivalentType(t.tsTypeReference(t.identifier(\"Blob\"))),\n typeMeta,\n };\n }\n\n switch (schema.type) {\n case \"boolean\": {\n return {\n expression: options.schema.boolean,\n ...equivalentType(t.tsBooleanKeyword()),\n typeMeta,\n };\n }\n case \"string\": {\n let expression: ExpressionWithType = {\n expression: options.schema.string,\n ...equivalentType(t.tsStringKeyword()),\n typeMeta,\n };\n if (schema.pattern) {\n expression.expression = options.modifiers.regex(\n expression.expression,\n schema.pattern\n );\n }\n return expression;\n }\n case \"number\": {\n return {\n expression: options.schema.number,\n ...equivalentType(t.tsNumberKeyword()),\n typeMeta,\n };\n }\n case \"integer\": {\n return {\n expression: options.schema.integer,\n ...equivalentType(t.tsNumberKeyword()),\n typeMeta,\n };\n }\n case \"object\": {\n typeMeta.isObject = true;\n const object = t.objectExpression([]);\n const objectTypeDecoded = t.tsTypeLiteral([]);\n const objectTypeEncoded = t.tsTypeLiteral([]);\n for (const [propertyKey, property] of Object.entries(\n schema.properties ?? {}\n ) as [string, SchemaObject | ReferenceObject][]) {\n let propertySchema = yield* ensureSchema(property);\n const decodedMember = t.tsPropertySignature(\n t.identifier(propertyKey),\n t.tsTypeAnnotation(propertySchema.typeDecoded)\n );\n const encodedMember = t.tsPropertySignature(\n t.identifier(propertyKey),\n t.tsTypeAnnotation(propertySchema.typeEncoded)\n );\n decodedMember.readonly = !!propertySchema.typeMeta?.readonly;\n encodedMember.readonly = !!propertySchema.typeMeta?.readonly;\n if (\n propertySchema.typeMeta?.optional ||\n !schema.required?.includes(propertyKey)\n ) {\n propertySchema.expression = options.modifiers.optional(\n propertySchema.expression\n );\n decodedMember.optional = true;\n encodedMember.optional = true;\n }\n const objectProperty = t.objectProperty(\n stringLiteralOrIdentifier(propertyKey),\n propertySchema.expression\n );\n if (property.description) {\n t.addComment(\n objectProperty,\n \"leading\",\n `* ${property.description}`\n );\n }\n object.properties.push(objectProperty);\n objectTypeDecoded.members.push(decodedMember);\n objectTypeEncoded.members.push(encodedMember);\n }\n\n if (schema.additionalProperties) {\n const valueSchema = yield* ensureSchema(\n schema.additionalProperties === true\n ? { type: undefined }\n : schema.additionalProperties\n );\n\n if (object.properties.length === 0) {\n return {\n expression: options.schema.record(\n options.schema.string,\n valueSchema.expression\n ),\n typeDecoded: t.tsTypeReference(\n t.identifier(\"Record\"),\n t.tsTypeParameterInstantiation([\n t.tsStringKeyword(),\n valueSchema.typeDecoded,\n ])\n ),\n typeEncoded: t.tsTypeReference(\n t.identifier(\"Record\"),\n t.tsTypeParameterInstantiation([\n t.tsStringKeyword(),\n valueSchema.typeEncoded,\n ])\n ),\n typeMeta,\n };\n }\n\n const expression = options.schema.catchall(\n t.callExpression(options.schema.object, [object]),\n valueSchema.expression\n );\n const keyParam = t.identifier(\"key\");\n keyParam.typeAnnotation = t.tsTypeAnnotation(t.tsStringKeyword());\n const indexSignatureDecoded = t.tsIndexSignature(\n [keyParam],\n t.tsTypeAnnotation(valueSchema.typeDecoded)\n );\n const indexSignatureEncoded = t.tsIndexSignature(\n [keyParam],\n t.tsTypeAnnotation(valueSchema.typeEncoded)\n );\n return {\n expression,\n typeDecoded: t.tsTypeLiteral([\n ...objectTypeDecoded.members,\n indexSignatureDecoded,\n ]),\n typeEncoded: t.tsTypeLiteral([\n ...objectTypeEncoded.members,\n indexSignatureEncoded,\n ]),\n typeMeta,\n };\n }\n\n return {\n expression: t.callExpression(options.schema.object, [object]),\n typeDecoded: objectTypeDecoded,\n typeEncoded: objectTypeEncoded,\n typeMeta,\n };\n }\n case \"array\": {\n const itemsSchema = yield* ensureSchema(schema.items);\n let expression: t.Expression = t.callExpression(options.schema.array, [\n itemsSchema.expression,\n ]);\n let typeDecoded: t.TSType = t.tsArrayType(itemsSchema.typeDecoded);\n let typeEncoded: t.TSType = t.tsArrayType(itemsSchema.typeEncoded);\n if (options.supportsImmutability) {\n if (itemsSchema.typeMeta?.readonly) {\n expression = options.modifiers.immutable(expression);\n typeDecoded = t.tsTypeOperator(typeDecoded, \"readonly\");\n typeEncoded = t.tsTypeOperator(typeEncoded, \"readonly\");\n } else {\n expression = options.modifiers.mutable(expression);\n }\n }\n return {\n expression,\n typeDecoded,\n typeEncoded,\n typeMeta,\n };\n }\n case \"null\": {\n typeMeta.isNull = true;\n return {\n expression: options.schema.null,\n ...equivalentType(t.tsNullKeyword()),\n typeMeta,\n };\n }\n case undefined: {\n return {\n expression: options.schema.unknown,\n ...equivalentType(t.tsUnknownKeyword()),\n typeMeta,\n };\n }\n default: {\n console.info(schema);\n return yield* new NotImplementedError({\n message: `type ${schema.type}`,\n });\n }\n }\n });\n\n const applyModifiers = Effect.fn(function* (\n expression: ExpressionWithType,\n schema: SchemaObject | ReferenceObject\n ) {\n if (\"$ref\" in schema) return expression;\n\n const modified = { ...expression };\n\n if (options.supportsImmutability) {\n if (schema.readOnly) {\n modified.expression = options.modifiers.immutable(modified.expression);\n modified.typeMeta ??= {};\n modified.typeMeta.readonly = true;\n } else {\n modified.expression = options.modifiers.mutable(modified.expression);\n }\n }\n\n return modified;\n });\n\n const ensureSchema = Effect.fn(function* (\n schema: SchemaObject | ReferenceObject\n ): Generator<\n YieldWrap<\n Effect.Effect<ExpressionWithType, NotImplementedError, DocumentContext>\n >,\n ExpressionWithType,\n never\n > {\n let schemas = [schema]\n .flatMap<SchemaObject | ReferenceObject>((schema) => {\n if (\"$ref\" in schema) return [schema];\n if (schema.oneOf) {\n return schema.oneOf;\n }\n return [schema];\n })\n .flatMap<SchemaObject | ReferenceObject>((schema) => {\n if (typeof schema === \"boolean\") return [];\n if (\"$ref\" in schema) return [schema];\n if (Array.isArray(schema.type)) {\n return schema.type.map(\n (type) =>\n ({\n ...schema,\n type,\n }) as SchemaObject\n );\n }\n return [schema];\n });\n\n let expressions: ExpressionWithType[] = [];\n for (const schema of schemas) {\n expressions.push(\n yield* applyModifiers(yield* getBaseEffectSchema(schema), schema)\n );\n }\n\n let isNullable = false;\n if (expressions.some((e) => e.typeMeta?.isNull)) {\n isNullable = true;\n expressions = expressions.filter((e) => !e.typeMeta?.isNull);\n }\n\n let result: ExpressionWithType;\n\n if (expressions.length === 1) {\n result = expressions[0]!;\n } else {\n result = {\n expression: options.schema.union(expressions.map((e) => e.expression)),\n typeDecoded: t.tsUnionType(expressions.map((e) => e.typeDecoded)),\n typeEncoded: t.tsUnionType(expressions.map((e) => e.typeEncoded)),\n typeMeta: {},\n };\n }\n\n if (isNullable) {\n result.expression = options.modifiers.nullable(result.expression);\n result.typeDecoded = t.tsUnionType([\n result.typeDecoded,\n t.tsNullKeyword(),\n ]);\n result.typeEncoded = t.tsUnionType([\n result.typeEncoded,\n t.tsNullKeyword(),\n ]);\n }\n\n return result;\n });\n\n const ensureParametersSchema = Effect.fn(function* (\n operationKey: generationHelpers.OperationKey,\n method: OperationObject,\n path: string\n ) {\n const ctx = yield* DocumentContext;\n const identifier = t.identifier(`${operationKey.upper}_Parameters`);\n const object = t.objectExpression([]);\n\n const queryArray = t.arrayExpression([]);\n const pathParameters: Record<string, t.Expression> = {};\n const headerArray = t.arrayExpression([]);\n let hasBody = false;\n\n for (let parameter of method.parameters ?? []) {\n if (\"$ref\" in parameter) {\n const newParameter =\n ctx.document.components?.parameters?.[\n parameter.$ref.slice(\"#/components/parameters/\".length)\n ];\n if (newParameter) {\n parameter = newParameter;\n } else {\n return yield* new NotImplementedError({\n message: \"Unresolved $ref in parameter\",\n });\n }\n if (\"$ref\" in parameter) {\n return yield* new NotImplementedError({\n message: \"$ref in parameter\",\n });\n }\n }\n if (!parameter.schema) {\n return yield* new NotImplementedError({\n message: \"parameter without schema\",\n });\n }\n let expression = (yield* ensureSchema(parameter.schema)).expression;\n if (!parameter.required) {\n expression = options.modifiers.optional(expression);\n }\n const objectProperty = t.objectProperty(\n stringLiteralOrIdentifier(parameter.name),\n expression\n );\n if (parameter.description) {\n t.addComment(objectProperty, \"leading\", `* ${parameter.description}`);\n }\n object.properties.push(objectProperty);\n if (parameter.in === \"query\") {\n const param = memberExpressionWithStringProperty(\n t.identifier(\"from\"),\n parameter.name\n );\n // TODO: Share formData request format logic\n if (\"type\" in parameter.schema && parameter.schema.type === \"array\") {\n queryArray.elements.push(\n t.spreadElement(\n t.logicalExpression(\n \"??\",\n Object.assign(\n t.optionalCallExpression(\n t.optionalMemberExpression(\n param,\n t.identifier(\"map\"),\n false,\n true\n ),\n [\n t.arrowFunctionExpression(\n [t.identifier(\"value\")],\n t.arrayExpression([\n t.stringLiteral(parameter.name),\n t.callExpression(t.identifier(\"String\"), [\n t.identifier(\"value\"),\n ]),\n ])\n ),\n ],\n false\n ),\n {\n typeParameters: t.tsTypeParameterInstantiation([\n t.tsTupleType([t.tsStringKeyword(), t.tsStringKeyword()]),\n ]),\n }\n ),\n t.arrayExpression([])\n )\n )\n );\n } else {\n queryArray.elements.push(\n t.arrayExpression([\n t.stringLiteral(parameter.name),\n t.callExpression(t.identifier(\"String\"), [param]),\n ])\n );\n }\n } else if (parameter.in === \"path\") {\n pathParameters[parameter.name] = memberExpressionWithStringProperty(\n t.identifier(\"from\"),\n parameter.name\n );\n } else if (parameter.in === \"header\") {\n headerArray.elements.push(\n t.arrayExpression([\n t.stringLiteral(parameter.name),\n t.callExpression(t.identifier(\"String\"), [\n memberExpressionWithStringProperty(\n t.identifier(\"from\"),\n parameter.name\n ),\n ]),\n ])\n );\n } else {\n return yield* new NotImplementedError({\n message: `parameter in ${parameter.in}`,\n });\n }\n }\n\n const body = yield* requestBodySchema(operationKey, method);\n if (body) {\n hasBody = true;\n object.properties.push(t.objectProperty(t.identifier(\"data\"), body.data));\n headerArray.elements.push(...body.headers);\n }\n\n const decodedSchema = t.callExpression(options.schema.object, [object]);\n\n const transform = options.transformer({\n encoded: yield* ensureStandardParametersSchema(),\n decoded: decodedSchema,\n decode: t.blockStatement([\n t.throwStatement(\n t.newExpression(t.identifier(\"Error\"), [\n t.stringLiteral(\"Not implemented\"),\n ])\n ),\n ]),\n encode: t.objectExpression([\n t.objectProperty(\n t.identifier(\"path\"),\n generatePathExpression(\n path,\n pathParameters,\n queryArray.elements.length\n ? t.newExpression(t.identifier(\"URLSearchParams\"), [queryArray])\n : null\n )\n ),\n ...(headerArray.elements.length\n ? [\n t.objectProperty(\n t.identifier(\"headers\"),\n t.newExpression(t.identifier(\"Headers\"), [headerArray])\n ),\n ]\n : []),\n ...(hasBody\n ? [\n t.objectProperty(\n t.identifier(\"body\"),\n t.memberExpression(t.identifier(\"from\"), t.identifier(\"data\"))\n ),\n ]\n : []),\n ]),\n });\n\n ctx.schemas.set(identifier.name, [\n t.exportNamedDeclaration(\n t.variableDeclaration(\"const\", [\n t.variableDeclarator(identifier, transform),\n ])\n ),\n ]);\n\n return {\n expression: identifier,\n typeReference: t.tsTypeReference(\n options.types.typeDecoded,\n t.tsTypeParameterInstantiation([t.tsTypeQuery(identifier)])\n ),\n };\n });\n\n const requestBodySchema = Effect.fn(function* (\n operationKey: generationHelpers.OperationKey,\n method: OperationObject\n ) {\n if (!method.requestBody) {\n return null;\n }\n\n if (\"$ref\" in method.requestBody) {\n return yield* new NotImplementedError({\n message: \"$ref in requestBody\",\n });\n }\n\n let hasBody = false;\n\n for (const contentType in method.requestBody.content) {\n hasBody = true;\n const schema = method.requestBody.content[contentType]?.schema;\n if (contentType === \"application/json\") {\n if (!schema) continue;\n return {\n headers: [\n t.arrayExpression([\n t.stringLiteral(\"Content-Type\"),\n t.stringLiteral(\"application/json\"),\n ]),\n ],\n data: yield* generateJsonRequestCodec(\n options,\n yield* resolveSchema(schema),\n (yield* ensureSchema(schema)).expression\n ),\n };\n } else if (contentType === \"multipart/form-data\") {\n if (!schema) continue;\n return {\n headers: [],\n data: yield* generateFormDataRequestCodec(\n options,\n yield* resolveSchema(schema),\n (yield* ensureSchema(schema)).expression\n ),\n };\n } else {\n if (\n schema &&\n (\"$ref\" in schema ||\n (schema.type !== \"string\" && schema.format !== \"binary\"))\n ) {\n continue;\n }\n return {\n headers: [\n t.arrayExpression([\n t.stringLiteral(\"Content-Type\"),\n t.stringLiteral(contentType),\n ]),\n ],\n data: t.callExpression(options.schema.instanceOf, [\n t.identifier(\"Blob\"),\n ]),\n };\n }\n }\n\n if (!hasBody) {\n return null;\n }\n\n return yield* new NotImplementedError({\n message: `No supported requestBody type (${Object.keys(\n method.requestBody.content\n ).join(\", \")}) in ${operationKey.upper}`,\n });\n });\n\n const responseSchema = Effect.fn(function* (\n content: { [format: string]: MediaTypeObject | ReferenceObject } | undefined\n ) {\n if (content) {\n for (const [format, formatContent] of Object.entries(content)) {\n if (format === \"application/json\") {\n if (!formatContent.schema) {\n continue;\n }\n\n const schema = formatContent.schema;\n\n const decodedSchema = (yield* ensureSchema(schema)).expression;\n\n return yield* generateJsonResponseCodec(\n options,\n yield* resolveSchema(schema),\n decodedSchema\n );\n }\n }\n }\n\n return yield* generateBlobResponseCodec(options);\n });\n\n const ensureResponseSchema = Effect.fn(function* (\n operationKey: generationHelpers.OperationKey,\n method: OperationObject\n ) {\n const ctx = yield* DocumentContext;\n\n let transform: t.Expression;\n\n if (!method.responses?.[\"200\"]) {\n transform = yield* responseSchema(undefined);\n } else {\n let response: ResponseObject;\n\n if (\"$ref\" in method.responses[\"200\"]) {\n const ref = method.responses[\"200\"].$ref;\n if (!ref.startsWith(\"#/components/responses/\"))\n return yield* new NotImplementedError({\n message: `$ref ${ref} in response in ${operationKey.upper}`,\n });\n const responseName = ref.slice(\"#/components/responses/\".length);\n const newResponse = ctx.document.components?.responses?.[responseName];\n if (!newResponse)\n return yield* new NotImplementedError({\n message: `Missing $ref ${ref} in response in ${operationKey.upper}`,\n });\n\n if (\"$ref\" in newResponse)\n return yield* new NotImplementedError({\n message: `$ref in $ref in response in ${operationKey.upper}`,\n });\n\n response = newResponse;\n } else {\n response = method.responses[\"200\"];\n }\n\n transform = yield* responseSchema(response.content);\n }\n\n const identifier = t.identifier(`${operationKey.upper}_Response`);\n\n ctx.schemas.set(identifier.name, [\n t.exportNamedDeclaration(\n t.variableDeclaration(\"const\", [\n t.variableDeclarator(identifier, transform),\n ])\n ),\n ]);\n\n return {\n expression: identifier,\n typeReference: t.tsTypeReference(\n options.types.typeDecoded,\n t.tsTypeParameterInstantiation([t.tsTypeQuery(identifier)])\n ),\n };\n });\n\n const processSchema = Effect.fn(function* (schema: SchemaObject) {\n if (options.includeSchemas) {\n yield* ensureSchema(schema);\n }\n });\n\n const processOperation = Effect.fn(function* (\n operationKey: generationHelpers.OperationKey,\n path: string,\n _method: generationHelpers.HttpMethod,\n operation: OperationObject\n ) {\n if (options.includeOperations) {\n yield* ensureParametersSchema(operationKey, operation, path);\n yield* ensureResponseSchema(operationKey, operation);\n }\n });\n const decodeResponse = Effect.fn(function* (\n schema: t.Expression,\n response: t.Expression\n ) {\n return options.methods.decode(schema, response);\n });\n const encodeParameters = Effect.fn(function* (\n schema: t.Expression,\n response: t.Expression\n ) {\n return options.methods.encode(schema, response);\n });\n return {\n processSchema,\n processOperation,\n ensureParametersSchema,\n ensureResponseSchema,\n decodeResponse,\n encodeParameters,\n get schemaType() {\n return options.types.schema;\n },\n };\n}\n","import * as t from \"@babel/types\";\nimport {\n createSchemaGenerator,\n type SchemaGeneratorOptions,\n} from \"./schema.js\";\nimport { Effect } from \"effect\";\nimport * as generationHelpers from \"./helpers.js\";\n\nexport const createEffectSchemaGenerator = (\n options: SchemaGeneratorOptions\n) => ({\n ...createSchemaGenerator({\n ...options,\n modifiers: {\n lazy: (expression) =>\n t.callExpression(\n t.memberExpression(t.identifier(\"Schema\"), t.identifier(\"suspend\")),\n [expression]\n ),\n optional: (expression) =>\n t.callExpression(t.memberExpression(expression, t.identifier(\"pipe\")), [\n t.memberExpression(t.identifier(\"Schema\"), t.identifier(\"optional\")),\n ]),\n regex: (expression, pattern: string) =>\n t.callExpression(t.memberExpression(expression, t.identifier(\"pipe\")), [\n t.callExpression(\n t.memberExpression(t.identifier(\"Schema\"), t.identifier(\"pattern\")),\n [t.regExpLiteral(pattern)]\n ),\n ]),\n immutable: (expression) => expression,\n mutable: (expression) =>\n t.callExpression(t.memberExpression(expression, t.identifier(\"pipe\")), [\n t.memberExpression(t.identifier(\"Schema\"), t.identifier(\"mutable\")),\n ]),\n nullable: (expression) =>\n t.callExpression(t.memberExpression(expression, t.identifier(\"pipe\")), [\n t.memberExpression(t.identifier(\"Schema\"), t.identifier(\"NullOr\")),\n ]),\n },\n types: {\n schema: t.tsQualifiedName(t.identifier(\"Schema\"), t.identifier(\"Schema\")),\n typeDecoded: t.tsQualifiedName(\n t.tsQualifiedName(t.identifier(\"Schema\"), t.identifier(\"Schema\")),\n t.identifier(\"Type\")\n ),\n typeEncoded: t.tsQualifiedName(\n t.tsQualifiedName(t.identifier(\"Schema\"), t.identifier(\"Schema\")),\n t.identifier(\"Encoded\")\n ),\n },\n schema: {\n record: (key: t.Expression, value: t.Expression) =>\n t.callExpression(\n t.memberExpression(t.identifier(\"Schema\"), t.identifier(\"Record\")),\n [\n t.objectExpression([\n t.objectProperty(t.identifier(\"key\"), key),\n t.objectProperty(t.identifier(\"value\"), value),\n ]),\n ]\n ),\n catchall: (object: t.Expression, value: t.Expression) =>\n t.callExpression(\n t.memberExpression(t.identifier(\"Schema\"), t.identifier(\"extend\")),\n [\n object,\n t.callExpression(\n t.memberExpression(t.identifier(\"Schema\"), t.identifier(\"Record\")),\n [\n t.objectExpression([\n t.objectProperty(\n t.identifier(\"key\"),\n t.memberExpression(t.identifier(\"Schema\"), t.identifier(\"String\"))\n ),\n t.objectProperty(t.identifier(\"value\"), value),\n ]),\n ]\n ),\n ]\n ),\n union: (expressions) =>\n t.callExpression(\n t.memberExpression(t.identifier(\"Schema\"), t.identifier(\"Union\")),\n expressions\n ),\n intersection: (expressions) =>\n expressions.reduce((a, b) =>\n t.callExpression(\n t.memberExpression(t.identifier(\"Schema\"), t.identifier(\"extend\")),\n [a, b]\n )\n ),\n objectExtend: (expressions) =>\n expressions.reduce((a, b) =>\n t.callExpression(\n t.memberExpression(t.identifier(\"Schema\"), t.identifier(\"extend\")),\n [a, b]\n )\n ),\n enum: (expressions) =>\n t.callExpression(\n t.memberExpression(t.identifier(\"Schema\"), t.identifier(\"Literal\")),\n expressions\n ),\n instanceOf: t.memberExpression(\n t.identifier(\"Schema\"),\n t.identifier(\"instanceOf\")\n ),\n boolean: t.memberExpression(\n t.identifier(\"Schema\"),\n t.identifier(\"Boolean\")\n ),\n string: t.memberExpression(\n t.identifier(\"Schema\"),\n t.identifier(\"String\")\n ),\n number: t.memberExpression(\n t.identifier(\"Schema\"),\n t.identifier(\"Number\")\n ),\n integer: t.callExpression(\n t.memberExpression(\n t.memberExpression(t.identifier(\"Schema\"), t.identifier(\"Number\")),\n t.identifier(\"pipe\")\n ),\n [\n t.callExpression(\n t.memberExpression(t.identifier(\"Schema\"), t.identifier(\"int\")),\n []\n ),\n ]\n ),\n array: t.memberExpression(t.identifier(\"Schema\"), t.identifier(\"Array\")),\n object: t.memberExpression(\n t.identifier(\"Schema\"),\n t.identifier(\"Struct\")\n ),\n null: t.memberExpression(t.identifier(\"Schema\"), t.identifier(\"Null\")),\n unknown: t.memberExpression(\n t.identifier(\"Schema\"),\n t.identifier(\"Unknown\")\n ),\n },\n transformer: ({\n encoded,\n decoded,\n decode,\n decodeAsync,\n encode,\n encodeAsync,\n }) => {\n let decodeFn: t.Expression | undefined;\n let encodeFn: t.Expression | undefined;\n if (decodeAsync || encodeAsync) {\n decodeFn = t.arrowFunctionExpression(\n [t.identifier(\"from\"), t.identifier(\"ctx\")],\n t.callExpression(\n t.memberExpression(t.identifier(\"Effect\"), t.identifier(\"promise\")),\n [t.arrowFunctionExpression([], decode, true)]\n )\n );\n encodeFn = t.arrowFunctionExpression(\n [t.identifier(\"from\"), t.identifier(\"ctx\")],\n t.callExpression(\n t.memberExpression(t.identifier(\"Effect\"), t.identifier(\"promise\")),\n [t.arrowFunctionExpression([], encode, true)]\n )\n );\n } else {\n decodeFn = t.arrowFunctionExpression(\n [t.identifier(\"from\"), t.identifier(\"ctx\")],\n decode\n );\n encodeFn = t.arrowFunctionExpression(\n [t.identifier(\"from\"), t.identifier(\"ctx\")],\n encode\n );\n }\n return t.callExpression(\n t.memberExpression(\n t.identifier(\"Schema\"),\n t.identifier(\n decodeAsync || encodeAsync ? \"transformOrFail\" : \"transform\"\n )\n ),\n [\n encoded,\n decoded,\n t.objectExpression([\n t.objectProperty(t.identifier(\"strict\"), t.booleanLiteral(true)),\n t.objectProperty(t.identifier(\"decode\"), decodeFn),\n t.objectProperty(t.identifier(\"encode\"), encodeFn),\n ]),\n ]\n );\n },\n transformerCatch: (expression) =>\n t.blockStatement([t.throwStatement(expression)]),\n methods: {\n encode: (schema: t.Expression, value: t.Expression) =>\n t.callExpression(\n t.callExpression(\n t.memberExpression(\n t.identifier(\"Schema\"),\n t.identifier(\"encodePromise\")\n ),\n [schema]\n ),\n [value]\n ),\n decode: (schema: t.Expression, value: t.Expression) =>\n t.callExpression(\n t.callExpression(\n t.memberExpression(\n t.identifier(\"Schema\"),\n t.identifier(\"decodePromise\")\n ),\n [schema]\n ),\n [value]\n ),\n parse: (schema: t.Expression, value: t.Expression) =>\n t.callExpression(\n t.callExpression(\n t.memberExpression(\n t.identifier(\"Schema\"),\n t.identifier(\"decodeUnknownPromise\")\n ),\n [schema]\n ),\n [value]\n ),\n },\n supportsImmutability: true,\n }),\n initialize: Effect.fn(function* () {\n yield* generationHelpers.ensureNamespaceImport(\"Schema\", \"effect/Schema\");\n yield* generationHelpers.ensureImport(\"Effect\", \"effect\");\n }),\n});\n","import * as t from \"@babel/types\";\nimport {\n createSchemaGenerator,\n type SchemaGeneratorOptions,\n} from \"./schema.js\";\nimport { Effect } from \"effect\";\nimport * as generationHelpers from \"./helpers.js\";\n\nexport interface ZodSchemaGeneratorOptions extends SchemaGeneratorOptions {\n /** @default false */\n mini?: boolean;\n}\n\nconst z = t.identifier(\"z\");\n\nfunction getObjectShape(expression: t.Expression) {\n // If the expression is z.object({...}), return the object argument, rather than unnecessarily using z.object(...).shape\n if (\n expression.type === \"CallExpression\" &&\n expression.callee.type === \"MemberExpression\" &&\n expression.callee.object.type === \"Identifier\" &&\n expression.callee.object.name === \"z\" &&\n expression.callee.property.type === \"Identifier\" &&\n expression.callee.property.name === \"object\" &&\n expression.arguments.length === 1 &&\n expression.arguments[0]?.type === \"ObjectExpression\"\n ) {\n return expression.arguments[0];\n }\n return t.memberExpression(expression, t.identifier(\"shape\"));\n}\n\nexport const createZodSchemaGenerator = ({\n mini = false,\n ...options\n}: ZodSchemaGeneratorOptions) => {\n const maybeExtension = (\n expression: t.Expression,\n extension: string,\n args: t.Expression[]\n ) =>\n mini\n ? t.callExpression(t.memberExpression(z, t.identifier(extension)), [\n expression,\n ...args,\n ])\n : t.callExpression(\n t.memberExpression(expression, t.identifier(extension)),\n args\n );\n\n return {\n ...createSchemaGenerator({\n ...options,\n modifiers: {\n lazy: (expression) =>\n t.callExpression(t.memberExpression(z, t.identifier(\"lazy\")), [\n expression,\n ]),\n optional: (expression) => maybeExtension(expression, \"optional\", []),\n regex: (expression, pattern: string) =>\n maybeExtension(expression, \"regex\", [t.regExpLiteral(pattern)]),\n immutable: (expression) => expression,\n mutable: (expression) => expression,\n nullable: (expression) => maybeExtension(expression, \"nullable\", []),\n },\n types: {\n schema: t.tsQualifiedName(\n z,\n t.identifier(mini ? \"ZodMiniType\" : \"Schema\")\n ),\n typeDecoded: t.tsQualifiedName(z, t.identifier(\"output\")),\n typeEncoded: t.tsQualifiedName(z, t.identifier(\"input\")),\n },\n schema: {\n record: (key: t.Expression, value: t.Expression) =>\n t.callExpression(t.memberExpression(z, t.identifier(\"record\")), [\n key,\n value,\n ]),\n catchall: (object: t.Expression, value: t.Expression) =>\n t.callExpression(\n t.memberExpression(mini ? z : object, t.identifier(\"catchall\")),\n [...(mini ? [object] : []), value]\n ),\n union: (expressions) =>\n t.callExpression(t.memberExpression(z, t.identifier(\"union\")), [\n t.arrayExpression(expressions),\n ]),\n intersection: (expressions) =>\n expressions.reduce((a, b) =>\n t.callExpression(\n t.memberExpression(z, t.identifier(\"intersection\")),\n [a, b]\n )\n ),\n objectExtend: (expressions) =>\n expressions.reduce((a, b) =>\n t.callExpression(\n t.memberExpression(mini ? z : a, t.identifier(\"extend\")),\n [...(mini ? [a] : []), getObjectShape(b)]\n )\n ),\n enum: (expressions) =>\n t.callExpression(t.memberExpression(z, t.identifier(\"enum\")), [\n t.arrayExpression(expressions),\n ]),\n instanceOf: t.memberExpression(z, t.identifier(\"instanceof\")),\n boolean: t.callExpression(\n t.memberExpression(z, t.identifier(\"boolean\")),\n []\n ),\n string: t.callExpression(\n t.memberExpression(z, t.identifier(\"string\")),\n []\n ),\n number: t.callExpression(\n t.memberExpression(z, t.identifier(\"number\")),\n []\n ),\n integer: t.callExpression(\n t.memberExpression(z, t.identifier(\"int\")),\n []\n ),\n array: t.memberExpression(z, t.identifier(\"array\")),\n object: t.memberExpression(z, t.identifier(\"object\")),\n null: t.callExpression(t.memberExpression(z, t.identifier(\"null\")), []),\n unknown: t.callExpression(\n t.memberExpression(z, t.identifier(\"unknown\")),\n []\n ),\n },\n transformer: ({\n encoded,\n decoded,\n decode,\n decodeAsync,\n encode,\n encodeAsync,\n }) =>\n t.callExpression(t.memberExpression(z, t.identifier(\"codec\")), [\n encoded,\n decoded,\n t.objectExpression([\n t.objectProperty(\n t.identifier(\"decode\"),\n t.arrowFunctionExpression(\n [t.identifier(\"from\"), t.identifier(\"ctx\")],\n decode,\n decodeAsync\n )\n ),\n t.objectProperty(\n t.identifier(\"encode\"),\n t.arrowFunctionExpression(\n [t.identifier(\"from\"), t.identifier(\"ctx\")],\n encode,\n encodeAsync\n )\n ),\n ]),\n ]),\n transformerCatch: (expression) =>\n t.blockStatement([\n t.expressionStatement(\n t.callExpression(\n t.memberExpression(\n t.memberExpression(t.identifier(\"ctx\"), t.identifier(\"issues\")),\n t.identifier(\"push\")\n ),\n [\n t.objectExpression([\n t.objectProperty(\n t.identifier(\"code\"),\n t.stringLiteral(\"custom\")\n ),\n t.objectProperty(t.identifier(\"input\"), t.identifier(\"from\")),\n t.objectProperty(\n t.identifier(\"message\"),\n t.memberExpression(\n t.tsAsExpression(\n expression,\n t.tsTypeReference(t.identifier(\"Error\"))\n ),\n t.identifier(\"message\")\n )\n ),\n ]),\n ]\n )\n ),\n t.returnStatement(\n t.memberExpression(t.identifier(\"z\"), t.identifier(\"NEVER\"))\n ),\n ]),\n methods: {\n encode: (schema: t.Expression, value: t.Expression) =>\n t.callExpression(\n t.memberExpression(t.identifier(\"z\"), t.identifier(\"encodeAsync\")),\n [schema, value]\n ),\n decode: (schema: t.Expression, value: t.Expression) =>\n t.callExpression(\n t.memberExpression(t.identifier(\"z\"), t.identifier(\"decodeAsync\")),\n [schema, value]\n ),\n parse: (schema: t.Expression, value: t.Expression) =>\n t.callExpression(\n t.memberExpression(t.identifier(\"z\"), t.identifier(\"parseAsync\")),\n [schema, value]\n ),\n },\n supportsImmutability: false,\n }),\n initialize: Effect.fn(function* () {\n yield* generationHelpers.ensureImport(\"z\", mini ? \"zod/mini\" : \"zod\");\n }),\n };\n};\n","import * as generationHelpers from \"./helpers.js\";\nimport type {\n ImportReference,\n OpenApiClientGenerator,\n OpenApiSchemaGenerator,\n} from \"./types.js\";\nimport { Effect } from \"effect\";\nimport * as t from \"@babel/types\";\nimport { DocumentContext } from \"../context.js\";\n\nexport interface OpenApiClientGeneratorOptions {\n schema: OpenApiSchemaGenerator;\n}\n\nexport function createReactQueryClientGenerator(\n options: OpenApiClientGeneratorOptions\n): OpenApiClientGenerator {\n const ensureApi = Effect.fn(function* () {\n const ctx = yield* DocumentContext;\n if (!ctx.schemas.has(\"Api\")) {\n const fetch = t.identifier(\"fetch\");\n const fetchPath = t.identifier(\"path\");\n fetchPath.typeAnnotation = t.tsTypeAnnotation(t.tsStringKeyword());\n const fetchOptions = t.identifier(\"options\");\n fetchOptions.typeAnnotation = t.tsTypeAnnotation(\n t.tsTypeLiteral([\n t.tsPropertySignature(\n t.identifier(\"method\"),\n t.tsTypeAnnotation(t.tsStringKeyword())\n ),\n Object.assign(\n t.tsPropertySignature(\n t.identifier(\"headers\"),\n t.tsTypeAnnotation(t.tsTypeReference(t.identifier(\"Headers\")))\n ),\n { optional: true }\n ),\n Object.assign(\n t.tsPropertySignature(\n t.identifier(\"body\"),\n t.tsTypeAnnotation(\n t.tsUnionType([\n t.tsTypeReference(t.identifier(\"string\")),\n t.tsTypeReference(t.identifier(\"Blob\")),\n t.tsTypeReference(t.identifier(\"FormData\")),\n t.tsTypeReference(t.identifier(\"URLSearchParams\")),\n ])\n )\n ),\n { optional: true }\n ),\n ])\n );\n fetch.typeAnnotation = t.tsTypeAnnotation(\n t.tsFunctionType(\n null,\n [fetchPath, fetchOptions],\n t.tsTypeAnnotation(\n t.tsTypeReference(\n t.identifier(\"Promise\"),\n t.tsTypeParameterInstantiation([\n t.tsTypeReference(t.identifier(\"Response\")),\n ])\n )\n )\n )\n );\n ctx.schemas.set(\"Api\", [\n t.exportNamedDeclaration(\n t.classDeclaration(\n t.identifier(\"Api\"),\n null,\n t.classBody([\n t.classPrivateProperty(t.privateName(fetch)),\n t.classMethod(\n \"constructor\",\n t.identifier(\"constructor\"),\n [fetch],\n t.blockStatement([\n t.expressionStatement(\n t.assignmentExpression(\n \"=\",\n t.memberExpression(\n t.thisExpression(),\n t.privateName(fetch)\n ),\n fetch\n )\n ),\n ])\n ),\n ])\n )\n ),\n ]);\n }\n return (\n (ctx.schemas.get(\"Api\")![0] as t.ExportNamedDeclaration)\n .declaration as t.ClassDeclaration\n ).body as t.ClassBody;\n });\n return {\n initialize: Effect.fn(function* () {\n yield* ensureApi();\n if (options.schema.initialize) {\n yield* options.schema.initialize();\n }\n }),\n processSchema: Effect.fn(function* (schema) {\n yield* ensureApi();\n yield* options.schema.processSchema(schema);\n }),\n processOperation: Effect.fn(\n function* (operationKey, path, method, operation) {\n const parametersSchema = yield* options.schema.ensureParametersSchema(\n operationKey,\n operation,\n path\n );\n\n const responseSchema = yield* options.schema.ensureResponseSchema(\n operationKey,\n operation\n );\n\n const parameters = t.identifier(\"parameters\");\n parameters.typeAnnotation = t.tsTypeAnnotation(\n parametersSchema.typeReference\n );\n\n const parametersWithSkipToken = t.identifier(\"parameters\");\n parametersWithSkipToken.typeAnnotation = t.tsTypeAnnotation(\n t.tsUnionType([\n parametersSchema.typeReference,\n t.tsTypeReference(\n yield* generationHelpers.ensureImport(\n \"SkipToken\",\n \"@tanstack/react-query\",\n true\n )\n ),\n ])\n );\n\n const isMutation =\n method !== \"get\" &&\n method !== \"head\" &&\n method !== \"options\" &&\n !(operation.tags as string[])?.some((i) => i.toLowerCase() === \"query\");\n\n const fetchCall = t.awaitExpression(\n t.callExpression(\n t.memberExpression(\n t.thisExpression(),\n t.privateName(t.identifier(\"fetch\"))\n ),\n [\n t.memberExpression(t.identifier(\"params\"), t.identifier(\"path\")),\n t.objectExpression([\n t.objectProperty(\n t.identifier(\"method\"),\n t.stringLiteral(method.toUpperCase())\n ),\n t.objectProperty(\n t.identifier(\"headers\"),\n t.memberExpression(\n t.identifier(\"params\"),\n t.identifier(\"headers\")\n )\n ),\n t.objectProperty(\n t.identifier(\"body\"),\n t.memberExpression(\n t.identifier(\"params\"),\n t.identifier(\"body\")\n )\n ),\n ]),\n ]\n )\n );\n\n const doMethod = t.classMethod(\n \"method\",\n t.identifier(operationKey.lower),\n [parameters],\n t.blockStatement([\n t.variableDeclaration(\"const\", [\n t.variableDeclarator(\n t.identifier(\"params\"),\n t.awaitExpression(\n yield* options.schema.encodeParameters(\n parametersSchema.expression,\n t.identifier(\"parameters\")\n )\n )\n ),\n ]),\n t.variableDeclaration(\"const\", [\n t.variableDeclarator(t.identifier(\"response\"), fetchCall),\n ]),\n t.returnStatement(\n t.awaitExpression(\n yield* options.schema.decodeResponse(\n responseSchema.expression,\n t.identifier(\"response\")\n )\n )\n ),\n ]),\n false,\n false,\n false,\n true\n );\n const queryMethod = t.classMethod(\n \"method\",\n t.identifier(\n operationKey.lower + (isMutation ? \"Mutation\" : \"Query\")\n ),\n isMutation ? [] : [parametersWithSkipToken],\n t.blockStatement([\n t.returnStatement(\n t.callExpression(\n yield* generationHelpers.ensureImport(\n isMutation ? \"mutationOptions\" : \"queryOptions\",\n \"@tanstack/react-query\"\n ),\n [\n t.objectExpression([\n ...(isMutation\n ? []\n : [\n t.objectProperty(\n t.identifier(\"queryKey\"),\n t.tsAsExpression(\n t.arrayExpression([\n t.stringLiteral(operationKey.upper),\n parametersWithSkipToken,\n ]),\n t.tsTypeReference(\n yield* generationHelpers.ensureImport(\n \"QueryKey\",\n \"@tanstack/react-query\",\n true\n )\n )\n )\n ),\n ]),\n isMutation\n ? t.objectProperty(\n t.identifier(\"mutationFn\"),\n t.arrowFunctionExpression(\n [parameters],\n t.callExpression(\n t.memberExpression(\n t.thisExpression(),\n t.identifier(operationKey.lower)\n ),\n [parameters]\n ),\n true\n )\n )\n : t.objectProperty(\n t.identifier(\"queryFn\"),\n t.conditionalExpression(\n t.binaryExpression(\n \"===\",\n parametersWithSkipToken,\n yield* generationHelpers.ensureImport(\n \"skipToken\",\n \"@tanstack/react-query\"\n )\n ),\n yield* generationHelpers.ensureImport(\n \"skipToken\",\n \"@tanstack/react-query\"\n ),\n t.arrowFunctionExpression(\n [],\n t.callExpression(\n t.memberExpression(\n t.thisExpression(),\n t.identifier(operationKey.lower)\n ),\n [parametersWithSkipToken]\n ),\n true\n )\n )\n ),\n ]),\n ]\n )\n ),\n ])\n );\n\n const commentLines = [];\n if (operation.summary) commentLines.push(`### ${operation.summary}`);\n if (operation.description)\n commentLines.push(`${operation.description}`);\n if (commentLines.length) {\n t.addComment(\n queryMethod,\n \"leading\",\n `*\\n${commentLines.join(\"\\n\")}\\n*`\n );\n t.addComment(doMethod, \"leading\", `*\\n${commentLines.join(\"\\n\")}\\n*`);\n }\n\n const api = yield* ensureApi();\n api.body.push(doMethod);\n api.body.push(queryMethod);\n }\n ),\n };\n}\n"],"mappings":"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"}
|