@orval/core 8.8.1 → 8.9.1

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
@@ -186,6 +186,7 @@ interface NormalizedOperationOptions {
186
186
  interface NormalizedInputOptions {
187
187
  target: string | OpenApiDocument;
188
188
  override: OverrideInput;
189
+ unsafeDisableValidation: boolean;
189
190
  filters?: InputFiltersOptions;
190
191
  parserOptions?: {
191
192
  headers?: {
@@ -284,6 +285,16 @@ interface InputFiltersOptions {
284
285
  interface InputOptions {
285
286
  target: string | string[] | Record<string, unknown> | OpenApiDocument;
286
287
  override?: OverrideInput;
288
+ /**
289
+ * Disable OpenAPI spec validation.
290
+ *
291
+ * **Use at your own risk** — code generation with invalid specs is not guaranteed
292
+ * to work and may break in minor updates. Bug reports with validation disabled are
293
+ * not accepted.
294
+ *
295
+ * @default false
296
+ */
297
+ unsafeDisableValidation?: boolean;
287
298
  filters?: InputFiltersOptions;
288
299
  parserOptions?: {
289
300
  headers?: {
@@ -948,6 +959,8 @@ interface GeneratorClient {
948
959
  implementation: string;
949
960
  imports: GeneratorImport[];
950
961
  mutators?: GeneratorMutator[];
962
+ /** When set, overrides the default verbOption.doc prepended to the implementation */
963
+ docComment?: string;
951
964
  }
952
965
  interface GeneratorMutatorParsingInfo {
953
966
  numberOfParams: number;
@@ -1297,6 +1310,12 @@ declare function generateVerbImports({
1297
1310
  params
1298
1311
  }: GeneratorVerbOptions): GeneratorImport[];
1299
1312
  //#endregion
1313
+ //#region src/generators/input-filters.d.ts
1314
+ declare const COMPONENT_TYPES: readonly ["schemas", "responses", "parameters", "requestBodies"];
1315
+ type ComponentType = (typeof COMPONENT_TYPES)[number];
1316
+ declare function filteredVerbs(verbs: OpenApiPathItemObject, filters: NormalizedInputOptions['filters']): [string, any][];
1317
+ declare const collectReferencedComponents: (spec: OpenApiDocument, tags: (string | RegExp)[], mode: InputFiltersOptions["mode"]) => Record<ComponentType, string[]>;
1318
+ //#endregion
1300
1319
  //#region src/generators/models-inline.d.ts
1301
1320
  declare function generateModelInline(acc: string, model: string): string;
1302
1321
  declare function generateModelsInline(obj: Record<string, GeneratorSchema[]> | GeneratorSchema[]): string;
@@ -1509,7 +1528,6 @@ declare function generateVerbsOptions({
1509
1528
  pathRoute,
1510
1529
  context
1511
1530
  }: GenerateVerbsOptionsParams): Promise<GeneratorVerbsOptions>;
1512
- declare function _filteredVerbs(verbs: OpenApiPathItemObject, filters: NormalizedInputOptions['filters']): [string, any][];
1513
1531
  //#endregion
1514
1532
  //#region src/getters/object.d.ts
1515
1533
  /**
@@ -1627,10 +1645,10 @@ declare function combineSchemas({
1627
1645
  declare function resolveDiscriminators(schemas: OpenApiSchemasObject, context: ContextSpec): OpenApiSchemasObject;
1628
1646
  //#endregion
1629
1647
  //#region src/getters/enum.d.ts
1630
- declare function getEnumNames(schemaObject: OpenApiSchemaObject | undefined): string[] | undefined;
1631
- declare function getEnumDescriptions(schemaObject: OpenApiSchemaObject | undefined): string[] | undefined;
1632
- declare function getEnum(value: string, enumName: string, names: string[] | undefined, enumGenerationType: EnumGeneration, descriptions?: string[], enumNamingConvention?: NamingConvention): string;
1633
- declare function getEnumImplementation(value: string, names?: string[], descriptions?: string[], enumNamingConvention?: NamingConvention): string;
1648
+ declare function getEnumNames(schemaObject: OpenApiSchemaObject | undefined): (string | undefined)[] | undefined;
1649
+ declare function getEnumDescriptions(schemaObject: OpenApiSchemaObject | undefined): (string | undefined)[] | undefined;
1650
+ declare function getEnum(value: string, enumName: string, names: (string | undefined)[] | undefined, enumGenerationType: EnumGeneration, descriptions?: (string | undefined)[], enumNamingConvention?: NamingConvention): string;
1651
+ declare function getEnumImplementation(value: string, names?: (string | undefined)[], descriptions?: (string | undefined)[], enumNamingConvention?: NamingConvention): string;
1634
1652
  interface CombinedEnumInput {
1635
1653
  value: string;
1636
1654
  isRef: boolean;
@@ -2346,5 +2364,5 @@ declare function generateTargetForTags(builder: WriteSpecBuilder, options: Norma
2346
2364
  declare function getOrvalGeneratedTypes(): string;
2347
2365
  declare function getTypedResponse(): string;
2348
2366
  //#endregion
2349
- export { AngularHttpResourceOptions, AngularOptions, BODY_TYPE_NAME, BaseUrlFromConstant, BaseUrlFromSpec, BaseUrlRuntime, ClientBuilder, ClientDependenciesBuilder, ClientExtraFilesBuilder, ClientFileBuilder, ClientFooterBuilder, ClientGeneratorsBuilder, ClientHeaderBuilder, ClientMockBuilder, ClientMockGeneratorBuilder, ClientMockGeneratorImplementation, ClientTitleBuilder, Config, ConfigExternal, ConfigFn, ContentTypeFilter, ContextSpec, DeepNonNullable, EnumGeneration, ErrorWithTag, FetchOptions, FormDataArrayHandling, FormDataContext, 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, InvalidateTargetParam, JsDocOptions, LogLevel, LogLevels, LogOptions, LogType, Logger, LoggerOptions, McpOptions, McpServerOptions, MockData, MockDataArray, MockDataArrayFn, MockDataObject, MockDataObjectFn, MockOptions, MockProperties, MockPropertiesObject, MockPropertiesObjectFn, MutationInvalidatesConfig, MutationInvalidatesRule, Mutator, MutatorObject, NamingConvention, NormalizedAngularOptions, NormalizedConfig, NormalizedFetchOptions, NormalizedFormDataType, NormalizedHonoOptions, NormalizedHookCommand, NormalizedHookOptions, NormalizedInputOptions, NormalizedJsDocOptions, NormalizedMcpOptions, NormalizedMcpServerOptions, 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, PreferredContentType, PropertySortOrder, QueryOptions, ReadonlyRequestBodiesMode, RefComponentSuffix, RefInfo, ResReqTypesValue, ResolverValue, ResponseTypeCategory, ScalarValue, SchemaGenerationType, SchemaOptions, SchemaType, SupportedFormatter, 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, dedupeUnionType, dynamicImport, escape, escapeRegExp, filterByContentType, 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, getAngularFilteredParamsCallExpression, getAngularFilteredParamsExpression, getAngularFilteredParamsHelperBody, getArray, getBaseUrlRuntimeImports, getBodiesByContentType, getBody, getCombinedEnumValue, getDefaultContentType, getEnum, getEnumDescriptions, getEnumImplementation, getEnumNames, getEnumUnionFromSchema, getExtension, getFileInfo, getFormDataFieldFileType, getFullRoute, getIsBodyVerb, getKey, getMockFileExtensionByTypeName, getNumberWord, getObject, getOperationId, getOrvalGeneratedTypes, getParameters, getParams, getParamsInPath, getPropertySafe, getProps, getQueryParams, getRefInfo, getResReqTypes, getResponse, getResponseTypeCategory, getRoute, getRouteAsArray, getScalar, getSuccessResponseType, getTypedResponse, getWarningCount, isBinaryContentType, isBoolean, isDirectory, isFunction, isModule, isNullish, isNumber, isNumeric, isObject, isReference, isSchema, isString, isStringLike, isSyntheticDefaultImportsAllow, isUrl, isVerb, isVerbose, jsDoc, jsStringEscape, kebab, keyValuePairsToJsDoc, log, logError, logVerbose, logWarning, mergeDeep, mismatchArgsMessage, pascal, removeFilesAndEmptyFolders, resetWarnings, resolveDiscriminators, resolveExampleRefs, resolveInstalledVersion, resolveInstalledVersions, resolveObject, resolveRef, resolveValue, sanitize, setVerbose, snake, sortByPriority, splitSchemasByType, startMessage, stringify, toObjectString, path_d_exports as upath, upper, writeModelInline, writeModelsInline, writeSchema, writeSchemas, writeSingleMode, writeSplitMode, writeSplitTagsMode, writeTagsMode };
2367
+ export { AngularHttpResourceOptions, AngularOptions, BODY_TYPE_NAME, BaseUrlFromConstant, BaseUrlFromSpec, BaseUrlRuntime, ClientBuilder, ClientDependenciesBuilder, ClientExtraFilesBuilder, ClientFileBuilder, ClientFooterBuilder, ClientGeneratorsBuilder, ClientHeaderBuilder, ClientMockBuilder, ClientMockGeneratorBuilder, ClientMockGeneratorImplementation, ClientTitleBuilder, Config, ConfigExternal, ConfigFn, ContentTypeFilter, ContextSpec, DeepNonNullable, EnumGeneration, ErrorWithTag, FetchOptions, FormDataArrayHandling, FormDataContext, 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, InvalidateTargetParam, JsDocOptions, LogLevel, LogLevels, LogOptions, LogType, Logger, LoggerOptions, McpOptions, McpServerOptions, MockData, MockDataArray, MockDataArrayFn, MockDataObject, MockDataObjectFn, MockOptions, MockProperties, MockPropertiesObject, MockPropertiesObjectFn, MutationInvalidatesConfig, MutationInvalidatesRule, Mutator, MutatorObject, NamingConvention, NormalizedAngularOptions, NormalizedConfig, NormalizedFetchOptions, NormalizedFormDataType, NormalizedHonoOptions, NormalizedHookCommand, NormalizedHookOptions, NormalizedInputOptions, NormalizedJsDocOptions, NormalizedMcpOptions, NormalizedMcpServerOptions, 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, PreferredContentType, PropertySortOrder, QueryOptions, ReadonlyRequestBodiesMode, RefComponentSuffix, RefInfo, ResReqTypesValue, ResolverValue, ResponseTypeCategory, ScalarValue, SchemaGenerationType, SchemaOptions, SchemaType, SupportedFormatter, SwrOptions, TEMPLATE_TAG_REGEX, TsConfigTarget, Tsconfig, URL_REGEX, VERBS_WITH_BODY, Verbs, WriteModeProps, WriteSpecBuilder, ZodCoerceType, ZodDateTimeOptions, ZodOptions, ZodTimeOptions, addDependency, asyncReduce, camel, collectReferencedComponents, combineSchemas, compareVersions, conventionName, count, createDebugger, createLogger, createSuccessMessage, createTypeAliasIfNeeded, dedupeUnionType, dynamicImport, escape, escapeRegExp, filterByContentType, filteredVerbs, 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, getAngularFilteredParamsCallExpression, getAngularFilteredParamsExpression, getAngularFilteredParamsHelperBody, getArray, getBaseUrlRuntimeImports, getBodiesByContentType, getBody, getCombinedEnumValue, getDefaultContentType, getEnum, getEnumDescriptions, getEnumImplementation, getEnumNames, getEnumUnionFromSchema, getExtension, getFileInfo, getFormDataFieldFileType, getFullRoute, getIsBodyVerb, getKey, getMockFileExtensionByTypeName, getNumberWord, getObject, getOperationId, getOrvalGeneratedTypes, getParameters, getParams, getParamsInPath, getPropertySafe, getProps, getQueryParams, getRefInfo, getResReqTypes, getResponse, getResponseTypeCategory, getRoute, getRouteAsArray, getScalar, getSuccessResponseType, getTypedResponse, getWarningCount, isBinaryContentType, isBoolean, isDirectory, isFunction, isModule, isNullish, isNumber, isNumeric, isObject, isReference, isSchema, isString, isStringLike, isSyntheticDefaultImportsAllow, isUrl, isVerb, isVerbose, jsDoc, jsStringEscape, kebab, keyValuePairsToJsDoc, log, logError, logVerbose, logWarning, mergeDeep, mismatchArgsMessage, pascal, removeFilesAndEmptyFolders, resetWarnings, resolveDiscriminators, resolveExampleRefs, resolveInstalledVersion, resolveInstalledVersions, resolveObject, resolveRef, resolveValue, sanitize, setVerbose, snake, sortByPriority, splitSchemasByType, startMessage, stringify, toObjectString, path_d_exports as upath, upper, writeModelInline, writeModelsInline, writeSchema, writeSchemas, writeSingleMode, writeSplitMode, writeSplitTagsMode, writeTagsMode };
2350
2368
  //# sourceMappingURL=index.d.mts.map
package/dist/index.mjs CHANGED
@@ -279,7 +279,11 @@ function compareVersions(firstVersion, secondVersions, operator = ">=") {
279
279
  }
280
280
  //#endregion
281
281
  //#region src/utils/content-type.ts
282
- const binaryApplicationTypes = new Set(["application/octet-stream", "application/pdf"]);
282
+ const binaryApplicationTypes = new Set([
283
+ "application/octet-stream",
284
+ "application/pdf",
285
+ "application/zip"
286
+ ]);
283
287
  /**
284
288
  * Determine if a content type is binary.
285
289
  * Only known binary types return true. Unknown types default to false (non-binary)
@@ -1034,12 +1038,20 @@ function replaceSpecialCharacters(key) {
1034
1038
  function getEnumNames(schemaObject) {
1035
1039
  const names = schemaObject?.["x-enumNames"] ?? schemaObject?.["x-enumnames"] ?? schemaObject?.["x-enum-varnames"];
1036
1040
  if (!names) return;
1037
- return names.map((name) => jsStringEscape(name));
1041
+ if (Array.isArray(names)) return names.map((name) => jsStringEscape(name));
1042
+ if (typeof names === "object") return (schemaObject?.enum ?? []).map((enumVal) => {
1043
+ const key = String(enumVal);
1044
+ return key in names ? jsStringEscape(names[key]) : void 0;
1045
+ });
1038
1046
  }
1039
1047
  function getEnumDescriptions(schemaObject) {
1040
1048
  const descriptions = schemaObject?.["x-enumDescriptions"] ?? schemaObject?.["x-enumdescriptions"] ?? schemaObject?.["x-enum-descriptions"];
1041
1049
  if (!descriptions) return;
1042
- return descriptions.map((description) => jsStringEscape(description));
1050
+ if (Array.isArray(descriptions)) return descriptions.map((description) => jsStringEscape(description));
1051
+ if (typeof descriptions === "object") return (schemaObject?.enum ?? []).map((enumVal) => {
1052
+ const key = String(enumVal);
1053
+ return key in descriptions ? jsStringEscape(descriptions[key]) : void 0;
1054
+ });
1043
1055
  }
1044
1056
  function getEnum(value, enumName, names, enumGenerationType, descriptions, enumNamingConvention) {
1045
1057
  if (enumGenerationType === EnumGeneration.CONST) return getTypeConstEnum(value, enumName, names, descriptions, enumNamingConvention);
@@ -1633,7 +1645,7 @@ function getResReqTypes(responsesOrRequests, name, context, defaultType = "unkno
1633
1645
  name,
1634
1646
  schemaObject: mediaType.schema,
1635
1647
  context,
1636
- isRequestBodyOptional: "required" in bodySchema && bodySchema.required === false,
1648
+ isRequestBodyOptional: bodySchema.required !== true,
1637
1649
  isRef: true,
1638
1650
  encoding: mediaType.encoding
1639
1651
  }) : void 0;
@@ -1641,7 +1653,7 @@ function getResReqTypes(responsesOrRequests, name, context, defaultType = "unkno
1641
1653
  name,
1642
1654
  schemaObject: mediaType.schema,
1643
1655
  context,
1644
- isRequestBodyOptional: "required" in bodySchema && bodySchema.required === false,
1656
+ isRequestBodyOptional: bodySchema.required !== true,
1645
1657
  isUrlEncoded: true,
1646
1658
  isRef: true,
1647
1659
  encoding: mediaType.encoding
@@ -1674,11 +1686,13 @@ function getResReqTypes(responsesOrRequests, name, context, defaultType = "unkno
1674
1686
  if (res.content) return Object.entries(res.content).map(([contentType, mediaType], index, arr) => {
1675
1687
  let propName = key ? pascal(name) + pascal(key) : void 0;
1676
1688
  if (propName && arr.length > 1) propName = propName + pascal(getNumberWord(index + 1));
1689
+ const isFormData = formDataContentTypes.has(contentType);
1690
+ const isFormUrlEncoded = formUrlEncodedContentTypes.has(contentType);
1677
1691
  let effectivePropName = propName;
1678
1692
  if (mediaType.schema && isReference(mediaType.schema)) {
1679
1693
  const { imports } = resolveSchemaRef(mediaType.schema, context);
1680
1694
  if (imports[0]?.name) effectivePropName = imports[0].name;
1681
- } else if (mediaType.schema) {
1695
+ } else if ((isFormData || isFormUrlEncoded) && mediaType.schema) {
1682
1696
  const combinedRefs = getSchemaOneOf(mediaType.schema) ?? getSchemaAnyOf(mediaType.schema);
1683
1697
  if (combinedRefs) {
1684
1698
  const names = [];
@@ -1690,7 +1704,6 @@ function getResReqTypes(responsesOrRequests, name, context, defaultType = "unkno
1690
1704
  if (names.length > 0) effectivePropName = names.join("");
1691
1705
  }
1692
1706
  }
1693
- const isFormData = formDataContentTypes.has(contentType);
1694
1707
  const resolvedValue = getResReqContentTypes({
1695
1708
  mediaType,
1696
1709
  propName: effectivePropName,
@@ -1712,7 +1725,6 @@ function getResReqTypes(responsesOrRequests, name, context, defaultType = "unkno
1712
1725
  };
1713
1726
  return;
1714
1727
  }
1715
- const isFormUrlEncoded = formUrlEncodedContentTypes.has(contentType);
1716
1728
  if (!isFormData && !isFormUrlEncoded || !effectivePropName || !mediaType.schema) return {
1717
1729
  ...resolvedValue,
1718
1730
  imports: resolvedValue.imports,
@@ -1725,7 +1737,7 @@ function getResReqTypes(responsesOrRequests, name, context, defaultType = "unkno
1725
1737
  name: effectivePropName,
1726
1738
  schemaObject: mediaType.schema,
1727
1739
  context,
1728
- isRequestBodyOptional: "required" in res && res.required === false,
1740
+ isRequestBodyOptional: res.required !== true,
1729
1741
  isRef: true,
1730
1742
  encoding: mediaType.encoding
1731
1743
  }) : void 0;
@@ -1734,7 +1746,7 @@ function getResReqTypes(responsesOrRequests, name, context, defaultType = "unkno
1734
1746
  schemaObject: mediaType.schema,
1735
1747
  context,
1736
1748
  isUrlEncoded: true,
1737
- isRequestBodyOptional: "required" in res && res.required === false,
1749
+ isRequestBodyOptional: res.required !== true,
1738
1750
  isRef: true,
1739
1751
  encoding: mediaType.encoding
1740
1752
  }) : void 0;
@@ -1923,7 +1935,7 @@ function resolveSchemaPropertiesToFormData({ schema, variableName, propName, con
1923
1935
  keyPrefix: `${keyPrefix}${key}.`,
1924
1936
  depth: depth + 1,
1925
1937
  encoding
1926
- }) : partContentType ? `${variableName}.append(\`${keyPrefix}${key}\`, new Blob([JSON.stringify(${nonOptionalValueKey})], { type: '${partContentType}' }));\n` : `${variableName}.append(\`${keyPrefix}${key}\`, JSON.stringify(${nonOptionalValueKey}));\n`;
1938
+ }) : `${variableName}.append(\`${keyPrefix}${key}\`, JSON.stringify(${nonOptionalValueKey}));\n`;
1927
1939
  else if (property.type === "array") {
1928
1940
  let valueStr = "value";
1929
1941
  let hasNonPrimitiveChild = false;
@@ -2013,8 +2025,8 @@ function buildBody(filteredBodyTypes, requestBody, operationName, context) {
2013
2025
  });
2014
2026
  if (isReference(requestBody)) {
2015
2027
  const { schema: bodySchema } = resolveRef(requestBody, context);
2016
- if (bodySchema.required !== void 0) isOptional = !bodySchema.required;
2017
- } else if (requestBody.required !== void 0) isOptional = !requestBody.required;
2028
+ isOptional = bodySchema.required !== true;
2029
+ } else isOptional = requestBody.required !== true;
2018
2030
  }
2019
2031
  return {
2020
2032
  originalSchema: requestBody,
@@ -2269,6 +2281,8 @@ function getObject({ item, name, context, nullable, formDataContext }) {
2269
2281
  const keyType = getIndexSignatureKey(schemaItem);
2270
2282
  acc.value += `\n [key: ${keyType}]: ${resolvedValue.value};\n}`;
2271
2283
  }
2284
+ acc.imports.push(...resolvedValue.imports);
2285
+ acc.schemas.push(...resolvedValue.schemas);
2272
2286
  acc.dependencies.push(...resolvedValue.dependencies);
2273
2287
  }
2274
2288
  else acc.value += "\n}";
@@ -3270,18 +3284,18 @@ function addDependency({ implementation, exports, dependency, projectName, isAll
3270
3284
  });
3271
3285
  if (types.length > 0) {
3272
3286
  let uniqueTypes = types;
3273
- if (values.length > 0) {
3274
- uniqueTypes = types.filter((t) => !values.some((v) => v.name === t.name && (v.alias ?? "") === (t.alias ?? "")));
3275
- dep += "\n";
3287
+ if (values.length > 0) uniqueTypes = types.filter((t) => !values.some((v) => v.name === t.name && (v.alias ?? "") === (t.alias ?? "")));
3288
+ if (uniqueTypes.length > 0) {
3289
+ if (values.length > 0) dep += "\n";
3290
+ dep += generateDependency({
3291
+ deps: uniqueTypes,
3292
+ isAllowSyntheticDefaultImports,
3293
+ dependency,
3294
+ projectName,
3295
+ key,
3296
+ onlyTypes: true
3297
+ });
3276
3298
  }
3277
- dep += generateDependency({
3278
- deps: uniqueTypes,
3279
- isAllowSyntheticDefaultImports,
3280
- dependency,
3281
- projectName,
3282
- key,
3283
- onlyTypes: true
3284
- });
3285
3299
  }
3286
3300
  return dep;
3287
3301
  }).join("\n") + "\n";
@@ -3326,6 +3340,70 @@ function generateVerbImports({ response, body, queryParams, props, headers, para
3326
3340
  });
3327
3341
  }
3328
3342
  //#endregion
3343
+ //#region src/generators/input-filters.ts
3344
+ const COMPONENT_TYPES = [
3345
+ "schemas",
3346
+ "responses",
3347
+ "parameters",
3348
+ "requestBodies"
3349
+ ];
3350
+ function filteredVerbs(verbs, filters) {
3351
+ if (filters?.tags === void 0) return Object.entries(verbs);
3352
+ const filterTags = filters.tags;
3353
+ const filterMode = filters.mode ?? "include";
3354
+ return Object.entries(verbs).filter(([, operation]) => {
3355
+ const isMatch = (operation.tags ?? []).some((tag) => filterTags.some((filterTag) => filterTag instanceof RegExp ? filterTag.test(tag) : filterTag === tag));
3356
+ return filterMode === "exclude" ? !isMatch : isMatch;
3357
+ });
3358
+ }
3359
+ function findRefs(value) {
3360
+ if (!value || typeof value !== "object") return [];
3361
+ if (Array.isArray(value)) return value.flatMap((item) => findRefs(item));
3362
+ const obj = value;
3363
+ if (typeof obj.$ref === "string") return [obj.$ref];
3364
+ return Object.values(obj).flatMap((val) => findRefs(val));
3365
+ }
3366
+ function parseComponentRef(ref) {
3367
+ const parts = ref.split("/");
3368
+ if (parts[0] !== "#" || parts[1] !== "components" || parts.length < 4) return;
3369
+ const type = parts[2];
3370
+ const name = parts[3];
3371
+ if (!COMPONENT_TYPES.includes(type)) return;
3372
+ return {
3373
+ type,
3374
+ name
3375
+ };
3376
+ }
3377
+ function getComponentNames(refs, spec) {
3378
+ return refs.map((ref) => parseComponentRef(ref)).filter((parsed) => !!parsed && !!spec.components?.[parsed.type]?.[parsed.name]);
3379
+ }
3380
+ function resolveReferencedComponents(refs, spec, resolved) {
3381
+ const newComponents = getComponentNames(refs, spec).filter(({ type, name }) => !resolved[type].includes(name));
3382
+ if (newComponents.length === 0) return resolved;
3383
+ const nextResolved = {
3384
+ schemas: [...resolved.schemas],
3385
+ responses: [...resolved.responses],
3386
+ parameters: [...resolved.parameters],
3387
+ requestBodies: [...resolved.requestBodies]
3388
+ };
3389
+ for (const { type, name } of newComponents) nextResolved[type].push(name);
3390
+ return resolveReferencedComponents(newComponents.flatMap(({ type, name }) => findRefs(spec.components?.[type]?.[name])), spec, nextResolved);
3391
+ }
3392
+ const collectReferencedComponents = (spec, tags, mode) => {
3393
+ const filters = {
3394
+ tags,
3395
+ mode
3396
+ };
3397
+ return resolveReferencedComponents(Object.values(spec.paths ?? {}).filter((pathItem) => !!pathItem).flatMap((pathItem) => {
3398
+ return [...filteredVerbs(pathItem, filters).flatMap(([, operation]) => findRefs(operation)), ...findRefs(pathItem.parameters)];
3399
+ }), spec, {
3400
+ schemas: [],
3401
+ responses: [],
3402
+ parameters: [],
3403
+ requestBodies: []
3404
+ });
3405
+ };
3406
+ //#endregion
3329
3407
  //#region src/generators/models-inline.ts
3330
3408
  function generateModelInline(acc, model) {
3331
3409
  return acc + `${model}\n`;
@@ -3678,7 +3756,8 @@ function generateQueryParamsAxiosConfig(response, isVue, isAngular, requiredNull
3678
3756
  function generateMutatorConfig({ route, body, headers, queryParams, response, verb, isFormData, isFormUrlEncoded, hasSignal, hasSignalParam = false, isExactOptionalPropertyTypes, isVue, isAngular }) {
3679
3757
  const bodyOptions = getIsBodyVerb(verb) ? generateBodyMutatorConfig(body, isFormData, isFormUrlEncoded) : "";
3680
3758
  const queryParamsOptions = generateQueryParamsAxiosConfig(response, isVue ?? false, isAngular ?? false, queryParams?.requiredNullableKeys, queryParams);
3681
- const headerOptions = body.contentType && !["multipart/form-data"].includes(body.contentType) ? `,\n headers: {'Content-Type': '${body.contentType}', ${headers ? "...headers" : ""}}` : headers ? ",\n headers" : "";
3759
+ const ignoreContentTypes = isAngular ? ["multipart/form-data"] : [];
3760
+ const headerOptions = body.contentType && !ignoreContentTypes.includes(body.contentType) ? `,\n headers: {'Content-Type': '${body.contentType}', ${headers ? "...headers" : ""}}` : headers ? ",\n headers" : "";
3682
3761
  const signalVar = hasSignalParam ? "querySignal" : "signal";
3683
3762
  const signalProp = hasSignalParam ? `signal: ${signalVar}` : "signal";
3684
3763
  return `{url: \`${route}\`, method: '${verb.toUpperCase()}'${headerOptions}${bodyOptions}${queryParamsOptions}${hasSignal ? `, ${isExactOptionalPropertyTypes ? `...(${signalVar} ? { ${signalProp} }: {})` : signalProp}` : ""}\n }`;
@@ -4086,7 +4165,7 @@ async function generateVerbOptions({ verb, output, operation, route, pathRoute,
4086
4165
  })];
4087
4166
  }
4088
4167
  function generateVerbsOptions({ verbs, input, output, route, pathRoute, context }) {
4089
- return asyncReduce(_filteredVerbs(verbs, input.filters), async (acc, [verb, operation]) => {
4168
+ return asyncReduce(filteredVerbs(verbs, input.filters), async (acc, [verb, operation]) => {
4090
4169
  if (isVerb(verb)) {
4091
4170
  const verbOptions = await generateVerbOptions({
4092
4171
  verb,
@@ -4102,15 +4181,6 @@ function generateVerbsOptions({ verbs, input, output, route, pathRoute, context
4102
4181
  return acc;
4103
4182
  }, []);
4104
4183
  }
4105
- function _filteredVerbs(verbs, filters) {
4106
- if (filters?.tags === void 0) return Object.entries(verbs);
4107
- const filterTags = filters.tags;
4108
- const filterMode = filters.mode ?? "include";
4109
- return Object.entries(verbs).filter(([, operation]) => {
4110
- const isMatch = (operation.tags ?? []).some((tag) => filterTags.some((filterTag) => filterTag instanceof RegExp ? filterTag.test(tag) : filterTag === tag));
4111
- return filterMode === "exclude" ? !isMatch : isMatch;
4112
- });
4113
- }
4114
4184
  //#endregion
4115
4185
  //#region src/writers/file.ts
4116
4186
  const TRAILING_WHITESPACE_RE = /[^\S\r\n]+$/gm;
@@ -4584,8 +4654,8 @@ async function writeSplitMode({ builder, output, projectName, header, needSchema
4584
4654
  isAllowSyntheticDefaultImports,
4585
4655
  options: isFunction(output.mock) ? void 0 : output.mock
4586
4656
  });
4587
- const schemasPath = output.schemas ? void 0 : nodePath.join(dirname, filename + ".schemas" + extension);
4588
- if (schemasPath && needSchema) await writeGeneratedFile(schemasPath, generateSchemasInline ? header + generateSchemasInline() : header + generateModelsInline(builder.schemas));
4657
+ const schemasPath = !output.schemas && needSchema ? nodePath.join(dirname, filename + ".schemas" + extension) : void 0;
4658
+ if (schemasPath) await writeGeneratedFile(schemasPath, generateSchemasInline ? header + generateSchemasInline() : header + generateModelsInline(builder.schemas));
4589
4659
  if (mutators) implementationData += generateMutatorImports({
4590
4660
  mutators,
4591
4661
  implementation
@@ -4793,8 +4863,8 @@ async function writeSplitTagsMode({ builder, output, projectName, header, needSc
4793
4863
  isAllowSyntheticDefaultImports,
4794
4864
  options: isFunction(output.mock) ? void 0 : output.mock
4795
4865
  });
4796
- const schemasPath = output.schemas ? void 0 : nodePath.join(dirname, filename + ".schemas" + extension);
4797
- if (schemasPath && needSchema) await writeGeneratedFile(schemasPath, generateSchemasInline ? header + generateSchemasInline() : header + generateModelsInline(builder.schemas));
4866
+ const schemasPath = !output.schemas && needSchema ? nodePath.join(dirname, filename + ".schemas" + extension) : void 0;
4867
+ if (schemasPath) await writeGeneratedFile(schemasPath, generateSchemasInline ? header + generateSchemasInline() : header + generateModelsInline(builder.schemas));
4798
4868
  if (mutators) implementationData += generateMutatorImports({
4799
4869
  mutators,
4800
4870
  implementation,
@@ -4902,8 +4972,8 @@ async function writeTagsMode({ builder, output, projectName, header, needSchema,
4902
4972
  options: isFunction(output.mock) ? void 0 : output.mock
4903
4973
  });
4904
4974
  }
4905
- const schemasPath = output.schemas ? void 0 : nodePath.join(dirname, filename + ".schemas" + extension);
4906
- if (schemasPath && needSchema) await writeGeneratedFile(schemasPath, generateSchemasInline ? header + generateSchemasInline() : header + generateModelsInline(builder.schemas));
4975
+ const schemasPath = !output.schemas && needSchema ? nodePath.join(dirname, filename + ".schemas" + extension) : void 0;
4976
+ if (schemasPath) await writeGeneratedFile(schemasPath, generateSchemasInline ? header + generateSchemasInline() : header + generateModelsInline(builder.schemas));
4907
4977
  if (mutators) data += generateMutatorImports({
4908
4978
  mutators,
4909
4979
  implementation
@@ -4936,6 +5006,6 @@ async function writeTagsMode({ builder, output, projectName, header, needSchema,
4936
5006
  }))).flat();
4937
5007
  }
4938
5008
  //#endregion
4939
- export { BODY_TYPE_NAME, EnumGeneration, ErrorWithTag, FormDataArrayHandling, GetterPropType, LogLevels, NamingConvention, OutputClient, OutputHttpClient, OutputMockType, OutputMode, PropertySortOrder, RefComponentSuffix, SchemaType, SupportedFormatter, TEMPLATE_TAG_REGEX, URL_REGEX, VERBS_WITH_BODY, Verbs, _filteredVerbs, addDependency, asyncReduce, camel, combineSchemas, compareVersions, conventionName, count, createDebugger, createLogger, createSuccessMessage, createTypeAliasIfNeeded, dedupeUnionType, dynamicImport, escape, escapeRegExp, filterByContentType, 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, getAngularFilteredParamsCallExpression, getAngularFilteredParamsExpression, getAngularFilteredParamsHelperBody, getArray, getBaseUrlRuntimeImports, getBodiesByContentType, getBody, getCombinedEnumValue, getDefaultContentType, getEnum, getEnumDescriptions, getEnumImplementation, getEnumNames, getEnumUnionFromSchema, getExtension, getFileInfo, getFormDataFieldFileType, getFullRoute, getIsBodyVerb, getKey, getMockFileExtensionByTypeName, getNumberWord, getObject, getOperationId, getOrvalGeneratedTypes, getParameters, getParams, getParamsInPath, getPropertySafe, getProps, getQueryParams, getRefInfo, getResReqTypes, getResponse, getResponseTypeCategory, getRoute, getRouteAsArray, getScalar, getSuccessResponseType, getTypedResponse, getWarningCount, isBinaryContentType, isBoolean, isDirectory, isFunction, isModule, isNullish, isNumber, isNumeric, isObject, isReference, isSchema, isString, isStringLike, isSyntheticDefaultImportsAllow, isUrl, isVerb, isVerbose, jsDoc, jsStringEscape, kebab, keyValuePairsToJsDoc, log, logError, logVerbose, logWarning, mergeDeep, mismatchArgsMessage, pascal, removeFilesAndEmptyFolders, resetWarnings, resolveDiscriminators, resolveExampleRefs, resolveInstalledVersion, resolveInstalledVersions, resolveObject, resolveRef, resolveValue, sanitize, setVerbose, snake, sortByPriority, splitSchemasByType, startMessage, stringify, toObjectString, path_exports as upath, upper, writeModelInline, writeModelsInline, writeSchema, writeSchemas, writeSingleMode, writeSplitMode, writeSplitTagsMode, writeTagsMode };
5009
+ export { BODY_TYPE_NAME, EnumGeneration, ErrorWithTag, FormDataArrayHandling, GetterPropType, LogLevels, NamingConvention, OutputClient, OutputHttpClient, OutputMockType, OutputMode, PropertySortOrder, RefComponentSuffix, SchemaType, SupportedFormatter, TEMPLATE_TAG_REGEX, URL_REGEX, VERBS_WITH_BODY, Verbs, addDependency, asyncReduce, camel, collectReferencedComponents, combineSchemas, compareVersions, conventionName, count, createDebugger, createLogger, createSuccessMessage, createTypeAliasIfNeeded, dedupeUnionType, dynamicImport, escape, escapeRegExp, filterByContentType, filteredVerbs, 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, getAngularFilteredParamsCallExpression, getAngularFilteredParamsExpression, getAngularFilteredParamsHelperBody, getArray, getBaseUrlRuntimeImports, getBodiesByContentType, getBody, getCombinedEnumValue, getDefaultContentType, getEnum, getEnumDescriptions, getEnumImplementation, getEnumNames, getEnumUnionFromSchema, getExtension, getFileInfo, getFormDataFieldFileType, getFullRoute, getIsBodyVerb, getKey, getMockFileExtensionByTypeName, getNumberWord, getObject, getOperationId, getOrvalGeneratedTypes, getParameters, getParams, getParamsInPath, getPropertySafe, getProps, getQueryParams, getRefInfo, getResReqTypes, getResponse, getResponseTypeCategory, getRoute, getRouteAsArray, getScalar, getSuccessResponseType, getTypedResponse, getWarningCount, isBinaryContentType, isBoolean, isDirectory, isFunction, isModule, isNullish, isNumber, isNumeric, isObject, isReference, isSchema, isString, isStringLike, isSyntheticDefaultImportsAllow, isUrl, isVerb, isVerbose, jsDoc, jsStringEscape, kebab, keyValuePairsToJsDoc, log, logError, logVerbose, logWarning, mergeDeep, mismatchArgsMessage, pascal, removeFilesAndEmptyFolders, resetWarnings, resolveDiscriminators, resolveExampleRefs, resolveInstalledVersion, resolveInstalledVersions, resolveObject, resolveRef, resolveValue, sanitize, setVerbose, snake, sortByPriority, splitSchemasByType, startMessage, stringify, toObjectString, path_exports as upath, upper, writeModelInline, writeModelsInline, writeSchema, writeSchemas, writeSingleMode, writeSplitMode, writeSplitTagsMode, writeTagsMode };
4940
5010
 
4941
5011
  //# sourceMappingURL=index.mjs.map