@orval/mock 8.17.0 → 8.18.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.d.mts +3 -2
- package/dist/index.mjs +389 -56
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["getReferenceName","valWithRequired"],"sources":["../src/mock-types.ts","../src/delay.ts","../src/faker/compatible-v9.ts","../src/faker/constants.ts","../src/faker/getters/object.ts","../src/faker/getters/array-item-factory.ts","../src/faker/getters/scalar.ts","../src/faker/resolvers/value.ts","../src/faker/getters/combine.ts","../src/faker/getters/route.ts","../src/msw/mocks.ts","../src/msw/index.ts","../src/faker/index.ts","../src/index.ts"],"sourcesContent":["import {\n escapeRegExp,\n type FinalizeMockImplementationOptions,\n type MockOptions,\n type ResReqTypesValue,\n} from '@orval/core';\n\nexport function isStrictMock(\n mockOptions?: Pick<MockOptions, 'required' | 'nonNullable'>,\n): boolean {\n return Boolean(\n mockOptions && mockOptions.required && mockOptions.nonNullable,\n );\n}\n\nexport function getStrictMockTypeName(typeName: string): string {\n return `${typeName}Mock`;\n}\n\nexport function getStrictMockHelperTypeDeclarations(): string {\n return `export type KeysWithNull<O> = {\n [K in keyof O]-?: null extends O[K] ? K : never;\n}[keyof O];\n\nexport type MockWithNullableOverrides<\n T,\n O extends Partial<T>,\n M extends Record<keyof T, unknown>,\n> = Omit<M, Extract<KeysWithNull<O>, keyof T>> & {\n [K in Extract<KeysWithNull<O>, keyof T>]: M[K] | null;\n};`;\n}\n\nexport function getStrictMockTypeDeclaration(typeName: string): string {\n const mockTypeName = getStrictMockTypeName(typeName);\n return `export type ${mockTypeName} = {\\n [K in keyof Required<${typeName}>]: NonNullable<Required<${typeName}>[K]>;\\n};`;\n}\n\nexport function getStrictMockTypeDeclarations(\n typeNames: Iterable<string>,\n): string {\n const unique = [...new Set(typeNames)];\n if (unique.length === 0) {\n return '';\n }\n\n return unique\n .map((typeName) => getStrictMockTypeDeclaration(typeName))\n .join('\\n\\n');\n}\n\nexport function getMockFactoryReturnType(\n typeName: string,\n mockOptions?: Pick<MockOptions, 'required' | 'nonNullable'>,\n): string {\n return isStrictMock(mockOptions) ? getStrictMockTypeName(typeName) : typeName;\n}\n\nexport interface MockFactorySignatureParts {\n param: string;\n returnType: string;\n returnCast: string;\n}\n\nexport interface GetMockFactorySignaturePartsOptions {\n isOverridable?: boolean;\n overrideType?: string;\n}\n\nexport function getMockFactorySignatureParts(\n typeName: string,\n mockOptions?: Pick<MockOptions, 'required' | 'nonNullable'>,\n options: GetMockFactorySignaturePartsOptions = {},\n): MockFactorySignatureParts {\n const isOverridable = options.isOverridable ?? false;\n const overrideType = options.overrideType ?? `Partial<${typeName}>`;\n const mockTypeName = getStrictMockTypeName(typeName);\n\n if (!isOverridable) {\n return {\n param: '',\n returnType: getMockFactoryReturnType(typeName, mockOptions),\n returnCast: '',\n };\n }\n\n if (isStrictMock(mockOptions)) {\n return {\n param: `<O extends ${overrideType} = {}>(overrideResponse?: O)`,\n returnType: `MockWithNullableOverrides<${typeName}, O, ${mockTypeName}>`,\n returnCast: ` as MockWithNullableOverrides<${typeName}, O, ${mockTypeName}>`,\n };\n }\n\n return {\n param: `overrideResponse: ${overrideType} = {}`,\n returnType: typeName,\n returnCast: '',\n };\n}\n\nexport function getSimpleSchemaReturnType(\n returnType: string,\n schemaTypeNames: string[],\n): string | undefined {\n const trimmed = returnType.trim();\n return schemaTypeNames.includes(trimmed) ? trimmed : undefined;\n}\n\nexport function formatMockFactoryDeclaration(\n factoryName: string,\n param: string,\n returnType: string,\n body: string,\n returnCast: string,\n options?: { omitReturnType?: boolean; terminateStatement?: boolean },\n): string {\n const header = param\n ? param.startsWith('<')\n ? `export const ${factoryName} = ${param}`\n : `export const ${factoryName} = (${param})`\n : `export const ${factoryName} = ()`;\n\n const returnTypeAnnotation =\n options?.omitReturnType || !returnType ? '' : `: ${returnType}`;\n\n const statementTerminator =\n returnCast || options?.terminateStatement ? ';' : '';\n\n return `${header}${returnTypeAnnotation} => (${body})${returnCast}${statementTerminator}`;\n}\n\nexport function getSchemaTypeNamesFromResponses(\n responses: ResReqTypesValue[],\n): string[] {\n const names = new Set<string>();\n\n for (const response of responses) {\n for (const imp of response.imports) {\n if (imp.values || imp.schemaFactory) {\n continue;\n }\n\n const importName = imp.alias ?? imp.name;\n if (/^[A-Z]\\w*$/.test(importName)) {\n names.add(importName);\n }\n }\n\n const { value } = response;\n if (!value) {\n continue;\n }\n\n const baseType = value.endsWith('[]') ? value.slice(0, -2) : value;\n if (/^[A-Z]\\w*$/.test(baseType)) {\n names.add(baseType);\n }\n }\n\n return [...names];\n}\n\nexport function buildStrictMockTypeFileHeader(\n schemaTypeNames: Iterable<string>,\n): string {\n const uniqueSchemaNames = [...new Set(schemaTypeNames)];\n const schemaBlock = getStrictMockTypeDeclarations(uniqueSchemaNames);\n\n return [getStrictMockHelperTypeDeclarations(), schemaBlock]\n .filter(Boolean)\n .join('\\n\\n');\n}\n\n/**\n * Prepends shared strict-mock helper types and each `{Schema}Mock` alias once at\n * the top of a mock file. Generators pass `strictSchemaTypeNames`; no scraping.\n *\n * Not idempotent — callers must invoke this exactly once per aggregated mock\n * file (writers and `writeFakerSchemaMocks`), not from import hooks.\n */\nexport function dedupeStrictMockTypeDeclarations(\n implementation: string,\n options: FinalizeMockImplementationOptions = {},\n): string {\n if (!isStrictMock(options.mockOptions)) {\n return implementation;\n }\n\n const schemaTypeNames = options.strictSchemaTypeNames\n ? [...new Set(options.strictSchemaTypeNames)]\n : [];\n if (schemaTypeNames.length === 0) {\n return implementation;\n }\n\n const header = buildStrictMockTypeFileHeader(schemaTypeNames);\n\n return `${header}\\n\\n${implementation.trimStart()}`;\n}\n\nexport function applyStrictMockReturnType(\n returnType: string,\n schemaTypeNames: string[],\n): string {\n if (schemaTypeNames.length === 0) {\n return returnType;\n }\n\n let result = returnType;\n const sorted = [...schemaTypeNames].toSorted((a, b) => b.length - a.length);\n\n for (const name of sorted) {\n result = result.replaceAll(\n new RegExp(String.raw`\\b${escapeRegExp(name)}\\b`, 'g'),\n getStrictMockTypeName(name),\n );\n }\n\n return result;\n}\n\nconst STRICT_MOCK_SCHEMA_TYPE_FROM_OVERRIDES =\n /MockWithNullableOverrides<([A-Z]\\w*),/g;\nconst STRICT_MOCK_SCHEMA_TYPE_FROM_OVERRIDE_ALIAS =\n /MockWithNullableOverrides<[^,]+,\\s*[^,]+,\\s*([A-Z]\\w*Mock)>/g;\nconst STRICT_MOCK_SCHEMA_TYPE_FROM_MOCK_ALIAS_RETURN =\n /\\): ([A-Z]\\w*Mock)(?:\\[\\]|;)/g;\n\n/** Inverse of {@link getStrictMockTypeName}: `PetMock` → `Pet`, `WidgetMockMock` → `WidgetMock`. */\nfunction getSchemaTypeNameFromStrictMockAlias(alias: string): string {\n return alias.endsWith('Mock') ? alias.slice(0, -4) : alias;\n}\n\n/**\n * Collect schema type names referenced by strict mock factories in generated\n * implementation text (nested split factories, array item helpers, etc.).\n *\n * This reverse-parses emitted factory syntax and is therefore coupled to the\n * current `formatMockFactoryDeclaration` / `getMockFactorySignatureParts`\n * shape. The structurally robust alternative is to record each nested item's\n * schema name where split factories are generated (array-item / faker getters,\n * where the `$ref` name is known) and thread it into `strictMockSchemaTypeNames`.\n */\nexport function collectStrictMockSchemaTypeNamesFromImplementation(\n implementation: string,\n): string[] {\n const names = new Set<string>();\n\n for (const match of implementation.matchAll(\n STRICT_MOCK_SCHEMA_TYPE_FROM_OVERRIDES,\n )) {\n names.add(match[1]);\n }\n\n for (const pattern of [\n STRICT_MOCK_SCHEMA_TYPE_FROM_OVERRIDE_ALIAS,\n STRICT_MOCK_SCHEMA_TYPE_FROM_MOCK_ALIAS_RETURN,\n ]) {\n for (const match of implementation.matchAll(pattern)) {\n names.add(getSchemaTypeNameFromStrictMockAlias(match[1]));\n }\n }\n\n return [...names];\n}\n\nexport function mergeStrictMockSchemaTypeNames(\n ...groups: Array<Iterable<string> | undefined>\n): string[] | undefined {\n const names = new Set<string>();\n\n for (const group of groups) {\n if (!group) continue;\n for (const name of group) {\n names.add(name);\n }\n }\n\n return names.size > 0 ? [...names] : undefined;\n}\n","import {\n type GlobalMockOptions,\n isBoolean,\n isFunction,\n isMswMock,\n isNumber,\n type MswMockOptions,\n type NormalizedOverrideOutput,\n} from '@orval/core';\n\nexport const getDelay = (\n override?: NormalizedOverrideOutput,\n options?: GlobalMockOptions,\n): MswMockOptions['delay'] => {\n // `delay` and `delayFunctionLazyExecute` are MSW-only. Narrow the\n // discriminated `GlobalMockOptions` union (and the partial override\n // counterpart) before reading them.\n const mswOptions = options && isMswMock(options) ? options : undefined;\n const overrideMock = override?.mock as Partial<MswMockOptions> | undefined;\n const overrideDelay = overrideMock?.delay ?? mswOptions?.delay;\n const delayFunctionLazyExecute =\n overrideMock?.delayFunctionLazyExecute ??\n mswOptions?.delayFunctionLazyExecute;\n if (isFunction(overrideDelay)) {\n return delayFunctionLazyExecute ? overrideDelay : overrideDelay();\n }\n if (isNumber(overrideDelay) || isBoolean(overrideDelay)) {\n return overrideDelay;\n }\n return false;\n};\n","import { compareVersions, type PackageJson } from '@orval/core';\n\nconst getFakerPackageVersion = (packageJson: PackageJson) => {\n return (\n packageJson.resolvedVersions?.['@faker-js/faker'] ??\n packageJson.dependencies?.['@faker-js/faker'] ??\n packageJson.devDependencies?.['@faker-js/faker'] ??\n packageJson.peerDependencies?.['@faker-js/faker']\n );\n};\n\nexport const isFakerVersionV9 = (packageJson: PackageJson) => {\n const version = getFakerPackageVersion(packageJson);\n\n if (!version) {\n return false;\n }\n\n const withoutRc = version.split('-')[0];\n\n return compareVersions(withoutRc, '9.0.0');\n};\n","import type { OpenApiSchemaObject } from '@orval/core';\n\nexport const DEFAULT_FORMAT_MOCK: Record<\n Required<Extract<OpenApiSchemaObject, object>>['format'],\n string\n> = {\n bic: 'faker.finance.bic()',\n binary: 'new ArrayBuffer(faker.number.int({ min: 1, max: 64 }))',\n city: 'faker.location.city()',\n country: 'faker.location.country()',\n date: 'faker.date.past().toISOString().slice(0, 10)',\n 'date-time': \"faker.date.past().toISOString().slice(0, 19) + 'Z'\",\n email: 'faker.internet.email()',\n firstName: 'faker.person.firstName()',\n gender: 'faker.person.gender()',\n iban: 'faker.finance.iban()',\n ipv4: 'faker.internet.ipv4()',\n ipv6: 'faker.internet.ipv6()',\n jobTitle: 'faker.person.jobTitle()',\n lastName: 'faker.person.lastName()',\n password: 'faker.internet.password()',\n phoneNumber: 'faker.phone.number()',\n streetName: 'faker.location.street()',\n uri: 'faker.internet.url()',\n url: 'faker.internet.url()',\n userName: 'faker.internet.userName()',\n uuid: 'faker.string.uuid()',\n zipCode: 'faker.location.zipCode()',\n};\n\n// #980 replace CUID so tests are consistent\nexport const DEFAULT_OBJECT_KEY_MOCK = 'faker.string.alphanumeric(5)';\n","import {\n type ContextSpec,\n type GeneratorImport,\n getKey,\n getRefInfo,\n isReference,\n type MockOptions,\n type OpenApiReferenceObject,\n type OpenApiSchemaObject,\n PropertySortOrder,\n} from '@orval/core';\n\nimport type { MockDefinition, MockSchema, MockSchemaObject } from '../../types';\nimport { DEFAULT_OBJECT_KEY_MOCK } from '../constants';\nimport { resolveMockValue } from '../resolvers/value';\nimport { combineSchemasMock } from './combine';\n\nexport const overrideVarName = 'overrideResponse';\n\nfunction getReferenceName(\n ref: string | undefined,\n context: ContextSpec,\n): string {\n if (!ref) return '';\n\n return getRefInfo(ref, context).name;\n}\n\ninterface GetMockObjectOptions {\n item: MockSchemaObject;\n operationId: string;\n mockOptions?: MockOptions;\n tags: string[];\n combine?: {\n separator: 'allOf' | 'oneOf' | 'anyOf';\n includedProperties: string[];\n };\n context: ContextSpec;\n imports: GeneratorImport[];\n // This is used to prevent recursion when combining schemas\n // When an element is added to the array, it means on this iteration, we've already seen this property\n existingReferencedProperties: string[];\n // Tracks the current contiguous `allOf` composition to break cyclic\n // inheritance. See `existingReferencedAllOfRefs` docs in getters/combine.ts.\n existingReferencedAllOfRefs?: string[];\n splitMockImplementations: string[];\n // This is used to add the overrideResponse to the object\n allowOverride?: boolean;\n}\n\nexport function getMockObject({\n item,\n mockOptions,\n operationId,\n tags,\n combine,\n context,\n imports,\n existingReferencedProperties,\n existingReferencedAllOfRefs = [],\n splitMockImplementations,\n allowOverride = false,\n}: GetMockObjectOptions): MockDefinition {\n if (isReference(item)) {\n return resolveMockValue({\n schema: {\n ...item,\n name: item.name,\n path: item.path ? `${item.path}.${item.name}` : item.name,\n },\n mockOptions,\n operationId,\n tags,\n context,\n imports,\n existingReferencedProperties,\n existingReferencedAllOfRefs,\n splitMockImplementations,\n });\n }\n\n const schemaItem = item as MockSchemaObject & Record<string, unknown>;\n const itemAllOf = schemaItem.allOf as MockSchema[] | undefined;\n const itemOneOf = schemaItem.oneOf as MockSchema[] | undefined;\n const itemAnyOf = schemaItem.anyOf as MockSchema[] | undefined;\n const itemType = schemaItem.type as string | string[] | undefined;\n const itemProperties = schemaItem.properties as\n | Record<string, OpenApiReferenceObject | OpenApiSchemaObject>\n | undefined;\n const itemRequired = schemaItem.required as string[] | undefined;\n const itemAdditionalProperties = schemaItem.additionalProperties as\n | boolean\n | OpenApiReferenceObject\n | OpenApiSchemaObject\n | undefined;\n\n if (itemAllOf || itemOneOf || itemAnyOf) {\n const separator = itemAllOf ? 'allOf' : itemOneOf ? 'oneOf' : 'anyOf';\n return combineSchemasMock({\n item: schemaItem,\n separator,\n mockOptions,\n operationId,\n tags,\n combine,\n context,\n imports,\n existingReferencedProperties,\n existingReferencedAllOfRefs,\n splitMockImplementations,\n });\n }\n\n if (Array.isArray(itemType)) {\n // Spread the base schema into each type entry so that object properties\n // (e.g. `properties`, `required`, `additionalProperties`) are preserved.\n // Without this, `{ type: \"object\", properties: {...} }` collapses to\n // `{ type: \"object\" }` and the mock generator returns `{}` instead of\n // building the actual object shape. Mirrors the fix in core getters/object.ts.\n const baseItem = schemaItem as Record<string, unknown>;\n return combineSchemasMock({\n item: {\n anyOf: itemType.map((type) => ({\n ...baseItem,\n type,\n })) as unknown as MockSchema[],\n name: schemaItem.name,\n },\n separator: 'anyOf',\n mockOptions,\n operationId,\n tags,\n combine,\n context,\n imports,\n existingReferencedProperties,\n existingReferencedAllOfRefs,\n splitMockImplementations,\n });\n }\n\n if (itemProperties) {\n let value =\n !combine || combine.separator === 'oneOf' || combine.separator === 'anyOf'\n ? '{'\n : '';\n const imports: GeneratorImport[] = [];\n const includedProperties: string[] = [];\n\n const entries = Object.entries(itemProperties);\n if (context.output.propertySortOrder === PropertySortOrder.ALPHABETICAL) {\n entries.sort((a, b) => {\n return a[0].localeCompare(b[0], 'en', { numeric: true });\n });\n }\n const propertyScalars = entries\n .map(\n ([key, prop]: [\n string,\n OpenApiReferenceObject | OpenApiSchemaObject,\n ]) => {\n if (combine?.includedProperties.includes(key)) {\n return;\n }\n\n const isRequired =\n mockOptions?.required ??\n (Array.isArray(itemRequired) ? itemRequired : []).includes(key);\n\n const hasNullable = 'nullable' in prop && prop.nullable === true;\n\n // Check to see if the property is a reference to an existing property\n // Fixes issue #910\n if (\n isReference(prop) &&\n existingReferencedProperties.includes(\n getReferenceName(prop.$ref, context),\n )\n ) {\n if (isRequired) {\n const keyDefinition = getKey(key);\n return `${keyDefinition}: null`;\n }\n return;\n }\n\n const resolvedValue = resolveMockValue({\n schema: {\n ...(prop as Record<string, unknown>),\n name: key,\n parentName: schemaItem.name,\n path: schemaItem.path ? `${schemaItem.path}.${key}` : `#.${key}`,\n },\n mockOptions,\n operationId,\n tags,\n context,\n imports,\n existingReferencedProperties,\n // A property value is a fresh mock instance, not part of this\n // object's allOf composition — reset the chain.\n // See `existingReferencedAllOfRefs` docs in getters/combine.ts.\n existingReferencedAllOfRefs: [],\n splitMockImplementations,\n });\n\n imports.push(...resolvedValue.imports);\n includedProperties.push(key);\n\n const keyDefinition = getKey(key);\n\n const hasDefault = 'default' in prop && prop.default !== undefined;\n\n if (!isRequired && !resolvedValue.overrided && !hasDefault) {\n const omitValue =\n mockOptions?.nonNullable || !hasNullable ? 'undefined' : 'null';\n return `${keyDefinition}: faker.helpers.arrayElement([${resolvedValue.value}, ${omitValue}])`;\n }\n\n const isNullable =\n Array.isArray(prop.type) && prop.type.includes('null');\n if (\n isNullable &&\n !resolvedValue.nullWrapped &&\n !resolvedValue.overrided &&\n !mockOptions?.nonNullable\n ) {\n return `${keyDefinition}: faker.helpers.arrayElement([${resolvedValue.value}, null])`;\n }\n\n return `${keyDefinition}: ${resolvedValue.value}`;\n },\n )\n .filter(Boolean);\n\n if (allowOverride) {\n propertyScalars.push(`...${overrideVarName}`);\n }\n\n value += propertyScalars.join(', ');\n value +=\n !combine || combine.separator === 'oneOf' || combine.separator === 'anyOf'\n ? '}'\n : '';\n\n return {\n value,\n imports,\n name: schemaItem.name,\n includedProperties,\n };\n }\n\n if (itemAdditionalProperties) {\n if (itemAdditionalProperties === true) {\n return { value: `{}`, imports: [], name: schemaItem.name };\n }\n const additionalProperties = itemAdditionalProperties;\n if (\n isReference(additionalProperties) &&\n existingReferencedProperties.includes(\n getReferenceName(additionalProperties.$ref, context),\n )\n ) {\n return { value: `{}`, imports: [], name: schemaItem.name };\n }\n\n const resolvedValue = resolveMockValue({\n schema: {\n ...additionalProperties,\n name: schemaItem.name,\n path: schemaItem.path ? `${schemaItem.path}.#` : '#',\n },\n mockOptions,\n operationId,\n tags,\n context,\n imports,\n existingReferencedProperties,\n // An additionalProperties value is a fresh mock instance — reset the\n // chain, as with property values above.\n // See `existingReferencedAllOfRefs` docs in getters/combine.ts.\n existingReferencedAllOfRefs: [],\n splitMockImplementations,\n });\n\n return {\n ...resolvedValue,\n value: `{\n [${DEFAULT_OBJECT_KEY_MOCK}]: ${resolvedValue.value}\n }`,\n };\n }\n\n return { value: '{}', imports: [], name: schemaItem.name };\n}\n","import {\n type ContextSpec,\n DefaultTag,\n type GeneratorImport,\n getRefInfo,\n isFunction,\n isReference,\n kebab,\n type OpenApiSchemaObject,\n OutputMockType,\n OutputMode,\n pascal,\n resolveRef,\n} from '@orval/core';\n\nimport {\n formatMockFactoryDeclaration,\n getMockFactorySignatureParts,\n} from '../../mock-types';\nimport type { MockSchema } from '../../types';\nimport { overrideVarName } from './object';\nimport { extractItemsRef } from './scalar';\n\n/**\n * Scope key for file-level array-item factory dedup. Must match how writers\n * group mock output: one bucket per tag file in tags modes, otherwise one\n * bucket for the whole target.\n */\nexport function getArrayItemMockFileScope(\n context: ContextSpec,\n tags: string[],\n): string {\n const mode = context.output.mode;\n const mockType = context.activeMockOutputType ?? OutputMockType.MSW;\n let base: string;\n if (mode === OutputMode.TAGS || mode === OutputMode.TAGS_SPLIT) {\n const tag = tags.length > 0 ? tags[0] : DefaultTag;\n base = `tag:${kebab(tag)}`;\n } else if (mode === OutputMode.SPLIT) {\n base = 'split';\n } else {\n base = 'single';\n }\n return `${base}:${mockType}`;\n}\n\nfunction getFileLevelExtractedFactories(\n context: ContextSpec,\n scope: string,\n): Set<string> {\n context.arrayItemMockFactories ??= new Map();\n const existing = context.arrayItemMockFactories.get(scope);\n if (existing) {\n return existing;\n }\n const factories = new Set<string>();\n context.arrayItemMockFactories.set(scope, factories);\n return factories;\n}\n\n/**\n * True when any mock generator entry opts into reusable array-item mock\n * factories for object-like array item schemas in operation responses.\n */\nexport function shouldExtractArrayItemFactories(context: ContextSpec): boolean {\n return context.output.mock.generators.some(\n (g) => !isFunction(g) && g.arrayItems === true,\n );\n}\n\n/**\n * True when `schemas: true` already emits a consolidated factory for this\n * `$ref` item under `components/schemas`, so we must not re-export it from\n * the operation mock file.\n */\nfunction hasConsolidatedSchemaFactory(\n items: MockSchema,\n context: ContextSpec,\n): boolean {\n if (!context.output.schemas) {\n return false;\n }\n\n const itemsRef = extractItemsRef(items);\n if (!itemsRef) {\n return false;\n }\n\n const { refPaths } = getRefInfo(itemsRef, context);\n const isComponentsSchema =\n Array.isArray(refPaths) &&\n refPaths[0] === 'components' &&\n refPaths[1] === 'schemas';\n\n if (!isComponentsSchema) {\n return false;\n }\n\n return context.output.mock.generators.some(\n (g) =>\n !isFunction(g) && g.type === OutputMockType.FAKER && g.schemas === true,\n );\n}\n\n/**\n * True when `parentName` looks like a nested property key rather than the\n * generated response wrapper type (e.g. `outer` vs `GetTenants200`). Inlining\n * avoids factory/type-name collisions and mismatched `<Parent><Prop>Item` aliases.\n */\nfunction isAmbiguousInlineItemContext(\n operationId: string,\n parentName?: string,\n): boolean {\n if (!parentName) {\n return false;\n }\n\n return !parentName.toLowerCase().includes(operationId.toLowerCase());\n}\n\nfunction isNullableArrayItem(schema: OpenApiSchemaObject): boolean {\n if (schema.nullable === true) {\n return true;\n }\n\n return Array.isArray(schema.type) && schema.type.includes('null');\n}\n\nfunction isResolvedSchemaObjectLike(schema: OpenApiSchemaObject): boolean {\n if (schema.type === 'object' || schema.properties) {\n return true;\n }\n\n if (schema.allOf) {\n return true;\n }\n\n return false;\n}\n\n/**\n * True when array `items` resolve to an object-like schema worth extracting.\n * Conservative: skips scalar refs, oneOf/anyOf, nullable items, and nested\n * contexts where generated item type names cannot be inferred reliably.\n */\nfunction shouldExtractArrayItem(\n items: MockSchema,\n context: ContextSpec,\n operationId: string,\n parentName?: string,\n): boolean {\n const itemsRef = extractItemsRef(items);\n\n if (itemsRef) {\n try {\n const { schema } = resolveRef<OpenApiSchemaObject>(\n { $ref: itemsRef },\n context,\n );\n return isResolvedSchemaObjectLike(schema);\n } catch {\n return false;\n }\n }\n\n if (isReference(items)) {\n return false;\n }\n\n const schema = items as OpenApiSchemaObject;\n\n if (isNullableArrayItem(schema)) {\n return false;\n }\n\n if (schema.oneOf || schema.anyOf) {\n return false;\n }\n\n if (schema.allOf) {\n return true;\n }\n\n if (schema.type === 'object' || schema.properties) {\n return !isAmbiguousInlineItemContext(operationId, parentName);\n }\n\n return false;\n}\n\n/**\n * True when `mapValue` is already a bare factory call or a single spread of one.\n */\nfunction isAlreadyFactoryCall(mapValue: string): boolean {\n return /^(?:\\{\\s*\\.\\.\\.\\s*get\\w+Mock\\(\\)\\s*\\}|get\\w+Mock\\(\\))$/.test(\n mapValue.trim(),\n );\n}\n\ninterface ArrayItemFactoryNames {\n factoryName: string;\n typeName: string;\n}\n\n/**\n * Derive the exported factory and TypeScript type names for an array item.\n */\nfunction getArrayItemFactoryNames({\n items,\n propertyName,\n parentName,\n operationId,\n context,\n}: {\n items: MockSchema;\n propertyName: string;\n parentName?: string;\n operationId: string;\n context: ContextSpec;\n}): ArrayItemFactoryNames | undefined {\n if (!shouldExtractArrayItem(items, context, operationId, parentName)) {\n return undefined;\n }\n\n const itemsRef = extractItemsRef(items);\n if (itemsRef) {\n const { name } = getRefInfo(itemsRef, context);\n const typeName = pascal(name);\n return {\n factoryName: `get${typeName}Mock`,\n typeName,\n };\n }\n\n const itemSuffix = context.output.override.components.schemas.itemSuffix;\n const typeName = parentName\n ? `${pascal(parentName)}${pascal(propertyName)}${itemSuffix}`\n : `${pascal(operationId)}${pascal(propertyName)}${itemSuffix}`;\n return {\n factoryName: `get${pascal(operationId)}Response${pascal(propertyName)}ItemMock`,\n typeName,\n };\n}\n\ninterface ExtractArrayItemMockOptions {\n items: MockSchema;\n propertyName: string;\n parentName?: string;\n operationId: string;\n tags: string[];\n mapValue: string;\n context: ContextSpec;\n splitMockImplementations: string[];\n imports: GeneratorImport[];\n}\n\n/**\n * When `arrayItems: true`, lift an object-like array item mock body into a\n * reusable exported factory and return the call site expression for `.map()`.\n */\nexport function extractArrayItemMock({\n items,\n propertyName,\n parentName,\n operationId,\n tags,\n mapValue,\n context,\n splitMockImplementations,\n imports,\n}: ExtractArrayItemMockOptions): string | undefined {\n if (!shouldExtractArrayItemFactories(context)) {\n return undefined;\n }\n\n if (\n !mapValue ||\n mapValue === '[]' ||\n isAlreadyFactoryCall(mapValue) ||\n hasConsolidatedSchemaFactory(items, context)\n ) {\n return undefined;\n }\n\n const names = getArrayItemFactoryNames({\n items,\n propertyName,\n parentName,\n operationId,\n context,\n });\n if (!names) {\n return undefined;\n }\n\n const { factoryName, typeName } = names;\n const scope = getArrayItemMockFileScope(context, tags);\n const fileLevelFactories = getFileLevelExtractedFactories(context, scope);\n const alreadyExtracted =\n fileLevelFactories.has(factoryName) ||\n splitMockImplementations.some((f) =>\n f.includes(`export const ${factoryName}`),\n );\n\n if (!alreadyExtracted) {\n const mockOptions = context.output.override.mock;\n const { param, returnType, returnCast } = getMockFactorySignatureParts(\n typeName,\n mockOptions,\n {\n isOverridable: true,\n overrideType: `Partial<${typeName}>`,\n },\n );\n const spreadPrefix = mapValue.startsWith('...') ? '' : '...';\n const func = formatMockFactoryDeclaration(\n factoryName,\n param,\n returnType,\n `{${spreadPrefix}${mapValue}, ...${overrideVarName}}`,\n returnCast,\n { terminateStatement: true },\n );\n splitMockImplementations.push(func);\n fileLevelFactories.add(factoryName);\n }\n\n imports.push({ name: typeName });\n\n return `{...${factoryName}()}`;\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-argument */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* eslint-disable @typescript-eslint/no-unnecessary-condition */\nimport {\n type ContextSpec,\n EnumGeneration,\n type GeneratorImport,\n getRefInfo,\n isReference,\n isString,\n jsStringLiteralEscape,\n mergeDeep,\n type MockOptions,\n type OpenApiSchemaObject,\n} from '@orval/core';\n\nimport type { MockDefinition, MockSchema, MockSchemaObject } from '../../types';\nimport { isFakerVersionV9 } from '../compatible-v9';\nimport { DEFAULT_FORMAT_MOCK } from '../constants';\nimport {\n getNullable,\n resolveMockOverride,\n resolveMockValue,\n} from '../resolvers';\nimport { extractArrayItemMock } from './array-item-factory';\nimport { getMockObject } from './object';\n\ninterface GetMockScalarOptions {\n item: MockSchemaObject;\n imports: GeneratorImport[];\n mockOptions?: MockOptions;\n operationId: string;\n isRef?: boolean;\n tags: string[];\n combine?: {\n separator: 'allOf' | 'oneOf' | 'anyOf';\n includedProperties: string[];\n };\n context: ContextSpec;\n // This is used to prevent recursion when combining schemas\n // When an element is added to the array, it means on this iteration, we've already seen this property\n existingReferencedProperties: string[];\n // Tracks the current contiguous `allOf` composition to break cyclic\n // inheritance; threaded through to `combineSchemasMock`.\n // See `existingReferencedAllOfRefs` docs in getters/combine.ts.\n existingReferencedAllOfRefs?: string[];\n splitMockImplementations: string[];\n // This is used to add the overrideResponse to the object\n allowOverride?: boolean;\n}\n\nexport function getMockScalar({\n item,\n imports,\n mockOptions,\n operationId,\n tags,\n combine,\n context,\n existingReferencedProperties,\n existingReferencedAllOfRefs = [],\n splitMockImplementations,\n allowOverride = false,\n}: GetMockScalarOptions): MockDefinition {\n const safeMockOptions: MockOptions = mockOptions ?? {};\n const nonNullableOption = safeMockOptions.nonNullable;\n // Add the property to the existing properties to validate on object recursion\n if (item.isRef) {\n existingReferencedProperties = [...existingReferencedProperties, item.name];\n }\n\n const operationProperty = resolveMockOverride(\n safeMockOptions.operations?.[operationId]?.properties,\n item,\n nonNullableOption,\n );\n\n if (operationProperty) {\n return operationProperty;\n }\n\n let overrideTag: { properties: Record<string, unknown> } = {\n properties: {},\n };\n const sortedTags = Object.entries(safeMockOptions.tags ?? {}).toSorted(\n (a, b) => a[0].localeCompare(b[0], 'en', { numeric: true }),\n );\n for (const [tag, options] of sortedTags) {\n if (!tags.includes(tag)) {\n continue;\n }\n overrideTag = mergeDeep(overrideTag, options);\n }\n\n const tagProperty = resolveMockOverride(\n overrideTag.properties,\n item,\n nonNullableOption,\n );\n\n if (tagProperty) {\n return tagProperty;\n }\n\n const property = resolveMockOverride(\n safeMockOptions.properties,\n item,\n nonNullableOption,\n );\n\n if (property) {\n return property;\n }\n\n if (\n context.output.override.mock?.useExamples ||\n safeMockOptions.useExamples\n ) {\n // OAS 3.0 inputs go through @scalar/openapi-parser's upgrade(), which\n // rewrites property-level `example: <value>` into `examples: [<value>]`\n // and deletes the singular field. Fall back to the array form so this\n // option keeps working post-upgrade.\n const propertyExample =\n item.example === undefined\n ? Array.isArray(item.examples) && item.examples.length > 0\n ? item.examples[0]\n : undefined\n : item.example;\n if (propertyExample !== undefined) {\n return {\n value: JSON.stringify(propertyExample),\n imports: [],\n name: item.name,\n overrided: true,\n };\n }\n }\n\n const formatOverrides = safeMockOptions.format ?? {};\n const ALL_FORMAT: Record<string, string> = {\n ...DEFAULT_FORMAT_MOCK,\n ...Object.fromEntries(\n Object.entries(formatOverrides).filter(\n (entry): entry is [string, string] => typeof entry[1] === 'string',\n ),\n ),\n };\n\n // Both OpenAPI 3.1 `type: [..., 'null']` and OpenAPI 3.0 `nullable: true`\n // reach here as a null union, because @scalar/openapi-parser upgrades 3.0\n // inputs to 3.1 before mock generation. When this getter wraps the value via\n // `getNullable` it flags the returned MockDefinition with `nullWrapped` so the\n // object property layer does not add a second `arrayElement([..., null])`.\n const isNullable = Array.isArray(item.type) && item.type.includes('null');\n const nullWrapped = isNullable && !nonNullableOption;\n // The @scalar/openapi-parser upgrader rewrites `format: binary` to\n // `contentMediaType: application/octet-stream` when upgrading OAS 3.0 → 3.1;\n // treat both equivalently so the mock emits the binary format value\n // (ArrayBuffer) instead of falling through to the string case.\n const schemaContentMediaType = (item as OpenApiSchemaObject).contentMediaType;\n if (\n !item.format &&\n schemaContentMediaType === 'application/octet-stream' &&\n ALL_FORMAT.binary\n ) {\n return {\n value: getNullable(ALL_FORMAT.binary, isNullable, nonNullableOption),\n imports: [],\n name: item.name,\n overrided: false,\n nullWrapped,\n };\n }\n if (item.format && ALL_FORMAT[item.format]) {\n let value = ALL_FORMAT[item.format];\n\n const dateFormats = ['date', 'date-time'];\n if (dateFormats.includes(item.format) && context.output.override.useDates) {\n value = `new Date(${value})`;\n }\n\n return {\n value: getNullable(value, isNullable, nonNullableOption),\n imports: [],\n name: item.name,\n overrided: false,\n nullWrapped,\n };\n }\n\n const type = getItemType(item);\n const isFakerV9 =\n !!context.output.packageJson &&\n isFakerVersionV9(context.output.packageJson);\n\n switch (type) {\n case 'number':\n case 'integer': {\n const intFunction =\n context.output.override.useBigInt &&\n (item.format === 'int64' || item.format === 'uint64')\n ? 'bigInt'\n : 'int';\n // Handle exclusiveMinimum/exclusiveMaximum for both OpenAPI 3.0 (boolean) and 3.1 (number).\n // OpenAPI 3.0: booleans indicating whether minimum/maximum is exclusive — use minimum/maximum as the bound.\n // OpenAPI 3.1: numbers representing the exclusive boundary value — use directly.\n const numMin = (\n typeof item.exclusiveMinimum === 'number'\n ? item.exclusiveMinimum\n : (item.minimum ?? safeMockOptions.numberMin)\n ) as number | undefined;\n const numMax = (\n typeof item.exclusiveMaximum === 'number'\n ? item.exclusiveMaximum\n : (item.maximum ?? safeMockOptions.numberMax)\n ) as number | undefined;\n const intParts: string[] = [];\n if (numMin !== undefined) intParts.push(`min: ${numMin}`);\n if (numMax !== undefined) intParts.push(`max: ${numMax}`);\n if (isFakerV9 && item.multipleOf !== undefined)\n intParts.push(`multipleOf: ${item.multipleOf}`);\n let value = getNullable(\n `faker.number.${intFunction}(${intParts.length > 0 ? `{${intParts.join(', ')}}` : ''})`,\n isNullable,\n nonNullableOption,\n );\n if (type === 'number') {\n const floatParts: string[] = [];\n if (numMin !== undefined) floatParts.push(`min: ${numMin}`);\n if (numMax !== undefined) floatParts.push(`max: ${numMax}`);\n if (isFakerV9 && item.multipleOf !== undefined) {\n floatParts.push(`multipleOf: ${item.multipleOf}`);\n } else if (safeMockOptions.fractionDigits !== undefined) {\n floatParts.push(`fractionDigits: ${safeMockOptions.fractionDigits}`);\n }\n value = getNullable(\n `faker.number.float(${floatParts.length > 0 ? `{${floatParts.join(', ')}}` : ''})`,\n isNullable,\n nonNullableOption,\n );\n }\n const numberImports: GeneratorImport[] = [];\n\n if (item.enum) {\n value = getEnum(\n item,\n numberImports,\n context,\n existingReferencedProperties,\n 'number',\n );\n } else if ('const' in item) {\n value = JSON.stringify(item.const);\n }\n\n return {\n value,\n enums: item.enum,\n imports: numberImports,\n name: item.name,\n // `item.enum` / `const` reassign `value` after `getNullable`, discarding\n // the wrap — so only the plain numeric path is actually null-wrapped.\n nullWrapped: nullWrapped && !item.enum && !('const' in item),\n };\n }\n\n case 'boolean': {\n let value = 'faker.datatype.boolean()';\n const booleanImports: GeneratorImport[] = [];\n if (item.enum) {\n value = getEnum(\n item,\n booleanImports,\n context,\n existingReferencedProperties,\n 'boolean',\n );\n } else if ('const' in item) {\n value = JSON.stringify(item.const);\n }\n return {\n value,\n enums: item.enum,\n imports: booleanImports,\n name: item.name,\n };\n }\n\n case 'array': {\n if (!item.items) {\n return { value: '[]', imports: [], name: item.name };\n }\n\n const itemsRef = extractItemsRef(item.items);\n if (\n itemsRef &&\n existingReferencedProperties.includes(\n getRefInfo(itemsRef, context).name,\n )\n ) {\n return { value: '[]', imports: [], name: item.name };\n }\n\n // If `items` is a single-element `allOf`/`oneOf`/`anyOf` wrapping a\n // `$ref`, treat it as a direct `$ref`. This avoids double-wrapping when\n // the inner schema is an enum array (whose `getEnum` already emits\n // `faker.helpers.arrayElements(...)`) and keeps recursion semantics in\n // line with direct-$ref items.\n const resolvedItems =\n itemsRef && !('$ref' in item.items) ? { $ref: itemsRef } : item.items;\n\n const {\n value,\n enums,\n imports: resolvedImports,\n } = resolveMockValue({\n schema: {\n ...resolvedItems,\n name: item.name,\n parentName: item.parentName,\n path: item.path ? `${item.path}.[]` : '#.[]',\n },\n combine,\n mockOptions,\n operationId,\n tags,\n context,\n imports,\n existingReferencedProperties,\n existingReferencedAllOfRefs,\n splitMockImplementations,\n });\n\n if (enums) {\n return {\n value,\n imports: resolvedImports,\n name: item.name,\n };\n }\n\n let mapValue = value;\n\n const extractedItemCall = extractArrayItemMock({\n items: resolvedItems,\n propertyName: item.name,\n parentName: item.parentName,\n operationId,\n tags,\n mapValue,\n context,\n splitMockImplementations,\n imports: resolvedImports,\n });\n if (extractedItemCall) {\n mapValue = extractedItemCall;\n }\n\n if (\n combine &&\n !value.startsWith('faker') &&\n !value.startsWith('{') &&\n !value.startsWith('Array.from')\n ) {\n mapValue = `{${value}}`;\n }\n\n // Use global defaults for the missing bound only when they do not\n // invert the range; otherwise reuse the explicit schema bound so we\n // never invent values the user did not supply (and never produce\n // min > max). This also avoids relying on faker's internal default\n // upper bound when only `minItems` is specified, which can otherwise\n // produce very large arrays.\n const arrSchemaMin = item.minItems;\n const arrSchemaMax = item.maxItems;\n const arrGlobalMin = safeMockOptions.arrayMin;\n const arrGlobalMax = safeMockOptions.arrayMax;\n\n let arrMin: number | undefined;\n if (arrSchemaMin !== undefined) {\n arrMin = arrSchemaMin;\n } else if (arrSchemaMax === undefined) {\n arrMin = arrGlobalMin;\n } else if (arrGlobalMin === undefined || arrGlobalMin > arrSchemaMax) {\n arrMin = arrSchemaMax;\n } else {\n arrMin = arrGlobalMin;\n }\n\n let arrMax: number | undefined;\n if (arrSchemaMax !== undefined) {\n arrMax = arrSchemaMax;\n } else if (arrSchemaMin === undefined) {\n arrMax = arrGlobalMax;\n } else if (arrGlobalMax === undefined || arrGlobalMax < arrSchemaMin) {\n arrMax = arrSchemaMin;\n } else {\n arrMax = arrGlobalMax;\n }\n\n const arrParts: string[] = [];\n if (arrMin !== undefined) arrParts.push(`min: ${arrMin}`);\n if (arrMax !== undefined) arrParts.push(`max: ${arrMax}`);\n const arrLengthArg =\n arrParts.length > 0 ? `{${arrParts.join(', ')}}` : '';\n\n return {\n value:\n `Array.from({ length: faker.number.int(` +\n `${arrLengthArg}) ` +\n `}, (_, i) => i + 1).map(() => (${mapValue}))`,\n imports: resolvedImports,\n name: item.name,\n };\n }\n\n case 'string': {\n // faker.string.alpha's `length: { min, max }` form requires BOTH bounds.\n // When only one side is schema-specified, fall back to the global default\n // for the missing side only if it does not invert the range; otherwise\n // reuse the explicit bound so we never invent values the user did not\n // supply (and never produce min > max).\n const schemaMin = item.minLength;\n const schemaMax = item.maxLength;\n const globalMin = safeMockOptions.stringMin;\n const globalMax = safeMockOptions.stringMax;\n\n let strMin: number | undefined;\n if (schemaMin !== undefined) {\n strMin = schemaMin;\n } else if (schemaMax === undefined) {\n strMin = globalMin;\n } else if (globalMin === undefined || globalMin > schemaMax) {\n strMin = schemaMax;\n } else {\n strMin = globalMin;\n }\n\n let strMax: number | undefined;\n if (schemaMax !== undefined) {\n strMax = schemaMax;\n } else if (schemaMin === undefined) {\n strMax = globalMax;\n } else if (globalMax === undefined || globalMax < schemaMin) {\n strMax = schemaMin;\n } else {\n strMax = globalMax;\n }\n\n // faker.string.alpha's `length: { min, max }` requires both bounds, so\n // only emit a length argument when we have a complete pair. If only one\n // side could be resolved (e.g., no schema bound and only one global is\n // configured) we fall back to faker's own default length.\n const strLenParts: string[] = [];\n if (strMin !== undefined && strMax !== undefined) {\n strLenParts.push(`min: ${strMin}`, `max: ${strMax}`);\n }\n const length =\n strLenParts.length > 0 ? `{length: {${strLenParts.join(', ')}}}` : '';\n let value = `faker.string.alpha(${length})`;\n const stringImports: GeneratorImport[] = [];\n\n if (item.enum) {\n value = getEnum(\n item,\n stringImports,\n context,\n existingReferencedProperties,\n 'string',\n );\n } else if (item.pattern) {\n value = `faker.helpers.fromRegExp(${JSON.stringify(item.pattern)})`;\n } else if ('const' in item) {\n value = JSON.stringify((item as OpenApiSchemaObject).const);\n }\n\n return {\n value: getNullable(value, isNullable, nonNullableOption),\n enums: item.enum,\n name: item.name,\n imports: stringImports,\n nullWrapped,\n };\n }\n\n case 'null': {\n return {\n value: 'null',\n imports: [],\n name: item.name,\n };\n }\n\n default: {\n if (item.enum) {\n const enumImports: GeneratorImport[] = [];\n const value = getEnum(\n item,\n enumImports,\n context,\n existingReferencedProperties,\n );\n\n return {\n value,\n enums: item.enum,\n imports: enumImports,\n name: item.name,\n };\n }\n\n return getMockObject({\n item,\n mockOptions,\n operationId,\n tags,\n combine: combine\n ? {\n separator: combine.separator,\n includedProperties: [],\n }\n : undefined,\n context,\n imports,\n existingReferencedProperties,\n existingReferencedAllOfRefs,\n splitMockImplementations,\n allowOverride,\n });\n }\n }\n}\n\n// Returns the $ref string from array `items` — either direct ($ref on items\n// itself) or wrapped in a single-element allOf/oneOf/anyOf composition.\n// Multi-element compositions return undefined to preserve combine semantics.\nexport function extractItemsRef(items: MockSchema): string | undefined {\n if (isReference(items)) {\n return items.$ref;\n }\n for (const key of ['allOf', 'oneOf', 'anyOf'] as const) {\n const composed = items[key] as MockSchema[] | undefined;\n if (\n Array.isArray(composed) &&\n composed.length === 1 &&\n isReference(composed[0])\n ) {\n return composed[0].$ref;\n }\n }\n return;\n}\n\nfunction getItemType(item: MockSchemaObject) {\n if (Array.isArray(item.type) && item.type.includes('null')) {\n const typesWithoutNull = item.type.filter((x) => x !== 'null');\n const itemType =\n typesWithoutNull.length === 1 ? typesWithoutNull[0] : typesWithoutNull;\n\n return itemType;\n }\n\n if (item.type) return item.type;\n if (!item.enum) return;\n\n const uniqTypes = new Set(item.enum.map((value) => typeof value));\n if (uniqTypes.size > 1) return;\n\n const type = [...uniqTypes.values()].at(0);\n if (!type) return;\n return ['string', 'number'].includes(type) ? type : undefined;\n}\n\nfunction getEnum(\n item: MockSchemaObject,\n imports: GeneratorImport[],\n context: ContextSpec,\n existingReferencedProperties: string[],\n type?: 'string' | 'number' | 'boolean',\n) {\n if (!item.enum) return '';\n const joinedEnumValues = item.enum\n .filter((e) => e !== null) // TODO fix type, e can absolutely be null\n .map((e) =>\n type === 'string' || (type === undefined && isString(e))\n ? `'${jsStringLiteralEscape(e)}'`\n : e,\n )\n .join(',');\n\n let enumValue = `[${joinedEnumValues}]`;\n if (context.output.override.enumGenerationType === EnumGeneration.ENUM) {\n if (item.isRef || existingReferencedProperties.length === 0) {\n enumValue += ` as ${item.name}${item.name.endsWith('[]') ? '' : '[]'}`;\n imports.push({ name: item.name });\n } else {\n const parentReference = existingReferencedProperties.at(-1);\n if (!parentReference) {\n return '';\n }\n\n enumValue += ` as ${parentReference}['${item.name}']`;\n if (!item.path?.endsWith('[]')) enumValue += '[]';\n imports.push({\n name: parentReference,\n });\n }\n } else {\n enumValue += ' as const';\n }\n\n // But if the value is a reference, we can use the object directly via the imports and using Object.values.\n if (item.isRef && type === 'string') {\n enumValue = `Object.values(${item.name})`;\n imports.push({\n name: item.name,\n values: true,\n });\n }\n\n return item.path?.endsWith('[]')\n ? `faker.helpers.arrayElements(${enumValue})`\n : `faker.helpers.arrayElement(${enumValue})`;\n}\n","import {\n type ContextSpec,\n type GeneratorImport,\n getRefInfo,\n isFunction,\n isReference,\n type MockOptions,\n type OpenApiSchemaObject,\n OutputMockType,\n pascal,\n} from '@orval/core';\nimport { prop } from 'remeda';\n\nimport {\n formatMockFactoryDeclaration,\n getMockFactorySignatureParts,\n} from '../../mock-types';\nimport type { MockDefinition, MockSchema, MockSchemaObject } from '../../types';\nimport { overrideVarName } from '../getters';\nimport { getMockScalar } from '../getters/scalar';\n\nfunction isRegex(key: string) {\n return key.startsWith('/') && key.endsWith('/');\n}\n\n// Drop `[]` array-items segments from a dotted JSON-pointer-ish path. Treating\n// the marker as transparent for property override matching lets a bare\n// property-name override apply wherever the property literally appears, even\n// inside arrays (#2465). Segment-based so both leading (`[].id`) and embedded\n// (`foo.[].id`) markers normalize equivalently.\nfunction stripArrayMarkerSegments(s: string): string {\n return s\n .split('.')\n .filter((seg) => seg !== '[]')\n .join('.');\n}\n\nexport function resolveMockOverride(\n properties: Record<string, unknown> | undefined = {},\n item: OpenApiSchemaObject & { name: string; path?: string },\n nonNullableOption?: boolean,\n) {\n const path = item.path ?? `#.${item.name}`;\n // Regex keys still match against the original (un-normalized) path so users\n // can opt into array-scoped targeting explicitly if ever needed.\n const normalizedPath = stripArrayMarkerSegments(path);\n const entries = Object.entries(properties);\n\n // Tier 1 — explicit matches: regex (against name or full path) and exact\n // array-transparent path. Checked first so a specific override (regex or\n // dotted path like `country.name`) always wins over the bare-name fallback.\n let property = entries.find(([key]) => {\n if (isRegex(key)) {\n const regex = new RegExp(key.slice(1, -1));\n if (regex.test(item.name) || regex.test(path)) {\n return true;\n }\n }\n\n if (`#.${stripArrayMarkerSegments(key)}` === normalizedPath) {\n return true;\n }\n\n return false;\n });\n\n // Tier 2 — bare property-name transparency (#3470): a dot-less key applies\n // wherever the property literally appears, including inside non-array nested\n // objects, mirroring the array transparency from #2465. Only reached when no\n // explicit Tier 1 key matched, so it never overrides a more specific key.\n if (!property) {\n property = entries.find(\n ([key]) => !isRegex(key) && !key.includes('.') && key === item.name,\n );\n }\n\n if (!property) {\n return;\n }\n\n return {\n value: getNullable(\n property[1] as string,\n isNullableSchema(item),\n nonNullableOption,\n ),\n imports: [],\n name: item.name,\n overrided: true,\n };\n}\n\n/** OpenAPI 3.0 `nullable: true` or 3.1 `type` unions that include `null`. */\nexport function isNullableSchema(schema: unknown): boolean {\n if (!schema || typeof schema !== 'object') {\n return false;\n }\n\n const { type, nullable } = schema as {\n type?: unknown;\n nullable?: unknown;\n };\n\n return nullable === true || (Array.isArray(type) && type.includes('null'));\n}\n\n/** When `nonNullableOption` is true (`override.mock.nonNullable`), omit the null branch. */\nexport function getNullable(\n value: string,\n nullable?: boolean,\n nonNullableOption?: boolean,\n) {\n if (!nullable || nonNullableOption) {\n return value;\n }\n\n return `faker.helpers.arrayElement([${value}, null])`;\n}\n\n/**\n * True when the active faker generator entry asks for consolidated schema\n * mock factories and the output is configured to host them (i.e. there is a\n * dedicated schemas directory we can import `index.faker` from). Used to\n * decide whether an operation factory should inline a `$ref`'d schema or\n * delegate to its `get<X>Mock` factory.\n */\nfunction shouldDelegateToSchemaFactories(context: ContextSpec): boolean {\n if (!context.output.schemas) return false;\n // The duplicate-type guard in `normalizeMocksOption` (see\n // `packages/orval/src/utils/options.ts`) ensures at most one faker entry\n // exists per output, so finding the first one that opted into schemas is\n // unambiguous today and remains correct if that guard ever loosens.\n const fakerEntry = context.output.mock.generators.find(\n (g) =>\n !isFunction(g) && g.type === OutputMockType.FAKER && g.schemas === true,\n );\n return !!fakerEntry;\n}\n\n/**\n * Predicate: this `$ref` points at a top-level `#/components/schemas/<Name>`\n * (vs. a parameter, response, or inline schema). Only those have a\n * corresponding `get<Name>Mock` factory in the consolidated faker file.\n */\nfunction isComponentsSchemaRef(refPaths: string[] | undefined): boolean {\n return (\n Array.isArray(refPaths) &&\n refPaths[0] === 'components' &&\n refPaths[1] === 'schemas'\n );\n}\n\n/**\n * Returns true when an operation- or tag-level mock override touches any\n * property declared on the referenced schema. In that case we must inline\n * the schema body so the override actually applies; the shared\n * `get<X>Mock` factory has no knowledge of operation-scoped overrides.\n *\n * Reuses `resolveMockOverride` so the same matching rules apply as for\n * regular property mocks — bare name, regex (`/.../`), and exact-path\n * (`#.foo.bar`). The parent's `path` (where the `$ref` appears in the\n * surrounding schema) gets composed into each synthetic property item so\n * exact-path overrides like `#.color.value` resolve correctly.\n */\nfunction hasOverrideTouchingSchema(\n schemaProperties: Record<string, unknown> | undefined,\n mockOptions: MockOptions | undefined,\n operationId: string,\n tags: string[],\n parentPath: string | undefined,\n): boolean {\n if (!schemaProperties) return false;\n const propertyNames = Object.keys(schemaProperties);\n if (propertyNames.length === 0) return false;\n\n const overrideBuckets: (Record<string, unknown> | undefined)[] = [\n mockOptions?.operations?.[operationId]?.properties,\n ];\n for (const tag of tags) {\n overrideBuckets.push(mockOptions?.tags?.[tag]?.properties);\n }\n\n return overrideBuckets.some((bucket) => {\n if (!bucket) return false;\n return propertyNames.some((propertyName) => {\n const synthetic = {\n name: propertyName,\n path: parentPath ? `${parentPath}.${propertyName}` : propertyName,\n } as OpenApiSchemaObject & { name: string; path?: string };\n return !!resolveMockOverride(bucket, synthetic);\n });\n });\n}\n\ninterface ResolveMockValueOptions {\n schema: MockSchema;\n operationId: string;\n mockOptions?: MockOptions;\n tags: string[];\n combine?: {\n separator: 'allOf' | 'oneOf' | 'anyOf';\n includedProperties: string[];\n };\n context: ContextSpec;\n imports: GeneratorImport[];\n // This is used to prevent recursion when combining schemas\n // When an element is added to the array, it means on this iteration, we've already seen this property\n existingReferencedProperties: string[];\n // Tracks the current contiguous `allOf` composition to break cyclic\n // inheritance; threaded through to `combineSchemasMock`.\n // See `existingReferencedAllOfRefs` docs in getters/combine.ts.\n existingReferencedAllOfRefs?: string[];\n splitMockImplementations: string[];\n allowOverride?: boolean;\n}\n\nexport function resolveMockValue({\n schema,\n mockOptions,\n operationId,\n tags,\n combine,\n context,\n imports,\n existingReferencedProperties,\n existingReferencedAllOfRefs = [],\n splitMockImplementations,\n allowOverride,\n}: ResolveMockValueOptions): MockDefinition & { type?: string } {\n if (isReference(schema)) {\n const schemaReference = schema as MockSchema & {\n path?: string;\n required?: string[];\n nullable?: boolean;\n };\n const schemaRefPath = typeof schema.$ref === 'string' ? schema.$ref : '';\n const { name, refPaths } = getRefInfo(schemaRefPath, context);\n\n const schemaRef = Array.isArray(refPaths)\n ? (prop(\n context.spec,\n // @ts-expect-error: [ts2556] refPaths are not guaranteed to be valid keys of the spec\n ...refPaths,\n ) as Partial<OpenApiSchemaObject>)\n : undefined;\n\n const newSchema = {\n ...schemaRef,\n name,\n path: schemaReference.path,\n isRef: true,\n required: [\n ...((schemaRef?.required as string[] | undefined) ?? []),\n ...(schemaReference.required ?? []),\n ],\n ...(schemaReference.nullable === undefined\n ? {}\n : { nullable: schemaReference.nullable }),\n } as MockSchemaObject;\n\n // When a discriminator parent ($ref-loaded schema with both `discriminator`\n // and `oneOf`) is being expanded inside an `allOf` chain AND the chain\n // is rooted at one of that parent's mapping targets (i.e. the current\n // schema *is* a variant via `allOf: [parent, ...extras]`), the parent's\n // `oneOf` is descriptive of the union, not additive to this specific\n // variant. Re-expanding it inlines sibling factory calls into the derived\n // variant's mock body (#2155). Drop the `oneOf` side here; the parent\n // still contributes its own `properties` and other base attributes\n // through the remaining schema fields.\n //\n // The mapping-target check guards against cases like\n // `someField: allOf: [<discriminator parent>]` (e.g. #one-of-nested\n // `Example2.expiry`), where the surrounding schema is NOT a variant of\n // the parent and we still need the full union to randomize over.\n //\n // Symmetrically with the oneOf-side fix in `combineSchemasMock` (#3429),\n // also drop the discriminator key from the parent's `properties`: each\n // variant already carries a constrained discriminator value via\n // `resolveDiscriminators`, so leaving the parent's free-choice enum in\n // would just emit dead code (immediately shadowed by the variant's\n // constrained value through spread merge).\n if (\n combine?.separator === 'allOf' &&\n newSchema.discriminator &&\n newSchema.oneOf\n ) {\n const parentDiscriminator = newSchema.discriminator as {\n propertyName?: string;\n mapping?: Record<string, string>;\n };\n const mappingTargetNames = parentDiscriminator.mapping\n ? Object.values(parentDiscriminator.mapping).map((ref) =>\n pascal(ref.split('/').pop() ?? ''),\n )\n : [];\n const expandingAsVariant = existingReferencedProperties.some((refName) =>\n mappingTargetNames.includes(refName),\n );\n\n if (expandingAsVariant) {\n const mutableSchema = newSchema as Record<string, unknown>;\n delete mutableSchema.oneOf;\n const parentProperties = newSchema.properties as\n | Record<string, unknown>\n | undefined;\n if (\n parentDiscriminator.propertyName &&\n parentProperties &&\n parentDiscriminator.propertyName in parentProperties\n ) {\n const remainingProperties = Object.fromEntries(\n Object.entries(parentProperties).filter(\n ([key]) => key !== parentDiscriminator.propertyName,\n ),\n );\n if (Object.keys(remainingProperties).length === 0) {\n delete mutableSchema.properties;\n } else {\n mutableSchema.properties = remainingProperties;\n }\n const parentRequired = newSchema.required as string[] | undefined;\n if (Array.isArray(parentRequired)) {\n const filteredRequired = parentRequired.filter(\n (key) => key !== parentDiscriminator.propertyName,\n );\n if (filteredRequired.length === 0) {\n delete mutableSchema.required;\n } else {\n mutableSchema.required = filteredRequired;\n }\n }\n }\n }\n }\n\n const newSeparator = newSchema.allOf\n ? 'allOf'\n : newSchema.oneOf\n ? 'oneOf'\n : 'anyOf';\n\n // When schema-level faker factories are being emitted (`schemas: true`),\n // delegate to `get<X>Mock()` instead of inlining the body. The factory\n // already encodes the same fields, so this both deduplicates the output\n // and lets a single source of truth drive shared mocks.\n const canDelegate =\n shouldDelegateToSchemaFactories(context) &&\n isComponentsSchemaRef(refPaths) &&\n !hasOverrideTouchingSchema(\n schemaRef?.properties as Record<string, unknown> | undefined,\n mockOptions,\n operationId,\n tags,\n schemaReference.path,\n );\n\n if (canDelegate) {\n const factoryName = `get${pascal(name)}Mock`;\n imports.push({\n name: factoryName,\n values: true,\n schemaFactory: true,\n });\n // For object-like refs the historical inline output is `{ ...body }`\n // so the spread form keeps callers (combineSchemasMock, object\n // properties) working without other changes. For everything else\n // (scalars, arrays, nullables) emit the bare call.\n //\n // A `oneOf`/`anyOf` is only object-like when *every* branch resolves to\n // an object. A composition of primitives (e.g. `number | string`) makes\n // the factory return a primitive union, which is not spreadable: emitting\n // `{ ...get<X>Mock() }` is invalid TypeScript (TS2698) and would discard\n // the value as `{}` at runtime, so it must use the bare call (#3200).\n const isObjectLike =\n newSchema.type === 'object' ||\n !!newSchema.allOf ||\n resolvesToObjectLike(newSchema, context);\n const callValue = isObjectLike\n ? `{ ...${factoryName}() }`\n : `${factoryName}()`;\n\n return {\n value: getNullable(\n callValue,\n Boolean(newSchema.nullable),\n mockOptions?.nonNullable,\n ),\n imports,\n name: newSchema.name,\n type: getType(newSchema),\n nullWrapped: Boolean(newSchema.nullable) && !mockOptions?.nonNullable,\n };\n }\n\n const scalar = getMockScalar({\n item: newSchema,\n mockOptions,\n operationId,\n tags,\n combine: combine\n ? {\n separator:\n combine.separator === 'anyOf' ? newSeparator : combine.separator,\n includedProperties:\n newSeparator === 'allOf' ? [] : combine.includedProperties,\n }\n : undefined,\n context,\n imports,\n existingReferencedProperties,\n existingReferencedAllOfRefs,\n splitMockImplementations,\n allowOverride,\n });\n if (\n scalar.value &&\n (newSchema.type === 'object' || newSchema.allOf) &&\n combine?.separator === 'oneOf'\n ) {\n const funcName = `get${pascal(operationId)}Response${pascal(newSchema.name)}Mock`;\n if (\n !splitMockImplementations.some((f) =>\n f.includes(`export const ${funcName}`),\n )\n ) {\n const discriminator = newSchema.discriminator as\n | { propertyName?: string }\n | undefined;\n const discriminatedProperty = discriminator?.propertyName;\n\n let overrideType = `Partial<${newSchema.name}>`;\n if (discriminatedProperty) {\n overrideType = `Omit<${overrideType}, '${discriminatedProperty}'>`;\n }\n\n const { param, returnType, returnCast } = getMockFactorySignatureParts(\n newSchema.name,\n mockOptions,\n {\n isOverridable: true,\n overrideType,\n },\n );\n const func = formatMockFactoryDeclaration(\n funcName,\n param,\n returnType,\n `{${scalar.value.startsWith('...') ? '' : '...'}${scalar.value}, ...${overrideVarName}}`,\n returnCast,\n { terminateStatement: true },\n );\n splitMockImplementations.push(func);\n }\n\n scalar.value = newSchema.nullable\n ? `${funcName}()`\n : `{...${funcName}()}`;\n\n scalar.imports.push({ name: newSchema.name });\n }\n\n return {\n ...scalar,\n type: getType(newSchema),\n };\n }\n\n const scalar = getMockScalar({\n item: schema,\n mockOptions,\n operationId,\n tags,\n combine,\n context,\n imports,\n existingReferencedProperties,\n existingReferencedAllOfRefs,\n splitMockImplementations,\n allowOverride,\n });\n return {\n ...scalar,\n type: getType(schema),\n };\n}\n\nfunction getType(schema: MockSchema) {\n if (isReference(schema)) {\n return;\n }\n\n return (\n (schema.type as string | undefined) ??\n (schema.properties ? 'object' : schema.items ? 'array' : undefined)\n );\n}\n\n// Whether a schema (or a `$ref` to one) ultimately produces an object mock.\n// Used to decide if a delegated `get<X>Mock()` call may be spread into an\n// object literal. Object-like schemas are `type: 'object'`, `properties`,\n// `additionalProperties` and `allOf`; a `oneOf`/`anyOf` qualifies only when\n// every branch resolves to an object. A union containing a primitive\n// (e.g. `number | string`) does not, since spreading that union is invalid\n// TypeScript. `seen` carries the `$ref`s on the current resolution path to\n// guard against self-referential compositions. A fresh copy is taken at each\n// `$ref` hop so sibling branches sharing a `$ref` don't falsely trip the guard.\nfunction resolvesToObjectLike(\n schema: MockSchema,\n context: ContextSpec,\n seen = new Set<string>(),\n): boolean {\n let resolved: Partial<OpenApiSchemaObject> | undefined;\n\n if (isReference(schema)) {\n // A non-string or already-visited `$ref` can't be resolved further here.\n if (typeof schema.$ref !== 'string' || seen.has(schema.$ref)) {\n return false;\n }\n seen = new Set(seen).add(schema.$ref);\n const { refPaths } = getRefInfo(schema.$ref, context);\n resolved = Array.isArray(refPaths)\n ? (prop(\n context.spec,\n // @ts-expect-error: refPaths are not guaranteed to be valid keys of the spec\n ...refPaths,\n ) as Partial<OpenApiSchemaObject>)\n : undefined;\n } else {\n resolved = schema as Partial<OpenApiSchemaObject>;\n }\n\n if (!resolved) {\n return false;\n }\n\n if (\n resolved.type === 'object' ||\n resolved.properties ||\n resolved.additionalProperties ||\n resolved.allOf\n ) {\n return true;\n }\n\n const branches = (resolved.oneOf ?? resolved.anyOf) as\n | MockSchema[]\n | undefined;\n if (branches && branches.length > 0) {\n return branches.every((branch) =>\n resolvesToObjectLike(branch, context, seen),\n );\n }\n\n return false;\n}\n","import {\n type ContextSpec,\n type GeneratorImport,\n getRefInfo,\n isReference,\n isSchema,\n type MockOptions,\n} from '@orval/core';\n\nimport type { MockDefinition, MockSchema, MockSchemaObject } from '../../types';\nimport { resolveMockValue } from '../resolvers';\n\nfunction getReferenceName(\n ref: string | undefined,\n context: ContextSpec,\n): string {\n if (!ref) return '';\n\n return getRefInfo(ref, context).name;\n}\n\ninterface CombineSchemasMockOptions {\n item: MockSchemaObject;\n separator: 'allOf' | 'oneOf' | 'anyOf';\n operationId: string;\n mockOptions?: MockOptions;\n tags: string[];\n combine?: {\n separator: 'allOf' | 'oneOf' | 'anyOf';\n includedProperties: string[];\n };\n context: ContextSpec;\n imports: GeneratorImport[];\n // This is used to prevent recursion when combining schemas\n // When an element is added to the array, it means on this iteration, we've already seen this property\n existingReferencedProperties: string[];\n // Schemas on the *current contiguous `allOf` composition* — the chain of\n // `allOf` bases entered to reach the schema being expanded right now. This is\n // the canonical doc for this field; other sites just point here.\n //\n // Why it exists: to break cycles built purely from top-level named schemas\n // that extend each other (`A: allOf[B]`, `B: allOf[A]`). There every hop is a\n // `$ref`, so `item.isRef` is always true and the `!item.isRef` clause in\n // `shouldSkipRef` never fires; this chain catches the repeat instead. (It is\n // narrower than `existingReferencedProperties`, which records every visited\n // `$ref` — variants and properties included.)\n //\n // Invariant: it grows only on a direct `allOf` -> `allOf` base descent, and\n // resets to `[]` when crossing into a `oneOf`/`anyOf` variant or a property\n // value. Those boundaries begin a fresh mock instance whose own `allOf` base\n // is legitimate and must still be pulled in, so keeping the chain across them\n // would wrongly skip that base. Such re-entry can't loop forever anyway —\n // `existingReferencedProperties` already bounds it.\n existingReferencedAllOfRefs?: string[];\n splitMockImplementations: string[];\n}\n\nexport function combineSchemasMock({\n item,\n separator,\n mockOptions,\n operationId,\n tags,\n combine,\n context,\n imports,\n existingReferencedProperties,\n existingReferencedAllOfRefs = [],\n splitMockImplementations,\n}: CombineSchemasMockOptions): MockDefinition {\n const combineImports: GeneratorImport[] = [];\n const includedProperties: string[] = [...(combine?.includedProperties ?? [])];\n const separatorItems = (item[separator] ?? []) as MockSchema[];\n const itemRequired = item.required as string[] | undefined;\n\n const isRefAndNotExisting =\n isReference(item) && !existingReferencedProperties.includes(item.name);\n\n // When a oneOf schema declares a discriminator with a mapping AND the\n // discriminator property is also declared on the parent's `properties`,\n // skip that property here. Each variant already encodes a constrained value\n // for it via `resolveDiscriminators`; emitting the parent's free-choice enum\n // alongside the picked variant would override the constrained value and\n // guarantee a discriminator mismatch (#2155).\n const discriminator = item.discriminator as\n | { propertyName?: string; mapping?: Record<string, string> }\n | undefined;\n const itemProperties = item.properties as Record<string, unknown> | undefined;\n const discriminatorPropertyName =\n separator === 'oneOf' &&\n discriminator?.mapping &&\n discriminator.propertyName &&\n itemProperties &&\n discriminator.propertyName in itemProperties\n ? discriminator.propertyName\n : undefined;\n\n const itemEntriesForResolve = Object.entries(item).filter(\n ([key]) => key !== separator,\n );\n if (discriminatorPropertyName && itemProperties) {\n const propertiesIdx = itemEntriesForResolve.findIndex(\n ([key]) => key === 'properties',\n );\n if (propertiesIdx !== -1) {\n const filteredProperties = Object.fromEntries(\n Object.entries(itemProperties).filter(\n ([key]) => key !== discriminatorPropertyName,\n ),\n );\n if (Object.keys(filteredProperties).length === 0) {\n itemEntriesForResolve.splice(propertiesIdx, 1);\n } else {\n itemEntriesForResolve[propertiesIdx] = [\n 'properties',\n filteredProperties,\n ];\n }\n }\n // Keep `required` in sync with the filtered properties — leaving the\n // discriminator key in `required` would describe a schema whose required\n // field is missing from `properties`.\n const requiredIdx = itemEntriesForResolve.findIndex(\n ([key]) => key === 'required',\n );\n if (requiredIdx !== -1 && Array.isArray(itemRequired)) {\n const filteredRequired = itemRequired.filter(\n (key) => key !== discriminatorPropertyName,\n );\n if (filteredRequired.length === 0) {\n itemEntriesForResolve.splice(requiredIdx, 1);\n } else {\n itemEntriesForResolve[requiredIdx] = ['required', filteredRequired];\n }\n }\n }\n\n const hasResolvableProperties = itemEntriesForResolve.some(\n ([key]) => key === 'properties',\n );\n\n const itemResolvedValue =\n isRefAndNotExisting || hasResolvableProperties\n ? resolveMockValue({\n schema: Object.fromEntries(itemEntriesForResolve) as MockSchemaObject,\n combine: {\n separator: 'allOf',\n includedProperties: [],\n },\n mockOptions,\n operationId,\n tags,\n context,\n imports,\n existingReferencedProperties,\n existingReferencedAllOfRefs,\n splitMockImplementations,\n })\n : undefined;\n\n includedProperties.push(...(itemResolvedValue?.includedProperties ?? []));\n combineImports.push(...(itemResolvedValue?.imports ?? []));\n let containsOnlyPrimitiveValues = true;\n\n const allRequiredFields: string[] = [];\n if (separator === 'allOf') {\n if (itemRequired) {\n allRequiredFields.push(...itemRequired);\n }\n for (const val of separatorItems) {\n if (isSchema(val) && val.required) {\n allRequiredFields.push(...(val.required as string[]));\n }\n }\n }\n\n let value = separator === 'allOf' ? '' : 'faker.helpers.arrayElement([';\n\n for (const val of separatorItems) {\n const refName = isReference(val) ? getReferenceName(val.$ref, context) : '';\n // For allOf: skip a base that would otherwise re-expand forever, in any of:\n // - `refName === item.name`: the schema lists itself as its own base;\n // - an already-seen *inline* base (`!item.isRef`): a circular inline allOf;\n // - a ref already on the contiguous allOf chain\n // (`existingReferencedAllOfRefs`): a top-level allOf cycle — see that\n // field's docs above.\n // Top-level refs (`item.isRef`) are otherwise allowed through so a schema\n // still inherits its base properties.\n // For oneOf/anyOf: skip a variant pointing back to an already-visited schema,\n // otherwise polymorphic recursion re-expands forever\n // (e.g. Base.Parent → oneOf [Derived → allOf [Base]]).\n const shouldSkipRef =\n separator === 'allOf'\n ? refName &&\n (refName === item.name ||\n (existingReferencedProperties.includes(refName) && !item.isRef) ||\n existingReferencedAllOfRefs.includes(refName))\n : refName && existingReferencedProperties.includes(refName);\n\n if (shouldSkipRef) {\n if (separatorItems.length === 1) {\n value = 'undefined';\n }\n continue;\n }\n\n // the required fields in this schema need to be considered\n // in the sub schema under the allOf key\n const schema = (() => {\n if (separator !== 'allOf' || allRequiredFields.length === 0) {\n return {\n ...val,\n name: item.name,\n path: item.path ?? '#',\n };\n }\n\n const valWithRequired = val as MockSchema & { required?: string[] };\n const valRequired = valWithRequired.required;\n const combinedRequired = valRequired\n ? [...allRequiredFields, ...valRequired]\n : allRequiredFields;\n\n return {\n ...val,\n name: item.name,\n path: item.path ?? '#',\n required: [...new Set(combinedRequired)],\n };\n })();\n\n const resolvedValue = resolveMockValue({\n schema,\n combine: {\n separator,\n includedProperties:\n separator === 'oneOf'\n ? (itemResolvedValue?.includedProperties ?? [])\n : includedProperties,\n },\n mockOptions,\n operationId,\n tags,\n context,\n imports,\n existingReferencedProperties,\n // Grow the chain on an allOf base hop; reset it on a oneOf/anyOf variant\n // (a fresh instance). See `existingReferencedAllOfRefs` docs above.\n existingReferencedAllOfRefs:\n separator === 'allOf' && refName\n ? [...existingReferencedAllOfRefs, refName]\n : [],\n splitMockImplementations,\n });\n\n combineImports.push(...resolvedValue.imports);\n includedProperties.push(...(resolvedValue.includedProperties ?? []));\n\n if (resolvedValue.value === '{}') {\n containsOnlyPrimitiveValues = false;\n continue;\n }\n\n if (separator === 'allOf') {\n if (resolvedValue.value.startsWith('{') || !resolvedValue.type) {\n containsOnlyPrimitiveValues = false;\n value += `...${resolvedValue.value},`;\n continue;\n }\n\n if (resolvedValue.type === 'object') {\n containsOnlyPrimitiveValues = false;\n value += resolvedValue.value.startsWith('faker')\n ? `...${resolvedValue.value},`\n : `...{${resolvedValue.value}},`;\n continue;\n }\n }\n\n value += `${resolvedValue.value},`;\n }\n // When every oneOf/anyOf variant was skipped (e.g. all $refs were already on\n // the resolution stack) the loop leaves `value` at its initial opener. Emit\n // `undefined` instead of closing it as `faker.helpers.arrayElement([])`,\n // which throws at runtime.\n const isEmptyArrayElement =\n separator !== 'allOf' && value === 'faker.helpers.arrayElement([';\n\n let finalValue =\n value === 'undefined' || isEmptyArrayElement\n ? 'undefined'\n : // containsOnlyPrimitiveValues isn't just true, it's being set to false inside the above reduce and the type system doesn't detect it\n `${separator === 'allOf' && !containsOnlyPrimitiveValues ? '{' : ''}${value}${separator === 'allOf' ? (containsOnlyPrimitiveValues ? '' : '}') : '])'}`;\n if (itemResolvedValue) {\n finalValue = finalValue.startsWith('...')\n ? `...{${finalValue}, ${itemResolvedValue.value}}`\n : `{...${finalValue}, ${itemResolvedValue.value}}`;\n }\n if (finalValue.endsWith(',')) {\n finalValue = finalValue.slice(0, Math.max(0, finalValue.length - 1));\n }\n\n return {\n value: finalValue,\n imports: combineImports,\n name: item.name,\n includedProperties,\n };\n}\n","import { camel, sanitize } from '@orval/core';\n\nconst hasParam = (path: string): boolean => /[^{]*{[\\w*_-]*}.*/.test(path);\n\nconst getRoutePath = (path: string): string => {\n const matches = /([^{]*){?([\\w*_-]*)}?(.*)/.exec(path);\n if (!matches?.length) return path; // impossible due to regexp grouping here, but for TS\n\n const prev = matches[1];\n const param = sanitize(camel(matches[2]), {\n es5keyword: true,\n underscore: true,\n dash: true,\n dot: true,\n });\n const next = hasParam(matches[3]) ? getRoutePath(matches[3]) : matches[3];\n\n return hasParam(path) ? `${prev}:${param}${next}` : `${prev}${param}${next}`;\n};\n\nexport const getRouteMSW = (route: string, baseUrl = '*') => {\n route = route.replaceAll(':', String.raw`\\\\:`);\n const splittedRoute = route.split('/');\n let resolvedRoute = baseUrl;\n\n for (const [index, path] of splittedRoute.entries()) {\n if (!path && !index) {\n continue;\n }\n\n if (!path.includes('{')) {\n resolvedRoute = `${resolvedRoute}/${path}`;\n continue;\n }\n\n resolvedRoute = `${resolvedRoute}/${getRoutePath(path)}`;\n }\n\n return resolvedRoute;\n};\n","import {\n type ContextSpec,\n generalJSTypesWithArray,\n type GeneratorImport,\n type GlobalMockOptions,\n isFunction,\n type MockOptions,\n type NormalizedOverrideOutput,\n type OpenApiDocument,\n resolveRef,\n type ResReqTypesValue,\n stringify,\n} from '@orval/core';\n\nimport { getMockScalar } from '../faker/getters';\n\nfunction getMockPropertiesWithoutFunc(\n properties:\n | Record<string, unknown>\n | ((spec: OpenApiDocument) => Record<string, unknown>),\n spec: OpenApiDocument,\n) {\n const resolvedProperties =\n typeof properties === 'function' ? properties(spec) : properties;\n const mockProperties: Record<string, string> = {};\n\n for (const [key, value] of Object.entries(resolvedProperties)) {\n const implementation = isFunction(value)\n ? `(${String(value)})()`\n : (stringify(value) ?? 'undefined');\n\n mockProperties[key] = implementation.replaceAll(\n /import_faker\\.defaults|import_faker\\.faker|_faker\\.faker/g,\n 'faker',\n );\n }\n\n return mockProperties;\n}\n\nexport function getMockWithoutFunc(\n spec: OpenApiDocument,\n override?: NormalizedOverrideOutput,\n): MockOptions {\n const operations = override?.operations\n ? (() => {\n const operationMocks: Exclude<MockOptions['operations'], undefined> =\n {};\n\n for (const [key, value] of Object.entries(override.operations)) {\n if (!value?.mock?.properties) {\n continue;\n }\n\n operationMocks[key] = {\n properties: getMockPropertiesWithoutFunc(\n value.mock.properties,\n spec,\n ),\n };\n }\n\n return operationMocks;\n })()\n : undefined;\n const tags = override?.tags\n ? (() => {\n const tagMocks: Exclude<MockOptions['tags'], undefined> = {};\n\n for (const [key, value] of Object.entries(override.tags)) {\n if (!value?.mock?.properties) {\n continue;\n }\n\n tagMocks[key] = {\n properties: getMockPropertiesWithoutFunc(\n value.mock.properties,\n spec,\n ),\n };\n }\n\n return tagMocks;\n })()\n : undefined;\n\n return {\n arrayMin: override?.mock?.arrayMin,\n arrayMax: override?.mock?.arrayMax,\n stringMin: override?.mock?.stringMin,\n stringMax: override?.mock?.stringMax,\n numberMin: override?.mock?.numberMin,\n numberMax: override?.mock?.numberMax,\n required: override?.mock?.required,\n nonNullable: override?.mock?.nonNullable,\n fractionDigits: override?.mock?.fractionDigits,\n ...(override?.mock?.properties\n ? {\n properties: getMockPropertiesWithoutFunc(\n override.mock.properties,\n spec,\n ),\n }\n : {}),\n ...(override?.mock?.format\n ? {\n format: getMockPropertiesWithoutFunc(override.mock.format, spec),\n }\n : {}),\n ...(operations ? { operations } : {}),\n ...(tags ? { tags } : {}),\n };\n}\n\nfunction getMockNumberOption(\n mockOptionsWithoutFunc: Record<string, unknown>,\n key: 'arrayMin' | 'arrayMax',\n) {\n const value = mockOptionsWithoutFunc[key];\n return typeof value === 'number' ? value : undefined;\n}\n\nfunction getMockScalarJsTypes(\n definition: string,\n mockOptionsWithoutFunc: Record<string, unknown>,\n) {\n const isArray = definition.endsWith('[]');\n const type = isArray ? definition.slice(0, -2) : definition;\n const arrayMin = getMockNumberOption(mockOptionsWithoutFunc, 'arrayMin');\n const arrayMax = getMockNumberOption(mockOptionsWithoutFunc, 'arrayMax');\n\n switch (type) {\n case 'number': {\n const numArrParts: string[] = [];\n if (arrayMin !== undefined) numArrParts.push(`min: ${arrayMin}`);\n if (arrayMax !== undefined) numArrParts.push(`max: ${arrayMax}`);\n const numArrArg =\n numArrParts.length > 0 ? `{${numArrParts.join(', ')}}` : '';\n return isArray\n ? `Array.from({length: faker.number.int(${numArrArg})}, () => faker.number.int())`\n : 'faker.number.int()';\n }\n case 'string': {\n const strArrParts: string[] = [];\n if (arrayMin !== undefined) strArrParts.push(`min: ${arrayMin}`);\n if (arrayMax !== undefined) strArrParts.push(`max: ${arrayMax}`);\n const strArrArg =\n strArrParts.length > 0 ? `{${strArrParts.join(', ')}}` : '';\n return isArray\n ? `Array.from({length: faker.number.int(${strArrArg})}, () => faker.word.sample())`\n : 'faker.word.sample()';\n }\n default: {\n return 'undefined';\n }\n }\n}\n\ninterface GetResponsesMockDefinitionOptions {\n operationId: string;\n tags: string[];\n returnType: string;\n responses: ResReqTypesValue[];\n mockOptionsWithoutFunc: Record<string, unknown>;\n transformer?: (value: unknown, definition: string) => string;\n context: ContextSpec;\n mockOptions?: GlobalMockOptions;\n splitMockImplementations: string[];\n}\n\nfunction getExampleEntries(examples: unknown): unknown[] {\n if (Array.isArray(examples)) {\n return examples;\n }\n\n if (examples && typeof examples === 'object') {\n return Object.values(examples as Record<string, unknown>);\n }\n\n return [];\n}\n\nfunction unwrapExampleValue(example: unknown): unknown {\n if (example && typeof example === 'object' && 'value' in example) {\n return (example as { value?: unknown }).value;\n }\n\n return example;\n}\n\nexport function getResponsesMockDefinition({\n operationId,\n tags,\n returnType,\n responses,\n mockOptionsWithoutFunc,\n transformer,\n context,\n mockOptions,\n splitMockImplementations,\n}: GetResponsesMockDefinitionOptions) {\n const result = {\n definitions: [] as string[],\n imports: [] as GeneratorImport[],\n };\n\n for (const response of responses) {\n const { value: definition, example, examples, imports, isRef } = response;\n let { originalSchema } = response;\n\n if (context.output.override.mock?.useExamples || mockOptions?.useExamples) {\n const exampleValue = unwrapExampleValue(\n example ??\n originalSchema?.example ??\n getExampleEntries(examples)[0] ??\n getExampleEntries(originalSchema?.examples)[0],\n );\n\n if (exampleValue !== undefined) {\n result.definitions.push(\n transformer\n ? transformer(exampleValue, returnType)\n : JSON.stringify(exampleValue),\n );\n continue;\n }\n }\n\n if (!definition || generalJSTypesWithArray.includes(definition)) {\n const value = getMockScalarJsTypes(definition, mockOptionsWithoutFunc);\n\n result.definitions.push(\n transformer ? transformer(value, returnType) : value,\n );\n continue;\n }\n\n if (!originalSchema && definition === 'Blob') {\n originalSchema = { type: 'string', format: 'binary' };\n } else if (!originalSchema) {\n continue;\n }\n\n const resolvedSchema = resolveRef(originalSchema, context).schema;\n\n const scalar = getMockScalar({\n item: {\n ...(resolvedSchema as Record<string, unknown>),\n name: definition,\n ...(context.output.override.enumGenerationType === 'enum' && isRef\n ? { isRef: true }\n : {}),\n },\n imports,\n mockOptions: mockOptionsWithoutFunc,\n operationId,\n tags,\n context,\n existingReferencedProperties: [],\n splitMockImplementations,\n allowOverride: true,\n });\n\n result.imports.push(...scalar.imports);\n result.definitions.push(\n transformer ? transformer(scalar.value, returnType) : scalar.value,\n );\n }\n\n return result;\n}\n\ninterface GetMockDefinitionOptions {\n operationId: string;\n tags: string[];\n returnType: string;\n responses: ResReqTypesValue[];\n imports: GeneratorImport[];\n override: NormalizedOverrideOutput;\n transformer?: (value: unknown, definition: string) => string;\n context: ContextSpec;\n mockOptions?: GlobalMockOptions;\n splitMockImplementations: string[];\n}\n\nexport function getMockDefinition({\n operationId,\n tags,\n returnType,\n responses,\n override,\n transformer,\n context,\n mockOptions,\n splitMockImplementations,\n}: GetMockDefinitionOptions) {\n const mockOptionsWithoutFunc = getMockWithoutFunc(context.spec, override);\n\n const { definitions, imports } = getResponsesMockDefinition({\n operationId,\n tags,\n returnType,\n responses,\n mockOptionsWithoutFunc,\n transformer,\n context,\n mockOptions,\n splitMockImplementations,\n });\n\n return {\n definition: '[' + definitions.join(', ') + ']',\n definitions,\n imports,\n };\n}\n\nexport function getMockOptionsDataOverride(\n operationTags: string[],\n operationId: string,\n override: NormalizedOverrideOutput,\n) {\n const responseOverride =\n override.operations[operationId]?.mock?.data ??\n operationTags\n .map((operationTag) => override.tags[operationTag]?.mock?.data)\n .find((e) => e !== undefined);\n const implementation = isFunction(responseOverride)\n ? `(${String(responseOverride)})()`\n : stringify(responseOverride);\n\n return implementation?.replaceAll(\n /import_faker\\.defaults|import_faker\\.faker|_faker\\.faker/g,\n 'faker',\n );\n}\n","import {\n type ClientMockGeneratorBuilder,\n escapeRegExp,\n generateDependencyImports,\n type GenerateMockImports,\n type GeneratorDependency,\n type GeneratorImport,\n type GeneratorOptions,\n type GeneratorVerbOptions,\n type GlobalMockOptions,\n isFunction,\n isMswMock,\n isObject,\n pascal,\n type ResReqTypesValue,\n} from '@orval/core';\n\nimport { getDelay } from '../delay';\nimport { getRouteMSW, overrideVarName } from '../faker/getters';\nimport {\n applyStrictMockReturnType,\n collectStrictMockSchemaTypeNamesFromImplementation,\n formatMockFactoryDeclaration,\n getMockFactorySignatureParts,\n getSchemaTypeNamesFromResponses,\n getSimpleSchemaReturnType,\n isStrictMock,\n mergeStrictMockSchemaTypeNames,\n} from '../mock-types';\nimport { getMockDefinition, getMockOptionsDataOverride } from './mocks';\n\nfunction getMSWDependencies(\n options?: GlobalMockOptions,\n): GeneratorDependency[] {\n const locale = options?.locale;\n\n const fakerDependency: GeneratorDependency = {\n exports: [{ name: 'faker', values: true }],\n dependency: locale ? `@faker-js/faker/locale/${locale}` : '@faker-js/faker',\n };\n\n const hasDelay =\n options && isMswMock(options) ? options.delay !== false : true;\n\n const exports = [\n { name: 'http', values: true },\n { name: 'HttpResponse', values: true },\n { name: 'RequestHandlerOptions', values: false },\n ];\n\n if (hasDelay) {\n exports.push({ name: 'delay', values: true });\n }\n\n return [{ exports, dependency: 'msw' }, fakerDependency];\n}\n\nexport const generateMSWImports: GenerateMockImports = ({\n implementation,\n imports,\n projectName,\n hasSchemaDir,\n isAllowSyntheticDefaultImports,\n options,\n}) => {\n return generateDependencyImports(\n implementation,\n [...getMSWDependencies(options), ...imports],\n projectName,\n hasSchemaDir,\n isAllowSyntheticDefaultImports,\n );\n};\n\nfunction generateDefinition(\n name: string,\n route: string,\n getResponseMockFunctionNameBase: string,\n handlerNameBase: string,\n { operationId, response, verb, tags }: GeneratorVerbOptions,\n { override, context, mock }: GeneratorOptions,\n returnType: string,\n status: string,\n responseImports: GeneratorImport[],\n responses: ResReqTypesValue[],\n contentTypes: string[],\n splitMockImplementations: string[],\n) {\n const oldSplitMockImplementations = [...splitMockImplementations];\n const { definitions, definition, imports } = getMockDefinition({\n operationId,\n tags,\n returnType,\n responses,\n imports: responseImports,\n override,\n context,\n mockOptions: isFunction(mock) ? undefined : mock,\n splitMockImplementations,\n });\n\n const mockData = getMockOptionsDataOverride(tags, operationId, override);\n\n let value = '';\n\n if (mockData) {\n value = mockData;\n } else if (definitions.length > 1) {\n value = `faker.helpers.arrayElement(${definition})`;\n } else if (definitions[0]) {\n value = definitions[0];\n }\n\n const isResponseOverridable = value.includes(overrideVarName);\n const isTextLikeContentType = (ct: string) =>\n ct.startsWith('text/') || ct === 'application/xml' || ct.endsWith('+xml');\n const isTypeExactlyString = (typeExpr: string) =>\n typeExpr.trim().replaceAll(/^\\(+|\\)+$/g, '') === 'string';\n const isUnionContainingString = (typeExpr: string) =>\n typeExpr\n .split('|')\n .map((part) => part.trim().replaceAll(/^\\(+|\\)+$/g, ''))\n .includes('string');\n const isBinaryLikeContentType = (ct: string) =>\n ct === 'application/octet-stream' ||\n ct === 'application/pdf' ||\n ct.startsWith('image/') ||\n ct.startsWith('audio/') ||\n ct.startsWith('video/') ||\n ct.startsWith('font/');\n\n const preferredContentType = isFunction(mock)\n ? undefined\n : (\n mock as { preferredContentType?: string } | undefined\n )?.preferredContentType?.toLowerCase();\n // match preferredContentType against `responses` (not the wider `contentTypes` which mixes success and error MIMEs).\n const preferredContentTypeMatch = preferredContentType\n ? responses.find(\n (r) => r.contentType.toLowerCase() === preferredContentType,\n )?.contentType\n : undefined;\n const contentTypesByPreference = preferredContentTypeMatch\n ? [preferredContentTypeMatch]\n : contentTypes;\n const responsesByPreference = preferredContentTypeMatch\n ? responses.filter((r) => r.contentType === preferredContentTypeMatch)\n : responses;\n\n const hasTextLikeContentType = contentTypes.some((ct) =>\n isTextLikeContentType(ct),\n );\n const isExactlyStringReturnType = isTypeExactlyString(returnType);\n\n // Keep text helpers for exact string success return types whenever a text-like\n // media type is available in the declared content types. This prevents a\n // preferredContentType that matches an error media type from forcing\n // HttpResponse.json() for text/plain success responses.\n const isTextResponse =\n (isExactlyStringReturnType && hasTextLikeContentType) ||\n contentTypesByPreference.some((ct) => isTextLikeContentType(ct));\n const isSchemaBinary = (r: ResReqTypesValue) =>\n r.originalSchema?.format === 'binary' ||\n (r.originalSchema?.contentMediaType === 'application/octet-stream' &&\n !r.originalSchema.contentEncoding);\n const isBinaryResponse =\n contentTypesByPreference.some((ct) => isBinaryLikeContentType(ct)) ||\n responsesByPreference.some((r) => isSchemaBinary(r));\n // Bare ref names of schema-binary responses (include alias for collision-renamed imports).\n const binaryRefNames = responsesByPreference\n .filter((r) => isSchemaBinary(r))\n .flatMap((r) =>\n r.imports.flatMap((imp) =>\n imp.alias ? [imp.name, imp.alias] : [imp.name],\n ),\n );\n const isReturnHttpResponse = value && value !== 'undefined';\n\n const getResponseMockFunctionName = `${getResponseMockFunctionNameBase}${pascal(\n name,\n )}`;\n const handlerName = `${handlerNameBase}${pascal(name)}`;\n\n const addedSplitMockImplementations = splitMockImplementations.slice(\n oldSplitMockImplementations.length,\n );\n splitMockImplementations.push(...addedSplitMockImplementations);\n const mockImplementations =\n addedSplitMockImplementations.length > 0\n ? `${addedSplitMockImplementations.join('\\n\\n')}\\n\\n`\n : '';\n\n const binaryTypeRewriteRegex = new RegExp(\n String.raw`\\b(?:${['Blob', ...binaryRefNames].map((n) => escapeRegExp(n)).join('|')})\\b`,\n 'g',\n );\n const mockReturnType = isBinaryResponse\n ? returnType.replaceAll(binaryTypeRewriteRegex, 'ArrayBuffer')\n : returnType;\n\n // Detect when the return type is a union containing void (e.g. \"Resource | void\"\n // from endpoints with both 200 JSON and 204 No Content responses). In this case\n // we need runtime branching so that void responses use `new HttpResponse(null)`\n // instead of `HttpResponse.json()` which does not accept void/undefined.\n const isVoidUnionType =\n mockReturnType !== 'void' &&\n mockReturnType.split('|').some((part) => part.trim() === 'void');\n const noContentStatusCode = isVoidUnionType\n ? (responses.find((r) => r.value === 'void')?.key ?? '204')\n : undefined;\n const nonVoidMockReturnType = isVoidUnionType\n ? mockReturnType\n .split('|')\n .filter((part) => part.trim() !== 'void')\n .join(' | ')\n .trim()\n : mockReturnType;\n\n const hasJsonContentType = contentTypesByPreference.some(\n (ct) => ct.includes('json') || ct.includes('+json'),\n );\n const hasStringReturnType =\n isTypeExactlyString(mockReturnType) ||\n isUnionContainingString(mockReturnType);\n const overrideResponseType = `Partial<Extract<${nonVoidMockReturnType}, object>>`;\n const shouldPreferJsonResponse = hasJsonContentType && !hasStringReturnType;\n\n // When the return type is a union containing both string and structured types\n // (e.g. `string | Pet`) AND both text-like and JSON content types are available,\n // we need runtime branching to pick the correct HttpResponse helper based on\n // the actual resolved value type. Without this, objects could be JSON.stringify'd\n // and served under a text-like Content-Type (e.g. xml/html/plain), which is\n // semantically incorrect for structured JSON data.\n const needsRuntimeContentTypeSwitch =\n isTextResponse &&\n hasJsonContentType &&\n hasStringReturnType &&\n mockReturnType !== 'string';\n\n const mockOptionsFromOverride = override.mock;\n const strictMock = isStrictMock(mockOptionsFromOverride);\n const schemaTypeNames = strictMock\n ? getSchemaTypeNamesFromResponses(responses)\n : [];\n const strictMockReturnType = strictMock\n ? applyStrictMockReturnType(nonVoidMockReturnType, schemaTypeNames)\n : nonVoidMockReturnType;\n const simpleSchemaReturnType = strictMock\n ? getSimpleSchemaReturnType(nonVoidMockReturnType, schemaTypeNames)\n : undefined;\n\n let mockFactoryParam = '';\n let mockFactoryReturnType = nonVoidMockReturnType;\n let mockFactoryReturnCast = '';\n\n if (isResponseOverridable) {\n if (strictMock && simpleSchemaReturnType) {\n const signature = getMockFactorySignatureParts(\n simpleSchemaReturnType,\n mockOptionsFromOverride,\n {\n isOverridable: true,\n overrideType: overrideResponseType,\n },\n );\n mockFactoryParam = signature.param;\n mockFactoryReturnType = signature.returnType;\n mockFactoryReturnCast = signature.returnCast;\n } else {\n mockFactoryParam = `overrideResponse: ${overrideResponseType} = {}`;\n mockFactoryReturnType = strictMock\n ? strictMockReturnType\n : nonVoidMockReturnType;\n }\n } else if (strictMock) {\n mockFactoryReturnType = strictMockReturnType;\n }\n\n const mockImplementation = isReturnHttpResponse\n ? `${mockImplementations}${formatMockFactoryDeclaration(\n getResponseMockFunctionName,\n mockFactoryParam,\n mockFactoryReturnType,\n value,\n mockFactoryReturnCast,\n { omitReturnType: Boolean(mockData) },\n )}\\n\\n`\n : mockImplementations;\n\n const delay = getDelay(override, isFunction(mock) ? undefined : mock);\n const infoParam = 'info';\n const resolvedResponseExpr = `overrideResponse !== undefined\n ? (typeof overrideResponse === \"function\" ? await overrideResponse(${infoParam}) : overrideResponse)\n : ${getResponseMockFunctionName}()`;\n\n const statusCode = status === 'default' ? 200 : status.replace(/XX$/, '00');\n\n // Determine the preferred non-JSON content type for binary responses\n const binaryContentType =\n (preferredContentTypeMatch &&\n isBinaryLikeContentType(preferredContentTypeMatch)\n ? preferredContentTypeMatch\n : contentTypes.find((ct) => isBinaryLikeContentType(ct))) ??\n 'application/octet-stream';\n\n // Pick the most specific MSW response helper based on the first\n // text-like content type so the correct Content-Type header is set.\n // MSW provides HttpResponse.xml() for application/xml and +xml,\n // HttpResponse.html() for text/html, and HttpResponse.text() for\n // all other text/* types.\n const shouldIgnorePreferredForTextHelper =\n isExactlyStringReturnType &&\n !!preferredContentTypeMatch &&\n !isTextLikeContentType(preferredContentTypeMatch) &&\n hasTextLikeContentType;\n const firstTextCt = shouldIgnorePreferredForTextHelper\n ? contentTypes.find((ct) => isTextLikeContentType(ct))\n : contentTypesByPreference.find((ct) => isTextLikeContentType(ct));\n const textHelper =\n firstTextCt === 'application/xml' || firstTextCt?.endsWith('+xml')\n ? 'xml'\n : firstTextCt === 'text/html'\n ? 'html'\n : 'text';\n\n let responseBody: string;\n // Use a prelude to evaluate the override expression once into a temp variable\n // (the expression contains `await` so must not be duplicated). Only emit it\n // when we actually generate a `*ResponseMock()` helper — otherwise the\n // prelude would reference a function that doesn't exist (issue #3270).\n let responsePrelude = '';\n if (isReturnHttpResponse) {\n if (isBinaryResponse) {\n responsePrelude = `const binaryBody = ${resolvedResponseExpr};`;\n } else if (isVoidUnionType || needsRuntimeContentTypeSwitch) {\n responsePrelude = `const resolvedBody = ${resolvedResponseExpr};`;\n } else if (isTextResponse && !shouldPreferJsonResponse) {\n responsePrelude = `const resolvedBody = ${resolvedResponseExpr};\n const textBody = typeof resolvedBody === 'string' ? resolvedBody : JSON.stringify(resolvedBody ?? null);`;\n }\n }\n if (!isReturnHttpResponse) {\n responseBody = `new HttpResponse(null,\n { status: ${statusCode}\n })`;\n } else if (isBinaryResponse) {\n responseBody = `HttpResponse.arrayBuffer(\n binaryBody instanceof ArrayBuffer\n ? binaryBody\n : new ArrayBuffer(0),\n { status: ${statusCode},\n headers: { 'Content-Type': '${binaryContentType}' }\n })`;\n } else if (isVoidUnionType) {\n // Runtime branching for void union types (e.g. 200 JSON + 204 No Content).\n // When the resolved body is undefined, return an empty response with the\n // no-content status code; otherwise use the appropriate response helper.\n let nonVoidBody: string;\n if (needsRuntimeContentTypeSwitch) {\n nonVoidBody = `typeof resolvedBody === 'string'\n ? HttpResponse.${textHelper}(resolvedBody, { status: ${statusCode} })\n : HttpResponse.json(resolvedBody, { status: ${statusCode} })`;\n } else if (isTextResponse && !shouldPreferJsonResponse) {\n nonVoidBody = `HttpResponse.${textHelper}(\n typeof resolvedBody === 'string' ? resolvedBody : JSON.stringify(resolvedBody ?? null),\n { status: ${statusCode} })`;\n } else {\n nonVoidBody = `HttpResponse.json(resolvedBody, { status: ${statusCode} })`;\n }\n responseBody = `resolvedBody === undefined\n ? new HttpResponse(null, { status: ${noContentStatusCode} })\n : ${nonVoidBody}`;\n } else if (needsRuntimeContentTypeSwitch) {\n // Runtime branching: when the resolved value is a string, use the\n // appropriate text helper; otherwise fall back to HttpResponse.json()\n // so objects are never JSON.stringify'd under a text/xml Content-Type.\n responseBody = `typeof resolvedBody === 'string'\n ? HttpResponse.${textHelper}(resolvedBody, { status: ${statusCode} })\n : HttpResponse.json(resolvedBody, { status: ${statusCode} })`;\n } else if (isTextResponse && !shouldPreferJsonResponse) {\n responseBody = `HttpResponse.${textHelper}(textBody,\n { status: ${statusCode}\n })`;\n } else {\n responseBody = `HttpResponse.json(${resolvedResponseExpr},\n { status: ${statusCode}\n })`;\n }\n\n const infoType = `Parameters<Parameters<typeof http.${verb}>[1]>[0]`;\n\n const handlerImplementation = `\nexport const ${handlerName} = (overrideResponse?: ${mockReturnType} | ((${infoParam}: ${infoType}) => Promise<${mockReturnType}> | ${mockReturnType}), options?: RequestHandlerOptions) => {\n return http.${verb}('${route}', async (${infoParam}: ${infoType}) => {${\n delay === false\n ? ''\n : `await delay(${isFunction(delay) ? `(${String(delay)})()` : String(delay)});`\n }\n ${isReturnHttpResponse ? '' : `if (typeof overrideResponse === 'function') {await overrideResponse(info); }`}\n ${responsePrelude}\n return ${responseBody}\n }, options)\n}\\n`;\n\n const includeResponseImports = [\n ...imports,\n ...response.imports.filter((r) => {\n // Only keep imports referenced in the mock. Aliased imports\n // (`Foo as __Foo`) reference the alias rather than the bare name, so\n // match against either. Mirrors `addDependency` in core/generators/imports.ts (#3269).\n const searchWords = [r.alias, r.name]\n .filter((p): p is string => Boolean(p?.length))\n .map((part) => escapeRegExp(part))\n .join('|');\n if (!searchWords) {\n return false;\n }\n const reg = new RegExp(String.raw`\\b(${searchWords})\\b`);\n return reg.test(handlerImplementation) || reg.test(mockImplementation);\n }),\n ];\n\n return {\n implementation: {\n function: mockImplementation,\n handlerName: handlerName,\n handler: handlerImplementation,\n },\n imports: includeResponseImports,\n strictMockSchemaTypeNames: strictMock\n ? mergeStrictMockSchemaTypeNames(\n schemaTypeNames,\n // Nested split factories: see collectStrictMockSchemaTypeNamesFromImplementation\n // re regex-coupling note — prefer threading names from getters long-term.\n collectStrictMockSchemaTypeNamesFromImplementation(\n mockImplementation,\n ),\n )\n : undefined,\n };\n}\n\nexport function generateMSW(\n generatorVerbOptions: GeneratorVerbOptions,\n generatorOptions: GeneratorOptions,\n): ClientMockGeneratorBuilder {\n const { pathRoute, override, mock } = generatorOptions;\n const { operationName, response } = generatorVerbOptions;\n\n const overrideBaseUrl =\n override.mock && 'baseUrl' in override.mock\n ? (override.mock as { baseUrl?: string }).baseUrl\n : undefined;\n const mockBaseUrl = mock && isMswMock(mock) ? mock.baseUrl : undefined;\n const route = getRouteMSW(pathRoute, overrideBaseUrl ?? mockBaseUrl);\n\n // Derive names from operationName (not operationId): splitByContentType keeps\n // one operationId across variants but suffixes operationName (e.g. *WithJson /\n // *WithFormData), and the client side already names functions from it. Using\n // operationId here would emit duplicate handler names and break tsc. See #3342.\n const handlerName = `get${pascal(operationName)}MockHandler`;\n const getResponseMockFunctionName = `get${pascal(operationName)}ResponseMock`;\n\n const splitMockImplementations: string[] = [];\n\n const baseDefinition = generateDefinition(\n '',\n route,\n getResponseMockFunctionName,\n handlerName,\n generatorVerbOptions,\n generatorOptions,\n response.definition.success,\n response.types.success[0]?.key ?? '200',\n response.imports,\n response.types.success,\n response.contentTypes,\n splitMockImplementations,\n );\n\n const mockImplementations = [baseDefinition.implementation.function];\n const handlerImplementations = [baseDefinition.implementation.handler];\n const imports = [...baseDefinition.imports];\n const strictMockSchemaTypeNames = new Set(\n baseDefinition.strictMockSchemaTypeNames,\n );\n\n if (\n generatorOptions.mock &&\n isObject(generatorOptions.mock) &&\n generatorOptions.mock.generateEachHttpStatus\n ) {\n for (const statusResponse of [\n ...response.types.success,\n ...response.types.errors,\n ]) {\n const definition = generateDefinition(\n statusResponse.key,\n route,\n getResponseMockFunctionName,\n handlerName,\n generatorVerbOptions,\n generatorOptions,\n statusResponse.value,\n statusResponse.key,\n response.imports,\n [statusResponse],\n [statusResponse.contentType],\n splitMockImplementations,\n );\n mockImplementations.push(definition.implementation.function);\n handlerImplementations.push(definition.implementation.handler);\n imports.push(...definition.imports);\n for (const name of definition.strictMockSchemaTypeNames ?? []) {\n strictMockSchemaTypeNames.add(name);\n }\n }\n }\n\n const aggregatedStrictNames = [...strictMockSchemaTypeNames];\n\n return {\n implementation: {\n function: mockImplementations.join('\\n'),\n handlerName,\n handler: handlerImplementations.join('\\n'),\n },\n imports: imports,\n strictMockSchemaTypeNames:\n aggregatedStrictNames.length > 0 ? aggregatedStrictNames : undefined,\n };\n}\n","import {\n type ClientMockGeneratorBuilder,\n type ContextSpec,\n generateDependencyImports,\n type GenerateMockImports,\n type GeneratorDependency,\n type GeneratorImport,\n type GeneratorOptions,\n type GeneratorSchema,\n type GeneratorVerbOptions,\n type GlobalMockOptions,\n pascal,\n} from '@orval/core';\n\nimport {\n formatMockFactoryDeclaration,\n getMockFactorySignatureParts,\n isStrictMock,\n} from '../mock-types';\nimport { generateMSW } from '../msw';\nimport { getMockWithoutFunc } from '../msw/mocks';\nimport { getMockScalar } from './getters';\n\nfunction getFakerDependencies(\n options?: GlobalMockOptions,\n): GeneratorDependency[] {\n const locale = options?.locale;\n\n return [\n {\n exports: [{ name: 'faker', values: true }],\n dependency: locale\n ? `@faker-js/faker/locale/${locale}`\n : '@faker-js/faker',\n },\n ];\n}\n\n/**\n * Emits the import header for a faker-only mock file. Faker output never\n * imports from `msw`, so this only emits `import { faker } from '@faker-js/faker'`\n * (or the locale-scoped variant) plus any operation-specific imports.\n */\nexport const generateFakerImports: GenerateMockImports = ({\n implementation,\n imports,\n projectName,\n hasSchemaDir,\n isAllowSyntheticDefaultImports,\n options,\n}) => {\n return generateDependencyImports(\n implementation,\n [...getFakerDependencies(options), ...imports],\n projectName,\n hasSchemaDir,\n isAllowSyntheticDefaultImports,\n );\n};\n\n/**\n * Generates the faker-only mock output for a single operation. This reuses\n * the response-factory portion of {@link generateMSW} and strips out the\n * handler and aggregator entries so callers can write a standalone\n * `<file>.faker.ts` with no `msw` dependency.\n */\nexport function generateFaker(\n generatorVerbOptions: GeneratorVerbOptions,\n generatorOptions: GeneratorOptions,\n): ClientMockGeneratorBuilder {\n const result = generateMSW(generatorVerbOptions, generatorOptions);\n return {\n implementation: {\n function: result.implementation.function,\n handler: '',\n handlerName: '',\n },\n imports: result.imports,\n strictMockSchemaTypeNames: result.strictMockSchemaTypeNames,\n };\n}\n\nexport interface GenerateFakerForSchemasResult {\n implementation: string;\n imports: GeneratorImport[];\n strictMockSchemaTypeNames?: string[];\n}\n\n/**\n * Builds the contents of a consolidated faker mock file for every entry under\n * `components/schemas`. Each schema produces a `get<SchemaName>Mock(overrides)`\n * factory in the spirit of the existing per-operation `get<Op>ResponseMock`\n * helpers. Opt in via `mock.generators: [{ type: 'faker', schemas: true }]`.\n *\n * Returns the function bodies plus any `GeneratorImport` references the\n * factories need so the writer can hoist them into the file header.\n */\nexport function generateFakerForSchemas(\n schemas: GeneratorSchema[],\n context: ContextSpec,\n options: GlobalMockOptions,\n): GenerateFakerForSchemasResult {\n const factories: string[] = [];\n const strictMockTypeNames = new Set<string>();\n const allImports: GeneratorImport[] = [];\n // Shared across schemas so we emit each helper (e.g. an `allOf`-discriminator\n // sub-factory) once even when several schemas reference the same union arm.\n const splitMockImplementations: string[] = [];\n\n // Names of the factories we're about to emit in this file. When the\n // delegation logic in `resolveMockValue` produces a `getXMock()` call for\n // a `components/schemas` ref, it pushes a `{ schemaFactory: true }` import\n // — but if `X` is itself one of the schemas being generated here, the\n // factory lives in this very file and must not be imported.\n const localFactoryNames = new Set(\n schemas.filter((s) => !!s.schema).map((s) => `get${pascal(s.name)}Mock`),\n );\n\n // Serialize override.mock.properties functions the same way operation\n // response mocks do (IIFE expressions), not raw function references.\n const mockOptions = getMockWithoutFunc(context.spec, context.output.override);\n\n for (const generatorSchema of schemas) {\n const { name, schema } = generatorSchema;\n if (!schema) continue;\n\n const factoryName = `get${pascal(name)}Mock`;\n const factoryImports: GeneratorImport[] = [];\n\n const result = getMockScalar({\n item: {\n ...(schema as Record<string, unknown>),\n name,\n } as Parameters<typeof getMockScalar>[0]['item'],\n imports: factoryImports,\n mockOptions,\n operationId: name,\n tags: [],\n context,\n existingReferencedProperties: [],\n splitMockImplementations,\n allowOverride: true,\n isRef: false,\n } as Parameters<typeof getMockScalar>[0]);\n\n allImports.push(...result.imports, ...factoryImports);\n\n // Match the behavior of operation-response factories: only declare the\n // `overrideResponse` parameter when the generated expression actually\n // references it (top-level object schemas). Array / scalar / enum\n // schemas don't splice an override, so we omit the parameter rather than\n // emit a `Partial<Pet[]>` signature TS can't satisfy.\n const typeName = pascal(name);\n const isOverridable = result.value.includes('overrideResponse');\n const { param, returnType, returnCast } = getMockFactorySignatureParts(\n typeName,\n mockOptions,\n {\n isOverridable,\n overrideType: `Partial<${typeName}>`,\n },\n );\n const factory = formatMockFactoryDeclaration(\n factoryName,\n param,\n returnType,\n result.value,\n returnCast,\n );\n\n if (isStrictMock(mockOptions)) {\n strictMockTypeNames.add(typeName);\n }\n\n factories.push(factory);\n\n // Track the schema type itself as an import so writers can reference it\n // from the generated factory file.\n allImports.push({\n name: pascal(name),\n values: false,\n });\n }\n\n // De-duplicate imports by name+alias so the header doesn't list the same\n // schema twice when multiple factories reference it. \"Any value wins\":\n // if the same name is pushed both as a type-only import and as a value\n // import (e.g. an enum used both in an `as Foo` cast and an\n // `Object.values(Foo)` call), we keep the value form. A plain\n // `import { Foo }` works in both annotation and runtime positions, so\n // emitting the value form avoids `TS1361: 'X' cannot be used as a value\n // because it was imported using 'import type'`.\n const mergedImports = new Map<string, GeneratorImport>();\n for (const imp of allImports) {\n // Drop self-references: `get<Schema>Mock` factories generated in this\n // very file (pushed when delegation in `resolveMockValue` produced a\n // local factory call). Without this we'd emit\n // `import { getPetMock } from '.'` next to its own `export const`.\n if (imp.schemaFactory && localFactoryNames.has(imp.name)) continue;\n\n const key = `${imp.name}::${imp.alias ?? ''}`;\n const existing = mergedImports.get(key);\n if (!existing) {\n mergedImports.set(key, imp);\n continue;\n }\n if (!existing.values && imp.values) {\n mergedImports.set(key, imp);\n }\n }\n const uniqueImports = [...mergedImports.values()];\n\n // Reference `options` so unused-parameter rules don't complain; future\n // schema-specific behavior (e.g. naming convention) will read from it.\n void options;\n\n // Helper factories from union/discriminator handling (`splitMockImplementations`)\n // are emitted before the public `get<Schema>Mock` factories so call sites\n // declared after them resolve cleanly without TS hoisting concerns.\n const implementation = [...splitMockImplementations, ...factories]\n .filter(Boolean)\n .join('\\n\\n');\n\n const aggregatedStrictNames = [...strictMockTypeNames];\n\n return {\n implementation,\n imports: uniqueImports,\n strictMockSchemaTypeNames:\n aggregatedStrictNames.length > 0 ? aggregatedStrictNames : undefined,\n };\n}\n","import type {\n FakerMockOptions,\n GenerateMockImports,\n GeneratorOptions,\n GeneratorVerbOptions,\n GlobalMockOptions,\n MswMockOptions,\n} from '@orval/core';\nimport { OutputMockType } from '@orval/core';\n\nimport { generateFaker, generateFakerImports } from './faker';\nimport { generateMSW, generateMSWImports } from './msw';\n\nexport const DEFAULT_MSW_OPTIONS: MswMockOptions = {\n type: OutputMockType.MSW,\n useExamples: false,\n};\n\nexport const DEFAULT_FAKER_OPTIONS: FakerMockOptions = {\n type: OutputMockType.FAKER,\n useExamples: false,\n schemas: false,\n operationResponses: true,\n};\n\n/**\n * Returns the default GlobalMockOptions for a given mock type. Used when\n * normalizing user-provided entries in `output.mock.generators` so callers\n * can omit the per-type defaults.\n */\nexport const getDefaultMockOptionsForType = (\n type: GlobalMockOptions['type'],\n): GlobalMockOptions => {\n switch (type) {\n case OutputMockType.FAKER: {\n return DEFAULT_FAKER_OPTIONS;\n }\n case OutputMockType.MSW: {\n return DEFAULT_MSW_OPTIONS;\n }\n }\n};\n\n/**\n * Dispatches mock-file imports generation to the appropriate generator based\n * on the `OutputMockType` discriminator on the mock options.\n */\nexport const generateMockImports: GenerateMockImports = (importOptions) => {\n switch (importOptions.options?.type) {\n case OutputMockType.FAKER: {\n return generateFakerImports(importOptions);\n }\n default: {\n return generateMSWImports(importOptions);\n }\n }\n};\n\n/**\n * Dispatches per-operation mock generation to the appropriate generator\n * based on the `OutputMockType` discriminator. Each entry in\n * `output.mock.generators` is dispatched here individually.\n */\nexport function generateMock(\n generatorVerbOptions: GeneratorVerbOptions,\n generatorOptions: Omit<GeneratorOptions, 'mock'> & {\n mock: GlobalMockOptions;\n },\n) {\n const { context } = generatorOptions;\n const previousActiveMockOutputType = context.activeMockOutputType;\n context.activeMockOutputType = generatorOptions.mock.type;\n\n try {\n switch (generatorOptions.mock.type) {\n case OutputMockType.FAKER: {\n return generateFaker(generatorVerbOptions, generatorOptions);\n }\n default: {\n return generateMSW(generatorVerbOptions, generatorOptions);\n }\n }\n } finally {\n context.activeMockOutputType = previousActiveMockOutputType;\n }\n}\n\nexport type { GenerateFakerForSchemasResult } from './faker';\nexport {\n generateFaker,\n generateFakerForSchemas,\n generateFakerImports,\n} from './faker';\nexport {\n buildStrictMockTypeFileHeader,\n dedupeStrictMockTypeDeclarations,\n} from './mock-types';\nexport { generateMSW, generateMSWImports } from './msw';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["getReferenceName","valWithRequired"],"sources":["../src/mock-types.ts","../src/faker/imports.ts","../src/delay.ts","../src/faker/compatible-v9.ts","../src/faker/constants.ts","../src/faker/getters/object.ts","../src/faker/getters/array-item-factory.ts","../src/faker/format-example-value.ts","../src/faker/getters/scalar.ts","../src/faker/resolvers/value.ts","../src/faker/getters/combine.ts","../src/faker/getters/route.ts","../src/msw/mocks.ts","../src/msw/index.ts","../src/faker/index.ts","../src/index.ts"],"sourcesContent":["import {\n escapeRegExp,\n type ContextSpec,\n type FinalizeMockImplementationOptions,\n type MockOptions,\n type OpenApiReferenceObject,\n type OpenApiSchemaObject,\n resolveRef,\n type ResReqTypesValue,\n type StrictMockSchemaKind,\n} from '@orval/core';\n\nexport type { StrictMockSchemaKind };\n\nexport function isStrictMock(\n mockOptions?: Pick<MockOptions, 'required' | 'nonNullable'>,\n): boolean {\n return Boolean(\n mockOptions && mockOptions.required && mockOptions.nonNullable,\n );\n}\n\nexport function getStrictMockTypeName(typeName: string): string {\n return `${typeName}Mock`;\n}\n\nexport function getStrictMockHelperTypeDeclarations(): string {\n return `export type KeysWithNull<O> = {\n [K in keyof O]-?: null extends O[K] ? K : never;\n}[keyof O];\n\nexport type MockWithNullableOverrides<\n T,\n O extends Partial<T>,\n M extends Record<keyof T, unknown>,\n> = Omit<M, Extract<KeysWithNull<O>, keyof T>> & {\n [K in Extract<KeysWithNull<O>, keyof T>]: M[K] | null;\n};`;\n}\n\nexport function isSchemaNullableAtRoot(schema?: OpenApiSchemaObject): boolean {\n if (!schema) {\n return false;\n }\n\n if (schema.nullable === true) {\n return true;\n }\n\n const type = schema.type;\n return Array.isArray(type) && type.includes('null');\n}\n\nexport function classifyStrictMockSchemaType(\n schema?: OpenApiSchemaObject,\n context?: ContextSpec,\n): StrictMockSchemaKind {\n if (!schema) {\n return 'object';\n }\n\n if (\n schema.format === 'binary' ||\n (schema.contentMediaType === 'application/octet-stream' &&\n !schema.contentEncoding)\n ) {\n return 'binary';\n }\n\n if (typeof schema.$ref === 'string') {\n if (context) {\n const { schema: resolved } = resolveRef(\n schema as OpenApiReferenceObject,\n context,\n );\n return classifyStrictMockSchemaType(\n resolved as OpenApiSchemaObject,\n context,\n );\n }\n\n return 'object';\n }\n\n if (\n schema.type === 'object' ||\n schema.properties ||\n isComposedObjectSchema(schema)\n ) {\n return 'object';\n }\n\n return 'alias';\n}\n\nfunction isComposedObjectSchema(schema: OpenApiSchemaObject): boolean {\n const branches = (schema.oneOf ?? schema.anyOf ?? schema.allOf) as\n | (OpenApiSchemaObject | OpenApiReferenceObject)[]\n | undefined;\n if (!branches?.length) {\n return false;\n }\n\n return branches.some((branch) => {\n const item = branch as OpenApiSchemaObject;\n if (\n typeof item.$ref === 'string' ||\n item.type === 'object' ||\n item.properties\n ) {\n return true;\n }\n\n return isComposedObjectSchema(item);\n });\n}\n\nexport function getStrictMockTypeDeclaration(\n typeName: string,\n kind: StrictMockSchemaKind = 'object',\n options?: { schemaNullableAtRoot?: boolean },\n): string {\n const mockTypeName = getStrictMockTypeName(typeName);\n\n if (kind === 'alias') {\n return `export type ${mockTypeName} = ${typeName};`;\n }\n\n if (kind === 'binary') {\n return `export type ${mockTypeName} = ArrayBuffer;`;\n }\n\n const mappedType = `{\\n [K in keyof Required<NonNullable<${typeName}>>]: NonNullable<Required<NonNullable<${typeName}>>[K]>;\\n}`;\n const objectMockType = options?.schemaNullableAtRoot\n ? `${mappedType} | null`\n : mappedType;\n\n return `export type ${mockTypeName} = ${objectMockType};`;\n}\n\nexport function getStrictMockTypeDeclarations(\n typeNames: Iterable<string>,\n kinds?: Readonly<Record<string, StrictMockSchemaKind>>,\n nullableAtRoot?: Readonly<Record<string, boolean>>,\n): string {\n const unique = [...new Set(typeNames)];\n if (unique.length === 0) {\n return '';\n }\n\n return unique\n .map((typeName) =>\n getStrictMockTypeDeclaration(typeName, kinds?.[typeName] ?? 'object', {\n schemaNullableAtRoot: nullableAtRoot?.[typeName],\n }),\n )\n .join('\\n\\n');\n}\n\nfunction strictMockResolvedImportMatches(\n typeName: string,\n resolvedImport: { name?: string; alias?: string } | undefined,\n importBareName?: string,\n): boolean {\n const resolvedName = resolvedImport?.name;\n if (!resolvedName) {\n return false;\n }\n\n if (typeName === resolvedName) {\n return true;\n }\n\n if (resolvedImport.alias && typeName === resolvedImport.alias) {\n return true;\n }\n\n return importBareName !== undefined && importBareName === resolvedName;\n}\n\nfunction resolveStrictMockSchemaForTypeName(\n typeName: string,\n originalSchema: OpenApiSchemaObject | undefined,\n context?: ContextSpec,\n importBareName?: string,\n): OpenApiSchemaObject | undefined {\n if (!originalSchema) {\n return undefined;\n }\n\n if (!context) {\n return originalSchema;\n }\n\n const branches = (originalSchema.oneOf ??\n originalSchema.anyOf ??\n originalSchema.allOf) as\n | (OpenApiSchemaObject | OpenApiReferenceObject)[]\n | undefined;\n\n if (branches?.length) {\n for (const branch of branches) {\n if (typeof branch.$ref !== 'string') {\n continue;\n }\n\n const resolved = resolveRef(branch as OpenApiReferenceObject, context);\n if (\n strictMockResolvedImportMatches(\n typeName,\n resolved.imports[0],\n importBareName,\n )\n ) {\n return resolved.schema as OpenApiSchemaObject;\n }\n }\n\n return undefined;\n }\n\n if (typeof originalSchema.$ref === 'string') {\n const resolved = resolveRef(\n originalSchema as OpenApiReferenceObject,\n context,\n );\n if (\n strictMockResolvedImportMatches(\n typeName,\n resolved.imports[0],\n importBareName,\n )\n ) {\n return resolved.schema as OpenApiSchemaObject;\n }\n\n return undefined;\n }\n\n return originalSchema;\n}\n\nexport function getMockFactoryReturnType(\n typeName: string,\n mockOptions?: Pick<MockOptions, 'required' | 'nonNullable'>,\n): string {\n return isStrictMock(mockOptions) ? getStrictMockTypeName(typeName) : typeName;\n}\n\nexport interface MockFactorySignatureParts {\n param: string;\n returnType: string;\n returnCast: string;\n}\n\nexport interface GetMockFactorySignaturePartsOptions {\n isOverridable?: boolean;\n overrideType?: string;\n}\n\nexport function getMockFactorySignatureParts(\n typeName: string,\n mockOptions?: Pick<MockOptions, 'required' | 'nonNullable'>,\n options: GetMockFactorySignaturePartsOptions = {},\n): MockFactorySignatureParts {\n const isOverridable = options.isOverridable ?? false;\n const overrideType = options.overrideType ?? `Partial<${typeName}>`;\n const mockTypeName = getStrictMockTypeName(typeName);\n\n if (!isOverridable) {\n return {\n param: '',\n returnType: getMockFactoryReturnType(typeName, mockOptions),\n returnCast: '',\n };\n }\n\n if (isStrictMock(mockOptions)) {\n return {\n param: `<O extends ${overrideType} = {}>(overrideResponse?: O)`,\n returnType: `MockWithNullableOverrides<${typeName}, O, ${mockTypeName}>`,\n returnCast: ` as MockWithNullableOverrides<${typeName}, O, ${mockTypeName}>`,\n };\n }\n\n return {\n param: `overrideResponse: ${overrideType} = {}`,\n returnType: typeName,\n returnCast: '',\n };\n}\n\nexport function getSimpleSchemaReturnType(\n returnType: string,\n schemaTypeNames: string[],\n): string | undefined {\n const trimmed = returnType.trim();\n return schemaTypeNames.includes(trimmed) ? trimmed : undefined;\n}\n\nexport function formatMockFactoryDeclaration(\n factoryName: string,\n param: string,\n returnType: string,\n body: string,\n returnCast: string,\n options?: { omitReturnType?: boolean; terminateStatement?: boolean },\n): string {\n const header = param\n ? param.startsWith('<')\n ? `export const ${factoryName} = ${param}`\n : `export const ${factoryName} = (${param})`\n : `export const ${factoryName} = ()`;\n\n const returnTypeAnnotation =\n options?.omitReturnType || !returnType ? '' : `: ${returnType}`;\n\n const statementTerminator =\n returnCast || options?.terminateStatement ? ';' : '';\n\n return `${header}${returnTypeAnnotation} => (${body})${returnCast}${statementTerminator}`;\n}\n\nexport function getSchemaTypeNamesFromResponses(\n responses: ResReqTypesValue[],\n): string[] {\n const names = new Set<string>();\n\n for (const response of responses) {\n for (const imp of response.imports) {\n if (imp.values || imp.schemaFactory) {\n continue;\n }\n\n const importName = imp.alias ?? imp.name;\n if (/^[A-Z]\\w*$/.test(importName)) {\n names.add(importName);\n }\n }\n\n const { value } = response;\n if (!value) {\n continue;\n }\n\n const baseType = value.endsWith('[]') ? value.slice(0, -2) : value;\n if (/^[A-Z]\\w*$/.test(baseType)) {\n names.add(baseType);\n }\n }\n\n return [...names];\n}\n\nexport function getStrictMockSchemaKindsFromResponses(\n responses: ResReqTypesValue[],\n context?: ContextSpec,\n): Record<string, StrictMockSchemaKind> {\n const kinds: Record<string, StrictMockSchemaKind> = {};\n\n for (const response of responses) {\n for (const imp of response.imports) {\n if (imp.values || imp.schemaFactory) {\n continue;\n }\n\n const importName = imp.alias ?? imp.name;\n if (!/^[A-Z]\\w*$/.test(importName)) {\n continue;\n }\n\n const schemaForImport = resolveStrictMockSchemaForTypeName(\n importName,\n response.originalSchema,\n context,\n imp.name,\n );\n if (!schemaForImport) {\n continue;\n }\n\n kinds[importName] = classifyStrictMockSchemaType(\n schemaForImport,\n context,\n );\n }\n\n const { value } = response;\n if (!value || !response.originalSchema) {\n continue;\n }\n\n const baseType = value.endsWith('[]') ? value.slice(0, -2) : value;\n if (!/^[A-Z]\\w*$/.test(baseType)) {\n continue;\n }\n\n const schema = response.originalSchema;\n if (value.endsWith('[]') && schema.type === 'array' && schema.items) {\n const items = schema.items as OpenApiSchemaObject;\n kinds[baseType] = classifyStrictMockSchemaType(items, context);\n continue;\n }\n\n const schemaForType =\n resolveStrictMockSchemaForTypeName(\n baseType,\n response.originalSchema,\n context,\n ) ?? response.originalSchema;\n kinds[baseType] = classifyStrictMockSchemaType(schemaForType, context);\n }\n\n return kinds;\n}\n\nexport function buildStrictMockTypeFileHeader(\n schemaTypeNames: Iterable<string>,\n kinds?: Readonly<Record<string, StrictMockSchemaKind>>,\n): string {\n const uniqueSchemaNames = [...new Set(schemaTypeNames)];\n const schemaBlock = getStrictMockTypeDeclarations(uniqueSchemaNames, kinds);\n\n return [getStrictMockHelperTypeDeclarations(), schemaBlock]\n .filter(Boolean)\n .join('\\n\\n');\n}\n\n/**\n * Prepends shared strict-mock helper types and each `{Schema}Mock` alias once at\n * the top of a mock file. Generators pass `strictSchemaTypeNames`; no scraping.\n *\n * Not idempotent — callers must invoke this exactly once per aggregated mock\n * file (writers and `writeFakerSchemaMocks`), not from import hooks.\n */\nexport function dedupeStrictMockTypeDeclarations(\n implementation: string,\n options: FinalizeMockImplementationOptions = {},\n): string {\n if (!isStrictMock(options.mockOptions)) {\n return implementation;\n }\n\n const schemaTypeNames = options.strictSchemaTypeNames\n ? [...new Set(options.strictSchemaTypeNames)]\n : [];\n if (schemaTypeNames.length === 0) {\n return implementation;\n }\n\n const header = buildStrictMockTypeFileHeader(\n schemaTypeNames,\n options.strictMockSchemaKinds,\n );\n\n return `${header}\\n\\n${implementation.trimStart()}`;\n}\n\nexport function applyStrictMockReturnType(\n returnType: string,\n schemaTypeNames: string[],\n): string {\n if (schemaTypeNames.length === 0) {\n return returnType;\n }\n\n let result = returnType;\n const sorted = [...schemaTypeNames].toSorted((a, b) => b.length - a.length);\n\n for (const name of sorted) {\n result = result.replaceAll(\n new RegExp(String.raw`\\b${escapeRegExp(name)}\\b`, 'g'),\n getStrictMockTypeName(name),\n );\n }\n\n return result;\n}\n\nconst STRICT_MOCK_SCHEMA_TYPE_FROM_OVERRIDES =\n /MockWithNullableOverrides<([A-Z]\\w*),/g;\nconst STRICT_MOCK_SCHEMA_TYPE_FROM_OVERRIDE_ALIAS =\n /MockWithNullableOverrides<[^,]+,\\s*[^,]+,\\s*([A-Z]\\w*Mock)>/g;\nconst STRICT_MOCK_SCHEMA_TYPE_FROM_MOCK_ALIAS_RETURN =\n /\\): ([A-Z]\\w*Mock)(?:\\[\\]|;)/g;\n\n/** Inverse of {@link getStrictMockTypeName}: `PetMock` → `Pet`, `WidgetMockMock` → `WidgetMock`. */\nfunction getSchemaTypeNameFromStrictMockAlias(alias: string): string {\n return alias.endsWith('Mock') ? alias.slice(0, -4) : alias;\n}\n\n/**\n * Collect schema type names referenced by strict mock factories in generated\n * implementation text (nested split factories, array item helpers, etc.).\n *\n * This reverse-parses emitted factory syntax and is therefore coupled to the\n * current `formatMockFactoryDeclaration` / `getMockFactorySignatureParts`\n * shape. The structurally robust alternative is to record each nested item's\n * schema name where split factories are generated (array-item / faker getters,\n * where the `$ref` name is known) and thread it into `strictMockSchemaTypeNames`.\n */\nexport function collectStrictMockSchemaTypeNamesFromImplementation(\n implementation: string,\n): string[] {\n const names = new Set<string>();\n\n for (const match of implementation.matchAll(\n STRICT_MOCK_SCHEMA_TYPE_FROM_OVERRIDES,\n )) {\n names.add(match[1]);\n }\n\n for (const pattern of [\n STRICT_MOCK_SCHEMA_TYPE_FROM_OVERRIDE_ALIAS,\n STRICT_MOCK_SCHEMA_TYPE_FROM_MOCK_ALIAS_RETURN,\n ]) {\n for (const match of implementation.matchAll(pattern)) {\n names.add(getSchemaTypeNameFromStrictMockAlias(match[1]));\n }\n }\n\n return [...names];\n}\n\nexport function mergeStrictMockSchemaTypeNames(\n ...groups: Array<Iterable<string> | undefined>\n): string[] | undefined {\n const names = new Set<string>();\n\n for (const group of groups) {\n if (!group) continue;\n for (const name of group) {\n names.add(name);\n }\n }\n\n return names.size > 0 ? [...names] : undefined;\n}\n\nexport function mergeStrictMockSchemaKinds(\n ...groups: Array<Readonly<Record<string, StrictMockSchemaKind>> | undefined>\n): Record<string, StrictMockSchemaKind> | undefined {\n const merged: Record<string, StrictMockSchemaKind> = {};\n\n for (const group of groups) {\n if (!group) continue;\n for (const [name, kind] of Object.entries(group)) {\n merged[name] ??= kind;\n }\n }\n\n return Object.keys(merged).length > 0 ? merged : undefined;\n}\n","import type { GeneratorImport } from '@orval/core';\n\n/**\n * Appends entries added to `source` since `sinceIndex`. Uses indexed push\n * instead of spread so large import batches (common with `schemas: true`\n * delegation on wide objects) do not overflow the call stack.\n */\nexport function appendImportsDelta(\n target: GeneratorImport[],\n source: GeneratorImport[],\n sinceIndex: number,\n): void {\n for (let i = sinceIndex; i < source.length; i++) {\n target.push(source[i]!);\n }\n}\n\n/**\n * Merge imports returned from mock resolution when the shared imports array\n * was not mutated in place. Enum mocks and nested object factories return\n * their imports separately; schema-factory delegation mutates `sharedImports`\n * directly and must not be merged again from `resolvedImports`.\n */\nexport function mergeReturnedMockImports(\n sharedImports: GeneratorImport[],\n sharedBefore: number,\n resolvedImports: GeneratorImport[],\n): void {\n if (sharedImports.length === sharedBefore) {\n appendImportsDelta(sharedImports, resolvedImports, 0);\n }\n}\n\n/** Recover type imports referenced by nested oneOf split mock helpers. */\nexport function collectSplitMockTypeImports(\n implementations: readonly string[],\n): GeneratorImport[] {\n const seen = new Set<string>();\n const imports: GeneratorImport[] = [];\n\n const addType = (name: string | undefined) => {\n if (!name || seen.has(name)) return;\n seen.add(name);\n imports.push({ name, values: false });\n };\n\n for (const impl of implementations) {\n for (const match of impl.matchAll(\n /export const get\\w+Mock = \\(\\s*overrideResponse: Partial<(\\w+)[^)]*\\):\\s*(\\w+)\\s*=>/g,\n )) {\n addType(match[1]);\n addType(match[2]);\n }\n\n for (const match of impl.matchAll(\n /export const get\\w+Mock[\\s\\S]*?MockWithNullableOverrides<(?:Extract<(\\w+),[^>]+>|(\\w+)),/g,\n )) {\n addType(match[1] ?? match[2]);\n }\n }\n\n return imports;\n}\n","import {\n type GlobalMockOptions,\n isBoolean,\n isFunction,\n isMswMock,\n isNumber,\n type MswMockOptions,\n type NormalizedOverrideOutput,\n} from '@orval/core';\n\nexport const getDelay = (\n override?: NormalizedOverrideOutput,\n options?: GlobalMockOptions,\n): MswMockOptions['delay'] => {\n // `delay` and `delayFunctionLazyExecute` are MSW-only. Narrow the\n // discriminated `GlobalMockOptions` union (and the partial override\n // counterpart) before reading them.\n const mswOptions = options && isMswMock(options) ? options : undefined;\n const overrideMock = override?.mock as Partial<MswMockOptions> | undefined;\n const overrideDelay = overrideMock?.delay ?? mswOptions?.delay;\n const delayFunctionLazyExecute =\n overrideMock?.delayFunctionLazyExecute ??\n mswOptions?.delayFunctionLazyExecute;\n if (isFunction(overrideDelay)) {\n return delayFunctionLazyExecute ? overrideDelay : overrideDelay();\n }\n if (isNumber(overrideDelay) || isBoolean(overrideDelay)) {\n return overrideDelay;\n }\n return false;\n};\n","import { compareVersions, type PackageJson } from '@orval/core';\n\nconst getFakerPackageVersion = (packageJson: PackageJson) => {\n return (\n packageJson.resolvedVersions?.['@faker-js/faker'] ??\n packageJson.dependencies?.['@faker-js/faker'] ??\n packageJson.devDependencies?.['@faker-js/faker'] ??\n packageJson.peerDependencies?.['@faker-js/faker']\n );\n};\n\nexport const isFakerVersionV9 = (packageJson: PackageJson) => {\n const version = getFakerPackageVersion(packageJson);\n\n if (!version) {\n return false;\n }\n\n const withoutRc = version.split('-')[0];\n\n return compareVersions(withoutRc, '9.0.0');\n};\n","import type { OpenApiSchemaObject } from '@orval/core';\n\nexport const DEFAULT_FORMAT_MOCK: Record<\n Required<Extract<OpenApiSchemaObject, object>>['format'],\n string\n> = {\n bic: 'faker.finance.bic()',\n binary: 'new ArrayBuffer(faker.number.int({ min: 1, max: 64 }))',\n city: 'faker.location.city()',\n country: 'faker.location.country()',\n date: 'faker.date.past().toISOString().slice(0, 10)',\n 'date-time': \"faker.date.past().toISOString().slice(0, 19) + 'Z'\",\n email: 'faker.internet.email()',\n firstName: 'faker.person.firstName()',\n gender: 'faker.person.gender()',\n iban: 'faker.finance.iban()',\n ipv4: 'faker.internet.ipv4()',\n ipv6: 'faker.internet.ipv6()',\n jobTitle: 'faker.person.jobTitle()',\n lastName: 'faker.person.lastName()',\n password: 'faker.internet.password()',\n phoneNumber: 'faker.phone.number()',\n streetName: 'faker.location.street()',\n uri: 'faker.internet.url()',\n url: 'faker.internet.url()',\n userName: 'faker.internet.userName()',\n uuid: 'faker.string.uuid()',\n zipCode: 'faker.location.zipCode()',\n};\n\n// #980 replace CUID so tests are consistent\nexport const DEFAULT_OBJECT_KEY_MOCK = 'faker.string.alphanumeric(5)';\n","import {\n type ContextSpec,\n type GeneratorImport,\n getKey,\n getRefInfo,\n isReference,\n type MockOptions,\n type OpenApiReferenceObject,\n type OpenApiSchemaObject,\n PropertySortOrder,\n} from '@orval/core';\n\nimport type { MockDefinition, MockSchema, MockSchemaObject } from '../../types';\nimport { DEFAULT_OBJECT_KEY_MOCK } from '../constants';\nimport {\n resolveMockValue,\n getNullable,\n isNullableSchema,\n} from '../resolvers/value';\nimport { mergeReturnedMockImports } from '../imports';\nimport { combineSchemasMock } from './combine';\n\nexport const overrideVarName = 'overrideResponse';\n\nfunction wrapRootNullableObjectValue(\n value: string,\n schemaItem: MockSchemaObject,\n mockOptions: MockOptions | undefined,\n combine?: GetMockObjectOptions['combine'],\n): { value: string; nullWrapped: boolean } {\n const nullableAtRoot =\n !combine && isNullableSchema(schemaItem) && !mockOptions?.nonNullable;\n\n return {\n value: nullableAtRoot ? getNullable(value, true) : value,\n nullWrapped: nullableAtRoot,\n };\n}\n\nfunction getReferenceName(\n ref: string | undefined,\n context: ContextSpec,\n): string {\n if (!ref) return '';\n\n return getRefInfo(ref, context).name;\n}\n\ninterface GetMockObjectOptions {\n item: MockSchemaObject;\n operationId: string;\n mockOptions?: MockOptions;\n tags: string[];\n combine?: {\n separator: 'allOf' | 'oneOf' | 'anyOf';\n includedProperties: string[];\n };\n context: ContextSpec;\n imports: GeneratorImport[];\n // This is used to prevent recursion when combining schemas\n // When an element is added to the array, it means on this iteration, we've already seen this property\n existingReferencedProperties: string[];\n // Tracks the current contiguous `allOf` composition to break cyclic\n // inheritance. See `existingReferencedAllOfRefs` docs in getters/combine.ts.\n existingReferencedAllOfRefs?: string[];\n splitMockImplementations: string[];\n // This is used to add the overrideResponse to the object\n allowOverride?: boolean;\n}\n\nexport function getMockObject({\n item,\n mockOptions,\n operationId,\n tags,\n combine,\n context,\n imports,\n existingReferencedProperties,\n existingReferencedAllOfRefs = [],\n splitMockImplementations,\n allowOverride = false,\n}: GetMockObjectOptions): MockDefinition {\n if (isReference(item)) {\n return resolveMockValue({\n schema: {\n ...item,\n name: item.name,\n path: item.path ? `${item.path}.${item.name}` : item.name,\n },\n mockOptions,\n operationId,\n tags,\n context,\n imports,\n existingReferencedProperties,\n existingReferencedAllOfRefs,\n splitMockImplementations,\n });\n }\n\n const schemaItem = item as MockSchemaObject & Record<string, unknown>;\n const itemAllOf = schemaItem.allOf as MockSchema[] | undefined;\n const itemOneOf = schemaItem.oneOf as MockSchema[] | undefined;\n const itemAnyOf = schemaItem.anyOf as MockSchema[] | undefined;\n const itemType = schemaItem.type as string | string[] | undefined;\n const itemProperties = schemaItem.properties as\n | Record<string, OpenApiReferenceObject | OpenApiSchemaObject>\n | undefined;\n const itemRequired = schemaItem.required as string[] | undefined;\n const itemAdditionalProperties = schemaItem.additionalProperties as\n | boolean\n | OpenApiReferenceObject\n | OpenApiSchemaObject\n | undefined;\n\n if (itemAllOf || itemOneOf || itemAnyOf) {\n const separator = itemAllOf ? 'allOf' : itemOneOf ? 'oneOf' : 'anyOf';\n return combineSchemasMock({\n item: schemaItem,\n separator,\n mockOptions,\n operationId,\n tags,\n combine,\n context,\n imports,\n existingReferencedProperties,\n existingReferencedAllOfRefs,\n splitMockImplementations,\n });\n }\n\n if (Array.isArray(itemType)) {\n const nonNullTypes = mockOptions?.nonNullable\n ? itemType.filter((type) => type !== 'null')\n : itemType;\n\n if (nonNullTypes.length === 0) {\n return { value: 'null', imports: [], name: schemaItem.name };\n }\n\n if (nonNullTypes.length === 1) {\n return getMockObject({\n item: {\n ...schemaItem,\n type: nonNullTypes[0],\n } as MockSchemaObject & Record<string, unknown>,\n mockOptions,\n operationId,\n tags,\n combine,\n context,\n imports,\n existingReferencedProperties,\n existingReferencedAllOfRefs,\n splitMockImplementations,\n allowOverride,\n });\n }\n\n // Spread the base schema into each type entry so that object properties\n // (e.g. `properties`, `required`, `additionalProperties`) are preserved.\n // Without this, `{ type: \"object\", properties: {...} }` collapses to\n // `{ type: \"object\" }` and the mock generator returns `{}` instead of\n // building the actual object shape. Mirrors the fix in core getters/object.ts.\n const isPropertylessObject =\n !itemProperties &&\n (!itemRequired || itemRequired.length === 0) &&\n !itemAdditionalProperties;\n\n if (\n isPropertylessObject &&\n nonNullTypes.includes('object') &&\n nonNullTypes.includes('null') &&\n nonNullTypes.every((type) => type === 'object' || type === 'null')\n ) {\n if (mockOptions?.nonNullable) {\n return { value: '{}', imports: [], name: schemaItem.name };\n }\n\n return {\n value: 'faker.helpers.arrayElement([{}, null])',\n imports: [],\n name: schemaItem.name,\n };\n }\n\n const baseItem = schemaItem as Record<string, unknown>;\n return combineSchemasMock({\n item: {\n anyOf: nonNullTypes.map((type) => ({\n ...baseItem,\n type,\n })) as unknown as MockSchema[],\n name: schemaItem.name,\n },\n separator: 'anyOf',\n mockOptions,\n operationId,\n tags,\n combine,\n context,\n imports,\n existingReferencedProperties,\n existingReferencedAllOfRefs,\n splitMockImplementations,\n });\n }\n\n if (itemProperties) {\n let value =\n !combine || combine.separator === 'oneOf' || combine.separator === 'anyOf'\n ? '{'\n : '';\n const imports: GeneratorImport[] = [];\n const includedProperties: string[] = [];\n\n const entries = Object.entries(itemProperties);\n if (context.output.propertySortOrder === PropertySortOrder.ALPHABETICAL) {\n entries.sort((a, b) => {\n return a[0].localeCompare(b[0], 'en', { numeric: true });\n });\n }\n const propertyScalars = entries\n .map(\n ([key, prop]: [\n string,\n OpenApiReferenceObject | OpenApiSchemaObject,\n ]) => {\n if (combine?.includedProperties.includes(key)) {\n return;\n }\n\n const isRequired =\n mockOptions?.required ??\n (Array.isArray(itemRequired) ? itemRequired : []).includes(key);\n\n const hasNullable = 'nullable' in prop && prop.nullable === true;\n\n // Check to see if the property is a reference to an existing property\n // Fixes issue #910\n if (\n isReference(prop) &&\n existingReferencedProperties.includes(\n getReferenceName(prop.$ref, context),\n )\n ) {\n if (isRequired) {\n const keyDefinition = getKey(key);\n return `${keyDefinition}: null`;\n }\n return;\n }\n\n const importsBefore = imports.length;\n const resolvedValue = resolveMockValue({\n schema: {\n ...(prop as Record<string, unknown>),\n name: key,\n parentName: schemaItem.name,\n path: schemaItem.path ? `${schemaItem.path}.${key}` : `#.${key}`,\n },\n mockOptions,\n operationId,\n tags,\n context,\n imports,\n existingReferencedProperties,\n // A property value is a fresh mock instance, not part of this\n // object's allOf composition — reset the chain.\n // See `existingReferencedAllOfRefs` docs in getters/combine.ts.\n existingReferencedAllOfRefs: [],\n splitMockImplementations,\n });\n\n mergeReturnedMockImports(\n imports,\n importsBefore,\n resolvedValue.imports,\n );\n\n includedProperties.push(key);\n\n const keyDefinition = getKey(key);\n\n const hasDefault = 'default' in prop && prop.default !== undefined;\n\n if (!isRequired && !resolvedValue.overrided && !hasDefault) {\n const omitValue =\n mockOptions?.nonNullable || !hasNullable ? 'undefined' : 'null';\n return `${keyDefinition}: faker.helpers.arrayElement([${resolvedValue.value}, ${omitValue}])`;\n }\n\n const isNullable =\n Array.isArray(prop.type) && prop.type.includes('null');\n if (\n isNullable &&\n !resolvedValue.nullWrapped &&\n !resolvedValue.overrided &&\n !mockOptions?.nonNullable\n ) {\n return `${keyDefinition}: faker.helpers.arrayElement([${resolvedValue.value}, null])`;\n }\n\n return `${keyDefinition}: ${resolvedValue.value}`;\n },\n )\n .filter(Boolean);\n\n if (allowOverride) {\n propertyScalars.push(`...${overrideVarName}`);\n }\n\n value += propertyScalars.join(', ');\n value +=\n !combine || combine.separator === 'oneOf' || combine.separator === 'anyOf'\n ? '}'\n : '';\n\n const { value: finalValue, nullWrapped } = wrapRootNullableObjectValue(\n value,\n schemaItem,\n mockOptions,\n combine,\n );\n\n return {\n value: finalValue,\n nullWrapped,\n imports,\n name: schemaItem.name,\n includedProperties,\n };\n }\n\n if (itemAdditionalProperties) {\n if (itemAdditionalProperties === true) {\n const { value: finalValue, nullWrapped } = wrapRootNullableObjectValue(\n `{}`,\n schemaItem,\n mockOptions,\n combine,\n );\n\n return {\n value: finalValue,\n nullWrapped,\n imports: [],\n name: schemaItem.name,\n };\n }\n const additionalProperties = itemAdditionalProperties;\n if (\n isReference(additionalProperties) &&\n existingReferencedProperties.includes(\n getReferenceName(additionalProperties.$ref, context),\n )\n ) {\n const { value: finalValue, nullWrapped } = wrapRootNullableObjectValue(\n `{}`,\n schemaItem,\n mockOptions,\n combine,\n );\n\n return {\n value: finalValue,\n nullWrapped,\n imports: [],\n name: schemaItem.name,\n };\n }\n\n const resolvedValue = resolveMockValue({\n schema: {\n ...additionalProperties,\n name: schemaItem.name,\n path: schemaItem.path ? `${schemaItem.path}.#` : '#',\n },\n mockOptions,\n operationId,\n tags,\n context,\n imports,\n existingReferencedProperties,\n // An additionalProperties value is a fresh mock instance — reset the\n // chain, as with property values above.\n // See `existingReferencedAllOfRefs` docs in getters/combine.ts.\n existingReferencedAllOfRefs: [],\n splitMockImplementations,\n });\n\n const objectValue = `{\n [${DEFAULT_OBJECT_KEY_MOCK}]: ${resolvedValue.value}\n }`;\n const { value: finalValue, nullWrapped } = wrapRootNullableObjectValue(\n objectValue,\n schemaItem,\n mockOptions,\n combine,\n );\n\n return {\n ...resolvedValue,\n value: finalValue,\n nullWrapped,\n };\n }\n\n const { value: finalValue, nullWrapped } = wrapRootNullableObjectValue(\n '{}',\n schemaItem,\n mockOptions,\n combine,\n );\n\n return { value: finalValue, nullWrapped, imports: [], name: schemaItem.name };\n}\n","import {\n type ContextSpec,\n DefaultTag,\n type GeneratorImport,\n getRefInfo,\n isFunction,\n isReference,\n kebab,\n type OpenApiSchemaObject,\n OutputMockType,\n OutputMode,\n pascal,\n resolveRef,\n} from '@orval/core';\n\nimport {\n formatMockFactoryDeclaration,\n getMockFactorySignatureParts,\n getStrictMockTypeName,\n isStrictMock,\n} from '../../mock-types';\nimport type { MockSchema } from '../../types';\nimport { overrideVarName } from './object';\nimport { extractItemsRef } from './scalar';\n\n/**\n * Scope key for file-level array-item factory dedup. Must match how writers\n * group mock output: one bucket per tag file in tags modes, otherwise one\n * bucket for the whole target.\n */\nexport function getArrayItemMockFileScope(\n context: ContextSpec,\n tags: string[],\n): string {\n const mode = context.output.mode;\n const mockType = context.activeMockOutputType ?? OutputMockType.MSW;\n let base: string;\n if (mode === OutputMode.TAGS || mode === OutputMode.TAGS_SPLIT) {\n const tag = tags.length > 0 ? tags[0] : DefaultTag;\n base = `tag:${kebab(tag)}`;\n } else if (mode === OutputMode.SPLIT) {\n base = 'split';\n } else {\n base = 'single';\n }\n return `${base}:${mockType}`;\n}\n\nfunction getFileLevelExtractedFactories(\n context: ContextSpec,\n scope: string,\n): Set<string> {\n context.arrayItemMockFactories ??= new Map();\n const existing = context.arrayItemMockFactories.get(scope);\n if (existing) {\n return existing;\n }\n const factories = new Set<string>();\n context.arrayItemMockFactories.set(scope, factories);\n return factories;\n}\n\n/**\n * True when any mock generator entry opts into reusable array-item mock\n * factories for object-like array item schemas in operation responses.\n */\nexport function shouldExtractArrayItemFactories(context: ContextSpec): boolean {\n return context.output.mock.generators.some(\n (g) => !isFunction(g) && g.arrayItems === true,\n );\n}\n\n/**\n * True when `schemas: true` already emits a consolidated factory for this\n * `$ref` item under `components/schemas`, so we must not re-export it from\n * the operation mock file.\n */\nfunction hasConsolidatedSchemaFactory(\n items: MockSchema,\n context: ContextSpec,\n): boolean {\n if (!context.output.schemas) {\n return false;\n }\n\n const itemsRef = extractItemsRef(items);\n if (!itemsRef) {\n return false;\n }\n\n const { refPaths } = getRefInfo(itemsRef, context);\n const isComponentsSchema =\n Array.isArray(refPaths) &&\n refPaths[0] === 'components' &&\n refPaths[1] === 'schemas';\n\n if (!isComponentsSchema) {\n return false;\n }\n\n return context.output.mock.generators.some(\n (g) =>\n !isFunction(g) && g.type === OutputMockType.FAKER && g.schemas === true,\n );\n}\n\n/**\n * True when `parentName` looks like a nested property key rather than the\n * generated response wrapper type (e.g. `outer` vs `GetTenants200`). Inlining\n * avoids factory/type-name collisions and mismatched `<Parent><Prop>Item` aliases.\n */\nfunction isAmbiguousInlineItemContext(\n operationId: string,\n parentName?: string,\n): boolean {\n if (!parentName) {\n return false;\n }\n\n return !parentName.toLowerCase().includes(operationId.toLowerCase());\n}\n\nfunction isNullableArrayItem(schema: OpenApiSchemaObject): boolean {\n if (schema.nullable === true) {\n return true;\n }\n\n return Array.isArray(schema.type) && schema.type.includes('null');\n}\n\nfunction isResolvedSchemaObjectLike(schema: OpenApiSchemaObject): boolean {\n if (schema.type === 'object' || schema.properties) {\n return true;\n }\n\n if (schema.allOf) {\n return true;\n }\n\n return false;\n}\n\n/**\n * True when array `items` resolve to an object-like schema worth extracting.\n * Conservative: skips scalar refs, oneOf/anyOf, nullable items, and nested\n * contexts where generated item type names cannot be inferred reliably.\n */\nfunction shouldExtractArrayItem(\n items: MockSchema,\n context: ContextSpec,\n operationId: string,\n parentName?: string,\n): boolean {\n const itemsRef = extractItemsRef(items);\n\n if (itemsRef) {\n try {\n const { schema } = resolveRef<OpenApiSchemaObject>(\n { $ref: itemsRef },\n context,\n );\n return isResolvedSchemaObjectLike(schema);\n } catch {\n return false;\n }\n }\n\n if (isReference(items)) {\n return false;\n }\n\n const schema = items as OpenApiSchemaObject;\n\n if (isNullableArrayItem(schema)) {\n return false;\n }\n\n if (schema.oneOf || schema.anyOf) {\n return false;\n }\n\n if (schema.allOf) {\n return true;\n }\n\n if (schema.type === 'object' || schema.properties) {\n return !isAmbiguousInlineItemContext(operationId, parentName);\n }\n\n return false;\n}\n\n/**\n * True when `mapValue` is already a bare factory call or a single spread of one.\n */\nfunction isAlreadyFactoryCall(mapValue: string): boolean {\n return /^(?:\\{\\s*\\.\\.\\.\\s*get\\w+Mock\\(\\)\\s*\\}|get\\w+Mock\\(\\))$/.test(\n mapValue.trim(),\n );\n}\n\ninterface ArrayItemFactoryNames {\n factoryName: string;\n typeName: string;\n}\n\n/**\n * Derive the exported factory and TypeScript type names for an array item.\n */\nfunction getArrayItemFactoryNames({\n items,\n propertyName,\n parentName,\n operationId,\n context,\n}: {\n items: MockSchema;\n propertyName: string;\n parentName?: string;\n operationId: string;\n context: ContextSpec;\n}): ArrayItemFactoryNames | undefined {\n if (!shouldExtractArrayItem(items, context, operationId, parentName)) {\n return undefined;\n }\n\n const itemsRef = extractItemsRef(items);\n if (itemsRef) {\n const { name } = getRefInfo(itemsRef, context);\n const typeName = pascal(name);\n return {\n factoryName: `get${typeName}Mock`,\n typeName,\n };\n }\n\n const itemSuffix = context.output.override.components.schemas.itemSuffix;\n const typeName = parentName\n ? `${pascal(parentName)}${pascal(propertyName)}${itemSuffix}`\n : `${pascal(operationId)}${pascal(propertyName)}${itemSuffix}`;\n return {\n factoryName: `get${pascal(operationId)}Response${pascal(propertyName)}ItemMock`,\n typeName,\n };\n}\n\ninterface ExtractArrayItemMockOptions {\n items: MockSchema;\n propertyName: string;\n parentName?: string;\n operationId: string;\n tags: string[];\n mapValue: string;\n context: ContextSpec;\n splitMockImplementations: string[];\n imports: GeneratorImport[];\n}\n\n/**\n * When `arrayItems: true`, lift an object-like array item mock body into a\n * reusable exported factory and return the call site expression for `.map()`.\n */\nexport function extractArrayItemMock({\n items,\n propertyName,\n parentName,\n operationId,\n tags,\n mapValue,\n context,\n splitMockImplementations,\n imports,\n}: ExtractArrayItemMockOptions): string | undefined {\n if (!shouldExtractArrayItemFactories(context)) {\n return undefined;\n }\n\n if (\n !mapValue ||\n mapValue === '[]' ||\n isAlreadyFactoryCall(mapValue) ||\n hasConsolidatedSchemaFactory(items, context)\n ) {\n return undefined;\n }\n\n const names = getArrayItemFactoryNames({\n items,\n propertyName,\n parentName,\n operationId,\n context,\n });\n if (!names) {\n return undefined;\n }\n\n const { factoryName, typeName } = names;\n const scope = getArrayItemMockFileScope(context, tags);\n const fileLevelFactories = getFileLevelExtractedFactories(context, scope);\n const mockOptions = context.output.override.mock;\n const alreadyExtracted =\n fileLevelFactories.has(factoryName) ||\n splitMockImplementations.some((f) =>\n f.includes(`export const ${factoryName}`),\n );\n\n if (!alreadyExtracted) {\n const { param, returnType, returnCast } = getMockFactorySignatureParts(\n typeName,\n mockOptions,\n {\n isOverridable: true,\n overrideType: `Partial<${typeName}>`,\n },\n );\n const spreadPrefix = mapValue.startsWith('...') ? '' : '...';\n const func = formatMockFactoryDeclaration(\n factoryName,\n param,\n returnType,\n `{${spreadPrefix}${mapValue}, ...${overrideVarName}}`,\n returnCast,\n { terminateStatement: true },\n );\n splitMockImplementations.push(func);\n fileLevelFactories.add(factoryName);\n }\n\n imports.push({ name: typeName });\n\n const strictCast = isStrictMock(mockOptions)\n ? ` as ${getStrictMockTypeName(typeName)}`\n : '';\n\n return `{...${factoryName}()${strictCast}}`;\n}\n","import {\n type ContextSpec,\n isReference,\n type OpenApiSchemaObject,\n resolveRef,\n} from '@orval/core';\n\nconst DATE_FORMATS = new Set(['date', 'date-time']);\n\nfunction isDateFormat(\n format: string | undefined,\n): format is 'date' | 'date-time' {\n return format !== undefined && DATE_FORMATS.has(format);\n}\n\nfunction isSchemaObject(schema: unknown): schema is OpenApiSchemaObject {\n return (\n typeof schema === 'object' && schema !== null && !Array.isArray(schema)\n );\n}\n\nfunction resolveSchema(\n schema: OpenApiSchemaObject | undefined,\n context: ContextSpec,\n): OpenApiSchemaObject | undefined {\n if (!schema) {\n return undefined;\n }\n\n if (isReference(schema)) {\n return resolveRef<OpenApiSchemaObject>(schema, context).schema;\n }\n\n return schema;\n}\n\nfunction mergePropertySchemas(\n ...schemas: Array<OpenApiSchemaObject | undefined>\n): Record<string, OpenApiSchemaObject> {\n const merged: Record<string, OpenApiSchemaObject> = {};\n\n for (const schema of schemas) {\n if (!schema?.properties) {\n continue;\n }\n\n for (const [key, prop] of Object.entries(schema.properties)) {\n if (isSchemaObject(prop)) {\n merged[key] = prop;\n }\n }\n }\n\n return merged;\n}\n\nfunction getEffectiveScalarFormat(\n resolved: OpenApiSchemaObject | undefined,\n context: ContextSpec,\n): 'date' | 'date-time' | undefined {\n if (!resolved) {\n return undefined;\n }\n\n if (isDateFormat(resolved.format)) {\n return resolved.format;\n }\n\n const oneOf = resolved.oneOf as OpenApiSchemaObject[] | undefined;\n const anyOf = resolved.anyOf as OpenApiSchemaObject[] | undefined;\n\n for (const variant of [...(oneOf ?? []), ...(anyOf ?? [])]) {\n const resolvable =\n isReference(variant) || isSchemaObject(variant) ? variant : undefined;\n const resolvedVariant = resolveSchema(resolvable, context);\n\n if (isDateFormat(resolvedVariant?.format)) {\n return resolvedVariant.format;\n }\n }\n\n return undefined;\n}\n\n/**\n * Resolves compositional schemas (allOf / oneOf / anyOf) so example formatting\n * can see property formats on nested and referenced types.\n */\nfunction resolveExampleSchema(\n schema: OpenApiSchemaObject | undefined,\n context: ContextSpec,\n seenRefs: Set<string> = new Set(),\n): OpenApiSchemaObject | undefined {\n if (!schema) {\n return undefined;\n }\n\n if (isReference(schema)) {\n const ref = schema.$ref;\n if (ref && seenRefs.has(ref)) {\n return resolveRef<OpenApiSchemaObject>(schema, context).schema;\n }\n if (ref) {\n seenRefs = new Set(seenRefs).add(ref);\n }\n }\n\n const resolved = resolveSchema(schema, context);\n if (!resolved) {\n return undefined;\n }\n\n const allOf = resolved.allOf as OpenApiSchemaObject[] | undefined;\n const oneOf = resolved.oneOf as OpenApiSchemaObject[] | undefined;\n const anyOf = resolved.anyOf as OpenApiSchemaObject[] | undefined;\n const compositors = [...(allOf ?? []), ...(oneOf ?? []), ...(anyOf ?? [])];\n\n const properties = mergePropertySchemas(\n resolved,\n ...compositors.map((sub) => resolveExampleSchema(sub, context, seenRefs)),\n );\n // OpenApiSchemaObject includes AnyOtherAttribute; cast before spread (see object.ts).\n const baseResolved = resolved as Record<string, unknown>;\n\n if (resolved.type === 'array' && isSchemaObject(resolved.items)) {\n const items = resolveExampleSchema(resolved.items, context, seenRefs);\n const itemProperties = items?.properties;\n const normalizedItems =\n itemProperties && Object.keys(itemProperties).length > 0\n ? { type: 'object' as const, properties: itemProperties }\n : items;\n\n return {\n ...baseResolved,\n ...(Object.keys(properties).length > 0 ? { properties } : {}),\n items: normalizedItems ?? resolved.items,\n } as OpenApiSchemaObject;\n }\n\n if (Object.keys(properties).length > 0) {\n return {\n ...baseResolved,\n properties,\n } as OpenApiSchemaObject;\n }\n\n if (compositors.length > 0 && (oneOf ?? anyOf)) {\n const variantProperties = mergePropertySchemas(\n ...compositors.map((sub) => resolveExampleSchema(sub, context, seenRefs)),\n );\n\n if (Object.keys(variantProperties).length > 0) {\n return {\n type: 'object',\n properties: variantProperties,\n };\n }\n }\n\n const scalarFormat = getEffectiveScalarFormat(resolved, context);\n if (scalarFormat) {\n return {\n ...baseResolved,\n format: scalarFormat,\n } as OpenApiSchemaObject;\n }\n\n return resolved;\n}\n\nexport function formatScalarExampleValue(\n example: unknown,\n format: string | undefined,\n context: ContextSpec,\n): string {\n if (\n context.output.override.useDates &&\n typeof example === 'string' &&\n isDateFormat(format)\n ) {\n return `new Date(${JSON.stringify(example)})`;\n }\n\n return JSON.stringify(example);\n}\n\nfunction formatLiteralValue(\n example: unknown,\n schema: OpenApiSchemaObject | undefined,\n context: ContextSpec,\n): string {\n if (example === null) {\n return 'null';\n }\n\n if (example === undefined) {\n return 'undefined';\n }\n\n const resolved = resolveExampleSchema(schema, context);\n\n if (Array.isArray(example)) {\n const itemsSchema =\n resolved?.type === 'array' && isSchemaObject(resolved.items)\n ? resolveExampleSchema(resolved.items, context)\n : resolved;\n\n return `[${example.map((item) => formatLiteralValue(item, itemsSchema, context)).join(', ')}]`;\n }\n\n if (typeof example === 'object') {\n const properties = resolved?.properties ?? {};\n\n const entries = Object.entries(example as Record<string, unknown>).map(\n ([key, value]) => {\n const propSchema = properties[key];\n const resolvedProp = isSchemaObject(propSchema)\n ? resolveExampleSchema(propSchema, context)\n : undefined;\n const safeKey = /^[a-zA-Z_$][\\w$]*$/.test(key)\n ? key\n : JSON.stringify(key);\n\n return `${safeKey}: ${formatLiteralValue(value, resolvedProp, context)}`;\n },\n );\n\n return `{ ${entries.join(', ')} }`;\n }\n\n if (\n context.output.override.useDates &&\n typeof example === 'string' &&\n isDateFormat(getEffectiveScalarFormat(resolved, context))\n ) {\n return `new Date(${JSON.stringify(example)})`;\n }\n\n return JSON.stringify(example);\n}\n\nexport function formatSchemaExampleValue(\n example: unknown,\n schema: OpenApiSchemaObject | undefined,\n context: ContextSpec,\n): string {\n if (!context.output.override.useDates || schema === undefined) {\n return JSON.stringify(example);\n }\n\n return formatLiteralValue(example, schema, context);\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-argument */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* eslint-disable @typescript-eslint/no-unnecessary-condition */\nimport {\n type ContextSpec,\n EnumGeneration,\n type GeneratorImport,\n getRefInfo,\n isReference,\n isString,\n jsStringLiteralEscape,\n mergeDeep,\n type MockOptions,\n type OpenApiSchemaObject,\n} from '@orval/core';\n\nimport type { MockDefinition, MockSchema, MockSchemaObject } from '../../types';\nimport { isFakerVersionV9 } from '../compatible-v9';\nimport { DEFAULT_FORMAT_MOCK } from '../constants';\nimport {\n getNullable,\n resolveMockOverride,\n resolveMockValue,\n} from '../resolvers';\nimport { extractArrayItemMock } from './array-item-factory';\nimport { formatSchemaExampleValue } from '../format-example-value';\nimport { getMockObject } from './object';\n\ninterface GetMockScalarOptions {\n item: MockSchemaObject;\n imports: GeneratorImport[];\n mockOptions?: MockOptions;\n operationId: string;\n isRef?: boolean;\n tags: string[];\n combine?: {\n separator: 'allOf' | 'oneOf' | 'anyOf';\n includedProperties: string[];\n };\n context: ContextSpec;\n // This is used to prevent recursion when combining schemas\n // When an element is added to the array, it means on this iteration, we've already seen this property\n existingReferencedProperties: string[];\n // Tracks the current contiguous `allOf` composition to break cyclic\n // inheritance; threaded through to `combineSchemasMock`.\n // See `existingReferencedAllOfRefs` docs in getters/combine.ts.\n existingReferencedAllOfRefs?: string[];\n splitMockImplementations: string[];\n // This is used to add the overrideResponse to the object\n allowOverride?: boolean;\n}\n\nexport function getMockScalar({\n item,\n imports,\n mockOptions,\n operationId,\n tags,\n combine,\n context,\n existingReferencedProperties,\n existingReferencedAllOfRefs = [],\n splitMockImplementations,\n allowOverride = false,\n}: GetMockScalarOptions): MockDefinition {\n const safeMockOptions: MockOptions = mockOptions ?? {};\n const nonNullableOption = safeMockOptions.nonNullable;\n // Add the property to the existing properties to validate on object recursion\n if (item.isRef) {\n existingReferencedProperties = [...existingReferencedProperties, item.name];\n }\n\n const operationProperty = resolveMockOverride(\n safeMockOptions.operations?.[operationId]?.properties,\n item,\n nonNullableOption,\n );\n\n if (operationProperty) {\n return operationProperty;\n }\n\n let overrideTag: { properties: Record<string, unknown> } = {\n properties: {},\n };\n const sortedTags = Object.entries(safeMockOptions.tags ?? {}).toSorted(\n (a, b) => a[0].localeCompare(b[0], 'en', { numeric: true }),\n );\n for (const [tag, options] of sortedTags) {\n if (!tags.includes(tag)) {\n continue;\n }\n overrideTag = mergeDeep(overrideTag, options);\n }\n\n const tagProperty = resolveMockOverride(\n overrideTag.properties,\n item,\n nonNullableOption,\n );\n\n if (tagProperty) {\n return tagProperty;\n }\n\n const property = resolveMockOverride(\n safeMockOptions.properties,\n item,\n nonNullableOption,\n );\n\n if (property) {\n return property;\n }\n\n if (\n context.output.override.mock?.useExamples ||\n safeMockOptions.useExamples\n ) {\n // OAS 3.0 inputs go through @scalar/openapi-parser's upgrade(), which\n // rewrites property-level `example: <value>` into `examples: [<value>]`\n // and deletes the singular field. Fall back to the array form so this\n // option keeps working post-upgrade.\n const propertyExample =\n item.example === undefined\n ? Array.isArray(item.examples) && item.examples.length > 0\n ? item.examples[0]\n : undefined\n : item.example;\n if (propertyExample !== undefined) {\n return {\n value: formatSchemaExampleValue(\n propertyExample,\n item as OpenApiSchemaObject,\n context,\n ),\n imports: [],\n name: item.name,\n overrided: true,\n };\n }\n }\n\n const formatOverrides = safeMockOptions.format ?? {};\n const ALL_FORMAT: Record<string, string> = {\n ...DEFAULT_FORMAT_MOCK,\n ...Object.fromEntries(\n Object.entries(formatOverrides).filter(\n (entry): entry is [string, string] => typeof entry[1] === 'string',\n ),\n ),\n };\n\n // Both OpenAPI 3.1 `type: [..., 'null']` and OpenAPI 3.0 `nullable: true`\n // reach here as a null union, because @scalar/openapi-parser upgrades 3.0\n // inputs to 3.1 before mock generation. When this getter wraps the value via\n // `getNullable` it flags the returned MockDefinition with `nullWrapped` so the\n // object property layer does not add a second `arrayElement([..., null])`.\n const isNullable = Array.isArray(item.type) && item.type.includes('null');\n const nullWrapped = isNullable && !nonNullableOption;\n // The @scalar/openapi-parser upgrader rewrites `format: binary` to\n // `contentMediaType: application/octet-stream` when upgrading OAS 3.0 → 3.1;\n // treat both equivalently so the mock emits the binary format value\n // (ArrayBuffer) instead of falling through to the string case.\n const schemaContentMediaType = (item as OpenApiSchemaObject).contentMediaType;\n if (\n !item.format &&\n schemaContentMediaType === 'application/octet-stream' &&\n ALL_FORMAT.binary\n ) {\n return {\n value: getNullable(ALL_FORMAT.binary, isNullable, nonNullableOption),\n imports: [],\n name: item.name,\n overrided: false,\n nullWrapped,\n };\n }\n if (item.format && ALL_FORMAT[item.format]) {\n let value = ALL_FORMAT[item.format];\n\n const dateFormats = ['date', 'date-time'];\n if (dateFormats.includes(item.format) && context.output.override.useDates) {\n value = `new Date(${value})`;\n }\n\n return {\n value: getNullable(value, isNullable, nonNullableOption),\n imports: [],\n name: item.name,\n overrided: false,\n nullWrapped,\n };\n }\n\n const type = getItemType(item);\n const isFakerV9 =\n !!context.output.packageJson &&\n isFakerVersionV9(context.output.packageJson);\n\n switch (type) {\n case 'number':\n case 'integer': {\n const intFunction =\n context.output.override.useBigInt &&\n (item.format === 'int64' || item.format === 'uint64')\n ? 'bigInt'\n : 'int';\n // Handle exclusiveMinimum/exclusiveMaximum for both OpenAPI 3.0 (boolean) and 3.1 (number).\n // OpenAPI 3.0: booleans indicating whether minimum/maximum is exclusive — use minimum/maximum as the bound.\n // OpenAPI 3.1: numbers representing the exclusive boundary value — use directly.\n const numMin = (\n typeof item.exclusiveMinimum === 'number'\n ? item.exclusiveMinimum\n : (item.minimum ?? safeMockOptions.numberMin)\n ) as number | undefined;\n const numMax = (\n typeof item.exclusiveMaximum === 'number'\n ? item.exclusiveMaximum\n : (item.maximum ?? safeMockOptions.numberMax)\n ) as number | undefined;\n const intParts: string[] = [];\n if (numMin !== undefined) intParts.push(`min: ${numMin}`);\n if (numMax !== undefined) intParts.push(`max: ${numMax}`);\n if (isFakerV9 && item.multipleOf !== undefined)\n intParts.push(`multipleOf: ${item.multipleOf}`);\n let value = getNullable(\n `faker.number.${intFunction}(${intParts.length > 0 ? `{${intParts.join(', ')}}` : ''})`,\n isNullable,\n nonNullableOption,\n );\n if (type === 'number') {\n const floatParts: string[] = [];\n if (numMin !== undefined) floatParts.push(`min: ${numMin}`);\n if (numMax !== undefined) floatParts.push(`max: ${numMax}`);\n if (isFakerV9 && item.multipleOf !== undefined) {\n floatParts.push(`multipleOf: ${item.multipleOf}`);\n } else if (safeMockOptions.fractionDigits !== undefined) {\n floatParts.push(`fractionDigits: ${safeMockOptions.fractionDigits}`);\n }\n value = getNullable(\n `faker.number.float(${floatParts.length > 0 ? `{${floatParts.join(', ')}}` : ''})`,\n isNullable,\n nonNullableOption,\n );\n }\n const numberImports: GeneratorImport[] = [];\n\n if (item.enum) {\n value = getEnum(\n item,\n numberImports,\n context,\n existingReferencedProperties,\n 'number',\n );\n } else if ('const' in item) {\n value = JSON.stringify(item.const);\n }\n\n return {\n value,\n enums: item.enum,\n imports: numberImports,\n name: item.name,\n // `item.enum` / `const` reassign `value` after `getNullable`, discarding\n // the wrap — so only the plain numeric path is actually null-wrapped.\n nullWrapped: nullWrapped && !item.enum && !('const' in item),\n };\n }\n\n case 'boolean': {\n let value = 'faker.datatype.boolean()';\n const booleanImports: GeneratorImport[] = [];\n if (item.enum) {\n value = getEnum(\n item,\n booleanImports,\n context,\n existingReferencedProperties,\n 'boolean',\n );\n } else if ('const' in item) {\n value = JSON.stringify(item.const);\n }\n return {\n value,\n enums: item.enum,\n imports: booleanImports,\n name: item.name,\n };\n }\n\n case 'array': {\n if (!item.items) {\n return { value: '[]', imports: [], name: item.name };\n }\n\n const itemsRef = extractItemsRef(item.items);\n if (\n itemsRef &&\n existingReferencedProperties.includes(\n getRefInfo(itemsRef, context).name,\n )\n ) {\n return { value: '[]', imports: [], name: item.name };\n }\n\n // If `items` is a single-element `allOf`/`oneOf`/`anyOf` wrapping a\n // `$ref`, treat it as a direct `$ref`. This avoids double-wrapping when\n // the inner schema is an enum array (whose `getEnum` already emits\n // `faker.helpers.arrayElements(...)`) and keeps recursion semantics in\n // line with direct-$ref items.\n const resolvedItems =\n itemsRef && !('$ref' in item.items) ? { $ref: itemsRef } : item.items;\n\n const {\n value,\n enums,\n imports: resolvedImports,\n } = resolveMockValue({\n schema: {\n ...resolvedItems,\n name: item.name,\n parentName: item.parentName,\n path: item.path ? `${item.path}.[]` : '#.[]',\n },\n combine,\n mockOptions,\n operationId,\n tags,\n context,\n imports,\n existingReferencedProperties,\n existingReferencedAllOfRefs,\n splitMockImplementations,\n });\n\n if (enums) {\n return {\n value,\n imports: resolvedImports,\n name: item.name,\n };\n }\n\n let mapValue = value;\n\n const extractedItemCall = extractArrayItemMock({\n items: resolvedItems,\n propertyName: item.name,\n parentName: item.parentName,\n operationId,\n tags,\n mapValue,\n context,\n splitMockImplementations,\n imports: resolvedImports,\n });\n if (extractedItemCall) {\n mapValue = extractedItemCall;\n }\n\n if (\n combine &&\n !value.startsWith('faker') &&\n !value.startsWith('{') &&\n !value.startsWith('Array.from')\n ) {\n mapValue = `{${value}}`;\n }\n\n // Use global defaults for the missing bound only when they do not\n // invert the range; otherwise reuse the explicit schema bound so we\n // never invent values the user did not supply (and never produce\n // min > max). This also avoids relying on faker's internal default\n // upper bound when only `minItems` is specified, which can otherwise\n // produce very large arrays.\n const arrSchemaMin = item.minItems;\n const arrSchemaMax = item.maxItems;\n const arrGlobalMin = safeMockOptions.arrayMin;\n const arrGlobalMax = safeMockOptions.arrayMax;\n\n let arrMin: number | undefined;\n if (arrSchemaMin !== undefined) {\n arrMin = arrSchemaMin;\n } else if (arrSchemaMax === undefined) {\n arrMin = arrGlobalMin;\n } else if (arrGlobalMin === undefined || arrGlobalMin > arrSchemaMax) {\n arrMin = arrSchemaMax;\n } else {\n arrMin = arrGlobalMin;\n }\n\n let arrMax: number | undefined;\n if (arrSchemaMax !== undefined) {\n arrMax = arrSchemaMax;\n } else if (arrSchemaMin === undefined) {\n arrMax = arrGlobalMax;\n } else if (arrGlobalMax === undefined || arrGlobalMax < arrSchemaMin) {\n arrMax = arrSchemaMin;\n } else {\n arrMax = arrGlobalMax;\n }\n\n const arrParts: string[] = [];\n if (arrMin !== undefined) arrParts.push(`min: ${arrMin}`);\n if (arrMax !== undefined) arrParts.push(`max: ${arrMax}`);\n const arrLengthArg =\n arrParts.length > 0 ? `{${arrParts.join(', ')}}` : '';\n\n return {\n value:\n `Array.from({ length: faker.number.int(` +\n `${arrLengthArg}) ` +\n `}, (_, i) => i + 1).map(() => (${mapValue}))`,\n imports: resolvedImports,\n name: item.name,\n };\n }\n\n case 'string': {\n // faker.string.alpha's `length: { min, max }` form requires BOTH bounds.\n // When only one side is schema-specified, fall back to the global default\n // for the missing side only if it does not invert the range; otherwise\n // reuse the explicit bound so we never invent values the user did not\n // supply (and never produce min > max).\n const schemaMin = item.minLength;\n const schemaMax = item.maxLength;\n const globalMin = safeMockOptions.stringMin;\n const globalMax = safeMockOptions.stringMax;\n\n let strMin: number | undefined;\n if (schemaMin !== undefined) {\n strMin = schemaMin;\n } else if (schemaMax === undefined) {\n strMin = globalMin;\n } else if (globalMin === undefined || globalMin > schemaMax) {\n strMin = schemaMax;\n } else {\n strMin = globalMin;\n }\n\n let strMax: number | undefined;\n if (schemaMax !== undefined) {\n strMax = schemaMax;\n } else if (schemaMin === undefined) {\n strMax = globalMax;\n } else if (globalMax === undefined || globalMax < schemaMin) {\n strMax = schemaMin;\n } else {\n strMax = globalMax;\n }\n\n // faker.string.alpha's `length: { min, max }` requires both bounds, so\n // only emit a length argument when we have a complete pair. If only one\n // side could be resolved (e.g., no schema bound and only one global is\n // configured) we fall back to faker's own default length.\n const strLenParts: string[] = [];\n if (strMin !== undefined && strMax !== undefined) {\n strLenParts.push(`min: ${strMin}`, `max: ${strMax}`);\n }\n const length =\n strLenParts.length > 0 ? `{length: {${strLenParts.join(', ')}}}` : '';\n let value = `faker.string.alpha(${length})`;\n const stringImports: GeneratorImport[] = [];\n\n if (item.enum) {\n value = getEnum(\n item,\n stringImports,\n context,\n existingReferencedProperties,\n 'string',\n );\n } else if (item.pattern) {\n value = `faker.helpers.fromRegExp(${JSON.stringify(item.pattern)})`;\n } else if ('const' in item) {\n value = JSON.stringify((item as OpenApiSchemaObject).const);\n }\n\n return {\n value: getNullable(value, isNullable, nonNullableOption),\n enums: item.enum,\n name: item.name,\n imports: stringImports,\n nullWrapped,\n };\n }\n\n case 'null': {\n return {\n value: 'null',\n imports: [],\n name: item.name,\n };\n }\n\n default: {\n if (item.enum) {\n const enumImports: GeneratorImport[] = [];\n const value = getEnum(\n item,\n enumImports,\n context,\n existingReferencedProperties,\n );\n\n return {\n value,\n enums: item.enum,\n imports: enumImports,\n name: item.name,\n };\n }\n\n return getMockObject({\n item,\n mockOptions,\n operationId,\n tags,\n combine: combine\n ? {\n separator: combine.separator,\n includedProperties: [],\n }\n : undefined,\n context,\n imports,\n existingReferencedProperties,\n existingReferencedAllOfRefs,\n splitMockImplementations,\n allowOverride,\n });\n }\n }\n}\n\n// Returns the $ref string from array `items` — either direct ($ref on items\n// itself) or wrapped in a single-element allOf/oneOf/anyOf composition.\n// Multi-element compositions return undefined to preserve combine semantics.\nexport function extractItemsRef(items: MockSchema): string | undefined {\n if (isReference(items)) {\n return items.$ref;\n }\n for (const key of ['allOf', 'oneOf', 'anyOf'] as const) {\n const composed = items[key] as MockSchema[] | undefined;\n if (\n Array.isArray(composed) &&\n composed.length === 1 &&\n isReference(composed[0])\n ) {\n return composed[0].$ref;\n }\n }\n return;\n}\n\nfunction getItemType(item: MockSchemaObject) {\n if (Array.isArray(item.type) && item.type.includes('null')) {\n const typesWithoutNull = item.type.filter((x) => x !== 'null');\n const itemType =\n typesWithoutNull.length === 1 ? typesWithoutNull[0] : typesWithoutNull;\n\n return itemType;\n }\n\n if (item.type) return item.type;\n if (!item.enum) return;\n\n const uniqTypes = new Set(item.enum.map((value) => typeof value));\n if (uniqTypes.size > 1) return;\n\n const type = [...uniqTypes.values()].at(0);\n if (!type) return;\n return ['string', 'number'].includes(type) ? type : undefined;\n}\n\nfunction getEnum(\n item: MockSchemaObject,\n imports: GeneratorImport[],\n context: ContextSpec,\n existingReferencedProperties: string[],\n type?: 'string' | 'number' | 'boolean',\n) {\n if (!item.enum) return '';\n const joinedEnumValues = item.enum\n .filter((e) => e !== null) // TODO fix type, e can absolutely be null\n .map((e) =>\n type === 'string' || (type === undefined && isString(e))\n ? `'${jsStringLiteralEscape(e)}'`\n : e,\n )\n .join(',');\n\n let enumValue = `[${joinedEnumValues}]`;\n if (context.output.override.enumGenerationType === EnumGeneration.ENUM) {\n if (item.isRef || existingReferencedProperties.length === 0) {\n enumValue += ` as ${item.name}${item.name.endsWith('[]') ? '' : '[]'}`;\n imports.push({ name: item.name });\n } else {\n const parentReference = existingReferencedProperties.at(-1);\n if (!parentReference) {\n return '';\n }\n\n enumValue += ` as ${parentReference}['${item.name}']`;\n if (!item.path?.endsWith('[]')) enumValue += '[]';\n imports.push({\n name: parentReference,\n });\n }\n } else {\n enumValue += ' as const';\n }\n\n // But if the value is a reference, we can use the object directly via the imports and using Object.values.\n if (item.isRef && type === 'string') {\n enumValue = `Object.values(${item.name})`;\n imports.push({\n name: item.name,\n values: true,\n });\n }\n\n return item.path?.endsWith('[]')\n ? `faker.helpers.arrayElements(${enumValue})`\n : `faker.helpers.arrayElement(${enumValue})`;\n}\n","import {\n type ContextSpec,\n type GeneratorImport,\n getRefInfo,\n isFunction,\n isReference,\n type MockOptions,\n type OpenApiSchemaObject,\n OutputMockType,\n pascal,\n} from '@orval/core';\nimport { prop } from 'remeda';\n\nimport {\n formatMockFactoryDeclaration,\n getMockFactorySignatureParts,\n getStrictMockTypeName,\n isStrictMock,\n} from '../../mock-types';\nimport type { MockDefinition, MockSchema, MockSchemaObject } from '../../types';\nimport { overrideVarName } from '../getters';\nimport { getMockScalar } from '../getters/scalar';\nimport { mergeReturnedMockImports } from '../imports';\n\nfunction isRegex(key: string) {\n return key.startsWith('/') && key.endsWith('/');\n}\n\n// Drop `[]` array-items segments from a dotted JSON-pointer-ish path. Treating\n// the marker as transparent for property override matching lets a bare\n// property-name override apply wherever the property literally appears, even\n// inside arrays (#2465). Segment-based so both leading (`[].id`) and embedded\n// (`foo.[].id`) markers normalize equivalently.\nfunction stripArrayMarkerSegments(s: string): string {\n return s\n .split('.')\n .filter((seg) => seg !== '[]')\n .join('.');\n}\n\nexport function resolveMockOverride(\n properties: Record<string, unknown> | undefined = {},\n item: OpenApiSchemaObject & { name: string; path?: string },\n nonNullableOption?: boolean,\n) {\n const path = item.path ?? `#.${item.name}`;\n // Regex keys still match against the original (un-normalized) path so users\n // can opt into array-scoped targeting explicitly if ever needed.\n const normalizedPath = stripArrayMarkerSegments(path);\n const entries = Object.entries(properties);\n\n // Tier 1 — explicit matches: regex (against name or full path) and exact\n // array-transparent path. Checked first so a specific override (regex or\n // dotted path like `country.name`) always wins over the bare-name fallback.\n let property = entries.find(([key]) => {\n if (isRegex(key)) {\n const regex = new RegExp(key.slice(1, -1));\n if (regex.test(item.name) || regex.test(path)) {\n return true;\n }\n }\n\n if (`#.${stripArrayMarkerSegments(key)}` === normalizedPath) {\n return true;\n }\n\n return false;\n });\n\n // Tier 2 — bare property-name transparency (#3470): a dot-less key applies\n // wherever the property literally appears, including inside non-array nested\n // objects, mirroring the array transparency from #2465. Only reached when no\n // explicit Tier 1 key matched, so it never overrides a more specific key.\n if (!property) {\n property = entries.find(\n ([key]) => !isRegex(key) && !key.includes('.') && key === item.name,\n );\n }\n\n if (!property) {\n return;\n }\n\n return {\n value: getNullable(\n property[1] as string,\n isNullableSchema(item),\n nonNullableOption,\n ),\n imports: [],\n name: item.name,\n overrided: true,\n };\n}\n\n/** OpenAPI 3.0 `nullable: true` or 3.1 `type` unions that include `null`. */\nexport function isNullableSchema(schema: unknown): boolean {\n if (!schema || typeof schema !== 'object') {\n return false;\n }\n\n const { type, nullable } = schema as {\n type?: unknown;\n nullable?: unknown;\n };\n\n return nullable === true || (Array.isArray(type) && type.includes('null'));\n}\n\n/** When `nonNullableOption` is true (`override.mock.nonNullable`), omit the null branch. */\nexport function getNullable(\n value: string,\n nullable?: boolean,\n nonNullableOption?: boolean,\n) {\n if (!nullable || nonNullableOption) {\n return value;\n }\n\n return `faker.helpers.arrayElement([${value}, null])`;\n}\n\n/**\n * True when the active faker generator entry asks for consolidated schema\n * mock factories and the output is configured to host them (i.e. there is a\n * dedicated schemas directory we can import `index.faker` from). Used to\n * decide whether an operation factory should inline a `$ref`'d schema or\n * delegate to its `get<X>Mock` factory.\n */\nfunction shouldDelegateToSchemaFactories(context: ContextSpec): boolean {\n if (!context.output.schemas) return false;\n // The duplicate-type guard in `normalizeMocksOption` (see\n // `packages/orval/src/utils/options.ts`) ensures at most one faker entry\n // exists per output, so finding the first one that opted into schemas is\n // unambiguous today and remains correct if that guard ever loosens.\n const fakerEntry = context.output.mock.generators.find(\n (g) =>\n !isFunction(g) && g.type === OutputMockType.FAKER && g.schemas === true,\n );\n return !!fakerEntry;\n}\n\n/**\n * Predicate: this `$ref` points at a top-level `#/components/schemas/<Name>`\n * (vs. a parameter, response, or inline schema). Only those have a\n * corresponding `get<Name>Mock` factory in the consolidated faker file.\n */\nfunction isComponentsSchemaRef(refPaths: string[] | undefined): boolean {\n return (\n Array.isArray(refPaths) &&\n refPaths[0] === 'components' &&\n refPaths[1] === 'schemas'\n );\n}\n\n/**\n * Returns true when an operation- or tag-level mock override touches any\n * property declared on the referenced schema. In that case we must inline\n * the schema body so the override actually applies; the shared\n * `get<X>Mock` factory has no knowledge of operation-scoped overrides.\n *\n * Reuses `resolveMockOverride` so the same matching rules apply as for\n * regular property mocks — bare name, regex (`/.../`), and exact-path\n * (`#.foo.bar`). The parent's `path` (where the `$ref` appears in the\n * surrounding schema) gets composed into each synthetic property item so\n * exact-path overrides like `#.color.value` resolve correctly.\n */\nfunction hasOverrideTouchingSchema(\n schemaProperties: Record<string, unknown> | undefined,\n mockOptions: MockOptions | undefined,\n operationId: string,\n tags: string[],\n parentPath: string | undefined,\n): boolean {\n if (!schemaProperties) return false;\n const propertyNames = Object.keys(schemaProperties);\n if (propertyNames.length === 0) return false;\n\n const overrideBuckets: (Record<string, unknown> | undefined)[] = [\n mockOptions?.operations?.[operationId]?.properties,\n ];\n for (const tag of tags) {\n overrideBuckets.push(mockOptions?.tags?.[tag]?.properties);\n }\n\n return overrideBuckets.some((bucket) => {\n if (!bucket) return false;\n return propertyNames.some((propertyName) => {\n const synthetic = {\n name: propertyName,\n path: parentPath ? `${parentPath}.${propertyName}` : propertyName,\n } as OpenApiSchemaObject & { name: string; path?: string };\n return !!resolveMockOverride(bucket, synthetic);\n });\n });\n}\n\ninterface ResolveMockValueOptions {\n schema: MockSchema;\n operationId: string;\n mockOptions?: MockOptions;\n tags: string[];\n combine?: {\n separator: 'allOf' | 'oneOf' | 'anyOf';\n includedProperties: string[];\n };\n context: ContextSpec;\n imports: GeneratorImport[];\n // This is used to prevent recursion when combining schemas\n // When an element is added to the array, it means on this iteration, we've already seen this property\n existingReferencedProperties: string[];\n // Tracks the current contiguous `allOf` composition to break cyclic\n // inheritance; threaded through to `combineSchemasMock`.\n // See `existingReferencedAllOfRefs` docs in getters/combine.ts.\n existingReferencedAllOfRefs?: string[];\n splitMockImplementations: string[];\n allowOverride?: boolean;\n}\n\nexport function resolveMockValue({\n schema,\n mockOptions,\n operationId,\n tags,\n combine,\n context,\n imports,\n existingReferencedProperties,\n existingReferencedAllOfRefs = [],\n splitMockImplementations,\n allowOverride,\n}: ResolveMockValueOptions): MockDefinition & { type?: string } {\n if (isReference(schema)) {\n const schemaReference = schema as MockSchema & {\n path?: string;\n required?: string[];\n nullable?: boolean;\n };\n const schemaRefPath = typeof schema.$ref === 'string' ? schema.$ref : '';\n const { name, refPaths } = getRefInfo(schemaRefPath, context);\n\n const schemaRef = Array.isArray(refPaths)\n ? (prop(\n context.spec,\n // @ts-expect-error: [ts2556] refPaths are not guaranteed to be valid keys of the spec\n ...refPaths,\n ) as Partial<OpenApiSchemaObject>)\n : undefined;\n\n const newSchema = {\n ...schemaRef,\n name,\n path: schemaReference.path,\n isRef: true,\n required: [\n ...((schemaRef?.required as string[] | undefined) ?? []),\n ...(schemaReference.required ?? []),\n ],\n ...(schemaReference.nullable === undefined\n ? {}\n : { nullable: schemaReference.nullable }),\n } as MockSchemaObject;\n\n // When a discriminator parent ($ref-loaded schema with both `discriminator`\n // and `oneOf`) is being expanded inside an `allOf` chain AND the chain\n // is rooted at one of that parent's mapping targets (i.e. the current\n // schema *is* a variant via `allOf: [parent, ...extras]`), the parent's\n // `oneOf` is descriptive of the union, not additive to this specific\n // variant. Re-expanding it inlines sibling factory calls into the derived\n // variant's mock body (#2155). Drop the `oneOf` side here; the parent\n // still contributes its own `properties` and other base attributes\n // through the remaining schema fields.\n //\n // The mapping-target check guards against cases like\n // `someField: allOf: [<discriminator parent>]` (e.g. #one-of-nested\n // `Example2.expiry`), where the surrounding schema is NOT a variant of\n // the parent and we still need the full union to randomize over.\n //\n // Symmetrically with the oneOf-side fix in `combineSchemasMock` (#3429),\n // also drop the discriminator key from the parent's `properties`: each\n // variant already carries a constrained discriminator value via\n // `resolveDiscriminators`, so leaving the parent's free-choice enum in\n // would just emit dead code (immediately shadowed by the variant's\n // constrained value through spread merge).\n if (\n combine?.separator === 'allOf' &&\n newSchema.discriminator &&\n newSchema.oneOf\n ) {\n const parentDiscriminator = newSchema.discriminator as {\n propertyName?: string;\n mapping?: Record<string, string>;\n };\n const mappingTargetNames = parentDiscriminator.mapping\n ? Object.values(parentDiscriminator.mapping).map((ref) =>\n pascal(ref.split('/').pop() ?? ''),\n )\n : [];\n const expandingAsVariant = existingReferencedProperties.some((refName) =>\n mappingTargetNames.includes(refName),\n );\n\n if (expandingAsVariant) {\n const mutableSchema = newSchema as Record<string, unknown>;\n delete mutableSchema.oneOf;\n const parentProperties = newSchema.properties as\n | Record<string, unknown>\n | undefined;\n if (\n parentDiscriminator.propertyName &&\n parentProperties &&\n parentDiscriminator.propertyName in parentProperties\n ) {\n const remainingProperties = Object.fromEntries(\n Object.entries(parentProperties).filter(\n ([key]) => key !== parentDiscriminator.propertyName,\n ),\n );\n if (Object.keys(remainingProperties).length === 0) {\n delete mutableSchema.properties;\n } else {\n mutableSchema.properties = remainingProperties;\n }\n const parentRequired = newSchema.required as string[] | undefined;\n if (Array.isArray(parentRequired)) {\n const filteredRequired = parentRequired.filter(\n (key) => key !== parentDiscriminator.propertyName,\n );\n if (filteredRequired.length === 0) {\n delete mutableSchema.required;\n } else {\n mutableSchema.required = filteredRequired;\n }\n }\n }\n }\n }\n\n const newSeparator = newSchema.allOf\n ? 'allOf'\n : newSchema.oneOf\n ? 'oneOf'\n : 'anyOf';\n\n // When schema-level faker factories are being emitted (`schemas: true`),\n // delegate to `get<X>Mock()` instead of inlining the body. The factory\n // already encodes the same fields, so this both deduplicates the output\n // and lets a single source of truth drive shared mocks.\n const canDelegate =\n shouldDelegateToSchemaFactories(context) &&\n isComponentsSchemaRef(refPaths) &&\n !hasOverrideTouchingSchema(\n schemaRef?.properties as Record<string, unknown> | undefined,\n mockOptions,\n operationId,\n tags,\n schemaReference.path,\n );\n\n if (canDelegate) {\n const factoryName = `get${pascal(name)}Mock`;\n const factoryImport: GeneratorImport = {\n name: factoryName,\n values: true,\n schemaFactory: true,\n };\n const isObjectLike =\n newSchema.type === 'object' ||\n !!newSchema.allOf ||\n resolvesToObjectLike(newSchema, context);\n const mockTypeName = getStrictMockTypeName(pascal(name));\n const strictMockTypeImport: GeneratorImport | undefined =\n isStrictMock(mockOptions) && isObjectLike\n ? {\n name: mockTypeName,\n values: false,\n schemaFactory: true,\n }\n : undefined;\n // For object-like refs the historical inline output is `{ ...body }`\n // so the spread form keeps callers (combineSchemasMock, object\n // properties) working without other changes. For everything else\n // (scalars, arrays, nullables) emit the bare call.\n //\n // A `oneOf`/`anyOf` is only object-like when *every* branch resolves to\n // an object. A composition of primitives (e.g. `number | string`) makes\n // the factory return a primitive union, which is not spreadable: emitting\n // `{ ...get<X>Mock() }` is invalid TypeScript (TS2698) and would discard\n // the value as `{}` at runtime, so it must use the bare call (#3200).\n const strictObjectCast =\n isStrictMock(mockOptions) && isObjectLike ? ` as ${mockTypeName}` : '';\n const callValue = isObjectLike\n ? `{ ...${factoryName}()${strictObjectCast} }`\n : `${factoryName}()`;\n\n return {\n value: getNullable(\n callValue,\n Boolean(newSchema.nullable),\n mockOptions?.nonNullable,\n ),\n imports: strictMockTypeImport\n ? [factoryImport, strictMockTypeImport]\n : [factoryImport],\n name: newSchema.name,\n type: getType(newSchema),\n nullWrapped: Boolean(newSchema.nullable) && !mockOptions?.nonNullable,\n };\n }\n\n const importsBefore = imports.length;\n const scalar = getMockScalar({\n item: newSchema,\n mockOptions,\n operationId,\n tags,\n combine: combine\n ? {\n separator:\n combine.separator === 'anyOf' ? newSeparator : combine.separator,\n includedProperties:\n newSeparator === 'allOf' ? [] : combine.includedProperties,\n }\n : undefined,\n context,\n imports,\n existingReferencedProperties,\n existingReferencedAllOfRefs,\n splitMockImplementations,\n allowOverride,\n });\n if (\n scalar.value &&\n (newSchema.type === 'object' || newSchema.allOf) &&\n combine?.separator === 'oneOf'\n ) {\n const funcName = `get${pascal(operationId)}Response${pascal(newSchema.name)}Mock`;\n if (\n !splitMockImplementations.some((f) =>\n f.includes(`export const ${funcName}`),\n )\n ) {\n const discriminator = newSchema.discriminator as\n | { propertyName?: string }\n | undefined;\n const discriminatedProperty = discriminator?.propertyName;\n\n let overrideType = `Partial<${newSchema.name}>`;\n if (discriminatedProperty) {\n overrideType = `Omit<${overrideType}, '${discriminatedProperty}'>`;\n }\n\n const { param, returnType, returnCast } = getMockFactorySignatureParts(\n newSchema.name,\n mockOptions,\n {\n isOverridable: true,\n overrideType,\n },\n );\n const func = formatMockFactoryDeclaration(\n funcName,\n param,\n returnType,\n `{${scalar.value.startsWith('...') ? '' : '...'}${scalar.value}, ...${overrideVarName}}`,\n returnCast,\n { terminateStatement: true },\n );\n splitMockImplementations.push(func);\n }\n\n scalar.value = newSchema.nullable\n ? `${funcName}()`\n : `{...${funcName}()}`;\n\n const typeImport: GeneratorImport = {\n name: newSchema.name,\n values: false,\n };\n scalar.imports.push(typeImport);\n if (scalar.imports !== imports) {\n imports.push(typeImport);\n }\n }\n\n mergeReturnedMockImports(imports, importsBefore, scalar.imports);\n\n return {\n ...scalar,\n type: getType(newSchema),\n };\n }\n\n const importsBefore = imports.length;\n const scalar = getMockScalar({\n item: schema,\n mockOptions,\n operationId,\n tags,\n combine,\n context,\n imports,\n existingReferencedProperties,\n existingReferencedAllOfRefs,\n splitMockImplementations,\n allowOverride,\n });\n mergeReturnedMockImports(imports, importsBefore, scalar.imports);\n return {\n ...scalar,\n type: getType(schema),\n };\n}\n\nfunction getType(schema: MockSchema) {\n if (isReference(schema)) {\n return;\n }\n\n return (\n (schema.type as string | undefined) ??\n (schema.properties ? 'object' : schema.items ? 'array' : undefined)\n );\n}\n\n// Whether a schema (or a `$ref` to one) ultimately produces an object mock.\n// Used to decide if a delegated `get<X>Mock()` call may be spread into an\n// object literal. Object-like schemas are `type: 'object'`, `properties`,\n// `additionalProperties` and `allOf`; a `oneOf`/`anyOf` qualifies only when\n// every branch resolves to an object. A union containing a primitive\n// (e.g. `number | string`) does not, since spreading that union is invalid\n// TypeScript. `seen` carries the `$ref`s on the current resolution path to\n// guard against self-referential compositions. A fresh copy is taken at each\n// `$ref` hop so sibling branches sharing a `$ref` don't falsely trip the guard.\nfunction resolvesToObjectLike(\n schema: MockSchema,\n context: ContextSpec,\n seen = new Set<string>(),\n): boolean {\n let resolved: Partial<OpenApiSchemaObject> | undefined;\n\n if (isReference(schema)) {\n // A non-string or already-visited `$ref` can't be resolved further here.\n if (typeof schema.$ref !== 'string' || seen.has(schema.$ref)) {\n return false;\n }\n seen = new Set(seen).add(schema.$ref);\n const { refPaths } = getRefInfo(schema.$ref, context);\n resolved = Array.isArray(refPaths)\n ? (prop(\n context.spec,\n // @ts-expect-error: refPaths are not guaranteed to be valid keys of the spec\n ...refPaths,\n ) as Partial<OpenApiSchemaObject>)\n : undefined;\n } else {\n resolved = schema as Partial<OpenApiSchemaObject>;\n }\n\n if (!resolved) {\n return false;\n }\n\n if (\n resolved.type === 'object' ||\n resolved.properties ||\n resolved.additionalProperties ||\n resolved.allOf\n ) {\n return true;\n }\n\n const branches = (resolved.oneOf ?? resolved.anyOf) as\n | MockSchema[]\n | undefined;\n if (branches && branches.length > 0) {\n return branches.every((branch) =>\n resolvesToObjectLike(branch, context, seen),\n );\n }\n\n return false;\n}\n","import {\n type ContextSpec,\n type GeneratorImport,\n getRefInfo,\n isReference,\n isSchema,\n type MockOptions,\n} from '@orval/core';\n\nimport type { MockDefinition, MockSchema, MockSchemaObject } from '../../types';\nimport { resolveMockValue } from '../resolvers';\n\nfunction getReferenceName(\n ref: string | undefined,\n context: ContextSpec,\n): string {\n if (!ref) return '';\n\n return getRefInfo(ref, context).name;\n}\n\ninterface CombineSchemasMockOptions {\n item: MockSchemaObject;\n separator: 'allOf' | 'oneOf' | 'anyOf';\n operationId: string;\n mockOptions?: MockOptions;\n tags: string[];\n combine?: {\n separator: 'allOf' | 'oneOf' | 'anyOf';\n includedProperties: string[];\n };\n context: ContextSpec;\n imports: GeneratorImport[];\n // This is used to prevent recursion when combining schemas\n // When an element is added to the array, it means on this iteration, we've already seen this property\n existingReferencedProperties: string[];\n // Schemas on the *current contiguous `allOf` composition* — the chain of\n // `allOf` bases entered to reach the schema being expanded right now. This is\n // the canonical doc for this field; other sites just point here.\n //\n // Why it exists: to break cycles built purely from top-level named schemas\n // that extend each other (`A: allOf[B]`, `B: allOf[A]`). There every hop is a\n // `$ref`, so `item.isRef` is always true and the `!item.isRef` clause in\n // `shouldSkipRef` never fires; this chain catches the repeat instead. (It is\n // narrower than `existingReferencedProperties`, which records every visited\n // `$ref` — variants and properties included.)\n //\n // Invariant: it grows only on a direct `allOf` -> `allOf` base descent, and\n // resets to `[]` when crossing into a `oneOf`/`anyOf` variant or a property\n // value. Those boundaries begin a fresh mock instance whose own `allOf` base\n // is legitimate and must still be pulled in, so keeping the chain across them\n // would wrongly skip that base. Such re-entry can't loop forever anyway —\n // `existingReferencedProperties` already bounds it.\n existingReferencedAllOfRefs?: string[];\n splitMockImplementations: string[];\n}\n\nexport function combineSchemasMock({\n item,\n separator,\n mockOptions,\n operationId,\n tags,\n combine,\n context,\n imports,\n existingReferencedProperties,\n existingReferencedAllOfRefs = [],\n splitMockImplementations,\n}: CombineSchemasMockOptions): MockDefinition {\n const combineImports: GeneratorImport[] = [];\n const includedProperties: string[] = [...(combine?.includedProperties ?? [])];\n const separatorItems = (item[separator] ?? []) as MockSchema[];\n const itemRequired = item.required as string[] | undefined;\n\n const isRefAndNotExisting =\n isReference(item) && !existingReferencedProperties.includes(item.name);\n\n // When a oneOf schema declares a discriminator with a mapping AND the\n // discriminator property is also declared on the parent's `properties`,\n // skip that property here. Each variant already encodes a constrained value\n // for it via `resolveDiscriminators`; emitting the parent's free-choice enum\n // alongside the picked variant would override the constrained value and\n // guarantee a discriminator mismatch (#2155).\n const discriminator = item.discriminator as\n | { propertyName?: string; mapping?: Record<string, string> }\n | undefined;\n const itemProperties = item.properties as Record<string, unknown> | undefined;\n const discriminatorPropertyName =\n separator === 'oneOf' &&\n discriminator?.mapping &&\n discriminator.propertyName &&\n itemProperties &&\n discriminator.propertyName in itemProperties\n ? discriminator.propertyName\n : undefined;\n\n const itemEntriesForResolve = Object.entries(item).filter(\n ([key]) => key !== separator,\n );\n if (discriminatorPropertyName && itemProperties) {\n const propertiesIdx = itemEntriesForResolve.findIndex(\n ([key]) => key === 'properties',\n );\n if (propertiesIdx !== -1) {\n const filteredProperties = Object.fromEntries(\n Object.entries(itemProperties).filter(\n ([key]) => key !== discriminatorPropertyName,\n ),\n );\n if (Object.keys(filteredProperties).length === 0) {\n itemEntriesForResolve.splice(propertiesIdx, 1);\n } else {\n itemEntriesForResolve[propertiesIdx] = [\n 'properties',\n filteredProperties,\n ];\n }\n }\n // Keep `required` in sync with the filtered properties — leaving the\n // discriminator key in `required` would describe a schema whose required\n // field is missing from `properties`.\n const requiredIdx = itemEntriesForResolve.findIndex(\n ([key]) => key === 'required',\n );\n if (requiredIdx !== -1 && Array.isArray(itemRequired)) {\n const filteredRequired = itemRequired.filter(\n (key) => key !== discriminatorPropertyName,\n );\n if (filteredRequired.length === 0) {\n itemEntriesForResolve.splice(requiredIdx, 1);\n } else {\n itemEntriesForResolve[requiredIdx] = ['required', filteredRequired];\n }\n }\n }\n\n const hasResolvableProperties = itemEntriesForResolve.some(\n ([key]) => key === 'properties',\n );\n\n const itemResolvedValue =\n isRefAndNotExisting || hasResolvableProperties\n ? resolveMockValue({\n schema: Object.fromEntries(itemEntriesForResolve) as MockSchemaObject,\n combine: {\n separator: 'allOf',\n includedProperties: [],\n },\n mockOptions,\n operationId,\n tags,\n context,\n imports,\n existingReferencedProperties,\n existingReferencedAllOfRefs,\n splitMockImplementations,\n })\n : undefined;\n\n includedProperties.push(...(itemResolvedValue?.includedProperties ?? []));\n combineImports.push(...(itemResolvedValue?.imports ?? []));\n let containsOnlyPrimitiveValues = true;\n\n const allRequiredFields: string[] = [];\n if (separator === 'allOf') {\n if (itemRequired) {\n allRequiredFields.push(...itemRequired);\n }\n for (const val of separatorItems) {\n if (isSchema(val) && val.required) {\n allRequiredFields.push(...(val.required as string[]));\n }\n }\n }\n\n let value = separator === 'allOf' ? '' : 'faker.helpers.arrayElement([';\n\n for (const val of separatorItems) {\n const refName = isReference(val) ? getReferenceName(val.$ref, context) : '';\n // For allOf: skip a base that would otherwise re-expand forever, in any of:\n // - `refName === item.name`: the schema lists itself as its own base;\n // - an already-seen *inline* base (`!item.isRef`): a circular inline allOf;\n // - a ref already on the contiguous allOf chain\n // (`existingReferencedAllOfRefs`): a top-level allOf cycle — see that\n // field's docs above.\n // Top-level refs (`item.isRef`) are otherwise allowed through so a schema\n // still inherits its base properties.\n // For oneOf/anyOf: skip a variant pointing back to an already-visited schema,\n // otherwise polymorphic recursion re-expands forever\n // (e.g. Base.Parent → oneOf [Derived → allOf [Base]]).\n const shouldSkipRef =\n separator === 'allOf'\n ? refName &&\n (refName === item.name ||\n (existingReferencedProperties.includes(refName) && !item.isRef) ||\n existingReferencedAllOfRefs.includes(refName))\n : refName && existingReferencedProperties.includes(refName);\n\n if (shouldSkipRef) {\n if (separatorItems.length === 1) {\n value = 'undefined';\n }\n continue;\n }\n\n // the required fields in this schema need to be considered\n // in the sub schema under the allOf key\n const schema = (() => {\n if (separator !== 'allOf' || allRequiredFields.length === 0) {\n return {\n ...val,\n name: item.name,\n path: item.path ?? '#',\n };\n }\n\n const valWithRequired = val as MockSchema & { required?: string[] };\n const valRequired = valWithRequired.required;\n const combinedRequired = valRequired\n ? [...allRequiredFields, ...valRequired]\n : allRequiredFields;\n\n return {\n ...val,\n name: item.name,\n path: item.path ?? '#',\n required: [...new Set(combinedRequired)],\n };\n })();\n\n const resolvedValue = resolveMockValue({\n schema,\n combine: {\n separator,\n includedProperties:\n separator === 'oneOf'\n ? (itemResolvedValue?.includedProperties ?? [])\n : includedProperties,\n },\n mockOptions,\n operationId,\n tags,\n context,\n imports,\n existingReferencedProperties,\n // Grow the chain on an allOf base hop; reset it on a oneOf/anyOf variant\n // (a fresh instance). See `existingReferencedAllOfRefs` docs above.\n existingReferencedAllOfRefs:\n separator === 'allOf' && refName\n ? [...existingReferencedAllOfRefs, refName]\n : [],\n splitMockImplementations,\n });\n\n combineImports.push(...resolvedValue.imports);\n includedProperties.push(...(resolvedValue.includedProperties ?? []));\n\n if (resolvedValue.value === '{}') {\n containsOnlyPrimitiveValues = false;\n continue;\n }\n\n if (separator === 'allOf') {\n if (resolvedValue.value.startsWith('{') || !resolvedValue.type) {\n containsOnlyPrimitiveValues = false;\n value += `...${resolvedValue.value},`;\n continue;\n }\n\n if (resolvedValue.type === 'object') {\n containsOnlyPrimitiveValues = false;\n value += resolvedValue.value.startsWith('faker')\n ? `...${resolvedValue.value},`\n : `...{${resolvedValue.value}},`;\n continue;\n }\n }\n\n value += `${resolvedValue.value},`;\n }\n // When every oneOf/anyOf variant was skipped (e.g. all $refs were already on\n // the resolution stack) the loop leaves `value` at its initial opener. Emit\n // `undefined` instead of closing it as `faker.helpers.arrayElement([])`,\n // which throws at runtime.\n const isEmptyArrayElement =\n separator !== 'allOf' && value === 'faker.helpers.arrayElement([';\n\n let finalValue =\n value === 'undefined' || isEmptyArrayElement\n ? 'undefined'\n : // containsOnlyPrimitiveValues isn't just true, it's being set to false inside the above reduce and the type system doesn't detect it\n `${separator === 'allOf' && !containsOnlyPrimitiveValues ? '{' : ''}${value}${separator === 'allOf' ? (containsOnlyPrimitiveValues ? '' : '}') : '])'}`;\n if (itemResolvedValue) {\n finalValue = finalValue.startsWith('...')\n ? `...{${finalValue}, ${itemResolvedValue.value}}`\n : `{...${finalValue}, ${itemResolvedValue.value}}`;\n }\n if (finalValue.endsWith(',')) {\n finalValue = finalValue.slice(0, Math.max(0, finalValue.length - 1));\n }\n\n return {\n value: finalValue,\n imports: combineImports,\n name: item.name,\n includedProperties,\n };\n}\n","import { camel, sanitize } from '@orval/core';\n\nconst hasParam = (path: string): boolean => /[^{]*{[\\w*_-]*}.*/.test(path);\n\nconst getRoutePath = (path: string): string => {\n const matches = /([^{]*){?([\\w*_-]*)}?(.*)/.exec(path);\n if (!matches?.length) return path; // impossible due to regexp grouping here, but for TS\n\n const prev = matches[1];\n const param = sanitize(camel(matches[2]), {\n es5keyword: true,\n underscore: true,\n dash: true,\n dot: true,\n });\n const next = hasParam(matches[3]) ? getRoutePath(matches[3]) : matches[3];\n\n return hasParam(path) ? `${prev}:${param}${next}` : `${prev}${param}${next}`;\n};\n\nexport const getRouteMSW = (route: string, baseUrl = '*') => {\n route = route.replaceAll(':', String.raw`\\\\:`);\n const splittedRoute = route.split('/');\n let resolvedRoute = baseUrl;\n\n for (const [index, path] of splittedRoute.entries()) {\n if (!path && !index) {\n continue;\n }\n\n if (!path.includes('{')) {\n resolvedRoute = `${resolvedRoute}/${path}`;\n continue;\n }\n\n resolvedRoute = `${resolvedRoute}/${getRoutePath(path)}`;\n }\n\n return resolvedRoute;\n};\n","import {\n type ContextSpec,\n generalJSTypesWithArray,\n type GeneratorImport,\n type GlobalMockOptions,\n isFunction,\n type MockOptions,\n type NormalizedOverrideOutput,\n type OpenApiDocument,\n resolveRef,\n type ResReqTypesValue,\n stringify,\n} from '@orval/core';\n\nimport { formatSchemaExampleValue } from '../faker/format-example-value';\nimport { getMockScalar } from '../faker/getters';\nimport {\n appendImportsDelta,\n collectSplitMockTypeImports,\n} from '../faker/imports';\n\nfunction getMockPropertiesWithoutFunc(\n properties:\n | Record<string, unknown>\n | ((spec: OpenApiDocument) => Record<string, unknown>),\n spec: OpenApiDocument,\n) {\n const resolvedProperties =\n typeof properties === 'function' ? properties(spec) : properties;\n const mockProperties: Record<string, string> = {};\n\n for (const [key, value] of Object.entries(resolvedProperties)) {\n const implementation = isFunction(value)\n ? `(${String(value)})()`\n : (stringify(value) ?? 'undefined');\n\n mockProperties[key] = implementation.replaceAll(\n /import_faker\\.defaults|import_faker\\.faker|_faker\\.faker/g,\n 'faker',\n );\n }\n\n return mockProperties;\n}\n\nexport function getMockWithoutFunc(\n spec: OpenApiDocument,\n override?: NormalizedOverrideOutput,\n): MockOptions {\n const operations = override?.operations\n ? (() => {\n const operationMocks: Exclude<MockOptions['operations'], undefined> =\n {};\n\n for (const [key, value] of Object.entries(override.operations)) {\n if (!value?.mock?.properties) {\n continue;\n }\n\n operationMocks[key] = {\n properties: getMockPropertiesWithoutFunc(\n value.mock.properties,\n spec,\n ),\n };\n }\n\n return operationMocks;\n })()\n : undefined;\n const tags = override?.tags\n ? (() => {\n const tagMocks: Exclude<MockOptions['tags'], undefined> = {};\n\n for (const [key, value] of Object.entries(override.tags)) {\n if (!value?.mock?.properties) {\n continue;\n }\n\n tagMocks[key] = {\n properties: getMockPropertiesWithoutFunc(\n value.mock.properties,\n spec,\n ),\n };\n }\n\n return tagMocks;\n })()\n : undefined;\n\n return {\n arrayMin: override?.mock?.arrayMin,\n arrayMax: override?.mock?.arrayMax,\n stringMin: override?.mock?.stringMin,\n stringMax: override?.mock?.stringMax,\n numberMin: override?.mock?.numberMin,\n numberMax: override?.mock?.numberMax,\n required: override?.mock?.required,\n nonNullable: override?.mock?.nonNullable,\n fractionDigits: override?.mock?.fractionDigits,\n ...(override?.mock?.properties\n ? {\n properties: getMockPropertiesWithoutFunc(\n override.mock.properties,\n spec,\n ),\n }\n : {}),\n ...(override?.mock?.format\n ? {\n format: getMockPropertiesWithoutFunc(override.mock.format, spec),\n }\n : {}),\n ...(operations ? { operations } : {}),\n ...(tags ? { tags } : {}),\n };\n}\n\nfunction getMockNumberOption(\n mockOptionsWithoutFunc: Record<string, unknown>,\n key: 'arrayMin' | 'arrayMax',\n) {\n const value = mockOptionsWithoutFunc[key];\n return typeof value === 'number' ? value : undefined;\n}\n\nfunction getMockScalarJsTypes(\n definition: string,\n mockOptionsWithoutFunc: Record<string, unknown>,\n) {\n const isArray = definition.endsWith('[]');\n const type = isArray ? definition.slice(0, -2) : definition;\n const arrayMin = getMockNumberOption(mockOptionsWithoutFunc, 'arrayMin');\n const arrayMax = getMockNumberOption(mockOptionsWithoutFunc, 'arrayMax');\n\n switch (type) {\n case 'number': {\n const numArrParts: string[] = [];\n if (arrayMin !== undefined) numArrParts.push(`min: ${arrayMin}`);\n if (arrayMax !== undefined) numArrParts.push(`max: ${arrayMax}`);\n const numArrArg =\n numArrParts.length > 0 ? `{${numArrParts.join(', ')}}` : '';\n return isArray\n ? `Array.from({length: faker.number.int(${numArrArg})}, () => faker.number.int())`\n : 'faker.number.int()';\n }\n case 'string': {\n const strArrParts: string[] = [];\n if (arrayMin !== undefined) strArrParts.push(`min: ${arrayMin}`);\n if (arrayMax !== undefined) strArrParts.push(`max: ${arrayMax}`);\n const strArrArg =\n strArrParts.length > 0 ? `{${strArrParts.join(', ')}}` : '';\n return isArray\n ? `Array.from({length: faker.number.int(${strArrArg})}, () => faker.word.sample())`\n : 'faker.word.sample()';\n }\n default: {\n return 'undefined';\n }\n }\n}\n\ninterface GetResponsesMockDefinitionOptions {\n operationId: string;\n tags: string[];\n returnType: string;\n responses: ResReqTypesValue[];\n mockOptionsWithoutFunc: Record<string, unknown>;\n transformer?: (value: unknown, definition: string) => string;\n context: ContextSpec;\n mockOptions?: GlobalMockOptions;\n splitMockImplementations: string[];\n}\n\nfunction getExampleEntries(examples: unknown): unknown[] {\n if (Array.isArray(examples)) {\n return examples;\n }\n\n if (examples && typeof examples === 'object') {\n return Object.values(examples as Record<string, unknown>);\n }\n\n return [];\n}\n\nfunction unwrapExampleValue(example: unknown): unknown {\n if (example && typeof example === 'object' && 'value' in example) {\n return (example as { value?: unknown }).value;\n }\n\n return example;\n}\n\nexport function getResponsesMockDefinition({\n operationId,\n tags,\n returnType,\n responses,\n mockOptionsWithoutFunc,\n transformer,\n context,\n mockOptions,\n splitMockImplementations,\n}: GetResponsesMockDefinitionOptions) {\n const result = {\n definitions: [] as string[],\n imports: [] as GeneratorImport[],\n };\n\n for (const response of responses) {\n const { value: definition, example, examples, imports, isRef } = response;\n let { originalSchema } = response;\n\n if (context.output.override.mock?.useExamples || mockOptions?.useExamples) {\n const exampleValue = unwrapExampleValue(\n example ??\n originalSchema?.example ??\n getExampleEntries(examples)[0] ??\n getExampleEntries(originalSchema?.examples)[0],\n );\n\n if (exampleValue !== undefined) {\n const formatted = formatSchemaExampleValue(\n exampleValue,\n originalSchema,\n context,\n );\n result.definitions.push(\n transformer ? transformer(formatted, returnType) : formatted,\n );\n continue;\n }\n }\n\n if (!definition || generalJSTypesWithArray.includes(definition)) {\n const value = getMockScalarJsTypes(definition, mockOptionsWithoutFunc);\n\n result.definitions.push(\n transformer ? transformer(value, returnType) : value,\n );\n continue;\n }\n\n if (!originalSchema && definition === 'Blob') {\n originalSchema = { type: 'string', format: 'binary' };\n } else if (!originalSchema) {\n continue;\n }\n\n const resolvedSchema = resolveRef(originalSchema, context).schema;\n\n const responseImports = imports ?? [];\n const importsBefore = responseImports.length;\n const scalar = getMockScalar({\n item: {\n ...(resolvedSchema as Record<string, unknown>),\n name: definition,\n ...(context.output.override.enumGenerationType === 'enum' && isRef\n ? { isRef: true }\n : {}),\n },\n imports: responseImports,\n mockOptions: mockOptionsWithoutFunc,\n operationId,\n tags,\n context,\n existingReferencedProperties: [],\n splitMockImplementations,\n allowOverride: true,\n });\n\n appendImportsDelta(result.imports, responseImports, importsBefore);\n if (scalar.imports !== responseImports) {\n appendImportsDelta(result.imports, scalar.imports, 0);\n }\n result.definitions.push(\n transformer ? transformer(scalar.value, returnType) : scalar.value,\n );\n }\n\n appendImportsDelta(\n result.imports,\n collectSplitMockTypeImports(splitMockImplementations),\n 0,\n );\n\n return result;\n}\n\ninterface GetMockDefinitionOptions {\n operationId: string;\n tags: string[];\n returnType: string;\n responses: ResReqTypesValue[];\n imports: GeneratorImport[];\n override: NormalizedOverrideOutput;\n transformer?: (value: unknown, definition: string) => string;\n context: ContextSpec;\n mockOptions?: GlobalMockOptions;\n splitMockImplementations: string[];\n}\n\nexport function getMockDefinition({\n operationId,\n tags,\n returnType,\n responses,\n override,\n transformer,\n context,\n mockOptions,\n splitMockImplementations,\n}: GetMockDefinitionOptions) {\n const mockOptionsWithoutFunc = getMockWithoutFunc(context.spec, override);\n\n const { definitions, imports } = getResponsesMockDefinition({\n operationId,\n tags,\n returnType,\n responses,\n mockOptionsWithoutFunc,\n transformer,\n context,\n mockOptions,\n splitMockImplementations,\n });\n\n return {\n definition: '[' + definitions.join(', ') + ']',\n definitions,\n imports,\n };\n}\n\nexport function getMockOptionsDataOverride(\n operationTags: string[],\n operationId: string,\n override: NormalizedOverrideOutput,\n) {\n const responseOverride =\n override.operations[operationId]?.mock?.data ??\n operationTags\n .map((operationTag) => override.tags[operationTag]?.mock?.data)\n .find((e) => e !== undefined);\n const implementation = isFunction(responseOverride)\n ? `(${String(responseOverride)})()`\n : stringify(responseOverride);\n\n return implementation?.replaceAll(\n /import_faker\\.defaults|import_faker\\.faker|_faker\\.faker/g,\n 'faker',\n );\n}\n","import {\n type ClientMockGeneratorBuilder,\n escapeRegExp,\n generateDependencyImports,\n type GenerateMockImports,\n type GeneratorDependency,\n type GeneratorImport,\n type GeneratorOptions,\n type GeneratorVerbOptions,\n type GlobalMockOptions,\n isFunction,\n isMswMock,\n isObject,\n pascal,\n type ResReqTypesValue,\n type StrictMockSchemaKind,\n} from '@orval/core';\n\nimport { getDelay } from '../delay';\nimport { getRouteMSW, overrideVarName } from '../faker/getters';\nimport {\n applyStrictMockReturnType,\n collectStrictMockSchemaTypeNamesFromImplementation,\n formatMockFactoryDeclaration,\n getMockFactorySignatureParts,\n getSchemaTypeNamesFromResponses,\n getSimpleSchemaReturnType,\n getStrictMockSchemaKindsFromResponses,\n isStrictMock,\n mergeStrictMockSchemaKinds,\n mergeStrictMockSchemaTypeNames,\n} from '../mock-types';\nimport { getMockDefinition, getMockOptionsDataOverride } from './mocks';\n\nfunction getMSWDependencies(\n options?: GlobalMockOptions,\n): GeneratorDependency[] {\n const locale = options?.locale;\n\n const fakerDependency: GeneratorDependency = {\n exports: [{ name: 'faker', values: true }],\n dependency: locale ? `@faker-js/faker/locale/${locale}` : '@faker-js/faker',\n };\n\n const hasDelay =\n options && isMswMock(options) ? options.delay !== false : true;\n\n const exports = [\n { name: 'http', values: true },\n { name: 'HttpResponse', values: true },\n { name: 'RequestHandlerOptions', values: false },\n ];\n\n if (hasDelay) {\n exports.push({ name: 'delay', values: true });\n }\n\n return [{ exports, dependency: 'msw' }, fakerDependency];\n}\n\nexport const generateMSWImports: GenerateMockImports = ({\n implementation,\n imports,\n projectName,\n hasSchemaDir,\n isAllowSyntheticDefaultImports,\n options,\n}) => {\n return generateDependencyImports(\n implementation,\n [...getMSWDependencies(options), ...imports],\n projectName,\n hasSchemaDir,\n isAllowSyntheticDefaultImports,\n );\n};\n\nfunction generateDefinition(\n name: string,\n route: string,\n getResponseMockFunctionNameBase: string,\n handlerNameBase: string,\n { operationId, response, verb, tags }: GeneratorVerbOptions,\n { override, context, mock }: GeneratorOptions,\n returnType: string,\n status: string,\n responseImports: GeneratorImport[],\n responses: ResReqTypesValue[],\n contentTypes: string[],\n splitMockImplementations: string[],\n) {\n const oldSplitMockImplementations = [...splitMockImplementations];\n const { definitions, definition, imports } = getMockDefinition({\n operationId,\n tags,\n returnType,\n responses,\n imports: responseImports,\n override,\n context,\n mockOptions: isFunction(mock) ? undefined : mock,\n splitMockImplementations,\n });\n\n const mockData = getMockOptionsDataOverride(tags, operationId, override);\n\n let value = '';\n\n if (mockData) {\n value = mockData;\n } else if (definitions.length > 1) {\n value = `faker.helpers.arrayElement(${definition})`;\n } else if (definitions[0]) {\n value = definitions[0];\n }\n\n const isResponseOverridable = value.includes(overrideVarName);\n const isTextLikeContentType = (ct: string) =>\n ct.startsWith('text/') || ct === 'application/xml' || ct.endsWith('+xml');\n const isTypeExactlyString = (typeExpr: string) =>\n typeExpr.trim().replaceAll(/^\\(+|\\)+$/g, '') === 'string';\n const isUnionContainingString = (typeExpr: string) =>\n typeExpr\n .split('|')\n .map((part) => part.trim().replaceAll(/^\\(+|\\)+$/g, ''))\n .includes('string');\n const isBinaryLikeContentType = (ct: string) =>\n ct === 'application/octet-stream' ||\n ct === 'application/pdf' ||\n ct.startsWith('image/') ||\n ct.startsWith('audio/') ||\n ct.startsWith('video/') ||\n ct.startsWith('font/');\n\n const preferredContentType = isFunction(mock)\n ? undefined\n : (\n mock as { preferredContentType?: string } | undefined\n )?.preferredContentType?.toLowerCase();\n // match preferredContentType against `responses` (not the wider `contentTypes` which mixes success and error MIMEs).\n const preferredContentTypeMatch = preferredContentType\n ? responses.find(\n (r) => r.contentType.toLowerCase() === preferredContentType,\n )?.contentType\n : undefined;\n const contentTypesByPreference = preferredContentTypeMatch\n ? [preferredContentTypeMatch]\n : contentTypes;\n const responsesByPreference = preferredContentTypeMatch\n ? responses.filter((r) => r.contentType === preferredContentTypeMatch)\n : responses;\n\n const hasTextLikeContentType = contentTypes.some((ct) =>\n isTextLikeContentType(ct),\n );\n const isExactlyStringReturnType = isTypeExactlyString(returnType);\n\n // Keep text helpers for exact string success return types whenever a text-like\n // media type is available in the declared content types. This prevents a\n // preferredContentType that matches an error media type from forcing\n // HttpResponse.json() for text/plain success responses.\n const isTextResponse =\n (isExactlyStringReturnType && hasTextLikeContentType) ||\n contentTypesByPreference.some((ct) => isTextLikeContentType(ct));\n const isSchemaBinary = (r: ResReqTypesValue) =>\n r.originalSchema?.format === 'binary' ||\n (r.originalSchema?.contentMediaType === 'application/octet-stream' &&\n !r.originalSchema.contentEncoding);\n const isBinaryResponse =\n contentTypesByPreference.some((ct) => isBinaryLikeContentType(ct)) ||\n responsesByPreference.some((r) => isSchemaBinary(r));\n // Bare ref names of schema-binary responses (include alias for collision-renamed imports).\n const binaryRefNames = responsesByPreference\n .filter((r) => isSchemaBinary(r))\n .flatMap((r) =>\n r.imports.flatMap((imp) =>\n imp.alias ? [imp.name, imp.alias] : [imp.name],\n ),\n );\n const isReturnHttpResponse = value && value !== 'undefined';\n\n const getResponseMockFunctionName = `${getResponseMockFunctionNameBase}${pascal(\n name,\n )}`;\n const handlerName = `${handlerNameBase}${pascal(name)}`;\n\n const addedSplitMockImplementations = splitMockImplementations.slice(\n oldSplitMockImplementations.length,\n );\n splitMockImplementations.push(...addedSplitMockImplementations);\n const mockImplementations =\n addedSplitMockImplementations.length > 0\n ? `${addedSplitMockImplementations.join('\\n\\n')}\\n\\n`\n : '';\n\n const binaryTypeRewriteRegex = new RegExp(\n String.raw`\\b(?:${['Blob', ...binaryRefNames].map((n) => escapeRegExp(n)).join('|')})\\b`,\n 'g',\n );\n const mockReturnType = isBinaryResponse\n ? returnType.replaceAll(binaryTypeRewriteRegex, 'ArrayBuffer')\n : returnType;\n\n // Detect when the return type is a union containing void (e.g. \"Resource | void\"\n // from endpoints with both 200 JSON and 204 No Content responses). In this case\n // we need runtime branching so that void responses use `new HttpResponse(null)`\n // instead of `HttpResponse.json()` which does not accept void/undefined.\n const isVoidUnionType =\n mockReturnType !== 'void' &&\n mockReturnType.split('|').some((part) => part.trim() === 'void');\n const noContentStatusCode = isVoidUnionType\n ? (responses.find((r) => r.value === 'void')?.key ?? '204')\n : undefined;\n const nonVoidMockReturnType = isVoidUnionType\n ? mockReturnType\n .split('|')\n .filter((part) => part.trim() !== 'void')\n .join(' | ')\n .trim()\n : mockReturnType;\n\n const hasJsonContentType = contentTypesByPreference.some(\n (ct) => ct.includes('json') || ct.includes('+json'),\n );\n const hasStringReturnType =\n isTypeExactlyString(mockReturnType) ||\n isUnionContainingString(mockReturnType);\n const overrideResponseType = `Partial<Extract<${nonVoidMockReturnType}, object>>`;\n const shouldPreferJsonResponse = hasJsonContentType && !hasStringReturnType;\n\n // When the return type is a union containing both string and structured types\n // (e.g. `string | Pet`) AND both text-like and JSON content types are available,\n // we need runtime branching to pick the correct HttpResponse helper based on\n // the actual resolved value type. Without this, objects could be JSON.stringify'd\n // and served under a text-like Content-Type (e.g. xml/html/plain), which is\n // semantically incorrect for structured JSON data.\n const needsRuntimeContentTypeSwitch =\n isTextResponse &&\n hasJsonContentType &&\n hasStringReturnType &&\n mockReturnType !== 'string';\n\n const mockOptionsFromOverride = override.mock;\n const strictMock = isStrictMock(mockOptionsFromOverride);\n const schemaTypeNames = strictMock\n ? getSchemaTypeNamesFromResponses(responses)\n : [];\n const strictMockReturnType = strictMock\n ? applyStrictMockReturnType(nonVoidMockReturnType, schemaTypeNames)\n : nonVoidMockReturnType;\n const simpleSchemaReturnType = strictMock\n ? getSimpleSchemaReturnType(nonVoidMockReturnType, schemaTypeNames)\n : undefined;\n\n let mockFactoryParam = '';\n let mockFactoryReturnType = nonVoidMockReturnType;\n let mockFactoryReturnCast = '';\n\n if (isResponseOverridable) {\n if (strictMock && simpleSchemaReturnType) {\n const signature = getMockFactorySignatureParts(\n simpleSchemaReturnType,\n mockOptionsFromOverride,\n {\n isOverridable: true,\n overrideType: overrideResponseType,\n },\n );\n mockFactoryParam = signature.param;\n mockFactoryReturnType = signature.returnType;\n mockFactoryReturnCast = signature.returnCast;\n } else {\n mockFactoryParam = `overrideResponse: ${overrideResponseType} = {}`;\n mockFactoryReturnType = strictMock\n ? strictMockReturnType\n : nonVoidMockReturnType;\n }\n } else if (strictMock) {\n mockFactoryReturnType = strictMockReturnType;\n }\n\n const mockImplementation = isReturnHttpResponse\n ? `${mockImplementations}${formatMockFactoryDeclaration(\n getResponseMockFunctionName,\n mockFactoryParam,\n mockFactoryReturnType,\n value,\n mockFactoryReturnCast,\n { omitReturnType: Boolean(mockData) },\n )}\\n\\n`\n : mockImplementations;\n\n const delay = getDelay(override, isFunction(mock) ? undefined : mock);\n const infoParam = 'info';\n const resolvedResponseExpr = `overrideResponse !== undefined\n ? (typeof overrideResponse === \"function\" ? await overrideResponse(${infoParam}) : overrideResponse)\n : ${getResponseMockFunctionName}()`;\n\n const statusCode = status === 'default' ? 200 : status.replace(/XX$/, '00');\n\n // Determine the preferred non-JSON content type for binary responses\n const binaryContentType =\n (preferredContentTypeMatch &&\n isBinaryLikeContentType(preferredContentTypeMatch)\n ? preferredContentTypeMatch\n : contentTypes.find((ct) => isBinaryLikeContentType(ct))) ??\n 'application/octet-stream';\n\n // Pick the most specific MSW response helper based on the first\n // text-like content type so the correct Content-Type header is set.\n // MSW provides HttpResponse.xml() for application/xml and +xml,\n // HttpResponse.html() for text/html, and HttpResponse.text() for\n // all other text/* types.\n const shouldIgnorePreferredForTextHelper =\n isExactlyStringReturnType &&\n !!preferredContentTypeMatch &&\n !isTextLikeContentType(preferredContentTypeMatch) &&\n hasTextLikeContentType;\n const firstTextCt = shouldIgnorePreferredForTextHelper\n ? contentTypes.find((ct) => isTextLikeContentType(ct))\n : contentTypesByPreference.find((ct) => isTextLikeContentType(ct));\n const textHelper =\n firstTextCt === 'application/xml' || firstTextCt?.endsWith('+xml')\n ? 'xml'\n : firstTextCt === 'text/html'\n ? 'html'\n : 'text';\n\n let responseBody: string;\n // Use a prelude to evaluate the override expression once into a temp variable\n // (the expression contains `await` so must not be duplicated). Only emit it\n // when we actually generate a `*ResponseMock()` helper — otherwise the\n // prelude would reference a function that doesn't exist (issue #3270).\n let responsePrelude = '';\n if (isReturnHttpResponse) {\n if (isBinaryResponse) {\n responsePrelude = `const binaryBody = ${resolvedResponseExpr};`;\n } else if (isVoidUnionType || needsRuntimeContentTypeSwitch) {\n responsePrelude = `const resolvedBody = ${resolvedResponseExpr};`;\n } else if (isTextResponse && !shouldPreferJsonResponse) {\n responsePrelude = `const resolvedBody = ${resolvedResponseExpr};\n const textBody = typeof resolvedBody === 'string' ? resolvedBody : JSON.stringify(resolvedBody ?? null);`;\n }\n }\n if (!isReturnHttpResponse) {\n responseBody = `new HttpResponse(null,\n { status: ${statusCode}\n })`;\n } else if (isBinaryResponse) {\n responseBody = `HttpResponse.arrayBuffer(\n binaryBody instanceof ArrayBuffer\n ? binaryBody\n : new ArrayBuffer(0),\n { status: ${statusCode},\n headers: { 'Content-Type': '${binaryContentType}' }\n })`;\n } else if (isVoidUnionType) {\n // Runtime branching for void union types (e.g. 200 JSON + 204 No Content).\n // When the resolved body is undefined, return an empty response with the\n // no-content status code; otherwise use the appropriate response helper.\n let nonVoidBody: string;\n if (needsRuntimeContentTypeSwitch) {\n nonVoidBody = `typeof resolvedBody === 'string'\n ? HttpResponse.${textHelper}(resolvedBody, { status: ${statusCode} })\n : HttpResponse.json(resolvedBody, { status: ${statusCode} })`;\n } else if (isTextResponse && !shouldPreferJsonResponse) {\n nonVoidBody = `HttpResponse.${textHelper}(\n typeof resolvedBody === 'string' ? resolvedBody : JSON.stringify(resolvedBody ?? null),\n { status: ${statusCode} })`;\n } else {\n nonVoidBody = `HttpResponse.json(resolvedBody, { status: ${statusCode} })`;\n }\n responseBody = `resolvedBody === undefined\n ? new HttpResponse(null, { status: ${noContentStatusCode} })\n : ${nonVoidBody}`;\n } else if (needsRuntimeContentTypeSwitch) {\n // Runtime branching: when the resolved value is a string, use the\n // appropriate text helper; otherwise fall back to HttpResponse.json()\n // so objects are never JSON.stringify'd under a text/xml Content-Type.\n responseBody = `typeof resolvedBody === 'string'\n ? HttpResponse.${textHelper}(resolvedBody, { status: ${statusCode} })\n : HttpResponse.json(resolvedBody, { status: ${statusCode} })`;\n } else if (isTextResponse && !shouldPreferJsonResponse) {\n responseBody = `HttpResponse.${textHelper}(textBody,\n { status: ${statusCode}\n })`;\n } else {\n responseBody = `HttpResponse.json(${resolvedResponseExpr},\n { status: ${statusCode}\n })`;\n }\n\n const infoType = `Parameters<Parameters<typeof http.${verb}>[1]>[0]`;\n\n const handlerImplementation = `\nexport const ${handlerName} = (overrideResponse?: ${mockReturnType} | ((${infoParam}: ${infoType}) => Promise<${mockReturnType}> | ${mockReturnType}), options?: RequestHandlerOptions) => {\n return http.${verb}('${route}', async (${infoParam}: ${infoType}) => {${\n delay === false\n ? ''\n : `await delay(${isFunction(delay) ? `(${String(delay)})()` : String(delay)});`\n }\n ${isReturnHttpResponse ? '' : `if (typeof overrideResponse === 'function') {await overrideResponse(info); }`}\n ${responsePrelude}\n return ${responseBody}\n }, options)\n}\\n`;\n\n const includeResponseImports = [\n ...imports,\n ...response.imports.filter((r) => {\n // Only keep imports referenced in the mock. Aliased imports\n // (`Foo as __Foo`) reference the alias rather than the bare name, so\n // match against either. Mirrors `addDependency` in core/generators/imports.ts (#3269).\n const searchWords = [r.alias, r.name]\n .filter((p): p is string => Boolean(p?.length))\n .map((part) => escapeRegExp(part))\n .join('|');\n if (!searchWords) {\n return false;\n }\n const reg = new RegExp(String.raw`\\b(${searchWords})\\b`);\n return reg.test(handlerImplementation) || reg.test(mockImplementation);\n }),\n ];\n\n return {\n implementation: {\n function: mockImplementation,\n handlerName: handlerName,\n handler: handlerImplementation,\n },\n imports: includeResponseImports,\n strictMockSchemaTypeNames: strictMock\n ? mergeStrictMockSchemaTypeNames(\n schemaTypeNames,\n // Nested split factories: see collectStrictMockSchemaTypeNamesFromImplementation\n // re regex-coupling note — prefer threading names from getters long-term.\n collectStrictMockSchemaTypeNamesFromImplementation(\n mockImplementation,\n ),\n )\n : undefined,\n strictMockSchemaKinds: strictMock\n ? mergeStrictMockSchemaKinds(\n getStrictMockSchemaKindsFromResponses(responses, context),\n Object.fromEntries(\n (\n collectStrictMockSchemaTypeNamesFromImplementation(\n mockImplementation,\n ) ?? []\n ).map((name) => [name, 'object' satisfies StrictMockSchemaKind]),\n ),\n )\n : undefined,\n };\n}\n\nexport function generateMSW(\n generatorVerbOptions: GeneratorVerbOptions,\n generatorOptions: GeneratorOptions,\n): ClientMockGeneratorBuilder {\n const { pathRoute, override, mock } = generatorOptions;\n const { operationName, response } = generatorVerbOptions;\n\n const overrideBaseUrl =\n override.mock && 'baseUrl' in override.mock\n ? (override.mock as { baseUrl?: string }).baseUrl\n : undefined;\n const mockBaseUrl = mock && isMswMock(mock) ? mock.baseUrl : undefined;\n const route = getRouteMSW(pathRoute, overrideBaseUrl ?? mockBaseUrl);\n\n // Derive names from operationName (not operationId): splitByContentType keeps\n // one operationId across variants but suffixes operationName (e.g. *WithJson /\n // *WithFormData), and the client side already names functions from it. Using\n // operationId here would emit duplicate handler names and break tsc. See #3342.\n const handlerName = `get${pascal(operationName)}MockHandler`;\n const getResponseMockFunctionName = `get${pascal(operationName)}ResponseMock`;\n\n const splitMockImplementations: string[] = [];\n\n const baseDefinition = generateDefinition(\n '',\n route,\n getResponseMockFunctionName,\n handlerName,\n generatorVerbOptions,\n generatorOptions,\n response.definition.success,\n response.types.success[0]?.key ?? '200',\n response.imports,\n response.types.success,\n response.contentTypes,\n splitMockImplementations,\n );\n\n const mockImplementations = [baseDefinition.implementation.function];\n const handlerImplementations = [baseDefinition.implementation.handler];\n const imports = [...baseDefinition.imports];\n const strictMockSchemaTypeNames = new Set(\n baseDefinition.strictMockSchemaTypeNames,\n );\n const strictMockSchemaKinds: Record<string, StrictMockSchemaKind> = {\n ...baseDefinition.strictMockSchemaKinds,\n };\n\n if (\n generatorOptions.mock &&\n isObject(generatorOptions.mock) &&\n generatorOptions.mock.generateEachHttpStatus\n ) {\n for (const statusResponse of [\n ...response.types.success,\n ...response.types.errors,\n ]) {\n const definition = generateDefinition(\n statusResponse.key,\n route,\n getResponseMockFunctionName,\n handlerName,\n generatorVerbOptions,\n generatorOptions,\n statusResponse.value,\n statusResponse.key,\n response.imports,\n [statusResponse],\n [statusResponse.contentType],\n splitMockImplementations,\n );\n mockImplementations.push(definition.implementation.function);\n handlerImplementations.push(definition.implementation.handler);\n imports.push(...definition.imports);\n for (const name of definition.strictMockSchemaTypeNames ?? []) {\n strictMockSchemaTypeNames.add(name);\n }\n if (definition.strictMockSchemaKinds) {\n for (const [name, kind] of Object.entries(\n definition.strictMockSchemaKinds,\n )) {\n strictMockSchemaKinds[name] ??= kind;\n }\n }\n }\n }\n\n const aggregatedStrictNames = [...strictMockSchemaTypeNames];\n\n return {\n implementation: {\n function: mockImplementations.join('\\n'),\n handlerName,\n handler: handlerImplementations.join('\\n'),\n },\n imports: imports,\n strictMockSchemaTypeNames:\n aggregatedStrictNames.length > 0 ? aggregatedStrictNames : undefined,\n strictMockSchemaKinds: mergeStrictMockSchemaKinds(strictMockSchemaKinds),\n };\n}\n","import {\n type ClientMockGeneratorBuilder,\n type ContextSpec,\n generateDependencyImports,\n type GenerateMockImports,\n type GeneratorDependency,\n type GeneratorImport,\n type GeneratorOptions,\n type GeneratorSchema,\n type GeneratorVerbOptions,\n type GlobalMockOptions,\n pascal,\n type StrictMockSchemaKind,\n} from '@orval/core';\n\nimport {\n formatMockFactoryDeclaration,\n classifyStrictMockSchemaType,\n collectStrictMockSchemaTypeNamesFromImplementation,\n getMockFactorySignatureParts,\n getStrictMockTypeName,\n isStrictMock,\n mergeStrictMockSchemaKinds,\n} from '../mock-types';\nimport { appendImportsDelta } from './imports';\nimport { generateMSW } from '../msw';\nimport { getMockWithoutFunc } from '../msw/mocks';\nimport { getMockScalar } from './getters';\n\nfunction getFakerDependencies(\n options?: GlobalMockOptions,\n): GeneratorDependency[] {\n const locale = options?.locale;\n\n return [\n {\n exports: [{ name: 'faker', values: true }],\n dependency: locale\n ? `@faker-js/faker/locale/${locale}`\n : '@faker-js/faker',\n },\n ];\n}\n\n/**\n * Emits the import header for a faker-only mock file. Faker output never\n * imports from `msw`, so this only emits `import { faker } from '@faker-js/faker'`\n * (or the locale-scoped variant) plus any operation-specific imports.\n */\nexport const generateFakerImports: GenerateMockImports = ({\n implementation,\n imports,\n projectName,\n hasSchemaDir,\n isAllowSyntheticDefaultImports,\n options,\n}) => {\n return generateDependencyImports(\n implementation,\n [...getFakerDependencies(options), ...imports],\n projectName,\n hasSchemaDir,\n isAllowSyntheticDefaultImports,\n );\n};\n\n/**\n * Generates the faker-only mock output for a single operation. This reuses\n * the response-factory portion of {@link generateMSW} and strips out the\n * handler and aggregator entries so callers can write a standalone\n * `<file>.faker.ts` with no `msw` dependency.\n */\nexport function generateFaker(\n generatorVerbOptions: GeneratorVerbOptions,\n generatorOptions: GeneratorOptions,\n): ClientMockGeneratorBuilder {\n const result = generateMSW(generatorVerbOptions, generatorOptions);\n return {\n implementation: {\n function: result.implementation.function,\n handler: '',\n handlerName: '',\n },\n imports: result.imports,\n strictMockSchemaTypeNames: result.strictMockSchemaTypeNames,\n strictMockSchemaKinds: result.strictMockSchemaKinds,\n };\n}\n\nexport interface GenerateFakerForSchemasResult {\n implementation: string;\n imports: GeneratorImport[];\n strictMockSchemaTypeNames?: string[];\n strictMockSchemaKinds?: Record<string, StrictMockSchemaKind>;\n}\n\n/**\n * Builds the contents of a consolidated faker mock file for every entry under\n * `components/schemas`. Each schema produces a `get<SchemaName>Mock(overrides)`\n * factory in the spirit of the existing per-operation `get<Op>ResponseMock`\n * helpers. Opt in via `mock.generators: [{ type: 'faker', schemas: true }]`.\n *\n * Returns the function bodies plus any `GeneratorImport` references the\n * factories need so the writer can hoist them into the file header.\n */\nexport function generateFakerForSchemas(\n schemas: GeneratorSchema[],\n context: ContextSpec,\n options: GlobalMockOptions,\n): GenerateFakerForSchemasResult {\n const factories: string[] = [];\n const strictMockTypeNames = new Set<string>();\n const strictMockSchemaKinds: Record<string, StrictMockSchemaKind> = {};\n const allImports: GeneratorImport[] = [];\n // Shared across schemas so we emit each helper (e.g. an `allOf`-discriminator\n // sub-factory) once even when several schemas reference the same union arm.\n const splitMockImplementations: string[] = [];\n\n // Names of the factories we're about to emit in this file. When the\n // delegation logic in `resolveMockValue` produces a `getXMock()` call for\n // a `components/schemas` ref, it pushes a `{ schemaFactory: true }` import\n // — but if `X` is itself one of the schemas being generated here, the\n // factory lives in this very file and must not be imported.\n const localFactoryNames = new Set(\n schemas.filter((s) => !!s.schema).map((s) => `get${pascal(s.name)}Mock`),\n );\n const localMockTypeNames = new Set(\n schemas\n .filter((s) => !!s.schema)\n .map((s) => getStrictMockTypeName(pascal(s.name))),\n );\n\n // Serialize override.mock.properties functions the same way operation\n // response mocks do (IIFE expressions), not raw function references.\n const mockOptions = getMockWithoutFunc(context.spec, context.output.override);\n\n for (const generatorSchema of schemas) {\n const { name, schema } = generatorSchema;\n if (!schema) continue;\n\n const factoryName = `get${pascal(name)}Mock`;\n const factoryImports: GeneratorImport[] = [];\n const factoryImportsBefore = factoryImports.length;\n const schemaName = pascal(name);\n\n const result = getMockScalar({\n item: {\n ...(schema as Record<string, unknown>),\n name: schemaName,\n } as Parameters<typeof getMockScalar>[0]['item'],\n imports: factoryImports,\n mockOptions,\n operationId: name,\n tags: [],\n context,\n // Seed the schema under generation on both stacks so allOf/oneOf cycles\n // (e.g. System.Xml.Linq-style inheritance) terminate instead of overflowing\n // the stack while building consolidated schema factories (#3590).\n existingReferencedProperties: [schemaName],\n existingReferencedAllOfRefs: [schemaName],\n splitMockImplementations,\n allowOverride: true,\n isRef: false,\n } as Parameters<typeof getMockScalar>[0]);\n\n appendImportsDelta(allImports, factoryImports, factoryImportsBefore);\n if (result.imports !== factoryImports) {\n appendImportsDelta(allImports, result.imports, 0);\n }\n\n // Match the behavior of operation-response factories: only declare the\n // `overrideResponse` parameter when the generated expression actually\n // references it (top-level object schemas). Array / scalar / enum\n // schemas don't splice an override, so we omit the parameter rather than\n // emit a `Partial<Pet[]>` signature TS can't satisfy.\n const typeName = pascal(name);\n const isOverridable = result.value.includes('overrideResponse');\n const { param, returnType, returnCast } = getMockFactorySignatureParts(\n typeName,\n mockOptions,\n {\n isOverridable,\n overrideType: `Partial<${typeName}>`,\n },\n );\n const factory = formatMockFactoryDeclaration(\n factoryName,\n param,\n returnType,\n result.value,\n returnCast,\n );\n\n if (isStrictMock(mockOptions)) {\n strictMockTypeNames.add(typeName);\n strictMockSchemaKinds[typeName] = classifyStrictMockSchemaType(schema);\n }\n\n factories.push(factory);\n\n // Track the schema type itself as an import so writers can reference it\n // from the generated factory file.\n allImports.push({\n name: pascal(name),\n values: false,\n });\n }\n\n // De-duplicate imports by name+alias so the header doesn't list the same\n // schema twice when multiple factories reference it. \"Any value wins\":\n // if the same name is pushed both as a type-only import and as a value\n // import (e.g. an enum used both in an `as Foo` cast and an\n // `Object.values(Foo)` call), we keep the value form. A plain\n // `import { Foo }` works in both annotation and runtime positions, so\n // emitting the value form avoids `TS1361: 'X' cannot be used as a value\n // because it was imported using 'import type'`.\n const mergedImports = new Map<string, GeneratorImport>();\n for (const imp of allImports) {\n // Drop self-references: `get<Schema>Mock` factories generated in this\n // very file (pushed when delegation in `resolveMockValue` produced a\n // local factory call). Without this we'd emit\n // `import { getPetMock } from '.'` next to its own `export const`.\n if (imp.schemaFactory && localFactoryNames.has(imp.name)) continue;\n if (imp.schemaFactory && !imp.values && localMockTypeNames.has(imp.name)) {\n continue;\n }\n\n const key = `${imp.name}::${imp.alias ?? ''}`;\n const existing = mergedImports.get(key);\n if (!existing) {\n mergedImports.set(key, imp);\n continue;\n }\n if (!existing.values && imp.values) {\n mergedImports.set(key, imp);\n }\n }\n const uniqueImports = [...mergedImports.values()];\n\n // Reference `options` so unused-parameter rules don't complain; future\n // schema-specific behavior (e.g. naming convention) will read from it.\n void options;\n\n // Helper factories from union/discriminator handling (`splitMockImplementations`)\n // are emitted before the public `get<Schema>Mock` factories so call sites\n // declared after them resolve cleanly without TS hoisting concerns.\n const implementation = [...splitMockImplementations, ...factories]\n .filter(Boolean)\n .join('\\n\\n');\n\n for (const name of collectStrictMockSchemaTypeNamesFromImplementation(\n implementation,\n )) {\n strictMockTypeNames.add(name);\n strictMockSchemaKinds[name] ??= 'object';\n }\n\n const aggregatedStrictNames = [...strictMockTypeNames];\n\n return {\n implementation,\n imports: uniqueImports,\n strictMockSchemaTypeNames:\n aggregatedStrictNames.length > 0 ? aggregatedStrictNames : undefined,\n strictMockSchemaKinds: mergeStrictMockSchemaKinds(strictMockSchemaKinds),\n };\n}\n","import type {\n FakerMockOptions,\n GenerateMockImports,\n GeneratorOptions,\n GeneratorVerbOptions,\n GlobalMockOptions,\n MswMockOptions,\n} from '@orval/core';\nimport { OutputMockType } from '@orval/core';\n\nimport { generateFaker, generateFakerImports } from './faker';\nimport { generateMSW, generateMSWImports } from './msw';\n\nexport const DEFAULT_MSW_OPTIONS: MswMockOptions = {\n type: OutputMockType.MSW,\n useExamples: false,\n};\n\nexport const DEFAULT_FAKER_OPTIONS: FakerMockOptions = {\n type: OutputMockType.FAKER,\n useExamples: false,\n schemas: false,\n operationResponses: true,\n};\n\n/**\n * Returns the default GlobalMockOptions for a given mock type. Used when\n * normalizing user-provided entries in `output.mock.generators` so callers\n * can omit the per-type defaults.\n */\nexport const getDefaultMockOptionsForType = (\n type: GlobalMockOptions['type'],\n): GlobalMockOptions => {\n switch (type) {\n case OutputMockType.FAKER: {\n return DEFAULT_FAKER_OPTIONS;\n }\n case OutputMockType.MSW: {\n return DEFAULT_MSW_OPTIONS;\n }\n }\n};\n\n/**\n * Dispatches mock-file imports generation to the appropriate generator based\n * on the `OutputMockType` discriminator on the mock options.\n */\nexport const generateMockImports: GenerateMockImports = (importOptions) => {\n switch (importOptions.options?.type) {\n case OutputMockType.FAKER: {\n return generateFakerImports(importOptions);\n }\n default: {\n return generateMSWImports(importOptions);\n }\n }\n};\n\n/**\n * Dispatches per-operation mock generation to the appropriate generator\n * based on the `OutputMockType` discriminator. Each entry in\n * `output.mock.generators` is dispatched here individually.\n */\nexport function generateMock(\n generatorVerbOptions: GeneratorVerbOptions,\n generatorOptions: Omit<GeneratorOptions, 'mock'> & {\n mock: GlobalMockOptions;\n },\n) {\n const { context } = generatorOptions;\n const previousActiveMockOutputType = context.activeMockOutputType;\n context.activeMockOutputType = generatorOptions.mock.type;\n\n try {\n switch (generatorOptions.mock.type) {\n case OutputMockType.FAKER: {\n return generateFaker(generatorVerbOptions, generatorOptions);\n }\n default: {\n return generateMSW(generatorVerbOptions, generatorOptions);\n }\n }\n } finally {\n context.activeMockOutputType = previousActiveMockOutputType;\n }\n}\n\nexport type { GenerateFakerForSchemasResult } from './faker';\nexport {\n generateFaker,\n generateFakerForSchemas,\n generateFakerImports,\n} from './faker';\nexport {\n buildStrictMockTypeFileHeader,\n dedupeStrictMockTypeDeclarations,\n} from './mock-types';\nexport { generateMSW, generateMSWImports } from './msw';\n"],"mappings":"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"}
|