@orval/effect 8.15.0 → 8.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { camel, escape, getFormDataFieldFileType, getNumberWord, isBoolean, isNumber, isObject, isString, jsStringEscape, logVerbose, pascal, resolveRef, stringify } from "@orval/core";
1
+ import { camel, getFormDataFieldFileType, getNumberWord, isBoolean, isNumber, isObject, isString, jsStringEscape, jsStringLiteralEscape, logVerbose, pascal, resolveRef, stringify } from "@orval/core";
2
2
  import { unique } from "remeda";
3
3
  //#region src/index.ts
4
4
  const EFFECT_DEPENDENCIES = [{
@@ -126,12 +126,12 @@ const generateEffectValidationSchemaDefinition = (schema, context, name, strict,
126
126
  if (schema.default !== void 0) {
127
127
  defaultVarName = `${name}Default${constsCounterValue}`;
128
128
  let defaultValue;
129
- if (schema.type === "string" && (schema.format === "date" || schema.format === "date-time") && context.output.override.useDates) defaultValue = `new Date("${escape(schema.default)}")`;
129
+ if (schema.type === "string" && (schema.format === "date" || schema.format === "date-time") && context.output.override.useDates) defaultValue = `new Date(${JSON.stringify(schema.default)})`;
130
130
  else if (isObject(schema.default)) {
131
131
  const entries = Object.entries(schema.default).map(([key, value]) => {
132
132
  const safeKey = JSON.stringify(key);
133
- if (isString(value)) return `${safeKey}: "${escape(value)}" as const`;
134
- if (Array.isArray(value)) return `${safeKey}: [${value.map((item) => isString(item) ? `"${escape(item)}" as const` : `${item}`).join(", ")}]`;
133
+ if (isString(value)) return `${safeKey}: ${JSON.stringify(value)} as const`;
134
+ if (Array.isArray(value)) return `${safeKey}: [${value.map((item) => isString(item) ? `${JSON.stringify(item)} as const` : `${item}`).join(", ")}]`;
135
135
  if (value === null || value === void 0 || isNumber(value) || isBoolean(value)) return `${safeKey}: ${value}`;
136
136
  }).filter((entry) => entry !== void 0).join(", ");
137
137
  defaultValue = entries.length === 0 ? `{}` : `{ ${entries} }`;
@@ -275,15 +275,15 @@ const generateEffectValidationSchemaDefinition = (schema, context, name, strict,
275
275
  if (matches && !hasNonArrayEnum && type === "string") {
276
276
  const isStartWithSlash = matches.startsWith("/");
277
277
  const isEndWithSlash = matches.endsWith("/");
278
- const regexp = `new RegExp('${jsStringEscape(matches.slice(isStartWithSlash ? 1 : 0, isEndWithSlash ? -1 : void 0))}')`;
278
+ const regexp = `new RegExp('${jsStringLiteralEscape(matches.slice(isStartWithSlash ? 1 : 0, isEndWithSlash ? -1 : void 0))}')`;
279
279
  consts.push(`export const ${name}RegExp${constsCounterValue} = ${regexp};\n`);
280
280
  functions.push(["regex", `${name}RegExp${constsCounterValue}`]);
281
281
  }
282
282
  if (schema.enum && type !== "array") {
283
283
  const uniqueEnumValues = unique(schema.enum);
284
- if (uniqueEnumValues.every((value) => isString(value))) functions.push(["enum", `[${uniqueEnumValues.map((value) => `'${escape(value)}'`).join(", ")}]`]);
284
+ if (uniqueEnumValues.every((value) => isString(value))) functions.push(["enum", `[${uniqueEnumValues.map((value) => `'${jsStringLiteralEscape(value)}'`).join(", ")}]`]);
285
285
  else functions.push(["oneOf", uniqueEnumValues.map((value) => ({
286
- functions: [["literal", isString(value) ? `'${escape(value)}'` : value]],
286
+ functions: [["literal", isString(value) ? `'${jsStringLiteralEscape(value)}'` : value]],
287
287
  consts: []
288
288
  }))]);
289
289
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"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 escape,\n type GeneratorDependency,\n type GeneratorOptions,\n type GeneratorVerbOptions,\n getFormDataFieldFileType,\n getNumberWord,\n isBoolean,\n isNumber,\n isObject,\n isString,\n jsStringEscape,\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(\"${escape(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}: \"${escape(value)}\" as const`;\n }\n if (Array.isArray(value)) {\n const arrayItems = value.map((item) =>\n isString(item) ? `\"${escape(item)}\" as const` : `${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('${jsStringEscape(\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) => `'${escape(value)}'`).join(', ')}]`,\n ]);\n } else {\n functions.push([\n 'oneOf',\n uniqueEnumValues.map((value) => ({\n functions: [\n ['literal', isString(value) ? `'${escape(value)}'` : value],\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): { 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 out = `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 { operationName, 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,\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(`${operationName}-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(`${operationName}-${code}-response`),\n strict: effectOptions.strict.response,\n generate: effectOptions.generate.response,\n parseType: 'response',\n }),\n );\n\n const pascalOperationName = pascal(operationName);\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(`${pascalOperationName}Params`),\n );\n const inputQueryParams = parseEffectValidationSchemaDefinition(\n parsedParameters.queryParams,\n context,\n effectOptions.strict.query,\n brand(`${pascalOperationName}QueryParams`),\n );\n const inputHeaders = parseEffectValidationSchemaDefinition(\n parsedParameters.headers,\n context,\n effectOptions.strict.header,\n brand(`${pascalOperationName}Header`),\n );\n const inputBody = parseEffectValidationSchemaDefinition(\n parsedBody.input,\n context,\n effectOptions.strict.body,\n brand(`${pascalOperationName}Body`),\n );\n const inputResponses = parsedResponses.map((parsedResponse, idx) =>\n parseEffectValidationSchemaDefinition(\n parsedResponse.input,\n context,\n effectOptions.strict.response,\n brand(pascal(`${operationName}-${responses[idx][0]}-response`)),\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 ${pascalOperationName}Params = ${inputParams.effect}`]\n : []),\n ...(inputQueryParams.consts ? [inputQueryParams.consts] : []),\n ...(inputQueryParams.effect\n ? [\n `export const ${pascalOperationName}QueryParams = ${inputQueryParams.effect}`,\n ]\n : []),\n ...(inputHeaders.consts ? [inputHeaders.consts] : []),\n ...(inputHeaders.effect\n ? [`export const ${pascalOperationName}Header = ${inputHeaders.effect}`]\n : []),\n ...(inputBody.consts ? [inputBody.consts] : []),\n ...(inputBody.effect\n ? [\n parsedBody.isArray\n ? `export const ${pascalOperationName}BodyItem = ${inputBody.effect}\nexport const ${pascalOperationName}Body = S.Array(${pascalOperationName}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 ${pascalOperationName}Body = ${inputBody.effect}`,\n ]\n : []),\n ...inputResponses.flatMap((inputResponse, index) => {\n const operationResponse = pascal(\n `${operationName}-${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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"}
1
+ {"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) ? `${JSON.stringify(item)} as const` : `${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): { 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 out = `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 { operationName, 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,\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(`${operationName}-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(`${operationName}-${code}-response`),\n strict: effectOptions.strict.response,\n generate: effectOptions.generate.response,\n parseType: 'response',\n }),\n );\n\n const pascalOperationName = pascal(operationName);\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(`${pascalOperationName}Params`),\n );\n const inputQueryParams = parseEffectValidationSchemaDefinition(\n parsedParameters.queryParams,\n context,\n effectOptions.strict.query,\n brand(`${pascalOperationName}QueryParams`),\n );\n const inputHeaders = parseEffectValidationSchemaDefinition(\n parsedParameters.headers,\n context,\n effectOptions.strict.header,\n brand(`${pascalOperationName}Header`),\n );\n const inputBody = parseEffectValidationSchemaDefinition(\n parsedBody.input,\n context,\n effectOptions.strict.body,\n brand(`${pascalOperationName}Body`),\n );\n const inputResponses = parsedResponses.map((parsedResponse, idx) =>\n parseEffectValidationSchemaDefinition(\n parsedResponse.input,\n context,\n effectOptions.strict.response,\n brand(pascal(`${operationName}-${responses[idx][0]}-response`)),\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 ${pascalOperationName}Params = ${inputParams.effect}`]\n : []),\n ...(inputQueryParams.consts ? [inputQueryParams.consts] : []),\n ...(inputQueryParams.effect\n ? [\n `export const ${pascalOperationName}QueryParams = ${inputQueryParams.effect}`,\n ]\n : []),\n ...(inputHeaders.consts ? [inputHeaders.consts] : []),\n ...(inputHeaders.effect\n ? [`export const ${pascalOperationName}Header = ${inputHeaders.effect}`]\n : []),\n ...(inputBody.consts ? [inputBody.consts] : []),\n ...(inputBody.effect\n ? [\n parsedBody.isArray\n ? `export const ${pascalOperationName}BodyItem = ${inputBody.effect}\nexport const ${pascalOperationName}Body = S.Array(${pascalOperationName}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 ${pascalOperationName}Body = ${inputBody.effect}`,\n ]\n : []),\n ...inputResponses.flatMap((inputResponse, index) => {\n const operationResponse = pascal(\n `${operationName}-${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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"}
package/package.json CHANGED
@@ -1,54 +1,34 @@
1
1
  {
2
2
  "name": "@orval/effect",
3
- "version": "8.15.0",
3
+ "version": "8.17.0",
4
+ "homepage": "https://orval.dev/docs/guides/effect",
5
+ "bugs": {
6
+ "url": "https://github.com/orval-labs/orval/issues"
7
+ },
4
8
  "license": "MIT",
5
9
  "repository": {
6
10
  "type": "git",
7
11
  "url": "git+https://github.com/orval-labs/orval.git",
8
12
  "directory": "packages/effect"
9
13
  },
10
- "homepage": "https://orval.dev/docs/guides/effect",
11
- "bugs": {
12
- "url": "https://github.com/orval-labs/orval/issues"
13
- },
14
- "type": "module",
15
- "types": "./dist/index.d.mts",
16
- "exports": {
17
- ".": {
18
- "development": "./src/index.ts",
19
- "default": "./dist/index.mjs"
20
- },
21
- "./package.json": "./package.json"
22
- },
23
14
  "files": [
24
15
  "dist",
25
16
  "!dist/**/*.d.ts.map",
26
17
  "!dist/**/*.d.mts.map"
27
18
  ],
28
- "scripts": {
29
- "build": "tsdown --config-loader unrun",
30
- "dev": "tsdown --config-loader unrun --watch src",
31
- "lint": "eslint .",
32
- "test": "vitest",
33
- "typecheck": "tsc --noEmit",
34
- "clean": "rimraf .turbo dist",
35
- "nuke": "rimraf .turbo dist node_modules"
19
+ "type": "module",
20
+ "types": "./dist/index.d.mts",
21
+ "exports": {
22
+ ".": "./dist/index.mjs",
23
+ "./package.json": "./package.json"
36
24
  },
37
25
  "dependencies": {
38
- "@orval/core": "8.15.0",
26
+ "@orval/core": "8.17.0",
39
27
  "remeda": "^2.33.6"
40
28
  },
41
29
  "devDependencies": {
42
- "eslint": "10.1.0",
43
30
  "rimraf": "6.1.2",
44
- "tsdown": "0.21.9",
45
31
  "typescript": "5.9.3",
46
32
  "vitest": "4.0.18"
47
- },
48
- "publishConfig": {
49
- "exports": {
50
- ".": "./dist/index.mjs",
51
- "./package.json": "./package.json"
52
- }
53
33
  }
54
34
  }