@orval/core 8.0.1 → 8.0.3

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 CHANGED
@@ -25,6 +25,7 @@ type NormalizedOutputOptions = {
25
25
  workspace?: string;
26
26
  target: string;
27
27
  schemas?: string | SchemaOptions;
28
+ operationSchemas?: string;
28
29
  namingConvention: NamingConvention;
29
30
  fileExtension: string;
30
31
  mode: OutputMode;
@@ -181,6 +182,12 @@ type OutputOptions = {
181
182
  workspace?: string;
182
183
  target: string;
183
184
  schemas?: string | SchemaOptions;
185
+ /**
186
+ * Separate path for operation-derived types (params, bodies, responses).
187
+ * When set, types matching operation patterns (e.g., *Params, *Body) are written here
188
+ * while regular schema types remain in the `schemas` path.
189
+ */
190
+ operationSchemas?: string;
184
191
  namingConvention?: NamingConvention;
185
192
  fileExtension?: string;
186
193
  mode?: OutputMode;
@@ -1153,6 +1160,7 @@ interface GenerateAxiosOptions {
1153
1160
  headers?: GeneratorSchema;
1154
1161
  requestOptions?: object | boolean;
1155
1162
  hasSignal: boolean;
1163
+ hasSignalParam?: boolean;
1156
1164
  isVue: boolean;
1157
1165
  isAngular: boolean;
1158
1166
  paramsSerializer?: GeneratorMutator;
@@ -1165,6 +1173,7 @@ declare function generateAxiosOptions({
1165
1173
  headers,
1166
1174
  requestOptions,
1167
1175
  hasSignal,
1176
+ hasSignalParam,
1168
1177
  isVue,
1169
1178
  isAngular,
1170
1179
  paramsSerializer,
@@ -1183,6 +1192,7 @@ interface GenerateOptionsOptions {
1183
1192
  isAngular?: boolean;
1184
1193
  isExactOptionalPropertyTypes: boolean;
1185
1194
  hasSignal: boolean;
1195
+ hasSignalParam?: boolean;
1186
1196
  isVue?: boolean;
1187
1197
  paramsSerializer?: GeneratorMutator;
1188
1198
  paramsSerializerOptions?: ParamsSerializerOptions;
@@ -1200,6 +1210,7 @@ declare function generateOptions({
1200
1210
  isAngular,
1201
1211
  isExactOptionalPropertyTypes,
1202
1212
  hasSignal,
1213
+ hasSignalParam,
1203
1214
  isVue,
1204
1215
  paramsSerializer,
1205
1216
  paramsSerializerOptions
@@ -1216,6 +1227,7 @@ interface GenerateMutatorConfigOptions {
1216
1227
  isFormData: boolean;
1217
1228
  isFormUrlEncoded: boolean;
1218
1229
  hasSignal: boolean;
1230
+ hasSignalParam?: boolean;
1219
1231
  isExactOptionalPropertyTypes: boolean;
1220
1232
  isVue?: boolean;
1221
1233
  }
@@ -1229,6 +1241,7 @@ declare function generateMutatorConfig({
1229
1241
  isFormData,
1230
1242
  isFormUrlEncoded,
1231
1243
  hasSignal,
1244
+ hasSignalParam,
1232
1245
  isExactOptionalPropertyTypes,
1233
1246
  isVue
1234
1247
  }: GenerateMutatorConfigOptions): string;
@@ -1339,8 +1352,8 @@ declare function combineSchemas({
1339
1352
  declare function resolveDiscriminators(schemas: OpenApiSchemasObject, context: ContextSpec): OpenApiSchemasObject;
1340
1353
  //#endregion
1341
1354
  //#region src/getters/enum.d.ts
1342
- declare function getEnumNames(schemaObject: OpenApiSchemaObject | undefined): any;
1343
- declare function getEnumDescriptions(schemaObject: OpenApiSchemaObject | undefined): any;
1355
+ declare function getEnumNames(schemaObject: OpenApiSchemaObject | undefined): string[] | undefined;
1356
+ declare function getEnumDescriptions(schemaObject: OpenApiSchemaObject | undefined): string[] | undefined;
1344
1357
  declare function getEnum(value: string, enumName: string, names: string[] | undefined, enumGenerationType: EnumGeneration, descriptions?: string[], enumNamingConvention?: NamingConvention): string;
1345
1358
  declare function getEnumImplementation(value: string, names?: string[], descriptions?: string[], enumNamingConvention?: NamingConvention): string;
1346
1359
  //#endregion
@@ -1852,6 +1865,21 @@ declare function jsStringEscape(input: string): string;
1852
1865
  declare function isSyntheticDefaultImportsAllow(config?: Tsconfig): boolean;
1853
1866
  //#endregion
1854
1867
  //#region src/writers/schemas.d.ts
1868
+ /**
1869
+ * Split schemas into regular and operation types.
1870
+ */
1871
+ declare function splitSchemasByType(schemas: GeneratorSchema[]): {
1872
+ regularSchemas: GeneratorSchema[];
1873
+ operationSchemas: GeneratorSchema[];
1874
+ };
1875
+ /**
1876
+ * Fix imports in operation schemas that reference regular schemas.
1877
+ */
1878
+ declare function fixCrossDirectoryImports(operationSchemas: GeneratorSchema[], regularSchemaNames: Set<string>, schemaPath: string, operationSchemaPath: string, namingConvention: NamingConvention): void;
1879
+ /**
1880
+ * Fix imports in regular schemas that reference operation schemas.
1881
+ */
1882
+ declare function fixRegularSchemaImports(regularSchemas: GeneratorSchema[], operationSchemaNames: Set<string>, schemaPath: string, operationSchemaPath: string, namingConvention: NamingConvention): void;
1855
1883
  declare function writeModelInline(acc: string, model: string): string;
1856
1884
  declare function writeModelsInline(array: GeneratorSchema[]): string;
1857
1885
  interface WriteSchemaOptions {
@@ -1935,5 +1963,5 @@ declare function generateTargetForTags(builder: WriteSpecBuilder, options: Norma
1935
1963
  declare function getOrvalGeneratedTypes(): string;
1936
1964
  declare function getTypedResponse(): string;
1937
1965
  //#endregion
1938
- export { AngularOptions, BODY_TYPE_NAME, BaseUrlFromConstant, BaseUrlFromSpec, ClientBuilder, ClientDependenciesBuilder, ClientExtraFilesBuilder, ClientFileBuilder, ClientFooterBuilder, ClientGeneratorsBuilder, ClientHeaderBuilder, ClientMockBuilder, ClientMockGeneratorBuilder, ClientMockGeneratorImplementation, ClientTitleBuilder, Config, ConfigExternal, ConfigFn, ContextSpec, DeepNonNullable, EnumGeneration, ErrorWithTag, FetchOptions, FormDataArrayHandling, FormDataType, GenerateMockImports, GenerateVerbOptionsParams, GenerateVerbsOptionsParams, GeneratorApiBuilder, GeneratorApiOperations, GeneratorApiResponse, GeneratorClient, GeneratorClientExtra, GeneratorClientFooter, GeneratorClientHeader, GeneratorClientImports, GeneratorClientTitle, GeneratorClients, GeneratorDependency, GeneratorImport, GeneratorMutator, GeneratorMutatorParsingInfo, GeneratorOperation, GeneratorOperations, GeneratorOptions, GeneratorSchema, GeneratorTarget, GeneratorTargetFull, GeneratorVerbOptions, GeneratorVerbsOptions, GetterBody, GetterParam, GetterParameters, GetterParams, GetterProp, GetterPropType, GetterProps, GetterQueryParam, GetterResponse, GlobalMockOptions, GlobalOptions, HonoOptions, Hook, HookCommand, HookFunction, HookOption, HooksOptions, ImportOpenApi, InputFiltersOptions, InputOptions, InputTransformerFn, InvalidateTarget, JsDocOptions, LogLevel, LogLevels, LogOptions, LogType, Logger, LoggerOptions, MockData, MockDataArray, MockDataArrayFn, MockDataObject, MockDataObjectFn, MockOptions, MockProperties, MockPropertiesObject, MockPropertiesObjectFn, MutationInvalidatesConfig, MutationInvalidatesRule, Mutator, MutatorObject, NamingConvention, NormalizedConfig, NormalizedFetchOptions, NormalizedFormDataType, NormalizedHonoOptions, NormalizedHookCommand, NormalizedHookOptions, NormalizedInputOptions, NormalizedJsDocOptions, NormalizedMutator, NormalizedOperationOptions, NormalizedOptions, NormalizedOutputOptions, NormalizedOverrideOutput, NormalizedParamsSerializerOptions, NormalizedQueryOptions, NormalizedSchemaOptions, NormalizedZodOptions, OpenApiComponentsObject, OpenApiDocument, OpenApiEncodingObject, OpenApiExampleObject, OpenApiInfoObject, OpenApiMediaTypeObject, OpenApiOperationObject, OpenApiParameterObject, OpenApiPathItemObject, OpenApiPathsObject, OpenApiReferenceObject, OpenApiRequestBodyObject, OpenApiResponseObject, OpenApiResponsesObject, OpenApiSchemaObject, OpenApiSchemaObjectType, OpenApiSchemasObject, OpenApiServerObject, OperationOptions, Options, OptionsExport, OptionsFn, OutputClient, OutputClientFunc, OutputDocsOptions, OutputHttpClient, OutputMockType, OutputMode, OutputOptions, OverrideInput, OverrideMockOptions, OverrideOutput, OverrideOutputContentType, PackageJson, ParamsSerializerOptions, PropertySortOrder, QueryOptions, RefComponentSuffix, RefInfo, ResReqTypesValue, ResolverValue, ResponseTypeCategory, ScalarValue, SchemaGenerationType, SchemaOptions, SchemaType, SwrOptions, TEMPLATE_TAG_REGEX, TsConfigTarget, Tsconfig, URL_REGEX, VERBS_WITH_BODY, Verbs, WriteModeProps, WriteSpecBuilder, ZodCoerceType, ZodDateTimeOptions, ZodOptions, ZodTimeOptions, _filteredVerbs, addDependency, asyncReduce, camel, combineSchemas, compareVersions, conventionName, count, createDebugger, createLogger, createSuccessMessage, createTypeAliasIfNeeded, dynamicImport, escape, generalJSTypes, generalJSTypesWithArray, generateAxiosOptions, generateBodyMutatorConfig, generateBodyOptions, generateComponentDefinition, generateDependencyImports, generateFormDataAndUrlEncodedFunction, generateImports, generateModelInline, generateModelsInline, generateMutator, generateMutatorConfig, generateMutatorImports, generateMutatorRequestOptions, generateOptions, generateParameterDefinition, generateQueryParamsAxiosConfig, generateSchemasDefinition, generateTarget, generateTargetForTags, generateVerbImports, generateVerbOptions, generateVerbsOptions, getArray, getBody, getDefaultContentType, getEnum, getEnumDescriptions, getEnumImplementation, getEnumNames, getExtension, getFileInfo, getFormDataFieldFileType, getFullRoute, getIsBodyVerb, getKey, getMockFileExtensionByTypeName, getNumberWord, getObject, getOperationId, getOrvalGeneratedTypes, getParameters, getParams, getParamsInPath, getPropertySafe, getProps, getQueryParams, getRefInfo, getResReqTypes, getResponse, getResponseTypeCategory, getRoute, getRouteAsArray, getScalar, getTypedResponse, isBinaryContentType, isBoolean, isDirectory, isFunction, isModule, isNull, isNumber, isNumeric, isObject, isReference, isSchema, isString, isSyntheticDefaultImportsAllow, isUndefined, isUrl, isVerb, jsDoc, jsStringEscape, kebab, keyValuePairsToJsDoc, log, logError, mergeDeep, mismatchArgsMessage, pascal, removeFilesAndEmptyFolders, resolveDiscriminators, resolveExampleRefs, resolveObject, resolveRef, resolveValue, sanitize, snake, sortByPriority, startMessage, stringify, toObjectString, path_d_exports as upath, upper, writeModelInline, writeModelsInline, writeSchema, writeSchemas, writeSingleMode, writeSplitMode, writeSplitTagsMode, writeTagsMode };
1966
+ export { AngularOptions, BODY_TYPE_NAME, BaseUrlFromConstant, BaseUrlFromSpec, ClientBuilder, ClientDependenciesBuilder, ClientExtraFilesBuilder, ClientFileBuilder, ClientFooterBuilder, ClientGeneratorsBuilder, ClientHeaderBuilder, ClientMockBuilder, ClientMockGeneratorBuilder, ClientMockGeneratorImplementation, ClientTitleBuilder, Config, ConfigExternal, ConfigFn, ContextSpec, DeepNonNullable, EnumGeneration, ErrorWithTag, FetchOptions, FormDataArrayHandling, FormDataType, GenerateMockImports, GenerateVerbOptionsParams, GenerateVerbsOptionsParams, GeneratorApiBuilder, GeneratorApiOperations, GeneratorApiResponse, GeneratorClient, GeneratorClientExtra, GeneratorClientFooter, GeneratorClientHeader, GeneratorClientImports, GeneratorClientTitle, GeneratorClients, GeneratorDependency, GeneratorImport, GeneratorMutator, GeneratorMutatorParsingInfo, GeneratorOperation, GeneratorOperations, GeneratorOptions, GeneratorSchema, GeneratorTarget, GeneratorTargetFull, GeneratorVerbOptions, GeneratorVerbsOptions, GetterBody, GetterParam, GetterParameters, GetterParams, GetterProp, GetterPropType, GetterProps, GetterQueryParam, GetterResponse, GlobalMockOptions, GlobalOptions, HonoOptions, Hook, HookCommand, HookFunction, HookOption, HooksOptions, ImportOpenApi, InputFiltersOptions, InputOptions, InputTransformerFn, InvalidateTarget, JsDocOptions, LogLevel, LogLevels, LogOptions, LogType, Logger, LoggerOptions, MockData, MockDataArray, MockDataArrayFn, MockDataObject, MockDataObjectFn, MockOptions, MockProperties, MockPropertiesObject, MockPropertiesObjectFn, MutationInvalidatesConfig, MutationInvalidatesRule, Mutator, MutatorObject, NamingConvention, NormalizedConfig, NormalizedFetchOptions, NormalizedFormDataType, NormalizedHonoOptions, NormalizedHookCommand, NormalizedHookOptions, NormalizedInputOptions, NormalizedJsDocOptions, NormalizedMutator, NormalizedOperationOptions, NormalizedOptions, NormalizedOutputOptions, NormalizedOverrideOutput, NormalizedParamsSerializerOptions, NormalizedQueryOptions, NormalizedSchemaOptions, NormalizedZodOptions, OpenApiComponentsObject, OpenApiDocument, OpenApiEncodingObject, OpenApiExampleObject, OpenApiInfoObject, OpenApiMediaTypeObject, OpenApiOperationObject, OpenApiParameterObject, OpenApiPathItemObject, OpenApiPathsObject, OpenApiReferenceObject, OpenApiRequestBodyObject, OpenApiResponseObject, OpenApiResponsesObject, OpenApiSchemaObject, OpenApiSchemaObjectType, OpenApiSchemasObject, OpenApiServerObject, OperationOptions, Options, OptionsExport, OptionsFn, OutputClient, OutputClientFunc, OutputDocsOptions, OutputHttpClient, OutputMockType, OutputMode, OutputOptions, OverrideInput, OverrideMockOptions, OverrideOutput, OverrideOutputContentType, PackageJson, ParamsSerializerOptions, PropertySortOrder, QueryOptions, RefComponentSuffix, RefInfo, ResReqTypesValue, ResolverValue, ResponseTypeCategory, ScalarValue, SchemaGenerationType, SchemaOptions, SchemaType, SwrOptions, TEMPLATE_TAG_REGEX, TsConfigTarget, Tsconfig, URL_REGEX, VERBS_WITH_BODY, Verbs, WriteModeProps, WriteSpecBuilder, ZodCoerceType, ZodDateTimeOptions, ZodOptions, ZodTimeOptions, _filteredVerbs, addDependency, asyncReduce, camel, combineSchemas, compareVersions, conventionName, count, createDebugger, createLogger, createSuccessMessage, createTypeAliasIfNeeded, dynamicImport, escape, fixCrossDirectoryImports, fixRegularSchemaImports, generalJSTypes, generalJSTypesWithArray, generateAxiosOptions, generateBodyMutatorConfig, generateBodyOptions, generateComponentDefinition, generateDependencyImports, generateFormDataAndUrlEncodedFunction, generateImports, generateModelInline, generateModelsInline, generateMutator, generateMutatorConfig, generateMutatorImports, generateMutatorRequestOptions, generateOptions, generateParameterDefinition, generateQueryParamsAxiosConfig, generateSchemasDefinition, generateTarget, generateTargetForTags, generateVerbImports, generateVerbOptions, generateVerbsOptions, getArray, getBody, getDefaultContentType, getEnum, getEnumDescriptions, getEnumImplementation, getEnumNames, getExtension, getFileInfo, getFormDataFieldFileType, getFullRoute, getIsBodyVerb, getKey, getMockFileExtensionByTypeName, getNumberWord, getObject, getOperationId, getOrvalGeneratedTypes, getParameters, getParams, getParamsInPath, getPropertySafe, getProps, getQueryParams, getRefInfo, getResReqTypes, getResponse, getResponseTypeCategory, getRoute, getRouteAsArray, getScalar, getTypedResponse, isBinaryContentType, isBoolean, isDirectory, isFunction, isModule, isNull, isNumber, isNumeric, isObject, isReference, isSchema, isString, isSyntheticDefaultImportsAllow, isUndefined, isUrl, isVerb, jsDoc, jsStringEscape, kebab, keyValuePairsToJsDoc, log, logError, mergeDeep, mismatchArgsMessage, pascal, removeFilesAndEmptyFolders, resolveDiscriminators, resolveExampleRefs, resolveObject, resolveRef, resolveValue, sanitize, snake, sortByPriority, splitSchemasByType, startMessage, stringify, toObjectString, path_d_exports as upath, upper, writeModelInline, writeModelsInline, writeSchema, writeSchemas, writeSingleMode, writeSplitMode, writeSplitTagsMode, writeTagsMode };
1939
1967
  //# sourceMappingURL=index.d.mts.map
package/dist/index.mjs CHANGED
@@ -234,7 +234,7 @@ function joinSafe(...values) {
234
234
  * @param property
235
235
  */
236
236
  function isReference(obj) {
237
- return Object.hasOwn(obj, "$ref");
237
+ return !isNull(obj) && Object.hasOwn(obj, "$ref");
238
238
  }
239
239
  function isDirectory(path$2) {
240
240
  return !extname(path$2);
@@ -821,10 +821,14 @@ function isSyntheticDefaultImportsAllow(config) {
821
821
  //#endregion
822
822
  //#region src/getters/enum.ts
823
823
  function getEnumNames(schemaObject) {
824
- return schemaObject?.["x-enumNames"] || schemaObject?.["x-enumnames"] || schemaObject?.["x-enum-varnames"];
824
+ const names = schemaObject?.["x-enumNames"] ?? schemaObject?.["x-enumnames"] ?? schemaObject?.["x-enum-varnames"];
825
+ if (!names) return;
826
+ return names.map((name) => jsStringEscape(name));
825
827
  }
826
828
  function getEnumDescriptions(schemaObject) {
827
- return schemaObject?.["x-enumDescriptions"] || schemaObject?.["x-enumdescriptions"] || schemaObject?.["x-enum-descriptions"];
829
+ const descriptions = schemaObject?.["x-enumDescriptions"] ?? schemaObject?.["x-enumdescriptions"] ?? schemaObject?.["x-enum-descriptions"];
830
+ if (!descriptions) return;
831
+ return descriptions.map((description) => jsStringEscape(description));
828
832
  }
829
833
  function getEnum(value, enumName, names, enumGenerationType, descriptions, enumNamingConvention) {
830
834
  if (enumGenerationType === EnumGeneration.CONST) return getTypeConstEnum(value, enumName, names, descriptions, enumNamingConvention);
@@ -1017,7 +1021,7 @@ function resolveValue({ schema, name, context }) {
1017
1021
  parents: [...context.parents ?? [], refName]
1018
1022
  }
1019
1023
  }).hasReadonlyProps;
1020
- const nullable = Array.isArray(schemaObject.type) && schemaObject.type.includes("null") ? " | null" : "";
1024
+ const nullable = Array.isArray(schemaObject.type) && schemaObject.type.includes("null") || schemaObject.nullable === true ? " | null" : "";
1021
1025
  return {
1022
1026
  value: resolvedImport.name + nullable,
1023
1027
  imports: [{
@@ -1236,7 +1240,7 @@ function getImportAliasForRefOrValue({ context, imports, resolvedValue }) {
1236
1240
  * @ref https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.1.md#data-types
1237
1241
  */
1238
1242
  function getScalar({ item, name, context }) {
1239
- const nullable = isArray(item.type) && item.type.includes("null") ? " | null" : "";
1243
+ const nullable = isArray(item.type) && item.type.includes("null") || item.nullable === true ? " | null" : "";
1240
1244
  const enumItems = item.enum?.filter((enumItem) => enumItem !== null);
1241
1245
  let itemType = item.type;
1242
1246
  if (!itemType && item.items) {
@@ -1379,12 +1383,13 @@ function getScalar({ item, name, context }) {
1379
1383
  function combineValues({ resolvedData, resolvedValue, separator: separator$1, context }) {
1380
1384
  if (resolvedData.isEnum.every(Boolean)) return `${resolvedData.values.join(` | `)}${resolvedValue ? ` | ${resolvedValue.value}` : ""}`;
1381
1385
  if (separator$1 === "allOf") {
1382
- let resolvedDataValue = resolvedData.values.join(` & `);
1386
+ let resolvedDataValue = resolvedData.values.map((v) => v.includes(" | ") ? `(${v})` : v).join(` & `);
1383
1387
  if (resolvedData.originalSchema.length > 0 && resolvedValue) {
1384
1388
  const discriminatedPropertySchemas = resolvedData.originalSchema.filter((s) => s?.discriminator && resolvedValue.value.includes(` ${s.discriminator.propertyName}:`));
1385
1389
  if (discriminatedPropertySchemas.length > 0) resolvedDataValue = `Omit<${resolvedDataValue}, '${discriminatedPropertySchemas.map((s) => s.discriminator?.propertyName).join("' | '")}'>`;
1386
1390
  }
1387
- const joined = `${resolvedDataValue}${resolvedValue ? ` & ${resolvedValue.value}` : ""}`;
1391
+ const resolvedValueStr = resolvedValue?.value.includes(" | ") ? `(${resolvedValue.value})` : resolvedValue?.value;
1392
+ const joined = `${resolvedDataValue}${resolvedValue ? ` & ${resolvedValueStr}` : ""}`;
1388
1393
  const overrideRequiredProperties = resolvedData.requiredProperties.filter((prop$1) => !resolvedData.originalSchema.some((schema) => schema?.properties?.[prop$1] && schema.required?.includes(prop$1)));
1389
1394
  if (overrideRequiredProperties.length > 0) return `${joined} & Required<Pick<${joined}, '${overrideRequiredProperties.join("' | '")}'>>`;
1390
1395
  return joined;
@@ -1484,6 +1489,16 @@ function combineSchemas({ name, schema, separator: separator$1, context, nullabl
1484
1489
  name,
1485
1490
  context
1486
1491
  });
1492
+ else if (separator$1 === "allOf" && (schema.oneOf || schema.anyOf)) {
1493
+ const siblingCombiner = schema.oneOf ? "oneOf" : "anyOf";
1494
+ resolvedValue = combineSchemas({
1495
+ schema: { [siblingCombiner]: schema[siblingCombiner] },
1496
+ name,
1497
+ separator: siblingCombiner,
1498
+ context,
1499
+ nullable: ""
1500
+ });
1501
+ }
1487
1502
  return {
1488
1503
  value: combineValues({
1489
1504
  resolvedData,
@@ -1800,10 +1815,15 @@ function getResReqTypes(responsesOrRequests, name, context, defaultType = "unkno
1800
1815
  if (res.content) return Object.entries(res.content).map(([contentType, mediaType], index, arr) => {
1801
1816
  let propName = key ? pascal(name) + pascal(key) : void 0;
1802
1817
  if (propName && arr.length > 1) propName = propName + pascal(getNumberWord(index + 1));
1818
+ let effectivePropName = propName;
1819
+ if (mediaType.schema && isReference(mediaType.schema)) {
1820
+ const { imports } = resolveRef(mediaType.schema, context);
1821
+ if (imports[0]?.name) effectivePropName = imports[0].name;
1822
+ }
1803
1823
  const isFormData = formDataContentTypes.has(contentType);
1804
1824
  const resolvedValue = getResReqContentTypes({
1805
1825
  mediaType,
1806
- propName,
1826
+ propName: effectivePropName,
1807
1827
  context,
1808
1828
  isFormData,
1809
1829
  contentType
@@ -1823,7 +1843,7 @@ function getResReqTypes(responsesOrRequests, name, context, defaultType = "unkno
1823
1843
  return;
1824
1844
  }
1825
1845
  const isFormUrlEncoded = formUrlEncodedContentTypes.has(contentType);
1826
- if (!isFormData && !isFormUrlEncoded || !propName) return {
1846
+ if (!isFormData && !isFormUrlEncoded || !effectivePropName) return {
1827
1847
  ...resolvedValue,
1828
1848
  imports: resolvedValue.imports,
1829
1849
  contentType,
@@ -1831,18 +1851,20 @@ function getResReqTypes(responsesOrRequests, name, context, defaultType = "unkno
1831
1851
  examples: resolveExampleRefs(mediaType.examples, context)
1832
1852
  };
1833
1853
  const formData = isFormData ? getSchemaFormDataAndUrlEncoded({
1834
- name: propName,
1854
+ name: effectivePropName,
1835
1855
  schemaObject: mediaType.schema,
1836
1856
  context,
1837
1857
  isRequestBodyOptional: "required" in res && res.required === false,
1858
+ isRef: true,
1838
1859
  encoding: mediaType.encoding
1839
1860
  }) : void 0;
1840
1861
  const formUrlEncoded = isFormUrlEncoded ? getSchemaFormDataAndUrlEncoded({
1841
- name: propName,
1862
+ name: effectivePropName,
1842
1863
  schemaObject: mediaType.schema,
1843
1864
  context,
1844
1865
  isUrlEncoded: true,
1845
1866
  isRequestBodyOptional: "required" in res && res.required === false,
1867
+ isRef: true,
1846
1868
  encoding: mediaType.encoding
1847
1869
  }) : void 0;
1848
1870
  const additionalImports = getFormDataAdditionalImports({
@@ -2871,18 +2893,20 @@ function generateBodyOptions(body, isFormData, isFormUrlEncoded) {
2871
2893
  if (body.implementation) return `\n ${body.implementation},`;
2872
2894
  return "";
2873
2895
  }
2874
- function generateAxiosOptions({ response, isExactOptionalPropertyTypes, queryParams, headers, requestOptions, hasSignal, isVue, isAngular, paramsSerializer, paramsSerializerOptions }) {
2896
+ function generateAxiosOptions({ response, isExactOptionalPropertyTypes, queryParams, headers, requestOptions, hasSignal, hasSignalParam = false, isVue, isAngular, paramsSerializer, paramsSerializerOptions }) {
2875
2897
  const isRequestOptions = requestOptions !== false;
2898
+ const signalVar = hasSignalParam ? "querySignal" : "signal";
2899
+ const signalProp = hasSignalParam ? `signal: ${signalVar}` : "signal";
2876
2900
  if (!queryParams && !headers && !response.isBlob && response.definition.success !== "string") {
2877
2901
  if (isRequestOptions) return "options";
2878
- if (hasSignal) return isExactOptionalPropertyTypes ? "...(signal ? { signal } : {})" : "signal";
2902
+ if (hasSignal) return isExactOptionalPropertyTypes ? `...(${signalVar} ? { ${signalProp} } : {})` : signalProp;
2879
2903
  return "";
2880
2904
  }
2881
2905
  let value = "";
2882
2906
  if (!isRequestOptions) {
2883
2907
  if (queryParams) value += "\n params,";
2884
2908
  if (headers) value += "\n headers,";
2885
- if (hasSignal) value += isExactOptionalPropertyTypes ? "\n ...(signal ? { signal } : {})," : "\n signal,";
2909
+ if (hasSignal) value += isExactOptionalPropertyTypes ? `\n ...(${signalVar} ? { ${signalProp} } : {}),` : `\n ${signalProp},`;
2886
2910
  }
2887
2911
  if (!isObject(requestOptions) || !requestOptions.hasOwnProperty("responseType")) {
2888
2912
  if (response.isBlob) value += `\n responseType: 'blob',`;
@@ -2899,7 +2923,7 @@ function generateAxiosOptions({ response, isExactOptionalPropertyTypes, queryPar
2899
2923
  if (!isAngular && queryParams && (paramsSerializer || paramsSerializerOptions?.qs)) value += paramsSerializer ? `\n paramsSerializer: ${paramsSerializer.name},` : `\n paramsSerializer: (params) => qs.stringify(params, ${JSON.stringify(paramsSerializerOptions.qs)}),`;
2900
2924
  return value;
2901
2925
  }
2902
- function generateOptions({ route, body, headers, queryParams, response, verb, requestOptions, isFormData, isFormUrlEncoded, isAngular, isExactOptionalPropertyTypes, hasSignal, isVue, paramsSerializer, paramsSerializerOptions }) {
2926
+ function generateOptions({ route, body, headers, queryParams, response, verb, requestOptions, isFormData, isFormUrlEncoded, isAngular, isExactOptionalPropertyTypes, hasSignal, hasSignalParam, isVue, paramsSerializer, paramsSerializerOptions }) {
2903
2927
  const bodyOptions = getIsBodyVerb(verb) ? generateBodyOptions(body, isFormData, isFormUrlEncoded) : "";
2904
2928
  const axiosOptions = generateAxiosOptions({
2905
2929
  response,
@@ -2908,6 +2932,7 @@ function generateOptions({ route, body, headers, queryParams, response, verb, re
2908
2932
  requestOptions,
2909
2933
  isExactOptionalPropertyTypes,
2910
2934
  hasSignal,
2935
+ hasSignalParam,
2911
2936
  isVue: isVue ?? false,
2912
2937
  isAngular: isAngular ?? false,
2913
2938
  paramsSerializer,
@@ -2933,11 +2958,13 @@ function generateQueryParamsAxiosConfig(response, isVue, queryParams) {
2933
2958
  if (response.isBlob) value += `,\n responseType: 'blob'`;
2934
2959
  return value;
2935
2960
  }
2936
- function generateMutatorConfig({ route, body, headers, queryParams, response, verb, isFormData, isFormUrlEncoded, hasSignal, isExactOptionalPropertyTypes, isVue }) {
2961
+ function generateMutatorConfig({ route, body, headers, queryParams, response, verb, isFormData, isFormUrlEncoded, hasSignal, hasSignalParam = false, isExactOptionalPropertyTypes, isVue }) {
2937
2962
  const bodyOptions = getIsBodyVerb(verb) ? generateBodyMutatorConfig(body, isFormData, isFormUrlEncoded) : "";
2938
2963
  const queryParamsOptions = generateQueryParamsAxiosConfig(response, isVue ?? false, queryParams);
2939
2964
  const headerOptions = body.contentType ? `,\n headers: {'Content-Type': '${body.contentType}', ${headers ? "...headers" : ""}}` : headers ? ",\n headers" : "";
2940
- return `{url: \`${route}\`, method: '${verb.toUpperCase()}'${headerOptions}${bodyOptions}${queryParamsOptions}${hasSignal ? `, ${isExactOptionalPropertyTypes ? "...(signal ? { signal }: {})" : "signal"}` : ""}\n }`;
2965
+ const signalVar = hasSignalParam ? "querySignal" : "signal";
2966
+ const signalProp = hasSignalParam ? `signal: ${signalVar}` : "signal";
2967
+ return `{url: \`${route}\`, method: '${verb.toUpperCase()}'${headerOptions}${bodyOptions}${queryParamsOptions}${hasSignal ? `, ${isExactOptionalPropertyTypes ? `...(${signalVar} ? { ${signalProp} }: {})` : signalProp}` : ""}\n }`;
2941
2968
  }
2942
2969
  function generateMutatorRequestOptions(requestOptions, hasSecondArgument) {
2943
2970
  if (!hasSecondArgument) return isObject(requestOptions) ? `{${stringify(requestOptions)?.slice(1, -1)}}` : "";
@@ -3314,6 +3341,70 @@ function _filteredVerbs(verbs, filters) {
3314
3341
 
3315
3342
  //#endregion
3316
3343
  //#region src/writers/schemas.ts
3344
+ /**
3345
+ * Patterns to detect operation-derived types (params, bodies, responses).
3346
+ * These types are auto-generated from OpenAPI operations, not from component schemas.
3347
+ */
3348
+ const OPERATION_TYPE_PATTERNS = [
3349
+ /Params$/i,
3350
+ /Body$/,
3351
+ /Body(One|Two|Three|Four|Five|Item)$/,
3352
+ /Parameter$/i,
3353
+ /Query$/i,
3354
+ /Header$/i,
3355
+ /Response\d*$/i,
3356
+ /^[1-5]\d{2}$/,
3357
+ /\d{3}(One|Two|Three|Four|Five|Item)$/i,
3358
+ /^(get|post|put|patch|delete|head|options)[A-Z].*\d{3}$/
3359
+ ];
3360
+ /**
3361
+ * Check if a schema name matches operation type patterns.
3362
+ */
3363
+ function isOperationType(schemaName) {
3364
+ return OPERATION_TYPE_PATTERNS.some((pattern) => pattern.test(schemaName));
3365
+ }
3366
+ /**
3367
+ * Split schemas into regular and operation types.
3368
+ */
3369
+ function splitSchemasByType(schemas) {
3370
+ const regularSchemas = [];
3371
+ const operationSchemas = [];
3372
+ for (const schema of schemas) if (isOperationType(schema.name)) operationSchemas.push(schema);
3373
+ else regularSchemas.push(schema);
3374
+ return {
3375
+ regularSchemas,
3376
+ operationSchemas
3377
+ };
3378
+ }
3379
+ /**
3380
+ * Fix cross-directory imports when schemas reference other schemas in a different directory.
3381
+ * Updates import paths to use correct relative paths between directories.
3382
+ */
3383
+ function fixSchemaImports(schemas, targetSchemaNames, fromPath, toPath, namingConvention) {
3384
+ const relativePath = relativeSafe(fromPath, toPath);
3385
+ for (const schema of schemas) schema.imports = schema.imports.map((imp) => {
3386
+ if (targetSchemaNames.has(imp.name)) {
3387
+ const fileName = conventionName(imp.name, namingConvention);
3388
+ return {
3389
+ ...imp,
3390
+ importPath: joinSafe(relativePath, fileName)
3391
+ };
3392
+ }
3393
+ return imp;
3394
+ });
3395
+ }
3396
+ /**
3397
+ * Fix imports in operation schemas that reference regular schemas.
3398
+ */
3399
+ function fixCrossDirectoryImports(operationSchemas, regularSchemaNames, schemaPath, operationSchemaPath, namingConvention) {
3400
+ fixSchemaImports(operationSchemas, regularSchemaNames, operationSchemaPath, schemaPath, namingConvention);
3401
+ }
3402
+ /**
3403
+ * Fix imports in regular schemas that reference operation schemas.
3404
+ */
3405
+ function fixRegularSchemaImports(regularSchemas, operationSchemaNames, schemaPath, operationSchemaPath, namingConvention) {
3406
+ fixSchemaImports(regularSchemas, operationSchemaNames, schemaPath, operationSchemaPath, namingConvention);
3407
+ }
3317
3408
  function getSchemaKey(schemaPath, schemaName, namingConvention, fileExtension) {
3318
3409
  return getPath(schemaPath, conventionName(schemaName, namingConvention), fileExtension).toLowerCase().replaceAll("\\", "/");
3319
3410
  }
@@ -3442,12 +3533,13 @@ function generateImportsForBuilder(output, imports, relativeSchemasPath) {
3442
3533
  if (!output.indexFiles) return uniqueBy(imports, (x) => x.name).map((i) => {
3443
3534
  const name = conventionName(i.schemaName || i.name, output.namingConvention);
3444
3535
  const suffix = isZodSchemaOutput ? ".zod" : "";
3536
+ const importExtension = output.fileExtension?.replace(/\.ts$/, "") || "";
3445
3537
  return {
3446
3538
  exports: isZodSchemaOutput ? [{
3447
3539
  ...i,
3448
3540
  values: true
3449
3541
  }] : [i],
3450
- dependency: joinSafe(relativeSchemasPath, `${name}${suffix}`)
3542
+ dependency: joinSafe(relativeSchemasPath, `${name}${suffix}${importExtension}`)
3451
3543
  };
3452
3544
  });
3453
3545
  else if (isZodSchemaOutput) return [{
@@ -4012,5 +4104,5 @@ async function writeTagsMode({ builder, output, projectName, header, needSchema
4012
4104
  }
4013
4105
 
4014
4106
  //#endregion
4015
- export { BODY_TYPE_NAME, EnumGeneration, ErrorWithTag, FormDataArrayHandling, GetterPropType, LogLevels, NamingConvention, OutputClient, OutputHttpClient, OutputMockType, OutputMode, PropertySortOrder, RefComponentSuffix, SchemaType, TEMPLATE_TAG_REGEX, URL_REGEX, VERBS_WITH_BODY, Verbs, _filteredVerbs, addDependency, asyncReduce, camel, combineSchemas, compareVersions, conventionName, count, createDebugger, createLogger, createSuccessMessage, createTypeAliasIfNeeded, dynamicImport, escape, generalJSTypes, generalJSTypesWithArray, generateAxiosOptions, generateBodyMutatorConfig, generateBodyOptions, generateComponentDefinition, generateDependencyImports, generateFormDataAndUrlEncodedFunction, generateImports, generateModelInline, generateModelsInline, generateMutator, generateMutatorConfig, generateMutatorImports, generateMutatorRequestOptions, generateOptions, generateParameterDefinition, generateQueryParamsAxiosConfig, generateSchemasDefinition, generateTarget, generateTargetForTags, generateVerbImports, generateVerbOptions, generateVerbsOptions, getArray, getBody, getDefaultContentType, getEnum, getEnumDescriptions, getEnumImplementation, getEnumNames, getExtension, getFileInfo, getFormDataFieldFileType, getFullRoute, getIsBodyVerb, getKey, getMockFileExtensionByTypeName, getNumberWord, getObject, getOperationId, getOrvalGeneratedTypes, getParameters, getParams, getParamsInPath, getPropertySafe, getProps, getQueryParams, getRefInfo, getResReqTypes, getResponse, getResponseTypeCategory, getRoute, getRouteAsArray, getScalar, getTypedResponse, isBinaryContentType, isBoolean, isDirectory, isFunction, isModule, isNull, isNumber, isNumeric, isObject, isReference, isSchema, isString, isSyntheticDefaultImportsAllow, isUndefined, isUrl, isVerb, jsDoc, jsStringEscape, kebab, keyValuePairsToJsDoc, log, logError, mergeDeep, mismatchArgsMessage, pascal, removeFilesAndEmptyFolders, resolveDiscriminators, resolveExampleRefs, resolveObject, resolveRef, resolveValue, sanitize, snake, sortByPriority, startMessage, stringify, toObjectString, path_exports as upath, upper, writeModelInline, writeModelsInline, writeSchema, writeSchemas, writeSingleMode, writeSplitMode, writeSplitTagsMode, writeTagsMode };
4107
+ export { BODY_TYPE_NAME, EnumGeneration, ErrorWithTag, FormDataArrayHandling, GetterPropType, LogLevels, NamingConvention, OutputClient, OutputHttpClient, OutputMockType, OutputMode, PropertySortOrder, RefComponentSuffix, SchemaType, TEMPLATE_TAG_REGEX, URL_REGEX, VERBS_WITH_BODY, Verbs, _filteredVerbs, addDependency, asyncReduce, camel, combineSchemas, compareVersions, conventionName, count, createDebugger, createLogger, createSuccessMessage, createTypeAliasIfNeeded, dynamicImport, escape, fixCrossDirectoryImports, fixRegularSchemaImports, generalJSTypes, generalJSTypesWithArray, generateAxiosOptions, generateBodyMutatorConfig, generateBodyOptions, generateComponentDefinition, generateDependencyImports, generateFormDataAndUrlEncodedFunction, generateImports, generateModelInline, generateModelsInline, generateMutator, generateMutatorConfig, generateMutatorImports, generateMutatorRequestOptions, generateOptions, generateParameterDefinition, generateQueryParamsAxiosConfig, generateSchemasDefinition, generateTarget, generateTargetForTags, generateVerbImports, generateVerbOptions, generateVerbsOptions, getArray, getBody, getDefaultContentType, getEnum, getEnumDescriptions, getEnumImplementation, getEnumNames, getExtension, getFileInfo, getFormDataFieldFileType, getFullRoute, getIsBodyVerb, getKey, getMockFileExtensionByTypeName, getNumberWord, getObject, getOperationId, getOrvalGeneratedTypes, getParameters, getParams, getParamsInPath, getPropertySafe, getProps, getQueryParams, getRefInfo, getResReqTypes, getResponse, getResponseTypeCategory, getRoute, getRouteAsArray, getScalar, getTypedResponse, isBinaryContentType, isBoolean, isDirectory, isFunction, isModule, isNull, isNumber, isNumeric, isObject, isReference, isSchema, isString, isSyntheticDefaultImportsAllow, isUndefined, isUrl, isVerb, jsDoc, jsStringEscape, kebab, keyValuePairsToJsDoc, log, logError, mergeDeep, mismatchArgsMessage, pascal, removeFilesAndEmptyFolders, resolveDiscriminators, resolveExampleRefs, resolveObject, resolveRef, resolveValue, sanitize, snake, sortByPriority, splitSchemasByType, startMessage, stringify, toObjectString, path_exports as upath, upper, writeModelInline, writeModelsInline, writeSchema, writeSchemas, writeSingleMode, writeSplitMode, writeSplitTagsMode, writeTagsMode };
4016
4108
  //# sourceMappingURL=index.mjs.map