@sohcah/openapi-generator 0.1.1 → 0.1.2
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/cli.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import "./helpers-tkoILkcL.js";
|
|
3
|
-
import { generateToFile } from "./src-
|
|
3
|
+
import { generateToFile } from "./src-Di4R7y_C.js";
|
|
4
4
|
import { Command, Options } from "@effect/cli";
|
|
5
5
|
import { NodeContext, NodeRuntime } from "@effect/platform-node";
|
|
6
6
|
import { Effect } from "effect";
|
package/dist/generators/index.js
CHANGED
|
@@ -656,7 +656,7 @@ function createReactQueryClientGenerator(options) {
|
|
|
656
656
|
parametersWithSkipToken.typeAnnotation = import_lib.tsTypeAnnotation(import_lib.tsUnionType([parametersSchema.typeReference, import_lib.tsTypeReference(yield* ensureImport("SkipToken", "@tanstack/react-query", true))]));
|
|
657
657
|
const isMutation = method !== "get" && method !== "head" && method !== "options" && !operation.tags?.some((i) => i.toLowerCase() === "query");
|
|
658
658
|
const fetchCall = import_lib.awaitExpression(import_lib.callExpression(import_lib.memberExpression(import_lib.thisExpression(), import_lib.privateName(import_lib.identifier("fetch"))), [import_lib.memberExpression(import_lib.identifier("params"), import_lib.identifier("path")), import_lib.objectExpression([
|
|
659
|
-
import_lib.objectProperty(import_lib.identifier("method"), import_lib.stringLiteral(method)),
|
|
659
|
+
import_lib.objectProperty(import_lib.identifier("method"), import_lib.stringLiteral(method.toUpperCase())),
|
|
660
660
|
import_lib.objectProperty(import_lib.identifier("headers"), import_lib.memberExpression(import_lib.identifier("params"), import_lib.identifier("headers"))),
|
|
661
661
|
import_lib.objectProperty(import_lib.identifier("body"), import_lib.memberExpression(import_lib.identifier("params"), import_lib.identifier("body")))
|
|
662
662
|
])]));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["options: DefaultSchemaGeneratorOptions","schema: SchemaObject","decoded: t.Expression","t","expression: t.Expression","schema: SchemaObject | ReferenceObject","t","options: DefaultSchemaGeneratorOptions","schema: SchemaObject","decoded: t.Expression","properties: Record<string, SchemaObject | ReferenceObject>","path: string","pathParameters: Record<string, t.Expression>","queryParameter: t.Expression | null","quasis: t.TemplateElement[]","expressions: t.Expression[]","t","options: DefaultSchemaGeneratorOptions","schema: SchemaObject","decoded: t.Expression","t","options: DefaultSchemaGeneratorOptions","t","type: t.TSType","schema: SchemaObject | ReferenceObject","value: string","t","object: t.Expression","property: string","options: DefaultSchemaGeneratorOptions","typeMeta: ExpressionWithType[\"typeMeta\"]","value: unknown","expression: ExpressionWithType","expression: t.Expression","typeDecoded: t.TSType","typeEncoded: t.TSType","schema","expressions: ExpressionWithType[]","operationKey: generationHelpers.OperationKey","method: OperationObject","path: string","pathParameters: Record<string, t.Expression>","content: { [format: string]: MediaTypeObject } | undefined","transform: t.Expression","response: ResponseObject","schema: SchemaObject","_method: generationHelpers.HttpMethod","operation: OperationObject","schema: t.Expression","response: t.Expression","options: SchemaGeneratorOptions","t","pattern: string","key: t.Expression","value: t.Expression","decodeFn: t.Expression | undefined","encodeFn: t.Expression | undefined","schema: t.Expression","t","expression: t.Expression","extension: string","args: t.Expression[]","pattern: string","key: t.Expression","value: t.Expression","schema: t.Expression","options: OpenApiClientGeneratorOptions","t"],"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 true */\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 union: (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\ntype ExpressionWithType = {\n expression: t.Expression;\n typeDecoded: t.TSType;\n typeEncoded: t.TSType;\n typeMeta: {\n readonly?: boolean;\n optional?: 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.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,\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.enum) {\n const unsupportedEnumValue = schema.enum.find(\n (i) =>\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) => (e === null ? t.nullLiteral() : getLiteral(e)))\n ),\n ...equivalentType(\n t.tsUnionType(\n schema.enum.map((e) =>\n e === null ? t.tsNullKeyword() : t.tsLiteralType(getLiteral(e))\n )\n )\n ),\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 if (schema.format === \"binary\") {\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 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 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 )) {\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 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 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 // OpenAPI v3.0 support\n if (\"nullable\" in schema && schema.nullable) {\n modified.expression = options.modifiers.nullable(modified.expression);\n modified.typeDecoded = t.tsUnionType([\n modified.typeDecoded,\n t.tsNullKeyword(),\n ]);\n modified.typeEncoded = t.tsUnionType([\n modified.typeEncoded,\n t.tsNullKeyword(),\n ]);\n }\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 (\"$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 const expressions: ExpressionWithType[] = [];\n for (const schema of schemas) {\n expressions.push(\n yield* applyModifiers(yield* getBaseEffectSchema(schema), schema)\n );\n }\n\n if (expressions.length !== 1) {\n return {\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 return expressions[0]!;\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 } | 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 ?? true) {\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 union: (expressions) =>\n t.callExpression(\n t.memberExpression(t.identifier(\"Schema\"), t.identifier(\"Union\")),\n expressions\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(\n t.identifier(\"Effect\"),\n t.identifier(\"promise\")\n ),\n [t.arrowFunctionExpression([], decode, true)]\n )\n );\n encodeFn = t.arrowFunctionExpression(\n [t.identifier(\"from\"), t.identifier(\"ctx\")],\n t.callExpression(\n t.memberExpression(\n t.identifier(\"Effect\"),\n t.identifier(\"promise\")\n ),\n [t.arrowFunctionExpression([], encode, true)]\n )\n );\n } else {\n decodeFn = t.arrowFunctionExpression([t.identifier(\"from\"), t.identifier(\"ctx\")], decode);\n encodeFn = t.arrowFunctionExpression([t.identifier(\"from\"), t.identifier(\"ctx\")], encode);\n }\n return t.callExpression(\n t.memberExpression(t.identifier(\"Schema\"), t.identifier(decodeAsync || encodeAsync ? \"transformOrFail\" : \"transform\")),\n [\n encoded,\n decoded,\n t.objectExpression([\n t.objectProperty(t.identifier(\"strict\"), t.booleanLiteral(true)),\n t.objectProperty(\n t.identifier(\"decode\"),\n decodeFn\n ),\n t.objectProperty(\n t.identifier(\"encode\"),\n encodeFn\n ),\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\nexport const createZodSchemaGenerator = ({\n mini = false,\n ...options\n}: ZodSchemaGeneratorOptions) => {\n const z = t.identifier(\"z\");\n\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 union: (expressions) =>\n t.callExpression(t.memberExpression(z, t.identifier(\"union\")), [\n t.arrayExpression(expressions),\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: ({ encoded, decoded, decode, decodeAsync, encode, encodeAsync }) =>\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 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?.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)\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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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["options: DefaultSchemaGeneratorOptions","schema: SchemaObject","decoded: t.Expression","t","expression: t.Expression","schema: SchemaObject | ReferenceObject","t","options: DefaultSchemaGeneratorOptions","schema: SchemaObject","decoded: t.Expression","properties: Record<string, SchemaObject | ReferenceObject>","path: string","pathParameters: Record<string, t.Expression>","queryParameter: t.Expression | null","quasis: t.TemplateElement[]","expressions: t.Expression[]","t","options: DefaultSchemaGeneratorOptions","schema: SchemaObject","decoded: t.Expression","t","options: DefaultSchemaGeneratorOptions","t","type: t.TSType","schema: SchemaObject | ReferenceObject","value: string","t","object: t.Expression","property: string","options: DefaultSchemaGeneratorOptions","typeMeta: ExpressionWithType[\"typeMeta\"]","value: unknown","expression: ExpressionWithType","expression: t.Expression","typeDecoded: t.TSType","typeEncoded: t.TSType","schema","expressions: ExpressionWithType[]","operationKey: generationHelpers.OperationKey","method: OperationObject","path: string","pathParameters: Record<string, t.Expression>","content: { [format: string]: MediaTypeObject } | undefined","transform: t.Expression","response: ResponseObject","schema: SchemaObject","_method: generationHelpers.HttpMethod","operation: OperationObject","schema: t.Expression","response: t.Expression","options: SchemaGeneratorOptions","t","pattern: string","key: t.Expression","value: t.Expression","decodeFn: t.Expression | undefined","encodeFn: t.Expression | undefined","schema: t.Expression","t","expression: t.Expression","extension: string","args: t.Expression[]","pattern: string","key: t.Expression","value: t.Expression","schema: t.Expression","options: OpenApiClientGeneratorOptions","t"],"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 true */\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 union: (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\ntype ExpressionWithType = {\n expression: t.Expression;\n typeDecoded: t.TSType;\n typeEncoded: t.TSType;\n typeMeta: {\n readonly?: boolean;\n optional?: 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.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,\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.enum) {\n const unsupportedEnumValue = schema.enum.find(\n (i) =>\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) => (e === null ? t.nullLiteral() : getLiteral(e)))\n ),\n ...equivalentType(\n t.tsUnionType(\n schema.enum.map((e) =>\n e === null ? t.tsNullKeyword() : t.tsLiteralType(getLiteral(e))\n )\n )\n ),\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 if (schema.format === \"binary\") {\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 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 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 )) {\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 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 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 // OpenAPI v3.0 support\n if (\"nullable\" in schema && schema.nullable) {\n modified.expression = options.modifiers.nullable(modified.expression);\n modified.typeDecoded = t.tsUnionType([\n modified.typeDecoded,\n t.tsNullKeyword(),\n ]);\n modified.typeEncoded = t.tsUnionType([\n modified.typeEncoded,\n t.tsNullKeyword(),\n ]);\n }\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 (\"$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 const expressions: ExpressionWithType[] = [];\n for (const schema of schemas) {\n expressions.push(\n yield* applyModifiers(yield* getBaseEffectSchema(schema), schema)\n );\n }\n\n if (expressions.length !== 1) {\n return {\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 return expressions[0]!;\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 } | 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 ?? true) {\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 union: (expressions) =>\n t.callExpression(\n t.memberExpression(t.identifier(\"Schema\"), t.identifier(\"Union\")),\n expressions\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(\n t.identifier(\"Effect\"),\n t.identifier(\"promise\")\n ),\n [t.arrowFunctionExpression([], decode, true)]\n )\n );\n encodeFn = t.arrowFunctionExpression(\n [t.identifier(\"from\"), t.identifier(\"ctx\")],\n t.callExpression(\n t.memberExpression(\n t.identifier(\"Effect\"),\n t.identifier(\"promise\")\n ),\n [t.arrowFunctionExpression([], encode, true)]\n )\n );\n } else {\n decodeFn = t.arrowFunctionExpression([t.identifier(\"from\"), t.identifier(\"ctx\")], decode);\n encodeFn = t.arrowFunctionExpression([t.identifier(\"from\"), t.identifier(\"ctx\")], encode);\n }\n return t.callExpression(\n t.memberExpression(t.identifier(\"Schema\"), t.identifier(decodeAsync || encodeAsync ? \"transformOrFail\" : \"transform\")),\n [\n encoded,\n decoded,\n t.objectExpression([\n t.objectProperty(t.identifier(\"strict\"), t.booleanLiteral(true)),\n t.objectProperty(\n t.identifier(\"decode\"),\n decodeFn\n ),\n t.objectProperty(\n t.identifier(\"encode\"),\n encodeFn\n ),\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\nexport const createZodSchemaGenerator = ({\n mini = false,\n ...options\n}: ZodSchemaGeneratorOptions) => {\n const z = t.identifier(\"z\");\n\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 union: (expressions) =>\n t.callExpression(t.memberExpression(z, t.identifier(\"union\")), [\n t.arrayExpression(expressions),\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: ({ encoded, decoded, decode, decodeAsync, encode, encodeAsync }) =>\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 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?.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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"}
|
package/dist/index.js
CHANGED
|
@@ -7,7 +7,7 @@ import { FileSystem } from "@effect/platform/FileSystem";
|
|
|
7
7
|
|
|
8
8
|
//#region package.json
|
|
9
9
|
var name = "@sohcah/openapi-generator";
|
|
10
|
-
var version = "0.1.
|
|
10
|
+
var version = "0.1.2";
|
|
11
11
|
var type = "module";
|
|
12
12
|
var license = "MIT";
|
|
13
13
|
var author = "Sam Hindess <mail@sohcah.dev>";
|
|
@@ -161,4 +161,4 @@ const generateToFile = Effect.fn(function* ({ onGenerated, output, watch,...opti
|
|
|
161
161
|
|
|
162
162
|
//#endregion
|
|
163
163
|
export { generate$2 as generate, generateToFile };
|
|
164
|
-
//# sourceMappingURL=src-
|
|
164
|
+
//# sourceMappingURL=src-Di4R7y_C.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"src-
|
|
1
|
+
{"version":3,"file":"src-Di4R7y_C.js","names":["options: GeneratorOptions","t","packageJson","generate","document: APIDocument<object>","context: DocumentContextData","generate","generateEffect","babelGenerate","event: WatchEvent"],"sources":["../package.json","../src/generator.ts","../src/index.ts"],"sourcesContent":["{\n \"name\": \"@sohcah/openapi-generator\",\n \"version\": \"0.1.2\",\n \"type\": \"module\",\n \"license\": \"MIT\",\n \"author\": \"Sam Hindess <mail@sohcah.dev>\",\n \"files\": [\n \"dist\"\n ],\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"bin\": \"./dist/cli.js\",\n \"exports\": {\n \".\": {\n \"default\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\"\n },\n \"./config\": {\n \"default\": \"./dist/config.js\",\n \"types\": \"./dist/config.d.ts\"\n },\n \"./generators\": {\n \"default\": \"./dist/generators/index.js\",\n \"types\": \"./dist/generators/index.d.ts\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"engines\": {\n \"node\": \">=22.16.0\"\n },\n \"scripts\": {\n \"build\": \"tsdown\",\n \"dev\": \"tsdown --watch\",\n \"test\": \"vitest --run\",\n \"cli\": \"./dist/cli.js\",\n \"sample\": \"yarn build && yarn cli generate -c ./sample/openapi.config.ts && SCHEMA_FORMAT=effect yarn cli generate -c ./sample/openapi.config.ts && SCHEMA_FORMAT=zod-mini yarn cli generate -c ./sample/openapi.config.ts\"\n },\n \"devDependencies\": {\n \"@tanstack/react-query\": \"^5.85.3\",\n \"@types/babel__generator\": \"^7.27.0\",\n \"@types/node\": \"^24.3.0\",\n \"@types/regex-escape\": \"^3\",\n \"openapi-types\": \"^12.1.3\",\n \"tsdown\": \"^0.14.1\",\n \"typescript\": \"^5.9.2\",\n \"vitest\": \"^3.2.4\"\n },\n \"dependencies\": {\n \"@babel/generator\": \"^7.28.3\",\n \"@effect/cli\": \"^0.69.0\",\n \"@effect/cluster\": \"^0.48.0\",\n \"@effect/experimental\": \"^0.54.6\",\n \"@effect/platform\": \"^0.90.3\",\n \"@effect/platform-node\": \"^0.96.0\",\n \"@effect/printer-ansi\": \"^0.45.0\",\n \"@effect/rpc\": \"^0.69.0\",\n \"@effect/sql\": \"^0.44.1\",\n \"@effect/typeclass\": \"^0.36.0\",\n \"@readme/openapi-parser\": \"^5.0.1\",\n \"effect\": \"^3.17.7\",\n \"regex-escape\": \"^3.4.11\",\n \"zod\": \"^4.1.11\"\n },\n \"volta\": {\n \"extends\": \"../../package.json\"\n }\n}\n","import * as t from \"@babel/types\";\nimport { Effect } from \"effect\";\nimport type { APIDocument } from \"./types.js\";\nimport { DocumentContext, type DocumentContextData } from \"./context.js\";\nimport { NotImplementedError } from \"./errors.js\";\nimport type { OpenApiGenerator } from \"./generators/types.js\";\nimport * as generationHelpers from \"./generators/helpers.js\";\nimport packageJson from \"../package.json\" with { type: \"json\" };\n\nexport type GeneratorOptions = {\n generators: OpenApiGenerator[];\n};\n\nconst build = Effect.fn(function* (options: GeneratorOptions) {\n const ctx = yield* DocumentContext;\n\n for (const generator of options.generators) {\n if (!generator.initialize) continue;\n yield* generator.initialize();\n }\n\n for (const [pathKey, path] of Object.entries(ctx.document.paths ?? {})) {\n if (!path) continue;\n if (path.$ref) {\n return yield* new NotImplementedError({\n message: \"$ref in path\",\n });\n }\n for (const methodKey of generationHelpers.httpMethods) {\n const method = path[methodKey];\n if (!method) continue;\n\n const operationKey = yield* generationHelpers.getKey(\n method.operationId ??\n `${methodKey}${pathKey.replace(/\\/(.?)/g, (_, g) => g.toUpperCase())}`\n );\n\n for (const generator of options.generators) {\n if (!generator.processOperation) continue;\n yield* generator.processOperation(\n operationKey,\n pathKey,\n methodKey,\n method\n );\n }\n }\n }\n\n for (const schema of Object.values(ctx.document.components?.schemas ?? {})) {\n for (const generator of options.generators) {\n if (!generator.processSchema) continue;\n yield* generator.processSchema(schema);\n }\n }\n\n const program = t.program([\n ...ctx.imports,\n ...[...ctx.schemas.values()].flat(),\n ]);\n t.addComment(program, \"leading\", \"eslint-disable\", false);\n t.addComment(program, \"leading\", \"prettier-ignore\", false);\n t.addComment(program, \"leading\", ` Version: ${packageJson.version}`, true);\n t.addComment(\n program,\n \"leading\",\n ` Generated by @sohcah/openapi-generator`,\n true\n );\n return program;\n});\n\nexport const generate = Effect.fn(function* (\n document: APIDocument<object>,\n options: GeneratorOptions\n) {\n const context: DocumentContextData = {\n document,\n imports: [],\n schemas: new Map(),\n processingSchemas: new Set(),\n processingSchemaTypes: new Set(),\n };\n\n return yield* build(options).pipe(\n Effect.provideService(DocumentContext, context)\n );\n});\n","import fs from \"node:fs/promises\";\nimport { bundle } from \"@readme/openapi-parser\";\nimport type { OpenAPIV2, OpenAPIV3, OpenAPIV3_1 } from \"openapi-types\";\nimport { generate as babelGenerate } from \"@babel/generator\";\nimport {\n generate as generateEffect,\n type GeneratorOptions,\n} from \"./generator.js\";\nimport { Effect, Stream } from \"effect\";\nimport { FileSystem, type WatchEvent } from \"@effect/platform/FileSystem\";\n\ntype APIDocument<T extends object> =\n | OpenAPIV2.Document<T>\n | OpenAPIV3_1.Document<T>\n | OpenAPIV3.Document<T>;\n\nexport type OpenapiGenerateOptions = GeneratorOptions & {\n schema: APIDocument<object> | string;\n};\n\nexport type OpenapiGenerateToFileOptions = OpenapiGenerateOptions & {\n output: string;\n watch?: boolean;\n onGenerated?: () => void;\n};\n\nexport const generate = Effect.fn(function* ({\n schema,\n ...options\n}: OpenapiGenerateOptions) {\n const result = yield* Effect.tryPromise(() => bundle(schema));\n if (!(\"components\" in result)) {\n return yield* Effect.die(\n new Error(\"Not a valid OpenAPI 3.x document\")\n );\n }\n\n const program = yield* generateEffect(result, options);\n\n return babelGenerate(program).code;\n});\n\nexport const generateToFile = Effect.fn(function* ({\n onGenerated,\n output,\n watch,\n ...options\n}: OpenapiGenerateToFileOptions) {\n const fs = yield* FileSystem;\n let lastCode = yield* generate(options);\n yield* fs.writeFileString(output, lastCode);\n onGenerated?.();\n\n if (watch) {\n if (typeof options.schema !== \"string\") {\n throw new Error(\"Schema must a file path to use watch mode\");\n }\n yield* Stream.runForEach(\n fs.watch(options.schema),\n Effect.fn(function* (event: WatchEvent) {\n if (event._tag === \"Update\") {\n const outputCode = yield* generate(options);\n if (outputCode !== lastCode) {\n yield* fs.writeFileString(output, outputCode);\n onGenerated?.();\n lastCode = outputCode;\n }\n }\n })\n );\n }\n});\n"],"mappings":"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"}
|