{"version":3,"file":"index.mjs","names":["props"],"sources":["../src/index.ts"],"sourcesContent":["/* eslint-disable unicorn/no-array-reduce */\n\nimport {\n  camel,\n  type ClientBuilder,\n  type ClientGeneratorsBuilder,\n  type ContextSpec,\n  type GeneratorDependency,\n  type GeneratorOptions,\n  type GeneratorVerbOptions,\n  getFormDataFieldFileType,\n  getNumberWord,\n  isBoolean,\n  isNumber,\n  isObject,\n  isString,\n  jsStringEscape,\n  jsStringLiteralEscape,\n  logVerbose,\n  type OpenApiParameterObject,\n  type OpenApiReferenceObject,\n  type OpenApiRequestBodyObject,\n  type OpenApiResponseObject,\n  type OpenApiSchemaObject,\n  pascal,\n  resolveRef,\n  stringify,\n} from '@orval/core';\nimport { unique } from 'remeda';\n\nconst EFFECT_DEPENDENCIES: GeneratorDependency[] = [\n  {\n    exports: [\n      {\n        default: false,\n        name: 'Schema',\n        syntheticDefaultImport: false,\n        namespaceImport: false,\n        values: true,\n        alias: 'S',\n      },\n    ],\n    dependency: 'effect',\n  },\n];\n\nexport const getEffectDependencies = () => EFFECT_DEPENDENCIES;\n\nconst possibleSchemaTypes = new Set([\n  'integer',\n  'number',\n  'string',\n  'boolean',\n  'object',\n  'null',\n  'array',\n]);\n\nexport const predefinedEffectFormats = new Set([\n  'date',\n  'date-time',\n  'email',\n  'uri',\n  'uuid',\n]);\n\ntype ResolvedEffectType =\n  | string\n  | {\n      multiType: string[];\n    };\n\nconst resolveEffectType = (schema: OpenApiSchemaObject): ResolvedEffectType => {\n  const schemaTypeValue = schema.type as unknown;\n\n  if (Array.isArray(schemaTypeValue)) {\n    const nonNullTypes = schemaTypeValue\n      .filter((t): t is string => isString(t))\n      .filter((t) => t !== 'null' && possibleSchemaTypes.has(t))\n      .map((t) => (t === 'integer' ? 'number' : t));\n\n    if (nonNullTypes.length > 1) {\n      return { multiType: nonNullTypes };\n    }\n\n    const type = nonNullTypes[0];\n\n    if (type === 'array' && 'prefixItems' in schema) {\n      return 'tuple';\n    }\n\n    return type;\n  }\n\n  const type = isString(schemaTypeValue) ? schemaTypeValue : undefined;\n\n  if (schema.type === 'array' && 'prefixItems' in schema) {\n    return 'tuple';\n  }\n\n  switch (type) {\n    case 'integer': {\n      return 'number';\n    }\n    default: {\n      return type ?? 'unknown';\n    }\n  }\n};\n\nexport interface EffectValidationSchemaDefinition {\n  functions: [string, unknown][];\n  consts: string[];\n}\n\nconst minAndMaxTypes = new Set(['number', 'string', 'array']);\n\nconst removeReadOnlyProperties = (\n  schema: OpenApiSchemaObject,\n): OpenApiSchemaObject => {\n  if (schema.properties && isObject(schema.properties)) {\n    const filteredProperties: Record<string, OpenApiSchemaObject> = {};\n\n    for (const [key, value] of Object.entries(schema.properties)) {\n      if (isObject(value) && 'readOnly' in value && value.readOnly) {\n        continue;\n      }\n      filteredProperties[key] = value as OpenApiSchemaObject;\n    }\n\n    return {\n      ...(schema as Record<string, unknown>),\n      properties: filteredProperties,\n    };\n  }\n  if (schema.items && isObject(schema.items) && 'properties' in schema.items) {\n    return {\n      ...(schema as Record<string, unknown>),\n      items: removeReadOnlyProperties(schema.items as OpenApiSchemaObject),\n    };\n  }\n  return schema;\n};\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call */\n\nexport const generateEffectValidationSchemaDefinition = (\n  schema: OpenApiSchemaObject | undefined,\n  context: ContextSpec,\n  name: string,\n  strict: boolean,\n  rules?: {\n    required?: boolean;\n    propertyOverrides?: Record<string, EffectValidationSchemaDefinition>;\n    constNameRegistry?: Record<string, number>;\n  },\n): EffectValidationSchemaDefinition => {\n  if (!schema) return { functions: [], consts: [] };\n\n  const consts: string[] = [];\n  const constNameRegistry = rules?.constNameRegistry ?? {};\n  const constsCounter = isNumber(constNameRegistry[name])\n    ? constNameRegistry[name] + 1\n    : 0;\n\n  const constsCounterValue = constsCounter\n    ? pascal(getNumberWord(constsCounter))\n    : '';\n\n  constNameRegistry[name] = constsCounter;\n\n  const functions: [string, unknown][] = [];\n  const type = resolveEffectType(schema);\n  const required = rules?.required ?? false;\n  const hasDefault = schema.default !== undefined;\n  const nullable =\n    // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n    ('nullable' in schema && schema.nullable) ||\n    (Array.isArray(schema.type) && schema.type.includes('null'));\n  const min = schema.minimum ?? schema.minLength ?? schema.minItems;\n  const max = schema.maximum ?? schema.maxLength ?? schema.maxItems;\n\n  const exclusiveMinRaw =\n    'exclusiveMinimum' in schema ? schema.exclusiveMinimum : undefined;\n  const exclusiveMaxRaw =\n    'exclusiveMaximum' in schema ? schema.exclusiveMaximum : undefined;\n\n  const exclusiveMin =\n    isBoolean(exclusiveMinRaw) && exclusiveMinRaw ? min : exclusiveMinRaw;\n  const exclusiveMax =\n    isBoolean(exclusiveMaxRaw) && exclusiveMaxRaw ? max : exclusiveMaxRaw;\n\n  const multipleOf = schema.multipleOf;\n  const matches = schema.pattern ?? undefined;\n  const hasNonArrayEnum = !!schema.enum && type !== 'array';\n\n  let skipSwitchStatement = false;\n  if (schema.allOf || schema.oneOf || schema.anyOf) {\n    const separator = schema.allOf ? 'allOf' : schema.oneOf ? 'oneOf' : 'anyOf';\n\n    const schemas = (schema.allOf ?? schema.oneOf ?? schema.anyOf) as (\n      | OpenApiSchemaObject\n      | OpenApiReferenceObject\n    )[];\n\n    const baseSchemas = schemas.map((schema, index) =>\n      generateEffectValidationSchemaDefinition(\n        schema as OpenApiSchemaObject,\n        context,\n        `${camel(name)}${pascal(getNumberWord(index + 1))}`,\n        strict,\n        {\n          required: true,\n          constNameRegistry,\n        },\n      ),\n    );\n\n    if ((schema.allOf || schema.oneOf || schema.anyOf) && schema.properties) {\n      const additionalPropertiesSchema = {\n        properties: schema.properties,\n        required: schema.required,\n        additionalProperties: schema.additionalProperties,\n        type: schema.type,\n      } as OpenApiSchemaObject;\n\n      const additionalIndex = baseSchemas.length + 1;\n      const additionalPropertiesDefinition =\n        generateEffectValidationSchemaDefinition(\n          additionalPropertiesSchema,\n          context,\n          `${camel(name)}${pascal(getNumberWord(additionalIndex))}`,\n          strict,\n          {\n            required: true,\n            constNameRegistry,\n          },\n        );\n\n      if (schema.oneOf || schema.anyOf) {\n        functions.push([\n          'allOf',\n          [\n            { functions: [[separator, baseSchemas]], consts: [] },\n            additionalPropertiesDefinition,\n          ],\n        ]);\n      } else {\n        baseSchemas.push(additionalPropertiesDefinition);\n        functions.push([separator, baseSchemas]);\n      }\n    } else {\n      functions.push([separator, baseSchemas]);\n    }\n    skipSwitchStatement = true;\n  }\n\n  let defaultVarName: string | undefined;\n  if (schema.default !== undefined) {\n    defaultVarName = `${name}Default${constsCounterValue}`;\n    let defaultValue: string | undefined;\n\n    const isDateType =\n      schema.type === 'string' &&\n      (schema.format === 'date' || schema.format === 'date-time') &&\n      context.output.override.useDates;\n\n    if (isDateType) {\n      defaultValue = `new Date(${JSON.stringify(schema.default)})`;\n    } else if (isObject(schema.default)) {\n      const entries = Object.entries(schema.default)\n        .map(([key, value]) => {\n          const safeKey = JSON.stringify(key);\n          if (isString(value)) {\n            return `${safeKey}: ${JSON.stringify(value)} as const`;\n          }\n          if (Array.isArray(value)) {\n            const arrayItems = value.map((item) =>\n              isString(item)\n                ? `${JSON.stringify(item)} as const`\n                : JSON.stringify(item),\n            );\n            return `${safeKey}: [${arrayItems.join(', ')}]`;\n          }\n          if (\n            value === null ||\n            value === undefined ||\n            isNumber(value) ||\n            isBoolean(value)\n          )\n            return `${safeKey}: ${value}`;\n          return;\n        })\n        .filter((entry): entry is string => entry !== undefined)\n        .join(', ');\n      defaultValue = entries.length === 0 ? `{}` : `{ ${entries} }`;\n    } else {\n      const rawStringified = stringify(schema.default);\n      defaultValue =\n        rawStringified === undefined\n          ? 'null'\n          : rawStringified.replaceAll(\"'\", '`');\n\n      const isArrayWithEnumItems =\n        Array.isArray(schema.default) &&\n        type === 'array' &&\n        schema.items &&\n        'enum' in schema.items &&\n        schema.default.length > 0;\n\n      if (isArrayWithEnumItems) {\n        defaultVarName = defaultValue;\n        defaultValue = undefined;\n      }\n    }\n    if (defaultValue) {\n      consts.push(`export const ${defaultVarName} = ${defaultValue};`);\n    }\n  }\n\n  if (isObject(type) && 'multiType' in type) {\n    const types = type.multiType;\n    functions.push([\n      'oneOf',\n      types.map((t) =>\n        generateEffectValidationSchemaDefinition(\n          {\n            ...(schema as Record<string, unknown>),\n            type: t,\n          } as OpenApiSchemaObject,\n          context,\n          name,\n          strict,\n          {\n            required: true,\n            constNameRegistry,\n          },\n        ),\n      ),\n    ]);\n\n    if (!required && nullable) {\n      functions.push(['nullish', undefined]);\n    } else if (nullable) {\n      functions.push(['nullable', undefined]);\n    } else if (!required) {\n      functions.push(['optional', undefined]);\n    }\n\n    return { functions, consts };\n  }\n\n  if (!skipSwitchStatement) {\n    switch (type) {\n      case 'tuple': {\n        if ('prefixItems' in schema) {\n          const schema31 = schema as OpenApiSchemaObject;\n          const prefixItems = Array.isArray(schema31.prefixItems)\n            ? (schema31.prefixItems as (\n                | OpenApiSchemaObject\n                | OpenApiReferenceObject\n              )[])\n            : [];\n\n          if (prefixItems.length > 0) {\n            functions.push([\n              'tuple',\n              prefixItems.map((item, idx) =>\n                generateEffectValidationSchemaDefinition(\n                  dereference(item, context),\n                  context,\n                  camel(`${name}-${idx}-item`),\n                  strict,\n                  {\n                    required: true,\n                    constNameRegistry,\n                  },\n                ),\n              ),\n            ]);\n          }\n        }\n        break;\n      }\n      case 'array': {\n        functions.push([\n          'array',\n          generateEffectValidationSchemaDefinition(\n            schema.items as OpenApiSchemaObject | undefined,\n            context,\n            camel(`${name}-item`),\n            strict,\n            {\n              required: true,\n              constNameRegistry,\n            },\n          ),\n        ]);\n        break;\n      }\n      case 'string': {\n        if (schema.enum) {\n          break;\n        }\n\n        if (\n          context.output.override.useDates &&\n          (schema.format === 'date' || schema.format === 'date-time')\n        ) {\n          functions.push(['date', undefined]);\n          break;\n        }\n\n        if (schema.format === 'binary') {\n          functions.push(['instanceof', 'File']);\n          break;\n        }\n\n        if (\n          schema.contentMediaType === 'application/octet-stream' &&\n          !schema.contentEncoding\n        ) {\n          functions.push(['instanceof', 'File']);\n          break;\n        }\n\n        if ('const' in schema) {\n          functions.push(['literal', JSON.stringify(String(schema.const))]);\n        } else {\n          functions.push([type as string, undefined]);\n        }\n\n        if (schema.format === 'date') {\n          functions.push(['dateFormat', undefined]);\n          break;\n        }\n\n        if (schema.format === 'date-time') {\n          functions.push(['dateTimeFormat', undefined]);\n          break;\n        }\n\n        if (schema.format === 'email') {\n          functions.push(['email', undefined]);\n          break;\n        }\n\n        if (schema.format === 'uri') {\n          functions.push(['url', undefined]);\n          break;\n        }\n\n        if (schema.format === 'uuid') {\n          functions.push(['uuid', undefined]);\n          break;\n        }\n\n        break;\n      }\n      default: {\n        const hasProperties = !!schema.properties;\n        const properties = schema.properties ?? {};\n        const hasDefinedProperties = Object.keys(properties).length > 0;\n        const hasAdditionalPropertiesSchema =\n          !!schema.additionalProperties &&\n          !isBoolean(schema.additionalProperties);\n\n        const shouldUseLooseObject =\n          type === 'object' &&\n          !hasDefinedProperties &&\n          schema.additionalProperties === undefined &&\n          !hasAdditionalPropertiesSchema;\n\n        if (hasProperties && hasDefinedProperties) {\n          functions.push([\n            strict ? 'strictObject' : 'object',\n            Object.keys(properties)\n              .map((key) => ({\n                [key]:\n                  rules?.propertyOverrides?.[key] ??\n                  generateEffectValidationSchemaDefinition(\n                    properties[key] as OpenApiSchemaObject | undefined,\n                    context,\n                    camel(`${name}-${key}`),\n                    strict,\n                    {\n                      required: schema.required?.includes(key),\n                      constNameRegistry,\n                    },\n                  ),\n              }))\n              .reduce((acc, curr) => ({ ...acc, ...curr }), {}),\n          ]);\n\n          break;\n        }\n\n        if (shouldUseLooseObject) {\n          functions.push(['looseObject', {}]);\n          break;\n        }\n\n        if (schema.additionalProperties) {\n          functions.push([\n            'additionalProperties',\n            generateEffectValidationSchemaDefinition(\n              isBoolean(schema.additionalProperties)\n                ? {}\n                : (schema.additionalProperties as OpenApiSchemaObject),\n              context,\n              name,\n              strict,\n              {\n                required: true,\n                constNameRegistry,\n              },\n            ),\n          ]);\n\n          break;\n        }\n\n        if (schema.enum) {\n          break;\n        }\n\n        functions.push([type, undefined]);\n\n        break;\n      }\n    }\n  }\n\n  if (!hasNonArrayEnum && isString(type) && minAndMaxTypes.has(type)) {\n    const shouldUseExclusiveMin = exclusiveMinRaw !== undefined;\n    const shouldUseExclusiveMax = exclusiveMaxRaw !== undefined;\n\n    if (shouldUseExclusiveMin && exclusiveMin !== undefined) {\n      consts.push(\n        `export const ${name}ExclusiveMin${constsCounterValue} = ${exclusiveMin};`,\n      );\n      functions.push(['gt', `${name}ExclusiveMin${constsCounterValue}`]);\n    } else if (min !== undefined) {\n      if (min === 1) {\n        functions.push(['min', `${min}`]);\n      } else {\n        consts.push(`export const ${name}Min${constsCounterValue} = ${min};`);\n        functions.push(['min', `${name}Min${constsCounterValue}`]);\n      }\n    }\n\n    if (shouldUseExclusiveMax && exclusiveMax !== undefined) {\n      consts.push(\n        `export const ${name}ExclusiveMax${constsCounterValue} = ${exclusiveMax};`,\n      );\n      functions.push(['lt', `${name}ExclusiveMax${constsCounterValue}`]);\n    } else if (max !== undefined) {\n      consts.push(`export const ${name}Max${constsCounterValue} = ${max};`);\n      functions.push(['max', `${name}Max${constsCounterValue}`]);\n    }\n\n    if (multipleOf !== undefined) {\n      consts.push(\n        `export const ${name}MultipleOf${constsCounterValue} = ${multipleOf.toString()};`,\n      );\n      functions.push(['multipleOf', `${name}MultipleOf${constsCounterValue}`]);\n    }\n    if (\n      exclusiveMin !== undefined ||\n      min !== undefined ||\n      exclusiveMax !== undefined ||\n      multipleOf !== undefined ||\n      max !== undefined\n    ) {\n      consts.push(`\\n`);\n    }\n  }\n\n  if (matches && !hasNonArrayEnum && type === 'string') {\n    const isStartWithSlash = matches.startsWith('/');\n    const isEndWithSlash = matches.endsWith('/');\n\n    const regexp = `new RegExp('${jsStringLiteralEscape(\n      matches.slice(isStartWithSlash ? 1 : 0, isEndWithSlash ? -1 : undefined),\n    )}')`;\n\n    consts.push(\n      `export const ${name}RegExp${constsCounterValue} = ${regexp};\\n`,\n    );\n    functions.push(['regex', `${name}RegExp${constsCounterValue}`]);\n  }\n\n  if (schema.enum && type !== 'array') {\n    const uniqueEnumValues = unique(schema.enum);\n\n    if (uniqueEnumValues.every((value) => isString(value))) {\n      functions.push([\n        'enum',\n        `[${uniqueEnumValues.map((value) => `'${jsStringLiteralEscape(value)}'`).join(', ')}]`,\n      ]);\n    } else {\n      functions.push([\n        'oneOf',\n        uniqueEnumValues.map((value) => ({\n          functions: [\n            [\n              'literal',\n              isString(value) ? `'${jsStringLiteralEscape(value)}'` : value,\n            ],\n          ],\n          consts: [],\n        })),\n      ]);\n    }\n  }\n\n  if (!required && nullable) {\n    functions.push(['nullish', undefined]);\n  } else if (nullable) {\n    functions.push(['nullable', undefined]);\n  } else if (!required && !hasDefault) {\n    functions.push(['optional', undefined]);\n  }\n\n  if (hasDefault) {\n    functions.push(['default', defaultVarName]);\n  }\n\n  if (schema.description) {\n    functions.push(['describe', `'${jsStringEscape(schema.description)}'`]);\n  }\n\n  return { functions, consts: unique(consts) };\n};\n\n/**\n * Categorize a function name so the parser can decide how to render it\n * (constructor base, pipe filter, or schema wrapper).\n */\nconst CONSTRUCTORS = new Set([\n  'string',\n  'number',\n  'integer',\n  'boolean',\n  'null',\n  'unknown',\n  'any',\n  'array',\n  'tuple',\n  'object',\n  'strictObject',\n  'looseObject',\n  'additionalProperties',\n  'literal',\n  'enum',\n  'oneOf',\n  'anyOf',\n  'allOf',\n  'instanceof',\n  'fileOrString',\n  'date',\n]);\n\nconst FILTERS = new Set([\n  'min',\n  'max',\n  'gt',\n  'lt',\n  'multipleOf',\n  'regex',\n  'email',\n  'uuid',\n  'url',\n  'dateFormat',\n  'dateTimeFormat',\n]);\n\n/**\n * Renders a single filter for a `.pipe(...)` group, choosing the right\n * Effect Schema function based on the base type (string/number/array).\n */\nconst renderFilter = (\n  fn: string,\n  arg: string,\n  baseType: 'string' | 'number' | 'array' | 'unknown',\n): string => {\n  switch (fn) {\n    case 'min': {\n      if (baseType === 'string') return `S.minLength(${arg})`;\n      if (baseType === 'array') return `S.minItems(${arg})`;\n      return `S.greaterThanOrEqualTo(${arg})`;\n    }\n    case 'max': {\n      if (baseType === 'string') return `S.maxLength(${arg})`;\n      if (baseType === 'array') return `S.maxItems(${arg})`;\n      return `S.lessThanOrEqualTo(${arg})`;\n    }\n    case 'gt': {\n      return `S.greaterThan(${arg})`;\n    }\n    case 'lt': {\n      return `S.lessThan(${arg})`;\n    }\n    case 'multipleOf': {\n      return `S.multipleOf(${arg})`;\n    }\n    case 'regex': {\n      return `S.pattern(${arg})`;\n    }\n    case 'email': {\n      return String.raw`S.pattern(/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/)`;\n    }\n    case 'uuid': {\n      return `S.pattern(/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/)`;\n    }\n    case 'url': {\n      return String.raw`S.pattern(/^https?:\\/\\/.+/)`;\n    }\n    case 'dateFormat': {\n      return String.raw`S.pattern(/^\\d{4}-\\d{2}-\\d{2}$/)`;\n    }\n    case 'dateTimeFormat': {\n      return String.raw`S.pattern(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(Z|[+-]\\d{2}:?\\d{2})?$/)`;\n    }\n    default: {\n      return '';\n    }\n  }\n};\n\nconst determineBaseType = (\n  functions: [string, unknown][],\n): 'string' | 'number' | 'array' | 'unknown' => {\n  for (const [fn] of functions) {\n    if (fn === 'string') return 'string';\n    if (fn === 'number' || fn === 'integer') return 'number';\n    if (fn === 'array') return 'array';\n  }\n  return 'unknown';\n};\n\nexport interface ParseEffectOptions {\n  /**\n   * When emitting inside a Struct property, wrap optionals/defaults with\n   * `S.optional` / `S.optionalWith` so they describe an optional field\n   * rather than `T | undefined`.\n   */\n  asStructProperty?: boolean;\n  brandName?: string;\n}\n\n/**\n * Parse the intermediate definition into Effect Schema source code.\n */\nexport const parseEffectValidationSchemaDefinition = (\n  input: EffectValidationSchemaDefinition,\n  context: ContextSpec,\n  strict: boolean,\n  brandName?: string,\n  exactOptional = false,\n): { effect: string; consts: string } => {\n  if (input.functions.length === 0) {\n    return { effect: '', consts: '' };\n  }\n\n  let consts = '';\n\n  const appendConstsChunk = (chunk: string) => {\n    if (!chunk) return;\n    if (\n      consts.length > 0 &&\n      !consts.endsWith('\\n') &&\n      !chunk.startsWith('\\n')\n    ) {\n      consts += '\\n';\n    }\n    consts += chunk;\n  };\n\n  const renderSchema = (\n    definition: EffectValidationSchemaDefinition,\n    isStructProperty: boolean,\n  ): string => {\n    const { functions } = definition;\n    if (functions.length === 0) return 'S.Unknown';\n\n    appendConstsChunk(definition.consts.join('\\n'));\n\n    const baseType = determineBaseType(functions);\n    let base = '';\n    const filters: string[] = [];\n    const wrappers: [\n      'nullable' | 'nullish' | 'optional' | 'default' | 'describe',\n      unknown,\n    ][] = [];\n\n    for (const [fn, arg] of functions) {\n      if (CONSTRUCTORS.has(fn) && !base) {\n        base = renderConstructor(fn, arg);\n        continue;\n      }\n      if (FILTERS.has(fn)) {\n        filters.push(renderFilter(fn, formatArg(arg), baseType));\n        continue;\n      }\n      if (\n        fn === 'nullable' ||\n        fn === 'nullish' ||\n        fn === 'optional' ||\n        fn === 'default' ||\n        fn === 'describe'\n      ) {\n        wrappers.push([fn, arg]);\n        continue;\n      }\n      // Unknown function — emit as a comment-free no-op (skip).\n    }\n\n    if (!base) base = 'S.Unknown';\n\n    let out = filters.length > 0 ? `${base}.pipe(${filters.join(', ')})` : base;\n\n    let hasDefault = false;\n    let defaultValue: unknown;\n    let isOptional = false;\n    let isNullable = false;\n    let isNullish = false;\n    let description: unknown;\n\n    for (const [fn, arg] of wrappers) {\n      switch (fn) {\n        case 'default': {\n          hasDefault = true;\n          defaultValue = arg;\n\n          break;\n        }\n        case 'optional': {\n          isOptional = true;\n\n          break;\n        }\n        case 'nullable': {\n          isNullable = true;\n\n          break;\n        }\n        case 'nullish': {\n          isNullish = true;\n\n          break;\n        }\n        case 'describe': {\n          description = arg;\n\n          break;\n        }\n        // No default\n      }\n    }\n\n    if (isNullable || isNullish) {\n      out = `S.NullOr(${out})`;\n    }\n\n    if (isStructProperty) {\n      if (hasDefault) {\n        out = `S.optionalWith(${out}, { default: () => ${defaultValue as string} })`;\n      } else if (isOptional || isNullish) {\n        // `{ exact: true }` narrows a plain optional property to `{ x?: T }` for\n        // `exactOptionalPropertyTypes` consumers instead of `{ x?: T | undefined }`.\n        // Only `.optional()` is narrowed (matching the zod generator): a nullish\n        // field intentionally admits `undefined`, which is legal under the flag, so\n        // it keeps `S.optional`.\n        out =\n          exactOptional && isOptional\n            ? `S.optionalWith(${out}, { exact: true })`\n            : `S.optional(${out})`;\n      }\n    } else {\n      if (isNullish) {\n        out = `S.UndefinedOr(${out})`;\n      } else if (isOptional) {\n        out = `S.UndefinedOr(${out})`;\n      }\n    }\n\n    if (description !== undefined) {\n      out = `${out}.annotations({ description: ${description as string} })`;\n    }\n\n    return out;\n  };\n\n  const formatArg = (value: unknown): string => {\n    if (value === undefined) return '';\n    if (value === null) return 'null';\n    if (isString(value)) return value;\n    if (Array.isArray(value)) {\n      return value.map((item) => formatArg(item)).join(', ');\n    }\n    if (isObject(value)) return stringify(value) ?? '';\n    if (isNumber(value) || isBoolean(value)) return `${value}`;\n    return '';\n  };\n\n  const renderConstructor = (fn: string, arg: unknown): string => {\n    switch (fn) {\n      case 'string': {\n        return 'S.String';\n      }\n      case 'number':\n      case 'integer': {\n        return 'S.Number';\n      }\n      case 'boolean': {\n        return 'S.Boolean';\n      }\n      case 'null': {\n        return 'S.Null';\n      }\n      case 'unknown': {\n        return 'S.Unknown';\n      }\n      case 'any': {\n        return 'S.Any';\n      }\n      case 'date': {\n        return 'S.DateFromString';\n      }\n      case 'literal': {\n        return `S.Literal(${arg as string})`;\n      }\n      case 'enum': {\n        // arg is \"[ 'a', 'b' ]\" — strip brackets to spread as Literal args\n        return `S.Literal(${(arg as string).replaceAll(/^\\[|\\]$/g, '')})`;\n      }\n      case 'instanceof': {\n        return `S.instanceOf(${arg as string})`;\n      }\n      case 'fileOrString': {\n        return 'S.Union(S.instanceOf(File), S.String)';\n      }\n      case 'array': {\n        const inner = renderSchema(\n          arg as EffectValidationSchemaDefinition,\n          false,\n        );\n        return `S.Array(${inner})`;\n      }\n      case 'tuple': {\n        const items = (arg as EffectValidationSchemaDefinition[])\n          .map((d) => renderSchema(d, false))\n          .join(', ');\n        return `S.Tuple(${items})`;\n      }\n      case 'object':\n      case 'strictObject':\n      case 'looseObject': {\n        const props = arg as Record<string, EffectValidationSchemaDefinition>;\n        const entries = Object.entries(props).map(([key, def]) => {\n          const value = renderSchema(def, true);\n          return `  ${JSON.stringify(key)}: ${value}`;\n        });\n        const struct = `S.Struct({\\n${entries.join(',\\n')}\\n})`;\n        if (fn === 'looseObject') {\n          return `S.extend(${struct}, S.Record({ key: S.String, value: S.Unknown }))`;\n        }\n        return struct;\n      }\n      case 'additionalProperties': {\n        const inner = renderSchema(\n          arg as EffectValidationSchemaDefinition,\n          false,\n        );\n        return `S.Record({ key: S.String, value: ${inner} })`;\n      }\n      case 'oneOf':\n      case 'anyOf': {\n        const args = arg as EffectValidationSchemaDefinition[];\n        if (args.length === 1) {\n          return renderSchema(args[0], false);\n        }\n        const items = args.map((d) => renderSchema(d, false)).join(', ');\n        return `S.Union(${items})`;\n      }\n      case 'allOf': {\n        const args = arg as EffectValidationSchemaDefinition[];\n        if (args.length === 1) {\n          return renderSchema(args[0], false);\n        }\n        // S.extend takes pairs; chain via reduce.\n        return args\n          .map((d) => renderSchema(d, false))\n          .reduce((acc, cur) => `S.extend(${acc}, ${cur})`);\n      }\n      default: {\n        return 'S.Unknown';\n      }\n    }\n  };\n\n  appendConstsChunk(input.consts.join('\\n'));\n\n  let effect = renderSchema(input, false);\n\n  if (brandName) {\n    effect = `${effect}.pipe(S.brand(\"${brandName}\"))`;\n  }\n\n  if (consts.includes(',export')) {\n    consts = consts.replaceAll(',export', '\\nexport');\n  }\n\n  // Silence the unused-strict warning — strict is consumed inside the tree\n  // generator and threaded through here for future use.\n  void strict;\n  void context;\n\n  return { effect, consts };\n};\n\nconst dereferenceScalar = (value: unknown, context: ContextSpec): unknown => {\n  if (isObject(value)) {\n    return dereference(\n      value as OpenApiSchemaObject | OpenApiReferenceObject,\n      context,\n    );\n  } else if (Array.isArray(value)) {\n    return value.map((item) => dereferenceScalar(item, context));\n  } else {\n    return value;\n  }\n};\n\nfunction tryResolveRefSchema(\n  $ref: string,\n  context: ContextSpec,\n): OpenApiSchemaObject | undefined {\n  try {\n    return resolveRef({ $ref } as OpenApiReferenceObject, context)\n      .schema as OpenApiSchemaObject;\n  } catch (error) {\n    logVerbose(\n      `[orval/effect] Failed to resolve $ref \"${$ref}\":`,\n      error instanceof Error ? error.message : error,\n    );\n    return;\n  }\n}\n\nexport const dereference = (\n  schema: OpenApiSchemaObject | OpenApiReferenceObject,\n  context: ContextSpec,\n): OpenApiSchemaObject => {\n  const refName = '$ref' in schema ? schema.$ref : undefined;\n  if (refName && context.parents?.includes(refName)) {\n    return {};\n  }\n\n  const childContext: ContextSpec = {\n    ...context,\n    ...(refName\n      ? { parents: [...(context.parents ?? []), refName] }\n      : undefined),\n  };\n\n  const resolvedSchema: OpenApiSchemaObject | undefined =\n    '$ref' in schema\n      ? (() => {\n          const referencedSchema = tryResolveRefSchema(schema.$ref, context);\n          if (!referencedSchema || !isObject(referencedSchema)) {\n            return;\n          }\n          const siblingProperties = Object.fromEntries(\n            Object.entries(schema as Record<string, unknown>).filter(\n              ([key]) => key !== '$ref',\n            ),\n          );\n          return {\n            ...(referencedSchema as Record<string, unknown>),\n            ...siblingProperties,\n          } as OpenApiSchemaObject;\n        })()\n      : schema;\n\n  if (!resolvedSchema) {\n    return {};\n  }\n\n  const resolvedContext = childContext;\n\n  return Object.entries(resolvedSchema).reduce<Record<string, unknown>>(\n    (acc, [key, value]) => {\n      if (key === 'properties' && isObject(value)) {\n        acc[key] = Object.entries(value).reduce<\n          Record<string, OpenApiSchemaObject>\n        >((props, [propKey, propSchema]) => {\n          props[propKey] = dereference(\n            propSchema as OpenApiSchemaObject | OpenApiReferenceObject,\n            resolvedContext,\n          );\n          return props;\n        }, {});\n      } else if (key === 'default' || key === 'example' || key === 'examples') {\n        acc[key] = value;\n      } else {\n        acc[key] = dereferenceScalar(value, resolvedContext);\n      }\n      return acc;\n    },\n    {},\n  ) as OpenApiSchemaObject;\n};\n\nexport const generateFormDataEffectSchema = (\n  schema: OpenApiSchemaObject,\n  context: ContextSpec,\n  name: string,\n  strict: boolean,\n  encoding?: Record<string, { contentType?: string }>,\n): EffectValidationSchemaDefinition => {\n  const propertyOverrides: Record<string, EffectValidationSchemaDefinition> =\n    {};\n\n  if (schema.properties) {\n    for (const key of Object.keys(schema.properties)) {\n      const propSchema = schema.properties[key];\n      const resolvedPropSchema = propSchema\n        ? dereference(\n            propSchema as OpenApiSchemaObject | OpenApiReferenceObject,\n            context,\n          )\n        : undefined;\n\n      const fileType = resolvedPropSchema\n        ? getFormDataFieldFileType(\n            resolvedPropSchema,\n            encoding?.[key]?.contentType,\n          )\n        : undefined;\n\n      if (fileType) {\n        const isRequired = schema.required?.includes(key);\n        const fileFunctions: [string, unknown][] = [\n          fileType === 'binary'\n            ? ['instanceof', 'File']\n            : ['fileOrString', undefined],\n        ];\n        if (!isRequired) {\n          fileFunctions.push(['optional', undefined]);\n        }\n        propertyOverrides[key] = { functions: fileFunctions, consts: [] };\n      }\n    }\n  }\n\n  return generateEffectValidationSchemaDefinition(\n    schema,\n    context,\n    name,\n    strict,\n    {\n      required: true,\n      propertyOverrides:\n        Object.keys(propertyOverrides).length > 0\n          ? propertyOverrides\n          : undefined,\n    },\n  );\n};\n\nconst parseBodyAndResponse = ({\n  data,\n  context,\n  name,\n  strict,\n  generate,\n  parseType,\n}: {\n  data:\n    | OpenApiResponseObject\n    | OpenApiRequestBodyObject\n    | OpenApiReferenceObject\n    | undefined;\n  context: ContextSpec;\n  name: string;\n  strict: boolean;\n  generate: boolean;\n  parseType: 'body' | 'response';\n}): {\n  input: EffectValidationSchemaDefinition;\n  isArray: boolean;\n  rules?: { min?: number; max?: number };\n} => {\n  if (!data || !generate) {\n    return { input: { functions: [], consts: [] }, isArray: false };\n  }\n\n  const resolvedRef = resolveRef(data, context).schema as\n    | OpenApiResponseObject\n    | OpenApiRequestBodyObject;\n\n  const jsonMedia = resolvedRef.content?.['application/json'];\n  const formDataMedia = resolvedRef.content?.['multipart/form-data'];\n  const [contentType, mediaType] = jsonMedia\n    ? (['application/json', jsonMedia] as const)\n    : formDataMedia\n      ? (['multipart/form-data', formDataMedia] as const)\n      : [undefined, undefined];\n\n  const schema = mediaType?.schema;\n  if (!schema) {\n    return { input: { functions: [], consts: [] }, isArray: false };\n  }\n\n  const encoding = mediaType.encoding;\n  const resolvedJsonSchema = dereference(schema, context);\n\n  if (resolvedJsonSchema.items) {\n    const min =\n      resolvedJsonSchema.minimum ??\n      resolvedJsonSchema.minLength ??\n      resolvedJsonSchema.minItems;\n    const max =\n      resolvedJsonSchema.maximum ??\n      resolvedJsonSchema.maxLength ??\n      resolvedJsonSchema.maxItems;\n\n    return {\n      input: generateEffectValidationSchemaDefinition(\n        parseType === 'body'\n          ? removeReadOnlyProperties(\n              resolvedJsonSchema.items as OpenApiSchemaObject,\n            )\n          : (resolvedJsonSchema.items as OpenApiSchemaObject),\n        context,\n        name,\n        strict,\n        { required: true },\n      ),\n      isArray: true,\n      rules: {\n        ...(min === undefined ? {} : { min }),\n        ...(max === undefined ? {} : { max }),\n      },\n    };\n  }\n\n  const effectiveSchema =\n    parseType === 'body'\n      ? removeReadOnlyProperties(resolvedJsonSchema)\n      : resolvedJsonSchema;\n\n  const isFormData = contentType === 'multipart/form-data';\n\n  return {\n    input: isFormData\n      ? generateFormDataEffectSchema(\n          effectiveSchema,\n          context,\n          name,\n          strict,\n          encoding,\n        )\n      : generateEffectValidationSchemaDefinition(\n          effectiveSchema,\n          context,\n          name,\n          strict,\n          { required: true },\n        ),\n    isArray: false,\n  };\n};\n\nconst getSingleResponse = (\n  responses:\n    | Record<string, OpenApiResponseObject | OpenApiReferenceObject | undefined>\n    | undefined,\n) => {\n  if (!responses) return;\n  return responses['200'] ?? responses['2XX'] ?? responses['2xx'];\n};\n\n/* eslint-enable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call */\n\nexport const parseParameters = ({\n  data,\n  context,\n  operationName,\n  strict,\n  generate,\n}: {\n  data: (OpenApiParameterObject | OpenApiReferenceObject)[] | undefined;\n  context: ContextSpec;\n  operationName: string;\n  strict: {\n    param: boolean;\n    query: boolean;\n    header: boolean;\n    body: boolean;\n    response: boolean;\n  };\n  generate: {\n    param: boolean;\n    query: boolean;\n    header: boolean;\n    body: boolean;\n    response: boolean;\n  };\n}): {\n  headers: EffectValidationSchemaDefinition;\n  queryParams: EffectValidationSchemaDefinition;\n  params: EffectValidationSchemaDefinition;\n} => {\n  if (!data) {\n    return {\n      headers: { functions: [], consts: [] },\n      queryParams: { functions: [], consts: [] },\n      params: { functions: [], consts: [] },\n    };\n  }\n\n  const initialDefinitionsByParameters: Record<\n    'headers' | 'queryParams' | 'params',\n    Record<string, EffectValidationSchemaDefinition>\n  > = { headers: {}, queryParams: {}, params: {} };\n\n  const defs = data.reduce((acc, val) => {\n    const { schema: parameter }: { schema: OpenApiParameterObject } =\n      resolveRef(val, context);\n\n    if (!parameter.schema) return acc;\n    if (!parameter.in || !parameter.name) return acc;\n\n    const resolvedSchema = dereference(parameter.schema, context);\n    resolvedSchema.description = parameter.description;\n\n    const mapStrict = {\n      path: strict.param,\n      query: strict.query,\n      header: strict.header,\n    };\n    const mapGenerate = {\n      path: generate.param,\n      query: generate.query,\n      header: generate.header,\n    };\n\n    if (\n      parameter.in !== 'path' &&\n      parameter.in !== 'query' &&\n      parameter.in !== 'header'\n    ) {\n      return acc;\n    }\n\n    const definition = generateEffectValidationSchemaDefinition(\n      resolvedSchema,\n      context,\n      camel(`${operationName}-${parameter.in}-${parameter.name}`),\n      mapStrict[parameter.in],\n      { required: parameter.required },\n    );\n\n    if (parameter.in === 'header' && mapGenerate.header) {\n      return {\n        ...acc,\n        headers: { ...acc.headers, [parameter.name]: definition },\n      };\n    }\n    if (parameter.in === 'query' && mapGenerate.query) {\n      return {\n        ...acc,\n        queryParams: { ...acc.queryParams, [parameter.name]: definition },\n      };\n    }\n    if (parameter.in === 'path' && mapGenerate.path) {\n      return {\n        ...acc,\n        params: { ...acc.params, [parameter.name]: definition },\n      };\n    }\n    return acc;\n  }, initialDefinitionsByParameters);\n\n  const toStruct = (\n    props: Record<string, EffectValidationSchemaDefinition>,\n    isStrict: boolean,\n  ): EffectValidationSchemaDefinition => {\n    if (Object.keys(props).length === 0) {\n      return { functions: [], consts: [] };\n    }\n    return {\n      functions: [[isStrict ? 'strictObject' : 'object', props]],\n      consts: [],\n    };\n  };\n\n  return {\n    headers: toStruct(defs.headers, strict.header),\n    queryParams: toStruct(defs.queryParams, strict.query),\n    params: toStruct(defs.params, strict.param),\n  };\n};\n\nconst generateEffectRoute = (\n  { typeName, verb, override }: GeneratorVerbOptions,\n  { pathRoute, context }: GeneratorOptions,\n) => {\n  const spec = context.spec.paths?.[pathRoute];\n\n  if (spec == undefined) {\n    throw new Error(`No such path ${pathRoute} in ${context.projectName}`);\n  }\n\n  const parameters = [\n    ...(spec.parameters ?? []),\n    ...(spec[verb]?.parameters ?? []),\n  ];\n  const effectOptions = override.effect;\n\n  const parsedParameters = parseParameters({\n    data: parameters,\n    context,\n    operationName: typeName,\n    strict: effectOptions.strict,\n    generate: effectOptions.generate,\n  });\n\n  const requestBody = spec[verb]?.requestBody;\n  const parsedBody = parseBodyAndResponse({\n    data: requestBody,\n    context,\n    name: camel(`${typeName}-body`),\n    strict: effectOptions.strict.body,\n    generate: effectOptions.generate.body,\n    parseType: 'body',\n  });\n\n  const responses = (\n    effectOptions.generateEachHttpStatus\n      ? Object.entries(spec[verb]?.responses ?? {})\n      : [['', getSingleResponse(spec[verb]?.responses)]]\n  ) as [string, OpenApiResponseObject | OpenApiReferenceObject][];\n  const parsedResponses = responses.map(([code, response]) =>\n    parseBodyAndResponse({\n      data: response,\n      context,\n      name: camel(`${typeName}-${code}-response`),\n      strict: effectOptions.strict.response,\n      generate: effectOptions.generate.response,\n      parseType: 'response',\n    }),\n  );\n\n  const pascalTypeName = pascal(typeName);\n  const useBrandedTypes = effectOptions.useBrandedTypes;\n  const brand = (name: string) => (useBrandedTypes ? name : undefined);\n\n  const inputParams = parseEffectValidationSchemaDefinition(\n    parsedParameters.params,\n    context,\n    effectOptions.strict.param,\n    brand(`${pascalTypeName}Params`),\n    effectOptions.exactOptional,\n  );\n  const inputQueryParams = parseEffectValidationSchemaDefinition(\n    parsedParameters.queryParams,\n    context,\n    effectOptions.strict.query,\n    brand(`${pascalTypeName}QueryParams`),\n    effectOptions.exactOptional,\n  );\n  const inputHeaders = parseEffectValidationSchemaDefinition(\n    parsedParameters.headers,\n    context,\n    effectOptions.strict.header,\n    brand(`${pascalTypeName}Header`),\n    effectOptions.exactOptional,\n  );\n  const inputBody = parseEffectValidationSchemaDefinition(\n    parsedBody.input,\n    context,\n    effectOptions.strict.body,\n    brand(`${pascalTypeName}Body`),\n    effectOptions.exactOptional,\n  );\n  const inputResponses = parsedResponses.map((parsedResponse, idx) =>\n    parseEffectValidationSchemaDefinition(\n      parsedResponse.input,\n      context,\n      effectOptions.strict.response,\n      brand(pascal(`${typeName}-${responses[idx][0]}-response`)),\n      effectOptions.exactOptional,\n    ),\n  );\n\n  if (\n    !inputParams.effect &&\n    !inputQueryParams.effect &&\n    !inputHeaders.effect &&\n    !inputBody.effect &&\n    !inputResponses.some((r) => r.effect)\n  ) {\n    return { implementation: '', mutators: [] };\n  }\n\n  return {\n    implementation: [\n      ...(inputParams.consts ? [inputParams.consts] : []),\n      ...(inputParams.effect\n        ? [`export const ${pascalTypeName}Params = ${inputParams.effect}`]\n        : []),\n      ...(inputQueryParams.consts ? [inputQueryParams.consts] : []),\n      ...(inputQueryParams.effect\n        ? [\n            `export const ${pascalTypeName}QueryParams = ${inputQueryParams.effect}`,\n          ]\n        : []),\n      ...(inputHeaders.consts ? [inputHeaders.consts] : []),\n      ...(inputHeaders.effect\n        ? [`export const ${pascalTypeName}Header = ${inputHeaders.effect}`]\n        : []),\n      ...(inputBody.consts ? [inputBody.consts] : []),\n      ...(inputBody.effect\n        ? [\n            parsedBody.isArray\n              ? `export const ${pascalTypeName}BodyItem = ${inputBody.effect}\nexport const ${pascalTypeName}Body = S.Array(${pascalTypeName}BodyItem)${\n                  parsedBody.rules?.min\n                    ? `.pipe(S.minItems(${parsedBody.rules.min}))`\n                    : ''\n                }${\n                  parsedBody.rules?.max\n                    ? `.pipe(S.maxItems(${parsedBody.rules.max}))`\n                    : ''\n                }`\n              : `export const ${pascalTypeName}Body = ${inputBody.effect}`,\n          ]\n        : []),\n      ...inputResponses.flatMap((inputResponse, index) => {\n        const operationResponse = pascal(\n          `${typeName}-${responses[index][0]}-response`,\n        );\n        return [\n          ...(inputResponse.consts ? [inputResponse.consts] : []),\n          ...(inputResponse.effect\n            ? [\n                parsedResponses[index].isArray\n                  ? `export const ${operationResponse}Item = ${inputResponse.effect}\nexport const ${operationResponse} = S.Array(${operationResponse}Item)${\n                      parsedResponses[index].rules?.min\n                        ? `.pipe(S.minItems(${parsedResponses[index].rules.min}))`\n                        : ''\n                    }${\n                      parsedResponses[index].rules?.max\n                        ? `.pipe(S.maxItems(${parsedResponses[index].rules.max}))`\n                        : ''\n                    }`\n                  : `export const ${operationResponse} = ${inputResponse.effect}`,\n              ]\n            : []),\n        ];\n      }),\n    ].join('\\n\\n'),\n    mutators: [],\n  };\n};\n\nexport const generateEffect: ClientBuilder = (verbOptions, options) => {\n  const { implementation, mutators } = generateEffectRoute(\n    verbOptions,\n    options,\n  );\n\n  return {\n    implementation: implementation ? `${implementation}\\n\\n` : '',\n    imports: [],\n    mutators,\n  };\n};\n\nconst effectClientBuilder: ClientGeneratorsBuilder = {\n  client: generateEffect,\n  dependencies: getEffectDependencies,\n};\n\nexport const builder = () => () => effectClientBuilder;\n\nexport default builder;\n"],"mappings":"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"}