@hey-api/openapi-ts 0.78.1 → 0.78.2
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/{chunk-4AJU36PO.js → chunk-YJGQGZQU.js} +11 -11
- package/dist/chunk-YJGQGZQU.js.map +1 -0
- package/dist/index.cjs +54 -54
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +345 -4
- package/dist/index.d.ts +345 -4
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/internal.cjs +8 -8
- package/dist/internal.cjs.map +1 -1
- package/dist/internal.d.cts +1 -1
- package/dist/internal.d.ts +1 -1
- package/dist/internal.js +1 -1
- package/dist/{types.d-DtZlpeRE.d.cts → types.d-CaH9PF-K.d.cts} +40 -8
- package/dist/{types.d-DtZlpeRE.d.ts → types.d-CaH9PF-K.d.ts} +40 -8
- package/package.json +1 -1
- package/dist/chunk-4AJU36PO.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/config/logs.ts","../src/config/utils.ts","../src/config/parser.ts","../src/plugins/shared/utils/config.ts","../src/plugins/@hey-api/client-core/config.ts","../src/utils/regexp.ts","../src/utils/escape.ts","../src/plugins/@hey-api/client-core/utils.ts","../src/utils/config.ts","../src/compiler/utils.ts","../src/compiler/types.ts","../src/compiler/module.ts","../src/compiler/classes.ts","../src/compiler/convert.ts","../src/compiler/return.ts","../src/compiler/transform.ts","../src/compiler/typedef.ts","../src/compiler/index.ts","../src/generate/utils.ts","../src/generate/client.ts","../src/utils/url.ts","../src/utils/ref.ts","../src/utils/stringCase.ts","../src/plugins/shared/utils/ref.ts","../src/plugins/@hey-api/typescript/ref.ts","../src/plugins/@hey-api/client-core/client.ts","../src/plugins/@hey-api/client-core/createClientConfig.ts","../src/plugins/@hey-api/client-core/plugin.ts","../src/generate/tsConfig.ts","../src/error.ts","../src/openApi/shared/utils/identifier.ts","../src/generate/files.ts","../src/plugins/shared/utils/instance.ts","../src/ir/context.ts","../src/ir/parameter.ts","../src/ir/schema.ts","../src/openApi/shared/utils/schema.ts","../src/ir/utils.ts","../src/ir/operation.ts","../src/openApi/common/parser/sanitize.ts","../src/openApi/shared/utils/operation.ts","../src/openApi/shared/utils/filter.ts","../src/openApi/shared/graph/meta.ts","../src/openApi/shared/utils/name.ts","../src/openApi/shared/utils/schemaChildRelationships.ts","../src/openApi/shared/utils/transforms.ts","../src/openApi/shared/transforms/utils.ts","../src/openApi/shared/transforms/enums.ts","../src/openApi/shared/utils/graph.ts","../src/openApi/shared/transforms/readWrite.ts","../src/openApi/shared/transforms/index.ts","../src/openApi/shared/utils/parameter.ts","../src/openApi/shared/utils/validator.ts","../src/openApi/2.0.x/parser/filter.ts","../src/ir/mediaType.ts","../src/openApi/2.0.x/parser/mediaType.ts","../src/ir/pagination.ts","../src/openApi/shared/utils/discriminator.ts","../src/openApi/2.0.x/parser/schema.ts","../src/openApi/2.0.x/parser/pagination.ts","../src/openApi/2.0.x/parser/operation.ts","../src/openApi/2.0.x/parser/parameter.ts","../src/openApi/2.0.x/parser/server.ts","../src/openApi/2.0.x/parser/validate.ts","../src/openApi/2.0.x/parser/index.ts","../src/openApi/3.0.x/parser/filter.ts","../src/openApi/3.0.x/parser/mediaType.ts","../src/openApi/3.0.x/parser/schema.ts","../src/openApi/3.0.x/parser/pagination.ts","../src/openApi/3.0.x/parser/operation.ts","../src/openApi/3.0.x/parser/parameter.ts","../src/openApi/3.0.x/parser/requestBody.ts","../src/openApi/3.0.x/parser/server.ts","../src/openApi/3.0.x/parser/validate.ts","../src/openApi/3.0.x/parser/index.ts","../src/openApi/3.1.x/parser/filter.ts","../src/openApi/3.1.x/parser/mediaType.ts","../src/openApi/3.1.x/parser/schema.ts","../src/openApi/3.1.x/parser/pagination.ts","../src/openApi/3.1.x/parser/operation.ts","../src/openApi/3.1.x/parser/parameter.ts","../src/openApi/3.1.x/parser/requestBody.ts","../src/openApi/3.1.x/parser/server.ts","../src/openApi/3.1.x/parser/validate.ts","../src/openApi/3.1.x/parser/index.ts","../src/openApi/common/parser/service.ts","../src/utils/const.ts","../src/utils/transform.ts","../src/openApi/v3/parser/inferType.ts","../src/openApi/common/parser/stripNamespace.ts","../src/openApi/common/parser/type.ts","../src/utils/unique.ts","../src/openApi/common/parser/getEnums.ts","../src/openApi/common/parser/getPattern.ts","../src/openApi/v2/parser/getModelProperties.ts","../src/openApi/common/parser/getRef.ts","../src/openApi/v2/parser/getRequiredPropertiesFromComposition.ts","../src/openApi/v2/parser/getModelComposition.ts","../src/openApi/v2/parser/getModel.ts","../src/openApi/v2/parser/getModels.ts","../src/utils/sort.ts","../src/utils/enum.ts","../src/utils/meta.ts","../src/utils/type.ts","../src/openApi/common/parser/operation.ts","../src/openApi/common/parser/getDefault.ts","../src/openApi/v2/parser/getOperationParameter.ts","../src/openApi/v2/parser/getOperationParameters.ts","../src/openApi/common/parser/sort.ts","../src/openApi/v2/parser/getOperationResponse.ts","../src/openApi/v2/parser/getOperationResponses.ts","../src/openApi/v2/parser/operation.ts","../src/openApi/v2/parser/getOperations.ts","../src/openApi/v2/parser/getServer.ts","../src/openApi/v2/index.ts","../src/openApi/v3/parser/discriminator.ts","../src/openApi/v3/parser/getModelProperties.ts","../src/openApi/v3/parser/getRequiredPropertiesFromComposition.ts","../src/openApi/v3/parser/getModelComposition.ts","../src/openApi/v3/parser/getModel.ts","../src/openApi/v3/parser/parameter.ts","../src/openApi/v3/parser/getModels.ts","../src/openApi/v3/parser/getOperationParameter.ts","../src/openApi/v3/parser/getOperationParameters.ts","../src/openApi/v3/parser/getContent.ts","../src/openApi/v3/parser/getOperationRequestBody.ts","../src/openApi/v3/parser/getOperationResponse.ts","../src/openApi/v3/parser/getOperationResponses.ts","../src/openApi/v3/parser/operation.ts","../src/openApi/v3/parser/getOperations.ts","../src/openApi/v3/parser/getServer.ts","../src/openApi/v3/index.ts","../src/openApi/index.ts","../src/plugins/@hey-api/client-axios/config.ts","../src/plugins/@hey-api/client-fetch/config.ts","../src/plugins/@hey-api/client-next/config.ts","../src/plugins/@hey-api/client-nuxt/config.ts","../src/plugins/@hey-api/legacy-angular/config.ts","../src/plugins/@hey-api/legacy-axios/config.ts","../src/plugins/@hey-api/legacy-fetch/config.ts","../src/plugins/@hey-api/legacy-node/config.ts","../src/plugins/@hey-api/legacy-xhr/config.ts","../src/plugins/@hey-api/schemas/plugin.ts","../src/plugins/@hey-api/schemas/plugin-legacy.ts","../src/plugins/@hey-api/schemas/config.ts","../src/plugins/shared/utils/operation.ts","../src/plugins/@hey-api/sdk/constants.ts","../src/plugins/@hey-api/transformers/plugin.ts","../src/plugins/@hey-api/transformers/expressions.ts","../src/plugins/@hey-api/sdk/auth.ts","../src/plugins/@hey-api/sdk/validator.ts","../src/plugins/@hey-api/sdk/operation.ts","../src/plugins/@hey-api/sdk/plugin-legacy.ts","../src/plugins/@hey-api/sdk/typeOptions.ts","../src/plugins/@hey-api/sdk/plugin.ts","../src/plugins/@hey-api/sdk/config.ts","../src/plugins/@hey-api/typescript/plugin-legacy.ts","../src/plugins/@hey-api/transformers/plugin-legacy.ts","../src/plugins/@hey-api/transformers/config.ts","../src/plugins/shared/utils/case.ts","../src/plugins/shared/utils/schema.ts","../src/plugins/@hey-api/typescript/clientOptions.ts","../src/plugins/@hey-api/typescript/plugin.ts","../src/plugins/@hey-api/typescript/config.ts","../src/plugins/@tanstack/query-core/useType.ts","../src/plugins/@tanstack/query-core/queryKey.ts","../src/plugins/@tanstack/query-core/infiniteQueryOptions.ts","../src/plugins/@tanstack/query-core/mutationOptions.ts","../src/plugins/@tanstack/query-core/queryOptions.ts","../src/plugins/@tanstack/query-core/plugin.ts","../src/plugins/@tanstack/query-core/plugin-legacy.ts","../src/plugins/@tanstack/angular-query-experimental/config.ts","../src/plugins/@tanstack/react-query/config.ts","../src/plugins/@tanstack/solid-query/config.ts","../src/plugins/@tanstack/svelte-query/config.ts","../src/plugins/@tanstack/vue-query/config.ts","../src/plugins/fastify/plugin.ts","../src/plugins/fastify/config.ts","../src/plugins/valibot/constants.ts","../src/plugins/valibot/api.ts","../src/plugins/valibot/plugin.ts","../src/plugins/valibot/operation.ts","../src/plugins/valibot/config.ts","../src/plugins/zod/constants.ts","../src/plugins/zod/api.ts","../src/plugins/zod/operation.ts","../src/plugins/zod/plugin.ts","../src/plugins/zod/config.ts","../src/plugins/config.ts","../src/config/plugins.ts","../src/config/input.ts","../src/config/merge.ts","../src/config/output.ts","../src/config/init.ts","../src/plugins/@hey-api/client-fetch/bundle/utils.ts","../src/getSpec.ts"],"names":["getLogs","userConfig","logs","mergeResult","result","mapped","key","value","valueToObject","defaultValue","mappers","mapper","defaultPaginationKeywords","getParser","parser","enabled","mode","fields","name","definePluginConfig","defaultConfig","clientDefaultConfig","clientDefaultMeta","illegalStartCharactersRegExp","numberRegExp","reservedBrowserGlobalsRegExp","reservedJavaScriptGlobalsRegExp","reservedJavaScriptKeywordsRegExp","reservedNodeGlobalsRegExp","reservedTypeScriptKeywordsRegExp","validTypescriptIdentifierRegExp","escapeName","unescapeName","escapeComment","_l","w","EOL","clientId","getClientBaseUrlKey","config","client","getClientPlugin","plugin","_config","getConfig","setConfig","isLegacyClient","legacyNameFromConfig","printer","ts","createSourceFile","sourceText","blankSourceFile","unescapeUnicode","_","hex","tsNodeToString","node","unescape","stringToTsNodes","createIdentifier","text","createThis","createModifier","keyword","kind","syntaxKindKeyword","createPropertyDeclaration","initializer","modifier","type","ots","alias","asType","nameNode","aliasNode","hasBothQuotes","hasNewlines","hasUnescapedBackticks","isBacktickEscaped","createStringLiteral","isTsNode","isType","processCommentObject","commentObject","lines","line","jsdocTexts","index","jsdoc","cleanedJsdoc","addLeadingComments","comments","isObjectStyle","comment","commentObjects","createTypeNode","base","args","createTypeReferenceNode","arg","createPropertyAccessChain","expression","createPropertyAccessExpression","isOptional","nodeExpression","nodeName","createNull","toExpression","identifiers","isValueAccess","shorthand","createArrayLiteralExpression","createObjectType","parts","toParameterDeclarations","parameters","parameter","createParameterDeclaration","param","modifiers","createKeywordTypeNode","toTypeParameters","types","createTypeParameterDeclaration","createTypeOperatorNode","operator","operatorKeyword","constraint","defaultType","createMappedTypeNode","members","nameType","questionToken","readonlyToken","typeParameter","createLiteralTypeNode","literal","createArrowFunction","async","multiLine","returnType","statements","createBlock","createAnonymousFunction","elements","createAwaitExpression","createFunctionTypeNode","typeParameters","obj","properties","canShorthand","assignment","nameIdentifier","createAsExpression","createPropertyAssignment","createEnumDeclaration","enumMemberComments","enumMember","createEnumMember","createNamespaceDeclaration","createIndexedAccessTypeNode","indexType","objectType","isSingleQuote","createConditionalExpression","condition","whenFalse","whenTrue","createTypeOfExpression","createTypeAliasDeclaration","exportType","typeArguments","typeName","createTypeParenthesizedNode","required","createNewExpression","argumentsArray","createForOfStatement","awaitModifier","statement","createAssignment","left","right","createRegularExpressionLiteral","flags","textWithSlashes","createTemplateLiteralType","spans","spanText","item","span","createExportAllDeclaration","module","createCallExpression","functionName","createNamedExportDeclarations","exports","exportedTypes","hasNonTypeExport","exportClause","moduleSpecifier","createConstVariable","assertion","destructure","exportConst","declaration","createNamedImportDeclarations","imports","importedTypes","hasNonTypeImport","namespaceImport","namedBindings","importClause","createConstructorDeclaration","accessLevel","createMethodDeclaration","isStatic","createClassDeclaration","decorator","exportClass","extendedClasses","nodes","heritageClauses","extendedClass","expressionToStatement","createReturnStatement","createReturnFunctionCall","createReturnVariable","createSafeAccessExpression","path","element","createAccessExpression","createPropertyAccessExpressions","expressions","createBinaryExpression","createIfStatement","elseStatement","thenStatement","createDateTransformMutation","safeAccessExpression","accessExpression","createFunctionTransformMutation","transformerName","createArrayTransformMutation","createDateTransformerExpression","parameterName","createArrayMapTransform","transformExpression","nullNode","maybeNullable","isNullable","createTypeInterfaceNode","indexKey","indexProperty","useLegacyResolution","property","signature","isIndexMapped","indexSignature","createTypeUnionNode","createTypeIntersectionNode","createTypeTupleNode","createTypeRecordNode","keys","values","keyNode","valueNode","createTypeArrayNode","compiler","ensureDirSync","fs","removeDirSync","relativeModulePath","moduleOutput","sourceOutput","outputParts","__filename","fileURLToPath","__dirname","getClientSrcPath","pluginFilePathComponents","clientModulePath","clientSrcPath","outputPath","clientApi","replaceRelativeImports","filePath","content","match","importPath","lastSlashIndex","generateClientBundle","tsConfig","shouldAppendJs","coreOutputPath","coreDistPath","coreFiles","file","clientOutputPath","clientDistFolderName","clientDistPath","clientFiles","dirPath","clientModulePathComponents","__require","distFiles","parseUrlRegExp","parseUrl","errorResponse","host","protocol","jsonPointerSlash","jsonPointerTilde","irRef","isRefOpenApiComponent","$ref","jsonPointerToPath","refToName","encodeJsonPointerSegment","segment","pointer","clean","part","normalizeJsonPointer","normalized","pathToJsonPointer","segments","resolveRef","spec","current","uppercaseRegExp","lowercaseRegExp","identifierRegExp","separatorsRegExp","leadingSeparatorsRegExp","separatorsAndIdentifierRegExp","numbersAndIdentifierRegExp","preserveCase","_case","string","isLastCharLower","isLastCharUpper","isLastLastCharUpper","isLastLastCharPreserved","separator","character","nextIndex","nextCharacter","isSeparatorBeforeNextCharacter","characterLower","characterUpper","stringCase","stripLeadingSeparators","identifier","offset","operationIrRef","id","parameterId","affix","separate","typesId","refIdentifier","onGet","importIdentifier","context","operation","ref","resolveBaseUrlString","baseUrl","servers","createClient","clientModule","createConfig","clientOptions","createClientConfig","defaultValues","resolvedBaseUrl","url","createConfigParameters","createClientConfigType","configType","defaultClientOptions","defaultClientOptionsType","tType","typeCreateClientConfig","clientPluginHandler","findPackageJson","dir","candidates","packageJsonPath","findTsConfigPath","tsConfigPath","resolved","loadTsConfig","configPath","raw","isInteractive","HeyApiError","error","event","pluginName","message","logCrashReport","logsDir","logName","fullDir","logPath","logContent","stack","openGitHubIssueWithCrashReport","body","search","packageJson","bugsUrl","open","printCrashReport","colors","shouldReportCrash","resolve","data","regexps","ensureValidIdentifier","regexp","TypeScriptFile","exportFromIndex","header","identifierCase","namespace","parseRef","refValue","ensureUniqueIdentifier","importedItem","moduleMap","splitNameAndExtension","configFileParts","cfgParts","thisPathParts","filePathParts","relativePath","pathArray","relativePathToFile","relativeFolder","fileName","options","extension","output","importsStringArray","_module","resolvedModule","propIndex","prop","transformName","transformer","count","create","nameTransformer","nameWithCasingAndTransformer","lowercaseName","nameValue","PluginInstance","props","events","callback","eventSet","server","pathItem","_method","method","originalError","IRContext","outputDir","createdFile","schema","dereferenced","instance","getPaginationSchema","hasParameterGroupObjectRequired","parameterGroup","hasParametersObjectRequired","parameterWithPagination","deduplicateSchema","detectFormat","uniqueItems","typeIds","constant","format","typeId","liftedSchema","deepClone","mergeSchemaAccessScopes","a","b","mergedScopes","scope","assignItems","items","addItemsToSchema","logicalOperator","mutateSchemaOneItem","hasOperationDataRequired","createOperationKey","operationPagination","resolvedSchema","paginationProp","statusCodeToGroup","statusCode","operationResponsesMap","errors","responses","defaultResponse","response","inferred","description","errorKeys","errorUnion","responseKeys","responseUnion","ensureValidTypeScriptJavaScriptIdentifier","replaced","sanitizeNamespaceIdentifier","sanitizeOperationParameterName","withoutBrackets","httpMethods","operationToId","state","urlWithoutPlaceholders","namespaceNeedle","addNamespace","removeNamespace","stringToNamespace","createFiltersSetAndRegExps","filters","collectFiltersSetFromRegExpsOpenApiV2","excludeOperations","excludeSchemas","includeOperations","includeSchemas","entry","collectFiltersSetFromRegExpsOpenApiV3","excludeParameters","excludeRequestBodies","excludeResponses","includeParameters","includeRequestBodies","includeResponses","collectFiltersSetFromRegExps","createFilters","hasFilters","collectOperations","requestBodies","resourceMetadata","schemas","finalSet","tag","dependency","collectParameters","collectRequestBodies","collectResponses","collectSchemas","dropExcludedParameters","excludedKey","dropExcludedRequestBodies","dropExcludedResponses","dropExcludedSchemas","dropOrphans","operationDependencies","collectOperationDependencies","operations","dependencies","createFilteredDependencies","buildResourceMetadata","graph","getDependencies","nodeDeps","dep","nodeInfo","operationPath","operationKey","buildName","childSchemaRelationships","getSchemasObject","hasComponentsSchemasObject","hasDefinitionsObject","hasName","getUniqueComponentName","_base","components","extraComponents","isPathRootSchema","specToSchemasPointerNamespace","getEnumSignature","walkSchemas","parent","visitor","k","v","inlineMode","schemasObj","schemasPointerNamespace","rootEnums","replaceEnumRefs","rootMode","rootEnumSignatures","inlineEnums","signatureToName","signatureToSchema","enumsTransform","annotateChildScopes","parentInfo","collectAllDependenciesForPointer","visited","allDependencies","depPointer","transitiveDependencies","childPointer","childInfo","propagateScopes","worklist","notifyAllDependents","reverseDependencies","dependentPointer","combinatorChildMatch","combinatorParentPointer","propagateChildScopes","propagateScopesToNode","depNode","fromNodeInfo","toNodeInfo","changed","seedLocalScopes","buildGraph","root","walk","parentPointer","deprecated","tags","refPointer","childKey","pointerFrom","pointers","pointerTo","schemaKeys","getComponentContext","captureOriginalSchemas","originals","insertSplitSchemasIntoSpec","split","pruneSchemaByScope","objMap","removeOriginalSplitSchemas","originalSchemas","originalPointer","splitSchemas","existingNames","schemasNamespaceSegments","pointerToSchema","readSchema","readBase","readName","readPointer","writeSchema","writeBase","writeName","writePointer","updateRefsInSpec","currentPointer","inSchema","nextPointer","nextContext","mapping","compContext","headerKey","map","readWriteTransform","transformOpenApiSpec","mergeParametersObjects","source","target","isSimpleKey","formatPath","i","formatValidatorIssue","issue","pathStr","level","highlightedMessage","code","shouldPrint","handleValidatorResult","filterSpec","preserveOrder","filtered","fileLikeRegExp","jsonMimeRegExp","multipartFormDataMimeRegExp","textMimeRegExp","xWwwFormUrlEncodedMimeRegExp","octetStreamMimeRegExp","isMediaTypeFileLike","mediaType","mediaTypeToIrMediaType","contentToSchema","mediaTypeObjects","mimeTypes","objects","getPaginationKeywordsRegExp","pagination","pattern","discriminatorValues","getSchemaType","parseSchemaJsDoc","irSchema","parseSchemaMeta","parseArray","schemaItems","irItemsSchema","schemaToIrSchema","ofArray","parseBoolean","parseNumber","parseObject","schemaProperties","irPropertySchema","irAdditionalPropertiesSchema","parseString","initIrSchema","parseAllOf","schemaType","compositionSchemas","compositionSchema","irCompositionSchema","valueSchemas","irDiscriminatorSchema","irRefSchema","irObjectSchema","parseOneType","requiredProperty","finalCompositionSchema","nestedItems","parseEnum","enumValue","typeOfEnumValue","enumType","irTypeSchema","refSchema","parseNullableType","typeIrSchema","parseType","parseUnknown","parseSchema","isPaginationType","paginationField","finalSchema","allOf","parseOperationJsDoc","irOperation","initIrOperation","operationToIrOperation","securitySchemesMap","isRequestBodyRequired","requestBodyObject","requestBodyObjectRequired","requestBodyParameter","requestBody","contents","responseObject","securitySchemeObjects","securityRequirementObject","securitySchemeObject","irSecuritySchemeObject","parseOperation","defaultExplode","collectionFormat","defaultStyle","_in","parametersArrayToObject","parametersObject","parameterOrReference","parameterToIrParameter","style","irParameter","parseServers","schemes","scheme","validateOpenApiSpec","issues","operationIds","parseV2_0_X","sets","finalPathItem","commonOperation","operationArgs","parseAnyOf","parseOneOf","defaultAllowReserved","explode","parseParameter","requestBodyToIrRequestBody","irRequestBody","parseRequestBody","parseV3_0_X","securityOrReference","requestBodyOrReference","getSchemaTypes","irItemSchema","parseNull","schemaTypes","parseManyTypes","nonNullCompositionSchemas","parseV3_1_X","allowedServiceMethods","getServiceVersion","version","refParametersPartial","refSchemasPartial","transformClassName","customName","transformTypeName","cleanAndTransformTypeName","transformed","inferType","definition","definitionTypes","isDefinitionTypeNullable","getDefinitionTypes","isDefinitionNullable","stripNamespace","getMappedType","hasSquareBracketsRegExp","getType","debug","joinedType","typeWithoutNamespace","matches","match1","match2","encodedType","unique","arr","getEnums","descriptions","names","getPattern","getModelProperties","getModel","openApi","models","propertyName","propertyRequired","model","ESCAPED_REF_SLASH","ESCAPED_REF_TILDE","getRef","paths","decodedPath","getRequiredPropertiesFromComposition","definitions","getModelComposition","composition","hasProperties","hasEnums","requiredProperties","modelProperties","modelProperty","isDefinition","meta","definitionRef","enums","arrayItems","additionalProperties","definitionType","getModels","definitionName","sort","nameA","nameB","sorterByName","sortByName","enumKey","enumUnionType","enumerator","union","enumEntry","enumMeta","serialized","getParametersMeta","getSchemasMeta","isModelDate","typeReference","typeNode","typeArray","m","toType","typeEnum","typeDict","typeUnionOrIntersection","typeInterface","isLegacy","maybeRequired","transformTypeKeyName","setUniqueTypeName","unsetUniqueTypeName","getOperationResponseHeader","operationResponses","isOperationParameterRequired","parseResponseStatusCode","sorterByResponseStatusCode","isErrorStatusCode","isSuccessStatusCode","inferDefaultResponseTypes","addResponseType","$refs","errorKeywords","operationFilterFn","operationNameFn","operationId","operationParameterFilterFn","operationParameterNameFn","tagResponseTypes","getDefault","getOperationParameter","operationParameterWithoutName","operationParameter","allowedIn","getOperationParameters","operationParameters","parameterDef","skip","toSortedByRequired","aNeedsValue","bNeedsValue","getOperationResponse","operationResponse","getOperationResponses","responseCode","responseOrReference","getOperation","op","pathParams","operationWithoutName","successResponses","getOperations","pathParameters","getServer","basePath","parse","inverseDictionary","m2","findOneOfParentDiscriminator","mapPropertyValue","discriminator","getAdditionalPropertiesModel","ap","apModel","apType","additionalPropertiesType","propertyValues","findModelComposition","def","foundComposition","propertiesProperty","initialValues","parentDefinition","inferredType","acc","arrayItemsDefinition","definitionConst","modelConst","getParameterSchema","mediaTypeObject","BASIC_MEDIA_TYPES","getContent","_openApi","basicMediaTypeWithSchema","cleanMediaType","firstMediaTypeWithSchema","getOperationRequestBody","mergeParameters","opParams","globalParams","mergedParameters","pendingParameters","pendingParam","requestBodyDef","variables","variable","parseLegacy","parseOpenApiSpec","defineConfig","schemasId","stripSchema","schemaToJsonSchemaDraft_04","_schema","schemaToJsonSchemaDraft_05","schemaToJsonSchema2020_12","schemaName","schemasV2_0_X","schemasV3_0_X","schemasV3_1_X","handler","ensureValidSchemaOutput","parentKey","toSchemaName","validName","handlerLegacy","files","addSchema","createOperationComment","isOperationOptionsRequired","isNuxtClient","nuxtTypeComposable","nuxtTypeDefault","nuxtTypeResponse","sdkId","bigIntExpressions","dataExpression","bigIntCallExpression","dateExpressions","identifierDate","operationTransformerIrRef","schemaIrRef","schemaResponseTransformerRef","transformersId","dataVariableName","ensureStatements","isNodeReturnStatement","schemaResponseTransformerNodes","identifierData","processSchemaType","callExpression","mapCallbackStatements","stmt","propertyAccessExpression","propertyNodes","noNullableTypesInSchema","x","arrayNodes","identifierItem","t","identifierResponse","identifierResponseTransformer","responseTransformerNode","securitySchemeObjectToAuthObject","operationAuth","auth","authObject","createRequestValidator","pluginValidator","createResponseValidator","operationClassName","getOperationMethodName","operationClasses","classNames","className","methodName","classCandidates","methodCandidate","rootClasses","rootClass","finalClassName","operationOptionsType","throwOnError","optionsName","getResponseType","contentType","cleanContent","operationStatements","isRequiredOptions","sdkOutput","identifierError","requestOptions","requestValidator","identifierTransformer","responseType","responseValidator","parameterContentType","spread","errorType","heyApiClient","optionsClient","clientExpression","generateImport","onImport","setUniqueTypeNameArgs","created","modelResponseTransformerTypeName","operationDataTypeName","operationErrorTypeName","operationResponseTransformerTypeName","operationResponseTypeName","operationOptionsLegacyParserType","importedType","toOperationParamType","isRequired","getDefaultPrintable","p","typePath","toOperationReturnType","toOperationComment","params","toRequestOptions","onClientImport","responseTransformerName","toObj","prev","curr","errorResponses","serviceFunctionIdentifier","handleIllegal","toOperationStatements","processService","onNode","service","clientPlugin","throwOnErrorTypeGeneric","compileFunctionParams","_members","member","imported","createTypeOptions","tDataShape","clientType","typeOptions","createClientClassNodes","clientAssignmentStatement","generateClassSdk","sdkClasses","generatedClasses","clientClassNodes","classes","currentClassName","parentClassName","parentClass","currentClass","functionNode","generateClass","childClassName","childClass","sdkClass","generateFlatSdk","treeName","emptyModel","generateEnum","leadingComment","generateType","onCreated","processComposition","enumDeclarations","processType","pluginTypeScript","processEnum","processScopedEnum","processModel","processServiceTypes","pathsMap","pathMap","methodMap","bodyParameters","bodyParameter","headerParameters","queryParameters","operationProperties","methodParameters","operationName","reqKey","reqResParameters","resKey","isVoidResponse","getRefModels","refModel","ensureModelResponseTransformerExists","modelName","generateResponseTransformer","processArray","refModels","nameModelResponseTransformer","processProperty","onRemoveNode","nonVoidResponses","nameCreated","fieldName","createSchemaComment","stringType","serverToBaseUrlType","createClientOptions","typeClientOptions","addJavaScriptEnum","enumObject","schemaToEnumObject","typeofItems","typeOfItemConst","addTypeEnum","schemaToType","shouldCreateTypeScriptEnum","addTypeScriptEnum","arrayTypeToIdentifier","itemTypes","booleanTypeToIdentifier","enumTypeToIdentifier","isRefComponent","objectNode","enumNode","numberTypeToIdentifier","objectTypeToIdentifier","indexPropertyItems","hasOptionalProperties","propertyType","stringTypeToIdentifier","tupleTypeToIdentifier","schemaTypeToIdentifier","irParametersToIrSchema","operationToDataType","dataRequired","operationToType","identifierErrors","errorsType","keyofType","identifierResponses","responsesType","useTypeData","useTypeError","typeError","axiosError","useTypeResponse","createQueryKeyFn","queryKeyName","TOptionsType","infiniteIdentifier","optionsIdentifier","createQueryKeyFunction","identifierCreateQueryKey","fn","createQueryKeyLiteral","isInfinite","createQueryKeyType","queryKeyType","queryKeyStatement","typeQueryKey","typeData","createInfiniteParamsFn","infiniteQueryOptionsFn","createInfiniteParamsFunction","identifierCreateInfiniteParams","createInfiniteQueryOptions","queryFn","typeResponse","typePageObjectParam","typePageParam","identifierInfiniteQueryKey","awaitSdkExpression","identifierInfiniteQueryOptions","mutationOptionsFn","createMutationOptions","mutationsType","mutationType","queryOptionsFn","createQueryOptions","identifierQueryKey","identifierQueryOptions","sdkPlugin","toInfiniteQueryOptionsName","toMutationOptionsName","toQueryOptionsName","toQueryKeyName","getPaginationIn","createTypeData","typesModulePath","nameTypeData","createTypeError","nameTypeError","createTypeResponse","nameTypeResponse","typeInfiniteData","hasCreateInfiniteParamsFunction","hasCreateQueryKeyParamsFunction","hasInfiniteQueries","hasMutations","hasQueries","processedOperations","hasUsedQueryFn","paginationParameter","fastifyId","operationToRouteHandler","fileTypes","errorsTypeReference","responsesTypeReference","replyTypes","routeHandlers","routeHandler","valibotId","requests","schemaIdentifier","dataParameterName","api","operationToValibotSchema","schemaData","schemaToValibotSchema","pipesToExpression","pipes","arrayTypeToValibotSchema","itemExpressions","schemaPipes","unknownTypeToValibotSchema","booleanTypeToValibotSchema","enumTypeToValibotSchema","enumMembers","resultExpression","neverTypeToValibotSchema","_props","nullTypeToValibotSchema","numberParameter","isBigInt","numberTypeToValibotSchema","objectTypeToValibotSchema","stringTypeToValibotSchema","tupleTypeToValibotSchema","tupleElements","undefinedTypeToValibotSchema","voidTypeToValibotSchema","schemaTypeToValibotSchema","_identifier","optional","anyType","isCircularReference","identifierRef","lazyExpression","valibotSchema","intersectExpression","unionExpression","readonlyExpression","callParameter","zodId","operationToZodSchema","schemaToZodSchema","andIdentifier","arrayIdentifier","coerceIdentifier","defaultIdentifier","describeIdentifier","intersectionIdentifier","lazyIdentifier","lengthIdentifier","literalIdentifier","maxIdentifier","minIdentifier","objectIdentifier","optionalIdentifier","readonlyIdentifier","recordIdentifier","regexIdentifier","unionIdentifier","zIdentifier","arrayTypeToZodSchema","arrayExpression","unknownTypeToZodSchema","booleanTypeToZodSchema","enumTypeToZodSchema","enumExpression","neverTypeToZodSchema","nullTypeToZodSchema","numberTypeToZodSchema","numberExpression","objectTypeToZodSchema","propertyExpression","zodSchema","stringTypeToZodSchema","stringExpression","tupleTypeToZodSchema","undefinedTypeToZodSchema","voidTypeToZodSchema","schemaTypeToZodSchema","firstSchema","defaultPluginConfigs","defaultPlugins","getPluginsConfig","userPlugins","userPluginsConfig","circularReferenceTracker","pluginOrder","plugins","dfs","defaultPlugin","userPlugin","errorMessage","isPluginClient","getPlugins","definedPlugins","defaultWatch","getWatch","input","watch","getInput","mergeObjects","objA","objB","mergeConfigs","configA","configB","merged","getOutput","initConfigs","configurationFile","configFromFile","loadConfig","userConfigs","results","configFile","dryRun","experimentalParser","exportCore","request","useOptions","mergeHeaders","headers","mergedHeaders","iterator","getSpec","fetchOptions","inputPath","timeout","refParser","$RefParser","resolvedInput","getResolvedInput","arrayBuffer","hasChanged","sendRequest","eTag","lastModified"],"mappings":"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","file":"chunk-YJGQGZQU.js","sourcesContent":["import type { Config, UserConfig } from '../types/config';\n\nexport const getLogs = (userConfig: UserConfig | undefined): Config['logs'] => {\n let logs: Config['logs'] = {\n file: true,\n level: 'info',\n path: process.cwd(),\n };\n\n if (typeof userConfig?.logs === 'string') {\n logs.path = userConfig.logs;\n } else {\n logs = {\n ...logs,\n ...userConfig?.logs,\n };\n }\n\n return logs;\n};\n","type ObjectType<T> =\n Extract<T, Record<string, any>> extends never\n ? Record<string, any>\n : Extract<T, Record<string, any>>;\n\ntype MappersType<T> = {\n boolean: T extends boolean\n ? (value: boolean) => Partial<ObjectType<T>>\n : never;\n number: T extends number ? (value: number) => Partial<ObjectType<T>> : never;\n object?: (value: Partial<ObjectType<T>>) => Partial<ObjectType<T>>;\n string: T extends string ? (value: string) => Partial<ObjectType<T>> : never;\n} extends infer U\n ? { [K in keyof U as U[K] extends never ? never : K]: U[K] }\n : never;\n\ntype IsObjectOnly<T> = T extends Record<string, any> | undefined\n ? Extract<T, string | boolean | number> extends never\n ? true\n : false\n : false;\n\nexport type ValueToObject = <\n T extends undefined | string | boolean | number | Record<string, any>,\n>(\n args: {\n defaultValue: ObjectType<T>;\n value: T;\n } & (IsObjectOnly<T> extends true\n ? {\n mappers?: MappersType<T>;\n }\n : {\n mappers: MappersType<T>;\n }),\n) => ObjectType<T>;\n\nconst mergeResult = <T>(\n result: ObjectType<T>,\n mapped: Record<string, any>,\n): ObjectType<T> => {\n for (const [key, value] of Object.entries(mapped)) {\n if (value !== undefined && value !== '') {\n (result as Record<string, any>)[key] = value;\n }\n }\n return result;\n};\n\nexport const valueToObject: ValueToObject = ({\n defaultValue,\n mappers,\n value,\n}) => {\n let result = { ...defaultValue };\n\n switch (typeof value) {\n case 'boolean':\n if (mappers && 'boolean' in mappers) {\n const mapper = mappers.boolean as (\n value: boolean,\n ) => Record<string, any>;\n result = mergeResult(result, mapper(value));\n }\n break;\n case 'number':\n if (mappers && 'number' in mappers) {\n const mapper = mappers.number as (value: number) => Record<string, any>;\n result = mergeResult(result, mapper(value));\n }\n break;\n case 'string':\n if (mappers && 'string' in mappers) {\n const mapper = mappers.string as (value: string) => Record<string, any>;\n result = mergeResult(result, mapper(value));\n }\n break;\n case 'object':\n if (value !== null) {\n if (\n mappers &&\n 'object' in mappers &&\n typeof mappers.object === 'function'\n ) {\n const mapper = mappers.object as (\n value: Record<string, any>,\n ) => Partial<ObjectType<any>>;\n result = mergeResult(result, mapper(value));\n } else {\n result = mergeResult(result, value);\n }\n }\n break;\n }\n\n return result;\n};\n","import type { Config, UserConfig } from '../types/config';\nimport { valueToObject } from './utils';\n\nexport const defaultPaginationKeywords = [\n 'after',\n 'before',\n 'cursor',\n 'offset',\n 'page',\n 'start',\n] as const;\n\nexport const getParser = (userConfig: UserConfig): Config['parser'] => {\n const parser: Config['parser'] = {\n ...userConfig.parser,\n pagination: {\n keywords: defaultPaginationKeywords,\n },\n transforms: {\n enums: {\n case: 'PascalCase',\n enabled: false,\n mode: 'root',\n name: '{{name}}Enum',\n },\n readWrite: {\n enabled: true,\n requests: {\n case: 'preserve',\n name: '{{name}}Writable',\n },\n responses: {\n case: 'preserve',\n name: '{{name}}',\n },\n },\n },\n validate_EXPERIMENTAL: false,\n };\n\n if (userConfig.parser) {\n if (userConfig.parser.pagination?.keywords) {\n parser.pagination.keywords = userConfig.parser.pagination.keywords;\n }\n\n if (userConfig.parser.transforms) {\n if (userConfig.parser.transforms.enums !== undefined) {\n parser.transforms.enums = valueToObject({\n defaultValue: {\n ...parser.transforms.enums,\n enabled: Boolean(userConfig.parser.transforms.enums),\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n string: (mode) => ({ mode }),\n },\n value: userConfig.parser.transforms.enums,\n }) as typeof parser.transforms.enums;\n }\n\n if (userConfig.parser.transforms.readWrite !== undefined) {\n parser.transforms.readWrite = valueToObject({\n defaultValue: {\n ...parser.transforms.readWrite,\n enabled: Boolean(userConfig.parser.transforms.readWrite),\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n object: (fields) => ({\n ...fields,\n requests: valueToObject({\n defaultValue: parser.transforms.readWrite.requests,\n mappers: {\n string: (name) => ({ name }),\n },\n value: fields.requests,\n }),\n responses: valueToObject({\n defaultValue: parser.transforms.readWrite.responses,\n mappers: {\n string: (name) => ({ name }),\n },\n value: fields.responses,\n }),\n }),\n },\n value: userConfig.parser.transforms.readWrite,\n }) as typeof parser.transforms.readWrite;\n }\n }\n\n if (userConfig.parser.validate_EXPERIMENTAL) {\n parser.validate_EXPERIMENTAL =\n userConfig.parser.validate_EXPERIMENTAL === true\n ? 'warn'\n : userConfig.parser.validate_EXPERIMENTAL;\n }\n }\n\n return parser;\n};\n","import type { Plugin } from '../../types';\n\nexport const definePluginConfig =\n <T extends Plugin.Types>(defaultConfig: Plugin.Config<T>) =>\n (\n userConfig?: Omit<Plugin.UserConfig<T['config']>, 'name'>,\n ): Omit<Plugin.Config<T>, 'name'> & {\n /**\n * Cast name to `any` so it doesn't throw type error in `plugins` array.\n * We could allow any `string` as plugin `name` in the object syntax, but\n * that TypeScript trick would cause all string methods to appear as\n * suggested auto completions, which is undesirable.\n */\n name: any;\n } => ({\n ...defaultConfig,\n config: {\n ...defaultConfig.config,\n ...userConfig,\n },\n });\n","export const clientDefaultConfig = {\n baseUrl: true,\n bundle: true,\n exportFromIndex: false,\n} as const;\n\nexport const clientDefaultMeta = {\n dependencies: ['@hey-api/typescript'],\n output: 'client',\n tags: ['client'],\n} as const;\n","/**\n * Matches characters from the start as long as they're not allowed.\n */\nexport const illegalStartCharactersRegExp = /^[^$_\\p{ID_Start}]+/u;\n\n/**\n * Matches string if it contains only digits and optionally decimal point or\n * leading minus sign.\n */\nexport const numberRegExp = /^-?\\d+(\\.\\d+)?$/;\n\nexport const reservedBrowserGlobalsRegExp =\n /^(document|history|location|navigator|window)$/g;\n\nexport const reservedJavaScriptGlobalsRegExp =\n /^(console|Array|Date|Error|Function|JSON|Map|Math|Object|Promise|RegExp|Set|WeakMap|WeakSet)$/g;\n\nexport const reservedJavaScriptKeywordsRegExp =\n /^(arguments|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|eval|export|extends|false|finally|for|from|function|if|implements|import|in|instanceof|interface|let|new|null|package|private|protected|public|return|static|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)$/g;\n\nexport const reservedNodeGlobalsRegExp = /^(global|process|Buffer)$/g;\n\nexport const reservedTypeScriptKeywordsRegExp =\n /^(any|as|bigint|boolean|namespace|never|null|number|string|symbol|type|undefined|unknown|void)$/g;\n\n/**\n * Javascript identifier regexp pattern retrieved from\n * {@link} https://developer.mozilla.org/docs/Web/JavaScript/Reference/Lexical_grammar#identifiers\n */\nexport const validTypescriptIdentifierRegExp =\n /^[$_\\p{ID_Start}][$\\u200c\\u200d\\p{ID_Continue}]*$/u;\n","import { EOL } from 'os';\n\nimport { validTypescriptIdentifierRegExp } from './regexp';\n\nexport const escapeName = (value: string): string => {\n if (value || value === '') {\n validTypescriptIdentifierRegExp.lastIndex = 0;\n const validName = validTypescriptIdentifierRegExp.test(value);\n if (!validName) {\n return `'${value}'`;\n }\n }\n return value;\n};\n\nexport const unescapeName = (value: string): string => {\n if (value && value.startsWith(\"'\") && value.endsWith(\"'\")) {\n return value.slice(1, value.length - 1);\n }\n return value;\n};\n\nexport const escapeComment = (value: string) =>\n value\n .replace(/\\*\\//g, '*')\n .replace(/\\/\\*/g, '*')\n .replace(/\\r?\\n(.*)/g, (_l, w) => EOL + w.trim());\n","import type { Config } from '../../../types/config';\nimport type { PluginClientNames } from '../../types';\n\nexport const clientId = 'client';\n\nexport const getClientBaseUrlKey = (config: Config) => {\n const client = getClientPlugin(config);\n if (\n client.name === '@hey-api/client-axios' ||\n client.name === '@hey-api/client-nuxt'\n ) {\n return 'baseURL';\n }\n return 'baseUrl';\n};\n\nexport const getClientPlugin = (\n config: Config,\n): Config['plugins'][PluginClientNames] & { name: PluginClientNames } => {\n for (const name of config.pluginOrder) {\n const plugin = config.plugins[name];\n if (plugin?.tags?.includes('client')) {\n return plugin as Config['plugins'][PluginClientNames] & {\n name: PluginClientNames;\n };\n }\n }\n\n return {\n config: {\n // @ts-expect-error\n name: '',\n },\n // @ts-expect-error\n name: '',\n };\n};\n","import { getClientPlugin } from '../plugins/@hey-api/client-core/utils';\nimport type { Config } from '../types/config';\n\nlet _config: Config;\n\nexport const getConfig = () => {\n const config = _config;\n const plugin = getClientPlugin(config);\n // patch legacy config to avoid breaking handlebars\n // @ts-expect-error\n config.client = plugin;\n return config;\n};\n\nexport const setConfig = (config: Config) => {\n _config = config;\n return getConfig();\n};\n\nexport const isLegacyClient = (config: Config) => {\n const plugin = getClientPlugin(config);\n return plugin.name.startsWith('legacy/');\n};\n\n/**\n * Wrap legacy `name` option so we don't use it when not using legacy clients.\n */\nexport const legacyNameFromConfig = (config: Config) => {\n if (!isLegacyClient(config)) {\n return;\n }\n\n return config.name;\n};\n","import ts from 'typescript';\n\nimport { getConfig } from '../utils/config';\nimport { unescapeName } from '../utils/escape';\nimport type { AccessLevel } from './types';\nimport { createStringLiteral, syntaxKindKeyword } from './types';\n\nexport interface ImportExportItemObject {\n alias?: string;\n asType?: boolean;\n name: string;\n}\n\nconst printer = ts.createPrinter({\n newLine: ts.NewLineKind.LineFeed,\n removeComments: false,\n});\n\nexport const createSourceFile = (sourceText: string) =>\n ts.createSourceFile(\n '',\n sourceText,\n ts.ScriptTarget.ESNext,\n false,\n ts.ScriptKind.TS,\n );\n\nconst blankSourceFile = createSourceFile('');\n\nconst unescapeUnicode = (value: string) =>\n value.replace(/\\\\u([0-9a-fA-F]{4})/g, (_, hex: string) =>\n String.fromCharCode(Number.parseInt(hex, 16)),\n );\n\n/**\n * Print a TypeScript node to a string.\n * @param node the node to print\n * @returns string\n */\nexport function tsNodeToString({\n node,\n unescape = false,\n}: {\n node: ts.Node;\n unescape?: boolean;\n}): string {\n const result = printer.printNode(\n ts.EmitHint.Unspecified,\n node,\n blankSourceFile,\n );\n\n if (!unescape) {\n return result;\n }\n\n try {\n /**\n * TypeScript Compiler API escapes unicode characters by default and there\n * is no way to disable this behavior\n * {@link https://github.com/microsoft/TypeScript/issues/36174}\n */\n return unescapeUnicode(result);\n } catch {\n if (getConfig().logs.level === 'debug') {\n console.warn('Could not decode value:', result);\n }\n return result;\n }\n}\n\n/**\n * Convert a string to a TypeScript Node\n * @param value the string to convert.\n * @returns ts.Node\n */\nexport function stringToTsNodes(value: string): ts.Node {\n const file = createSourceFile(value);\n return file.statements[0]!;\n}\n\nexport const createIdentifier = ({ text }: { text: string }) => {\n const identifier = ts.factory.createIdentifier(text);\n return identifier;\n};\n\nexport const createThis = () => ts.factory.createThis();\n\ntype Modifier = AccessLevel | 'async' | 'export' | 'readonly' | 'static';\n\nexport const createModifier = ({ keyword }: { keyword: Modifier }) => {\n const kind = syntaxKindKeyword({ keyword });\n return ts.factory.createModifier(kind);\n};\n\nexport const createPropertyDeclaration = ({\n initializer,\n modifier,\n name,\n type,\n}: {\n initializer?: ts.Expression;\n modifier?: Modifier;\n name: string | ts.PropertyName;\n type?: ts.TypeNode;\n}) => {\n const node = ts.factory.createPropertyDeclaration(\n modifier ? [createModifier({ keyword: modifier })] : undefined,\n name,\n undefined,\n type,\n initializer,\n );\n return node;\n};\n\n/**\n * ots for @hey-api/openapi-ts are helpers to reduce repetition of basic TypeScript\n * factory functions.\n */\nexport const ots = {\n /**\n * Create a boolean expression based on value.\n */\n boolean: (value: boolean) =>\n value ? ts.factory.createTrue() : ts.factory.createFalse(),\n export: ({ alias, asType = false, name }: ImportExportItemObject) => {\n const nameNode = createIdentifier({ text: name });\n if (alias) {\n const aliasNode = createIdentifier({ text: alias });\n return ts.factory.createExportSpecifier(asType, nameNode, aliasNode);\n }\n return ts.factory.createExportSpecifier(asType, undefined, nameNode);\n },\n import: ({ alias, asType = false, name }: ImportExportItemObject) => {\n const nameNode = createIdentifier({ text: name });\n if (alias) {\n const aliasNode = createIdentifier({ text: alias });\n return ts.factory.createImportSpecifier(asType, nameNode, aliasNode);\n }\n return ts.factory.createImportSpecifier(asType, undefined, nameNode);\n },\n /**\n * Create a numeric expression, handling negative numbers.\n */\n number: (value: number) => {\n if (value < 0) {\n return ts.factory.createPrefixUnaryExpression(\n ts.SyntaxKind.MinusToken,\n ts.factory.createNumericLiteral(Math.abs(value)),\n );\n }\n return ts.factory.createNumericLiteral(value);\n },\n /**\n * Create a string literal. This handles strings that start with '`' or \"'\".\n */\n string: (value: string, unescape = false) => {\n let text = value;\n if (unescape) {\n text = unescapeName(text);\n }\n const hasBothQuotes = text.includes(\"'\") && text.includes('\"');\n const hasNewlines = text.includes('\\n');\n const hasUnescapedBackticks = text.startsWith('`');\n const isBacktickEscaped = text.startsWith('\\\\`') && text.endsWith('\\\\`');\n if (\n (hasNewlines || hasBothQuotes || hasUnescapedBackticks) &&\n !isBacktickEscaped\n ) {\n text = `\\`${text.replace(/(?<!\\\\)`/g, '\\\\`').replace(/\\${/g, '\\\\${')}\\``;\n }\n if (text.startsWith('`')) {\n return createIdentifier({ text });\n }\n return createStringLiteral({ text });\n },\n};\n\nexport const isTsNode = (node: any): node is ts.Expression =>\n node !== null &&\n typeof node === 'object' &&\n typeof node.kind === 'number' &&\n typeof node.flags === 'number' &&\n typeof node.pos === 'number' &&\n typeof node.end === 'number';\n\nexport const isType = <T>(value: T | undefined): value is T =>\n value !== undefined;\n\ntype CommentLines = Array<string | null | false | undefined>;\ntype CommentObject = {\n jsdoc?: boolean;\n lines: CommentLines;\n};\nexport type Comments = CommentLines | Array<CommentObject>;\n\nconst processCommentObject = ({\n commentObject,\n node,\n}: {\n commentObject: CommentObject;\n node: ts.Node;\n}) => {\n const lines = commentObject.lines.filter(\n (line) => Boolean(line) || line === '',\n ) as string[];\n if (!lines.length) {\n return;\n }\n\n if (!commentObject.jsdoc) {\n for (const line of lines) {\n ts.addSyntheticLeadingComment(\n node,\n ts.SyntaxKind.SingleLineCommentTrivia,\n ` ${line}`,\n true,\n );\n }\n return;\n }\n\n const jsdocTexts = lines.map((line, index) => {\n let text = line;\n if (index !== lines.length) {\n text = `${text}\\n`;\n }\n const jsdocText = ts.factory.createJSDocText(text);\n return jsdocText;\n });\n\n const jsdoc = ts.factory.createJSDocComment(\n ts.factory.createNodeArray(jsdocTexts),\n undefined,\n );\n\n const cleanedJsdoc = tsNodeToString({ node: jsdoc, unescape: true })\n .replace('/*', '')\n .replace('* */', '');\n\n ts.addSyntheticLeadingComment(\n node,\n ts.SyntaxKind.MultiLineCommentTrivia,\n cleanedJsdoc,\n true,\n );\n};\n\nexport const addLeadingComments = ({\n comments = [],\n node,\n}: {\n comments?: Comments;\n node: ts.Node;\n}) => {\n const isObjectStyle = Boolean(\n comments.find((comment) => typeof comment === 'object' && comment),\n );\n\n let commentObjects = comments as Array<CommentObject>;\n if (!isObjectStyle) {\n commentObjects = [\n {\n jsdoc: true,\n lines: comments as CommentLines,\n },\n ];\n }\n\n for (const commentObject of commentObjects) {\n processCommentObject({\n commentObject,\n node,\n });\n }\n};\n","import ts from 'typescript';\n\nimport { escapeName } from '../utils/escape';\nimport { validTypescriptIdentifierRegExp } from '../utils/regexp';\nimport {\n addLeadingComments,\n type Comments,\n createIdentifier,\n createModifier,\n isTsNode,\n isType,\n ots,\n} from './utils';\n\nexport type AccessLevel = 'private' | 'protected' | 'public';\n\nexport type FunctionParameter =\n | {\n accessLevel?: AccessLevel;\n default?: any;\n isReadOnly?: boolean;\n isRequired?: boolean;\n name: string;\n type?: any | ts.TypeNode;\n }\n | {\n destructure: ReadonlyArray<FunctionParameter>;\n type?: any | ts.TypeNode;\n };\n\nexport interface FunctionTypeParameter {\n default?: any;\n extends?: string | ts.TypeNode;\n name: string | ts.Identifier;\n}\n\nexport const createTypeNode = (\n base: any | ts.TypeNode,\n args?: (any | ts.TypeNode)[],\n): ts.TypeNode => {\n if (ts.isTypeNode(base)) {\n return base;\n }\n\n if (typeof base === 'number') {\n return ts.factory.createLiteralTypeNode(ots.number(base));\n }\n\n return createTypeReferenceNode({\n typeArguments: args?.map((arg) => createTypeNode(arg)),\n typeName: base,\n });\n};\n\nexport const createPropertyAccessChain = ({\n expression,\n name,\n}: {\n expression: ts.Expression;\n name: string | ts.MemberName;\n}) => {\n const node = ts.factory.createPropertyAccessChain(\n expression,\n ts.factory.createToken(ts.SyntaxKind.QuestionDotToken),\n name,\n );\n return node;\n};\n\nexport const createPropertyAccessExpression = ({\n expression,\n isOptional,\n name,\n}: {\n expression: string | ts.Expression;\n isOptional?: boolean;\n name: string | number | ts.MemberName;\n}):\n | ts.PropertyAccessChain\n | ts.PropertyAccessExpression\n | ts.ElementAccessExpression => {\n const nodeExpression =\n typeof expression === 'string'\n ? createIdentifier({ text: expression })\n : expression;\n\n if (isOptional && typeof name !== 'number') {\n return createPropertyAccessChain({\n expression: nodeExpression,\n name,\n });\n }\n\n if (typeof name === 'string') {\n validTypescriptIdentifierRegExp.lastIndex = 0;\n if (!validTypescriptIdentifierRegExp.test(name)) {\n // TODO: parser - this should escape name only for new parser\n if (!name.startsWith(\"'\") && !name.endsWith(\"'\")) {\n // eslint-disable-next-line no-useless-escape\n name = `\\'${name}\\'`;\n }\n const nodeName = createIdentifier({ text: name });\n return ts.factory.createElementAccessExpression(nodeExpression, nodeName);\n }\n\n const nodeName = createIdentifier({ text: name });\n return ts.factory.createPropertyAccessExpression(nodeExpression, nodeName);\n }\n\n if (typeof name === 'number') {\n const nodeName = ts.factory.createNumericLiteral(name);\n return ts.factory.createElementAccessExpression(nodeExpression, nodeName);\n }\n\n return ts.factory.createPropertyAccessExpression(nodeExpression, name);\n};\n\nexport const createNull = (): ts.NullLiteral => ts.factory.createNull();\n\n/**\n * Convert an unknown value to an expression.\n * @param identifiers - list of keys that are treated as identifiers.\n * @param shorthand - if shorthand syntax is allowed.\n * @param unescape - if string should be unescaped.\n * @param value - the unknown value.\n * @returns ts.Expression\n */\nexport const toExpression = <T = unknown>({\n identifiers = [],\n isValueAccess,\n shorthand,\n unescape,\n value,\n}: {\n identifiers?: string[];\n isValueAccess?: boolean;\n shorthand?: boolean;\n unescape?: boolean;\n value: T;\n}): ts.Expression | undefined => {\n if (value === null) {\n return createNull();\n }\n\n if (Array.isArray(value)) {\n return createArrayLiteralExpression({ elements: value });\n }\n\n if (typeof value === 'object') {\n return createObjectType({\n identifiers,\n obj: value,\n shorthand,\n });\n }\n\n if (typeof value === 'number') {\n return ots.number(value);\n }\n\n if (typeof value === 'boolean') {\n return ots.boolean(value);\n }\n\n if (typeof value === 'string') {\n if (isValueAccess) {\n // TODO; handle more than single nested level, i.e. foo.bar.baz\n const parts = value.split('.');\n return createPropertyAccessExpression({\n expression: parts[0]!,\n name: parts[1]!,\n });\n }\n return ots.string(value, unescape);\n }\n\n return;\n};\n\n/**\n * Convert parameters to the declaration array expected by compiler API.\n * @param parameters - the parameters to convert to declarations\n * @returns ts.ParameterDeclaration[]\n */\nexport const toParameterDeclarations = (\n parameters: ReadonlyArray<FunctionParameter>,\n) =>\n parameters.map((parameter) => {\n if ('destructure' in parameter) {\n return createParameterDeclaration({\n name: ts.factory.createObjectBindingPattern(\n parameter.destructure\n .map((param) => {\n // TODO: add support for nested destructuring, not needed at the moment\n if ('destructure' in param) {\n return;\n }\n\n const result = ts.factory.createBindingElement(\n undefined,\n undefined,\n createIdentifier({ text: param.name }),\n undefined,\n );\n return result;\n })\n .filter(Boolean) as ts.BindingElement[],\n ),\n type:\n parameter.type !== undefined\n ? createTypeNode(parameter.type)\n : undefined,\n });\n }\n\n const modifiers = parameter.accessLevel\n ? [createModifier({ keyword: parameter.accessLevel })]\n : [];\n\n if (parameter.isReadOnly) {\n modifiers.push(createModifier({ keyword: 'readonly' }));\n }\n\n return createParameterDeclaration({\n initializer:\n parameter.default !== undefined\n ? toExpression({ value: parameter.default })\n : undefined,\n modifiers,\n name: createIdentifier({ text: parameter.name }),\n required: parameter.isRequired !== false,\n type:\n parameter.type !== undefined\n ? createTypeNode(parameter.type)\n : undefined,\n });\n });\n\nexport type SyntaxKindKeyword =\n | 'any'\n | 'async'\n | 'boolean'\n | 'export'\n | 'never'\n | 'number'\n | 'private'\n | 'protected'\n | 'public'\n | 'readonly'\n | 'static'\n | 'string'\n | 'undefined'\n | 'unknown'\n | 'void';\n\nexport const syntaxKindKeyword = <T extends SyntaxKindKeyword>({\n keyword,\n}: {\n keyword: T;\n}): T extends 'protected'\n ? ts.SyntaxKind.ProtectedKeyword\n : T extends 'public'\n ? ts.SyntaxKind.PublicKeyword\n : T extends 'private'\n ? ts.SyntaxKind.PrivateKeyword\n : T extends 'export'\n ? ts.SyntaxKind.ExportKeyword\n : T extends 'async'\n ? ts.SyntaxKind.ExportKeyword\n : T extends 'readonly'\n ? ts.SyntaxKind.ExportKeyword\n : T extends 'static'\n ? ts.SyntaxKind.ExportKeyword\n :\n | ts.SyntaxKind.AnyKeyword\n | ts.SyntaxKind.BooleanKeyword\n | ts.SyntaxKind.NeverKeyword\n | ts.SyntaxKind.NumberKeyword\n | ts.SyntaxKind.StringKeyword\n | ts.SyntaxKind.UndefinedKeyword\n | ts.SyntaxKind.UnknownKeyword\n | ts.SyntaxKind.VoidKeyword => {\n switch (keyword) {\n case 'any':\n return ts.SyntaxKind.AnyKeyword as any;\n case 'async':\n return ts.SyntaxKind.AsyncKeyword as any;\n case 'boolean':\n return ts.SyntaxKind.BooleanKeyword as any;\n case 'export':\n return ts.SyntaxKind.ExportKeyword as any;\n case 'never':\n return ts.SyntaxKind.NeverKeyword as any;\n case 'number':\n return ts.SyntaxKind.NumberKeyword as any;\n case 'private':\n return ts.SyntaxKind.PrivateKeyword as any;\n case 'protected':\n return ts.SyntaxKind.ProtectedKeyword as any;\n case 'public':\n return ts.SyntaxKind.PublicKeyword as any;\n case 'readonly':\n return ts.SyntaxKind.ReadonlyKeyword as any;\n case 'static':\n return ts.SyntaxKind.StaticKeyword as any;\n case 'string':\n return ts.SyntaxKind.StringKeyword as any;\n case 'undefined':\n return ts.SyntaxKind.UndefinedKeyword as any;\n case 'unknown':\n return ts.SyntaxKind.UnknownKeyword as any;\n case 'void':\n return ts.SyntaxKind.VoidKeyword as any;\n default:\n throw new Error(`unsupported syntax kind keyword \"${keyword}\"`);\n }\n};\n\nexport const createKeywordTypeNode = ({\n keyword,\n}: {\n keyword: Extract<\n SyntaxKindKeyword,\n | 'any'\n | 'boolean'\n | 'never'\n | 'number'\n | 'string'\n | 'undefined'\n | 'unknown'\n | 'void'\n >;\n}) => {\n const kind = syntaxKindKeyword({ keyword });\n return ts.factory.createKeywordTypeNode(kind);\n};\n\nexport const toTypeParameters = (\n types: (FunctionTypeParameter | ts.TypeParameterDeclaration)[],\n) =>\n types.map((node) => {\n // @ts-expect-error\n if (ts.isTypeParameterDeclaration(node)) {\n return node;\n }\n\n return createTypeParameterDeclaration({\n // TODO: support other extends values\n constraint: node.extends\n ? typeof node.extends === 'string'\n ? createKeywordTypeNode({ keyword: 'boolean' })\n : node.extends\n : undefined,\n // TODO: support other default types\n defaultType:\n node.default !== undefined\n ? isTsNode(node.default)\n ? (node.default as unknown as ts.TypeNode)\n : ts.factory.createLiteralTypeNode(\n node.default\n ? ts.factory.createTrue()\n : ts.factory.createFalse(),\n )\n : undefined,\n name: node.name,\n });\n });\n\nexport const createTypeOperatorNode = ({\n operator,\n type,\n}: {\n operator: 'keyof' | 'readonly' | 'unique';\n type: ts.TypeNode;\n}) => {\n const operatorKeyword =\n operator === 'keyof'\n ? ts.SyntaxKind.KeyOfKeyword\n : operator === 'readonly'\n ? ts.SyntaxKind.ReadonlyKeyword\n : ts.SyntaxKind.UniqueKeyword;\n return ts.factory.createTypeOperatorNode(operatorKeyword, type);\n};\n\nexport const createTypeParameterDeclaration = ({\n constraint,\n defaultType,\n modifiers,\n name,\n}: {\n constraint?: ts.TypeNode;\n defaultType?: ts.TypeNode;\n modifiers?: Array<ts.Modifier>;\n name: string | ts.Identifier;\n}) =>\n ts.factory.createTypeParameterDeclaration(\n modifiers,\n name,\n constraint,\n defaultType,\n );\n\nexport const createMappedTypeNode = ({\n members,\n nameType,\n questionToken,\n readonlyToken,\n type,\n typeParameter,\n}: {\n members?: ts.NodeArray<ts.TypeElement>;\n nameType?: ts.TypeNode;\n questionToken?: ts.QuestionToken | ts.PlusToken | ts.MinusToken;\n readonlyToken?: ts.ReadonlyKeyword | ts.PlusToken | ts.MinusToken;\n type?: ts.TypeNode;\n typeParameter: ts.TypeParameterDeclaration;\n}) =>\n ts.factory.createMappedTypeNode(\n readonlyToken,\n typeParameter,\n nameType,\n questionToken,\n type,\n members,\n );\n\nexport const createLiteralTypeNode = ({\n literal,\n}: {\n literal: ts.LiteralTypeNode['literal'];\n}) => {\n const node = ts.factory.createLiteralTypeNode(literal);\n return node;\n};\n\n/**\n * Create arrow function type expression.\n */\nexport const createArrowFunction = ({\n async,\n comment,\n multiLine,\n parameters = [],\n returnType,\n statements = [],\n types = [],\n}: {\n async?: boolean;\n comment?: Comments;\n multiLine?: boolean;\n parameters?: ReadonlyArray<FunctionParameter>;\n returnType?: string | ts.TypeNode;\n statements?: ts.Statement[] | ts.Expression;\n types?: FunctionTypeParameter[];\n}) => {\n const expression = ts.factory.createArrowFunction(\n async ? [createModifier({ keyword: 'async' })] : undefined,\n types ? toTypeParameters(types) : undefined,\n toParameterDeclarations(parameters),\n returnType ? createTypeNode(returnType) : undefined,\n undefined,\n Array.isArray(statements)\n ? createBlock({ multiLine, statements })\n : statements,\n );\n\n addLeadingComments({\n comments: comment,\n node: expression,\n });\n\n return expression;\n};\n\n/**\n * Create anonymous function type expression.\n */\nexport const createAnonymousFunction = ({\n async,\n comment,\n multiLine,\n parameters = [],\n returnType,\n statements = [],\n types = [],\n}: {\n async?: boolean;\n comment?: Comments;\n multiLine?: boolean;\n parameters?: FunctionParameter[];\n returnType?: string | ts.TypeNode;\n statements?: ts.Statement[];\n types?: FunctionTypeParameter[];\n}) => {\n const expression = ts.factory.createFunctionExpression(\n async ? [createModifier({ keyword: 'async' })] : undefined,\n undefined,\n undefined,\n types ? toTypeParameters(types) : undefined,\n toParameterDeclarations(parameters),\n returnType ? createTypeNode(returnType) : undefined,\n createBlock({ multiLine, statements }),\n );\n\n addLeadingComments({\n comments: comment,\n node: expression,\n });\n\n return expression;\n};\n\n/**\n * Create Array type expression.\n */\nexport const createArrayLiteralExpression = <T>({\n elements,\n multiLine = false,\n}: {\n /**\n * The array to create.\n */\n elements: T[];\n /**\n * Should the array be multi line?\n *\n * @default false\n */\n multiLine?: boolean;\n}): ts.ArrayLiteralExpression => {\n const expression = ts.factory.createArrayLiteralExpression(\n elements\n .map((value) => (isTsNode(value) ? value : toExpression({ value })))\n .filter(isType<ts.Expression>),\n // multiline if array contains objects\n multiLine ||\n (!Array.isArray(elements[0]) && typeof elements[0] === 'object'),\n );\n return expression;\n};\n\nexport const createAwaitExpression = ({\n expression,\n}: {\n expression: ts.Expression;\n}) => ts.factory.createAwaitExpression(expression);\n\nexport const createFunctionTypeNode = ({\n parameters = [],\n returnType,\n typeParameters,\n}: {\n parameters?: ts.ParameterDeclaration[];\n returnType: ts.TypeNode;\n typeParameters?: ts.TypeParameterDeclaration[];\n}) => {\n const node = ts.factory.createFunctionTypeNode(\n typeParameters,\n parameters,\n returnType,\n );\n return node;\n};\n\nexport type ObjectValue =\n | {\n assertion?: 'any' | ts.TypeNode;\n comments?: Comments;\n spread: string;\n }\n | {\n comments?: Comments;\n isValueAccess?: boolean;\n key: string;\n shorthand?: boolean;\n value: any;\n };\n\ntype ObjectAssignment =\n | ts.PropertyAssignment\n | ts.ShorthandPropertyAssignment\n | ts.SpreadAssignment;\n\n/**\n * Create Object type expression.\n * @param comments - comments to add to each property.\n * @param identifier - keys that should be treated as identifiers.\n * @param multiLine - if the object should be multiline.\n * @param obj - the object to create expression with.\n * @param shorthand - if shorthand syntax should be used.\n * @param unescape - if properties strings should be unescaped.\n * @returns ts.ObjectLiteralExpression\n */\nexport const createObjectType = <\n T extends Record<string, any> | Array<ObjectValue>,\n>({\n comments,\n identifiers = [],\n multiLine = true,\n obj,\n shorthand,\n unescape = false,\n}: {\n comments?: Comments;\n identifiers?: string[];\n multiLine?: boolean;\n obj: T;\n shorthand?: boolean;\n unescape?: boolean;\n}): ts.ObjectLiteralExpression => {\n const properties = Array.isArray(obj)\n ? obj\n .map((value: ObjectValue) => {\n // Check key value equality before possibly modifying it\n let canShorthand = false;\n if ('key' in value) {\n const { key } = value;\n canShorthand = key === value.value;\n const firstDigitAndNonDigits =\n key.match(/^[0-9]/) && key.match(/\\D+/g);\n if (\n (firstDigitAndNonDigits || key.match(/\\W/g) || key === '') &&\n !key.startsWith(\"'\") &&\n !key.endsWith(\"'\")\n ) {\n value.key = `'${key}'`;\n }\n }\n let assignment: ObjectAssignment;\n if ('spread' in value) {\n const nameIdentifier = isTsNode(value.spread)\n ? value.spread\n : createIdentifier({ text: value.spread });\n assignment = ts.factory.createSpreadAssignment(\n value.assertion\n ? createAsExpression({\n expression: nameIdentifier,\n type:\n typeof value.assertion === 'string'\n ? createKeywordTypeNode({ keyword: value.assertion })\n : value.assertion,\n })\n : nameIdentifier,\n );\n } else if (value.shorthand || (shorthand && canShorthand)) {\n assignment = ts.factory.createShorthandPropertyAssignment(\n value.value,\n );\n } else {\n let initializer: ts.Expression | undefined = isTsNode(value.value)\n ? value.value\n : Array.isArray(value.value) &&\n (!value.value.length || typeof value.value[0] === 'object')\n ? createObjectType({\n multiLine,\n obj: value.value,\n shorthand,\n unescape,\n })\n : toExpression({\n identifiers: identifiers.includes(value.key)\n ? Object.keys(value.value)\n : [],\n isValueAccess: value.isValueAccess,\n shorthand,\n unescape,\n value: value.value,\n });\n if (!initializer) {\n return;\n }\n // Create a identifier if the current key is one and it is not an object\n if (\n identifiers.includes(value.key) &&\n !ts.isObjectLiteralExpression(initializer)\n ) {\n initializer = createIdentifier({ text: value.value as string });\n }\n assignment = createPropertyAssignment({\n initializer,\n name: value.key,\n });\n }\n\n addLeadingComments({\n comments: value.comments,\n node: assignment,\n });\n\n return assignment;\n })\n .filter(isType<ObjectAssignment>)\n : Object.entries(obj)\n .map(([key, value]) => {\n // Pass all object properties as identifiers if the whole object is an identifier\n let initializer: ts.Expression | undefined = toExpression({\n identifiers: identifiers.includes(key) ? Object.keys(value) : [],\n shorthand,\n unescape,\n value,\n });\n if (!initializer) {\n return;\n }\n // Create a identifier if the current key is one and it is not an object\n if (\n identifiers.includes(key) &&\n !ts.isObjectLiteralExpression(initializer)\n ) {\n initializer = createIdentifier({ text: value as string });\n }\n // Check key value equality before possibly modifying it\n const canShorthand = key === value;\n if (\n key.match(/^[0-9]/) &&\n key.match(/\\D+/g) &&\n !key.startsWith(\"'\") &&\n !key.endsWith(\"'\")\n ) {\n key = `'${key}'`;\n }\n if (key.match(/\\W/g) && !key.startsWith(\"'\") && !key.endsWith(\"'\")) {\n key = `'${key}'`;\n }\n const assignment =\n shorthand && canShorthand\n ? ts.factory.createShorthandPropertyAssignment(value)\n : createPropertyAssignment({ initializer, name: key });\n\n return assignment;\n })\n .filter(isType<ObjectAssignment>);\n\n const node = ts.factory.createObjectLiteralExpression(\n properties as any[],\n multiLine,\n );\n\n addLeadingComments({\n comments,\n node,\n });\n\n return node;\n};\n\n/**\n * Create enum declaration. Example `export enum T = { X, Y };`\n * @param comments - comments to add to each property.\n * @param leadingComment - leading comment to add to enum.\n * @param name - the name of the enum.\n * @param obj - the object representing the enum.\n * @returns ts.EnumDeclaration\n */\nexport const createEnumDeclaration = <\n T extends Record<string, any> | Array<ObjectValue>,\n>({\n comments: enumMemberComments = {},\n leadingComment: comments,\n name,\n obj,\n}: {\n comments?: Record<string | number, Comments>;\n leadingComment?: Comments;\n name: string;\n obj: T;\n}): ts.EnumDeclaration => {\n const members: Array<ts.EnumMember> = Array.isArray(obj)\n ? obj.map((value) => {\n const enumMember = createEnumMember({\n initializer: toExpression({\n value: value.value,\n }),\n name: value.key,\n });\n\n addLeadingComments({\n comments: value.comments,\n node: enumMember,\n });\n\n return enumMember;\n })\n : // TODO: parser - deprecate object syntax\n Object.entries(obj).map(([key, value]) => {\n const enumMember = ts.factory.createEnumMember(\n key,\n toExpression({\n unescape: true,\n value,\n }),\n );\n\n addLeadingComments({\n comments: enumMemberComments[key],\n node: enumMember,\n });\n\n return enumMember;\n });\n\n const node = ts.factory.createEnumDeclaration(\n [createModifier({ keyword: 'export' })],\n createIdentifier({ text: name }),\n members,\n );\n\n addLeadingComments({\n comments,\n node,\n });\n\n return node;\n};\n\nconst createEnumMember = ({\n initializer,\n name,\n}: {\n initializer?: ts.Expression;\n name: string | ts.PropertyName;\n}) => {\n let key = name;\n if (typeof key === 'string') {\n if (key.includes(\"'\")) {\n key = createStringLiteral({\n isSingleQuote: false,\n text: key,\n });\n } else {\n key = escapeName(key);\n }\n }\n return ts.factory.createEnumMember(key, initializer);\n};\n\n/**\n * Create namespace declaration. Example `export namespace MyNamespace { ... }`\n * @param name - the name of the namespace.\n * @param nodes - the nodes in the namespace.\n * @returns\n */\nexport const createNamespaceDeclaration = ({\n name,\n statements,\n}: {\n name: string;\n statements: Array<ts.Statement>;\n}) =>\n ts.factory.createModuleDeclaration(\n [createModifier({ keyword: 'export' })],\n createIdentifier({ text: name }),\n ts.factory.createModuleBlock(statements),\n ts.NodeFlags.Namespace,\n );\n\nexport const createIndexedAccessTypeNode = ({\n indexType,\n objectType,\n}: {\n indexType: ts.TypeNode;\n objectType: ts.TypeNode;\n}) => {\n const node = ts.factory.createIndexedAccessTypeNode(objectType, indexType);\n return node;\n};\n\nexport const createStringLiteral = ({\n isSingleQuote,\n text,\n}: {\n isSingleQuote?: boolean;\n text: string;\n}) => {\n if (isSingleQuote === undefined) {\n isSingleQuote = !text.includes(\"'\");\n }\n const node = ts.factory.createStringLiteral(text, isSingleQuote);\n return node;\n};\n\nexport const createConditionalExpression = ({\n condition,\n whenFalse,\n whenTrue,\n}: {\n condition: ts.Expression;\n whenFalse: ts.Expression;\n whenTrue: ts.Expression;\n}) => {\n const expression = ts.factory.createConditionalExpression(\n condition,\n ts.factory.createToken(ts.SyntaxKind.QuestionToken),\n whenTrue,\n ts.factory.createToken(ts.SyntaxKind.ColonToken),\n whenFalse,\n );\n return expression;\n};\n\nexport const createTypeOfExpression = ({ text }: { text: string }) => {\n const expression = ts.factory.createTypeOfExpression(\n createIdentifier({ text }),\n );\n return expression;\n};\n\n/**\n * Create a type alias declaration. Example `export type X = Y;`.\n * @param comment (optional) comments to add\n * @param name the name of the type\n * @param type the type\n * @returns ts.TypeAliasDeclaration\n */\nexport const createTypeAliasDeclaration = ({\n comment,\n exportType,\n name,\n type,\n typeParameters = [],\n}: {\n comment?: Comments;\n exportType?: boolean;\n name: string;\n type: string | ts.TypeNode;\n typeParameters?: FunctionTypeParameter[];\n}): ts.TypeAliasDeclaration => {\n const node = ts.factory.createTypeAliasDeclaration(\n exportType ? [createModifier({ keyword: 'export' })] : undefined,\n createIdentifier({ text: name }),\n toTypeParameters(typeParameters),\n createTypeNode(type),\n );\n\n addLeadingComments({\n comments: comment,\n node,\n });\n\n return node;\n};\n\nexport const createTypeReferenceNode = ({\n typeArguments,\n typeName,\n}: {\n typeArguments?: ts.TypeNode[];\n typeName: string | ts.EntityName;\n}) => {\n const node = ts.factory.createTypeReferenceNode(typeName, typeArguments);\n return node;\n};\n\nexport const createTypeParenthesizedNode = ({\n type,\n}: {\n type: ts.TypeNode;\n}) => {\n const node = ts.factory.createParenthesizedType(type);\n return node;\n};\n\nexport const createParameterDeclaration = ({\n initializer,\n modifiers,\n name,\n required = true,\n type,\n}: {\n initializer?: ts.Expression;\n modifiers?: ReadonlyArray<ts.ModifierLike>;\n name: string | ts.BindingName;\n required?: boolean;\n type?: ts.TypeNode;\n}) => {\n const node = ts.factory.createParameterDeclaration(\n modifiers,\n undefined,\n name,\n required ? undefined : ts.factory.createToken(ts.SyntaxKind.QuestionToken),\n type,\n initializer,\n );\n return node;\n};\n\nexport const createNewExpression = ({\n argumentsArray,\n expression,\n typeArguments,\n}: {\n argumentsArray?: Array<ts.Expression>;\n expression: ts.Expression;\n typeArguments?: Array<ts.TypeNode>;\n}) => {\n const node = ts.factory.createNewExpression(\n expression,\n typeArguments,\n argumentsArray,\n );\n return node;\n};\n\nexport const createForOfStatement = ({\n awaitModifier,\n expression,\n initializer,\n statement,\n}: {\n // TODO: parser - simplify this to be await?: boolean\n awaitModifier?: ts.AwaitKeyword;\n expression: ts.Expression;\n initializer: ts.ForInitializer;\n statement: ts.Statement;\n}) => {\n const node = ts.factory.createForOfStatement(\n awaitModifier,\n initializer,\n expression,\n statement,\n );\n return node;\n};\n\nexport const createAssignment = ({\n left,\n right,\n}: {\n left: ts.Expression;\n right: ts.Expression;\n}) => ts.factory.createAssignment(left, right);\n\nexport const createBlock = ({\n multiLine = true,\n statements,\n}: {\n multiLine?: boolean;\n statements: Array<ts.Statement>;\n}) => ts.factory.createBlock(statements, multiLine);\n\nexport const createPropertyAssignment = ({\n initializer,\n name,\n}: {\n initializer: ts.Expression;\n name: string | ts.PropertyName;\n}) => ts.factory.createPropertyAssignment(name, initializer);\n\nexport const createRegularExpressionLiteral = ({\n flags = [],\n text,\n}: {\n flags?: ReadonlyArray<'g' | 'i' | 'm' | 's' | 'u' | 'y'>;\n text: string;\n}) => {\n const textWithSlashes =\n text.startsWith('/') && text.endsWith('/') ? text : `/${text}/`;\n return ts.factory.createRegularExpressionLiteral(\n `${textWithSlashes}${flags.join('')}`,\n );\n};\n\nexport const createAsExpression = ({\n expression,\n type,\n}: {\n expression: ts.Expression;\n type: ts.TypeNode;\n}) => ts.factory.createAsExpression(expression, type);\n\nexport const createTemplateLiteralType = ({\n value,\n}: {\n value: ReadonlyArray<string | ts.TypeNode>;\n}) => {\n const spans: Array<ts.TemplateLiteralTypeSpan> = [];\n let spanText = '';\n\n for (const item of value.slice(0).reverse()) {\n if (typeof item === 'string') {\n spanText = `${item}${spanText}`;\n } else {\n const literal = spans.length\n ? ts.factory.createTemplateMiddle(spanText)\n : ts.factory.createTemplateTail(spanText);\n const span = ts.factory.createTemplateLiteralTypeSpan(item, literal);\n spans.push(span);\n spanText = '';\n }\n }\n\n const templateLiteralType = ts.factory.createTemplateLiteralType(\n ts.factory.createTemplateHead(spanText),\n spans.reverse(),\n );\n return templateLiteralType;\n};\n","import ts from 'typescript';\n\nimport { createAsExpression, createTypeReferenceNode } from './types';\nimport {\n addLeadingComments,\n type Comments,\n createIdentifier,\n createModifier,\n type ImportExportItemObject,\n ots,\n} from './utils';\n\n/**\n * Create export all declaration. Example: `export * from './y'`.\n * @param module - module containing exports\n * @returns ts.ExportDeclaration\n */\nexport const createExportAllDeclaration = ({\n module,\n}: {\n module: string;\n}): ts.ExportDeclaration => {\n const statement = ts.factory.createExportDeclaration(\n undefined,\n false,\n undefined,\n ots.string(module),\n );\n return statement;\n};\n\nexport type ImportExportItem = ImportExportItemObject | string;\n\nexport const createCallExpression = ({\n functionName,\n parameters = [],\n types,\n}: {\n functionName:\n | string\n | ts.PropertyAccessExpression\n | ts.PropertyAccessChain\n | ts.ElementAccessExpression\n | ts.Expression;\n parameters?: Array<string | ts.Expression | undefined>;\n types?: ReadonlyArray<ts.TypeNode>;\n}) => {\n const expression =\n typeof functionName === 'string'\n ? createIdentifier({ text: functionName })\n : functionName;\n const argumentsArray = parameters\n .filter((parameter) => parameter !== undefined)\n .map((parameter) =>\n typeof parameter === 'string'\n ? createIdentifier({ text: parameter })\n : parameter,\n );\n const callExpression = ts.factory.createCallExpression(\n expression,\n types,\n argumentsArray,\n );\n return callExpression;\n};\n\n/**\n * Create a named export declaration. Example: `export { X } from './y'`.\n * @param exports - named imports to export\n * @param module - module containing exports\n * @returns ts.ExportDeclaration\n */\nexport const createNamedExportDeclarations = ({\n exports,\n module,\n}: {\n exports: Array<ImportExportItem> | ImportExportItem;\n module: string;\n}): ts.ExportDeclaration => {\n const exportedTypes = Array.isArray(exports) ? exports : [exports];\n const hasNonTypeExport = exportedTypes.some(\n (item) => typeof item !== 'object' || !item.asType,\n );\n const elements = exportedTypes.map((name) => {\n const item = typeof name === 'string' ? { name } : name;\n return ots.export({\n alias: item.alias,\n asType: hasNonTypeExport && item.asType,\n name: item.name,\n });\n });\n const exportClause = ts.factory.createNamedExports(elements);\n const moduleSpecifier = ots.string(module);\n const statement = ts.factory.createExportDeclaration(\n undefined,\n !hasNonTypeExport,\n exportClause,\n moduleSpecifier,\n );\n return statement;\n};\n\n/**\n * Create a const variable. Optionally, it can use const assertion or export\n * statement. Example: `export x = {} as const`.\n * @param assertion use const assertion?\n * @param exportConst export created variable?\n * @param expression expression for the variable.\n * @param name name of the variable.\n * @returns ts.VariableStatement\n */\nexport const createConstVariable = ({\n assertion,\n comment,\n destructure,\n exportConst,\n expression,\n name,\n typeName,\n}: {\n assertion?: 'const' | ts.TypeNode;\n comment?: Comments;\n destructure?: boolean;\n exportConst?: boolean;\n expression: ts.Expression;\n name: string;\n // TODO: support a more intuitive definition of generics for example\n typeName?: string | ts.IndexedAccessTypeNode | ts.TypeNode;\n}): ts.VariableStatement => {\n const initializer = assertion\n ? createAsExpression({\n expression,\n type:\n typeof assertion === 'string'\n ? createTypeReferenceNode({ typeName: assertion })\n : assertion,\n })\n : expression;\n const nameIdentifier = createIdentifier({ text: name });\n const declaration = ts.factory.createVariableDeclaration(\n destructure\n ? ts.factory.createObjectBindingPattern([\n ts.factory.createBindingElement(\n undefined,\n undefined,\n nameIdentifier,\n undefined,\n ),\n ])\n : nameIdentifier,\n undefined,\n typeName\n ? typeof typeName === 'string'\n ? createTypeReferenceNode({ typeName })\n : typeName\n : undefined,\n initializer,\n );\n const statement = ts.factory.createVariableStatement(\n exportConst ? [createModifier({ keyword: 'export' })] : undefined,\n ts.factory.createVariableDeclarationList([declaration], ts.NodeFlags.Const),\n );\n\n addLeadingComments({\n comments: comment,\n node: statement,\n });\n\n return statement;\n};\n\n/**\n * Create a named import declaration. Example: `import { X } from './y'`.\n * @param imports - named exports to import\n * @param module - module containing imports\n * @returns ts.ImportDeclaration\n */\nexport const createNamedImportDeclarations = ({\n imports,\n module,\n}: {\n imports: Array<ImportExportItem> | ImportExportItem;\n module: string;\n}): ts.ImportDeclaration => {\n const importedTypes = Array.isArray(imports) ? imports : [imports];\n const hasNonTypeImport = importedTypes.some(\n (item) => typeof item !== 'object' || !item.asType,\n );\n let namespaceImport: ImportExportItemObject | undefined;\n const elements: Array<ts.ImportSpecifier> = [];\n importedTypes.forEach((name) => {\n const item = typeof name === 'string' ? { name } : name;\n if (item.name === '*' && item.alias) {\n namespaceImport = item;\n } else {\n elements.push(\n ots.import({\n alias: item.alias,\n asType: hasNonTypeImport && item.asType,\n name: item.name,\n }),\n );\n }\n });\n const namedBindings = namespaceImport\n ? ts.factory.createNamespaceImport(\n createIdentifier({ text: namespaceImport.alias! }),\n )\n : ts.factory.createNamedImports(elements);\n const importClause = ts.factory.createImportClause(\n !hasNonTypeImport,\n undefined,\n namedBindings,\n );\n const moduleSpecifier = ots.string(module);\n const statement = ts.factory.createImportDeclaration(\n undefined,\n importClause,\n moduleSpecifier,\n );\n return statement;\n};\n","import ts from 'typescript';\n\nimport { createCallExpression } from './module';\nimport {\n type AccessLevel,\n createBlock,\n createTypeNode,\n type FunctionParameter,\n type FunctionTypeParameter,\n toExpression,\n toParameterDeclarations,\n toTypeParameters,\n} from './types';\nimport type { Comments } from './utils';\nimport {\n addLeadingComments,\n createIdentifier,\n createModifier,\n isType,\n} from './utils';\n\n/**\n * Create a class constructor declaration.\n * @param accessLevel - the access level of the constructor.\n * @param comment - comment to add to function.\n * @param multiLine - if it should be multi line.\n * @param parameters - parameters for the constructor.\n * @param statements - statements to put in the constructor body.\n * @returns ts.ConstructorDeclaration\n */\nexport const createConstructorDeclaration = ({\n accessLevel,\n comment,\n multiLine = true,\n parameters = [],\n statements = [],\n}: {\n accessLevel?: AccessLevel;\n comment?: Comments;\n multiLine?: boolean;\n parameters?: FunctionParameter[];\n statements?: ts.Statement[];\n}) => {\n const modifiers = accessLevel\n ? [createModifier({ keyword: accessLevel })]\n : undefined;\n const node = ts.factory.createConstructorDeclaration(\n modifiers,\n toParameterDeclarations(parameters),\n createBlock({ multiLine, statements }),\n );\n\n addLeadingComments({\n comments: comment,\n node,\n });\n\n return node;\n};\n\n/**\n * Create a class method declaration.\n * @param accessLevel - the access level of the method.\n * @param comment - comment to add to function.\n * @param isStatic - if the function is static.\n * @param multiLine - if it should be multi line.\n * @param name - name of the method.\n * @param parameters - parameters for the method.\n * @param returnType - the return type of the method.\n * @param statements - statements to put in the constructor body.\n * @returns ts.MethodDeclaration\n */\nexport const createMethodDeclaration = ({\n accessLevel,\n comment,\n isStatic = false,\n multiLine = true,\n name,\n parameters = [],\n returnType,\n statements = [],\n types = [],\n}: {\n accessLevel?: AccessLevel;\n comment?: Comments;\n isStatic?: boolean;\n multiLine?: boolean;\n name: string;\n parameters?: ReadonlyArray<FunctionParameter>;\n returnType?: string | ts.TypeNode;\n statements?: ts.Statement[];\n types?: FunctionTypeParameter[];\n}) => {\n const modifiers = accessLevel\n ? [createModifier({ keyword: accessLevel })]\n : [];\n\n if (isStatic) {\n modifiers.push(createModifier({ keyword: 'static' }));\n }\n\n const node = ts.factory.createMethodDeclaration(\n modifiers,\n undefined,\n createIdentifier({ text: name }),\n undefined,\n types ? toTypeParameters(types) : undefined,\n toParameterDeclarations(parameters),\n returnType ? createTypeNode(returnType) : undefined,\n createBlock({ multiLine, statements }),\n );\n\n addLeadingComments({\n comments: comment,\n node,\n });\n\n return node;\n};\n\ntype ClassDecorator = {\n args: any[];\n name: string;\n};\n\n/**\n * Create a class declaration.\n */\nexport const createClassDeclaration = ({\n decorator,\n exportClass,\n extendedClasses,\n name,\n nodes,\n}: {\n /**\n * Class decorator.\n */\n decorator?: ClassDecorator;\n /**\n * @default false\n */\n exportClass?: boolean;\n /**\n * List of extended classes.\n */\n extendedClasses?: ReadonlyArray<string>;\n /**\n * Class name.\n */\n name: string;\n /**\n * Class elements.\n */\n nodes: ReadonlyArray<ts.ClassElement>;\n}): ts.ClassDeclaration => {\n const modifiers: Array<ts.ModifierLike> = [];\n\n if (exportClass) {\n modifiers.push(createModifier({ keyword: 'export' }));\n }\n\n if (decorator) {\n modifiers.unshift(\n ts.factory.createDecorator(\n createCallExpression({\n functionName: decorator.name,\n parameters: decorator.args\n .map((arg) => toExpression({ value: arg }))\n .filter(isType<ts.Expression>),\n }),\n ),\n );\n }\n\n const heritageClauses: Array<ts.HeritageClause> = [];\n\n if (extendedClasses) {\n for (const extendedClass of extendedClasses) {\n heritageClauses.push(\n ts.factory.createHeritageClause(ts.SyntaxKind.ExtendsKeyword, [\n ts.factory.createExpressionWithTypeArguments(\n createIdentifier({ text: extendedClass }),\n undefined,\n ),\n ]),\n );\n }\n }\n\n return ts.factory.createClassDeclaration(\n modifiers,\n createIdentifier({ text: name }),\n undefined,\n heritageClauses,\n nodes,\n );\n};\n","import ts from 'typescript';\n\nexport const expressionToStatement = ({\n expression,\n}: {\n expression: ts.Expression;\n}) => {\n const statement = ts.factory.createExpressionStatement(expression);\n return statement;\n};\n","import ts from 'typescript';\n\nimport { createCallExpression } from './module';\nimport { createTypeReferenceNode } from './types';\nimport { createIdentifier, isType } from './utils';\n\nexport const createReturnStatement = ({\n expression,\n}: {\n expression?: ts.Expression;\n}) => ts.factory.createReturnStatement(expression);\n\n/**\n * Create a return function call statement.\n *\n * @example `return fn<string>(params)`\n *\n * @returns ts.ReturnStatement\n */\nexport const createReturnFunctionCall = ({\n args = [],\n name,\n types = [],\n}: {\n /**\n * Arguments to pass to the function.\n */\n args: any[];\n /**\n * Name of the function to call or expression.\n */\n name: string | ts.Expression;\n /**\n * List of function types.\n */\n types?: ReadonlyArray<string | ts.StringLiteral>;\n}) => {\n const typeArguments = types.map((type) =>\n // this works with string literals too despite throwing a type error.\n // should be probably fixed at some point...\n // @ts-expect-error\n createTypeReferenceNode({ typeName: type }),\n );\n const argumentsArray = args\n .map((arg) =>\n ts.isExpression(arg) ? arg : createIdentifier({ text: arg }),\n )\n .filter(isType<ts.Identifier | ts.Expression>);\n const expression = createCallExpression({\n functionName: name,\n parameters: argumentsArray,\n types: typeArguments,\n });\n const statement = createReturnStatement({ expression });\n return statement;\n};\n\nexport const createReturnVariable = ({\n expression,\n}: {\n expression: string | ts.Expression;\n}) => {\n const statement = createReturnStatement({\n expression:\n typeof expression === 'string'\n ? createIdentifier({ text: expression })\n : expression,\n });\n return statement;\n};\n","import ts from 'typescript';\n\nimport { validTypescriptIdentifierRegExp } from '../utils/regexp';\nimport { expressionToStatement } from './convert';\nimport { createCallExpression } from './module';\nimport {\n createArrowFunction,\n createBlock,\n createNewExpression,\n createPropertyAccessChain,\n createPropertyAccessExpression,\n} from './types';\nimport { createIdentifier } from './utils';\n\nexport const createSafeAccessExpression = (path: string[]) =>\n path.slice(1).reduce<ts.Expression>(\n (expression, element) => {\n validTypescriptIdentifierRegExp.lastIndex = 0;\n if (validTypescriptIdentifierRegExp.test(element)) {\n return createPropertyAccessChain({\n expression,\n name: element,\n });\n }\n\n return ts.factory.createElementAccessChain(\n expression,\n ts.factory.createToken(ts.SyntaxKind.QuestionDotToken),\n createIdentifier({ text: element }),\n );\n },\n createIdentifier({ text: path[0]! }),\n );\n\nexport const createAccessExpression = (path: string[]) =>\n path.slice(1).reduce<ts.Expression>(\n (expression, element) =>\n createPropertyAccessExpression({\n expression,\n name: element,\n }),\n createIdentifier({ text: path[0]! }),\n );\n\n/**\n * Handles an array of access expressions instead of nesting them (default TypeScript syntax)\n */\nexport const createPropertyAccessExpressions = ({\n expressions,\n}: {\n expressions: Array<string | ts.Expression | ts.MemberName>;\n}): ts.PropertyAccessExpression => {\n const expression = expressions.reduce((expression, name) => {\n const node = createPropertyAccessExpression({\n expression,\n // @ts-expect-error\n name,\n });\n return node;\n });\n return expression as ts.PropertyAccessExpression;\n};\n\nexport const createBinaryExpression = ({\n left,\n operator = '=',\n right,\n}: {\n left: ts.Expression;\n operator?: '=' | '===' | 'in' | '??';\n right: ts.Expression | string;\n}) => {\n const expression = ts.factory.createBinaryExpression(\n left,\n // TODO: add support for other tokens\n operator === '='\n ? ts.SyntaxKind.EqualsToken\n : operator === '==='\n ? ts.SyntaxKind.EqualsEqualsEqualsToken\n : operator === '??'\n ? ts.SyntaxKind.QuestionQuestionToken\n : ts.SyntaxKind.InKeyword,\n typeof right === 'string' ? createIdentifier({ text: right }) : right,\n );\n return expression;\n};\n\nexport const createIfStatement = ({\n elseStatement,\n expression,\n thenStatement,\n}: {\n elseStatement?: ts.Statement;\n expression: ts.Expression;\n thenStatement: ts.Statement;\n}) => ts.factory.createIfStatement(expression, thenStatement, elseStatement);\n\nexport const createDateTransformMutation = ({\n path,\n}: {\n path: string[];\n}): ts.Statement => {\n const safeAccessExpression = createSafeAccessExpression(path);\n const accessExpression = createAccessExpression(path);\n\n const thenStatement = createBlock({\n statements: [\n expressionToStatement({\n expression: createBinaryExpression({\n left: accessExpression,\n right: createNewExpression({\n argumentsArray: [accessExpression],\n expression: createIdentifier({ text: 'Date' }),\n }),\n }),\n }),\n ],\n });\n\n const statement = createIfStatement({\n expression: safeAccessExpression,\n thenStatement,\n });\n\n return statement;\n};\n\nexport const createFunctionTransformMutation = ({\n path,\n transformerName,\n}: {\n path: string[];\n transformerName: string;\n}) => {\n const safeAccessExpression = createSafeAccessExpression(path);\n const accessExpression = createAccessExpression(path);\n\n const thenStatement = createBlock({\n statements: [\n expressionToStatement({\n expression: createCallExpression({\n functionName: transformerName,\n parameters: [accessExpression],\n }),\n }),\n ],\n });\n\n const statement = [\n createIfStatement({\n expression: safeAccessExpression,\n thenStatement,\n }),\n ];\n\n return statement;\n};\n\nexport const createArrayTransformMutation = ({\n path,\n transformerName,\n}: {\n path: string[];\n transformerName: string;\n}): ts.Statement => {\n const safeAccessExpression = createSafeAccessExpression(path);\n const accessExpression = createAccessExpression(path);\n\n const statement = createIfStatement({\n expression: createCallExpression({\n functionName: createPropertyAccessExpression({\n expression: 'Array',\n name: 'isArray',\n }),\n parameters: [safeAccessExpression],\n }),\n thenStatement: createBlock({\n statements: [\n expressionToStatement({\n expression: ts.factory.createCallChain(\n createPropertyAccessExpression({\n expression: accessExpression,\n name: 'forEach',\n }),\n undefined,\n undefined,\n [createIdentifier({ text: transformerName })],\n ),\n }),\n ],\n }),\n });\n\n return statement;\n};\n\nexport const createDateTransformerExpression = ({\n parameterName,\n}: {\n parameterName: string;\n}) => {\n const expression = createIdentifier({ text: 'Date' });\n const newExpression = createNewExpression({\n argumentsArray: [createIdentifier({ text: parameterName })],\n expression,\n });\n return newExpression;\n};\n\nexport const createArrayMapTransform = ({\n path,\n transformExpression,\n}: {\n path: string[];\n transformExpression: ts.Expression;\n}) => {\n const safeAccessExpression = createSafeAccessExpression(path);\n const accessExpression = createAccessExpression(path);\n\n const statement = createIfStatement({\n expression: createCallExpression({\n functionName: createPropertyAccessExpression({\n expression: 'Array',\n name: 'isArray',\n }),\n parameters: [safeAccessExpression],\n }),\n thenStatement: createBlock({\n statements: [\n expressionToStatement({\n expression: createBinaryExpression({\n left: accessExpression,\n right: ts.factory.createCallChain(\n createPropertyAccessExpression({\n expression: accessExpression,\n name: 'map',\n }),\n undefined,\n undefined,\n [\n createArrowFunction({\n parameters: [\n {\n name: 'item',\n },\n ],\n statements: transformExpression,\n }),\n ],\n ),\n }),\n }),\n ],\n }),\n });\n\n return statement;\n};\n","import ts from 'typescript';\n\nimport { validTypescriptIdentifierRegExp } from '../utils/regexp';\nimport {\n createKeywordTypeNode,\n createMappedTypeNode,\n createParameterDeclaration,\n createStringLiteral,\n createTypeNode,\n createTypeParameterDeclaration,\n createTypeReferenceNode,\n} from './types';\nimport {\n addLeadingComments,\n type Comments,\n createIdentifier,\n createModifier,\n tsNodeToString,\n} from './utils';\n\nconst nullNode = createTypeReferenceNode({ typeName: 'null' });\n\n// Property of a interface type node.\nexport type Property = {\n comment?: Comments;\n isReadOnly?: boolean;\n isRequired?: boolean;\n name: string | ts.PropertyName;\n type: any | ts.TypeNode;\n};\n\n/**\n * Returns a union of provided node with null if marked as nullable,\n * otherwise returns the provided node unmodified.\n */\nconst maybeNullable = ({\n isNullable,\n node,\n}: {\n isNullable?: boolean;\n node: ts.TypeNode;\n}) => {\n if (!isNullable) {\n return node;\n }\n return ts.factory.createUnionTypeNode([node, nullNode]);\n};\n\n/**\n * Create a interface type node. Example `{ readonly x: string, y?: number }`\n * @param properties - the properties of the interface.\n * @param isNullable - if the whole interface can be nullable\n * @returns ts.TypeLiteralNode | ts.TypeUnionNode\n */\nexport const createTypeInterfaceNode = ({\n indexKey,\n indexProperty,\n isNullable,\n properties,\n useLegacyResolution,\n}: {\n /**\n * Adds an index key type.\n *\n * @example\n * ```ts\n * type IndexKey = {\n * [key in Foo]: string\n * }\n * ```\n */\n indexKey?: string;\n /**\n * Adds an index signature if defined.\n *\n * @example\n * ```ts\n * type IndexProperty = {\n * [key: string]: string\n * }\n * ```\n */\n indexProperty?: Property;\n isNullable?: boolean;\n properties: Property[];\n useLegacyResolution: boolean;\n}) => {\n const propertyTypes: Array<ts.TypeNode> = [];\n\n const members: Array<ts.TypeElement | ts.MappedTypeNode> = properties.map(\n (property) => {\n const modifiers: readonly ts.Modifier[] | undefined = property.isReadOnly\n ? [createModifier({ keyword: 'readonly' })]\n : undefined;\n\n const questionToken: ts.QuestionToken | undefined =\n property.isRequired !== false\n ? undefined\n : ts.factory.createToken(ts.SyntaxKind.QuestionToken);\n\n const type: ts.TypeNode | undefined = createTypeNode(property.type);\n propertyTypes.push(type);\n\n const signature = ts.factory.createPropertySignature(\n modifiers,\n useLegacyResolution ||\n (typeof property.name === 'string' &&\n property.name.match(validTypescriptIdentifierRegExp)) ||\n (typeof property.name !== 'string' &&\n ts.isPropertyName(property.name))\n ? property.name\n : createStringLiteral({ text: property.name }),\n questionToken,\n type,\n );\n\n addLeadingComments({\n comments: property.comment,\n node: signature,\n });\n\n return signature;\n },\n );\n\n let isIndexMapped = false;\n\n if (indexProperty) {\n if (!properties.length && indexKey) {\n const indexSignature = createMappedTypeNode({\n questionToken: ts.factory.createToken(ts.SyntaxKind.QuestionToken),\n type:\n indexProperty.type ?? createKeywordTypeNode({ keyword: 'string' }),\n typeParameter: createTypeParameterDeclaration({\n constraint: createTypeReferenceNode({ typeName: indexKey }),\n name: createIdentifier({ text: String(indexProperty.name) }),\n }),\n });\n members.push(indexSignature);\n isIndexMapped = true;\n } else {\n const modifiers: ReadonlyArray<ts.Modifier> | undefined =\n indexProperty.isReadOnly\n ? [createModifier({ keyword: 'readonly' })]\n : undefined;\n const indexSignature = ts.factory.createIndexSignature(\n modifiers,\n [\n createParameterDeclaration({\n name: createIdentifier({ text: String(indexProperty.name) }),\n type: createKeywordTypeNode({ keyword: 'string' }),\n }),\n ],\n createTypeNode(indexProperty.type),\n );\n members.push(indexSignature);\n }\n }\n\n const node = isIndexMapped\n ? members[0]!\n : // @ts-expect-error\n ts.factory.createTypeLiteralNode(members);\n return maybeNullable({\n isNullable,\n // @ts-expect-error\n node,\n });\n};\n\n/**\n * Create type union node. Example `string | number | boolean`\n * @param types - the types in the union\n * @param isNullable - if the whole type can be null\n * @returns ts.UnionTypeNode\n */\nexport const createTypeUnionNode = ({\n isNullable,\n types,\n}: {\n isNullable?: boolean;\n types: (any | ts.TypeNode)[];\n}) => {\n const nodes = types.map((type) => createTypeNode(type));\n const node = ts.factory.createUnionTypeNode(nodes);\n return maybeNullable({ isNullable, node });\n};\n\n/**\n * Create type intersection node. Example `string & number & boolean`\n * @param types - the types in the union\n * @param isNullable - if the whole type can be null\n * @returns ts.IntersectionTypeNode | ts.UnionTypeNode\n */\nexport const createTypeIntersectionNode = ({\n isNullable,\n types,\n}: {\n isNullable?: boolean;\n types: (any | ts.TypeNode)[];\n}) => {\n const nodes = types.map((type) => createTypeNode(type));\n const node = ts.factory.createIntersectionTypeNode(nodes);\n return maybeNullable({ isNullable, node });\n};\n\n/**\n * Create type tuple node. Example `string, number, boolean`\n * @param isNullable if the whole type can be null\n * @param types the types in the union\n * @returns ts.UnionTypeNode\n */\nexport const createTypeTupleNode = ({\n isNullable = false,\n types,\n}: {\n isNullable?: boolean;\n types: Array<any | ts.TypeNode>;\n}) => {\n const nodes = types.map((type) => createTypeNode(type));\n const node = ts.factory.createTupleTypeNode(nodes);\n return maybeNullable({ isNullable, node });\n};\n\n/**\n * Create type record node. Example `{ [key: string]: string }`\n * @param keys - key types.\n * @param values - value types.\n * @param isNullable - if the whole type can be null\n * @returns ts.TypeReferenceNode | ts.UnionTypeNode\n */\nexport const createTypeRecordNode = (\n keys: (any | ts.TypeNode)[],\n values: (any | ts.TypeNode)[],\n isNullable: boolean = false,\n useLegacyResolution: boolean = true,\n) => {\n const keyNode = createTypeUnionNode({\n types: keys,\n });\n const valueNode = createTypeUnionNode({\n types: values,\n });\n // NOTE: We use the syntax `{ [key: string]: string }` because using a Record causes\n // invalid types with circular dependencies. This is functionally the same.\n // Ref: https://github.com/hey-api/openapi-ts/issues/370\n const node = createTypeInterfaceNode({\n properties: [\n {\n name: `[key: ${tsNodeToString({ node: keyNode, unescape: true })}]`,\n type: valueNode,\n },\n ],\n useLegacyResolution,\n });\n return maybeNullable({ isNullable, node });\n};\n\n/**\n * Create type array node. Example `Array<string | number>`\n * @param types - the types\n * @param isNullable - if the whole type can be null\n * @returns ts.TypeReferenceNode | ts.UnionTypeNode\n */\nexport const createTypeArrayNode = (\n types: (any | ts.TypeNode)[] | ts.TypeNode | string,\n isNullable: boolean = false,\n) => {\n const node = createTypeReferenceNode({\n typeArguments: [\n // @ts-expect-error\n Array.isArray(types) ? createTypeUnionNode({ types }) : types,\n ],\n typeName: 'Array',\n });\n return maybeNullable({ isNullable, node });\n};\n","import * as classes from './classes';\nimport * as convert from './convert';\nimport * as module from './module';\nimport * as _return from './return';\nimport * as transform from './transform';\nimport * as typedef from './typedef';\nimport * as types from './types';\nimport * as utils from './utils';\n\nexport type { Property } from './typedef';\nexport type { FunctionParameter } from './types';\nexport type { Comments } from './utils';\n\nexport const compiler = {\n anonymousFunction: types.createAnonymousFunction,\n arrayLiteralExpression: types.createArrayLiteralExpression,\n arrowFunction: types.createArrowFunction,\n asExpression: types.createAsExpression,\n assignment: types.createAssignment,\n awaitExpression: types.createAwaitExpression,\n binaryExpression: transform.createBinaryExpression,\n block: types.createBlock,\n callExpression: module.createCallExpression,\n classDeclaration: classes.createClassDeclaration,\n conditionalExpression: types.createConditionalExpression,\n constVariable: module.createConstVariable,\n constructorDeclaration: classes.createConstructorDeclaration,\n enumDeclaration: types.createEnumDeclaration,\n exportAllDeclaration: module.createExportAllDeclaration,\n exportNamedDeclaration: module.createNamedExportDeclarations,\n expressionToStatement: convert.expressionToStatement,\n forOfStatement: types.createForOfStatement,\n functionTypeNode: types.createFunctionTypeNode,\n identifier: utils.createIdentifier,\n ifStatement: transform.createIfStatement,\n indexedAccessTypeNode: types.createIndexedAccessTypeNode,\n isTsNode: utils.isTsNode,\n keywordTypeNode: types.createKeywordTypeNode,\n literalTypeNode: types.createLiteralTypeNode,\n mappedTypeNode: types.createMappedTypeNode,\n methodDeclaration: classes.createMethodDeclaration,\n namedImportDeclarations: module.createNamedImportDeclarations,\n namespaceDeclaration: types.createNamespaceDeclaration,\n newExpression: types.createNewExpression,\n nodeToString: utils.tsNodeToString,\n null: types.createNull,\n objectExpression: types.createObjectType,\n ots: utils.ots,\n parameterDeclaration: types.createParameterDeclaration,\n propertyAccessExpression: types.createPropertyAccessExpression,\n propertyAccessExpressions: transform.createPropertyAccessExpressions,\n propertyAssignment: types.createPropertyAssignment,\n propertyDeclaration: utils.createPropertyDeclaration,\n regularExpressionLiteral: types.createRegularExpressionLiteral,\n returnFunctionCall: _return.createReturnFunctionCall,\n returnStatement: _return.createReturnStatement,\n returnVariable: _return.createReturnVariable,\n safeAccessExpression: transform.createSafeAccessExpression,\n stringLiteral: types.createStringLiteral,\n stringToTsNodes: utils.stringToTsNodes,\n templateLiteralType: types.createTemplateLiteralType,\n this: utils.createThis,\n transformArrayMap: transform.createArrayMapTransform,\n transformArrayMutation: transform.createArrayTransformMutation,\n transformDateMutation: transform.createDateTransformMutation,\n transformFunctionMutation: transform.createFunctionTransformMutation,\n transformNewDate: transform.createDateTransformerExpression,\n typeAliasDeclaration: types.createTypeAliasDeclaration,\n typeArrayNode: typedef.createTypeArrayNode,\n typeInterfaceNode: typedef.createTypeInterfaceNode,\n typeIntersectionNode: typedef.createTypeIntersectionNode,\n typeNode: types.createTypeNode,\n typeOfExpression: types.createTypeOfExpression,\n typeOperatorNode: types.createTypeOperatorNode,\n typeParameterDeclaration: types.createTypeParameterDeclaration,\n typeParenthesizedNode: types.createTypeParenthesizedNode,\n typeRecordNode: typedef.createTypeRecordNode,\n typeReferenceNode: types.createTypeReferenceNode,\n typeTupleNode: typedef.createTypeTupleNode,\n typeUnionNode: typedef.createTypeUnionNode,\n valueToExpression: types.toExpression,\n};\n","import type { PathLike } from 'node:fs';\nimport fs from 'node:fs';\n\nexport const ensureDirSync = (path: PathLike) => {\n if (!fs.existsSync(path)) {\n fs.mkdirSync(path, { recursive: true });\n }\n};\n\nexport const removeDirSync = (path: PathLike) => {\n if (fs.existsSync(path)) {\n fs.rmSync(path, { force: true, recursive: true });\n }\n};\n\n/**\n * Construct a relative import path to modules. This is used for example\n * in plugins to import types or SDK module.\n */\nexport const relativeModulePath = ({\n moduleOutput,\n sourceOutput,\n}: {\n /**\n * Output path to the imported module.\n * @example\n * 'types'\n */\n moduleOutput: string;\n /**\n * Output path to the source module.\n * @example\n * '@tanstack/react-query'\n */\n sourceOutput: string;\n}): string => {\n const outputParts = sourceOutput.split('/');\n const relativePath =\n Array.from({ length: outputParts.length }).fill('').join('../') || './';\n return `${relativePath}${moduleOutput}`;\n};\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport ts from 'typescript';\n\nimport type { ImportExportItemObject } from '../compiler/utils';\nimport type { Client } from '../plugins/@hey-api/client-core/types';\nimport { getClientPlugin } from '../plugins/@hey-api/client-core/utils';\nimport type { DefinePlugin } from '../plugins/types';\nimport type { Config } from '../types/config';\nimport { ensureDirSync, relativeModulePath } from './utils';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nconst getClientSrcPath = (name: string) => {\n const pluginFilePathComponents = name.split(path.sep);\n const clientSrcPath = pluginFilePathComponents\n .slice(0, pluginFilePathComponents.length - 1)\n .join(path.sep);\n return clientSrcPath;\n};\n\n/**\n * Returns path to the client module. When using client packages, this will be\n * simply the name of the package. When bundling a client, this will be a\n * relative path to the bundled client folder.\n */\nexport const clientModulePath = ({\n config,\n sourceOutput,\n}: {\n config: Config;\n sourceOutput: string;\n}): string => {\n const client = getClientPlugin(config);\n\n if ('bundle' in client.config && client.config.bundle) {\n return relativeModulePath({\n moduleOutput: 'client',\n sourceOutput,\n });\n }\n\n if (path.isAbsolute(client.name)) {\n const clientSrcPath = getClientSrcPath(client.name);\n const outputPath = path.resolve(config.output.path);\n return path.relative(outputPath, clientSrcPath).replace(/\\\\/g, '/');\n }\n\n return client.name;\n};\n\nexport const clientApi = {\n Options: {\n asType: true,\n name: 'Options',\n },\n OptionsLegacyParser: {\n asType: true,\n name: 'OptionsLegacyParser',\n },\n} satisfies Record<string, ImportExportItemObject>;\n\nconst replaceRelativeImports = (filePath: string) => {\n let content = fs.readFileSync(filePath, 'utf8');\n\n // Replace relative imports to append .js extension for ESM compatibility\n // This handles patterns like: from './foo' -> from './foo.js'\n // and: from '../bar' -> from '../bar.js'\n content = content.replace(\n /from\\s+['\"](\\.\\.?\\/[^'\"]*?)['\"]/g,\n (match, importPath) => {\n // Don't add .js if it already has an extension\n const lastSlashIndex = importPath.lastIndexOf('/');\n const fileName =\n lastSlashIndex >= 0 ? importPath.slice(lastSlashIndex + 1) : importPath;\n if (fileName.includes('.')) {\n return match;\n }\n return `from '${importPath}.js'`;\n },\n );\n\n fs.writeFileSync(filePath, content, 'utf8');\n};\n\n/**\n * Creates a `client` folder containing the same modules as the client package.\n */\nexport const generateClientBundle = ({\n outputPath,\n plugin,\n tsConfig,\n}: {\n outputPath: string;\n plugin: DefinePlugin<Client.Config & { name: string }>['Config'];\n tsConfig: ts.ParsedCommandLine | null;\n}): void => {\n // copy Hey API clients to output\n const isHeyApiClientPlugin = plugin.name.startsWith('@hey-api/client-');\n if (isHeyApiClientPlugin) {\n const shouldAppendJs =\n tsConfig?.options.moduleResolution === ts.ModuleResolutionKind.NodeNext;\n\n // copy client core\n const coreOutputPath = path.resolve(outputPath, 'core');\n ensureDirSync(coreOutputPath);\n const coreDistPath = path.resolve(__dirname, 'clients', 'core');\n fs.cpSync(coreDistPath, coreOutputPath, { recursive: true });\n if (shouldAppendJs) {\n const coreFiles = fs.readdirSync(coreOutputPath);\n for (const file of coreFiles) {\n replaceRelativeImports(path.resolve(coreOutputPath, file));\n }\n }\n // copy client bundle\n const clientOutputPath = path.resolve(outputPath, 'client');\n ensureDirSync(clientOutputPath);\n const clientDistFolderName = plugin.name.slice('@hey-api/client-'.length);\n const clientDistPath = path.resolve(\n __dirname,\n 'clients',\n clientDistFolderName,\n );\n fs.cpSync(clientDistPath, clientOutputPath, { recursive: true });\n if (shouldAppendJs) {\n const clientFiles = fs.readdirSync(clientOutputPath);\n for (const file of clientFiles) {\n replaceRelativeImports(path.resolve(clientOutputPath, file));\n }\n }\n return;\n }\n\n let clientSrcPath = '';\n if (path.isAbsolute(plugin.name)) {\n clientSrcPath = getClientSrcPath(plugin.name);\n }\n\n // copy custom local client to output\n if (clientSrcPath) {\n const dirPath = path.resolve(outputPath, 'client');\n ensureDirSync(dirPath);\n fs.cpSync(clientSrcPath, dirPath, {\n recursive: true,\n });\n return;\n }\n\n // copy third-party client to output\n const clientModulePath = path.normalize(require.resolve(plugin.name));\n const clientModulePathComponents = clientModulePath.split(path.sep);\n const clientDistPath = clientModulePathComponents\n .slice(0, clientModulePathComponents.indexOf('dist') + 1)\n .join(path.sep);\n\n const indexJsFile =\n clientModulePathComponents[clientModulePathComponents.length - 1];\n const distFiles = [indexJsFile!, 'index.d.ts', 'index.d.cts'];\n const dirPath = path.resolve(outputPath, 'client');\n ensureDirSync(dirPath);\n for (const file of distFiles) {\n fs.copyFileSync(\n path.resolve(clientDistPath, file),\n path.resolve(dirPath, file),\n );\n }\n};\n","const parseUrlRegExp =\n /^(([^:/?#]+):)?((\\/\\/)?([^:/?#]*)(:?([^/?#]*)))?([^?#]*)(\\?([^#]*))?(#(.*))?/;\n\ninterface Url {\n host: string;\n path: string;\n port: string;\n protocol: string;\n}\n\nexport const parseUrl = (value: string): Url => {\n const errorResponse: Url = {\n host: '',\n path: '',\n port: '',\n protocol: '',\n };\n\n parseUrlRegExp.lastIndex = 0;\n const match = value.match(parseUrlRegExp);\n\n if (!match) {\n return errorResponse;\n }\n\n const host = match[5] || '';\n\n // value is a relative file system path\n if (host === '.' || host === '..') {\n return errorResponse;\n }\n\n const path = match[8] || '';\n const protocol = match[2] || '';\n\n // value is probably a Windows file system path\n if (protocol.length === 1) {\n return errorResponse;\n }\n\n return {\n host,\n path: path === '/' ? '' : path,\n port: match[7] || '',\n protocol,\n };\n};\n","const jsonPointerSlash = /~1/g;\nconst jsonPointerTilde = /~0/g;\n\nexport const irRef = '#/ir/';\n\nexport const isRefOpenApiComponent = ($ref: string): boolean => {\n const path = jsonPointerToPath($ref);\n // reusable components are nested within components/<namespace>/<name>\n return path.length === 3 && path[0] === 'components';\n};\n\n/**\n * Returns the reusable component name from `$ref`.\n */\nexport const refToName = ($ref: string): string => {\n const path = jsonPointerToPath($ref);\n const name = path[path.length - 1]!;\n // refs using unicode characters become encoded, didn't investigate why\n // but the suspicion is this comes from `@hey-api/json-schema-ref-parser`\n return decodeURI(name);\n};\n\n/**\n * Encodes a path segment for use in a JSON Pointer (RFC 6901).\n *\n * - Replaces all '~' with '~0'.\n * - Replaces all '/' with '~1'.\n *\n * This ensures that path segments containing these characters are safely\n * represented in JSON Pointer strings.\n *\n * @param segment - The path segment (string or number) to encode.\n * @returns The encoded segment as a string.\n */\nexport const encodeJsonPointerSegment = (segment: string | number): string =>\n String(segment).replace(/~/g, '~0').replace(/\\//g, '~1');\n\n/**\n * Converts a JSON Pointer string (RFC 6901) to an array of path segments.\n *\n * - Removes the leading '#' if present.\n * - Splits the pointer on '/'.\n * - Decodes '~1' to '/' and '~0' to '~' in each segment.\n * - Returns an empty array for the root pointer ('#' or '').\n *\n * @param pointer - The JSON Pointer string to convert (e.g., '#/components/schemas/Foo').\n * @returns An array of decoded path segments.\n */\nexport const jsonPointerToPath = (pointer: string): ReadonlyArray<string> => {\n let clean = pointer.trim();\n if (clean.startsWith('#')) {\n clean = clean.slice(1);\n }\n if (clean.startsWith('/')) {\n clean = clean.slice(1);\n }\n if (!clean) {\n return [];\n }\n return clean\n .split('/')\n .map((part) =>\n part.replace(jsonPointerSlash, '/').replace(jsonPointerTilde, '~'),\n );\n};\n\n/**\n * Normalizes a JSON Pointer string to a canonical form.\n *\n * - Ensures the pointer starts with '#'.\n * - Removes trailing slashes (except for root).\n * - Collapses multiple consecutive slashes into one.\n * - Trims whitespace from the input.\n *\n * @param pointer - The JSON Pointer string to normalize.\n * @returns The normalized JSON Pointer string.\n */\nexport const normalizeJsonPointer = (pointer: string): string => {\n let normalized = pointer.trim();\n if (!normalized.startsWith('#')) {\n normalized = `#${normalized}`;\n }\n // Remove trailing slashes (except for root)\n if (normalized.length > 1 && normalized.endsWith('/')) {\n normalized = normalized.slice(0, -1);\n }\n // Collapse multiple slashes\n normalized = normalized.replace(/\\/+/g, '/');\n return normalized;\n};\n\n/**\n * Encode path as JSON Pointer (RFC 6901).\n *\n * @param path\n * @returns\n */\nexport const pathToJsonPointer = (\n path: ReadonlyArray<string | number>,\n): string => {\n const segments = path.map(encodeJsonPointerSegment).join('/');\n return '#' + (segments ? `/${segments}` : '');\n};\n\nexport const resolveRef = <T>({\n $ref,\n spec,\n}: {\n $ref: string;\n spec: Record<string, any>;\n}): T => {\n // refs using unicode characters become encoded, didn't investigate why\n // but the suspicion is this comes from `@hey-api/json-schema-ref-parser`\n const path = jsonPointerToPath(decodeURI($ref));\n\n let current = spec;\n\n for (const part of path) {\n const segment = part as keyof typeof current;\n if (current[segment] === undefined) {\n throw new Error(`Reference not found: ${$ref}`);\n }\n current = current[segment];\n }\n\n return current as T;\n};\n","import type { StringCase } from '../types/case';\n\nconst uppercaseRegExp = /[\\p{Lu}]/u;\nconst lowercaseRegExp = /[\\p{Ll}]/u;\nconst identifierRegExp = /([\\p{Alpha}\\p{N}_]|$)/u;\nconst separatorsRegExp = /[_.\\- `\\\\[\\]{}\\\\/]+/;\n\nconst leadingSeparatorsRegExp = new RegExp(`^${separatorsRegExp.source}`);\nconst separatorsAndIdentifierRegExp = new RegExp(\n `${separatorsRegExp.source}${identifierRegExp.source}`,\n 'gu',\n);\nconst numbersAndIdentifierRegExp = new RegExp(\n `\\\\d+${identifierRegExp.source}`,\n 'gu',\n);\n\nconst preserveCase = ({\n case: _case,\n string,\n}: {\n readonly case: StringCase;\n string: string;\n}) => {\n let isLastCharLower = false;\n let isLastCharUpper = false;\n let isLastLastCharUpper = false;\n let isLastLastCharPreserved = false;\n\n const separator =\n _case === 'snake_case' || _case === 'SCREAMING_SNAKE_CASE' ? '_' : '-';\n\n for (let index = 0; index < string.length; index++) {\n const character = string[index]!;\n isLastLastCharPreserved =\n index > 2 ? string[index - 3] === separator : true;\n\n let nextIndex = index + 1;\n let nextCharacter = string[nextIndex];\n separatorsRegExp.lastIndex = 0;\n while (nextCharacter && separatorsRegExp.test(nextCharacter)) {\n nextIndex += 1;\n nextCharacter = string[nextIndex];\n }\n const isSeparatorBeforeNextCharacter = nextIndex !== index + 1;\n\n lowercaseRegExp.lastIndex = 0;\n uppercaseRegExp.lastIndex = 0;\n if (\n uppercaseRegExp.test(character) &&\n (isLastCharLower ||\n (nextCharacter &&\n !isSeparatorBeforeNextCharacter &&\n nextCharacter !== 's' &&\n lowercaseRegExp.test(nextCharacter)))\n ) {\n // insert separator behind character\n string = `${string.slice(0, index)}${separator}${string.slice(index)}`;\n index++;\n isLastLastCharUpper = isLastCharUpper;\n isLastCharLower = false;\n isLastCharUpper = true;\n } else if (\n isLastCharUpper &&\n isLastLastCharUpper &&\n lowercaseRegExp.test(character) &&\n !isLastLastCharPreserved &&\n // naive detection of plurals\n !(\n character === 's' &&\n (!nextCharacter || nextCharacter.toLocaleLowerCase() !== nextCharacter)\n )\n ) {\n // insert separator 2 characters behind\n string = `${string.slice(0, index - 1)}${separator}${string.slice(index - 1)}`;\n isLastLastCharUpper = isLastCharUpper;\n isLastCharLower = true;\n isLastCharUpper = false;\n } else {\n const characterLower = character.toLocaleLowerCase();\n const characterUpper = character.toLocaleUpperCase();\n isLastLastCharUpper = isLastCharUpper;\n isLastCharLower =\n characterLower === character && characterUpper !== character;\n isLastCharUpper =\n characterUpper === character && characterLower !== character;\n }\n }\n\n return string;\n};\n\nexport const stringCase = ({\n case: _case,\n stripLeadingSeparators = true,\n value,\n}: {\n readonly case: StringCase | undefined;\n /**\n * If leading separators have a semantic meaning, we might not want to\n * remove them.\n */\n stripLeadingSeparators?: boolean;\n value: string;\n}): string => {\n let result = value.trim();\n\n if (!result.length) {\n return '';\n }\n\n if (!_case || _case === 'preserve') {\n return result;\n }\n\n if (result.length === 1) {\n separatorsRegExp.lastIndex = 0;\n if (separatorsRegExp.test(result)) {\n return '';\n }\n\n return _case === 'PascalCase' || _case === 'SCREAMING_SNAKE_CASE'\n ? result.toLocaleUpperCase()\n : result.toLocaleLowerCase();\n }\n\n const hasUpperCase = result !== result.toLocaleLowerCase();\n\n if (hasUpperCase) {\n result = preserveCase({ case: _case, string: result });\n }\n\n if (stripLeadingSeparators || result[0] !== value[0]) {\n result = result.replace(leadingSeparatorsRegExp, '');\n }\n\n result =\n _case === 'SCREAMING_SNAKE_CASE'\n ? result.toLocaleUpperCase()\n : result.toLocaleLowerCase();\n\n if (_case === 'PascalCase') {\n result = `${result.charAt(0).toLocaleUpperCase()}${result.slice(1)}`;\n }\n\n if (_case === 'snake_case' || _case === 'SCREAMING_SNAKE_CASE') {\n result = result.replaceAll(\n separatorsAndIdentifierRegExp,\n (match, identifier, offset) => {\n if (offset === 0 && !stripLeadingSeparators) {\n return match;\n }\n return `_${identifier}`;\n },\n );\n\n if (result[result.length - 1] === '_') {\n // strip trailing underscore\n result = result.slice(0, result.length - 1);\n }\n } else {\n separatorsAndIdentifierRegExp.lastIndex = 0;\n numbersAndIdentifierRegExp.lastIndex = 0;\n\n result = result.replaceAll(\n numbersAndIdentifierRegExp,\n (match, _, offset) => {\n if (['_', '-', '.'].includes(result.charAt(offset + match.length))) {\n return match;\n }\n\n return match.toLocaleUpperCase();\n },\n );\n\n result = result.replaceAll(\n separatorsAndIdentifierRegExp,\n (match, identifier, offset) => {\n if (\n offset === 0 &&\n !stripLeadingSeparators &&\n match[0] &&\n value.startsWith(match[0])\n ) {\n return match;\n }\n return identifier.toLocaleUpperCase();\n },\n );\n }\n\n return result;\n};\n","import type { StringCase } from '../../../types/case';\nimport type { Config } from '../../../types/config';\nimport { irRef } from '../../../utils/ref';\nimport { stringCase } from '../../../utils/stringCase';\n\ninterface OperationIRRef {\n /**\n * Operation ID\n */\n id: string;\n}\n\n// TODO: this needs refactor\nexport const operationIrRef = ({\n case: _case = 'PascalCase',\n config,\n id,\n parameterId,\n type,\n}: OperationIRRef & {\n readonly case?: StringCase;\n config: Pick<Config, 'plugins'>;\n parameterId?: string;\n type: 'data' | 'error' | 'errors' | 'parameter' | 'response' | 'responses';\n}): string => {\n let affix = '';\n switch (type) {\n case 'data':\n case 'error': // error union\n case 'errors': // errors map\n case 'parameter':\n case 'response': // response union\n case 'responses': // responses map\n affix = `${(type[0] ?? '').toLocaleUpperCase()}${type.slice(1)}`;\n break;\n }\n let separate = true;\n if (config.plugins['@hey-api/typescript']?.config.case === 'preserve') {\n separate = false;\n }\n const separator = separate ? '-' : '';\n const parts: Array<string> = [\n irRef,\n stringCase({\n case: _case,\n value: id,\n }),\n separator,\n affix,\n ];\n if (parameterId) {\n parts.push(\n separator,\n stringCase({\n case: _case,\n value: parameterId,\n }),\n );\n }\n return parts.join('');\n};\n","import type { Identifier, TypeScriptFile } from '../../../generate/files';\nimport type { IR } from '../../../ir/types';\nimport { operationIrRef } from '../../shared/utils/ref';\n\nexport const typesId = 'types';\n\nfunction refIdentifier<T extends Identifier>(\n identifier: T,\n onGet?: (identifier: T) => void,\n): T {\n return {\n ...identifier,\n get name() {\n onGet?.(identifier);\n return identifier.name;\n },\n };\n}\n\nexport const importIdentifier = ({\n context,\n file,\n operation,\n type,\n}: {\n context: IR.Context;\n file: TypeScriptFile;\n operation: IR.OperationObject;\n type: Parameters<typeof operationIrRef>[0]['type'];\n}): Identifier => {\n const identifier = context.file({ id: typesId })!.identifier({\n $ref: operationIrRef({\n config: context.config,\n id: operation.id,\n type,\n }),\n namespace: 'type',\n });\n return refIdentifier(identifier, (ref) => {\n if (ref.name) {\n file.import({\n asType: true,\n module: file.relativePathToFile({ context, id: typesId }),\n name: ref.name,\n });\n }\n });\n};\n","import { compiler } from '../../../compiler';\nimport { clientModulePath } from '../../../generate/client';\nimport { parseUrl } from '../../../utils/url';\nimport { typesId } from '../typescript/ref';\nimport type { PluginHandler } from './types';\nimport { clientId, getClientBaseUrlKey } from './utils';\n\nconst resolveBaseUrlString = ({\n plugin,\n}: Parameters<PluginHandler>[0]): string | undefined => {\n const { baseUrl } = plugin.config;\n\n if (baseUrl === false) {\n return;\n }\n\n if (typeof baseUrl === 'string') {\n return baseUrl;\n }\n\n const { servers } = plugin.context.ir;\n\n if (!servers) {\n return;\n }\n\n return servers[typeof baseUrl === 'number' ? baseUrl : 0]?.url;\n};\n\nexport const createClient = ({ plugin }: Parameters<PluginHandler>[0]) => {\n const file = plugin.context.file({ id: clientId })!;\n\n const clientModule = clientModulePath({\n config: plugin.context.config,\n sourceOutput: file.nameWithoutExtension(),\n });\n const createClient = file.import({\n module: clientModule,\n name: 'createClient',\n });\n const createConfig = file.import({\n module: clientModule,\n name: 'createConfig',\n });\n const clientOptions = file.import({\n asType: true,\n module: file.relativePathToFile({ context: plugin.context, id: typesId }),\n name: 'ClientOptions',\n });\n\n const createClientConfig = plugin.config.runtimeConfigPath\n ? file.import({\n module: file.relativePathToFile({\n context: plugin.context,\n id: plugin.config.runtimeConfigPath,\n }),\n name: 'createClientConfig',\n })\n : undefined;\n\n const defaultValues: Array<unknown> = [];\n\n const resolvedBaseUrl = resolveBaseUrlString({\n plugin: plugin as any,\n });\n if (resolvedBaseUrl) {\n const url = parseUrl(resolvedBaseUrl);\n if (url.protocol && url.host && !resolvedBaseUrl.includes('{')) {\n defaultValues.push({\n key: getClientBaseUrlKey(plugin.context.config),\n value: resolvedBaseUrl,\n });\n } else if (resolvedBaseUrl !== '/' && resolvedBaseUrl.startsWith('/')) {\n const baseUrl = resolvedBaseUrl.endsWith('/')\n ? resolvedBaseUrl.slice(0, -1)\n : resolvedBaseUrl;\n defaultValues.push({\n key: getClientBaseUrlKey(plugin.context.config),\n value: baseUrl,\n });\n }\n }\n\n if ('throwOnError' in plugin.config && plugin.config.throwOnError) {\n defaultValues.push({\n key: 'throwOnError',\n value: true,\n });\n }\n\n const createConfigParameters = [\n compiler.callExpression({\n functionName: createConfig.name,\n parameters: defaultValues.length\n ? [compiler.objectExpression({ obj: defaultValues })]\n : undefined,\n types: [compiler.typeReferenceNode({ typeName: clientOptions.name })],\n }),\n ];\n\n const statement = compiler.constVariable({\n exportConst: true,\n expression: compiler.callExpression({\n functionName: createClient.name,\n parameters: createClientConfig\n ? [\n compiler.callExpression({\n functionName: createClientConfig.name,\n parameters: createConfigParameters,\n }),\n ]\n : createConfigParameters,\n }),\n name: 'client',\n });\n file.add(statement);\n};\n","import { compiler } from '../../../compiler';\nimport { clientModulePath } from '../../../generate/client';\nimport { clientId } from '../client-core/utils';\nimport { typesId } from '../typescript/ref';\nimport type { PluginHandler } from './types';\n\nexport const createClientConfigType = ({\n plugin,\n}: Parameters<PluginHandler>[0]) => {\n const file = plugin.context.file({ id: clientId })!;\n\n const clientModule = clientModulePath({\n config: plugin.context.config,\n sourceOutput: file.nameWithoutExtension(),\n });\n const clientOptions = file.import({\n asType: true,\n module: file.relativePathToFile({ context: plugin.context, id: typesId }),\n name: 'ClientOptions',\n });\n const configType = file.import({\n asType: true,\n module: clientModule,\n name: 'Config',\n });\n const defaultClientOptions = file.import({\n alias: 'DefaultClientOptions',\n asType: true,\n module: clientModule,\n name: 'ClientOptions',\n });\n\n const defaultClientOptionsType = compiler.typeReferenceNode({\n typeName: defaultClientOptions.name,\n });\n const tType = compiler.typeReferenceNode({ typeName: 'T' });\n\n const typeCreateClientConfig = compiler.typeAliasDeclaration({\n comment: [\n 'The `createClientConfig()` function will be called on client initialization',\n \"and the returned object will become the client's initial configuration.\",\n '',\n 'You may want to initialize your client this way instead of calling',\n \"`setConfig()`. This is useful for example if you're using Next.js\",\n 'to ensure your client always has the correct values.',\n ],\n exportType: true,\n name: 'CreateClientConfig',\n type: compiler.functionTypeNode({\n parameters: [\n compiler.parameterDeclaration({\n name: 'override',\n required: false,\n type: compiler.typeReferenceNode({\n typeArguments: [\n compiler.typeIntersectionNode({\n types: [defaultClientOptionsType, tType],\n }),\n ],\n typeName: configType.name,\n }),\n }),\n ],\n returnType: compiler.typeReferenceNode({\n typeArguments: [\n compiler.typeIntersectionNode({\n types: [\n compiler.typeReferenceNode({\n typeArguments: [defaultClientOptionsType],\n typeName: 'Required',\n }),\n tType,\n ],\n }),\n ],\n typeName: configType.name,\n }),\n }),\n typeParameters: [\n {\n default: compiler.typeReferenceNode({ typeName: clientOptions.name }),\n extends: defaultClientOptionsType,\n name: 'T',\n },\n ],\n });\n\n file.add(typeCreateClientConfig);\n};\n","import { clientId } from '../client-core/utils';\nimport { createClient } from './client';\nimport { createClientConfigType } from './createClientConfig';\nimport type { PluginHandler } from './types';\n\nexport const clientPluginHandler = ({\n plugin,\n}: Parameters<PluginHandler>[0]) => {\n plugin.createFile({\n id: clientId,\n path: plugin.output,\n });\n\n createClientConfigType({\n plugin: plugin as any,\n });\n createClient({\n plugin: plugin as any,\n });\n};\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport ts from 'typescript';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nexport const findPackageJson = (): unknown | undefined => {\n let dir = __dirname;\n while (dir !== path.dirname(dir)) {\n const files = fs.readdirSync(dir);\n const candidates = files.filter((file) => file === 'package.json');\n\n if (candidates[0]) {\n const packageJsonPath = path.join(dir, candidates[0]);\n return JSON.parse(\n fs.readFileSync(packageJsonPath, {\n encoding: 'utf8',\n }),\n );\n }\n\n dir = path.dirname(dir);\n }\n\n return;\n};\n\nexport const findTsConfigPath = (\n tsConfigPath?: 'off' | (string & {}),\n): string | null => {\n if (tsConfigPath === 'off') {\n return null;\n }\n\n if (tsConfigPath) {\n const resolved = path.isAbsolute(tsConfigPath)\n ? tsConfigPath\n : path.resolve(__dirname, tsConfigPath);\n return fs.existsSync(resolved) ? resolved : null;\n }\n\n let dir = __dirname;\n while (dir !== path.dirname(dir)) {\n const files = fs.readdirSync(dir);\n const candidates = files\n .filter((file) => file.startsWith('tsconfig') && file.endsWith('.json'))\n .sort((file) => (file === 'tsconfig.json' ? -1 : 1));\n\n if (candidates[0]) {\n return path.join(dir, candidates[0]);\n }\n\n dir = path.dirname(dir);\n }\n\n return null;\n};\n\nexport const loadTsConfig = (\n configPath: string | null,\n): ts.ParsedCommandLine | null => {\n if (!configPath) {\n return null;\n }\n\n const raw = ts.readConfigFile(configPath, ts.sys.readFile);\n\n if (raw.error) {\n throw new Error(`Couldn't read tsconfig from path: ${configPath}`);\n }\n\n return ts.parseJsonConfigFileContent(\n raw.config,\n ts.sys,\n path.dirname(configPath),\n );\n};\n","import fs from 'node:fs';\nimport path from 'node:path';\n\nimport colors from 'ansi-colors';\n\nimport { findPackageJson } from './generate/tsConfig';\nimport { ensureDirSync } from './generate/utils';\n\nexport const isInteractive = process.stdin.isTTY && process.stdout.isTTY;\n\nexport class HeyApiError extends Error {\n args: ReadonlyArray<unknown>;\n event: string;\n pluginName: string;\n\n constructor({\n args,\n error,\n event,\n name,\n pluginName,\n }: {\n args: unknown[];\n error: Error;\n event: string;\n name: string;\n pluginName: string;\n }) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n super(message);\n\n this.args = args;\n this.cause = error.cause;\n this.event = event;\n this.name = name || error.name;\n this.pluginName = pluginName;\n this.stack = error.stack;\n }\n}\n\nexport const logCrashReport = (error: unknown, logsDir: string): string => {\n const logName = `openapi-ts-error-${Date.now()}.log`;\n const fullDir = path.resolve(process.cwd(), logsDir);\n ensureDirSync(fullDir);\n const logPath = path.resolve(fullDir, logName);\n\n let logContent = `[${new Date().toISOString()}] `;\n\n if (error instanceof HeyApiError) {\n logContent += `${error.name} during event \"${error.event}\"\\n`;\n if (error.pluginName) {\n logContent += `Plugin: ${error.pluginName}\\n`;\n }\n logContent += `Arguments: ${JSON.stringify(error.args, null, 2)}\\n\\n`;\n }\n\n const message = error instanceof Error ? error.message : String(error);\n const stack = error instanceof Error ? error.stack : undefined;\n\n logContent += `Error: ${message}\\n`;\n if (stack) {\n logContent += `Stack:\\n${stack}\\n`;\n }\n\n fs.writeFileSync(logPath, logContent);\n\n return logPath;\n};\n\nexport const openGitHubIssueWithCrashReport = async (error: unknown) => {\n let body = '';\n\n if (error instanceof HeyApiError) {\n if (error.pluginName) {\n body += `**Plugin**: \\`${error.pluginName}\\`\\n`;\n }\n body += `**Event**: \\`${error.event}\\`\\n`;\n body += `**Arguments**:\\n\\`\\`\\`ts\\n${JSON.stringify(error.args, null, 2)}\\n\\`\\`\\`\\n\\n`;\n }\n\n const message = error instanceof Error ? error.message : String(error);\n const stack = error instanceof Error ? error.stack : undefined;\n\n body += `**Error**: \\`${message}\\`\\n`;\n if (stack) {\n body += `\\n**Stack Trace**:\\n\\`\\`\\`\\n${stack}\\n\\`\\`\\``;\n }\n\n const search = new URLSearchParams({\n body,\n labels: 'bug 🔥',\n title: 'Crash Report',\n });\n\n const packageJson = findPackageJson();\n let bugsUrl: string | undefined;\n if (\n packageJson &&\n typeof packageJson === 'object' &&\n 'bugs' in packageJson &&\n packageJson.bugs &&\n typeof packageJson.bugs === 'object' &&\n 'url' in packageJson.bugs &&\n typeof packageJson.bugs.url === 'string'\n ) {\n bugsUrl = packageJson.bugs.url;\n if (bugsUrl && !bugsUrl.endsWith('/')) {\n bugsUrl += '/';\n }\n }\n\n if (bugsUrl) {\n const url = `${bugsUrl}new?${search.toString()}`;\n const open = (await import('open')).default;\n await open(url);\n }\n};\n\nexport const printCrashReport = ({\n error,\n logPath,\n}: {\n error: unknown;\n logPath: string | undefined;\n}) => {\n const packageJson = findPackageJson();\n let name: string | undefined;\n if (\n packageJson &&\n typeof packageJson === 'object' &&\n 'name' in packageJson &&\n typeof packageJson.name === 'string'\n ) {\n name = packageJson.name;\n }\n process.stderr.write(\n `\\n🛑 ${colors.cyan(name || '')} ${colors.red('encountered an error.')}` +\n `\\n\\n${colors.red('❗️ Error:')} ${colors.white(typeof error === 'string' ? error : error instanceof Error ? error.message : 'Unknown error')}` +\n (logPath\n ? `\\n\\n${colors.cyan('📄 Crash log saved to:')} ${colors.gray(logPath)}`\n : ''),\n );\n};\n\nexport const shouldReportCrash = async (): Promise<boolean> => {\n if (!isInteractive) {\n return false;\n }\n\n return new Promise((resolve) => {\n process.stdout.write(\n `${colors.yellow('\\n\\n📢 Open a GitHub issue with crash details?')} ${colors.yellow('(y/N):')}`,\n );\n process.stdin.setEncoding('utf8');\n process.stdin.once('data', (data: string) => {\n resolve(data.trim().toLowerCase() === 'y');\n });\n });\n};\n","import {\n illegalStartCharactersRegExp,\n reservedBrowserGlobalsRegExp,\n reservedJavaScriptGlobalsRegExp,\n reservedJavaScriptKeywordsRegExp,\n reservedNodeGlobalsRegExp,\n reservedTypeScriptKeywordsRegExp,\n} from '../../../utils/regexp';\n\nconst regexps = [\n reservedJavaScriptKeywordsRegExp,\n reservedTypeScriptKeywordsRegExp,\n reservedJavaScriptGlobalsRegExp,\n reservedNodeGlobalsRegExp,\n reservedBrowserGlobalsRegExp,\n];\n\nexport const ensureValidIdentifier = (name: string): string => {\n let identifier = name.replace(/[^$\\u200c\\u200d\\p{ID_Continue}]/gu, '_');\n\n illegalStartCharactersRegExp.lastIndex = 0;\n if (illegalStartCharactersRegExp.test(identifier)) {\n return `_${identifier}`;\n }\n\n for (const regexp of regexps) {\n if (identifier.startsWith('_')) {\n return identifier;\n }\n\n identifier = identifier.replace(regexp, '_$1');\n }\n\n return identifier;\n};\n","import fs from 'node:fs';\nimport path from 'node:path';\n\nimport ts from 'typescript';\n\nimport { compiler } from '../compiler';\nimport { type ImportExportItemObject, tsNodeToString } from '../compiler/utils';\nimport type { IR } from '../ir/types';\nimport { ensureValidIdentifier } from '../openApi/shared/utils/identifier';\nimport type { StringCase } from '../types/case';\nimport { stringCase } from '../utils/stringCase';\nimport { ensureDirSync } from './utils';\n\nexport interface Identifier {\n /**\n * Did this function add a new property to the file's `identifiers` map?\n */\n created: boolean;\n /**\n * The resolved identifier name. False means the identifier has been blacklisted.\n */\n name: string | false;\n}\n\ntype NamespaceEntry = Pick<Identifier, 'name'> & {\n /**\n * Ref to the type in OpenAPI specification.\n */\n $ref: string;\n};\n\nexport type Identifiers = Record<\n string,\n {\n /**\n * TypeScript enum only namespace.\n *\n * @example\n * ```ts\n * export enum Foo = {\n * FOO = 'foo'\n * }\n * ```\n */\n enum?: Record<string, NamespaceEntry>;\n /**\n * Type namespace. Types, interfaces, and type aliases exist here.\n *\n * @example\n * ```ts\n * export type Foo = string;\n * ```\n */\n type?: Record<string, NamespaceEntry>;\n /**\n * Value namespace. Variables, functions, classes, and constants exist here.\n *\n * @example\n * ```js\n * export const foo = '';\n * ```\n */\n value?: Record<string, NamespaceEntry>;\n }\n>;\n\ntype Namespace = keyof Identifiers[keyof Identifiers];\n\nexport type FileImportResult = Pick<ImportExportItemObject, 'asType' | 'name'>;\n\nexport class TypeScriptFile {\n /**\n * Should the exports from this file be re-exported in the index barrel file?\n */\n private _exportFromIndex: boolean;\n private _headers: Array<string> = [];\n private _id: string;\n private _identifierCase: StringCase | undefined;\n private _imports = new Map<string, Map<string, ImportExportItemObject>>();\n private _items: Array<ts.Node | string> = [];\n private _name: string;\n private _path: string;\n\n public identifiers: Identifiers = {};\n\n /**\n * Path relative to the client output root.\n */\n // TODO: parser - add relative path property for quick access, currently\n // everything is resolved into an absolute path with cwd\n // public relativePath: string;\n\n public constructor({\n dir,\n exportFromIndex = false,\n header = true,\n id,\n identifierCase,\n name,\n }: {\n dir: string;\n /**\n * Should the exports from this file be re-exported in the index barrel file?\n */\n exportFromIndex?: boolean;\n header?: boolean;\n /**\n * Unique file ID. Used to generate correct relative paths to the file.\n * This should be refactored later as it's basically the file name unless\n * nested inside another folder.\n */\n id: string;\n identifierCase?: StringCase;\n name: string;\n }) {\n this._exportFromIndex = exportFromIndex;\n this._id = id;\n this._identifierCase = identifierCase;\n this._name = this._setName(name);\n this._path = path.resolve(dir, this._name);\n\n if (header) {\n this._headers.push(\n '// This file is auto-generated by @hey-api/openapi-ts',\n );\n }\n }\n\n public add(...nodes: Array<ts.Node | string>) {\n this._items = this._items.concat(nodes);\n }\n\n /**\n * Prevents a specific identifier from being created. This is useful for\n * transformers where we know a certain transformer won't be needed, and\n * we want to avoid attempting to create since we know it won't happen.\n */\n public blockIdentifier({\n $ref,\n namespace,\n }: Pick<EnsureUniqueIdentifierData, '$ref'> & {\n namespace: Namespace;\n }): Identifier {\n const { name, ref } = parseRef($ref);\n const refValue =\n this.identifiers[name.toLocaleLowerCase()]?.[namespace]?.[ref];\n if (!refValue) {\n throw new Error(\n `Identifier for $ref ${$ref} in namespace ${namespace} not found`,\n );\n }\n\n refValue.name = false;\n\n return {\n created: false,\n name: refValue.name,\n };\n }\n\n public get exportFromIndex(): boolean {\n return this._exportFromIndex;\n }\n\n public get id(): string {\n return this._id;\n }\n\n public identifier(\n args: Pick<\n EnsureUniqueIdentifierData,\n '$ref' | 'count' | 'create' | 'nameTransformer'\n > & {\n case?: StringCase;\n namespace: Namespace;\n },\n ): Identifier {\n return ensureUniqueIdentifier({\n case: args.case ?? this._identifierCase,\n identifiers: this.identifiers,\n ...args,\n });\n }\n\n /**\n * Adds an import to the provided module. Handles duplication, returns added\n * import. Returns the imported name. If we import an aliased export, `name`\n * will be equal to the specified `alias`.\n */\n public import({\n module,\n ...importedItem\n }: ImportExportItemObject & {\n module: string;\n }): FileImportResult {\n let moduleMap = this._imports.get(module);\n\n if (!moduleMap) {\n moduleMap = new Map<string, ImportExportItemObject>();\n this._imports.set(module, moduleMap);\n }\n\n const match = moduleMap.get(importedItem.name);\n if (match) {\n return {\n ...match,\n name: match.alias || match.name,\n };\n }\n\n moduleMap.set(importedItem.name, importedItem);\n return {\n ...importedItem,\n name: importedItem.alias || importedItem.name,\n };\n }\n\n public isEmpty() {\n return !this._items.length;\n }\n\n public nameWithoutExtension() {\n const { name } = splitNameAndExtension(this._name);\n return name;\n }\n\n public relativePathToFile({\n context,\n id,\n }: {\n context: IR.Context;\n id: string;\n }): string {\n let filePath = '';\n\n // relative file path\n if (id.startsWith('.')) {\n let configFileParts: Array<string> = [];\n // if providing a custom configuration file, relative paths must resolve\n // relative to the configuration file.\n if (context.config.configFile) {\n const cfgParts = context.config.configFile.split('/');\n configFileParts = cfgParts.slice(0, cfgParts.length - 1);\n }\n filePath = path.resolve(process.cwd(), ...configFileParts, id);\n } else {\n const file = context.file({ id });\n if (!file) {\n throw new Error(`File with id ${id} does not exist`);\n }\n filePath = file._path;\n }\n\n const thisPathParts = this._path.split(path.sep);\n const filePathParts = filePath.split(path.sep);\n\n let index = -1;\n let relativePath = '';\n for (const part of thisPathParts) {\n index += 1;\n if (filePathParts[index] !== part) {\n const pathArray = Array.from({\n length: thisPathParts.length - index,\n }).fill('');\n const relativePathToFile = filePathParts.slice(index);\n const relativeFolder = relativePathToFile.slice(\n 0,\n relativePathToFile.length - 1,\n );\n if (relativeFolder.length) {\n relativeFolder.push('');\n }\n relativePath =\n (pathArray.join('../') || './') + relativeFolder.join('/');\n break;\n }\n }\n\n const fileName = filePathParts[filePathParts.length - 1]!;\n // TODO: parser - cache responses\n return `${relativePath}${splitNameAndExtension(fileName).name}`;\n }\n\n public remove(options?: Parameters<typeof fs.rmSync>[1]) {\n fs.rmSync(this._path, options);\n }\n\n /**\n * Removes last node form the stack. Works as undo.\n */\n public removeNode() {\n this._items = this._items.slice(0, this._items.length - 1);\n }\n\n private _setName(fileName: string) {\n if (fileName.includes('index')) {\n return fileName;\n }\n\n const { extension, name } = splitNameAndExtension(fileName);\n return [name, 'gen', extension].filter(Boolean).join('.');\n }\n\n private _toString(separator: string, tsConfig: ts.ParsedCommandLine | null) {\n let output: Array<string> = [];\n if (this._headers.length) {\n output.push(this._headers.join('\\n'));\n }\n\n const shouldAppendJs =\n tsConfig?.options.moduleResolution === ts.ModuleResolutionKind.NodeNext;\n\n const importsStringArray: Array<string> = [];\n\n for (const [_module, moduleMap] of this._imports.entries()) {\n const imports = Array.from(moduleMap.values());\n\n let resolvedModule = _module;\n if (\n shouldAppendJs &&\n (resolvedModule.startsWith('./') || resolvedModule.startsWith('../'))\n ) {\n if (resolvedModule === './client') {\n resolvedModule = './client/index.js';\n } else {\n resolvedModule = `${resolvedModule}.js`;\n }\n }\n\n const node = compiler.namedImportDeclarations({\n imports,\n module: resolvedModule,\n });\n importsStringArray.push(tsNodeToString({ node }));\n }\n if (importsStringArray.length) {\n output.push(importsStringArray.join('\\n'));\n }\n output = output.concat(\n this._items.map((node) =>\n typeof node === 'string'\n ? node\n : tsNodeToString({ node, unescape: true }),\n ),\n );\n return output.join(separator);\n }\n\n public write(separator = '\\n', tsConfig: ts.ParsedCommandLine | null = null) {\n if (this.isEmpty()) {\n this.remove({ force: true });\n return;\n }\n\n let dir = this._path;\n if (typeof this._path === 'string') {\n const parts = this._path.split(path.sep);\n dir = parts.slice(0, parts.length - 1).join(path.sep);\n }\n ensureDirSync(dir);\n fs.writeFileSync(this._path, this._toString(separator, tsConfig));\n }\n}\n\nconst parseRef = (\n $ref: string,\n): {\n /**\n * Extracted name from `$ref`, equal to the last part or property name.\n */\n name: string;\n /**\n * List of properties extracted from `$ref`, if any.\n */\n properties: ReadonlyArray<string>;\n /**\n * `$ref` without properties if they're included in `$ref`, otherwise\n * `ref` is equal to `$ref`.\n */\n ref: string;\n} => {\n let ref = $ref;\n const properties: string[] = [];\n\n const parts = ref.split('/');\n let name = parts[parts.length - 1] || '';\n\n let propIndex = parts.indexOf('properties');\n\n if (propIndex !== -1) {\n ref = parts.slice(0, propIndex).join('/');\n name = parts[propIndex - 1] || '';\n\n while (propIndex + 1 < parts.length) {\n const prop = parts[propIndex + 1];\n if (!prop) {\n throw new Error(`Invalid $ref: ${$ref}`);\n }\n properties.push(prop);\n propIndex += 2;\n }\n }\n\n return {\n name,\n properties,\n ref,\n };\n};\n\nconst transformName = (\n name: string,\n transformer: ((name: string) => string) | string,\n identifierCase?: StringCase,\n): string => {\n if (typeof transformer === 'function') {\n return transformer(name);\n }\n\n const separator = identifierCase === 'preserve' ? '' : '-';\n return transformer.replace('{{name}}', `${separator}${name}${separator}`);\n};\n\ninterface EnsureUniqueIdentifierData {\n $ref: string;\n case: StringCase | undefined;\n count?: number;\n create?: boolean;\n identifiers: Identifiers;\n /**\n * Transforms name obtained from `$ref` before it's passed to `stringCase()`.\n */\n nameTransformer?: ((name: string) => string) | string;\n namespace: Namespace;\n}\n\nconst ensureUniqueIdentifier = ({\n $ref,\n case: identifierCase,\n count = 1,\n create = false,\n identifiers,\n nameTransformer,\n namespace,\n}: EnsureUniqueIdentifierData): Identifier => {\n const { name, properties, ref } = parseRef($ref);\n\n if (!name) {\n return {\n created: false,\n name: '',\n };\n }\n\n let nameWithCasingAndTransformer = stringCase({\n case: identifierCase,\n value: nameTransformer\n ? transformName(name, nameTransformer, identifierCase)\n : name,\n });\n if (count > 1) {\n nameWithCasingAndTransformer = `${nameWithCasingAndTransformer}${count}`;\n }\n const lowercaseName = nameWithCasingAndTransformer.toLocaleLowerCase();\n if (!identifiers[lowercaseName]) {\n identifiers[lowercaseName] = {};\n }\n const identifier = identifiers[lowercaseName];\n\n // Enum declarations can only merge with namespace or other enum\n // declarations, so we need to ensure we don't mix them up.\n if (\n (namespace === 'enum' && (identifier.type || identifier.value)) ||\n (namespace !== 'enum' && identifier.enum)\n ) {\n return ensureUniqueIdentifier({\n $ref: ref,\n case: identifierCase,\n count: count + 1,\n create,\n identifiers,\n nameTransformer,\n namespace,\n });\n }\n\n if (!identifier[namespace]) {\n identifier[namespace] = {};\n }\n const id = identifier[namespace];\n\n const refValue = id[ref];\n if (refValue) {\n let name = refValue.name;\n if (properties.length) {\n name += properties.map((property) => `['${property}']`).join('');\n }\n return {\n created: false,\n name: name as string,\n };\n }\n\n let nameValue = id[nameWithCasingAndTransformer];\n if (nameValue) {\n if (nameValue.$ref === ref) {\n return {\n created: false,\n name: nameValue.name,\n };\n }\n\n return ensureUniqueIdentifier({\n $ref: ref,\n case: identifierCase,\n count: count + 1,\n create,\n identifiers,\n nameTransformer,\n namespace,\n });\n }\n\n if (!create) {\n delete identifier[namespace];\n return {\n created: false,\n name: '',\n };\n }\n\n nameValue = {\n $ref: ref,\n name: ensureValidIdentifier(nameWithCasingAndTransformer),\n };\n id[nameWithCasingAndTransformer] = nameValue;\n id[nameValue.$ref] = nameValue;\n\n return {\n created: true,\n name: nameValue.name,\n };\n};\n\nconst splitNameAndExtension = (fileName: string) => {\n const match = fileName.match(/\\.[0-9a-z]+$/i);\n const extension = match ? match[0].slice(1) : '';\n const name = fileName.slice(\n 0,\n fileName.length - (extension ? extension.length + 1 : 0),\n );\n return { extension, name };\n};\n\nexport const _test = {\n ensureUniqueIdentifier,\n parseRef,\n splitNameAndExtension,\n};\n","import { HeyApiError } from '../../../error';\nimport type { IR } from '../../../ir/types';\nimport type { OpenApi } from '../../../openApi/types';\nimport type { PluginConfigMap } from '../../config';\nimport type { Plugin } from '../../types';\nimport type { WalkEvent, WalkEventType } from '../types/instance';\n\nexport class PluginInstance<T extends Plugin.Types = Plugin.Types> {\n public api: T['api'];\n public config: Omit<T['resolvedConfig'], 'name' | 'output'>;\n public context: IR.Context;\n public dependencies: Required<Plugin.Config<T>>['dependencies'] = [];\n private handler: Plugin.Config<T>['handler'];\n public name: T['resolvedConfig']['name'];\n public output: Required<T['config']>['output'];\n\n public constructor(\n props: Pick<\n Required<Plugin.Config<T>>,\n 'config' | 'dependencies' | 'handler'\n > & {\n api?: T['api'];\n context: IR.Context<OpenApi.V2_0_X | OpenApi.V3_0_X | OpenApi.V3_1_X>;\n name: string;\n output: string;\n },\n ) {\n this.api = props.api ?? {};\n this.config = props.config;\n this.context = props.context;\n this.dependencies = props.dependencies;\n this.handler = props.handler;\n this.name = props.name;\n this.output = props.output;\n }\n\n public createFile(file: IR.ContextFile) {\n return this.context.createFile({\n exportFromIndex: this.config.exportFromIndex,\n ...file,\n });\n }\n\n /**\n * Iterates over various input elements as specified by the event types, in\n * a specific order: servers, schemas, parameters, request bodies, then\n * operations.\n *\n * This ensures, for example, that schemas are always processed before\n * operations, which may reference them.\n *\n * @template T - The event type(s) to yield. Defaults to all event types.\n * @param events - The event types to walk over. If none are provided, all event types are included.\n * @param callback - Function to execute for each event.\n *\n * @example\n * // Iterate over all operations and schemas\n * plugin.forEach('operation', 'schema', (event) => {\n * if (event.type === 'operation') {\n * // handle operation\n * } else if (event.type === 'schema') {\n * // handle schema\n * }\n * });\n */\n public forEach<T extends WalkEventType = WalkEventType>(\n ...args: [\n ...events: ReadonlyArray<T>,\n callback: (event: WalkEvent<T>) => void,\n ]\n ): void {\n const events = args.slice(0, -1) as ReadonlyArray<T>;\n const callback = args[args.length - 1] as (event: WalkEvent<T>) => void;\n const eventSet = new Set(\n events.length\n ? events\n : ([\n 'operation',\n 'parameter',\n 'requestBody',\n 'schema',\n 'server',\n ] as ReadonlyArray<WalkEventType>),\n );\n\n if (eventSet.has('server') && this.context.ir.servers) {\n for (const server of this.context.ir.servers) {\n const event: WalkEvent<'server'> = { server, type: 'server' };\n try {\n callback(event as WalkEvent<T>);\n } catch (error) {\n this.forEachError(error, event);\n }\n }\n }\n\n if (eventSet.has('schema') && this.context.ir.components?.schemas) {\n for (const name in this.context.ir.components.schemas) {\n const event: WalkEvent<'schema'> = {\n $ref: `#/components/schemas/${name}`,\n name,\n schema: this.context.ir.components.schemas[name]!,\n type: 'schema',\n };\n try {\n callback(event as WalkEvent<T>);\n } catch (error) {\n this.forEachError(error, event);\n }\n }\n }\n\n if (eventSet.has('parameter') && this.context.ir.components?.parameters) {\n for (const name in this.context.ir.components.parameters) {\n const event: WalkEvent<'parameter'> = {\n $ref: `#/components/parameters/${name}`,\n name,\n parameter: this.context.ir.components.parameters[name]!,\n type: 'parameter',\n };\n try {\n callback(event as WalkEvent<T>);\n } catch (error) {\n this.forEachError(error, event);\n }\n }\n }\n\n if (\n eventSet.has('requestBody') &&\n this.context.ir.components?.requestBodies\n ) {\n for (const name in this.context.ir.components.requestBodies) {\n const event: WalkEvent<'requestBody'> = {\n $ref: `#/components/requestBodies/${name}`,\n name,\n requestBody: this.context.ir.components.requestBodies[name]!,\n type: 'requestBody',\n };\n try {\n callback(event as WalkEvent<T>);\n } catch (error) {\n this.forEachError(error, event);\n }\n }\n }\n\n if (eventSet.has('operation') && this.context.ir.paths) {\n for (const path in this.context.ir.paths) {\n const pathItem =\n this.context.ir.paths[path as keyof typeof this.context.ir.paths];\n for (const _method in pathItem) {\n const method = _method as keyof typeof pathItem;\n const event: WalkEvent<'operation'> = {\n method,\n operation: pathItem[method]!,\n path,\n type: 'operation',\n };\n try {\n callback(event as WalkEvent<T>);\n } catch (error) {\n this.forEachError(error, event);\n }\n }\n }\n }\n }\n\n private forEachError(error: unknown, event: WalkEvent) {\n const originalError =\n error instanceof Error ? error : new Error(String(error));\n throw new HeyApiError({\n args: [event],\n error: originalError,\n event: event.type,\n name: 'Error',\n pluginName: this.name,\n });\n }\n\n /**\n * Retrieves a registered plugin instance by its name from the context. This\n * allows plugins to access other plugins that have been registered in the\n * same context, enabling cross-plugin communication and dependencies.\n *\n * @param name Plugin name as defined in the configuration.\n * @returns The plugin instance if found, undefined otherwise.\n */\n public getPlugin<T extends keyof PluginConfigMap>(\n name: T,\n ): T extends any ? PluginInstance<PluginConfigMap[T]> | undefined : never {\n return this.context.plugins[name] as any;\n }\n\n /**\n * Executes plugin's handler function.\n */\n public async run() {\n await this.handler({ plugin: this });\n }\n}\n","import path from 'node:path';\n\nimport { TypeScriptFile } from '../generate/files';\nimport type { PluginConfigMap } from '../plugins/config';\nimport { PluginInstance } from '../plugins/shared/utils/instance';\nimport type { PluginNames } from '../plugins/types';\nimport type { StringCase } from '../types/case';\nimport type { Config } from '../types/config';\nimport type { Files } from '../types/utils';\nimport { resolveRef } from '../utils/ref';\nimport type { IR } from './types';\n\nexport interface ContextFile {\n /**\n * Should the exports from this file be re-exported in the index barrel file?\n */\n exportFromIndex?: boolean;\n /**\n * Unique file identifier.\n */\n id: string;\n /**\n * Define casing for identifiers in this file.\n */\n identifierCase?: StringCase;\n /**\n * Relative file path to the output path.\n *\n * @example\n * 'bar/foo.ts'\n */\n path: string;\n}\n\nexport class IRContext<Spec extends Record<string, any> = any> {\n /**\n * Configuration for parsing and generating the output. This\n * is a mix of user-provided and default values.\n */\n public config: Config;\n /**\n * A map of files that will be generated from `spec`.\n */\n public files: Files = {};\n /**\n * Intermediate representation model obtained from `spec`.\n */\n public ir: IR.Model = {};\n /**\n * A map of registered plugin instances, keyed by plugin name. Plugins are\n * registered through the `registerPlugin` method and can be accessed by\n * their configured name from the config.\n */\n public plugins: Partial<\n Record<PluginNames, PluginInstance<PluginConfigMap[keyof PluginConfigMap]>>\n > = {};\n /**\n * Resolved specification from `input`.\n */\n public spec: Spec;\n\n constructor({ config, spec }: { config: Config; spec: Spec }) {\n this.config = config;\n this.spec = spec;\n }\n\n /**\n * Create and return a new TypeScript file. Also set the current file context\n * to the newly created file.\n */\n public createFile(file: ContextFile): TypeScriptFile {\n // TODO: parser - handle attempt to create duplicate\n const outputParts = file.path.split('/');\n const outputDir = path.resolve(\n this.config.output.path,\n ...outputParts.slice(0, outputParts.length - 1),\n );\n const createdFile = new TypeScriptFile({\n dir: outputDir,\n exportFromIndex: file.exportFromIndex,\n id: file.id,\n identifierCase: file.identifierCase,\n name: `${outputParts[outputParts.length - 1]}.ts`,\n });\n this.files[file.id] = createdFile;\n return createdFile;\n }\n\n /**\n * Returns a resolved and dereferenced schema from `spec`.\n */\n public dereference<T>(schema: { $ref: string }) {\n const resolved = this.resolveRef<T>(schema.$ref);\n const dereferenced = {\n ...schema,\n ...resolved,\n } as T;\n // @ts-expect-error\n delete dereferenced.$ref;\n return dereferenced;\n }\n\n /**\n * Returns a specific file by ID from `files`.\n */\n public file({ id }: Pick<ContextFile, 'id'>): TypeScriptFile | undefined {\n return this.files[id];\n }\n\n /**\n * Registers a new plugin to the global context.\n *\n * @param name Plugin name.\n * @returns Registered plugin instance.\n */\n private registerPlugin<T extends PluginNames>(\n name: T,\n ): PluginInstance<PluginConfigMap[T]> {\n const plugin = this.config.plugins[name]!;\n const instance = new PluginInstance({\n api: plugin.api,\n config: plugin.config as any,\n context: this as any,\n dependencies: plugin.dependencies ?? [],\n handler: plugin.handler,\n name: plugin.name,\n output: plugin.output!,\n });\n this.plugins[instance.name] = instance;\n return instance;\n }\n\n /**\n * Registers all plugins in the order specified by the configuration and returns\n * an array of the registered PluginInstance objects. Each plugin is instantiated\n * and added to the context's plugins map.\n *\n * @returns {ReadonlyArray<PluginInstance>} An array of registered plugin instances in order.\n */\n public registerPlugins(): ReadonlyArray<PluginInstance> {\n return this.config.pluginOrder.map((name) => this.registerPlugin(name));\n }\n\n // TODO: parser - works the same as resolveRef, but for IR schemas.\n // for now, they map 1:1, but if they diverge (like with OpenAPI 2.0),\n // we will want to rewrite $refs at parse time, so they continue pointing\n // to the correct IR location\n public resolveIrRef<T>($ref: string) {\n return resolveRef<T>({\n $ref,\n spec: this.ir,\n });\n }\n\n /**\n * Returns a resolved reference from `spec`.\n */\n public resolveRef<T>($ref: string) {\n return resolveRef<T>({\n $ref,\n spec: this.spec,\n });\n }\n}\n","import type { Pagination } from './pagination';\nimport type { IR } from './types';\n\nconst getPaginationSchema = ({\n context,\n parameter,\n}: {\n context: IR.Context;\n parameter: IR.ParameterObject;\n}): IR.SchemaObject | undefined => {\n if (!parameter.pagination) {\n return;\n }\n\n if (parameter.pagination === true) {\n return parameter.schema;\n }\n\n let schema = parameter.schema;\n if (schema.$ref) {\n schema = context.resolveIrRef<IR.SchemaObject>(schema.$ref);\n }\n\n return schema.properties![parameter.pagination]!;\n};\n\nexport const hasParameterGroupObjectRequired = (\n parameterGroup?: Record<string, IR.ParameterObject>,\n): boolean => {\n for (const name in parameterGroup) {\n if (parameterGroup[name]!.required) {\n return true;\n }\n }\n\n return false;\n};\n\nexport const hasParametersObjectRequired = (\n parameters: IR.ParametersObject | undefined,\n): boolean => {\n if (!parameters) {\n return false;\n }\n\n if (hasParameterGroupObjectRequired(parameters.cookie)) {\n return true;\n }\n\n if (hasParameterGroupObjectRequired(parameters.header)) {\n return true;\n }\n\n if (hasParameterGroupObjectRequired(parameters.path)) {\n return true;\n }\n\n if (hasParameterGroupObjectRequired(parameters.query)) {\n return true;\n }\n\n return false;\n};\n\nexport const parameterWithPagination = ({\n context,\n parameters,\n}: {\n context: IR.Context;\n parameters: IR.ParametersObject | undefined;\n}): Pagination | undefined => {\n if (!parameters) {\n return;\n }\n\n for (const name in parameters.cookie) {\n const parameter = parameters.cookie[name]!;\n if (parameter.pagination) {\n return {\n in: parameter.location,\n name:\n parameter.pagination === true\n ? name\n : `${name}.${parameter.pagination}`,\n schema: getPaginationSchema({ context, parameter })!,\n };\n }\n }\n\n for (const name in parameters.header) {\n const parameter = parameters.header[name]!;\n if (parameter.pagination) {\n return {\n in: parameter.location,\n name:\n parameter.pagination === true\n ? name\n : `${name}.${parameter.pagination}`,\n schema: getPaginationSchema({ context, parameter })!,\n };\n }\n }\n\n for (const name in parameters.path) {\n const parameter = parameters.path[name]!;\n if (parameter.pagination) {\n return {\n in: parameter.location,\n name:\n parameter.pagination === true\n ? name\n : `${name}.${parameter.pagination}`,\n schema: getPaginationSchema({ context, parameter })!,\n };\n }\n }\n\n for (const name in parameters.query) {\n const parameter = parameters.query[name]!;\n if (parameter.pagination) {\n return {\n in: parameter.location,\n name:\n parameter.pagination === true\n ? name\n : `${name}.${parameter.pagination}`,\n schema: getPaginationSchema({ context, parameter })!,\n };\n }\n }\n\n return;\n};\n","import type { IR } from './types';\n\n/**\n * Ensure we don't produce redundant types, e.g. string | string.\n */\nexport const deduplicateSchema = <T extends IR.SchemaObject>({\n detectFormat = true,\n schema,\n}: {\n detectFormat?: boolean;\n schema: T;\n}): T => {\n if (!schema.items) {\n return schema;\n }\n\n const uniqueItems: Array<IR.SchemaObject> = [];\n const typeIds: Array<string> = [];\n\n for (const item of schema.items) {\n // skip nested schemas for now, handle if necessary\n if ((!item.type && item.items) || schema.type === 'tuple') {\n uniqueItems.push(item);\n continue;\n }\n\n if (\n // no `type` might still include `$ref` or `const`\n !item.type ||\n item.type === 'boolean' ||\n item.type === 'integer' ||\n item.type === 'null' ||\n item.type === 'number' ||\n item.type === 'string' ||\n item.type === 'unknown' ||\n item.type === 'void'\n ) {\n // const needs namespace to handle empty string values, otherwise\n // fallback would equal an actual value and we would skip an item\n const constant = item.const !== undefined ? `const-${item.const}` : '';\n const format =\n item.format !== undefined && detectFormat\n ? `format-${item.format}`\n : '';\n const typeId = `${item.$ref ?? ''}${item.type ?? ''}${constant}${format}`;\n if (!typeIds.includes(typeId)) {\n typeIds.push(typeId);\n uniqueItems.push(item);\n }\n continue;\n }\n\n uniqueItems.push(item);\n }\n\n let result = { ...schema };\n result.items = uniqueItems;\n\n if (\n result.items.length <= 1 &&\n result.type !== 'array' &&\n result.type !== 'enum' &&\n result.type !== 'tuple'\n ) {\n // bring the only item up to clean up the schema\n const liftedSchema = result.items[0];\n delete result.logicalOperator;\n delete result.items;\n result = {\n ...result,\n ...liftedSchema,\n };\n }\n\n // exclude unknown if it's the only type left\n if (result.type === 'unknown') {\n return {} as T;\n }\n\n return result;\n};\n","export const deepClone = <T>(obj: T): T => JSON.parse(JSON.stringify(obj));\n\n/**\n * Accepts `accessScopes` from two schemas and returns a merged and\n * deduplicated value.\n */\nexport const mergeSchemaAccessScopes = (\n a: ReadonlyArray<'both' | 'read' | 'write'> | undefined,\n b: ReadonlyArray<'both' | 'read' | 'write'> | undefined,\n): ReadonlyArray<'both' | 'read' | 'write'> | undefined => {\n if (!a?.length) {\n return b?.length ? b : undefined;\n }\n\n if (!b?.length) {\n return a;\n }\n\n const mergedScopes = new Set(a);\n\n for (const scope of b) {\n mergedScopes.add(scope);\n }\n\n return mergedScopes.size > a.length ? Array.from(mergedScopes) : a;\n};\n","import { mergeSchemaAccessScopes } from '../openApi/shared/utils/schema';\nimport type { IR } from './types';\n\nconst assignItems = ({\n items,\n schema,\n}: {\n items: Array<IR.SchemaObject>;\n schema: IR.SchemaObject;\n}) => {\n for (const item of items) {\n schema.accessScopes = mergeSchemaAccessScopes(\n schema.accessScopes,\n item.accessScopes,\n );\n }\n schema.items = items;\n};\n\n/**\n * Simply adds `items` to the schema. Also handles setting the logical operator\n * and avoids setting it for a single item or tuples.\n */\nexport const addItemsToSchema = ({\n items,\n logicalOperator = 'or',\n mutateSchemaOneItem = false,\n schema,\n}: {\n items: Array<IR.SchemaObject>;\n logicalOperator?: IR.SchemaObject['logicalOperator'];\n mutateSchemaOneItem?: boolean;\n schema: IR.SchemaObject;\n}) => {\n if (!items.length) {\n return schema;\n }\n\n if (schema.type === 'tuple') {\n assignItems({ items, schema });\n return schema;\n }\n\n if (items.length !== 1) {\n assignItems({ items, schema });\n schema.logicalOperator = logicalOperator;\n return schema;\n }\n\n if (mutateSchemaOneItem) {\n // bring composition up to avoid extraneous brackets\n schema = {\n ...schema,\n ...items[0],\n };\n return schema;\n }\n\n assignItems({ items, schema });\n return schema;\n};\n","import type { Pagination } from './pagination';\nimport {\n hasParametersObjectRequired,\n parameterWithPagination,\n} from './parameter';\nimport { deduplicateSchema } from './schema';\nimport type { IR } from './types';\nimport { addItemsToSchema } from './utils';\n\nexport const hasOperationDataRequired = (\n operation: IR.OperationObject,\n): boolean => {\n if (hasParametersObjectRequired(operation.parameters)) {\n return true;\n }\n\n if (operation.body?.required) {\n return true;\n }\n\n return false;\n};\n\nexport const createOperationKey = ({\n method,\n path,\n}: {\n method: string;\n path: string;\n}) => `${method.toUpperCase()} ${path}`;\n\nexport const operationPagination = ({\n context,\n operation,\n}: {\n context: IR.Context;\n operation: IR.OperationObject;\n}): Pagination | undefined => {\n const body = operation.body;\n\n if (!body || !body.pagination) {\n return parameterWithPagination({\n context,\n parameters: operation.parameters,\n });\n }\n\n if (body.pagination === true) {\n return {\n in: 'body',\n name: 'body',\n schema: body.schema,\n };\n }\n\n const schema = body.schema;\n const resolvedSchema = schema.$ref\n ? context.resolveIrRef<IR.RequestBodyObject | IR.SchemaObject>(schema.$ref)\n : schema;\n\n const finalSchema =\n 'schema' in resolvedSchema ? resolvedSchema.schema : resolvedSchema;\n const paginationProp = finalSchema?.properties?.[body.pagination];\n\n if (!paginationProp) {\n return parameterWithPagination({\n context,\n parameters: operation.parameters,\n });\n }\n\n return {\n in: 'body',\n name: body.pagination,\n schema: paginationProp,\n };\n};\n\ntype StatusGroup = '1XX' | '2XX' | '3XX' | '4XX' | '5XX' | 'default';\n\nexport const statusCodeToGroup = ({\n statusCode,\n}: {\n statusCode: string;\n}): StatusGroup => {\n switch (statusCode) {\n case '1XX':\n return '1XX';\n case '2XX':\n return '2XX';\n case '3XX':\n return '3XX';\n case '4XX':\n return '4XX';\n case '5XX':\n return '5XX';\n case 'default':\n return 'default';\n default:\n return `${statusCode[0]}XX` as StatusGroup;\n }\n};\n\ninterface OperationResponsesMap {\n /**\n * A deduplicated union of all error types. Unknown types are omitted.\n */\n error?: IR.SchemaObject;\n /**\n * An object containing a map of status codes for each error type.\n */\n errors?: IR.SchemaObject;\n /**\n * A deduplicated union of all response types. Unknown types are omitted.\n */\n response?: IR.SchemaObject;\n /**\n * An object containing a map of status codes for each response type.\n */\n responses?: IR.SchemaObject;\n}\n\nexport const operationResponsesMap = (\n operation: IR.OperationObject,\n): OperationResponsesMap => {\n const result: OperationResponsesMap = {};\n\n if (!operation.responses) {\n return result;\n }\n\n const errors: Omit<IR.SchemaObject, 'properties'> &\n Pick<Required<IR.SchemaObject>, 'properties'> = {\n properties: {},\n type: 'object',\n };\n\n const responses: Omit<IR.SchemaObject, 'properties'> &\n Pick<Required<IR.SchemaObject>, 'properties'> = {\n properties: {},\n type: 'object',\n };\n\n // store default response to be evaluated last\n let defaultResponse: IR.ResponseObject | undefined;\n\n for (const name in operation.responses) {\n const response = operation.responses[name]!;\n\n switch (statusCodeToGroup({ statusCode: name })) {\n case '1XX':\n case '3XX':\n // TODO: parser - handle informational and redirection status codes\n break;\n case '2XX':\n responses.properties[name] = response.schema;\n break;\n case '4XX':\n case '5XX':\n errors.properties[name] = response.schema;\n break;\n case 'default':\n defaultResponse = response;\n break;\n }\n }\n\n // infer default response type\n if (defaultResponse) {\n let inferred = false;\n\n // assume default is intended for success if none exists yet\n if (!Object.keys(responses.properties).length) {\n responses.properties.default = defaultResponse.schema;\n inferred = true;\n }\n\n const description = (\n defaultResponse.schema.description ?? ''\n ).toLocaleLowerCase();\n const $ref = (defaultResponse.schema.$ref ?? '').toLocaleLowerCase();\n\n // TODO: parser - this could be rewritten using regular expressions\n const successKeywords = ['success'];\n if (\n successKeywords.some(\n (keyword) => description.includes(keyword) || $ref.includes(keyword),\n )\n ) {\n responses.properties.default = defaultResponse.schema;\n inferred = true;\n }\n\n // TODO: parser - this could be rewritten using regular expressions\n const errorKeywords = ['error', 'problem'];\n if (\n errorKeywords.some(\n (keyword) => description.includes(keyword) || $ref.includes(keyword),\n )\n ) {\n errors.properties.default = defaultResponse.schema;\n inferred = true;\n }\n\n // if no keyword match, assume default schema is intended for error\n if (!inferred) {\n errors.properties.default = defaultResponse.schema;\n }\n }\n\n const errorKeys = Object.keys(errors.properties);\n if (errorKeys.length) {\n errors.required = errorKeys;\n result.errors = errors;\n\n let errorUnion = addItemsToSchema({\n items: Object.values(errors.properties),\n mutateSchemaOneItem: true,\n schema: {},\n });\n errorUnion = deduplicateSchema({ schema: errorUnion });\n if (Object.keys(errorUnion).length && errorUnion.type !== 'unknown') {\n result.error = errorUnion;\n }\n }\n\n const responseKeys = Object.keys(responses.properties);\n if (responseKeys.length) {\n responses.required = responseKeys;\n result.responses = responses;\n\n let responseUnion = addItemsToSchema({\n items: Object.values(responses.properties),\n mutateSchemaOneItem: true,\n schema: {},\n });\n responseUnion = deduplicateSchema({ schema: responseUnion });\n if (Object.keys(responseUnion).length && responseUnion.type !== 'unknown') {\n result.response = responseUnion;\n }\n }\n\n return result;\n};\n","import { illegalStartCharactersRegExp } from '../../../utils/regexp';\n\nexport const ensureValidTypeScriptJavaScriptIdentifier = (name: string) => {\n const replaced = name.replace(/[^$\\u200c\\u200d\\p{ID_Continue}]/gu, '_');\n illegalStartCharactersRegExp.lastIndex = 0;\n const startsWithIllegalCharacter =\n illegalStartCharactersRegExp.test(replaced);\n const valid = startsWithIllegalCharacter ? `_${replaced}` : replaced;\n return valid;\n};\n\n/**\n * Sanitizes namespace identifiers so they are valid TypeScript identifiers of a certain form.\n *\n * 1: Remove any leading characters that are illegal as starting character of a typescript identifier.\n * 2: Replace illegal characters in remaining part of type name with hyphen (-).\n *\n * Step 1 should perhaps instead also replace illegal characters with underscore, or prefix with it, like sanitizeEnumName\n * does. The way this is now one could perhaps end up removing all characters, if all are illegal start characters. It\n * would be sort of a breaking change to do so, though, previously generated code might change then.\n *\n * JavaScript identifier regexp pattern retrieved from https://developer.mozilla.org/docs/Web/JavaScript/Reference/Lexical_grammar#identifiers\n *\n * The output of this is expected to be converted to PascalCase\n */\nexport const sanitizeNamespaceIdentifier = (name: string) =>\n name\n .replace(/^[^\\p{ID_Start}]+/u, '')\n .replace(/[^$\\u200c\\u200d\\p{ID_Continue}]/gu, '-')\n .replace(/[$+]/g, '-');\n\nexport const sanitizeOperationParameterName = (name: string) => {\n const withoutBrackets = name.replace('[]', 'Array');\n return sanitizeNamespaceIdentifier(withoutBrackets);\n};\n","import { createOperationKey } from '../../../ir/operation';\nimport type { IR } from '../../../ir/types';\nimport { stringCase } from '../../../utils/stringCase';\nimport { sanitizeNamespaceIdentifier } from '../../common/parser/sanitize';\nimport type { State } from '../types/state';\n\nexport const httpMethods = [\n 'delete',\n 'get',\n 'head',\n 'options',\n 'patch',\n 'post',\n 'put',\n 'trace',\n] as const;\n\n/**\n * Returns an operation ID to use across the application. By default, we try\n * to use the provided ID. If it's not provided or the SDK is configured\n * to exclude it, we generate operation ID from its location.\n */\nexport const operationToId = ({\n context,\n count = 1,\n id,\n method,\n path,\n state,\n}: {\n context: IR.Context;\n count?: number;\n id: string | undefined;\n method: string;\n path: string;\n state: Pick<State, 'ids'>;\n}): string => {\n let result: string;\n\n if (\n id &&\n (!context.config.plugins['@hey-api/sdk'] ||\n context.config.plugins['@hey-api/sdk'].config.operationId)\n ) {\n result = stringCase({\n case: 'camelCase',\n value: sanitizeNamespaceIdentifier(id),\n });\n } else {\n const urlWithoutPlaceholders = path\n .replace(/{(.*?)}/g, 'by-$1')\n // replace slashes with hyphens for camelcase method at the end\n .replace(/[/:+]/g, '-');\n\n result = stringCase({\n case: 'camelCase',\n value: `${method}-${urlWithoutPlaceholders}`,\n });\n }\n\n if (count > 1) {\n result = `${result}${count}`;\n }\n\n if (state.ids.has(result)) {\n return operationToId({\n context,\n count: count + 1,\n id,\n method,\n path,\n state,\n });\n }\n\n state.ids.set(result, createOperationKey({ method, path }));\n\n return result;\n};\n","import { createOperationKey } from '../../../ir/operation';\nimport type { Config } from '../../../types/config';\nimport type { PathItemObject, PathsObject } from '../../3.1.x/types/spec';\nimport type { OpenApi } from '../../types';\nimport type { ResourceMetadata } from '../graph/meta';\nimport { httpMethods } from './operation';\n\ntype FilterNamespace =\n | 'body'\n | 'operation'\n | 'parameter'\n | 'response'\n | 'schema'\n | 'unknown';\n\nconst namespaceNeedle = '/';\n\nexport const addNamespace = (\n namespace: FilterNamespace,\n value: string = '',\n): string => `${namespace}${namespaceNeedle}${value}`;\n\nexport const removeNamespace = (\n key: string,\n): {\n name: string;\n namespace: FilterNamespace;\n} => {\n const index = key.indexOf(namespaceNeedle);\n const name = key.slice(index + 1);\n return {\n name,\n namespace: key.slice(0, index)! as FilterNamespace,\n };\n};\n\n/**\n * Converts reference strings from OpenAPI $ref keywords into namespaces.\n *\n * @example '#/components/schemas/Foo' -> 'schema'\n */\nexport const stringToNamespace = (value: string): FilterNamespace => {\n switch (value) {\n case 'parameters':\n return 'parameter';\n case 'requestBodies':\n return 'body';\n case 'responses':\n return 'response';\n case 'definitions':\n case 'schemas':\n return 'schema';\n default:\n return 'unknown';\n }\n};\n\ntype FiltersConfigToState<T> = {\n [K in keyof T]-?: NonNullable<T[K]> extends ReadonlyArray<infer U>\n ? Set<U>\n : NonNullable<T[K]> extends object\n ? FiltersConfigToState<NonNullable<T[K]>>\n : T[K];\n};\n\nexport type Filters = FiltersConfigToState<\n NonNullable<Config['parser']['filters']>\n>;\n\ninterface SetAndRegExps {\n regexps: Array<RegExp>;\n set: Set<string>;\n}\n\nconst createFiltersSetAndRegExps = (\n type: FilterNamespace,\n filters: ReadonlyArray<string> | undefined,\n): SetAndRegExps => {\n const keys: Array<string> = [];\n const regexps: Array<RegExp> = [];\n if (filters) {\n for (const value of filters) {\n if (value.startsWith('/') && value.endsWith('/')) {\n regexps.push(new RegExp(value.slice(1, value.length - 1)));\n } else {\n keys.push(addNamespace(type, value));\n }\n }\n }\n return {\n regexps,\n set: new Set(keys),\n };\n};\n\ninterface CollectFiltersSetFromRegExps {\n excludeOperations: SetAndRegExps;\n excludeParameters: SetAndRegExps;\n excludeRequestBodies: SetAndRegExps;\n excludeResponses: SetAndRegExps;\n excludeSchemas: SetAndRegExps;\n includeOperations: SetAndRegExps;\n includeParameters: SetAndRegExps;\n includeRequestBodies: SetAndRegExps;\n includeResponses: SetAndRegExps;\n includeSchemas: SetAndRegExps;\n}\n\nconst collectFiltersSetFromRegExpsOpenApiV2 = ({\n excludeOperations,\n excludeSchemas,\n includeOperations,\n includeSchemas,\n spec,\n}: CollectFiltersSetFromRegExps & {\n spec: OpenApi.V2_0_X;\n}) => {\n if (\n (excludeOperations.regexps.length || includeOperations.regexps.length) &&\n spec.paths\n ) {\n for (const entry of Object.entries(spec.paths)) {\n const path = entry[0] as keyof PathsObject;\n const pathItem = entry[1] as PathItemObject;\n for (const method of httpMethods) {\n const operation = pathItem[method];\n if (!operation) {\n continue;\n }\n\n const key = createOperationKey({ method, path });\n if (excludeOperations.regexps.some((regexp) => regexp.test(key))) {\n excludeOperations.set.add(addNamespace('operation', key));\n }\n if (includeOperations.regexps.some((regexp) => regexp.test(key))) {\n includeOperations.set.add(addNamespace('operation', key));\n }\n }\n }\n }\n\n if (spec.definitions) {\n // TODO: add parameters\n\n if (excludeSchemas.regexps.length || includeSchemas.regexps.length) {\n for (const key of Object.keys(spec.definitions)) {\n if (excludeSchemas.regexps.some((regexp) => regexp.test(key))) {\n excludeSchemas.set.add(addNamespace('schema', key));\n }\n if (includeSchemas.regexps.some((regexp) => regexp.test(key))) {\n includeSchemas.set.add(addNamespace('schema', key));\n }\n }\n }\n }\n};\n\nconst collectFiltersSetFromRegExpsOpenApiV3 = ({\n excludeOperations,\n excludeParameters,\n excludeRequestBodies,\n excludeResponses,\n excludeSchemas,\n includeOperations,\n includeParameters,\n includeRequestBodies,\n includeResponses,\n includeSchemas,\n spec,\n}: CollectFiltersSetFromRegExps & {\n spec: OpenApi.V3_0_X | OpenApi.V3_1_X;\n}) => {\n if (\n (excludeOperations.regexps.length || includeOperations.regexps.length) &&\n spec.paths\n ) {\n for (const entry of Object.entries(spec.paths)) {\n const path = entry[0] as keyof PathsObject;\n const pathItem = entry[1] as PathItemObject;\n for (const method of httpMethods) {\n const operation = pathItem[method];\n if (!operation) {\n continue;\n }\n\n const key = createOperationKey({ method, path });\n if (excludeOperations.regexps.some((regexp) => regexp.test(key))) {\n excludeOperations.set.add(addNamespace('operation', key));\n }\n if (includeOperations.regexps.some((regexp) => regexp.test(key))) {\n includeOperations.set.add(addNamespace('operation', key));\n }\n }\n }\n }\n\n if (spec.components) {\n if (\n (excludeParameters.regexps.length || includeParameters.regexps.length) &&\n spec.components.parameters\n ) {\n for (const key of Object.keys(spec.components.parameters)) {\n if (excludeParameters.regexps.some((regexp) => regexp.test(key))) {\n excludeParameters.set.add(addNamespace('parameter', key));\n }\n if (includeParameters.regexps.some((regexp) => regexp.test(key))) {\n includeParameters.set.add(addNamespace('parameter', key));\n }\n }\n }\n\n if (\n (excludeRequestBodies.regexps.length ||\n includeRequestBodies.regexps.length) &&\n spec.components.requestBodies\n ) {\n for (const key of Object.keys(spec.components.requestBodies)) {\n if (excludeRequestBodies.regexps.some((regexp) => regexp.test(key))) {\n excludeRequestBodies.set.add(addNamespace('body', key));\n }\n if (includeRequestBodies.regexps.some((regexp) => regexp.test(key))) {\n includeRequestBodies.set.add(addNamespace('body', key));\n }\n }\n }\n\n if (\n (excludeResponses.regexps.length || includeResponses.regexps.length) &&\n spec.components.responses\n ) {\n for (const key of Object.keys(spec.components.responses)) {\n if (excludeResponses.regexps.some((regexp) => regexp.test(key))) {\n excludeResponses.set.add(addNamespace('response', key));\n }\n if (includeResponses.regexps.some((regexp) => regexp.test(key))) {\n includeResponses.set.add(addNamespace('response', key));\n }\n }\n }\n\n if (\n (excludeSchemas.regexps.length || includeSchemas.regexps.length) &&\n spec.components.schemas\n ) {\n for (const key of Object.keys(spec.components.schemas)) {\n if (excludeSchemas.regexps.some((regexp) => regexp.test(key))) {\n excludeSchemas.set.add(addNamespace('schema', key));\n }\n if (includeSchemas.regexps.some((regexp) => regexp.test(key))) {\n includeSchemas.set.add(addNamespace('schema', key));\n }\n }\n }\n }\n};\n\nconst collectFiltersSetFromRegExps = ({\n spec,\n ...filters\n}: CollectFiltersSetFromRegExps & {\n spec: OpenApi.V2_0_X | OpenApi.V3_0_X | OpenApi.V3_1_X;\n}): void => {\n if ('swagger' in spec) {\n collectFiltersSetFromRegExpsOpenApiV2({ ...filters, spec });\n } else {\n collectFiltersSetFromRegExpsOpenApiV3({ ...filters, spec });\n }\n};\n\nexport const createFilters = (\n config: Config['parser']['filters'],\n spec: OpenApi.V2_0_X | OpenApi.V3_0_X | OpenApi.V3_1_X,\n): Filters => {\n const excludeOperations = createFiltersSetAndRegExps(\n 'operation',\n config?.operations?.exclude,\n );\n const includeOperations = createFiltersSetAndRegExps(\n 'operation',\n config?.operations?.include,\n );\n const excludeParameters = createFiltersSetAndRegExps(\n 'parameter',\n config?.parameters?.exclude,\n );\n const includeParameters = createFiltersSetAndRegExps(\n 'parameter',\n config?.parameters?.include,\n );\n const excludeRequestBodies = createFiltersSetAndRegExps(\n 'body',\n config?.requestBodies?.exclude,\n );\n const includeRequestBodies = createFiltersSetAndRegExps(\n 'body',\n config?.requestBodies?.include,\n );\n const excludeResponses = createFiltersSetAndRegExps(\n 'response',\n config?.responses?.exclude,\n );\n const includeResponses = createFiltersSetAndRegExps(\n 'response',\n config?.responses?.include,\n );\n const excludeSchemas = createFiltersSetAndRegExps(\n 'schema',\n config?.schemas?.exclude,\n );\n const includeSchemas = createFiltersSetAndRegExps(\n 'schema',\n config?.schemas?.include,\n );\n\n collectFiltersSetFromRegExps({\n excludeOperations,\n excludeParameters,\n excludeRequestBodies,\n excludeResponses,\n excludeSchemas,\n includeOperations,\n includeParameters,\n includeRequestBodies,\n includeResponses,\n includeSchemas,\n spec,\n });\n\n const filters: Filters = {\n deprecated: config?.deprecated ?? true,\n operations: {\n exclude: excludeOperations.set,\n include: includeOperations.set,\n },\n orphans: config?.orphans ?? false,\n parameters: {\n exclude: excludeParameters.set,\n include: includeParameters.set,\n },\n preserveOrder: config?.preserveOrder ?? false,\n requestBodies: {\n exclude: excludeRequestBodies.set,\n include: includeRequestBodies.set,\n },\n responses: {\n exclude: excludeResponses.set,\n include: includeResponses.set,\n },\n schemas: {\n exclude: excludeSchemas.set,\n include: includeSchemas.set,\n },\n tags: {\n exclude: new Set(config?.tags?.exclude),\n include: new Set(config?.tags?.include),\n },\n };\n return filters;\n};\n\nexport const hasFilters = (config: Config['parser']['filters']): boolean => {\n if (!config) {\n return false;\n }\n\n // we explicitly want to strip orphans or deprecated\n if (config.orphans === false || config.deprecated === false) {\n return true;\n }\n\n return Boolean(\n config.operations?.exclude?.length ||\n config.operations?.include?.length ||\n config.parameters?.exclude?.length ||\n config.parameters?.include?.length ||\n config.requestBodies?.exclude?.length ||\n config.requestBodies?.include?.length ||\n config.responses?.exclude?.length ||\n config.responses?.include?.length ||\n config.schemas?.exclude?.length ||\n config.schemas?.include?.length ||\n config.tags?.exclude?.length ||\n config.tags?.include?.length,\n );\n};\n\n/**\n * Collect operations that satisfy the include/exclude filters and schema dependencies.\n */\nconst collectOperations = ({\n filters,\n parameters,\n requestBodies,\n resourceMetadata,\n responses,\n schemas,\n}: {\n filters: Filters;\n parameters: Set<string>;\n requestBodies: Set<string>;\n resourceMetadata: ResourceMetadata;\n responses: Set<string>;\n schemas: Set<string>;\n}): {\n operations: Set<string>;\n} => {\n const finalSet = new Set<string>();\n const initialSet = filters.operations.include.size\n ? filters.operations.include\n : new Set(resourceMetadata.operations.keys());\n const stack = [...initialSet];\n while (stack.length) {\n const key = stack.pop()!;\n\n if (filters.operations.exclude.has(key) || finalSet.has(key)) {\n continue;\n }\n\n const node = resourceMetadata.operations.get(key);\n\n if (!node) {\n continue;\n }\n\n if (!filters.deprecated && node.deprecated) {\n continue;\n }\n\n if (\n filters.tags.exclude.size &&\n node.tags.size &&\n [...filters.tags.exclude].some((tag) => node.tags.has(tag))\n ) {\n continue;\n }\n\n if (\n filters.tags.include.size &&\n !new Set([...filters.tags.include].filter((tag) => node.tags.has(tag)))\n .size\n ) {\n continue;\n }\n\n // skip operation if it references any component not included\n if (\n [...node.dependencies].some((dependency) => {\n const { namespace } = removeNamespace(dependency);\n switch (namespace) {\n case 'body':\n return !requestBodies.has(dependency);\n case 'parameter':\n return !parameters.has(dependency);\n case 'response':\n return !responses.has(dependency);\n case 'schema':\n return !schemas.has(dependency);\n default:\n return false;\n }\n })\n ) {\n continue;\n }\n\n finalSet.add(key);\n }\n return { operations: finalSet };\n};\n\n/**\n * Collect parameters that satisfy the include/exclude filters and schema dependencies.\n */\nconst collectParameters = ({\n filters,\n resourceMetadata,\n schemas,\n}: {\n filters: Filters;\n resourceMetadata: ResourceMetadata;\n schemas: Set<string>;\n}): {\n parameters: Set<string>;\n} => {\n const finalSet = new Set<string>();\n const initialSet = filters.parameters.include.size\n ? filters.parameters.include\n : new Set(resourceMetadata.parameters.keys());\n const stack = [...initialSet];\n while (stack.length) {\n const key = stack.pop()!;\n\n if (filters.parameters.exclude.has(key) || finalSet.has(key)) {\n continue;\n }\n\n const node = resourceMetadata.parameters.get(key);\n\n if (!node) {\n continue;\n }\n\n if (!filters.deprecated && node.deprecated) {\n continue;\n }\n\n finalSet.add(key);\n\n if (!node.dependencies.size) {\n continue;\n }\n\n for (const dependency of node.dependencies) {\n const { namespace } = removeNamespace(dependency);\n switch (namespace) {\n case 'body': {\n if (filters.requestBodies.exclude.has(dependency)) {\n finalSet.delete(key);\n } else if (!finalSet.has(dependency)) {\n stack.push(dependency);\n }\n break;\n }\n case 'schema': {\n if (filters.schemas.exclude.has(dependency)) {\n finalSet.delete(key);\n } else if (!schemas.has(dependency)) {\n schemas.add(dependency);\n }\n break;\n }\n }\n }\n }\n return { parameters: finalSet };\n};\n\n/**\n * Collect request bodies that satisfy the include/exclude filters and schema dependencies.\n */\nconst collectRequestBodies = ({\n filters,\n resourceMetadata,\n schemas,\n}: {\n filters: Filters;\n resourceMetadata: ResourceMetadata;\n schemas: Set<string>;\n}): {\n requestBodies: Set<string>;\n} => {\n const finalSet = new Set<string>();\n const initialSet = filters.requestBodies.include.size\n ? filters.requestBodies.include\n : new Set(resourceMetadata.requestBodies.keys());\n const stack = [...initialSet];\n while (stack.length) {\n const key = stack.pop()!;\n\n if (filters.requestBodies.exclude.has(key) || finalSet.has(key)) {\n continue;\n }\n\n const node = resourceMetadata.requestBodies.get(key);\n\n if (!node) {\n continue;\n }\n\n if (!filters.deprecated && node.deprecated) {\n continue;\n }\n\n finalSet.add(key);\n\n if (!node.dependencies.size) {\n continue;\n }\n\n for (const dependency of node.dependencies) {\n const { namespace } = removeNamespace(dependency);\n switch (namespace) {\n case 'body': {\n if (filters.requestBodies.exclude.has(dependency)) {\n finalSet.delete(key);\n } else if (!finalSet.has(dependency)) {\n stack.push(dependency);\n }\n break;\n }\n case 'schema': {\n if (filters.schemas.exclude.has(dependency)) {\n finalSet.delete(key);\n } else if (!schemas.has(dependency)) {\n schemas.add(dependency);\n }\n break;\n }\n }\n }\n }\n return { requestBodies: finalSet };\n};\n\n/**\n * Collect responses that satisfy the include/exclude filters and schema dependencies.\n */\nconst collectResponses = ({\n filters,\n resourceMetadata,\n schemas,\n}: {\n filters: Filters;\n resourceMetadata: ResourceMetadata;\n schemas: Set<string>;\n}): {\n responses: Set<string>;\n} => {\n const finalSet = new Set<string>();\n const initialSet = filters.responses.include.size\n ? filters.responses.include\n : new Set(resourceMetadata.responses.keys());\n const stack = [...initialSet];\n while (stack.length) {\n const key = stack.pop()!;\n\n if (filters.responses.exclude.has(key) || finalSet.has(key)) {\n continue;\n }\n\n const node = resourceMetadata.responses.get(key);\n\n if (!node) {\n continue;\n }\n\n if (!filters.deprecated && node.deprecated) {\n continue;\n }\n\n finalSet.add(key);\n\n if (!node.dependencies.size) {\n continue;\n }\n\n for (const dependency of node.dependencies) {\n const { namespace } = removeNamespace(dependency);\n switch (namespace) {\n case 'body': {\n if (filters.requestBodies.exclude.has(dependency)) {\n finalSet.delete(key);\n } else if (!finalSet.has(dependency)) {\n stack.push(dependency);\n }\n break;\n }\n case 'schema': {\n if (filters.schemas.exclude.has(dependency)) {\n finalSet.delete(key);\n } else if (!schemas.has(dependency)) {\n schemas.add(dependency);\n }\n break;\n }\n }\n }\n }\n return { responses: finalSet };\n};\n\n/**\n * Collect schemas that satisfy the include/exclude filters.\n */\nconst collectSchemas = ({\n filters,\n resourceMetadata,\n}: {\n filters: Filters;\n resourceMetadata: ResourceMetadata;\n}): {\n schemas: Set<string>;\n} => {\n const finalSet = new Set<string>();\n const initialSet = filters.schemas.include.size\n ? filters.schemas.include\n : new Set(resourceMetadata.schemas.keys());\n const stack = [...initialSet];\n while (stack.length) {\n const key = stack.pop()!;\n\n if (filters.schemas.exclude.has(key) || finalSet.has(key)) {\n continue;\n }\n\n const node = resourceMetadata.schemas.get(key);\n\n if (!node) {\n continue;\n }\n\n if (!filters.deprecated && node.deprecated) {\n continue;\n }\n\n finalSet.add(key);\n\n if (!node.dependencies.size) {\n continue;\n }\n\n for (const dependency of node.dependencies) {\n const { namespace } = removeNamespace(dependency);\n switch (namespace) {\n case 'schema': {\n if (\n !finalSet.has(dependency) &&\n !filters.schemas.exclude.has(dependency)\n ) {\n stack.push(dependency);\n }\n break;\n }\n }\n }\n }\n return { schemas: finalSet };\n};\n\n/**\n * Drop parameters that depend on already excluded parameters.\n */\nconst dropExcludedParameters = ({\n filters,\n parameters,\n resourceMetadata,\n}: {\n filters: Filters;\n parameters: Set<string>;\n resourceMetadata: ResourceMetadata;\n}): void => {\n if (!filters.parameters.exclude.size) {\n return;\n }\n\n for (const key of parameters) {\n const node = resourceMetadata.parameters.get(key);\n\n if (!node?.dependencies.size) {\n continue;\n }\n\n for (const excludedKey of filters.parameters.exclude) {\n if (node.dependencies.has(excludedKey)) {\n parameters.delete(key);\n break;\n }\n }\n }\n};\n\n/**\n * Drop request bodies that depend on already excluded request bodies.\n */\nconst dropExcludedRequestBodies = ({\n filters,\n requestBodies,\n resourceMetadata,\n}: {\n filters: Filters;\n requestBodies: Set<string>;\n resourceMetadata: ResourceMetadata;\n}): void => {\n if (!filters.requestBodies.exclude.size) {\n return;\n }\n\n for (const key of requestBodies) {\n const node = resourceMetadata.requestBodies.get(key);\n\n if (!node?.dependencies.size) {\n continue;\n }\n\n for (const excludedKey of filters.requestBodies.exclude) {\n if (node.dependencies.has(excludedKey)) {\n requestBodies.delete(key);\n break;\n }\n }\n }\n};\n\n/**\n * Drop responses that depend on already excluded responses.\n */\nconst dropExcludedResponses = ({\n filters,\n resourceMetadata,\n responses,\n}: {\n filters: Filters;\n resourceMetadata: ResourceMetadata;\n responses: Set<string>;\n}): void => {\n if (!filters.responses.exclude.size) {\n return;\n }\n\n for (const key of responses) {\n const node = resourceMetadata.responses.get(key);\n\n if (!node?.dependencies.size) {\n continue;\n }\n\n for (const excludedKey of filters.responses.exclude) {\n if (node.dependencies.has(excludedKey)) {\n responses.delete(key);\n break;\n }\n }\n }\n};\n\n/**\n * Drop schemas that depend on already excluded schemas.\n */\nconst dropExcludedSchemas = ({\n filters,\n resourceMetadata,\n schemas,\n}: {\n filters: Filters;\n resourceMetadata: ResourceMetadata;\n schemas: Set<string>;\n}): void => {\n if (!filters.schemas.exclude.size) {\n return;\n }\n\n for (const key of schemas) {\n const node = resourceMetadata.schemas.get(key);\n\n if (!node?.dependencies.size) {\n continue;\n }\n\n for (const excludedKey of filters.schemas.exclude) {\n if (node.dependencies.has(excludedKey)) {\n schemas.delete(key);\n break;\n }\n }\n }\n};\n\nconst dropOrphans = ({\n operationDependencies,\n parameters,\n requestBodies,\n responses,\n schemas,\n}: {\n operationDependencies: Set<string>;\n parameters: Set<string>;\n requestBodies: Set<string>;\n responses: Set<string>;\n schemas: Set<string>;\n}) => {\n for (const key of schemas) {\n if (!operationDependencies.has(key)) {\n schemas.delete(key);\n }\n }\n for (const key of parameters) {\n if (!operationDependencies.has(key)) {\n parameters.delete(key);\n }\n }\n for (const key of requestBodies) {\n if (!operationDependencies.has(key)) {\n requestBodies.delete(key);\n }\n }\n for (const key of responses) {\n if (!operationDependencies.has(key)) {\n responses.delete(key);\n }\n }\n};\n\nconst collectOperationDependencies = ({\n operations,\n resourceMetadata,\n}: {\n operations: Set<string>;\n resourceMetadata: ResourceMetadata;\n}): {\n operationDependencies: Set<string>;\n} => {\n const finalSet = new Set<string>();\n const initialSet = new Set(\n [...operations].flatMap((key) => [\n ...(resourceMetadata.operations.get(key)?.dependencies ?? []),\n ]),\n );\n const stack = [...initialSet];\n while (stack.length) {\n const key = stack.pop()!;\n\n if (finalSet.has(key)) {\n continue;\n }\n\n finalSet.add(key);\n\n const { namespace } = removeNamespace(key);\n let dependencies: Set<string> | undefined;\n if (namespace === 'body') {\n dependencies = resourceMetadata.requestBodies.get(key)?.dependencies;\n } else if (namespace === 'operation') {\n dependencies = resourceMetadata.operations.get(key)?.dependencies;\n } else if (namespace === 'parameter') {\n dependencies = resourceMetadata.parameters.get(key)?.dependencies;\n } else if (namespace === 'response') {\n dependencies = resourceMetadata.responses.get(key)?.dependencies;\n } else if (namespace === 'schema') {\n dependencies = resourceMetadata.schemas.get(key)?.dependencies;\n }\n\n if (!dependencies?.size) {\n continue;\n }\n\n for (const dependency of dependencies) {\n if (!finalSet.has(dependency)) {\n stack.push(dependency);\n }\n }\n }\n return { operationDependencies: finalSet };\n};\n\nexport const createFilteredDependencies = ({\n filters,\n resourceMetadata,\n}: {\n filters: Filters;\n resourceMetadata: ResourceMetadata;\n}): {\n operations: Set<string>;\n parameters: Set<string>;\n requestBodies: Set<string>;\n responses: Set<string>;\n schemas: Set<string>;\n} => {\n const { schemas } = collectSchemas({ filters, resourceMetadata });\n const { parameters } = collectParameters({\n filters,\n resourceMetadata,\n schemas,\n });\n const { requestBodies } = collectRequestBodies({\n filters,\n resourceMetadata,\n schemas,\n });\n const { responses } = collectResponses({\n filters,\n resourceMetadata,\n schemas,\n });\n\n dropExcludedSchemas({ filters, resourceMetadata, schemas });\n dropExcludedParameters({ filters, parameters, resourceMetadata });\n dropExcludedRequestBodies({ filters, requestBodies, resourceMetadata });\n dropExcludedResponses({ filters, resourceMetadata, responses });\n\n // collect operations after dropping components\n const { operations } = collectOperations({\n filters,\n parameters,\n requestBodies,\n resourceMetadata,\n responses,\n schemas,\n });\n\n if (!filters.orphans && operations.size) {\n const { operationDependencies } = collectOperationDependencies({\n operations,\n resourceMetadata,\n });\n dropOrphans({\n operationDependencies,\n parameters,\n requestBodies,\n responses,\n schemas,\n });\n }\n\n return {\n operations,\n parameters,\n requestBodies,\n responses,\n schemas,\n };\n};\n","import { createOperationKey } from '../../../ir/operation';\nimport { jsonPointerToPath } from '../../../utils/ref';\nimport { addNamespace, stringToNamespace } from '../utils/filter';\nimport type { Graph } from '../utils/graph';\nimport { httpMethods } from '../utils/operation';\n\nexport type ResourceMetadata = {\n operations: Map<\n string,\n {\n dependencies: Set<string>;\n deprecated: boolean;\n tags: Set<string>;\n }\n >;\n parameters: Map<\n string,\n {\n dependencies: Set<string>;\n deprecated: boolean;\n }\n >;\n requestBodies: Map<\n string,\n {\n dependencies: Set<string>;\n deprecated: boolean;\n }\n >;\n responses: Map<\n string,\n {\n dependencies: Set<string>;\n deprecated: boolean;\n }\n >;\n schemas: Map<\n string,\n {\n dependencies: Set<string>;\n deprecated: boolean;\n }\n >;\n};\n\n/**\n * Builds a resource metadata map from a Graph, matching the old Graph interface\n * for compatibility with filtering code.\n */\nexport const buildResourceMetadata = (\n graph: Graph,\n): {\n resourceMetadata: ResourceMetadata;\n} => {\n const resourceMetadata: ResourceMetadata = {\n operations: new Map(),\n parameters: new Map(),\n requestBodies: new Map(),\n responses: new Map(),\n schemas: new Map(),\n };\n\n const getDependencies = (pointer: string): Set<string> => {\n const dependencies = new Set<string>();\n const nodeDeps = graph.allDependencies.get(pointer);\n if (nodeDeps?.size) {\n for (const dep of nodeDeps) {\n const path = jsonPointerToPath(dep);\n const type = path[path.length - 2];\n const name = path[path.length - 1];\n if (type && name) {\n const namespace = stringToNamespace(type);\n if (namespace === 'unknown') {\n console.warn(`unsupported type: ${type}`);\n }\n dependencies.add(addNamespace(namespace, name));\n }\n }\n }\n return dependencies;\n };\n\n // Process each node to find top-level resources\n for (const [pointer, nodeInfo] of graph.nodes) {\n // const node = nodeInfo.node as Record<string, unknown>;\n const path = jsonPointerToPath(pointer);\n\n // OpenAPI 3.x\n if (path[0] === 'components') {\n if (path.length === 3) {\n if (path[1] === 'schemas') {\n // Schema: #/components/schemas/{name}\n const name = path[path.length - 1]!;\n resourceMetadata.schemas.set(addNamespace('schema', name), {\n dependencies: getDependencies(pointer),\n deprecated: nodeInfo.deprecated ?? false,\n });\n } else if (path[1] === 'parameters') {\n // Parameter: #/components/parameters/{name}\n const name = path[path.length - 1]!;\n resourceMetadata.parameters.set(addNamespace('parameter', name), {\n dependencies: getDependencies(pointer),\n deprecated: nodeInfo.deprecated ?? false,\n });\n } else if (path[1] === 'requestBodies') {\n // RequestBody: #/components/requestBodies/{name}\n const name = path[path.length - 1]!;\n resourceMetadata.requestBodies.set(addNamespace('body', name), {\n dependencies: getDependencies(pointer),\n deprecated: nodeInfo.deprecated ?? false,\n });\n } else if (path[1] === 'responses') {\n // Response: #/components/responses/{name}\n const name = path[path.length - 1]!;\n resourceMetadata.responses.set(addNamespace('response', name), {\n dependencies: getDependencies(pointer),\n deprecated: nodeInfo.deprecated ?? false,\n });\n }\n }\n continue;\n }\n\n if (path[0] === 'paths') {\n if (\n path.length === 3 &&\n httpMethods.includes(path[2] as (typeof httpMethods)[number])\n ) {\n // Operation: #/paths/{path}/{method}\n const method = path[path.length - 1]!;\n const operationPath = path.slice(1, -1).join('/');\n const operationKey = createOperationKey({\n method,\n path: operationPath,\n });\n resourceMetadata.operations.set(\n addNamespace('operation', operationKey),\n {\n dependencies: getDependencies(pointer),\n deprecated: nodeInfo.deprecated ?? false,\n tags: nodeInfo.tags ?? new Set(),\n },\n );\n }\n continue;\n }\n\n // OpenAPI 2.0\n if (path[0] === 'definitions') {\n if (path.length === 2) {\n // Schema: #/definitions/{name}\n const name = path[path.length - 1]!;\n resourceMetadata.schemas.set(addNamespace('schema', name), {\n dependencies: getDependencies(pointer),\n deprecated: nodeInfo.deprecated ?? false,\n });\n }\n continue;\n }\n }\n\n return { resourceMetadata };\n};\n","import type { StringCase } from '../../../types/case';\nimport { stringCase } from '../../../utils/stringCase';\n\nexport const buildName = ({\n config,\n name,\n}: {\n config: {\n case: StringCase;\n name: string | ((name: string) => string);\n };\n name: string;\n}): string => {\n if (typeof config.name === 'function') {\n name = config.name(name);\n } else {\n name = config.name.replace('{{name}}', name);\n }\n\n return stringCase({ case: config.case, value: name });\n};\n","export const childSchemaRelationships = [\n ['additionalProperties', 'single'],\n ['allOf', 'array'],\n ['anyOf', 'array'],\n ['contains', 'single'],\n ['dependentSchemas', 'objectMap'],\n ['else', 'single'],\n ['if', 'single'],\n ['items', 'singleOrArray'],\n ['oneOf', 'array'],\n ['patternProperties', 'objectMap'],\n ['properties', 'objectMap'],\n ['propertyNames', 'single'],\n ['then', 'single'],\n] as const;\n","export const getSchemasObject = (\n spec: unknown,\n): Record<string, unknown> | undefined => {\n if (hasComponentsSchemasObject(spec)) {\n return (spec as any).components.schemas;\n }\n if (hasDefinitionsObject(spec)) {\n return (spec as any).definitions;\n }\n return;\n};\n\n/**\n * Checks if the given spec has a valid OpenAPI 3.x components.schemas object.\n * Returns true if present, false otherwise.\n */\nexport const hasComponentsSchemasObject = (spec: unknown): boolean =>\n typeof spec === 'object' &&\n spec !== null &&\n 'components' in spec &&\n typeof (spec as any).components === 'object' &&\n (spec as any).components !== null &&\n 'schemas' in (spec as any).components &&\n typeof (spec as any).components.schemas === 'object' &&\n (spec as any).components.schemas !== null;\n\n/**\n * Checks if the given spec has a valid OpenAPI 2.0 definitions object.\n * Returns true if present, false otherwise.\n */\nexport const hasDefinitionsObject = (spec: unknown): boolean =>\n typeof spec === 'object' &&\n spec !== null &&\n 'definitions' in spec &&\n typeof (spec as any).definitions === 'object' &&\n (spec as any).definitions !== null;\n","type Obj =\n | Record<string, unknown>\n | Set<string>\n | ReadonlyArray<string | undefined>;\n\nconst hasName = (obj: Obj, value: string): boolean => {\n if (obj instanceof Set) {\n return obj.has(value);\n }\n if (obj instanceof Array) {\n return obj.includes(value);\n }\n return value in obj;\n};\n\nexport const getUniqueComponentName = ({\n base: _base,\n components,\n extraComponents,\n}: {\n base: string;\n /**\n * Input components.\n */\n components: Obj;\n /**\n * Temporary input components, waiting to be inserted for example.\n */\n extraComponents?: Obj;\n}): string => {\n let index = 2;\n // Strip trailing number. For example, if base is \"foo2\", the clean base will be \"foo\"\n const base = _base.replace(/\\d+$/, '');\n let name = base;\n while (\n hasName(components, name) ||\n (extraComponents && hasName(extraComponents, name))\n ) {\n name = `${base}${index}`;\n index += 1;\n }\n return name;\n};\n\nexport const isPathRootSchema = (path: ReadonlyArray<string | number>) =>\n (path.length === 3 && path[0] === 'components' && path[1] === 'schemas') ||\n (path.length === 2 && path[0] === 'definitions');\n\nexport const specToSchemasPointerNamespace = (spec: unknown): string => {\n if (spec && typeof spec === 'object') {\n if ('swagger' in spec) {\n // #/definitions/SchemaName\n return '#/definitions/';\n }\n\n if ('openapi' in spec) {\n // #/components/schemas/SchemaName\n return '#/components/schemas/';\n }\n }\n\n return '';\n};\n","import type { Config } from '../../../types/config';\nimport { jsonPointerToPath } from '../../../utils/ref';\nimport { buildName } from '../utils/name';\nimport { deepClone } from '../utils/schema';\nimport { childSchemaRelationships } from '../utils/schemaChildRelationships';\nimport { getSchemasObject } from '../utils/transforms';\nimport {\n getUniqueComponentName,\n isPathRootSchema,\n specToSchemasPointerNamespace,\n} from './utils';\n\ntype EnumsConfig = Config['parser']['transforms']['enums'];\n\n/**\n * Generate a unique, structural signature for an enum schema for deduplication.\n * Only considers 'type' and sorted 'enum' values, ignoring other fields.\n *\n * @param schema - The schema object to analyze\n * @returns A string signature if the schema is an enum, otherwise undefined\n */\nconst getEnumSignature = (schema: unknown): string | undefined => {\n if (\n !schema ||\n typeof schema !== 'object' ||\n !('enum' in schema) ||\n !(schema.enum instanceof Array)\n ) {\n return;\n }\n // Use type + sorted enum values for signature\n const type = ('type' in schema ? schema.type : undefined) || '';\n const values = [...schema.enum].sort();\n return JSON.stringify({ type, values });\n};\n\ntype NodeInfo = {\n key: string | number | null;\n node: unknown;\n parent: unknown;\n path: ReadonlyArray<string | number>;\n};\n\n/**\n * Recursively walk all schemas in the OpenAPI spec, visiting every object/array\n * that could contain an enum. Calls the visitor with node info for each.\n *\n * @param key - The key of the current node\n * @param node - The current node\n * @param parent - The parent node\n * @param path - The path to the current node\n * @param visitor - Function to call for each visited node\n */\nconst walkSchemas = ({\n key,\n node,\n parent,\n path,\n visitor,\n}: NodeInfo & {\n visitor: (nodeInfo: NodeInfo) => void;\n}) => {\n if (!node || typeof node !== 'object' || node instanceof Array) return;\n\n const value = node as Record<string, unknown>;\n\n if (\n 'type' in value ||\n 'enum' in value ||\n childSchemaRelationships.some(([keyword]) => keyword in value)\n ) {\n visitor({ key, node, parent, path });\n }\n\n for (const [k, v] of Object.entries(value)) {\n if (typeof v === 'object' && v !== null) {\n if (v instanceof Array) {\n v.forEach((item, index) =>\n walkSchemas({\n key: index,\n node: item,\n parent: v,\n path: [...path, k, index],\n visitor,\n }),\n );\n } else {\n walkSchemas({\n key: k,\n node: v,\n parent: node,\n path: [...path, k],\n visitor,\n });\n }\n }\n }\n};\n\n/**\n * Inlines all root/top-level enums by replacing $refs to them with the actual enum schema,\n * and then removes the now-unreferenced root enums from the schemas object.\n *\n * @param spec - The OpenAPI spec object to transform\n */\nconst inlineMode = ({ spec }: { spec: unknown }) => {\n const schemasObj = getSchemasObject(spec);\n if (!schemasObj) {\n return;\n }\n\n const schemasPointerNamespace = specToSchemasPointerNamespace(spec);\n\n // Collect all root enums\n const rootEnums: Record<string, unknown> = {};\n for (const [name, schema] of Object.entries(schemasObj)) {\n const signature = getEnumSignature(schema);\n if (signature) {\n rootEnums[`${schemasPointerNamespace}${name}`] = schema;\n }\n }\n\n // Walk the spec and replace $refs to root enums with inline enum schemas\n const replaceEnumRefs = (node: unknown) => {\n if (node instanceof Array) {\n node.forEach(replaceEnumRefs);\n } else if (node && typeof node === 'object') {\n for (const [k, v] of Object.entries(node)) {\n if (k === '$ref' && typeof v === 'string' && v in rootEnums) {\n // Replace $ref with a deep clone of the enum schema\n Object.assign(node, deepClone(rootEnums[v]));\n delete (node as Record<string, unknown>)['$ref'];\n } else {\n replaceEnumRefs(v);\n }\n }\n }\n };\n replaceEnumRefs(spec);\n\n // Remove unreferenced root enums\n for (const pointer of Object.keys(rootEnums)) {\n const path = jsonPointerToPath(pointer);\n const name = path[path.length - 1]!;\n if (name) {\n delete schemasObj[name];\n }\n }\n};\n\n/**\n * Promotes all inline enums to reusable root components (if mode is 'root'),\n * deduplicates by signature, and replaces inline enums with $refs.\n *\n * Naming, casing, and deduplication are controlled by the enums transform config.\n * Existing root enums are reused if structurally identical.\n *\n * @param spec - The OpenAPI spec object to transform\n * @param config - The enums transform config\n */\nconst rootMode = ({ config, spec }: { config: EnumsConfig; spec: unknown }) => {\n const schemasObj = getSchemasObject(spec);\n if (!schemasObj) {\n return;\n }\n\n // Build a map of existing root enum signatures to their names for deduplication\n const rootEnumSignatures: Record<string, string> = {};\n for (const [name, schema] of Object.entries(schemasObj)) {\n const signature = getEnumSignature(schema);\n if (signature) {\n rootEnumSignatures[signature] = name;\n }\n }\n\n // Collect all inline enums (not at root schemas)\n const inlineEnums: Array<{\n key: string | number | null;\n node: unknown;\n parent: unknown;\n path: ReadonlyArray<string | number>;\n signature: string;\n }> = [];\n\n walkSchemas({\n key: null,\n node: spec,\n parent: null,\n path: [],\n visitor: (nodeInfo) => {\n if (!isPathRootSchema(nodeInfo.path)) {\n const signature = getEnumSignature(nodeInfo.node);\n if (signature) {\n inlineEnums.push({ ...nodeInfo, signature });\n }\n }\n },\n });\n\n // Deduplicate and assign unique names for promoted enums\n const signatureToName: Record<string, string | undefined> = {};\n const signatureToSchema: Record<string, unknown> = {};\n\n for (const { key, node, signature } of inlineEnums) {\n if (signature in signatureToName) {\n // Already handled\n continue;\n }\n\n // Use existing root enum if available\n if (signature in rootEnumSignatures) {\n signatureToName[signature] = rootEnumSignatures[signature];\n continue;\n }\n\n // Generate a unique name for the new root enum using config\n const base = buildName({\n config,\n name:\n typeof node === 'object' &&\n node &&\n 'title' in node &&\n typeof node.title === 'string'\n ? node.title\n : String(key),\n });\n const name = getUniqueComponentName({\n base,\n components: schemasObj,\n extraComponents: Object.values(signatureToName),\n });\n signatureToName[signature] = name;\n signatureToSchema[signature] = node;\n }\n\n // Add new root enums to the schemas object\n for (const [signature, name] of Object.entries(signatureToName)) {\n // Only add if not already present\n const schema = signatureToSchema[signature];\n if (name && !(name in schemasObj) && schema && typeof schema === 'object') {\n schemasObj[name] = schema;\n }\n }\n\n // Replace inline enums with $ref to the new root enum\n const schemasPointerNamespace = specToSchemasPointerNamespace(spec);\n for (const { key, parent, signature } of inlineEnums) {\n const name = signatureToName[signature];\n if (name && key != null && parent && typeof parent === 'object') {\n (parent as Record<string, unknown>)[key] = {\n $ref: `${schemasPointerNamespace}${name}`,\n };\n }\n }\n};\n\n/**\n * Applies the enums transform according to the configured mode ('inline' or 'root').\n *\n * - In 'inline' mode, all root enums are inlined and removed.\n * - In 'root' mode, all inline enums are promoted to root components and deduplicated.\n *\n * @param config - The enums transform config\n * @param spec - The OpenAPI spec object to transform\n */\nexport const enumsTransform = ({\n config,\n spec,\n}: {\n config: EnumsConfig;\n spec: unknown;\n}) => {\n if (config.mode === 'inline') {\n inlineMode({ spec });\n return;\n }\n\n if (config.mode === 'root') {\n rootMode({ config, spec });\n return;\n }\n};\n","import { normalizeJsonPointer, pathToJsonPointer } from '../../../utils/ref';\nimport { childSchemaRelationships } from './schemaChildRelationships';\n\n/**\n * Represents the possible access scopes for OpenAPI nodes.\n * - 'normal': Default scope for regular nodes.\n * - 'read': Node is read-only (e.g., readOnly: true).\n * - 'write': Node is write-only (e.g., writeOnly: true).\n */\nexport type Scope = 'normal' | 'read' | 'write';\n\n/**\n * Information about a node in the OpenAPI graph.\n *\n * @property deprecated - Whether the node is deprecated. Optional.\n * @property key - The property name or array index in the parent, or null for root.\n * @property node - The actual object at this pointer in the spec.\n * @property parentPointer - The JSON Pointer of the parent node, or null for root.\n * @property scopes - The set of access scopes for this node, if any. Optional.\n * @property tags - The set of tags for this node, if any. Optional.\n */\ntype NodeInfo = {\n /** Whether the node is deprecated. Optional. */\n deprecated?: boolean;\n /** The property name or array index in the parent, or null for root. */\n key: string | number | null;\n /** The actual object at this pointer in the spec. */\n node: unknown;\n /** The JSON Pointer of the parent node, or null for root. */\n parentPointer: string | null;\n /** The set of access scopes for this node, if any. Optional. */\n scopes?: Set<Scope>;\n /** The set of tags for this node, if any. Optional. */\n tags?: Set<string>;\n};\n\n/**\n * The main graph structure for OpenAPI node analysis.\n *\n * @property dependencies - For each node, the set of normalized JSON Pointers it references via $ref.\n * @property nodes - Map from normalized JSON Pointer to NodeInfo for every node in the spec.\n * @property reverseDependencies - For each node, the set of nodes that reference it via $ref.\n */\nexport type Graph = {\n /**\n * For each node, the set of all (transitive) normalized JSON Pointers it references via $ref anywhere in its subtree.\n * This includes both direct and indirect dependencies, making it useful for filtering, codegen, and tree-shaking.\n */\n allDependencies: Map<string, Set<string>>;\n /** For each node, the set of normalized JSON Pointers it references via $ref. */\n dependencies: Map<string, Set<string>>;\n /** Map from normalized JSON Pointer to NodeInfo for every node in the spec. */\n nodes: Map<string, NodeInfo>;\n /** For each node, the set of nodes that reference it via $ref. */\n reverseDependencies: Map<string, Set<string>>;\n};\n\n/**\n * Ensures every relevant child node (e.g., properties, items) in the graph has a `scopes` property.\n * If a node does not have its own scopes, it inherits from its parent if available.\n *\n * @param nodes - Map of JSON Pointer to NodeInfo.\n */\nexport const annotateChildScopes = (nodes: Graph['nodes']): void => {\n for (const [, nodeInfo] of nodes) {\n if (nodeInfo.scopes) continue;\n\n if (nodeInfo.parentPointer) {\n const parentInfo = nodes.get(nodeInfo.parentPointer);\n if (parentInfo?.scopes) {\n nodeInfo.scopes = new Set(parentInfo.scopes);\n }\n }\n }\n};\n\n/**\n * Recursively collects all $ref dependencies in the subtree rooted at `pointer`.\n */\nconst collectAllDependenciesForPointer = ({\n graph,\n pointer,\n visited,\n}: {\n graph: Graph;\n pointer: string;\n visited: Set<string>;\n}): Set<string> => {\n if (visited.has(pointer)) {\n return new Set();\n }\n\n visited.add(pointer);\n\n const nodeInfo = graph.nodes.get(pointer);\n if (!nodeInfo) {\n return new Set();\n }\n\n const allDependencies = new Set<string>();\n\n // Add direct $ref dependencies for this node\n // (from the dependencies map, or by checking nodeInfo.node directly)\n // We'll use the dependencies map for consistency:\n const dependencies = graph.dependencies.get(pointer);\n if (dependencies) {\n for (const depPointer of dependencies) {\n allDependencies.add(depPointer);\n // Recursively collect dependencies of the referenced node\n const transitiveDependencies = collectAllDependenciesForPointer({\n graph,\n pointer: depPointer,\n visited,\n });\n for (const dep of transitiveDependencies) {\n allDependencies.add(dep);\n }\n }\n }\n\n // Recursively collect dependencies of all children\n for (const [childPointer, childInfo] of graph.nodes) {\n if (childInfo.parentPointer === pointer) {\n const transitiveDependencies = collectAllDependenciesForPointer({\n graph,\n pointer: childPointer,\n visited,\n });\n for (const dep of transitiveDependencies) {\n allDependencies.add(dep);\n }\n }\n }\n\n return allDependencies;\n};\n\n/**\n * Propagates scopes through the graph using a worklist algorithm.\n * Each node's scopes will be updated to include any scopes inherited via $ref dependencies, combinator/child relationships, and parent relationships.\n * Handles cycles and deep chains efficiently.\n *\n * Whenever a node's scopes change, all dependents are notified:\n * - Its parent (if any)\n * - All nodes that reference it via $ref (reverse dependencies)\n * - Combinator parents (allOf/anyOf/oneOf) if applicable\n *\n * @param graph - The Graph structure containing nodes, dependencies, and reverseDependencies.\n */\nexport const propagateScopes = (graph: Graph): void => {\n const worklist: Set<string> = new Set(\n Array.from(graph.nodes.entries())\n .filter(([, nodeInfo]) => nodeInfo.scopes && nodeInfo.scopes.size > 0)\n .map(([pointer]) => pointer),\n );\n\n /**\n * Notifies all dependents of a node that its scopes may have changed.\n * Dependents include:\n * - The parent node (if any)\n * - All nodes that reference this node via $ref (reverse dependencies)\n * - Combinator parents (allOf/anyOf/oneOf) if this node is a combinator child\n *\n * @param pointer - The JSON pointer of the node whose dependents to notify\n * @param nodeInfo - The NodeInfo of the node\n * @param childPointer - (Optional) The pointer of the child, used to detect combinator parents\n */\n const notifyAllDependents = (\n pointer: string,\n nodeInfo: NodeInfo,\n childPointer?: string,\n ) => {\n if (nodeInfo.parentPointer) {\n worklist.add(nodeInfo.parentPointer);\n }\n const reverseDependencies = graph.reverseDependencies.get(pointer);\n if (reverseDependencies) {\n for (const dependentPointer of reverseDependencies) {\n worklist.add(dependentPointer);\n }\n }\n if (childPointer) {\n // If this is a combinator child, notify the combinator parent\n const combinatorChildMatch = childPointer.match(\n /(.*)\\/(allOf|anyOf|oneOf)\\/\\d+$/,\n );\n if (combinatorChildMatch) {\n const combinatorParentPointer = combinatorChildMatch[1];\n if (combinatorParentPointer) {\n worklist.add(combinatorParentPointer);\n }\n }\n }\n };\n\n /**\n * Propagates scopes from a child node to its parent node.\n * If the parent's scopes change, notifies all dependents.\n *\n * @param pointer - The parent node's pointer\n * @param nodeInfo - The parent node's NodeInfo\n * @param childPointer - The child node's pointer\n */\n const propagateChildScopes = (\n pointer: string,\n nodeInfo: NodeInfo,\n childPointer: string,\n ): void => {\n if (!nodeInfo?.scopes) return;\n const childInfo = graph.nodes.get(childPointer);\n if (!childInfo?.scopes) return;\n const changed = propagateScopesToNode(childInfo, nodeInfo);\n if (changed) {\n notifyAllDependents(pointer, nodeInfo, childPointer);\n }\n };\n\n while (worklist.size > 0) {\n const pointer = worklist.values().next().value!;\n worklist.delete(pointer);\n\n const nodeInfo = graph.nodes.get(pointer);\n if (!nodeInfo) continue;\n\n if (!nodeInfo.scopes) {\n nodeInfo.scopes = new Set();\n }\n\n const node = nodeInfo.node as Record<string, unknown>;\n\n // Propagate scopes from all child schema relationships (combinators, properties, etc.)\n for (const [keyword, type] of childSchemaRelationships) {\n if (!node || typeof node !== 'object' || !(keyword in node)) continue;\n const value = node[keyword];\n if (type === 'array' && value instanceof Array) {\n for (let index = 0; index < value.length; index++) {\n const childPointer = `${pointer}/${keyword}/${index}`;\n propagateChildScopes(pointer, nodeInfo, childPointer);\n }\n } else if (\n type === 'objectMap' &&\n typeof value === 'object' &&\n value !== null &&\n !(value instanceof Array)\n ) {\n for (const key of Object.keys(value)) {\n const childPointer = `${pointer}/${keyword}/${key}`;\n propagateChildScopes(pointer, nodeInfo, childPointer);\n }\n } else if (\n type === 'single' &&\n typeof value === 'object' &&\n value !== null\n ) {\n const childPointer = `${pointer}/${keyword}`;\n propagateChildScopes(pointer, nodeInfo, childPointer);\n } else if (type === 'singleOrArray') {\n if (value instanceof Array) {\n for (let index = 0; index < value.length; index++) {\n const childPointer = `${pointer}/${keyword}/${index}`;\n propagateChildScopes(pointer, nodeInfo, childPointer);\n }\n } else if (typeof value === 'object' && value !== null) {\n const childPointer = `${pointer}/${keyword}`;\n propagateChildScopes(pointer, nodeInfo, childPointer);\n }\n }\n }\n\n // Propagate scopes from $ref dependencies\n const dependencies = graph.dependencies.get(pointer);\n if (dependencies) {\n for (const depPointer of dependencies) {\n const depNode = graph.nodes.get(depPointer);\n if (depNode?.scopes) {\n const changed = propagateScopesToNode(depNode, nodeInfo);\n if (changed) {\n notifyAllDependents(pointer, nodeInfo);\n }\n }\n }\n }\n\n // Propagate scopes up the parent chain\n if (nodeInfo.parentPointer) {\n const parentInfo = graph.nodes.get(nodeInfo.parentPointer);\n if (parentInfo) {\n const changed = propagateScopesToNode(nodeInfo, parentInfo);\n if (changed) {\n notifyAllDependents(nodeInfo.parentPointer, parentInfo);\n }\n }\n }\n }\n};\n\n/**\n * Propagates scopes from one node to another.\n * Adds any scopes from fromNodeInfo to toNodeInfo that are not already present.\n * Returns true if any scopes were added, false otherwise.\n *\n * @param fromNodeInfo - The node to propagate scopes from\n * @param toNodeInfo - The node to propagate scopes to\n * @returns boolean - Whether any scopes were added\n */\nconst propagateScopesToNode = (\n fromNodeInfo: NodeInfo,\n toNodeInfo: NodeInfo,\n): boolean => {\n if (!fromNodeInfo.scopes) {\n return false;\n }\n\n if (!toNodeInfo.scopes) {\n toNodeInfo.scopes = new Set();\n }\n\n let changed = false;\n\n for (const scope of fromNodeInfo.scopes) {\n if (!toNodeInfo.scopes.has(scope)) {\n toNodeInfo.scopes.add(scope);\n changed = true;\n }\n }\n\n return changed;\n};\n\n/**\n * Seeds each node in the graph with its local access scope(s) based on its own properties.\n * - 'read' if readOnly: true\n * - 'write' if writeOnly: true\n * - 'normal' if node is an object property\n *\n * Only non-array objects are considered for scope seeding.\n *\n * @param nodes - Map of JSON Pointer to NodeInfo.\n */\nexport const seedLocalScopes = (nodes: Graph['nodes']): void => {\n for (const [pointer, nodeInfo] of nodes) {\n const { node } = nodeInfo;\n\n if (typeof node !== 'object' || node === null || node instanceof Array) {\n continue;\n }\n\n if ('readOnly' in node && node.readOnly === true) {\n nodeInfo.scopes = new Set(['read']);\n } else if ('writeOnly' in node && node.writeOnly === true) {\n nodeInfo.scopes = new Set(['write']);\n } else if (pointer.match(/\\/properties\\/[^/]+$/)) {\n nodeInfo.scopes = new Set(['normal']);\n }\n }\n};\n\n/**\n * Builds a graph of all nodes in an OpenAPI spec, indexed by normalized JSON Pointer,\n * and tracks all $ref dependencies and reverse dependencies between nodes.\n *\n * - All keys in the returned maps are normalized JSON Pointers (RFC 6901, always starting with '#').\n * - The `nodes` map allows fast lookup of any node and its parent/key context.\n * - The `dependencies` map records, for each node, the set of normalized pointers it references via $ref.\n * - The `reverseDependencies` map records, for each node, the set of nodes that reference it via $ref.\n * - After construction, all nodes will have their local and propagated scopes annotated.\n *\n * @param root The root object (e.g., the OpenAPI spec)\n * @returns An object with:\n * - nodes: Map from normalized JSON Pointer string to NodeInfo\n * - dependencies: Map from normalized JSON Pointer string to Set of referenced normalized JSON Pointers\n * - reverseDependencies: Map from normalized JSON Pointer string to Set of referencing normalized JSON Pointers\n */\nexport const buildGraph = (\n root: unknown,\n): {\n graph: Graph;\n} => {\n const graph: Graph = {\n allDependencies: new Map(),\n dependencies: new Map(),\n nodes: new Map(),\n reverseDependencies: new Map(),\n };\n\n const walk = ({\n key,\n node,\n parentPointer,\n path,\n }: NodeInfo & {\n path: ReadonlyArray<string | number>;\n }) => {\n if (typeof node !== 'object' || node === null) {\n return;\n }\n\n const pointer = pathToJsonPointer(path);\n\n let deprecated: boolean | undefined;\n let tags: Set<string> | undefined;\n\n if (typeof node === 'object' && node !== null) {\n // Check for deprecated property\n if ('deprecated' in node && typeof node.deprecated === 'boolean') {\n deprecated = Boolean(node.deprecated);\n }\n // If this node has a $ref, record the dependency\n if ('$ref' in node && typeof node.$ref === 'string') {\n const refPointer = normalizeJsonPointer(node.$ref);\n if (!graph.dependencies.has(pointer)) {\n graph.dependencies.set(pointer, new Set());\n }\n graph.dependencies.get(pointer)!.add(refPointer);\n }\n // Check for tags property (should be an array of strings)\n if ('tags' in node && node.tags instanceof Array) {\n tags = new Set(node.tags.filter((tag) => typeof tag === 'string'));\n }\n }\n\n graph.nodes.set(pointer, { deprecated, key, node, parentPointer, tags });\n\n if (node instanceof Array) {\n node.forEach((item, index) =>\n walk({\n key: index,\n node: item,\n parentPointer: pointer,\n path: [...path, index],\n }),\n );\n } else {\n for (const [childKey, value] of Object.entries(node)) {\n walk({\n key: childKey,\n node: value,\n parentPointer: pointer,\n path: [...path, childKey],\n });\n }\n }\n };\n\n walk({\n key: null,\n node: root,\n parentPointer: null,\n path: [],\n });\n\n for (const [pointerFrom, pointers] of graph.dependencies) {\n for (const pointerTo of pointers) {\n if (!graph.reverseDependencies.has(pointerTo)) {\n graph.reverseDependencies.set(pointerTo, new Set());\n }\n graph.reverseDependencies.get(pointerTo)!.add(pointerFrom);\n }\n }\n\n seedLocalScopes(graph.nodes);\n propagateScopes(graph);\n annotateChildScopes(graph.nodes);\n\n for (const pointer of graph.nodes.keys()) {\n const allDependencies = collectAllDependenciesForPointer({\n graph,\n pointer,\n visited: new Set(),\n });\n graph.allDependencies.set(pointer, allDependencies);\n }\n\n return { graph };\n};\n","import type { Config } from '../../../types/config';\nimport { jsonPointerToPath } from '../../../utils/ref';\nimport { buildGraph, type Graph, type Scope } from '../utils/graph';\nimport { buildName } from '../utils/name';\nimport { deepClone } from '../utils/schema';\nimport { childSchemaRelationships } from '../utils/schemaChildRelationships';\nimport {\n getSchemasObject,\n hasComponentsSchemasObject,\n hasDefinitionsObject,\n} from '../utils/transforms';\nimport {\n getUniqueComponentName,\n isPathRootSchema,\n specToSchemasPointerNamespace,\n} from './utils';\n\ntype OriginalSchemas = Record<string, unknown>;\n\ntype SplitSchemas = {\n /** Key is the original schema pointer. */\n mapping: Record<\n string,\n {\n read?: string;\n write?: string;\n }\n >;\n /** splitPointer -> originalPointer */\n reverseMapping: Record<string, string>;\n /** name -> schema object */\n schemas: Record<string, unknown>;\n};\n\ntype ReadWriteConfig = Config['parser']['transforms']['readWrite'];\n\nconst schemaKeys = new Set([\n 'additionalProperties',\n 'allOf',\n 'anyOf',\n 'items',\n 'not',\n 'oneOf',\n 'patternProperties',\n 'properties',\n 'schema',\n]);\n\nconst getComponentContext = (\n path: ReadonlyArray<string | number>,\n): Scope | undefined => {\n // OpenAPI 3.x: #/components/{type}/{name}\n if (path.length === 3 && path[0] === 'components') {\n const type = path[1];\n if (type === 'parameters') return 'write';\n if (type === 'requestBodies') return 'write';\n if (type === 'responses') return 'read';\n if (type === 'headers') return 'read';\n }\n // OpenAPI 2.x: #/parameters/{name}, #/responses/{name}\n if (path.length === 2) {\n const type = path[0];\n if (type === 'parameters') return 'write';\n if (type === 'responses') return 'read';\n }\n return;\n};\n\n/**\n * Capture the original schema objects by pointer before splitting.\n * This is used to safely remove only the true originals after splitting,\n * even if names are swapped or overwritten by split variants.\n */\nconst captureOriginalSchemas = (spec: unknown): OriginalSchemas => {\n const originals: OriginalSchemas = {};\n if (hasComponentsSchemasObject(spec)) {\n for (const [name, obj] of Object.entries(\n (spec as any).components.schemas,\n )) {\n originals[`#/components/schemas/${name}`] = obj;\n }\n } else if (hasDefinitionsObject(spec)) {\n for (const [name, obj] of Object.entries((spec as any).definitions)) {\n originals[`#/definitions/${name}`] = obj;\n }\n }\n return originals;\n};\n\n/**\n * Inserts split schemas into the spec at the correct location (OpenAPI 3.x or 2.0).\n * This function is robust to spec version and will assign all split schemas\n * to either components.schemas (OAS3) or definitions (OAS2).\n *\n * @param spec - The OpenAPI spec object\n * @param split - The split schemas (from splitSchemas)\n */\nconst insertSplitSchemasIntoSpec = (\n spec: unknown,\n split: Pick<SplitSchemas, 'schemas'>,\n) => {\n if (hasComponentsSchemasObject(spec)) {\n Object.assign((spec as any).components.schemas, split.schemas);\n } else if (hasDefinitionsObject(spec)) {\n Object.assign((spec as any).definitions, split.schemas);\n }\n};\n\n/**\n * Prunes a schema by removing all child schemas (in any structural keyword)\n * that are marked with the given scope (readOnly/writeOnly), or that are $ref to a schema\n * that is exclusively the excluded scope (according to the graph).\n *\n * Uses childSchemaRelationships for parity with graph traversal.\n * Returns true if the schema itself should be removed from its parent.\n *\n * @param graph - The Graph containing all nodes and their scopes\n * @param schema - The schema object to prune\n * @param scope - The scope to exclude ('readOnly' or 'writeOnly')\n * @returns boolean - Whether the schema should be removed from its parent\n */\nconst pruneSchemaByScope = (\n graph: Graph,\n schema: unknown,\n scope: 'readOnly' | 'writeOnly',\n): boolean => {\n if (schema && typeof schema === 'object') {\n // Remove $ref if the referenced schema is exclusively the excluded scope\n if (\n '$ref' in schema &&\n typeof (schema as Record<string, unknown>)['$ref'] === 'string'\n ) {\n const ref = (schema as Record<string, unknown>)['$ref'] as string;\n const nodeInfo = graph.nodes.get(ref);\n if (nodeInfo?.scopes) {\n // Only remove $ref if the referenced schema is *exclusively* the excluded scope.\n // This ensures 'normal' or multi-scope schemas are always kept.\n if (\n (scope === 'writeOnly' &&\n nodeInfo.scopes.size === 1 &&\n nodeInfo.scopes.has('write')) ||\n (scope === 'readOnly' &&\n nodeInfo.scopes.size === 1 &&\n nodeInfo.scopes.has('read'))\n ) {\n delete (schema as Record<string, unknown>)['$ref'];\n // If the schema is now empty, remove it\n if (\n !childSchemaRelationships.some(([keyword]) => keyword in schema)\n ) {\n return true;\n }\n }\n }\n }\n // Recursively prune all child schemas according to childSchemaRelationships\n for (const [keyword, type] of childSchemaRelationships) {\n if (!(keyword in schema)) {\n continue;\n }\n const value = (schema as Record<string, unknown>)[keyword];\n if (type === 'array' && value instanceof Array) {\n for (let index = value.length - 1; index >= 0; index--) {\n const item = value[index];\n if (\n item &&\n typeof item === 'object' &&\n (item as Record<string, unknown>)[scope] === true\n ) {\n value.splice(index, 1);\n } else {\n const shouldRemove = pruneSchemaByScope(graph, item, scope);\n if (shouldRemove) value.splice(index, 1);\n }\n }\n if (!value.length) {\n delete (schema as Record<string, unknown>)[keyword];\n }\n } else if (\n type === 'objectMap' &&\n typeof value === 'object' &&\n value !== null &&\n !(value instanceof Array)\n ) {\n const objMap = value as Record<string, unknown>;\n for (const key of Object.keys(objMap)) {\n const prop = objMap[key];\n if (\n prop &&\n typeof prop === 'object' &&\n (prop as Record<string, unknown>)[scope] === true\n ) {\n delete objMap[key];\n } else {\n const shouldRemove = pruneSchemaByScope(graph, prop, scope);\n if (shouldRemove) {\n delete objMap[key];\n }\n }\n }\n if (!Object.keys(objMap).length) {\n delete (schema as Record<string, unknown>)[keyword];\n }\n } else if (\n type === 'single' &&\n typeof value === 'object' &&\n value !== null\n ) {\n if ((value as Record<string, unknown>)[scope] === true) {\n delete (schema as Record<string, unknown>)[keyword];\n } else {\n const shouldRemove = pruneSchemaByScope(graph, value, scope);\n if (shouldRemove) {\n delete (schema as Record<string, unknown>)[keyword];\n }\n }\n } else if (type === 'singleOrArray') {\n if (value instanceof Array) {\n for (let index = value.length - 1; index >= 0; index--) {\n const item = value[index];\n if (\n item &&\n typeof item === 'object' &&\n (item as Record<string, unknown>)[scope] === true\n ) {\n value.splice(index, 1);\n } else {\n const shouldRemove = pruneSchemaByScope(graph, item, scope);\n if (shouldRemove) value.splice(index, 1);\n }\n }\n if (!value.length) {\n delete (schema as Record<string, unknown>)[keyword];\n }\n } else if (typeof value === 'object' && value !== null) {\n if ((value as Record<string, unknown>)[scope] === true) {\n delete (schema as Record<string, unknown>)[keyword];\n } else {\n const shouldRemove = pruneSchemaByScope(graph, value, scope);\n if (shouldRemove) {\n delete (schema as Record<string, unknown>)[keyword];\n }\n }\n }\n }\n }\n // After all removals, if this is type: object and has no structural fields, remove it\n if (\n (schema as Record<string, unknown>).type === 'object' &&\n !childSchemaRelationships.some(([keyword]) => keyword in schema)\n ) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * Remove only the true original schemas that were split, by object identity.\n * This is robust to swaps, overwrites, and name collisions.\n *\n * @param originalSchemas - Map of original pointers to their schema objects (captured before splitting)\n * @param spec - The OpenAPI spec object\n * @param split - The split mapping (from splitSchemas)\n */\nconst removeOriginalSplitSchemas = ({\n originalSchemas,\n spec,\n split,\n}: {\n originalSchemas: OriginalSchemas;\n spec: unknown;\n split: Pick<SplitSchemas, 'mapping'>;\n}) => {\n const schemasObj = getSchemasObject(spec);\n\n for (const originalPointer of Object.keys(split.mapping)) {\n const path = jsonPointerToPath(originalPointer);\n const name = path[path.length - 1]!;\n if (\n typeof name === 'string' &&\n schemasObj &&\n Object.prototype.hasOwnProperty.call(schemasObj, name) &&\n schemasObj[name] === originalSchemas[originalPointer]\n ) {\n delete schemasObj[name];\n }\n }\n};\n\n/**\n * Splits schemas with both 'read' and 'write' scopes into read/write variants.\n * Returns the new schemas and a mapping from original pointer to new variant pointers.\n *\n * @param config - The readWrite transform config\n * @param graph - The Graph containing all nodes and their scopes\n * @param spec - The OpenAPI spec object\n * @returns SplitSchemas - The split schemas and pointer mappings\n */\nexport const splitSchemas = ({\n config,\n graph,\n spec,\n}: {\n config: ReadWriteConfig;\n graph: Graph;\n spec: unknown;\n}): SplitSchemas => {\n const existingNames = new Set<string>();\n const split: SplitSchemas = {\n mapping: {},\n reverseMapping: {},\n schemas: {},\n };\n\n const schemasPointerNamespace = specToSchemasPointerNamespace(spec);\n const schemasNamespaceSegments =\n schemasPointerNamespace.split('/').length - 1;\n\n /**\n * Extracts the schema name from pointer, but only if it's a top-level schema\n * pointer. Returns an empty string if it's a nested pointer.\n * @param pointer\n * @returns Schema's base name.\n */\n const pointerToSchema = (pointer: string): string => {\n if (pointer.startsWith(schemasPointerNamespace)) {\n const path = jsonPointerToPath(pointer);\n if (path.length === schemasNamespaceSegments) {\n return path[schemasNamespaceSegments - 1] || '';\n }\n }\n return '';\n };\n\n // Collect all existing schema names\n for (const pointer of graph.nodes.keys()) {\n const name = pointerToSchema(pointer);\n if (name) existingNames.add(name);\n }\n\n for (const [pointer, nodeInfo] of graph.nodes) {\n const name = pointerToSchema(pointer);\n // Only split top-level schemas, with both read-only and write-only scopes.\n if (\n !name ||\n !(nodeInfo.scopes?.has('read') && nodeInfo.scopes?.has('write'))\n ) {\n continue;\n }\n\n // read variant\n const readSchema = deepClone<unknown>(nodeInfo.node);\n pruneSchemaByScope(graph, readSchema, 'writeOnly');\n const readBase = buildName({\n config: config.responses,\n name,\n });\n const readName =\n readBase === name\n ? readBase\n : getUniqueComponentName({\n base: readBase,\n components: existingNames,\n });\n existingNames.add(readName);\n split.schemas[readName] = readSchema;\n const readPointer = `${schemasPointerNamespace}${readName}`;\n\n // write variant\n const writeSchema = deepClone<unknown>(nodeInfo.node);\n pruneSchemaByScope(graph, writeSchema, 'readOnly');\n const writeBase = buildName({\n config: config.requests,\n name,\n });\n const writeName =\n writeBase === name && writeBase !== readName\n ? writeBase\n : getUniqueComponentName({\n base: writeBase,\n components: existingNames,\n });\n existingNames.add(writeName);\n split.schemas[writeName] = writeSchema;\n const writePointer = `${schemasPointerNamespace}${writeName}`;\n\n split.mapping[pointer] = {\n read: readPointer,\n write: writePointer,\n };\n split.reverseMapping[readPointer] = pointer;\n split.reverseMapping[writePointer] = pointer;\n }\n\n return split;\n};\n\ntype WalkArgs = {\n context: Scope | null;\n currentPointer: string | null;\n inSchema: boolean;\n node: unknown;\n path: ReadonlyArray<string | number>;\n};\n\n/**\n * Recursively updates $ref fields in the spec to point to the correct read/write variant\n * according to the current context (read/write), using the split mapping.\n *\n * @param spec - The OpenAPI spec object\n * @param split - The split mapping (from splitSchemas)\n */\nexport const updateRefsInSpec = (\n spec: unknown,\n split: Omit<SplitSchemas, 'schemas'>,\n): void => {\n const schemasPointerNamespace = specToSchemasPointerNamespace(spec);\n\n const walk = ({\n context,\n currentPointer,\n inSchema,\n node,\n path,\n }: WalkArgs): void => {\n if (node instanceof Array) {\n node.forEach((item, index) =>\n walk({\n context,\n currentPointer,\n inSchema,\n node: item,\n path: [...path, index],\n }),\n );\n } else if (node && typeof node === 'object') {\n // Detect if we're entering a split schema variant\n let nextPointer = currentPointer;\n let nextContext = context;\n if (isPathRootSchema(path)) {\n nextPointer = `${schemasPointerNamespace}${path[2]}`;\n const originalPointer = split.reverseMapping[nextPointer];\n if (originalPointer) {\n const mapping = split.mapping[originalPointer];\n if (mapping?.read === nextPointer) {\n nextContext = 'read';\n } else if (mapping?.write === nextPointer) {\n nextContext = 'write';\n }\n }\n }\n\n const compContext = getComponentContext(path);\n if (compContext !== undefined) {\n // For each component, walk with the correct context\n for (const key in node) {\n if (!Object.prototype.hasOwnProperty.call(node, key)) {\n continue;\n }\n walk({\n context: compContext,\n currentPointer: nextPointer,\n inSchema: false,\n node: (node as Record<string, unknown>)[key],\n path: [...path, key],\n });\n }\n return;\n }\n\n for (const key in node) {\n if (!Object.prototype.hasOwnProperty.call(node, key)) {\n continue;\n }\n const value = (node as Record<string, unknown>)[key];\n\n // Only treat context switches at the OpenAPI structure level (not inside schemas)\n if (!inSchema) {\n if (key === 'requestBody') {\n walk({\n context: 'write',\n currentPointer: nextPointer,\n inSchema: false,\n node: value,\n path: [...path, key],\n });\n continue;\n }\n if (key === 'responses') {\n walk({\n context: 'read',\n currentPointer: nextPointer,\n inSchema: false,\n node: value,\n path: [...path, key],\n });\n continue;\n }\n if (key === 'parameters' && Array.isArray(value)) {\n value.forEach((param, index) => {\n if (param && typeof param === 'object' && 'schema' in param) {\n walk({\n context: 'write',\n currentPointer: nextPointer,\n inSchema: true,\n node: param.schema,\n path: [...path, key, index, 'schema'],\n });\n }\n // Also handle content (OpenAPI 3.x)\n if (param && typeof param === 'object' && 'content' in param) {\n walk({\n context: 'write',\n currentPointer: nextPointer,\n inSchema: false,\n node: param.content,\n path: [...path, key, index, 'content'],\n });\n }\n });\n continue;\n }\n // OpenAPI 3.x: headers in responses\n if (\n key === 'headers' &&\n typeof value === 'object' &&\n value !== null\n ) {\n for (const headerKey in value) {\n if (!Object.prototype.hasOwnProperty.call(value, headerKey)) {\n continue;\n }\n walk({\n context: 'read',\n currentPointer: nextPointer,\n inSchema: false,\n node: (value as Record<string, unknown>)[headerKey],\n path: [...path, key, headerKey],\n });\n }\n continue;\n }\n }\n\n // Entering a schema context\n if (schemaKeys.has(key)) {\n walk({\n context: nextContext,\n currentPointer: nextPointer,\n inSchema: true,\n node: value,\n path: [...path, key],\n });\n } else if (key === '$ref' && typeof value === 'string') {\n const map = split.mapping[value];\n if (nextContext === 'read' && map?.read) {\n (node as Record<string, unknown>)[key] = map.read;\n } else if (nextContext === 'write' && map?.write) {\n (node as Record<string, unknown>)[key] = map.write;\n }\n } else {\n walk({\n context: nextContext,\n currentPointer: nextPointer,\n inSchema,\n node: value,\n path: [...path, key],\n });\n }\n }\n }\n };\n walk({\n context: null,\n currentPointer: null,\n inSchema: false,\n node: spec,\n path: [],\n });\n};\n\n/**\n * Orchestrates the full read/write transform:\n * - Captures original schemas\n * - Splits schemas into read/write variants\n * - Inserts split schemas into the spec\n * - Updates $refs throughout the spec\n * - Removes original schemas that were split\n *\n * @param config - The readWrite transform config\n * @param spec - The OpenAPI spec object\n */\nexport const readWriteTransform = ({\n config,\n spec,\n}: {\n config: ReadWriteConfig;\n spec: unknown;\n}) => {\n const { graph } = buildGraph(spec);\n const originalSchemas = captureOriginalSchemas(spec);\n const split = splitSchemas({ config, graph, spec });\n insertSplitSchemasIntoSpec(spec, split);\n updateRefsInSpec(spec, split);\n removeOriginalSplitSchemas({ originalSchemas, spec, split });\n};\n","import type { IR } from '../../../ir/types';\nimport { enumsTransform } from './enums';\nimport { readWriteTransform } from './readWrite';\n\nexport const transformOpenApiSpec = ({ context }: { context: IR.Context }) => {\n if (context.config.parser.transforms.enums.enabled) {\n enumsTransform({\n config: context.config.parser.transforms.enums,\n spec: context.spec,\n });\n }\n\n if (context.config.parser.transforms.readWrite.enabled) {\n readWriteTransform({\n config: context.config.parser.transforms.readWrite,\n spec: context.spec,\n });\n }\n};\n","import type { IR } from '../../../ir/types';\n\nexport const mergeParametersObjects = ({\n source,\n target,\n}: {\n source: IR.ParametersObject | undefined;\n target: IR.ParametersObject | undefined;\n}): IR.ParametersObject | undefined => {\n const result = { ...target };\n\n if (source) {\n if (source.cookie) {\n if (result.cookie) {\n result.cookie = {\n ...result.cookie,\n ...source.cookie,\n };\n } else {\n result.cookie = source.cookie;\n }\n }\n\n if (source.header) {\n if (result.header) {\n result.header = {\n ...result.header,\n ...source.header,\n };\n } else {\n result.header = source.header;\n }\n }\n\n if (source.path) {\n if (result.path) {\n result.path = {\n ...result.path,\n ...source.path,\n };\n } else {\n result.path = source.path;\n }\n }\n\n if (source.query) {\n if (result.query) {\n result.query = {\n ...result.query,\n ...source.query,\n };\n } else {\n result.query = source.query;\n }\n }\n }\n\n if (!Object.keys(result).length) {\n return;\n }\n\n return result;\n};\n","import colors from 'ansi-colors';\n\nimport type { IR } from '../../../ir/types';\n\nexport interface ValidatorIssue {\n /**\n * Machine-readable issue code\n *\n * @example\n * 'invalid_type'\n */\n code: 'duplicate_key' | 'invalid_type' | 'missing_required_field';\n /**\n * Optional additional data.\n *\n * @example\n * 'expectedType'\n */\n context?: Record<string, any>;\n /**\n * Human-readable issue summary.\n */\n message: string;\n /**\n * JSONPath-like array to issue location.\n */\n path: ReadonlyArray<string | number>;\n /**\n * Error severity.\n */\n severity: 'error' | 'warning';\n}\n\nexport interface ValidatorResult {\n issues: ReadonlyArray<ValidatorIssue>;\n valid: boolean;\n}\n\nconst isSimpleKey = (key: string) => /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(key);\n\nconst formatPath = (path: ReadonlyArray<string | number>): string =>\n path\n .map((segment, i) => {\n if (typeof segment === 'number') {\n return `[${segment}]`;\n }\n\n if (i === 0) {\n // first segment no dot or brackets\n return segment;\n }\n\n return isSimpleKey(segment)\n ? `.${segment}`\n : `['${segment.replace(/\"/g, \"\\\\'\")}']`;\n })\n .join('');\n\nconst formatValidatorIssue = (issue: ValidatorIssue): string => {\n const pathStr = formatPath(issue.path);\n const level =\n issue.severity === 'error' ? colors.bold.red : colors.bold.yellow;\n\n const highlightedMessage = issue.message.replace(/`([^`]+)`/g, (_, code) =>\n colors.yellow(`\\`${code}\\``),\n );\n\n return `${level(`[${issue.severity.toUpperCase()}]`)} ${colors.cyan(pathStr)}: ${highlightedMessage}`;\n};\n\nconst shouldPrint = ({\n context,\n issue,\n}: {\n context: IR.Context;\n issue: ValidatorIssue;\n}) => {\n if (context.config.logs.level === 'silent') {\n return false;\n }\n\n if (issue.severity === 'error') {\n return context.config.logs.level !== 'warn';\n }\n\n return true;\n};\n\nexport const handleValidatorResult = ({\n context,\n result,\n}: {\n context: IR.Context;\n result: ValidatorResult;\n}) => {\n for (const issue of result.issues) {\n if (shouldPrint({ context, issue })) {\n console.log(formatValidatorIssue(issue));\n }\n }\n\n if (!result.valid) {\n process.exit(1);\n }\n};\n","import { createOperationKey } from '../../../ir/operation';\nimport { addNamespace, removeNamespace } from '../../shared/utils/filter';\nimport { httpMethods } from '../../shared/utils/operation';\nimport type {\n OpenApiV2_0_X,\n OperationObject,\n PathItemObject,\n PathsObject,\n} from '../types/spec';\n\n/**\n * Replace source spec with filtered version.\n */\nexport const filterSpec = ({\n operations,\n preserveOrder,\n schemas,\n spec,\n}: {\n operations: Set<string>;\n parameters: Set<string>;\n preserveOrder: boolean;\n requestBodies: Set<string>;\n responses: Set<string>;\n schemas: Set<string>;\n spec: OpenApiV2_0_X;\n}) => {\n if (spec.definitions) {\n const filtered: typeof spec.definitions = {};\n\n if (preserveOrder) {\n for (const [name, source] of Object.entries(spec.definitions)) {\n if (schemas.has(addNamespace('schema', name))) {\n filtered[name] = source;\n }\n }\n } else {\n for (const key of schemas) {\n const { name } = removeNamespace(key);\n const source = spec.definitions[name];\n if (source) {\n filtered[name] = source;\n }\n }\n }\n\n spec.definitions = filtered;\n }\n\n if (spec.paths) {\n for (const entry of Object.entries(spec.paths)) {\n const path = entry[0] as keyof PathsObject;\n const pathItem = entry[1] as PathItemObject;\n\n for (const method of httpMethods) {\n // @ts-expect-error\n const operation = pathItem[method] as OperationObject;\n if (!operation) {\n continue;\n }\n\n const key = addNamespace(\n 'operation',\n createOperationKey({ method, path }),\n );\n if (!operations.has(key)) {\n // @ts-expect-error\n delete pathItem[method];\n }\n }\n\n // remove paths that have no operations left\n if (!Object.keys(pathItem).length) {\n delete spec.paths[path];\n }\n }\n }\n};\n","const fileLikeRegExp =\n /^(application\\/(pdf|rtf|msword|vnd\\.(ms-|openxmlformats-officedocument\\.)|zip|x-(7z|tar|rar|zip|iso)|octet-stream|gzip|x-msdownload|json\\+download|xml|x-yaml|x-7z-compressed|x-tar)|text\\/(yaml|css|javascript)|audio\\/(mpeg|wav)|video\\/(mp4|x-matroska)|image\\/(vnd\\.adobe\\.photoshop|svg\\+xml))(; ?charset=[^;]+)?$/i;\nconst jsonMimeRegExp = /^application\\/(.*\\+)?json(;.*)?$/i;\nconst multipartFormDataMimeRegExp = /^multipart\\/form-data(;.*)?$/i;\nconst textMimeRegExp = /^text\\/[a-z0-9.+-]+(;.*)?$/i;\nconst xWwwFormUrlEncodedMimeRegExp =\n /^application\\/x-www-form-urlencoded(;.*)?$/i;\nconst octetStreamMimeRegExp = /^application\\/octet-stream(;.*)?$/i;\n\nexport type IRMediaType =\n | 'form-data'\n | 'json'\n | 'text'\n | 'url-search-params'\n | 'octet-stream';\n\nexport const isMediaTypeFileLike = ({\n mediaType,\n}: {\n mediaType: string;\n}): boolean => {\n fileLikeRegExp.lastIndex = 0;\n return fileLikeRegExp.test(mediaType);\n};\n\nexport const mediaTypeToIrMediaType = ({\n mediaType,\n}: {\n mediaType: string;\n}): IRMediaType | undefined => {\n jsonMimeRegExp.lastIndex = 0;\n if (jsonMimeRegExp.test(mediaType)) {\n return 'json';\n }\n\n multipartFormDataMimeRegExp.lastIndex = 0;\n if (multipartFormDataMimeRegExp.test(mediaType)) {\n return 'form-data';\n }\n\n textMimeRegExp.lastIndex = 0;\n if (textMimeRegExp.test(mediaType)) {\n return 'text';\n }\n\n xWwwFormUrlEncodedMimeRegExp.lastIndex = 0;\n if (xWwwFormUrlEncodedMimeRegExp.test(mediaType)) {\n return 'url-search-params';\n }\n\n octetStreamMimeRegExp.lastIndex = 0;\n if (octetStreamMimeRegExp.test(mediaType)) {\n return 'octet-stream';\n }\n\n return;\n};\n","import type { IRMediaType } from '../../../ir/mediaType';\nimport {\n isMediaTypeFileLike,\n mediaTypeToIrMediaType,\n} from '../../../ir/mediaType';\nimport type {\n ReferenceObject,\n ResponseObject,\n SchemaObject,\n} from '../types/spec';\n\ninterface Content {\n mediaType: string;\n schema: SchemaObject | ReferenceObject | undefined;\n type: IRMediaType | undefined;\n}\n\nexport const contentToSchema = ({\n content,\n}: {\n content: Content;\n}): SchemaObject | undefined => {\n const { mediaType, schema } = content;\n\n if (schema && '$ref' in schema) {\n return {\n allOf: [{ ...schema }],\n };\n }\n\n if (!schema) {\n if (isMediaTypeFileLike({ mediaType })) {\n return {\n format: 'binary',\n type: 'string',\n };\n }\n return;\n }\n\n if (\n schema.type === 'string' &&\n !schema.format &&\n isMediaTypeFileLike({ mediaType })\n ) {\n return {\n ...schema,\n format: 'binary',\n };\n }\n\n return schema;\n};\n\nexport const mediaTypeObjects = ({\n mimeTypes,\n response,\n}: {\n mimeTypes: ReadonlyArray<string> | undefined;\n response: Pick<ResponseObject, 'schema'>;\n}): ReadonlyArray<Content> => {\n const objects: Array<Content> = [];\n\n for (const mediaType of mimeTypes ?? []) {\n objects.push({\n mediaType,\n schema: response.schema,\n type: mediaTypeToIrMediaType({ mediaType }),\n });\n }\n\n return objects;\n};\n","import type { Config } from '../types/config';\nimport type { IR } from './types';\n\nexport function getPaginationKeywordsRegExp(\n pagination: Config['parser']['pagination'],\n): RegExp {\n const pattern = `^(${pagination.keywords.join('|')})$`;\n return new RegExp(pattern);\n}\n\nexport interface Pagination {\n in: string;\n name: string;\n schema: IR.SchemaObject;\n}\n","import { refToName } from '../../../utils/ref';\n\nexport const discriminatorValues = (\n $ref: string,\n mapping?: Record<string, string>,\n): ReadonlyArray<string> => {\n const values: Array<string> = [];\n\n for (const name in mapping) {\n if (mapping[name] === $ref) {\n values.push(name);\n }\n }\n\n if (!values.length) {\n return [refToName($ref)];\n }\n\n return values;\n};\n","import type { IR } from '../../../ir/types';\nimport { addItemsToSchema } from '../../../ir/utils';\nimport { refToName } from '../../../utils/ref';\nimport type {\n SchemaState,\n SchemaType,\n SchemaWithRequired,\n} from '../../shared/types/schema';\nimport { discriminatorValues } from '../../shared/utils/discriminator';\nimport { mergeSchemaAccessScopes } from '../../shared/utils/schema';\nimport type { SchemaObject } from '../types/spec';\n\nexport const getSchemaType = ({\n schema,\n}: {\n schema: SchemaObject;\n}): SchemaType<SchemaObject> | undefined => {\n if (schema.type) {\n return schema.type;\n }\n\n // infer object based on the presence of properties\n if (schema.properties) {\n return 'object';\n }\n\n return;\n};\n\nconst parseSchemaJsDoc = ({\n irSchema,\n schema,\n}: {\n irSchema: IR.SchemaObject;\n schema: SchemaObject;\n}) => {\n if (schema.description) {\n irSchema.description = schema.description;\n }\n\n if (schema.title) {\n irSchema.title = schema.title;\n }\n};\n\nconst parseSchemaMeta = ({\n irSchema,\n schema,\n state,\n}: {\n irSchema: IR.SchemaObject;\n schema: SchemaObject;\n state: SchemaState;\n}) => {\n if (schema.default !== undefined) {\n irSchema.default = schema.default;\n }\n\n if (schema.exclusiveMaximum) {\n if (schema.maximum !== undefined) {\n irSchema.exclusiveMaximum = schema.maximum;\n }\n } else if (schema.maximum !== undefined) {\n irSchema.maximum = schema.maximum;\n }\n\n if (schema.exclusiveMinimum) {\n if (schema.minimum !== undefined) {\n irSchema.exclusiveMinimum = schema.minimum;\n }\n } else if (schema.minimum !== undefined) {\n irSchema.minimum = schema.minimum;\n }\n\n if (schema.format) {\n irSchema.format = schema.format;\n }\n\n if (schema.maxItems !== undefined) {\n irSchema.maxItems = schema.maxItems;\n }\n\n if (schema.maxLength !== undefined) {\n irSchema.maxLength = schema.maxLength;\n }\n\n if (schema.minItems !== undefined) {\n irSchema.minItems = schema.minItems;\n }\n\n if (schema.minLength !== undefined) {\n irSchema.minLength = schema.minLength;\n }\n\n if (schema.pattern) {\n irSchema.pattern = schema.pattern;\n }\n\n if (schema.readOnly) {\n irSchema.accessScope = 'read';\n irSchema.accessScopes = mergeSchemaAccessScopes(irSchema.accessScopes, [\n 'read',\n ]);\n } else if (state.isProperty) {\n irSchema.accessScopes = mergeSchemaAccessScopes(irSchema.accessScopes, [\n 'both',\n ]);\n }\n};\n\nconst parseArray = ({\n context,\n irSchema = {},\n schema,\n state,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaObject;\n state: SchemaState;\n}): IR.SchemaObject => {\n if (schema.maxItems && schema.maxItems === schema.minItems) {\n irSchema.type = 'tuple';\n } else {\n irSchema.type = 'array';\n }\n\n let schemaItems: Array<IR.SchemaObject> = [];\n\n if (schema.items) {\n const irItemsSchema = schemaToIrSchema({\n context,\n schema: schema.items,\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irItemsSchema.accessScopes,\n );\n\n if (\n !schemaItems.length &&\n schema.maxItems &&\n schema.maxItems === schema.minItems\n ) {\n schemaItems = Array(schema.maxItems).fill(irItemsSchema);\n } else {\n if ('$ref' in schema.items) {\n schemaItems.push(irItemsSchema);\n } else {\n const ofArray = schema.items.allOf;\n if (ofArray && ofArray.length > 1 && !schema.items['x-nullable']) {\n // bring composition up to avoid incorrectly nested arrays\n irSchema = {\n ...irSchema,\n ...irItemsSchema,\n };\n } else {\n schemaItems.push(irItemsSchema);\n }\n }\n }\n }\n\n irSchema = addItemsToSchema({\n items: schemaItems,\n schema: irSchema,\n });\n\n return irSchema;\n};\n\nconst parseBoolean = ({\n irSchema = {},\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaObject;\n state: SchemaState;\n}): IR.SchemaObject => {\n irSchema.type = 'boolean';\n\n return irSchema;\n};\n\nconst parseNumber = ({\n irSchema = {},\n schema,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaWithRequired<SchemaObject, 'type'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n irSchema.type = schema.type;\n\n return irSchema;\n};\n\nconst parseObject = ({\n context,\n irSchema = {},\n schema,\n state,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaObject;\n state: SchemaState;\n}): IR.SchemaObject => {\n irSchema.type = 'object';\n\n const schemaProperties: Record<string, IR.SchemaObject> = {};\n\n for (const name in schema.properties) {\n const property = schema.properties[name]!;\n if (typeof property === 'boolean') {\n // TODO: parser - handle boolean properties\n } else {\n const irPropertySchema = schemaToIrSchema({\n context,\n schema: property,\n state: {\n ...state,\n isProperty: true,\n },\n });\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irPropertySchema.accessScopes,\n );\n schemaProperties[name] = irPropertySchema;\n }\n }\n\n if (Object.keys(schemaProperties).length) {\n irSchema.properties = schemaProperties;\n }\n\n if (schema.additionalProperties === undefined) {\n if (!irSchema.properties) {\n irSchema.additionalProperties = {\n type: 'unknown',\n };\n }\n } else if (typeof schema.additionalProperties === 'boolean') {\n irSchema.additionalProperties = {\n type: schema.additionalProperties ? 'unknown' : 'never',\n };\n } else {\n const irAdditionalPropertiesSchema = schemaToIrSchema({\n context,\n schema: schema.additionalProperties,\n state,\n });\n irSchema.additionalProperties = irAdditionalPropertiesSchema;\n }\n\n if (schema.required) {\n irSchema.required = schema.required;\n }\n\n return irSchema;\n};\n\nconst parseString = ({\n irSchema = {},\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaObject;\n state: SchemaState;\n}): IR.SchemaObject => {\n irSchema.type = 'string';\n\n return irSchema;\n};\n\nconst initIrSchema = ({\n schema,\n}: {\n schema: SchemaObject;\n}): IR.SchemaObject => {\n const irSchema: IR.SchemaObject = {};\n\n parseSchemaJsDoc({\n irSchema,\n schema,\n });\n\n return irSchema;\n};\n\nconst parseAllOf = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaWithRequired<SchemaObject, 'allOf'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n let irSchema = initIrSchema({ schema });\n\n const schemaItems: Array<IR.SchemaObject> = [];\n const schemaType = getSchemaType({ schema });\n\n const compositionSchemas = schema.allOf;\n\n for (const compositionSchema of compositionSchemas) {\n const irCompositionSchema = schemaToIrSchema({\n context,\n schema: compositionSchema,\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irCompositionSchema.accessScopes,\n );\n\n if (schema.required) {\n if (irCompositionSchema.required) {\n irCompositionSchema.required = [\n ...irCompositionSchema.required,\n ...schema.required,\n ];\n } else {\n irCompositionSchema.required = schema.required;\n }\n }\n\n schemaItems.push(irCompositionSchema);\n\n if (compositionSchema.$ref) {\n const ref = context.resolveRef<SchemaObject>(compositionSchema.$ref);\n // `$ref` should be passed from the root `parseSchema()` call\n if (ref.discriminator && state.$ref) {\n const values = discriminatorValues(state.$ref);\n const valueSchemas: ReadonlyArray<IR.SchemaObject> = values.map(\n (value) => ({\n const: value,\n type: 'string',\n }),\n );\n const irDiscriminatorSchema: IR.SchemaObject = {\n properties: {\n [ref.discriminator]:\n valueSchemas.length > 1\n ? {\n items: valueSchemas,\n logicalOperator: 'or',\n }\n : valueSchemas[0]!,\n },\n type: 'object',\n };\n if (ref.required?.includes(ref.discriminator)) {\n irDiscriminatorSchema.required = [ref.discriminator];\n }\n schemaItems.push(irDiscriminatorSchema);\n }\n\n if (!state.circularReferenceTracker.has(compositionSchema.$ref)) {\n const irRefSchema = schemaToIrSchema({\n context,\n schema: ref,\n state: {\n ...state,\n $ref: compositionSchema.$ref,\n },\n });\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irRefSchema.accessScopes,\n );\n }\n }\n }\n\n if (schemaType === 'object') {\n const irObjectSchema = parseOneType({\n context,\n schema: {\n ...schema,\n type: 'object',\n },\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irObjectSchema.accessScopes,\n );\n\n if (irObjectSchema.properties) {\n for (const requiredProperty of irObjectSchema.required ?? []) {\n if (!irObjectSchema.properties[requiredProperty]) {\n for (const compositionSchema of compositionSchemas) {\n // TODO: parser - this could be probably resolved more accurately\n const finalCompositionSchema = compositionSchema.$ref\n ? context.resolveRef<SchemaObject>(compositionSchema.$ref)\n : compositionSchema;\n\n if (\n getSchemaType({ schema: finalCompositionSchema }) === 'object'\n ) {\n const irCompositionSchema = parseOneType({\n context,\n schema: {\n ...finalCompositionSchema,\n type: 'object',\n },\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irCompositionSchema.accessScopes,\n );\n\n if (irCompositionSchema.properties?.[requiredProperty]) {\n irObjectSchema.properties[requiredProperty] =\n irCompositionSchema.properties[requiredProperty];\n break;\n }\n }\n }\n }\n }\n schemaItems.push(irObjectSchema);\n }\n }\n\n irSchema = addItemsToSchema({\n items: schemaItems,\n logicalOperator: 'and',\n mutateSchemaOneItem: true,\n schema: irSchema,\n });\n\n if (schema['x-nullable']) {\n // nest composition to avoid producing an intersection with null\n const nestedItems: Array<IR.SchemaObject> = [\n {\n type: 'null',\n },\n ];\n\n if (schemaItems.length) {\n nestedItems.unshift(irSchema);\n }\n\n irSchema = {\n items: nestedItems,\n logicalOperator: 'or',\n };\n\n // TODO: parser - this is a hack to bring back up meta fields\n // without it, some schemas were missing original deprecated\n if (nestedItems[0]!.deprecated) {\n irSchema.deprecated = nestedItems[0]!.deprecated;\n }\n\n // TODO: parser - this is a hack to bring back up meta fields\n // without it, some schemas were missing original description\n if (nestedItems[0]!.description) {\n irSchema.description = nestedItems[0]!.description;\n }\n }\n\n return irSchema;\n};\n\nconst parseEnum = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaWithRequired<SchemaObject, 'enum'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n let irSchema = initIrSchema({ schema });\n\n irSchema.type = 'enum';\n\n const schemaItems: Array<IR.SchemaObject> = [];\n\n for (const [index, enumValue] of schema.enum.entries()) {\n const typeOfEnumValue = typeof enumValue;\n let enumType: SchemaType<SchemaObject> | 'null' | undefined;\n\n if (\n typeOfEnumValue === 'string' ||\n typeOfEnumValue === 'number' ||\n typeOfEnumValue === 'boolean'\n ) {\n enumType = typeOfEnumValue;\n } else if (typeOfEnumValue === 'object' && Array.isArray(enumValue)) {\n enumType = 'array';\n } else if (enumValue === null) {\n // nullable must be true\n if (schema['x-nullable']) {\n enumType = 'null';\n }\n } else {\n console.warn(\n '🚨',\n `unhandled \"${typeOfEnumValue}\" typeof value \"${enumValue}\" for enum`,\n schema.enum,\n );\n }\n\n if (!enumType) {\n continue;\n }\n\n const irTypeSchema = parseOneType({\n context,\n schema: {\n description: schema['x-enum-descriptions']?.[index],\n title:\n schema['x-enum-varnames']?.[index] ?? schema['x-enumNames']?.[index],\n // cast enum to string temporarily\n type: enumType === 'null' ? 'string' : enumType,\n },\n state,\n });\n\n irTypeSchema.const = enumValue;\n\n // cast enum back\n if (enumType === 'null') {\n irTypeSchema.type = enumType;\n }\n\n if (irTypeSchema.type === 'array') {\n irTypeSchema.type = 'tuple';\n }\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irTypeSchema.accessScopes,\n );\n\n schemaItems.push(irTypeSchema);\n }\n\n irSchema = addItemsToSchema({\n items: schemaItems,\n schema: irSchema,\n });\n\n return irSchema;\n};\n\nconst parseRef = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaWithRequired<SchemaObject, '$ref'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n const irSchema: IR.SchemaObject = {};\n\n // refs using unicode characters become encoded, didn't investigate why\n // but the suspicion is this comes from `@hey-api/json-schema-ref-parser`\n irSchema.$ref = decodeURI(schema.$ref);\n\n // rewrite definitions refs as the internal schema follows OpenAPI 3.x syntax\n // and stores all definitions as reusable schemas\n irSchema.$ref = irSchema.$ref.replace(\n /#\\/definitions\\/([^/]+)/g,\n '#/components/schemas/$1',\n );\n\n if (!state.circularReferenceTracker.has(schema.$ref)) {\n const refSchema = context.resolveRef<SchemaObject>(schema.$ref);\n const irRefSchema = schemaToIrSchema({\n context,\n schema: refSchema,\n state: {\n ...state,\n $ref: schema.$ref,\n isProperty: false,\n },\n });\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irRefSchema.accessScopes,\n );\n }\n\n return irSchema;\n};\n\nconst parseNullableType = ({\n context,\n irSchema,\n schema,\n state,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaWithRequired<SchemaObject, 'type'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n if (!irSchema) {\n irSchema = initIrSchema({ schema });\n }\n\n const typeIrSchema: IR.SchemaObject = {};\n\n parseSchemaMeta({\n irSchema: typeIrSchema,\n schema,\n state,\n });\n\n if (typeIrSchema.default === null) {\n // clear to avoid duplicate default inside the non-null schema.\n // this would produce incorrect validator output\n delete typeIrSchema.default;\n }\n\n const schemaItems: Array<IR.SchemaObject> = [\n parseOneType({\n context,\n irSchema: typeIrSchema,\n schema,\n state,\n }),\n {\n type: 'null',\n },\n ];\n\n irSchema = addItemsToSchema({\n items: schemaItems,\n schema: irSchema,\n });\n\n return irSchema;\n};\n\nconst parseType = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaWithRequired<SchemaObject, 'type'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n const irSchema = initIrSchema({ schema });\n\n parseSchemaMeta({\n irSchema,\n schema,\n state,\n });\n\n const type = getSchemaType({ schema });\n\n if (!type) {\n return irSchema;\n }\n\n if (schema['x-nullable']) {\n return parseNullableType({\n context,\n irSchema,\n schema: {\n ...schema,\n type,\n },\n state,\n });\n }\n\n return parseOneType({\n context,\n irSchema,\n schema: {\n ...schema,\n type,\n },\n state,\n });\n};\n\nconst parseOneType = ({\n context,\n irSchema,\n schema,\n state,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaWithRequired<SchemaObject, 'type'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n if (!irSchema) {\n irSchema = initIrSchema({ schema });\n\n parseSchemaMeta({\n irSchema,\n schema,\n state,\n });\n }\n\n switch (schema.type) {\n case 'array':\n return parseArray({\n context,\n irSchema,\n schema,\n state,\n });\n case 'boolean':\n return parseBoolean({\n context,\n irSchema,\n schema,\n state,\n });\n case 'integer':\n case 'number':\n return parseNumber({\n context,\n irSchema,\n schema,\n state,\n });\n case 'object':\n return parseObject({\n context,\n irSchema,\n schema,\n state,\n });\n case 'string':\n return parseString({\n context,\n irSchema,\n schema,\n state,\n });\n default:\n // gracefully handle invalid type\n return parseUnknown({\n context,\n irSchema,\n schema,\n state,\n });\n }\n};\n\nconst parseUnknown = ({\n irSchema,\n schema,\n state,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaObject;\n state: SchemaState;\n}): IR.SchemaObject => {\n if (!irSchema) {\n irSchema = initIrSchema({ schema });\n }\n\n irSchema.type = 'unknown';\n\n parseSchemaMeta({\n irSchema,\n schema,\n state,\n });\n\n return irSchema;\n};\n\nexport const schemaToIrSchema = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaObject;\n state: SchemaState | undefined;\n}): IR.SchemaObject => {\n if (!state) {\n state = {\n circularReferenceTracker: new Set(),\n };\n }\n\n if (state.$ref) {\n state.circularReferenceTracker.add(state.$ref);\n }\n\n if (schema.$ref) {\n return parseRef({\n context,\n schema: schema as SchemaWithRequired<SchemaObject, '$ref'>,\n state,\n });\n }\n\n if (schema.enum) {\n return parseEnum({\n context,\n schema: schema as SchemaWithRequired<SchemaObject, 'enum'>,\n state,\n });\n }\n\n if (schema.allOf) {\n return parseAllOf({\n context,\n schema: schema as SchemaWithRequired<SchemaObject, 'allOf'>,\n state,\n });\n }\n\n // infer object based on the presence of properties\n if (schema.type || schema.properties) {\n return parseType({\n context,\n schema: schema as SchemaWithRequired<SchemaObject, 'type'>,\n state,\n });\n }\n\n return parseUnknown({\n context,\n schema,\n state,\n });\n};\n\nexport const parseSchema = ({\n $ref,\n context,\n schema,\n}: {\n $ref: string;\n context: IR.Context;\n schema: SchemaObject;\n}) => {\n if (!context.ir.components) {\n context.ir.components = {};\n }\n\n if (!context.ir.components.schemas) {\n context.ir.components.schemas = {};\n }\n\n context.ir.components.schemas[refToName($ref)] = schemaToIrSchema({\n context,\n schema,\n state: {\n $ref,\n circularReferenceTracker: new Set(),\n },\n });\n};\n","import { getPaginationKeywordsRegExp } from '../../../ir/pagination';\nimport type { IR } from '../../../ir/types';\nimport type { SchemaType } from '../../shared/types/schema';\nimport type { ParameterObject, ReferenceObject } from '../types/spec';\nimport type { SchemaObject } from '../types/spec';\nimport { getSchemaType } from './schema';\n\nconst isPaginationType = (\n schemaType: SchemaType<SchemaObject> | undefined,\n): boolean =>\n schemaType === 'boolean' ||\n schemaType === 'integer' ||\n schemaType === 'number' ||\n schemaType === 'string';\n\n// We handle only simple values for now, up to 1 nested field\nexport const paginationField = ({\n context,\n name,\n schema,\n}: {\n context: IR.Context;\n name: string;\n schema:\n | ParameterObject\n | SchemaObject\n | ReferenceObject\n | {\n in: undefined;\n };\n}): boolean | string => {\n const paginationRegExp = getPaginationKeywordsRegExp(\n context.config.parser.pagination,\n );\n if (paginationRegExp.test(name)) {\n return true;\n }\n\n if ('$ref' in schema) {\n const ref = context.resolveRef<ParameterObject | SchemaObject>(\n schema.$ref ?? '',\n );\n\n if ('in' in ref && ref.in) {\n const refSchema =\n 'schema' in ref\n ? ref.schema\n : {\n ...ref,\n in: undefined,\n };\n\n return paginationField({\n context,\n name,\n schema: refSchema,\n });\n }\n\n return paginationField({\n context,\n name,\n schema: ref,\n });\n }\n\n if ('in' in schema) {\n if (!schema.in) {\n return false;\n }\n\n const finalSchema =\n 'schema' in schema\n ? schema.schema\n : {\n ...schema,\n in: undefined,\n };\n\n return paginationField({\n context,\n name,\n schema: finalSchema,\n });\n }\n\n for (const name in schema.properties) {\n const paginationRegExp = getPaginationKeywordsRegExp(\n context.config.parser.pagination,\n );\n\n if (paginationRegExp.test(name)) {\n const property = schema.properties[name]!;\n\n if (typeof property !== 'boolean' && !('$ref' in property)) {\n const schemaType = getSchemaType({ schema: property });\n // TODO: resolve deeper references\n\n if (isPaginationType(schemaType)) {\n return name;\n }\n }\n }\n }\n\n for (const allOf of schema.allOf ?? []) {\n const pagination = paginationField({\n context,\n name,\n schema: allOf,\n });\n if (pagination) {\n return pagination;\n }\n }\n\n return false;\n};\n","import type { IR, IRBodyObject } from '../../../ir/types';\nimport type { State } from '../../shared/types/state';\nimport { operationToId } from '../../shared/utils/operation';\nimport type {\n OperationObject,\n ParameterObject,\n PathItemObject,\n ResponseObject,\n SchemaObject,\n SecuritySchemeObject,\n} from '../types/spec';\nimport { contentToSchema, mediaTypeObjects } from './mediaType';\nimport { paginationField } from './pagination';\nimport { schemaToIrSchema } from './schema';\n\ninterface Operation\n extends Omit<OperationObject, 'parameters'>,\n Pick<IR.OperationObject, 'parameters'> {\n requestBody?: OperationObject['parameters'];\n}\n\nconst parseOperationJsDoc = ({\n irOperation,\n operation,\n}: {\n irOperation: IR.OperationObject;\n operation: Operation;\n}) => {\n if (operation.deprecated !== undefined) {\n irOperation.deprecated = operation.deprecated;\n }\n\n if (operation.description) {\n irOperation.description = operation.description;\n }\n\n if (operation.summary) {\n irOperation.summary = operation.summary;\n }\n\n if (operation.tags?.length) {\n irOperation.tags = operation.tags;\n }\n};\n\nconst initIrOperation = ({\n context,\n method,\n operation,\n path,\n state,\n}: Pick<IR.OperationObject, 'method' | 'path'> & {\n context: IR.Context;\n operation: Operation;\n state: State;\n}): IR.OperationObject => {\n const irOperation: IR.OperationObject = {\n id: operationToId({\n context,\n id: operation.operationId,\n method,\n path,\n state,\n }),\n method,\n path,\n };\n\n if (operation.operationId) {\n irOperation.operationId = operation.operationId;\n }\n\n parseOperationJsDoc({\n irOperation,\n operation,\n });\n\n return irOperation;\n};\n\nconst operationToIrOperation = ({\n context,\n method,\n operation,\n path,\n securitySchemesMap,\n state,\n}: Pick<IR.OperationObject, 'method' | 'path'> & {\n context: IR.Context;\n operation: Operation;\n securitySchemesMap: Map<string, SecuritySchemeObject>;\n state: State;\n}): IR.OperationObject => {\n const irOperation = initIrOperation({\n context,\n method,\n operation,\n path,\n state,\n });\n\n if (operation.parameters) {\n irOperation.parameters = operation.parameters;\n }\n\n let isRequestBodyRequired = false;\n const requestBodyObject: IRBodyObject = {\n mediaType: '',\n schema: {\n properties: {},\n required: [],\n type: 'object',\n },\n };\n const requestBodyObjectRequired: Array<string> = [];\n\n for (const requestBodyParameter of operation.requestBody ?? []) {\n const requestBody =\n '$ref' in requestBodyParameter\n ? context.resolveRef<ParameterObject>(requestBodyParameter.$ref)\n : requestBodyParameter;\n const schema: SchemaObject =\n requestBody.in === 'body'\n ? requestBody.schema\n : {\n ...requestBody,\n format: requestBody.type === 'file' ? 'binary' : requestBody.format,\n required: undefined,\n type: requestBody.type === 'file' ? 'string' : requestBody.type,\n };\n const contents = mediaTypeObjects({\n mimeTypes: operation.consumes,\n response: { schema },\n });\n // TODO: add support for multiple content types, for now prefer JSON\n const content =\n contents.find((content) => content.type === 'json') || contents[0];\n\n if (content) {\n const pagination = paginationField({\n context,\n name: '',\n schema:\n content.schema && '$ref' in content.schema\n ? {\n allOf: [{ ...content.schema }],\n description: requestBody.description,\n }\n : {\n description: requestBody.description,\n ...content.schema,\n },\n });\n\n const irSchema = schemaToIrSchema({\n context,\n schema:\n '$ref' in requestBody\n ? {\n allOf: [\n {\n ...requestBody,\n $ref: requestBody.$ref as string,\n required: [],\n type: 'string',\n },\n ],\n description: requestBody.description,\n }\n : content.schema && '$ref' in content.schema\n ? {\n allOf: [{ ...content.schema }],\n description: requestBody.description,\n }\n : {\n description: requestBody.description,\n ...content.schema,\n },\n state: undefined,\n });\n\n requestBodyObject.mediaType = content.mediaType;\n\n if (requestBody.in === 'body') {\n requestBodyObject.schema = irSchema;\n } else {\n requestBodyObject.schema.properties![requestBody.name] = irSchema;\n\n if (requestBody.required) {\n requestBodyObjectRequired.push(requestBody.name);\n }\n }\n\n if (pagination) {\n requestBodyObject.pagination = pagination;\n }\n\n if (content.type) {\n requestBodyObject.type = content.type;\n }\n }\n\n if (requestBody.required) {\n isRequestBodyRequired = true;\n }\n }\n\n if (requestBodyObject.mediaType) {\n if (requestBodyObjectRequired.length) {\n requestBodyObject.schema.required = requestBodyObjectRequired;\n }\n\n irOperation.body = requestBodyObject;\n\n if (isRequestBodyRequired) {\n irOperation.body.required = isRequestBodyRequired;\n }\n }\n\n for (const name in operation.responses) {\n if (!irOperation.responses) {\n irOperation.responses = {};\n }\n\n const response = operation.responses[name]!;\n const responseObject =\n '$ref' in response\n ? context.resolveRef<ResponseObject>(response.$ref)\n : response;\n const contents = mediaTypeObjects({\n // assume JSON by default\n mimeTypes: operation.produces ? operation.produces : ['application/json'],\n response: responseObject,\n });\n // TODO: add support for multiple content types, for now prefer JSON\n const content =\n contents.find((content) => content.type === 'json') || contents[0];\n\n if (content) {\n irOperation.responses[name] = {\n mediaType: content.mediaType,\n schema: schemaToIrSchema({\n context,\n schema: {\n description: responseObject.description,\n ...contentToSchema({ content }),\n },\n state: undefined,\n }),\n };\n } else {\n irOperation.responses[name] = {\n schema: {\n description: responseObject.description,\n // TODO: parser - cover all statues with empty response bodies\n // 1xx, 204, 205, 304\n type: name === '204' ? 'void' : 'unknown',\n },\n };\n }\n }\n\n if (operation.security) {\n const securitySchemeObjects: Array<IR.SecurityObject> = [];\n\n for (const securityRequirementObject of operation.security) {\n for (const name in securityRequirementObject) {\n const securitySchemeObject = securitySchemesMap.get(name);\n\n if (!securitySchemeObject) {\n continue;\n }\n\n let irSecuritySchemeObject: IR.SecurityObject | undefined;\n\n if (securitySchemeObject.type === 'apiKey') {\n irSecuritySchemeObject = securitySchemeObject;\n }\n\n if (securitySchemeObject.type === 'basic') {\n irSecuritySchemeObject = {\n description: securitySchemeObject.description,\n scheme: 'basic',\n type: 'http',\n };\n }\n\n if (securitySchemeObject.type === 'oauth2') {\n irSecuritySchemeObject = {\n description: securitySchemeObject.description,\n flows: {},\n type: 'oauth2',\n };\n\n switch (securitySchemeObject.flow) {\n case 'accessCode':\n irSecuritySchemeObject.flows.authorizationCode = {\n authorizationUrl: securitySchemeObject.authorizationUrl!,\n scopes: securitySchemeObject.scopes,\n tokenUrl: securitySchemeObject.tokenUrl!,\n };\n break;\n case 'application':\n irSecuritySchemeObject.flows.clientCredentials = {\n scopes: securitySchemeObject.scopes,\n tokenUrl: securitySchemeObject.tokenUrl!,\n };\n break;\n case 'implicit':\n irSecuritySchemeObject.flows.implicit = {\n authorizationUrl: securitySchemeObject.authorizationUrl!,\n scopes: securitySchemeObject.scopes,\n };\n break;\n case 'password':\n irSecuritySchemeObject.flows.password = {\n scopes: securitySchemeObject.scopes,\n tokenUrl: securitySchemeObject.tokenUrl!,\n };\n break;\n }\n }\n\n if (!irSecuritySchemeObject) {\n continue;\n }\n\n securitySchemeObjects.push(irSecuritySchemeObject);\n }\n }\n\n if (securitySchemeObjects.length) {\n irOperation.security = securitySchemeObjects;\n }\n }\n\n // TODO: parser - handle servers\n // qux: operation.servers\n\n return irOperation;\n};\n\nexport const parseOperation = ({\n context,\n method,\n operation,\n path,\n securitySchemesMap,\n state,\n}: {\n context: IR.Context;\n method: Extract<\n keyof PathItemObject,\n 'delete' | 'get' | 'head' | 'options' | 'patch' | 'post' | 'put' | 'trace'\n >;\n operation: Operation;\n path: keyof IR.PathsObject;\n securitySchemesMap: Map<string, SecuritySchemeObject>;\n state: State;\n}) => {\n if (!context.ir.paths) {\n context.ir.paths = {};\n }\n\n if (!context.ir.paths[path]) {\n context.ir.paths[path] = {};\n }\n\n context.ir.paths[path][method] = operationToIrOperation({\n context,\n method,\n operation,\n path,\n securitySchemesMap,\n state,\n });\n};\n","import type { IR } from '../../../ir/types';\nimport type {\n OperationObject,\n ParameterObject,\n ReferenceObject,\n SchemaObject,\n} from '../types/spec';\nimport { paginationField } from './pagination';\nimport { schemaToIrSchema } from './schema';\n\ntype Parameter = Exclude<ParameterObject, { in: 'body' }>;\n\n/**\n * Returns default parameter `explode` based on value of `collectionFormat`.\n */\nconst defaultExplode = (\n collectionFormat: Parameter['collectionFormat'],\n): boolean => {\n switch (collectionFormat) {\n case 'multi':\n return true;\n case 'csv':\n case 'pipes':\n case 'ssv':\n case 'tsv':\n default:\n return false;\n }\n};\n\n/**\n * Returns default parameter `style` based on value of `in`.\n */\nconst defaultStyle = (\n _in: Parameter['in'],\n): Required<IR.ParameterObject>['style'] => {\n switch (_in) {\n case 'header':\n case 'path':\n return 'simple';\n case 'query':\n default:\n return 'form';\n }\n};\n\nexport const parametersArrayToObject = ({\n context,\n operation,\n parameters,\n}: {\n context: IR.Context;\n operation: OperationObject;\n parameters?: ReadonlyArray<ParameterObject | ReferenceObject>;\n}): IR.ParametersObject | undefined => {\n if (!parameters || !Object.keys(parameters).length) {\n return;\n }\n\n const parametersObject: IR.ParametersObject = {};\n\n for (const parameterOrReference of parameters) {\n const parameter =\n '$ref' in parameterOrReference\n ? context.dereference<ParameterObject>(parameterOrReference)\n : parameterOrReference;\n\n // push request body parameters into a separate field\n if (parameter.in === 'body' || parameter.in === 'formData') {\n // @ts-expect-error\n if (!operation.requestBody) {\n // @ts-expect-error\n operation.requestBody = [];\n }\n\n // @ts-expect-error\n operation.requestBody.push(parameter);\n continue;\n }\n\n if (!parametersObject[parameter.in]) {\n parametersObject[parameter.in] = {};\n }\n\n // lowercase keys for case insensitive access\n parametersObject[parameter.in]![parameter.name.toLocaleLowerCase()] =\n parameterToIrParameter({\n context,\n parameter,\n });\n }\n\n return parametersObject;\n};\n\nconst parameterToIrParameter = ({\n context,\n parameter,\n}: {\n context: IR.Context;\n parameter: Parameter;\n}): IR.ParameterObject => {\n const schema = parameter;\n\n const finalSchema: SchemaObject =\n schema && '$ref' in schema\n ? {\n allOf: [\n {\n ...schema,\n $ref: schema.$ref as string,\n required: Array.isArray(schema.required) ? schema.required : [],\n type: schema.type as SchemaObject['type'],\n },\n ],\n description: parameter.description,\n }\n : {\n description: parameter.description,\n ...schema,\n required: Array.isArray(schema.required) ? schema.required : [],\n type: schema.type as SchemaObject['type'],\n };\n\n const pagination = paginationField({\n context,\n name: parameter.name,\n schema: finalSchema,\n });\n\n const style = defaultStyle(parameter.in);\n const explode = defaultExplode(parameter.collectionFormat);\n const allowReserved = false;\n\n const irParameter: IR.ParameterObject = {\n allowReserved,\n explode,\n location: parameter.in as IR.ParameterObject['location'],\n name: parameter.name,\n schema: schemaToIrSchema({\n context,\n schema: finalSchema,\n state: undefined,\n }),\n style,\n };\n\n if (parameter.description) {\n irParameter.description = parameter.description;\n }\n\n if (pagination) {\n irParameter.pagination = pagination;\n }\n\n if (parameter.required) {\n irParameter.required = parameter.required;\n }\n\n return irParameter;\n};\n","import type { IR } from '../../../ir/types';\nimport { parseUrl } from '../../../utils/url';\n\nexport const parseServers = ({ context }: { context: IR.Context }) => {\n let schemes: ReadonlyArray<string> = context.spec.schemes ?? [];\n let host = context.spec.host ?? '';\n const path = context.spec.basePath ?? '';\n\n if (typeof context.config.input.path === 'string') {\n const url = parseUrl(context.config.input.path);\n\n if (!schemes.length) {\n if (url.protocol) {\n schemes = [url.protocol] as typeof schemes;\n }\n }\n\n if (!host) {\n host = `${url.host}${url.port ? `:${url.port}` : ''}`;\n }\n }\n\n if (!schemes.length) {\n schemes = [''];\n }\n\n const servers = schemes\n .map((scheme) => `${scheme ? `${scheme}://` : ''}${host}${path}`)\n .filter(Boolean);\n\n if (servers.length) {\n context.ir.servers = servers.map((url) => ({\n url,\n }));\n }\n};\n","import { createOperationKey } from '../../../ir/operation';\nimport { httpMethods } from '../../shared/utils/operation';\nimport type {\n ValidatorIssue,\n ValidatorResult,\n} from '../../shared/utils/validator';\nimport type { OpenApiV2_0_X, PathItemObject, PathsObject } from '../types/spec';\n\nexport const validateOpenApiSpec = (spec: OpenApiV2_0_X): ValidatorResult => {\n const issues: Array<ValidatorIssue> = [];\n const operationIds = new Map();\n\n if (spec.paths) {\n for (const entry of Object.entries(spec.paths)) {\n const path = entry[0] as keyof PathsObject;\n const pathItem = entry[1] as PathItemObject;\n for (const method of httpMethods) {\n if (method === 'trace') {\n continue;\n }\n\n const operation = pathItem[method];\n if (!operation) {\n continue;\n }\n\n const operationKey = createOperationKey({ method, path });\n\n if (operation.operationId) {\n if (!operationIds.has(operation.operationId)) {\n operationIds.set(operation.operationId, operationKey);\n } else {\n issues.push({\n code: 'duplicate_key',\n context: {\n key: 'operationId',\n value: operation.operationId,\n },\n message:\n 'Duplicate `operationId` found. Each `operationId` must be unique.',\n path: ['paths', path, method, 'operationId'],\n severity: 'error',\n });\n }\n }\n }\n }\n }\n\n return {\n issues,\n valid: !issues.some((issue) => issue.severity === 'error'),\n };\n};\n","import type { IR } from '../../../ir/types';\nimport { buildResourceMetadata } from '../../shared/graph/meta';\nimport { transformOpenApiSpec } from '../../shared/transforms';\nimport type { State } from '../../shared/types/state';\nimport {\n createFilteredDependencies,\n createFilters,\n hasFilters,\n} from '../../shared/utils/filter';\nimport { buildGraph } from '../../shared/utils/graph';\nimport { mergeParametersObjects } from '../../shared/utils/parameter';\nimport { handleValidatorResult } from '../../shared/utils/validator';\nimport type {\n OpenApiV2_0_X,\n OperationObject,\n PathItemObject,\n PathsObject,\n SecuritySchemeObject,\n} from '../types/spec';\nimport { filterSpec } from './filter';\nimport { parseOperation } from './operation';\nimport { parametersArrayToObject } from './parameter';\nimport { parseSchema } from './schema';\nimport { parseServers } from './server';\nimport { validateOpenApiSpec } from './validate';\n\ntype PathKeys<T extends keyof PathsObject = keyof PathsObject> =\n keyof T extends infer K ? (K extends `/${string}` ? K : never) : never;\n\nexport const parseV2_0_X = (context: IR.Context<OpenApiV2_0_X>) => {\n if (context.config.parser.validate_EXPERIMENTAL) {\n const result = validateOpenApiSpec(context.spec);\n handleValidatorResult({ context, result });\n }\n\n const shouldFilterSpec = hasFilters(context.config.parser.filters);\n if (shouldFilterSpec) {\n const filters = createFilters(context.config.parser.filters, context.spec);\n const { graph } = buildGraph(context.spec);\n const { resourceMetadata } = buildResourceMetadata(graph);\n const sets = createFilteredDependencies({ filters, resourceMetadata });\n filterSpec({\n ...sets,\n preserveOrder: filters.preserveOrder,\n spec: context.spec,\n });\n }\n\n transformOpenApiSpec({ context });\n\n const state: State = {\n ids: new Map(),\n };\n const securitySchemesMap = new Map<string, SecuritySchemeObject>();\n\n for (const name in context.spec.securityDefinitions) {\n const securitySchemeObject = context.spec.securityDefinitions[name]!;\n securitySchemesMap.set(name, securitySchemeObject);\n }\n\n if (context.spec.definitions) {\n for (const name in context.spec.definitions) {\n const $ref = `#/definitions/${name}`;\n const schema = context.spec.definitions[name]!;\n\n parseSchema({\n $ref,\n context,\n schema,\n });\n }\n }\n\n parseServers({ context });\n\n for (const path in context.spec.paths) {\n if (path.startsWith('x-')) {\n continue;\n }\n\n const pathItem = context.spec.paths[path as PathKeys]!;\n\n const finalPathItem = pathItem.$ref\n ? {\n ...context.resolveRef<PathItemObject>(pathItem.$ref),\n ...pathItem,\n }\n : pathItem;\n\n const commonOperation: OperationObject = {\n consumes: context.spec.consumes,\n produces: context.spec.produces,\n responses: {},\n security: context.spec.security,\n };\n const operationArgs: Omit<Parameters<typeof parseOperation>[0], 'method'> =\n {\n context,\n operation: {\n ...commonOperation,\n parameters: parametersArrayToObject({\n context,\n operation: commonOperation,\n parameters: finalPathItem.parameters,\n }),\n },\n path: path as PathKeys,\n securitySchemesMap,\n state,\n };\n\n if (finalPathItem.delete) {\n const parameters = mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n operation: finalPathItem.delete,\n parameters: finalPathItem.delete.parameters,\n }),\n target: operationArgs.operation.parameters,\n });\n parseOperation({\n ...operationArgs,\n method: 'delete',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.delete,\n parameters,\n },\n });\n }\n\n if (finalPathItem.get) {\n const parameters = mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n operation: finalPathItem.get,\n parameters: finalPathItem.get.parameters,\n }),\n target: operationArgs.operation.parameters,\n });\n parseOperation({\n ...operationArgs,\n method: 'get',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.get,\n parameters,\n },\n });\n }\n\n if (finalPathItem.head) {\n const parameters = mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n operation: finalPathItem.head,\n parameters: finalPathItem.head.parameters,\n }),\n target: operationArgs.operation.parameters,\n });\n parseOperation({\n ...operationArgs,\n method: 'head',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.head,\n parameters,\n },\n });\n }\n\n if (finalPathItem.options) {\n const parameters = mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n operation: finalPathItem.options,\n parameters: finalPathItem.options.parameters,\n }),\n target: operationArgs.operation.parameters,\n });\n parseOperation({\n ...operationArgs,\n method: 'options',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.options,\n parameters,\n },\n });\n }\n\n if (finalPathItem.patch) {\n const parameters = mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n operation: finalPathItem.patch,\n parameters: finalPathItem.patch.parameters,\n }),\n target: operationArgs.operation.parameters,\n });\n parseOperation({\n ...operationArgs,\n method: 'patch',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.patch,\n parameters,\n },\n });\n }\n\n if (finalPathItem.post) {\n const parameters = mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n operation: finalPathItem.post,\n parameters: finalPathItem.post.parameters,\n }),\n target: operationArgs.operation.parameters,\n });\n parseOperation({\n ...operationArgs,\n method: 'post',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.post,\n parameters,\n },\n });\n }\n\n if (finalPathItem.put) {\n const parameters = mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n operation: finalPathItem.put,\n parameters: finalPathItem.put.parameters,\n }),\n target: operationArgs.operation.parameters,\n });\n parseOperation({\n ...operationArgs,\n method: 'put',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.put,\n parameters,\n },\n });\n }\n }\n};\n","import { createOperationKey } from '../../../ir/operation';\nimport { addNamespace, removeNamespace } from '../../shared/utils/filter';\nimport { httpMethods } from '../../shared/utils/operation';\nimport type { OpenApiV3_0_X, PathItemObject, PathsObject } from '../types/spec';\n\n/**\n * Replace source spec with filtered version.\n */\nexport const filterSpec = ({\n operations,\n parameters,\n preserveOrder,\n requestBodies,\n responses,\n schemas,\n spec,\n}: {\n operations: Set<string>;\n parameters: Set<string>;\n preserveOrder: boolean;\n requestBodies: Set<string>;\n responses: Set<string>;\n schemas: Set<string>;\n spec: OpenApiV3_0_X;\n}) => {\n if (spec.components) {\n if (spec.components.parameters) {\n const filtered: typeof spec.components.parameters = {};\n\n if (preserveOrder) {\n for (const [name, source] of Object.entries(\n spec.components.parameters,\n )) {\n if (parameters.has(addNamespace('parameter', name))) {\n filtered[name] = source;\n }\n }\n } else {\n for (const key of parameters) {\n const { name } = removeNamespace(key);\n const source = spec.components.parameters[name];\n if (source) {\n filtered[name] = source;\n }\n }\n }\n\n spec.components.parameters = filtered;\n }\n\n if (spec.components.requestBodies) {\n const filtered: typeof spec.components.requestBodies = {};\n\n if (preserveOrder) {\n for (const [name, source] of Object.entries(\n spec.components.requestBodies,\n )) {\n if (requestBodies.has(addNamespace('body', name))) {\n filtered[name] = source;\n }\n }\n } else {\n for (const key of requestBodies) {\n const { name } = removeNamespace(key);\n const source = spec.components.requestBodies[name];\n if (source) {\n filtered[name] = source;\n }\n }\n }\n\n spec.components.requestBodies = filtered;\n }\n\n if (spec.components.responses) {\n const filtered: typeof spec.components.responses = {};\n\n if (preserveOrder) {\n for (const [name, source] of Object.entries(\n spec.components.responses,\n )) {\n if (responses.has(addNamespace('response', name))) {\n filtered[name] = source;\n }\n }\n } else {\n for (const key of responses) {\n const { name } = removeNamespace(key);\n const source = spec.components.responses[name];\n if (source) {\n filtered[name] = source;\n }\n }\n }\n\n spec.components.responses = filtered;\n }\n\n if (spec.components.schemas) {\n const filtered: typeof spec.components.schemas = {};\n\n if (preserveOrder) {\n for (const [name, source] of Object.entries(spec.components.schemas)) {\n if (schemas.has(addNamespace('schema', name))) {\n filtered[name] = source;\n }\n }\n } else {\n for (const key of schemas) {\n const { name } = removeNamespace(key);\n const source = spec.components.schemas[name];\n if (source) {\n filtered[name] = source;\n }\n }\n }\n\n spec.components.schemas = filtered;\n }\n }\n\n if (spec.paths) {\n for (const entry of Object.entries(spec.paths)) {\n const path = entry[0] as keyof PathsObject;\n const pathItem = entry[1] as PathItemObject;\n\n for (const method of httpMethods) {\n const operation = pathItem[method];\n if (!operation) {\n continue;\n }\n\n const key = addNamespace(\n 'operation',\n createOperationKey({ method, path }),\n );\n if (!operations.has(key)) {\n delete pathItem[method];\n }\n }\n\n // remove paths that have no operations left\n if (!Object.keys(pathItem).length) {\n delete spec.paths[path];\n }\n }\n }\n};\n","import type { IRMediaType } from '../../../ir/mediaType';\nimport {\n isMediaTypeFileLike,\n mediaTypeToIrMediaType,\n} from '../../../ir/mediaType';\nimport type {\n MediaTypeObject,\n ReferenceObject,\n SchemaObject,\n} from '../types/spec';\n\ninterface Content {\n mediaType: string;\n schema: SchemaObject | ReferenceObject | undefined;\n type: IRMediaType | undefined;\n}\n\nexport const contentToSchema = ({\n content,\n}: {\n content: Content;\n}): SchemaObject | undefined => {\n const { mediaType, schema } = content;\n\n if (schema && '$ref' in schema) {\n return {\n allOf: [{ ...schema }],\n };\n }\n\n if (!schema) {\n if (isMediaTypeFileLike({ mediaType })) {\n return {\n format: 'binary',\n type: 'string',\n };\n }\n return;\n }\n\n if (\n schema.type === 'string' &&\n !schema.format &&\n isMediaTypeFileLike({ mediaType })\n ) {\n return {\n ...schema,\n format: 'binary',\n };\n }\n\n return schema;\n};\n\nexport const mediaTypeObjects = ({\n content,\n}: {\n content: Record<string, MediaTypeObject> | undefined;\n}): ReadonlyArray<Content> => {\n const objects: Array<Content> = [];\n\n for (const mediaType in content) {\n objects.push({\n mediaType,\n schema: content[mediaType]!.schema,\n type: mediaTypeToIrMediaType({ mediaType }),\n });\n }\n\n return objects;\n};\n","import type { IR } from '../../../ir/types';\nimport { addItemsToSchema } from '../../../ir/utils';\nimport { refToName } from '../../../utils/ref';\nimport type {\n SchemaState,\n SchemaType,\n SchemaWithRequired,\n} from '../../shared/types/schema';\nimport { discriminatorValues } from '../../shared/utils/discriminator';\nimport { mergeSchemaAccessScopes } from '../../shared/utils/schema';\nimport type { ReferenceObject, SchemaObject } from '../types/spec';\n\nexport const getSchemaType = ({\n schema,\n}: {\n schema: SchemaObject;\n}): SchemaType<SchemaObject> | undefined => {\n if (schema.type) {\n return schema.type;\n }\n\n // infer object based on the presence of properties\n if (schema.properties) {\n return 'object';\n }\n\n return;\n};\n\nconst parseSchemaJsDoc = ({\n irSchema,\n schema,\n}: {\n irSchema: IR.SchemaObject;\n schema: SchemaObject;\n}) => {\n if (schema.deprecated !== undefined) {\n irSchema.deprecated = schema.deprecated;\n }\n\n if (schema.description) {\n irSchema.description = schema.description;\n }\n\n if (schema.title) {\n irSchema.title = schema.title;\n }\n};\n\nconst parseSchemaMeta = ({\n irSchema,\n schema,\n state,\n}: {\n irSchema: IR.SchemaObject;\n schema: SchemaObject;\n state: SchemaState;\n}) => {\n if (schema.default !== undefined) {\n irSchema.default = schema.default;\n }\n\n if (schema.exclusiveMaximum) {\n if (schema.maximum !== undefined) {\n irSchema.exclusiveMaximum = schema.maximum;\n }\n } else if (schema.maximum !== undefined) {\n irSchema.maximum = schema.maximum;\n }\n\n if (schema.exclusiveMinimum) {\n if (schema.minimum !== undefined) {\n irSchema.exclusiveMinimum = schema.minimum;\n }\n } else if (schema.minimum !== undefined) {\n irSchema.minimum = schema.minimum;\n }\n\n if (schema.format) {\n irSchema.format = schema.format;\n }\n\n if (schema.maxItems !== undefined) {\n irSchema.maxItems = schema.maxItems;\n }\n\n if (schema.maxLength !== undefined) {\n irSchema.maxLength = schema.maxLength;\n }\n\n if (schema.minItems !== undefined) {\n irSchema.minItems = schema.minItems;\n }\n\n if (schema.minLength !== undefined) {\n irSchema.minLength = schema.minLength;\n }\n\n if (schema.pattern) {\n irSchema.pattern = schema.pattern;\n }\n\n if (schema.readOnly) {\n irSchema.accessScope = 'read';\n irSchema.accessScopes = mergeSchemaAccessScopes(irSchema.accessScopes, [\n 'read',\n ]);\n } else if (schema.writeOnly) {\n irSchema.accessScope = 'write';\n irSchema.accessScopes = mergeSchemaAccessScopes(irSchema.accessScopes, [\n 'write',\n ]);\n } else if (state.isProperty) {\n irSchema.accessScopes = mergeSchemaAccessScopes(irSchema.accessScopes, [\n 'both',\n ]);\n }\n};\n\nconst parseArray = ({\n context,\n irSchema = {},\n schema,\n state,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaObject;\n state: SchemaState;\n}): IR.SchemaObject => {\n if (schema.maxItems && schema.maxItems === schema.minItems) {\n irSchema.type = 'tuple';\n } else {\n irSchema.type = 'array';\n }\n\n let schemaItems: Array<IR.SchemaObject> = [];\n\n if (schema.items) {\n const irItemsSchema = schemaToIrSchema({\n context,\n schema: schema.items,\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irItemsSchema.accessScopes,\n );\n\n if (\n !schemaItems.length &&\n schema.maxItems &&\n schema.maxItems === schema.minItems\n ) {\n schemaItems = Array(schema.maxItems).fill(irItemsSchema);\n } else {\n if ('$ref' in schema.items) {\n schemaItems.push(irItemsSchema);\n } else {\n const ofArray =\n schema.items.allOf || schema.items.anyOf || schema.items.oneOf;\n if (ofArray && ofArray.length > 1 && !schema.items.nullable) {\n // bring composition up to avoid incorrectly nested arrays\n irSchema = {\n ...irSchema,\n ...irItemsSchema,\n };\n } else {\n schemaItems.push(irItemsSchema);\n }\n }\n }\n }\n\n irSchema = addItemsToSchema({\n items: schemaItems,\n schema: irSchema,\n });\n\n return irSchema;\n};\n\nconst parseBoolean = ({\n irSchema = {},\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaObject;\n state: SchemaState;\n}): IR.SchemaObject => {\n irSchema.type = 'boolean';\n\n return irSchema;\n};\n\nconst parseNumber = ({\n irSchema = {},\n schema,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaWithRequired<SchemaObject, 'type'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n irSchema.type = schema.type;\n\n return irSchema;\n};\n\nconst parseObject = ({\n context,\n irSchema = {},\n schema,\n state,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaObject;\n state: SchemaState;\n}): IR.SchemaObject => {\n irSchema.type = 'object';\n\n const schemaProperties: Record<string, IR.SchemaObject> = {};\n\n for (const name in schema.properties) {\n const property = schema.properties[name]!;\n if (typeof property === 'boolean') {\n // TODO: parser - handle boolean properties\n } else {\n const irPropertySchema = schemaToIrSchema({\n context,\n schema: property,\n state: {\n ...state,\n isProperty: true,\n },\n });\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irPropertySchema.accessScopes,\n );\n schemaProperties[name] = irPropertySchema;\n }\n }\n\n if (Object.keys(schemaProperties).length) {\n irSchema.properties = schemaProperties;\n }\n\n if (schema.additionalProperties === undefined) {\n if (!irSchema.properties) {\n irSchema.additionalProperties = {\n type: 'unknown',\n };\n }\n } else if (typeof schema.additionalProperties === 'boolean') {\n irSchema.additionalProperties = {\n type: schema.additionalProperties ? 'unknown' : 'never',\n };\n } else {\n const irAdditionalPropertiesSchema = schemaToIrSchema({\n context,\n schema: schema.additionalProperties,\n state,\n });\n irSchema.additionalProperties = irAdditionalPropertiesSchema;\n }\n\n if (schema.required) {\n irSchema.required = schema.required;\n }\n\n return irSchema;\n};\n\nconst parseString = ({\n irSchema = {},\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaObject;\n state: SchemaState;\n}): IR.SchemaObject => {\n irSchema.type = 'string';\n\n return irSchema;\n};\n\nconst initIrSchema = ({\n schema,\n}: {\n schema: SchemaObject;\n}): IR.SchemaObject => {\n const irSchema: IR.SchemaObject = {};\n\n parseSchemaJsDoc({\n irSchema,\n schema,\n });\n\n return irSchema;\n};\n\nconst parseAllOf = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaWithRequired<SchemaObject, 'allOf'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n let irSchema = initIrSchema({ schema });\n\n const schemaItems: Array<IR.SchemaObject> = [];\n const schemaType = getSchemaType({ schema });\n\n const compositionSchemas = schema.allOf;\n\n for (const compositionSchema of compositionSchemas) {\n const irCompositionSchema = schemaToIrSchema({\n context,\n schema: compositionSchema,\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irCompositionSchema.accessScopes,\n );\n\n if (schema.required) {\n if (irCompositionSchema.required) {\n irCompositionSchema.required = [\n ...irCompositionSchema.required,\n ...schema.required,\n ];\n } else {\n irCompositionSchema.required = schema.required;\n }\n }\n\n schemaItems.push(irCompositionSchema);\n\n if ('$ref' in compositionSchema) {\n const ref = context.resolveRef<SchemaObject>(compositionSchema.$ref);\n // `$ref` should be passed from the root `parseSchema()` call\n if (ref.discriminator && state.$ref) {\n const values = discriminatorValues(\n state.$ref,\n ref.discriminator.mapping,\n );\n const valueSchemas: ReadonlyArray<IR.SchemaObject> = values.map(\n (value) => ({\n const: value,\n type: 'string',\n }),\n );\n const irDiscriminatorSchema: IR.SchemaObject = {\n properties: {\n [ref.discriminator.propertyName]:\n valueSchemas.length > 1\n ? {\n items: valueSchemas,\n logicalOperator: 'or',\n }\n : valueSchemas[0]!,\n },\n type: 'object',\n };\n if (ref.required?.includes(ref.discriminator.propertyName)) {\n irDiscriminatorSchema.required = [ref.discriminator.propertyName];\n }\n schemaItems.push(irDiscriminatorSchema);\n }\n\n if (!state.circularReferenceTracker.has(compositionSchema.$ref)) {\n const irRefSchema = schemaToIrSchema({\n context,\n schema: ref,\n state: {\n ...state,\n $ref: compositionSchema.$ref,\n },\n });\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irRefSchema.accessScopes,\n );\n }\n }\n }\n\n if (schemaType === 'object') {\n const irObjectSchema = parseOneType({\n context,\n schema: {\n ...schema,\n type: 'object',\n },\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irObjectSchema.accessScopes,\n );\n\n if (irObjectSchema.properties) {\n for (const requiredProperty of irObjectSchema.required ?? []) {\n if (!irObjectSchema.properties[requiredProperty]) {\n for (const compositionSchema of compositionSchemas) {\n // TODO: parser - this could be probably resolved more accurately\n const finalCompositionSchema =\n '$ref' in compositionSchema\n ? context.resolveRef<SchemaObject>(compositionSchema.$ref)\n : compositionSchema;\n\n if (\n getSchemaType({ schema: finalCompositionSchema }) === 'object'\n ) {\n const irCompositionSchema = parseOneType({\n context,\n schema: {\n ...finalCompositionSchema,\n type: 'object',\n },\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irCompositionSchema.accessScopes,\n );\n\n if (irCompositionSchema.properties?.[requiredProperty]) {\n irObjectSchema.properties[requiredProperty] =\n irCompositionSchema.properties[requiredProperty];\n break;\n }\n }\n }\n }\n }\n schemaItems.push(irObjectSchema);\n }\n }\n\n irSchema = addItemsToSchema({\n items: schemaItems,\n logicalOperator: 'and',\n mutateSchemaOneItem: true,\n schema: irSchema,\n });\n\n if (schema.nullable) {\n // nest composition to avoid producing an intersection with null\n const nestedItems: Array<IR.SchemaObject> = [\n {\n type: 'null',\n },\n ];\n\n if (schemaItems.length) {\n nestedItems.unshift(irSchema);\n }\n\n irSchema = {\n items: nestedItems,\n logicalOperator: 'or',\n };\n\n // TODO: parser - this is a hack to bring back up meta fields\n // without it, some schemas were missing original deprecated\n if (nestedItems[0]!.deprecated) {\n irSchema.deprecated = nestedItems[0]!.deprecated;\n }\n\n // TODO: parser - this is a hack to bring back up meta fields\n // without it, some schemas were missing original description\n if (nestedItems[0]!.description) {\n irSchema.description = nestedItems[0]!.description;\n }\n }\n\n return irSchema;\n};\n\nconst parseAnyOf = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaWithRequired<SchemaObject, 'anyOf'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n let irSchema = initIrSchema({ schema });\n\n const schemaItems: Array<IR.SchemaObject> = [];\n const schemaType = getSchemaType({ schema });\n\n const compositionSchemas = schema.anyOf;\n\n for (const compositionSchema of compositionSchemas) {\n let irCompositionSchema = schemaToIrSchema({\n context,\n schema: compositionSchema,\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irCompositionSchema.accessScopes,\n );\n\n // `$ref` should be defined with discriminators\n if (schema.discriminator && '$ref' in compositionSchema) {\n const values = discriminatorValues(\n compositionSchema.$ref,\n schema.discriminator.mapping,\n );\n const valueSchemas: ReadonlyArray<IR.SchemaObject> = values.map(\n (value) => ({\n const: value,\n type: 'string',\n }),\n );\n const irDiscriminatorSchema: IR.SchemaObject = {\n properties: {\n [schema.discriminator.propertyName]:\n valueSchemas.length > 1\n ? {\n items: valueSchemas,\n logicalOperator: 'or',\n }\n : valueSchemas[0]!,\n },\n type: 'object',\n };\n irCompositionSchema = {\n items: [irDiscriminatorSchema, irCompositionSchema],\n logicalOperator: 'and',\n };\n }\n\n schemaItems.push(irCompositionSchema);\n }\n\n if (schema.nullable) {\n schemaItems.push({ type: 'null' });\n }\n\n irSchema = addItemsToSchema({\n items: schemaItems,\n mutateSchemaOneItem: true,\n schema: irSchema,\n });\n\n if (schemaType === 'object') {\n // nest composition to avoid producing a union with object properties\n const irObjectSchema = parseOneType({\n context,\n schema: {\n ...schema,\n type: 'object',\n },\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irObjectSchema.accessScopes,\n );\n\n if (irObjectSchema.properties) {\n irSchema = {\n items: [irSchema, irObjectSchema],\n logicalOperator: 'and',\n };\n }\n }\n\n return irSchema;\n};\n\nconst parseEnum = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaWithRequired<SchemaObject, 'enum'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n let irSchema = initIrSchema({ schema });\n\n irSchema.type = 'enum';\n\n const schemaItems: Array<IR.SchemaObject> = [];\n\n for (const [index, enumValue] of schema.enum.entries()) {\n const typeOfEnumValue = typeof enumValue;\n let enumType: SchemaType<SchemaObject> | 'null' | undefined;\n\n if (\n typeOfEnumValue === 'string' ||\n typeOfEnumValue === 'number' ||\n typeOfEnumValue === 'boolean'\n ) {\n enumType = typeOfEnumValue;\n } else if (typeOfEnumValue === 'object' && Array.isArray(enumValue)) {\n enumType = 'array';\n } else if (enumValue === null) {\n // nullable must be true\n if (schema.nullable) {\n enumType = 'null';\n }\n } else {\n console.warn(\n '🚨',\n `unhandled \"${typeOfEnumValue}\" typeof value \"${enumValue}\" for enum`,\n schema.enum,\n );\n }\n\n if (!enumType) {\n continue;\n }\n\n const irTypeSchema = parseOneType({\n context,\n schema: {\n description: schema['x-enum-descriptions']?.[index],\n title:\n schema['x-enum-varnames']?.[index] ?? schema['x-enumNames']?.[index],\n // cast enum to string temporarily\n type: enumType === 'null' ? 'string' : enumType,\n },\n state,\n });\n\n irTypeSchema.const = enumValue;\n\n // cast enum back\n if (enumType === 'null') {\n irTypeSchema.type = enumType;\n }\n\n if (irTypeSchema.type === 'array') {\n irTypeSchema.type = 'tuple';\n }\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irTypeSchema.accessScopes,\n );\n\n schemaItems.push(irTypeSchema);\n }\n\n irSchema = addItemsToSchema({\n items: schemaItems,\n schema: irSchema,\n });\n\n return irSchema;\n};\n\nconst parseOneOf = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaWithRequired<SchemaObject, 'oneOf'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n let irSchema = initIrSchema({ schema });\n\n let schemaItems: Array<IR.SchemaObject> = [];\n const schemaType = getSchemaType({ schema });\n\n const compositionSchemas = schema.oneOf;\n\n for (const compositionSchema of compositionSchemas) {\n let irCompositionSchema = schemaToIrSchema({\n context,\n schema: compositionSchema,\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irCompositionSchema.accessScopes,\n );\n\n // `$ref` should be defined with discriminators\n if (schema.discriminator && '$ref' in compositionSchema) {\n const values = discriminatorValues(\n compositionSchema.$ref,\n schema.discriminator.mapping,\n );\n const valueSchemas: ReadonlyArray<IR.SchemaObject> = values.map(\n (value) => ({\n const: value,\n type: 'string',\n }),\n );\n const irDiscriminatorSchema: IR.SchemaObject = {\n properties: {\n [schema.discriminator.propertyName]:\n valueSchemas.length > 1\n ? {\n items: valueSchemas,\n logicalOperator: 'or',\n }\n : valueSchemas[0]!,\n },\n required: [schema.discriminator.propertyName],\n type: 'object',\n };\n irCompositionSchema = {\n items: [irDiscriminatorSchema, irCompositionSchema],\n logicalOperator: 'and',\n };\n }\n\n // since we know oneOf will be using \"or\" logical operator, if the parsed\n // composition schema also has an \"or\" operator, we can bring it up\n // to avoid unnecessary brackets\n if (\n irCompositionSchema.logicalOperator === 'or' &&\n irCompositionSchema.type !== 'array' &&\n irCompositionSchema.items\n ) {\n schemaItems = schemaItems.concat(irCompositionSchema.items);\n } else {\n schemaItems.push(irCompositionSchema);\n }\n }\n\n if (schema.nullable) {\n schemaItems.push({ type: 'null' });\n }\n\n irSchema = addItemsToSchema({\n items: schemaItems,\n mutateSchemaOneItem: true,\n schema: irSchema,\n });\n\n if (schemaType === 'object') {\n // nest composition to avoid producing a union with object properties\n const irObjectSchema = parseOneType({\n context,\n schema: {\n ...schema,\n type: 'object',\n },\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irObjectSchema.accessScopes,\n );\n\n if (irObjectSchema.properties) {\n irSchema = {\n items: [irSchema, irObjectSchema],\n logicalOperator: 'and',\n };\n }\n }\n\n return irSchema;\n};\n\nconst parseRef = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: ReferenceObject;\n state: SchemaState;\n}): IR.SchemaObject => {\n const irSchema: IR.SchemaObject = {};\n\n // refs using unicode characters become encoded, didn't investigate why\n // but the suspicion is this comes from `@hey-api/json-schema-ref-parser`\n irSchema.$ref = decodeURI(schema.$ref);\n\n if (!state.circularReferenceTracker.has(schema.$ref)) {\n const refSchema = context.resolveRef<SchemaObject>(schema.$ref);\n const irRefSchema = schemaToIrSchema({\n context,\n schema: refSchema,\n state: {\n ...state,\n $ref: schema.$ref,\n isProperty: false,\n },\n });\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irRefSchema.accessScopes,\n );\n }\n\n return irSchema;\n};\n\nconst parseNullableType = ({\n context,\n irSchema,\n schema,\n state,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaWithRequired<SchemaObject, 'type'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n if (!irSchema) {\n irSchema = initIrSchema({ schema });\n }\n\n const typeIrSchema: IR.SchemaObject = {};\n\n parseSchemaMeta({\n irSchema: typeIrSchema,\n schema,\n state,\n });\n\n if (typeIrSchema.default === null) {\n // clear to avoid duplicate default inside the non-null schema.\n // this would produce incorrect validator output\n delete typeIrSchema.default;\n }\n\n const schemaItems: Array<IR.SchemaObject> = [\n parseOneType({\n context,\n irSchema: typeIrSchema,\n schema,\n state,\n }),\n {\n type: 'null',\n },\n ];\n\n irSchema = addItemsToSchema({\n items: schemaItems,\n schema: irSchema,\n });\n\n return irSchema;\n};\n\nconst parseType = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaWithRequired<SchemaObject, 'type'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n const irSchema = initIrSchema({ schema });\n\n parseSchemaMeta({\n irSchema,\n schema,\n state,\n });\n\n const type = getSchemaType({ schema });\n\n if (!type) {\n return irSchema;\n }\n\n if (!schema.nullable) {\n return parseOneType({\n context,\n irSchema,\n schema: {\n ...schema,\n type,\n },\n state,\n });\n }\n\n return parseNullableType({\n context,\n irSchema,\n schema: {\n ...schema,\n type,\n },\n state,\n });\n};\n\nconst parseOneType = ({\n context,\n irSchema,\n schema,\n state,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaWithRequired<SchemaObject, 'type'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n if (!irSchema) {\n irSchema = initIrSchema({ schema });\n\n parseSchemaMeta({\n irSchema,\n schema,\n state,\n });\n }\n\n switch (schema.type) {\n case 'array':\n return parseArray({\n context,\n irSchema,\n schema,\n state,\n });\n case 'boolean':\n return parseBoolean({\n context,\n irSchema,\n schema,\n state,\n });\n case 'integer':\n case 'number':\n return parseNumber({\n context,\n irSchema,\n schema,\n state,\n });\n case 'object':\n return parseObject({\n context,\n irSchema,\n schema,\n state,\n });\n case 'string':\n return parseString({\n context,\n irSchema,\n schema,\n state,\n });\n default:\n // gracefully handle invalid type\n return parseUnknown({\n context,\n irSchema,\n schema,\n state,\n });\n }\n};\n\nconst parseUnknown = ({\n irSchema,\n schema,\n state,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaObject;\n state: SchemaState;\n}): IR.SchemaObject => {\n if (!irSchema) {\n irSchema = initIrSchema({ schema });\n }\n\n irSchema.type = 'unknown';\n\n parseSchemaMeta({\n irSchema,\n schema,\n state,\n });\n\n return irSchema;\n};\n\nexport const schemaToIrSchema = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaObject | ReferenceObject;\n state: SchemaState | undefined;\n}): IR.SchemaObject => {\n if (!state) {\n state = {\n circularReferenceTracker: new Set(),\n };\n }\n\n if (state.$ref) {\n state.circularReferenceTracker.add(state.$ref);\n }\n\n if ('$ref' in schema) {\n return parseRef({\n context,\n schema,\n state,\n });\n }\n\n if (schema.enum) {\n return parseEnum({\n context,\n schema: schema as SchemaWithRequired<SchemaObject, 'enum'>,\n state,\n });\n }\n\n if (schema.allOf) {\n return parseAllOf({\n context,\n schema: schema as SchemaWithRequired<SchemaObject, 'allOf'>,\n state,\n });\n }\n\n if (schema.anyOf) {\n return parseAnyOf({\n context,\n schema: schema as SchemaWithRequired<SchemaObject, 'anyOf'>,\n state,\n });\n }\n\n if (schema.oneOf) {\n return parseOneOf({\n context,\n schema: schema as SchemaWithRequired<SchemaObject, 'oneOf'>,\n state,\n });\n }\n\n // infer object based on the presence of properties\n if (schema.type || schema.properties) {\n return parseType({\n context,\n schema: schema as SchemaWithRequired<SchemaObject, 'type'>,\n state,\n });\n }\n\n return parseUnknown({\n context,\n schema,\n state,\n });\n};\n\nexport const parseSchema = ({\n $ref,\n context,\n schema,\n}: {\n $ref: string;\n context: IR.Context;\n schema: SchemaObject | ReferenceObject;\n}) => {\n if (!context.ir.components) {\n context.ir.components = {};\n }\n\n if (!context.ir.components.schemas) {\n context.ir.components.schemas = {};\n }\n\n context.ir.components.schemas[refToName($ref)] = schemaToIrSchema({\n context,\n schema,\n state: {\n $ref,\n circularReferenceTracker: new Set(),\n },\n });\n};\n","import { getPaginationKeywordsRegExp } from '../../../ir/pagination';\nimport type { IR } from '../../../ir/types';\nimport type { SchemaType } from '../../shared/types/schema';\nimport type {\n ParameterObject,\n ReferenceObject,\n RequestBodyObject,\n} from '../types/spec';\nimport type { SchemaObject } from '../types/spec';\nimport { mediaTypeObjects } from './mediaType';\nimport { getSchemaType } from './schema';\n\nconst isPaginationType = (\n schemaType: SchemaType<SchemaObject> | undefined,\n): boolean =>\n schemaType === 'boolean' ||\n schemaType === 'integer' ||\n schemaType === 'number' ||\n schemaType === 'string';\n\n// We handle only simple values for now, up to 1 nested field\nexport const paginationField = ({\n context,\n name,\n schema,\n}: {\n context: IR.Context;\n name: string;\n schema: SchemaObject | ReferenceObject;\n}): boolean | string => {\n const paginationRegExp = getPaginationKeywordsRegExp(\n context.config.parser.pagination,\n );\n if (paginationRegExp.test(name)) {\n return true;\n }\n\n if ('$ref' in schema) {\n const ref = context.resolveRef<\n ParameterObject | RequestBodyObject | SchemaObject\n >(schema.$ref);\n\n if ('content' in ref || 'in' in ref) {\n let refSchema: SchemaObject | ReferenceObject | undefined;\n\n if ('in' in ref) {\n refSchema = ref.schema;\n }\n\n if (!refSchema) {\n // parameter or body\n const contents = mediaTypeObjects({ content: ref.content });\n // TODO: add support for multiple content types, for now prefer JSON\n const content =\n contents.find((content) => content.type === 'json') || contents[0];\n if (content?.schema) {\n refSchema = content.schema;\n }\n }\n\n if (!refSchema) {\n return false;\n }\n\n return paginationField({\n context,\n name,\n schema: refSchema,\n });\n }\n\n return paginationField({\n context,\n name,\n schema: ref,\n });\n }\n\n for (const name in schema.properties) {\n const paginationRegExp = getPaginationKeywordsRegExp(\n context.config.parser.pagination,\n );\n\n if (paginationRegExp.test(name)) {\n const property = schema.properties[name]!;\n\n if (typeof property !== 'boolean' && !('$ref' in property)) {\n const schemaType = getSchemaType({ schema: property });\n // TODO: resolve deeper references\n\n if (isPaginationType(schemaType)) {\n return name;\n }\n }\n }\n }\n\n for (const allOf of schema.allOf ?? []) {\n const pagination = paginationField({\n context,\n name,\n schema: allOf,\n });\n if (pagination) {\n return pagination;\n }\n }\n\n return false;\n};\n","import type { IR } from '../../../ir/types';\nimport type { State } from '../../shared/types/state';\nimport { operationToId } from '../../shared/utils/operation';\nimport type {\n OperationObject,\n PathItemObject,\n RequestBodyObject,\n ResponseObject,\n SecuritySchemeObject,\n} from '../types/spec';\nimport { contentToSchema, mediaTypeObjects } from './mediaType';\nimport { paginationField } from './pagination';\nimport { schemaToIrSchema } from './schema';\n\ninterface Operation\n extends Omit<OperationObject, 'parameters'>,\n Pick<IR.OperationObject, 'parameters'> {}\n\nconst parseOperationJsDoc = ({\n irOperation,\n operation,\n}: {\n irOperation: IR.OperationObject;\n operation: Operation;\n}) => {\n if (operation.deprecated !== undefined) {\n irOperation.deprecated = operation.deprecated;\n }\n\n if (operation.description) {\n irOperation.description = operation.description;\n }\n\n if (operation.summary) {\n irOperation.summary = operation.summary;\n }\n\n if (operation.tags?.length) {\n irOperation.tags = operation.tags;\n }\n};\n\nconst initIrOperation = ({\n context,\n method,\n operation,\n path,\n state,\n}: Pick<IR.OperationObject, 'method' | 'path'> & {\n context: IR.Context;\n operation: Operation;\n state: State;\n}): IR.OperationObject => {\n const irOperation: IR.OperationObject = {\n id: operationToId({\n context,\n id: operation.operationId,\n method,\n path,\n state,\n }),\n method,\n path,\n };\n\n if (operation.operationId) {\n irOperation.operationId = operation.operationId;\n }\n\n parseOperationJsDoc({\n irOperation,\n operation,\n });\n\n return irOperation;\n};\n\nconst operationToIrOperation = ({\n context,\n method,\n operation,\n path,\n securitySchemesMap,\n state,\n}: Pick<IR.OperationObject, 'method' | 'path'> & {\n context: IR.Context;\n operation: Operation;\n securitySchemesMap: Map<string, SecuritySchemeObject>;\n state: State;\n}): IR.OperationObject => {\n const irOperation = initIrOperation({\n context,\n method,\n operation,\n path,\n state,\n });\n\n if (operation.parameters) {\n irOperation.parameters = operation.parameters;\n }\n\n if (operation.requestBody) {\n const requestBody =\n '$ref' in operation.requestBody\n ? context.resolveRef<RequestBodyObject>(operation.requestBody.$ref)\n : operation.requestBody;\n const contents = mediaTypeObjects({ content: requestBody.content });\n // TODO: add support for multiple content types, for now prefer JSON\n const content =\n contents.find((content) => content.type === 'json') || contents[0];\n\n if (content) {\n const pagination = paginationField({\n context,\n name: '',\n schema:\n content.schema && '$ref' in content.schema\n ? {\n allOf: [{ ...content.schema }],\n description: requestBody.description,\n }\n : {\n description: requestBody.description,\n ...content.schema,\n },\n });\n\n irOperation.body = {\n mediaType: content.mediaType,\n schema: schemaToIrSchema({\n context,\n schema:\n '$ref' in operation.requestBody\n ? {\n allOf: [{ ...operation.requestBody }],\n description: requestBody.description,\n }\n : content.schema && '$ref' in content.schema\n ? {\n allOf: [{ ...content.schema }],\n description: requestBody.description,\n }\n : {\n description: requestBody.description,\n ...content.schema,\n },\n state: undefined,\n }),\n };\n\n if (pagination) {\n irOperation.body.pagination = pagination;\n }\n\n if (requestBody.required) {\n irOperation.body.required = requestBody.required;\n }\n\n if (content.type) {\n irOperation.body.type = content.type;\n }\n }\n }\n\n for (const name in operation.responses) {\n if (!irOperation.responses) {\n irOperation.responses = {};\n }\n\n const response = operation.responses[name]!;\n const responseObject =\n '$ref' in response\n ? context.resolveRef<ResponseObject>(response.$ref)\n : response;\n const contents = mediaTypeObjects({ content: responseObject.content });\n // TODO: add support for multiple content types, for now prefer JSON\n const content =\n contents.find((content) => content.type === 'json') || contents[0];\n\n if (content) {\n irOperation.responses[name] = {\n mediaType: content.mediaType,\n schema: schemaToIrSchema({\n context,\n schema: {\n description: responseObject.description,\n ...contentToSchema({ content }),\n },\n state: undefined,\n }),\n };\n } else {\n irOperation.responses[name] = {\n schema: {\n description: responseObject.description,\n // TODO: parser - cover all statues with empty response bodies\n // 1xx, 204, 205, 304\n type: name === '204' ? 'void' : 'unknown',\n },\n };\n }\n }\n\n if (operation.security) {\n const securitySchemeObjects: Array<IR.SecurityObject> = [];\n\n for (const securityRequirementObject of operation.security) {\n for (const name in securityRequirementObject) {\n const securitySchemeObject = securitySchemesMap.get(name);\n\n if (!securitySchemeObject) {\n continue;\n }\n\n securitySchemeObjects.push(securitySchemeObject);\n }\n }\n\n if (securitySchemeObjects.length) {\n irOperation.security = securitySchemeObjects;\n }\n }\n\n // TODO: parser - handle servers\n // qux: operation.servers\n\n return irOperation;\n};\n\nexport const parseOperation = ({\n context,\n method,\n operation,\n path,\n securitySchemesMap,\n state,\n}: {\n context: IR.Context;\n method: Extract<\n keyof PathItemObject,\n 'delete' | 'get' | 'head' | 'options' | 'patch' | 'post' | 'put' | 'trace'\n >;\n operation: Operation;\n path: keyof IR.PathsObject;\n securitySchemesMap: Map<string, SecuritySchemeObject>;\n state: State;\n}) => {\n if (!context.ir.paths) {\n context.ir.paths = {};\n }\n\n if (!context.ir.paths[path]) {\n context.ir.paths[path] = {};\n }\n\n if (operation.servers) {\n context.ir.servers = [...(context.ir.servers ?? []), ...operation.servers];\n }\n\n context.ir.paths[path][method] = operationToIrOperation({\n context,\n method,\n operation,\n path,\n securitySchemesMap,\n state,\n });\n};\n","import type { IR } from '../../../ir/types';\nimport { refToName } from '../../../utils/ref';\nimport type {\n ParameterObject,\n ReferenceObject,\n SchemaObject,\n} from '../types/spec';\nimport { mediaTypeObjects } from './mediaType';\nimport { paginationField } from './pagination';\nimport { schemaToIrSchema } from './schema';\n\n/**\n * Returns default parameter `allowReserved` based on value of `in`.\n */\nconst defaultAllowReserved = (\n _in: ParameterObject['in'],\n): boolean | undefined => {\n switch (_in) {\n // this keyword only applies to parameters with an `in` value of `query`\n case 'query':\n return false;\n default:\n return;\n }\n};\n\n/**\n * Returns default parameter `explode` based on value of `style`.\n */\nconst defaultExplode = (style: Required<ParameterObject>['style']): boolean => {\n switch (style) {\n // default value for `deepObject` is `false`, but that behavior is undefined\n // so we use `true` to make this work with the `client-fetch` package\n case 'deepObject':\n case 'form':\n return true;\n default:\n return false;\n }\n};\n\n/**\n * Returns default parameter `style` based on value of `in`.\n */\nconst defaultStyle = (\n _in: ParameterObject['in'],\n): Required<IR.ParameterObject>['style'] => {\n switch (_in) {\n case 'header':\n case 'path':\n return 'simple';\n case 'cookie':\n case 'query':\n return 'form';\n }\n};\n\nexport const parametersArrayToObject = ({\n context,\n parameters,\n}: {\n context: IR.Context;\n parameters?: ReadonlyArray<ParameterObject | ReferenceObject>;\n}): IR.ParametersObject | undefined => {\n if (!parameters || !Object.keys(parameters).length) {\n return;\n }\n\n const parametersObject: IR.ParametersObject = {};\n\n for (const parameterOrReference of parameters) {\n const parameter =\n '$ref' in parameterOrReference\n ? context.dereference<ParameterObject>(parameterOrReference)\n : parameterOrReference;\n\n if (!parametersObject[parameter.in]) {\n parametersObject[parameter.in] = {};\n }\n\n // lowercase keys for case insensitive access\n parametersObject[parameter.in]![parameter.name.toLocaleLowerCase()] =\n parameterToIrParameter({\n context,\n parameter,\n });\n }\n\n return parametersObject;\n};\n\nconst parameterToIrParameter = ({\n context,\n parameter,\n}: {\n context: IR.Context;\n parameter: ParameterObject;\n}): IR.ParameterObject => {\n // TODO: parser - fix\n let schema = parameter.schema;\n\n if (!schema) {\n const contents = mediaTypeObjects({ content: parameter.content });\n // TODO: add support for multiple content types, for now prefer JSON\n const content =\n contents.find((content) => content.type === 'json') || contents[0];\n if (content) {\n schema = content.schema;\n }\n }\n\n const finalSchema: SchemaObject =\n schema && '$ref' in schema\n ? {\n allOf: [{ ...schema }],\n deprecated: parameter.deprecated,\n description: parameter.description,\n }\n : {\n deprecated: parameter.deprecated,\n description: parameter.description,\n ...schema,\n };\n\n const pagination = paginationField({\n context,\n name: parameter.name,\n schema: finalSchema,\n });\n\n const style = parameter.style || defaultStyle(parameter.in);\n const explode =\n parameter.explode !== undefined ? parameter.explode : defaultExplode(style);\n const allowReserved =\n parameter.allowReserved !== undefined\n ? parameter.allowReserved\n : defaultAllowReserved(parameter.in);\n\n const irParameter: IR.ParameterObject = {\n allowReserved,\n explode,\n location: parameter.in,\n name: parameter.name,\n schema: schemaToIrSchema({\n context,\n schema: finalSchema,\n state: undefined,\n }),\n style,\n };\n\n if (parameter.deprecated) {\n irParameter.deprecated = parameter.deprecated;\n }\n\n if (parameter.description) {\n irParameter.description = parameter.description;\n }\n\n if (pagination) {\n irParameter.pagination = pagination;\n }\n\n if (parameter.required) {\n irParameter.required = parameter.required;\n }\n\n return irParameter;\n};\n\nexport const parseParameter = ({\n $ref,\n context,\n parameter,\n}: {\n $ref: string;\n context: IR.Context;\n parameter: ParameterObject;\n}) => {\n if (!context.ir.components) {\n context.ir.components = {};\n }\n\n if (!context.ir.components.parameters) {\n context.ir.components.parameters = {};\n }\n\n context.ir.components.parameters[refToName($ref)] = parameterToIrParameter({\n context,\n parameter,\n });\n};\n","import type { IR } from '../../../ir/types';\nimport { refToName } from '../../../utils/ref';\nimport type { RequestBodyObject, SchemaObject } from '../types/spec';\nimport { mediaTypeObjects } from './mediaType';\nimport { schemaToIrSchema } from './schema';\n\nconst requestBodyToIrRequestBody = ({\n context,\n requestBody,\n}: {\n context: IR.Context;\n requestBody: RequestBodyObject;\n}): IR.RequestBodyObject => {\n // TODO: parser - fix\n const contents = mediaTypeObjects({ content: requestBody.content });\n // TODO: add support for multiple content types, for now prefer JSON\n const content =\n contents.find((content) => content.type === 'json') || contents[0];\n const schema = content ? content.schema : undefined;\n\n const finalSchema: SchemaObject = {\n description: requestBody.description,\n ...schema,\n };\n\n const irRequestBody: IR.RequestBodyObject = {\n schema: schemaToIrSchema({\n context,\n schema: finalSchema,\n state: undefined,\n }),\n };\n\n if (requestBody.description) {\n irRequestBody.description = requestBody.description;\n }\n\n if (requestBody.required) {\n irRequestBody.required = requestBody.required;\n }\n\n return irRequestBody;\n};\n\nexport const parseRequestBody = ({\n $ref,\n context,\n requestBody,\n}: {\n $ref: string;\n context: IR.Context;\n requestBody: RequestBodyObject;\n}) => {\n if (!context.ir.components) {\n context.ir.components = {};\n }\n\n if (!context.ir.components.requestBodies) {\n context.ir.components.requestBodies = {};\n }\n\n context.ir.components.requestBodies[refToName($ref)] =\n requestBodyToIrRequestBody({\n context,\n requestBody,\n });\n};\n","import type { IR } from '../../../ir/types';\nimport { parseUrl } from '../../../utils/url';\n\nexport const parseServers = ({ context }: { context: IR.Context }) => {\n if (context.spec.servers) {\n context.ir.servers = context.spec.servers;\n return;\n }\n\n if (typeof context.config.input.path === 'string') {\n const url = parseUrl(context.config.input.path);\n context.ir.servers = [\n {\n url: `${url.protocol ? `${url.protocol}://` : ''}${url.host}${url.port ? `:${url.port}` : ''}`,\n },\n ];\n }\n\n if (!context.ir.servers) {\n context.ir.servers = [\n {\n url: '/',\n },\n ];\n }\n};\n","import { createOperationKey } from '../../../ir/operation';\nimport { httpMethods } from '../../shared/utils/operation';\nimport type {\n ValidatorIssue,\n ValidatorResult,\n} from '../../shared/utils/validator';\nimport type { OpenApiV3_0_X, PathItemObject, PathsObject } from '../types/spec';\n\nexport const validateOpenApiSpec = (spec: OpenApiV3_0_X): ValidatorResult => {\n const issues: Array<ValidatorIssue> = [];\n const operationIds = new Map();\n\n if (spec.paths) {\n for (const entry of Object.entries(spec.paths)) {\n const path = entry[0] as keyof PathsObject;\n const pathItem = entry[1] as PathItemObject;\n for (const method of httpMethods) {\n const operation = pathItem[method];\n if (!operation) {\n continue;\n }\n\n const operationKey = createOperationKey({ method, path });\n\n if (operation.operationId) {\n if (!operationIds.has(operation.operationId)) {\n operationIds.set(operation.operationId, operationKey);\n } else {\n issues.push({\n code: 'duplicate_key',\n context: {\n key: 'operationId',\n value: operation.operationId,\n },\n message:\n 'Duplicate `operationId` found. Each `operationId` must be unique.',\n path: ['paths', path, method, 'operationId'],\n severity: 'error',\n });\n }\n }\n }\n }\n }\n\n if (spec.servers) {\n if (typeof spec.servers !== 'object' || !Array.isArray(spec.servers)) {\n issues.push({\n code: 'invalid_type',\n message: '`servers` must be an array.',\n path: [],\n severity: 'error',\n });\n }\n\n for (let index = 0; index < spec.servers.length; index++) {\n const server = spec.servers[index];\n if (!server || typeof server !== 'object') {\n issues.push({\n code: 'invalid_type',\n context: {\n actual: typeof server,\n expected: 'object',\n },\n message: 'Each entry in `servers` must be an object.',\n path: ['servers', index],\n severity: 'error',\n });\n } else {\n if (!server.url) {\n issues.push({\n code: 'missing_required_field',\n context: {\n field: 'url',\n },\n message: 'Missing required field `url` in server object.',\n path: ['servers', index],\n severity: 'error',\n });\n }\n }\n }\n }\n\n return {\n issues,\n valid: !issues.some((issue) => issue.severity === 'error'),\n };\n};\n","import type { IR } from '../../../ir/types';\nimport { buildResourceMetadata } from '../../shared/graph/meta';\nimport { transformOpenApiSpec } from '../../shared/transforms';\nimport type { State } from '../../shared/types/state';\nimport {\n createFilteredDependencies,\n createFilters,\n hasFilters,\n} from '../../shared/utils/filter';\nimport { buildGraph } from '../../shared/utils/graph';\nimport { mergeParametersObjects } from '../../shared/utils/parameter';\nimport { handleValidatorResult } from '../../shared/utils/validator';\nimport type {\n OpenApiV3_0_X,\n ParameterObject,\n PathItemObject,\n PathsObject,\n RequestBodyObject,\n SecuritySchemeObject,\n} from '../types/spec';\nimport { filterSpec } from './filter';\nimport { parseOperation } from './operation';\nimport { parametersArrayToObject, parseParameter } from './parameter';\nimport { parseRequestBody } from './requestBody';\nimport { parseSchema } from './schema';\nimport { parseServers } from './server';\nimport { validateOpenApiSpec } from './validate';\n\nexport const parseV3_0_X = (context: IR.Context<OpenApiV3_0_X>) => {\n if (context.config.parser.validate_EXPERIMENTAL) {\n const result = validateOpenApiSpec(context.spec);\n handleValidatorResult({ context, result });\n }\n\n const shouldFilterSpec = hasFilters(context.config.parser.filters);\n if (shouldFilterSpec) {\n const filters = createFilters(context.config.parser.filters, context.spec);\n const { graph } = buildGraph(context.spec);\n const { resourceMetadata } = buildResourceMetadata(graph);\n const sets = createFilteredDependencies({ filters, resourceMetadata });\n filterSpec({\n ...sets,\n preserveOrder: filters.preserveOrder,\n spec: context.spec,\n });\n }\n\n transformOpenApiSpec({ context });\n\n const state: State = {\n ids: new Map(),\n };\n const securitySchemesMap = new Map<string, SecuritySchemeObject>();\n\n // TODO: parser - handle more component types, old parser handles only parameters and schemas\n if (context.spec.components) {\n for (const name in context.spec.components.securitySchemes) {\n const securityOrReference =\n context.spec.components.securitySchemes[name]!;\n const securitySchemeObject =\n '$ref' in securityOrReference\n ? context.resolveRef<SecuritySchemeObject>(securityOrReference.$ref)\n : securityOrReference;\n securitySchemesMap.set(name, securitySchemeObject);\n }\n\n for (const name in context.spec.components.parameters) {\n const $ref = `#/components/parameters/${name}`;\n const parameterOrReference = context.spec.components.parameters[name]!;\n const parameter =\n '$ref' in parameterOrReference\n ? context.resolveRef<ParameterObject>(parameterOrReference.$ref)\n : parameterOrReference;\n\n parseParameter({\n $ref,\n context,\n parameter,\n });\n }\n\n for (const name in context.spec.components.requestBodies) {\n const $ref = `#/components/requestBodies/${name}`;\n const requestBodyOrReference =\n context.spec.components.requestBodies[name]!;\n const requestBody =\n '$ref' in requestBodyOrReference\n ? context.resolveRef<RequestBodyObject>(requestBodyOrReference.$ref)\n : requestBodyOrReference;\n\n parseRequestBody({\n $ref,\n context,\n requestBody,\n });\n }\n\n for (const name in context.spec.components.schemas) {\n const $ref = `#/components/schemas/${name}`;\n const schema = context.spec.components.schemas[name]!;\n\n parseSchema({\n $ref,\n context,\n schema,\n });\n }\n }\n\n parseServers({ context });\n\n for (const path in context.spec.paths) {\n const pathItem = context.spec.paths[path as keyof PathsObject]!;\n\n const finalPathItem = pathItem.$ref\n ? {\n ...context.resolveRef<PathItemObject>(pathItem.$ref),\n ...pathItem,\n }\n : pathItem;\n\n const operationArgs: Omit<\n Parameters<typeof parseOperation>[0],\n 'method' | 'operation'\n > & {\n operation: Omit<\n Parameters<typeof parseOperation>[0]['operation'],\n 'responses'\n >;\n } = {\n context,\n operation: {\n description: finalPathItem.description,\n parameters: parametersArrayToObject({\n context,\n parameters: finalPathItem.parameters,\n }),\n security: context.spec.security,\n servers: finalPathItem.servers,\n summary: finalPathItem.summary,\n },\n path: path as keyof PathsObject,\n securitySchemesMap,\n state,\n };\n\n if (finalPathItem.delete) {\n parseOperation({\n ...operationArgs,\n method: 'delete',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.delete,\n parameters: mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n parameters: finalPathItem.delete.parameters,\n }),\n target: operationArgs.operation.parameters,\n }),\n },\n });\n }\n\n if (finalPathItem.get) {\n parseOperation({\n ...operationArgs,\n method: 'get',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.get,\n parameters: mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n parameters: finalPathItem.get.parameters,\n }),\n target: operationArgs.operation.parameters,\n }),\n },\n });\n }\n\n if (finalPathItem.head) {\n parseOperation({\n ...operationArgs,\n method: 'head',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.head,\n parameters: mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n parameters: finalPathItem.head.parameters,\n }),\n target: operationArgs.operation.parameters,\n }),\n },\n });\n }\n\n if (finalPathItem.options) {\n parseOperation({\n ...operationArgs,\n method: 'options',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.options,\n parameters: mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n parameters: finalPathItem.options.parameters,\n }),\n target: operationArgs.operation.parameters,\n }),\n },\n });\n }\n\n if (finalPathItem.patch) {\n parseOperation({\n ...operationArgs,\n method: 'patch',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.patch,\n parameters: mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n parameters: finalPathItem.patch.parameters,\n }),\n target: operationArgs.operation.parameters,\n }),\n },\n });\n }\n\n if (finalPathItem.post) {\n parseOperation({\n ...operationArgs,\n method: 'post',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.post,\n parameters: mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n parameters: finalPathItem.post.parameters,\n }),\n target: operationArgs.operation.parameters,\n }),\n },\n });\n }\n\n if (finalPathItem.put) {\n parseOperation({\n ...operationArgs,\n method: 'put',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.put,\n parameters: mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n parameters: finalPathItem.put.parameters,\n }),\n target: operationArgs.operation.parameters,\n }),\n },\n });\n }\n\n if (finalPathItem.trace) {\n parseOperation({\n ...operationArgs,\n method: 'trace',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.trace,\n parameters: mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n parameters: finalPathItem.trace.parameters,\n }),\n target: operationArgs.operation.parameters,\n }),\n },\n });\n }\n }\n};\n","import { createOperationKey } from '../../../ir/operation';\nimport { addNamespace, removeNamespace } from '../../shared/utils/filter';\nimport { httpMethods } from '../../shared/utils/operation';\nimport type { OpenApiV3_1_X, PathItemObject, PathsObject } from '../types/spec';\n\n/**\n * Replace source spec with filtered version.\n */\nexport const filterSpec = ({\n operations,\n parameters,\n preserveOrder,\n requestBodies,\n responses,\n schemas,\n spec,\n}: {\n operations: Set<string>;\n parameters: Set<string>;\n preserveOrder: boolean;\n requestBodies: Set<string>;\n responses: Set<string>;\n schemas: Set<string>;\n spec: OpenApiV3_1_X;\n}) => {\n if (spec.components) {\n if (spec.components.parameters) {\n const filtered: typeof spec.components.parameters = {};\n\n if (preserveOrder) {\n for (const [name, source] of Object.entries(\n spec.components.parameters,\n )) {\n if (parameters.has(addNamespace('parameter', name))) {\n filtered[name] = source;\n }\n }\n } else {\n for (const key of parameters) {\n const { name } = removeNamespace(key);\n const source = spec.components.parameters[name];\n if (source) {\n filtered[name] = source;\n }\n }\n }\n\n spec.components.parameters = filtered;\n }\n\n if (spec.components.requestBodies) {\n const filtered: typeof spec.components.requestBodies = {};\n\n if (preserveOrder) {\n for (const [name, source] of Object.entries(\n spec.components.requestBodies,\n )) {\n if (requestBodies.has(addNamespace('body', name))) {\n filtered[name] = source;\n }\n }\n } else {\n for (const key of requestBodies) {\n const { name } = removeNamespace(key);\n const source = spec.components.requestBodies[name];\n if (source) {\n filtered[name] = source;\n }\n }\n }\n\n spec.components.requestBodies = filtered;\n }\n\n if (spec.components.responses) {\n const filtered: typeof spec.components.responses = {};\n\n if (preserveOrder) {\n for (const [name, source] of Object.entries(\n spec.components.responses,\n )) {\n if (responses.has(addNamespace('response', name))) {\n filtered[name] = source;\n }\n }\n } else {\n for (const key of responses) {\n const { name } = removeNamespace(key);\n const source = spec.components.responses[name];\n if (source) {\n filtered[name] = source;\n }\n }\n }\n\n spec.components.responses = filtered;\n }\n\n if (spec.components.schemas) {\n const filtered: typeof spec.components.schemas = {};\n\n if (preserveOrder) {\n for (const [name, source] of Object.entries(spec.components.schemas)) {\n if (schemas.has(addNamespace('schema', name))) {\n filtered[name] = source;\n }\n }\n } else {\n for (const key of schemas) {\n const { name } = removeNamespace(key);\n const source = spec.components.schemas[name];\n if (source) {\n filtered[name] = source;\n }\n }\n }\n\n spec.components.schemas = filtered;\n }\n }\n\n if (spec.paths) {\n for (const entry of Object.entries(spec.paths)) {\n const path = entry[0] as keyof PathsObject;\n const pathItem = entry[1] as PathItemObject;\n\n for (const method of httpMethods) {\n const operation = pathItem[method];\n if (!operation) {\n continue;\n }\n\n const key = addNamespace(\n 'operation',\n createOperationKey({ method, path }),\n );\n if (!operations.has(key)) {\n delete pathItem[method];\n }\n }\n\n // remove paths that have no operations left\n if (!Object.keys(pathItem).length) {\n delete spec.paths[path];\n }\n }\n }\n};\n","import type { IRMediaType } from '../../../ir/mediaType';\nimport {\n isMediaTypeFileLike,\n mediaTypeToIrMediaType,\n} from '../../../ir/mediaType';\nimport type { MediaTypeObject, SchemaObject } from '../types/spec';\n\ninterface Content {\n mediaType: string;\n schema: SchemaObject | undefined;\n type: IRMediaType | undefined;\n}\n\nexport const contentToSchema = ({\n content,\n}: {\n content: Content;\n}): SchemaObject | undefined => {\n const { mediaType, schema } = content;\n\n if (!schema) {\n if (isMediaTypeFileLike({ mediaType })) {\n return {\n format: 'binary',\n type: 'string',\n };\n }\n return;\n }\n\n if (\n schema.type === 'string' &&\n !schema.format &&\n isMediaTypeFileLike({ mediaType })\n ) {\n return {\n ...schema,\n format: 'binary',\n };\n }\n\n return schema;\n};\n\nexport const mediaTypeObjects = ({\n content,\n}: {\n content: Record<string, MediaTypeObject> | undefined;\n}): ReadonlyArray<Content> => {\n const objects: Array<Content> = [];\n\n for (const mediaType in content) {\n objects.push({\n mediaType,\n schema: content[mediaType]!.schema,\n type: mediaTypeToIrMediaType({ mediaType }),\n });\n }\n\n return objects;\n};\n","import type { IR } from '../../../ir/types';\nimport { addItemsToSchema } from '../../../ir/utils';\nimport { refToName } from '../../../utils/ref';\nimport type {\n SchemaState,\n SchemaType,\n SchemaWithRequired,\n} from '../../shared/types/schema';\nimport { discriminatorValues } from '../../shared/utils/discriminator';\nimport type { SchemaObject } from '../types/spec';\n\nexport const getSchemaTypes = ({\n schema,\n}: {\n schema: SchemaObject;\n}): ReadonlyArray<SchemaType<SchemaObject>> => {\n if (typeof schema.type === 'string') {\n return [schema.type];\n }\n\n if (schema.type) {\n return schema.type;\n }\n\n // infer object based on the presence of properties\n if (schema.properties) {\n return ['object'];\n }\n\n return [];\n};\n\nconst parseSchemaJsDoc = ({\n irSchema,\n schema,\n}: {\n irSchema: IR.SchemaObject;\n schema: SchemaObject;\n}) => {\n if (schema.deprecated !== undefined) {\n irSchema.deprecated = schema.deprecated;\n }\n\n if (schema.description) {\n irSchema.description = schema.description;\n }\n\n if (schema.title) {\n irSchema.title = schema.title;\n }\n};\n\nconst parseSchemaMeta = ({\n irSchema,\n schema,\n}: {\n irSchema: IR.SchemaObject;\n schema: SchemaObject;\n}) => {\n if (schema.const !== undefined) {\n irSchema.const = schema.const;\n\n // try to infer schema type\n if (!schema.type) {\n if (schema.const === null) {\n irSchema.type = 'null';\n } else {\n switch (typeof schema.const) {\n case 'bigint':\n case 'number':\n irSchema.type = 'number';\n break;\n case 'boolean':\n irSchema.type = 'boolean';\n break;\n case 'string':\n irSchema.type = 'string';\n break;\n }\n }\n }\n }\n\n if (schema.default !== undefined) {\n irSchema.default = schema.default;\n }\n\n if (schema.exclusiveMaximum !== undefined) {\n irSchema.exclusiveMaximum = schema.exclusiveMaximum;\n }\n\n if (schema.exclusiveMinimum !== undefined) {\n irSchema.exclusiveMinimum = schema.exclusiveMinimum;\n }\n\n if (schema.format) {\n irSchema.format = schema.format;\n }\n\n if (schema.maximum !== undefined) {\n irSchema.maximum = schema.maximum;\n }\n\n if (schema.maxItems !== undefined) {\n irSchema.maxItems = schema.maxItems;\n }\n\n if (schema.maxLength !== undefined) {\n irSchema.maxLength = schema.maxLength;\n }\n\n if (schema.minimum !== undefined) {\n irSchema.minimum = schema.minimum;\n }\n\n if (schema.minItems !== undefined) {\n irSchema.minItems = schema.minItems;\n }\n\n if (schema.minLength !== undefined) {\n irSchema.minLength = schema.minLength;\n }\n\n if (schema.pattern) {\n irSchema.pattern = schema.pattern;\n }\n\n if (schema.readOnly) {\n irSchema.accessScope = 'read';\n } else if (schema.writeOnly) {\n irSchema.accessScope = 'write';\n }\n};\n\nconst parseArray = ({\n context,\n irSchema = {},\n schema,\n state,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaObject;\n state: SchemaState;\n}): IR.SchemaObject => {\n if (\n (schema.prefixItems && schema.prefixItems.length) ||\n (schema.maxItems && schema.maxItems === schema.minItems) ||\n schema.const !== undefined\n ) {\n irSchema.type = 'tuple';\n } else {\n irSchema.type = 'array';\n }\n\n let schemaItems: Array<IR.SchemaObject> = [];\n\n for (const item of schema.prefixItems ?? []) {\n const irItemSchema = schemaToIrSchema({\n context,\n schema: item,\n state,\n });\n schemaItems.push(irItemSchema);\n }\n\n if (schema.items) {\n const irItemsSchema = schemaToIrSchema({\n context,\n schema: schema.items,\n state,\n });\n\n if (\n !schemaItems.length &&\n schema.maxItems &&\n schema.maxItems === schema.minItems\n ) {\n schemaItems = Array(schema.maxItems).fill(irItemsSchema);\n } else {\n const ofArray =\n schema.items.allOf || schema.items.anyOf || schema.items.oneOf;\n if (\n ofArray &&\n ofArray.length > 1 &&\n !getSchemaTypes({ schema: schema.items }).includes('null')\n ) {\n // bring composition up to avoid incorrectly nested arrays\n irSchema = {\n ...irSchema,\n ...irItemsSchema,\n };\n } else {\n schemaItems.push(irItemsSchema);\n }\n }\n }\n\n irSchema = addItemsToSchema({\n items: schemaItems,\n schema: irSchema,\n });\n\n return irSchema;\n};\n\nconst parseBoolean = ({\n irSchema = {},\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaObject;\n}): IR.SchemaObject => {\n irSchema.type = 'boolean';\n\n return irSchema;\n};\n\nconst parseNull = ({\n irSchema = {},\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaObject;\n}) => {\n irSchema.type = 'null';\n\n return irSchema;\n};\n\nconst parseNumber = ({\n irSchema = {},\n schema,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: Omit<SchemaObject, 'type'> & {\n type: SchemaType<SchemaObject>;\n };\n}): IR.SchemaObject => {\n irSchema.type = schema.type;\n\n return irSchema;\n};\n\nconst parseObject = ({\n context,\n irSchema = {},\n schema,\n state,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaObject;\n state: SchemaState;\n}): IR.SchemaObject => {\n irSchema.type = 'object';\n\n const schemaProperties: Record<string, IR.SchemaObject> = {};\n\n for (const name in schema.properties) {\n const property = schema.properties[name]!;\n if (typeof property === 'boolean') {\n // TODO: parser - handle boolean properties\n } else {\n const irPropertySchema = schemaToIrSchema({\n context,\n schema: property,\n state: {\n ...state,\n isProperty: true,\n },\n });\n schemaProperties[name] = irPropertySchema;\n }\n }\n\n if (Object.keys(schemaProperties).length) {\n irSchema.properties = schemaProperties;\n }\n\n if (schema.additionalProperties === undefined) {\n if (!irSchema.properties) {\n irSchema.additionalProperties = {\n type: 'unknown',\n };\n }\n } else if (typeof schema.additionalProperties === 'boolean') {\n irSchema.additionalProperties = {\n type: schema.additionalProperties ? 'unknown' : 'never',\n };\n } else {\n const irAdditionalPropertiesSchema = schemaToIrSchema({\n context,\n schema: schema.additionalProperties,\n state,\n });\n irSchema.additionalProperties = irAdditionalPropertiesSchema;\n }\n\n if (schema.propertyNames) {\n irSchema.propertyNames = schemaToIrSchema({\n context,\n schema: schema.propertyNames,\n state,\n });\n }\n\n if (schema.required) {\n irSchema.required = schema.required;\n }\n\n return irSchema;\n};\n\nconst parseString = ({\n irSchema = {},\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaObject;\n}): IR.SchemaObject => {\n irSchema.type = 'string';\n\n return irSchema;\n};\n\nconst initIrSchema = ({\n schema,\n}: {\n schema: SchemaObject;\n}): IR.SchemaObject => {\n const irSchema: IR.SchemaObject = {};\n\n parseSchemaJsDoc({\n irSchema,\n schema,\n });\n\n return irSchema;\n};\n\nconst parseAllOf = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaWithRequired<SchemaObject, 'allOf'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n let irSchema = initIrSchema({ schema });\n\n const schemaItems: Array<IR.SchemaObject> = [];\n const schemaTypes = getSchemaTypes({ schema });\n\n const compositionSchemas = schema.allOf;\n\n for (const compositionSchema of compositionSchemas) {\n const irCompositionSchema = schemaToIrSchema({\n context,\n schema: compositionSchema,\n state,\n });\n\n if (schema.required) {\n if (irCompositionSchema.required) {\n irCompositionSchema.required = [\n ...irCompositionSchema.required,\n ...schema.required,\n ];\n } else {\n irCompositionSchema.required = schema.required;\n }\n }\n\n schemaItems.push(irCompositionSchema);\n\n if (compositionSchema.$ref) {\n const ref = context.resolveRef<SchemaObject>(compositionSchema.$ref);\n // `$ref` should be passed from the root `parseSchema()` call\n if (ref.discriminator && state.$ref) {\n const values = discriminatorValues(\n state.$ref,\n ref.discriminator.mapping,\n );\n const valueSchemas: ReadonlyArray<IR.SchemaObject> = values.map(\n (value) => ({\n const: value,\n type: 'string',\n }),\n );\n const irDiscriminatorSchema: IR.SchemaObject = {\n properties: {\n [ref.discriminator.propertyName]:\n valueSchemas.length > 1\n ? {\n items: valueSchemas,\n logicalOperator: 'or',\n }\n : valueSchemas[0]!,\n },\n type: 'object',\n };\n if (ref.required?.includes(ref.discriminator.propertyName)) {\n irDiscriminatorSchema.required = [ref.discriminator.propertyName];\n }\n schemaItems.push(irDiscriminatorSchema);\n }\n\n if (!state.circularReferenceTracker.has(compositionSchema.$ref)) {\n schemaToIrSchema({\n context,\n schema: ref,\n state: {\n ...state,\n $ref: compositionSchema.$ref,\n },\n });\n }\n }\n }\n\n if (schemaTypes.includes('object')) {\n const irObjectSchema = parseOneType({\n context,\n schema: {\n ...schema,\n type: 'object',\n },\n state,\n });\n\n if (irObjectSchema.properties) {\n for (const requiredProperty of irObjectSchema.required ?? []) {\n if (!irObjectSchema.properties[requiredProperty]) {\n for (const compositionSchema of compositionSchemas) {\n // TODO: parser - this could be probably resolved more accurately\n const finalCompositionSchema = compositionSchema.$ref\n ? context.resolveRef<SchemaObject>(compositionSchema.$ref)\n : compositionSchema;\n\n if (\n getSchemaTypes({ schema: finalCompositionSchema }).includes(\n 'object',\n )\n ) {\n const irCompositionSchema = parseOneType({\n context,\n schema: {\n ...finalCompositionSchema,\n type: 'object',\n },\n state,\n });\n\n if (irCompositionSchema.properties?.[requiredProperty]) {\n irObjectSchema.properties[requiredProperty] =\n irCompositionSchema.properties[requiredProperty];\n break;\n }\n }\n }\n }\n }\n schemaItems.push(irObjectSchema);\n }\n }\n\n irSchema = addItemsToSchema({\n items: schemaItems,\n logicalOperator: 'and',\n mutateSchemaOneItem: true,\n schema: irSchema,\n });\n\n if (schemaTypes.includes('null')) {\n // nest composition to avoid producing an intersection with null\n const nestedItems: Array<IR.SchemaObject> = [\n {\n type: 'null',\n },\n ];\n\n if (schemaItems.length) {\n nestedItems.unshift(irSchema);\n }\n\n irSchema = {\n items: nestedItems,\n logicalOperator: 'or',\n };\n }\n\n return irSchema;\n};\n\nconst parseAnyOf = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaWithRequired<SchemaObject, 'anyOf'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n let irSchema = initIrSchema({ schema });\n\n const schemaItems: Array<IR.SchemaObject> = [];\n const schemaTypes = getSchemaTypes({ schema });\n\n const compositionSchemas = schema.anyOf;\n\n for (const compositionSchema of compositionSchemas) {\n let irCompositionSchema = schemaToIrSchema({\n context,\n schema: compositionSchema,\n state,\n });\n\n // `$ref` should be defined with discriminators\n if (schema.discriminator && compositionSchema.$ref) {\n const values = discriminatorValues(\n compositionSchema.$ref,\n schema.discriminator.mapping,\n );\n const valueSchemas: ReadonlyArray<IR.SchemaObject> = values.map(\n (value) => ({\n const: value,\n type: 'string',\n }),\n );\n const irDiscriminatorSchema: IR.SchemaObject = {\n properties: {\n [schema.discriminator.propertyName]:\n valueSchemas.length > 1\n ? {\n items: valueSchemas,\n logicalOperator: 'or',\n }\n : valueSchemas[0]!,\n },\n type: 'object',\n };\n irCompositionSchema = {\n items: [irDiscriminatorSchema, irCompositionSchema],\n logicalOperator: 'and',\n };\n }\n\n schemaItems.push(irCompositionSchema);\n }\n\n if (schemaTypes.includes('null')) {\n schemaItems.push({ type: 'null' });\n }\n\n irSchema = addItemsToSchema({\n items: schemaItems,\n mutateSchemaOneItem: true,\n schema: irSchema,\n });\n\n if (schemaTypes.includes('object')) {\n // nest composition to avoid producing a union with object properties\n const irObjectSchema = parseOneType({\n context,\n schema: {\n ...schema,\n type: 'object',\n },\n state,\n });\n\n if (irObjectSchema.properties) {\n irSchema = {\n items: [irSchema, irObjectSchema],\n logicalOperator: 'and',\n };\n }\n }\n\n return irSchema;\n};\n\nconst parseEnum = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaWithRequired<SchemaObject, 'enum'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n let irSchema = initIrSchema({ schema });\n\n irSchema.type = 'enum';\n\n const schemaItems: Array<IR.SchemaObject> = [];\n const schemaTypes = getSchemaTypes({ schema });\n\n for (const [index, enumValue] of schema.enum.entries()) {\n const typeOfEnumValue = typeof enumValue;\n let enumType: SchemaType<SchemaObject> | undefined;\n\n if (\n typeOfEnumValue === 'string' ||\n typeOfEnumValue === 'number' ||\n typeOfEnumValue === 'boolean'\n ) {\n enumType = typeOfEnumValue;\n } else if (typeOfEnumValue === 'object' && Array.isArray(enumValue)) {\n enumType = 'array';\n } else if (enumValue === null) {\n // type must contain null\n if (schemaTypes.includes('null')) {\n enumType = 'null';\n }\n } else {\n console.warn(\n '🚨',\n `unhandled \"${typeOfEnumValue}\" typeof value \"${enumValue}\" for enum`,\n schema.enum,\n );\n }\n\n if (!enumType) {\n continue;\n }\n\n const irTypeSchema = parseOneType({\n context,\n schema: {\n const: enumValue,\n description: schema['x-enum-descriptions']?.[index],\n title:\n schema['x-enum-varnames']?.[index] ?? schema['x-enumNames']?.[index],\n type: enumType,\n },\n state,\n });\n\n schemaItems.push(irTypeSchema);\n }\n\n irSchema = addItemsToSchema({\n items: schemaItems,\n schema: irSchema,\n });\n\n return irSchema;\n};\n\nconst parseOneOf = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaWithRequired<SchemaObject, 'oneOf'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n let irSchema = initIrSchema({ schema });\n\n let schemaItems: Array<IR.SchemaObject> = [];\n const schemaTypes = getSchemaTypes({ schema });\n\n const compositionSchemas = schema.oneOf;\n\n for (const compositionSchema of compositionSchemas) {\n let irCompositionSchema = schemaToIrSchema({\n context,\n schema: compositionSchema,\n state,\n });\n\n // `$ref` should be defined with discriminators\n if (schema.discriminator && compositionSchema.$ref) {\n const values = discriminatorValues(\n compositionSchema.$ref,\n schema.discriminator.mapping,\n );\n const valueSchemas: ReadonlyArray<IR.SchemaObject> = values.map(\n (value) => ({\n const: value,\n type: 'string',\n }),\n );\n const irDiscriminatorSchema: IR.SchemaObject = {\n properties: {\n [schema.discriminator.propertyName]:\n valueSchemas.length > 1\n ? {\n items: valueSchemas,\n logicalOperator: 'or',\n }\n : valueSchemas[0]!,\n },\n required: [schema.discriminator.propertyName],\n type: 'object',\n };\n irCompositionSchema = {\n items: [irDiscriminatorSchema, irCompositionSchema],\n logicalOperator: 'and',\n };\n }\n\n // since we know oneOf will be using \"or\" logical operator, if the parsed\n // composition schema also has an \"or\" operator, we can bring it up\n // to avoid unnecessary brackets\n if (\n irCompositionSchema.logicalOperator === 'or' &&\n irCompositionSchema.type !== 'array' &&\n irCompositionSchema.items\n ) {\n schemaItems = schemaItems.concat(irCompositionSchema.items);\n } else {\n schemaItems.push(irCompositionSchema);\n }\n }\n\n if (schemaTypes.includes('null')) {\n schemaItems.push({ type: 'null' });\n }\n\n irSchema = addItemsToSchema({\n items: schemaItems,\n mutateSchemaOneItem: true,\n schema: irSchema,\n });\n\n if (schemaTypes.includes('object')) {\n // nest composition to avoid producing a union with object properties\n const irObjectSchema = parseOneType({\n context,\n schema: {\n ...schema,\n type: 'object',\n },\n state,\n });\n\n if (irObjectSchema.properties) {\n irSchema = {\n items: [irSchema, irObjectSchema],\n logicalOperator: 'and',\n };\n }\n }\n\n return irSchema;\n};\n\nconst parseRef = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaWithRequired<SchemaObject, '$ref'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n let irSchema = initIrSchema({ schema });\n\n const irRefSchema: IR.SchemaObject = {};\n\n // refs using unicode characters become encoded, didn't investigate why\n // but the suspicion is this comes from `@hey-api/json-schema-ref-parser`\n irRefSchema.$ref = decodeURI(schema.$ref);\n\n if (!state.circularReferenceTracker.has(schema.$ref)) {\n const refSchema = context.resolveRef<SchemaObject>(schema.$ref);\n schemaToIrSchema({\n context,\n schema: refSchema,\n state: {\n ...state,\n $ref: schema.$ref,\n isProperty: false,\n },\n });\n }\n\n const schemaItems: Array<IR.SchemaObject> = [];\n schemaItems.push(irRefSchema);\n\n if (schema.type && typeof schema.type !== 'string') {\n if (schema.type.includes('null')) {\n schemaItems.push({ type: 'null' });\n }\n }\n\n irSchema = addItemsToSchema({\n items: schemaItems,\n mutateSchemaOneItem: true,\n schema: irSchema,\n });\n\n return irSchema;\n};\n\nconst parseOneType = ({\n context,\n irSchema,\n schema,\n state,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: Omit<SchemaObject, 'type'> & {\n type: SchemaType<SchemaObject>;\n };\n state: SchemaState;\n}): IR.SchemaObject => {\n if (!irSchema) {\n irSchema = initIrSchema({ schema });\n parseSchemaMeta({ irSchema, schema });\n }\n\n switch (schema.type) {\n case 'array':\n return parseArray({\n context,\n irSchema,\n schema,\n state,\n });\n case 'boolean':\n return parseBoolean({\n context,\n irSchema,\n schema,\n });\n case 'integer':\n case 'number':\n return parseNumber({\n context,\n irSchema,\n schema,\n });\n case 'null':\n return parseNull({\n context,\n irSchema,\n schema,\n });\n case 'object':\n return parseObject({\n context,\n irSchema,\n schema,\n state,\n });\n case 'string':\n return parseString({\n context,\n irSchema,\n schema,\n });\n default:\n // gracefully handle invalid type\n return parseUnknown({ context, irSchema, schema });\n }\n};\n\nconst parseManyTypes = ({\n context,\n irSchema,\n schema,\n state,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: Omit<SchemaObject, 'type'> & {\n type: ReadonlyArray<SchemaType<SchemaObject>>;\n };\n state: SchemaState;\n}): IR.SchemaObject => {\n if (!irSchema) {\n irSchema = initIrSchema({ schema });\n }\n\n const typeIrSchema: IR.SchemaObject = {};\n\n parseSchemaMeta({ irSchema: typeIrSchema, schema });\n\n if (schema.type.includes('null') && typeIrSchema.default === null) {\n // clear to avoid duplicate default inside the non-null schema.\n // this would produce incorrect validator output\n delete typeIrSchema.default;\n }\n\n const schemaItems: Array<IR.SchemaObject> = [];\n\n for (const type of schema.type) {\n if (type === 'null') {\n schemaItems.push({ type: 'null' });\n } else {\n const irTypeSchema = parseOneType({\n context,\n irSchema: typeIrSchema,\n schema: {\n ...schema,\n type,\n },\n state,\n });\n\n schemaItems.push(irTypeSchema);\n }\n }\n\n irSchema = addItemsToSchema({\n items: schemaItems,\n schema: irSchema,\n });\n\n return irSchema;\n};\n\nconst parseType = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaWithRequired<SchemaObject, 'type'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n const irSchema = initIrSchema({ schema });\n\n parseSchemaMeta({ irSchema, schema });\n\n const schemaTypes = getSchemaTypes({ schema });\n\n if (schemaTypes.length === 1) {\n return parseOneType({\n context,\n irSchema,\n schema: {\n ...schema,\n type: schemaTypes[0]!,\n },\n state,\n });\n }\n\n return parseManyTypes({\n context,\n irSchema,\n schema: {\n ...schema,\n type: schemaTypes,\n },\n state,\n });\n};\n\nconst parseUnknown = ({\n irSchema,\n schema,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaObject;\n}): IR.SchemaObject => {\n if (!irSchema) {\n irSchema = initIrSchema({ schema });\n }\n\n irSchema.type = 'unknown';\n\n parseSchemaMeta({ irSchema, schema });\n\n return irSchema;\n};\n\nexport const schemaToIrSchema = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaObject;\n state: SchemaState | undefined;\n}): IR.SchemaObject => {\n if (!state) {\n state = {\n circularReferenceTracker: new Set(),\n };\n }\n\n if (state.$ref) {\n state.circularReferenceTracker.add(state.$ref);\n }\n\n if (schema.$ref) {\n return parseRef({\n context,\n schema: schema as SchemaWithRequired<SchemaObject, '$ref'>,\n state,\n });\n }\n\n if (schema.enum) {\n return parseEnum({\n context,\n schema: schema as SchemaWithRequired<SchemaObject, 'enum'>,\n state,\n });\n }\n\n if (schema.allOf) {\n return parseAllOf({\n context,\n schema: schema as SchemaWithRequired<SchemaObject, 'allOf'>,\n state,\n });\n }\n\n if (schema.anyOf) {\n return parseAnyOf({\n context,\n schema: schema as SchemaWithRequired<SchemaObject, 'anyOf'>,\n state,\n });\n }\n\n if (schema.oneOf) {\n return parseOneOf({\n context,\n schema: schema as SchemaWithRequired<SchemaObject, 'oneOf'>,\n state,\n });\n }\n\n // infer object based on the presence of properties\n if (schema.type || schema.properties) {\n return parseType({\n context,\n schema: schema as SchemaWithRequired<SchemaObject, 'type'>,\n state,\n });\n }\n\n return parseUnknown({ context, schema });\n};\n\nexport const parseSchema = ({\n $ref,\n context,\n schema,\n}: {\n $ref: string;\n context: IR.Context;\n schema: SchemaObject;\n}) => {\n if (!context.ir.components) {\n context.ir.components = {};\n }\n\n if (!context.ir.components.schemas) {\n context.ir.components.schemas = {};\n }\n\n context.ir.components.schemas[refToName($ref)] = schemaToIrSchema({\n context,\n schema,\n state: {\n $ref,\n circularReferenceTracker: new Set(),\n },\n });\n};\n","import { getPaginationKeywordsRegExp } from '../../../ir/pagination';\nimport type { IR } from '../../../ir/types';\nimport type { SchemaType } from '../../shared/types/schema';\nimport type { ParameterObject, RequestBodyObject } from '../types/spec';\nimport type { SchemaObject } from '../types/spec';\nimport { mediaTypeObjects } from './mediaType';\nimport { getSchemaTypes } from './schema';\n\nconst isPaginationType = (\n schemaTypes: ReadonlyArray<SchemaType<SchemaObject>>,\n): boolean =>\n schemaTypes.includes('boolean') ||\n schemaTypes.includes('integer') ||\n schemaTypes.includes('number') ||\n schemaTypes.includes('string');\n\n// We handle only simple values for now, up to 1 nested field\nexport const paginationField = ({\n context,\n name,\n schema,\n}: {\n context: IR.Context;\n name: string;\n schema: SchemaObject;\n}): boolean | string => {\n const paginationRegExp = getPaginationKeywordsRegExp(\n context.config.parser.pagination,\n );\n if (paginationRegExp.test(name)) {\n return true;\n }\n\n if (schema.$ref) {\n const ref = context.resolveRef<\n ParameterObject | RequestBodyObject | SchemaObject\n >(schema.$ref);\n\n if ('content' in ref || 'in' in ref) {\n let refSchema: SchemaObject | undefined;\n\n if ('in' in ref) {\n refSchema = ref.schema;\n }\n\n if (!refSchema) {\n // parameter or body\n const contents = mediaTypeObjects({ content: ref.content });\n // TODO: add support for multiple content types, for now prefer JSON\n const content =\n contents.find((content) => content.type === 'json') || contents[0];\n if (content?.schema) {\n refSchema = content.schema;\n }\n }\n\n if (!refSchema) {\n return false;\n }\n\n return paginationField({\n context,\n name,\n schema: refSchema,\n });\n }\n\n return paginationField({\n context,\n name,\n schema: ref,\n });\n }\n\n for (const name in schema.properties) {\n const paginationRegExp = getPaginationKeywordsRegExp(\n context.config.parser.pagination,\n );\n\n if (paginationRegExp.test(name)) {\n const property = schema.properties[name]!;\n\n if (typeof property !== 'boolean') {\n // TODO: resolve deeper references\n const schemaTypes = getSchemaTypes({ schema: property });\n\n if (!schemaTypes.length) {\n const compositionSchemas = property.anyOf ?? property.oneOf;\n const nonNullCompositionSchemas = (compositionSchemas ?? []).filter(\n (schema) => schema.type !== 'null',\n );\n if (nonNullCompositionSchemas.length === 1) {\n const schemaTypes = getSchemaTypes({\n schema: nonNullCompositionSchemas[0]!,\n });\n if (isPaginationType(schemaTypes)) {\n return name;\n }\n }\n }\n\n if (isPaginationType(schemaTypes)) {\n return name;\n }\n }\n }\n }\n\n for (const allOf of schema.allOf ?? []) {\n const pagination = paginationField({\n context,\n name,\n schema: allOf,\n });\n if (pagination) {\n return pagination;\n }\n }\n\n return false;\n};\n","import type { IR } from '../../../ir/types';\nimport type { State } from '../../shared/types/state';\nimport { operationToId } from '../../shared/utils/operation';\nimport type {\n OperationObject,\n PathItemObject,\n RequestBodyObject,\n ResponseObject,\n SecuritySchemeObject,\n} from '../types/spec';\nimport { contentToSchema, mediaTypeObjects } from './mediaType';\nimport { paginationField } from './pagination';\nimport { schemaToIrSchema } from './schema';\n\ninterface Operation\n extends Omit<OperationObject, 'parameters'>,\n Pick<IR.OperationObject, 'parameters'> {}\n\nconst parseOperationJsDoc = ({\n irOperation,\n operation,\n}: {\n irOperation: IR.OperationObject;\n operation: Operation;\n}) => {\n if (operation.deprecated !== undefined) {\n irOperation.deprecated = operation.deprecated;\n }\n\n if (operation.description) {\n irOperation.description = operation.description;\n }\n\n if (operation.summary) {\n irOperation.summary = operation.summary;\n }\n\n if (operation.tags?.length) {\n irOperation.tags = operation.tags;\n }\n};\n\nconst initIrOperation = ({\n context,\n method,\n operation,\n path,\n state,\n}: Pick<IR.OperationObject, 'method' | 'path'> & {\n context: IR.Context;\n operation: Operation;\n state: State;\n}): IR.OperationObject => {\n const irOperation: IR.OperationObject = {\n id: operationToId({\n context,\n id: operation.operationId,\n method,\n path,\n state,\n }),\n method,\n path,\n };\n\n if (operation.operationId) {\n irOperation.operationId = operation.operationId;\n }\n\n parseOperationJsDoc({\n irOperation,\n operation,\n });\n\n return irOperation;\n};\n\nconst operationToIrOperation = ({\n context,\n method,\n operation,\n path,\n securitySchemesMap,\n state,\n}: Pick<IR.OperationObject, 'method' | 'path'> & {\n context: IR.Context;\n operation: Operation;\n securitySchemesMap: Map<string, SecuritySchemeObject>;\n state: State;\n}): IR.OperationObject => {\n const irOperation = initIrOperation({\n context,\n method,\n operation,\n path,\n state,\n });\n\n if (operation.parameters) {\n irOperation.parameters = operation.parameters;\n }\n\n if (operation.requestBody) {\n const requestBody =\n '$ref' in operation.requestBody\n ? context.resolveRef<RequestBodyObject>(operation.requestBody.$ref)\n : operation.requestBody;\n const contents = mediaTypeObjects({ content: requestBody.content });\n // TODO: add support for multiple content types, for now prefer JSON\n const content =\n contents.find((content) => content.type === 'json') || contents[0];\n\n if (content) {\n const pagination = paginationField({\n context,\n name: '',\n schema: {\n description: requestBody.description,\n ...content.schema,\n },\n });\n\n irOperation.body = {\n mediaType: content.mediaType,\n schema: schemaToIrSchema({\n context,\n schema: {\n description: requestBody.description,\n ...('$ref' in operation.requestBody\n ? operation.requestBody\n : content.schema),\n },\n state: undefined,\n }),\n };\n\n if (pagination) {\n irOperation.body.pagination = pagination;\n }\n\n if (requestBody.required) {\n irOperation.body.required = requestBody.required;\n }\n\n if (content.type) {\n irOperation.body.type = content.type;\n }\n }\n }\n\n for (const name in operation.responses) {\n if (!irOperation.responses) {\n irOperation.responses = {};\n }\n\n const response = operation.responses[name]!;\n const responseObject =\n '$ref' in response\n ? context.resolveRef<ResponseObject>(response.$ref)\n : response;\n const contents = mediaTypeObjects({ content: responseObject.content });\n // TODO: add support for multiple content types, for now prefer JSON\n const content =\n contents.find((content) => content.type === 'json') || contents[0];\n\n if (content) {\n irOperation.responses[name] = {\n mediaType: content.mediaType,\n schema: schemaToIrSchema({\n context,\n schema: {\n description: responseObject.description,\n ...contentToSchema({ content }),\n },\n state: undefined,\n }),\n };\n } else {\n irOperation.responses[name] = {\n schema: {\n description: responseObject.description,\n // TODO: parser - cover all statues with empty response bodies\n // 1xx, 204, 205, 304\n type: name === '204' ? 'void' : 'unknown',\n },\n };\n }\n }\n\n if (operation.security) {\n const securitySchemeObjects: Array<IR.SecurityObject> = [];\n\n for (const securityRequirementObject of operation.security) {\n for (const name in securityRequirementObject) {\n const securitySchemeObject = securitySchemesMap.get(name);\n\n if (!securitySchemeObject) {\n continue;\n }\n\n securitySchemeObjects.push(securitySchemeObject);\n }\n }\n\n if (securitySchemeObjects.length) {\n irOperation.security = securitySchemeObjects;\n }\n }\n\n // TODO: parser - handle servers\n // qux: operation.servers\n\n return irOperation;\n};\n\nexport const parseOperation = ({\n context,\n method,\n operation,\n path,\n securitySchemesMap,\n state,\n}: {\n context: IR.Context;\n method: Extract<\n keyof PathItemObject,\n 'delete' | 'get' | 'head' | 'options' | 'patch' | 'post' | 'put' | 'trace'\n >;\n operation: Operation;\n path: keyof IR.PathsObject;\n securitySchemesMap: Map<string, SecuritySchemeObject>;\n state: State;\n}) => {\n if (!context.ir.paths) {\n context.ir.paths = {};\n }\n\n if (!context.ir.paths[path]) {\n context.ir.paths[path] = {};\n }\n\n if (operation.servers) {\n context.ir.servers = [...(context.ir.servers ?? []), ...operation.servers];\n }\n\n context.ir.paths[path][method] = operationToIrOperation({\n context,\n method,\n operation,\n path,\n securitySchemesMap,\n state,\n });\n};\n","import type { IR } from '../../../ir/types';\nimport { refToName } from '../../../utils/ref';\nimport type {\n ParameterObject,\n ReferenceObject,\n SchemaObject,\n} from '../types/spec';\nimport { mediaTypeObjects } from './mediaType';\nimport { paginationField } from './pagination';\nimport { schemaToIrSchema } from './schema';\n\n/**\n * Returns default parameter `allowReserved` based on value of `in`.\n */\nconst defaultAllowReserved = (\n _in: ParameterObject['in'],\n): boolean | undefined => {\n switch (_in) {\n // this keyword only applies to parameters with an `in` value of `query`\n case 'query':\n return false;\n default:\n return;\n }\n};\n\n/**\n * Returns default parameter `explode` based on value of `style`.\n */\nconst defaultExplode = (style: Required<ParameterObject>['style']): boolean => {\n switch (style) {\n // default value for `deepObject` is `false`, but that behavior is undefined\n // so we use `true` to make this work with the `client-fetch` package\n case 'deepObject':\n case 'form':\n return true;\n default:\n return false;\n }\n};\n\n/**\n * Returns default parameter `style` based on value of `in`.\n */\nconst defaultStyle = (\n _in: ParameterObject['in'],\n): Required<ParameterObject>['style'] => {\n switch (_in) {\n case 'header':\n case 'path':\n return 'simple';\n case 'cookie':\n case 'query':\n return 'form';\n }\n};\n\nexport const parametersArrayToObject = ({\n context,\n parameters,\n}: {\n context: IR.Context;\n parameters?: ReadonlyArray<ParameterObject | ReferenceObject>;\n}): IR.ParametersObject | undefined => {\n if (!parameters || !Object.keys(parameters).length) {\n return;\n }\n\n const parametersObject: IR.ParametersObject = {};\n\n for (const parameterOrReference of parameters) {\n const parameter =\n '$ref' in parameterOrReference\n ? context.dereference<ParameterObject>(parameterOrReference)\n : parameterOrReference;\n\n if (!parametersObject[parameter.in]) {\n parametersObject[parameter.in] = {};\n }\n\n // lowercase keys for case insensitive access\n parametersObject[parameter.in]![parameter.name.toLocaleLowerCase()] =\n parameterToIrParameter({\n context,\n parameter,\n });\n }\n\n return parametersObject;\n};\n\nconst parameterToIrParameter = ({\n context,\n parameter,\n}: {\n context: IR.Context;\n parameter: ParameterObject;\n}): IR.ParameterObject => {\n // TODO: parser - fix\n let schema = parameter.schema;\n\n if (!schema) {\n const contents = mediaTypeObjects({ content: parameter.content });\n // TODO: add support for multiple content types, for now prefer JSON\n const content =\n contents.find((content) => content.type === 'json') || contents[0];\n if (content) {\n schema = content.schema;\n }\n }\n\n const finalSchema: SchemaObject = {\n deprecated: parameter.deprecated,\n description: parameter.description,\n ...schema,\n };\n\n const pagination = paginationField({\n context,\n name: parameter.name,\n schema: finalSchema,\n });\n\n const style = parameter.style || defaultStyle(parameter.in);\n const explode =\n parameter.explode !== undefined ? parameter.explode : defaultExplode(style);\n const allowReserved =\n parameter.allowReserved !== undefined\n ? parameter.allowReserved\n : defaultAllowReserved(parameter.in);\n\n const irParameter: IR.ParameterObject = {\n allowReserved,\n explode,\n location: parameter.in,\n name: parameter.name,\n schema: schemaToIrSchema({\n context,\n schema: finalSchema,\n state: undefined,\n }),\n style,\n };\n\n if (parameter.deprecated) {\n irParameter.deprecated = parameter.deprecated;\n }\n\n if (parameter.description) {\n irParameter.description = parameter.description;\n }\n\n if (pagination) {\n irParameter.pagination = pagination;\n }\n\n if (parameter.required) {\n irParameter.required = parameter.required;\n }\n\n return irParameter;\n};\n\nexport const parseParameter = ({\n $ref,\n context,\n parameter,\n}: {\n $ref: string;\n context: IR.Context;\n parameter: ParameterObject;\n}) => {\n if (!context.ir.components) {\n context.ir.components = {};\n }\n\n if (!context.ir.components.parameters) {\n context.ir.components.parameters = {};\n }\n\n context.ir.components.parameters[refToName($ref)] = parameterToIrParameter({\n context,\n parameter,\n });\n};\n","import type { IR } from '../../../ir/types';\nimport { refToName } from '../../../utils/ref';\nimport type { RequestBodyObject, SchemaObject } from '../types/spec';\nimport { mediaTypeObjects } from './mediaType';\nimport { schemaToIrSchema } from './schema';\n\nconst requestBodyToIrRequestBody = ({\n context,\n requestBody,\n}: {\n context: IR.Context;\n requestBody: RequestBodyObject;\n}): IR.RequestBodyObject => {\n // TODO: parser - fix\n const contents = mediaTypeObjects({ content: requestBody.content });\n // TODO: add support for multiple content types, for now prefer JSON\n const content =\n contents.find((content) => content.type === 'json') || contents[0];\n const schema = content ? content.schema : undefined;\n\n const finalSchema: SchemaObject = {\n description: requestBody.description,\n ...schema,\n };\n\n const irRequestBody: IR.RequestBodyObject = {\n schema: schemaToIrSchema({\n context,\n schema: finalSchema,\n state: undefined,\n }),\n };\n\n if (requestBody.description) {\n irRequestBody.description = requestBody.description;\n }\n\n if (requestBody.required) {\n irRequestBody.required = requestBody.required;\n }\n\n return irRequestBody;\n};\n\nexport const parseRequestBody = ({\n $ref,\n context,\n requestBody,\n}: {\n $ref: string;\n context: IR.Context;\n requestBody: RequestBodyObject;\n}) => {\n if (!context.ir.components) {\n context.ir.components = {};\n }\n\n if (!context.ir.components.requestBodies) {\n context.ir.components.requestBodies = {};\n }\n\n context.ir.components.requestBodies[refToName($ref)] =\n requestBodyToIrRequestBody({\n context,\n requestBody,\n });\n};\n","import type { IR } from '../../../ir/types';\nimport { parseUrl } from '../../../utils/url';\n\nexport const parseServers = ({ context }: { context: IR.Context }) => {\n if (context.spec.servers) {\n context.ir.servers = context.spec.servers;\n return;\n }\n\n if (typeof context.config.input.path === 'string') {\n const url = parseUrl(context.config.input.path);\n context.ir.servers = [\n {\n url: `${url.protocol ? `${url.protocol}://` : ''}${url.host}${url.port ? `:${url.port}` : ''}`,\n },\n ];\n }\n\n if (!context.ir.servers) {\n context.ir.servers = [\n {\n url: '/',\n },\n ];\n }\n};\n","import { createOperationKey } from '../../../ir/operation';\nimport { httpMethods } from '../../shared/utils/operation';\nimport type {\n ValidatorIssue,\n ValidatorResult,\n} from '../../shared/utils/validator';\nimport type { OpenApiV3_1_X, PathItemObject, PathsObject } from '../types/spec';\n\nexport const validateOpenApiSpec = (spec: OpenApiV3_1_X): ValidatorResult => {\n const issues: Array<ValidatorIssue> = [];\n const operationIds = new Map();\n\n if (spec.paths) {\n for (const entry of Object.entries(spec.paths)) {\n const path = entry[0] as keyof PathsObject;\n const pathItem = entry[1] as PathItemObject;\n for (const method of httpMethods) {\n const operation = pathItem[method];\n if (!operation) {\n continue;\n }\n\n const operationKey = createOperationKey({ method, path });\n\n if (operation.operationId) {\n if (!operationIds.has(operation.operationId)) {\n operationIds.set(operation.operationId, operationKey);\n } else {\n issues.push({\n code: 'duplicate_key',\n context: {\n key: 'operationId',\n value: operation.operationId,\n },\n message:\n 'Duplicate `operationId` found. Each `operationId` must be unique.',\n path: ['paths', path, method, 'operationId'],\n severity: 'error',\n });\n }\n }\n }\n }\n }\n\n if (spec.servers) {\n if (typeof spec.servers !== 'object' || !Array.isArray(spec.servers)) {\n issues.push({\n code: 'invalid_type',\n message: '`servers` must be an array.',\n path: [],\n severity: 'error',\n });\n }\n\n for (let index = 0; index < spec.servers.length; index++) {\n const server = spec.servers[index];\n if (!server || typeof server !== 'object') {\n issues.push({\n code: 'invalid_type',\n context: {\n actual: typeof server,\n expected: 'object',\n },\n message: 'Each entry in `servers` must be an object.',\n path: ['servers', index],\n severity: 'error',\n });\n } else {\n if (!server.url) {\n issues.push({\n code: 'missing_required_field',\n context: {\n field: 'url',\n },\n message: 'Missing required field `url` in server object.',\n path: ['servers', index],\n severity: 'error',\n });\n }\n }\n }\n }\n\n return {\n issues,\n valid: !issues.some((issue) => issue.severity === 'error'),\n };\n};\n","import type { IR } from '../../../ir/types';\nimport { buildResourceMetadata } from '../../shared/graph/meta';\nimport { transformOpenApiSpec } from '../../shared/transforms';\nimport type { State } from '../../shared/types/state';\nimport {\n createFilteredDependencies,\n createFilters,\n hasFilters,\n} from '../../shared/utils/filter';\nimport { buildGraph } from '../../shared/utils/graph';\nimport { mergeParametersObjects } from '../../shared/utils/parameter';\nimport { handleValidatorResult } from '../../shared/utils/validator';\nimport type {\n OpenApiV3_1_X,\n ParameterObject,\n PathItemObject,\n PathsObject,\n RequestBodyObject,\n SecuritySchemeObject,\n} from '../types/spec';\nimport { filterSpec } from './filter';\nimport { parseOperation } from './operation';\nimport { parametersArrayToObject, parseParameter } from './parameter';\nimport { parseRequestBody } from './requestBody';\nimport { parseSchema } from './schema';\nimport { parseServers } from './server';\nimport { validateOpenApiSpec } from './validate';\n\nexport const parseV3_1_X = (context: IR.Context<OpenApiV3_1_X>) => {\n if (context.config.parser.validate_EXPERIMENTAL) {\n const result = validateOpenApiSpec(context.spec);\n handleValidatorResult({ context, result });\n }\n\n const shouldFilterSpec = hasFilters(context.config.parser.filters);\n if (shouldFilterSpec) {\n const filters = createFilters(context.config.parser.filters, context.spec);\n const { graph } = buildGraph(context.spec);\n const { resourceMetadata } = buildResourceMetadata(graph);\n const sets = createFilteredDependencies({ filters, resourceMetadata });\n filterSpec({\n ...sets,\n preserveOrder: filters.preserveOrder,\n spec: context.spec,\n });\n }\n\n transformOpenApiSpec({ context });\n\n const state: State = {\n ids: new Map(),\n };\n const securitySchemesMap = new Map<string, SecuritySchemeObject>();\n\n // TODO: parser - handle more component types, old parser handles only parameters and schemas\n if (context.spec.components) {\n for (const name in context.spec.components.securitySchemes) {\n const securityOrReference =\n context.spec.components.securitySchemes[name]!;\n const securitySchemeObject =\n '$ref' in securityOrReference\n ? context.resolveRef<SecuritySchemeObject>(securityOrReference.$ref)\n : securityOrReference;\n securitySchemesMap.set(name, securitySchemeObject);\n }\n\n for (const name in context.spec.components.parameters) {\n const $ref = `#/components/parameters/${name}`;\n const parameterOrReference = context.spec.components.parameters[name]!;\n const parameter =\n '$ref' in parameterOrReference\n ? context.resolveRef<ParameterObject>(parameterOrReference.$ref)\n : parameterOrReference;\n\n parseParameter({\n $ref,\n context,\n parameter,\n });\n }\n\n for (const name in context.spec.components.requestBodies) {\n const $ref = `#/components/requestBodies/${name}`;\n const requestBodyOrReference =\n context.spec.components.requestBodies[name]!;\n const requestBody =\n '$ref' in requestBodyOrReference\n ? context.resolveRef<RequestBodyObject>(requestBodyOrReference.$ref)\n : requestBodyOrReference;\n\n parseRequestBody({\n $ref,\n context,\n requestBody,\n });\n }\n\n for (const name in context.spec.components.schemas) {\n const $ref = `#/components/schemas/${name}`;\n const schema = context.spec.components.schemas[name]!;\n\n parseSchema({\n $ref,\n context,\n schema,\n });\n }\n }\n\n parseServers({ context });\n\n for (const path in context.spec.paths) {\n const pathItem = context.spec.paths[path as keyof PathsObject]!;\n\n const finalPathItem = pathItem.$ref\n ? {\n ...context.resolveRef<PathItemObject>(pathItem.$ref),\n ...pathItem,\n }\n : pathItem;\n\n const operationArgs: Omit<Parameters<typeof parseOperation>[0], 'method'> =\n {\n context,\n operation: {\n description: finalPathItem.description,\n parameters: parametersArrayToObject({\n context,\n parameters: finalPathItem.parameters,\n }),\n security: context.spec.security,\n servers: finalPathItem.servers,\n summary: finalPathItem.summary,\n },\n path: path as keyof PathsObject,\n securitySchemesMap,\n state,\n };\n\n if (finalPathItem.delete) {\n parseOperation({\n ...operationArgs,\n method: 'delete',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.delete,\n parameters: mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n parameters: finalPathItem.delete.parameters,\n }),\n target: operationArgs.operation.parameters,\n }),\n },\n });\n }\n\n if (finalPathItem.get) {\n parseOperation({\n ...operationArgs,\n method: 'get',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.get,\n parameters: mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n parameters: finalPathItem.get.parameters,\n }),\n target: operationArgs.operation.parameters,\n }),\n },\n });\n }\n\n if (finalPathItem.head) {\n parseOperation({\n ...operationArgs,\n method: 'head',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.head,\n parameters: mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n parameters: finalPathItem.head.parameters,\n }),\n target: operationArgs.operation.parameters,\n }),\n },\n });\n }\n\n if (finalPathItem.options) {\n parseOperation({\n ...operationArgs,\n method: 'options',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.options,\n parameters: mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n parameters: finalPathItem.options.parameters,\n }),\n target: operationArgs.operation.parameters,\n }),\n },\n });\n }\n\n if (finalPathItem.patch) {\n parseOperation({\n ...operationArgs,\n method: 'patch',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.patch,\n parameters: mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n parameters: finalPathItem.patch.parameters,\n }),\n target: operationArgs.operation.parameters,\n }),\n },\n });\n }\n\n if (finalPathItem.post) {\n parseOperation({\n ...operationArgs,\n method: 'post',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.post,\n parameters: mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n parameters: finalPathItem.post.parameters,\n }),\n target: operationArgs.operation.parameters,\n }),\n },\n });\n }\n\n if (finalPathItem.put) {\n parseOperation({\n ...operationArgs,\n method: 'put',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.put,\n parameters: mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n parameters: finalPathItem.put.parameters,\n }),\n target: operationArgs.operation.parameters,\n }),\n },\n });\n }\n\n if (finalPathItem.trace) {\n parseOperation({\n ...operationArgs,\n method: 'trace',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.trace,\n parameters: mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n parameters: finalPathItem.trace.parameters,\n }),\n target: operationArgs.operation.parameters,\n }),\n },\n });\n }\n }\n};\n","export const allowedServiceMethods = [\n 'connect',\n 'delete',\n 'get',\n 'head',\n 'options',\n 'patch',\n 'post',\n 'put',\n 'trace',\n] as const;\n\n/**\n * Convert the service version to 'normal' version.\n * This basically removes any \"v\" prefix from the version string.\n * @param version\n */\nexport function getServiceVersion(version = '1.0'): string {\n return String(version).replace(/^v/gi, '');\n}\n","export const refParametersPartial = '#/components/parameters/';\n\nexport const refSchemasPartial = '#/components/schemas/';\n","import { ensureValidTypeScriptJavaScriptIdentifier } from '../openApi';\nimport type { Config } from '../types/config';\nimport { getConfig } from './config';\nimport { reservedJavaScriptKeywordsRegExp } from './regexp';\nimport { stringCase } from './stringCase';\n\nexport const transformClassName = ({\n config,\n name,\n}: {\n config: Config;\n name: string;\n}) => {\n const plugin = config.plugins['@hey-api/sdk'];\n if (plugin?.config.classNameBuilder) {\n let customName = '';\n\n if (typeof plugin.config.classNameBuilder === 'function') {\n customName = plugin.config.classNameBuilder(name);\n } else {\n customName = plugin.config.classNameBuilder.replace('{{name}}', name);\n }\n\n return customName;\n }\n\n return name;\n};\n\nexport const transformTypeName = (name: string) => {\n const config = getConfig();\n if (config.plugins['@hey-api/typescript']?.config.style === 'PascalCase') {\n return stringCase({\n case: 'PascalCase',\n value: name,\n });\n }\n return name;\n};\n\n/**\n * This method is meant to be used to process definition names\n * and return a cleaned up, transformed version that is legal\n * to use in the output code.\n *\n * For example, a definition with name \"400\" would result in \"_400\",\n * \"import\" would result in \"_import\", etc. This also respects the\n * casing configuration for types.\n *\n * @param name Name of the definition in OpenAPI specification.\n * @returns A cleaned up, transformed name usable in output code.\n */\nexport const cleanAndTransformTypeName = (name: string) => {\n const transformed = transformTypeName(name);\n const cleaned = ensureValidTypeScriptJavaScriptIdentifier(transformed);\n const result = cleaned.replace(reservedJavaScriptKeywordsRegExp, '_$1');\n return result;\n};\n","import type { OpenApiSchema } from '../interfaces/OpenApiSchema';\n\nexport const inferType = (\n definition: OpenApiSchema,\n definitionTypes: string[],\n) => {\n if (definition.enum && !definitionTypes.includes('boolean')) {\n return 'enum';\n }\n return;\n};\n\nexport const isDefinitionTypeNullable = (\n definition: Pick<OpenApiSchema, 'type'>,\n) => getDefinitionTypes(definition).includes('null');\n\nexport const isDefinitionNullable = (\n definition: Pick<OpenApiSchema, 'nullable' | 'type'>,\n) => definition.nullable === true || isDefinitionTypeNullable(definition);\n\nexport const getDefinitionTypes = ({ type }: Pick<OpenApiSchema, 'type'>) => {\n if (Array.isArray(type)) {\n return type;\n }\n if (type) {\n return [type];\n }\n return [];\n};\n","/**\n * Strip (OpenAPI) namespaces from values.\n * @param value\n */\nexport const stripNamespace = (value: string): string =>\n value\n .trim()\n .replace(/^#\\/definitions\\//, '')\n .replace(/^#\\/parameters\\//, '')\n .replace(/^#\\/responses\\//, '')\n .replace(/^#\\/securityDefinitions\\//, '')\n .replace(/^#\\/components\\/schemas\\//, '')\n .replace(/^#\\/components\\/responses\\//, '')\n .replace(/^#\\/components\\/parameters\\//, '')\n .replace(/^#\\/components\\/examples\\//, '')\n .replace(/^#\\/components\\/requestBodies\\//, '')\n .replace(/^#\\/components\\/headers\\//, '')\n .replace(/^#\\/components\\/securitySchemes\\//, '')\n .replace(/^#\\/components\\/links\\//, '')\n .replace(/^#\\/components\\/callbacks\\//, '');\n","import { refParametersPartial } from '../../../utils/const';\nimport { transformTypeName } from '../../../utils/transform';\nimport { isDefinitionTypeNullable } from '../../v3/parser/inferType';\nimport type { Type } from '../interfaces/Type';\nimport { ensureValidTypeScriptJavaScriptIdentifier } from './sanitize';\nimport { stripNamespace } from './stripNamespace';\n\n/**\n * Get mapped type for given type to basic Typescript/Javascript type.\n */\nexport const getMappedType = (\n type: string,\n format?: string,\n): string | undefined => {\n if (format === 'binary') {\n return 'binary';\n }\n switch (type) {\n case 'any':\n case 'object':\n case 'unknown':\n return 'unknown';\n case 'array':\n return 'unknown[]';\n case 'boolean':\n return 'boolean';\n case 'byte':\n case 'double':\n case 'float':\n case 'int':\n case 'integer':\n case 'long':\n case 'number':\n case 'short':\n return 'number';\n case 'char':\n case 'date':\n case 'date-time':\n case 'password':\n case 'string':\n return 'string';\n case 'file':\n return 'binary';\n case 'null':\n return 'null';\n case 'void':\n return 'void';\n default:\n return;\n }\n};\n\n/**\n * Matches characters inside square brackets, including the brackets. Does not\n * match if the opening bracket is preceded by \"`1\" which is a syntax for generics\n * from C#.\n *\n * Hello[World] -> matches [World]\n * Hello`1[World] -> no match\n * string[] -> matches []\n */\nexport const hasSquareBracketsRegExp = /(?<!`1)\\[.*\\]$/g;\n\n/**\n * Parse any string value into a type object.\n * @param type String or String[] value like \"integer\", \"Link[Model]\" or [\"string\", \"null\"].\n * @param format String value like \"binary\" or \"date\".\n */\nexport const getType = ({\n debug,\n format,\n type = 'unknown',\n}: {\n debug?: boolean;\n format?: string;\n /**\n * Type can be the name of a schema component, a ref string, or any definition type.\n */\n type?: string | string[];\n}): Type => {\n const result: Type = {\n $refs: [],\n base: 'unknown',\n imports: [],\n isNullable: false,\n template: null,\n type: 'unknown',\n };\n\n // Special case for JSON Schema spec (december 2020, page 17),\n // that allows type to be an array of primitive types...\n if (Array.isArray(type)) {\n const joinedType = type\n .filter((value) => value !== 'null')\n .map((value) => getMappedType(value, format))\n .filter(Boolean)\n .join(' | ');\n result.type = joinedType;\n result.base = joinedType;\n result.isNullable = isDefinitionTypeNullable({ type });\n return result;\n }\n\n const mapped = getMappedType(type, format);\n if (mapped) {\n result.type = mapped;\n result.base = mapped;\n return result;\n }\n\n const typeWithoutNamespace = decodeURIComponent(stripNamespace(type));\n\n hasSquareBracketsRegExp.lastIndex = 0;\n if (hasSquareBracketsRegExp.test(typeWithoutNamespace)) {\n const matches = typeWithoutNamespace.match(/(.*?)\\[(.*)\\]$/);\n if (matches?.length) {\n const match1 = getType({\n debug,\n type: ensureValidTypeScriptJavaScriptIdentifier(matches[1]!),\n });\n const match2 = getType({\n debug,\n type: ensureValidTypeScriptJavaScriptIdentifier(matches[2]!),\n });\n\n if (match1.type === 'unknown[]') {\n result.type = `${match2.type}[]`;\n result.base = `${match2.type}`;\n match1.$refs = [];\n match1.imports = [];\n } else if (match2.type) {\n result.type = `${match1.type}<${match2.type}>`;\n result.base = match1.type;\n result.template = match2.type;\n } else {\n result.type = match1.type;\n result.base = match1.type;\n result.template = match1.type;\n }\n\n result.$refs = [...result.$refs, ...match1.$refs, ...match2.$refs];\n result.imports = [\n ...result.imports,\n ...match1.imports,\n ...match2.imports,\n ];\n return result;\n }\n }\n\n if (typeWithoutNamespace) {\n let encodedType = transformTypeName(\n ensureValidTypeScriptJavaScriptIdentifier(typeWithoutNamespace),\n );\n if (type.startsWith(refParametersPartial)) {\n // prefix parameter names to avoid conflicts, assuming people are mostly\n // interested in importing schema types and don't care about this naming\n encodedType = `Parameter${encodedType}`;\n }\n result.type = encodedType;\n result.base = encodedType;\n if (type.startsWith('#')) {\n result.$refs = [...result.$refs, decodeURIComponent(type)];\n }\n result.imports = [...result.imports, encodedType];\n return result;\n }\n\n return result;\n};\n","export function unique<T>(value: T, index: number, arr: T[]): boolean {\n return arr.indexOf(value) === index;\n}\n","import { unique } from '../../../utils/unique';\nimport type { Enum } from '../interfaces/client';\nimport type { WithEnumExtension } from '../interfaces/WithEnumExtension';\n\nexport const getEnums = (\n definition: WithEnumExtension,\n values?: ReadonlyArray<string | number>,\n): Enum[] => {\n if (!Array.isArray(values)) {\n return [];\n }\n\n const descriptions = (definition['x-enum-descriptions'] ?? []).filter(\n (value) => typeof value === 'string',\n );\n const names = (\n definition['x-enum-varnames'] ??\n definition['x-enumNames'] ??\n []\n ).filter((value) => typeof value === 'string');\n\n return values\n .filter(unique)\n .filter((value) => typeof value === 'number' || typeof value === 'string')\n .map((value, index) => ({\n customDescription: descriptions[index],\n customName: names[index],\n description: undefined,\n value,\n }));\n};\n","/**\n * The spec generates a pattern like this '^\\d{3}-\\d{2}-\\d{4}$'\n * However, to use it in HTML or inside new RegExp() we need to\n * escape the pattern to become: '^\\\\d{3}-\\\\d{2}-\\\\d{4}$' in order\n * to make it a valid regexp string.\n *\n * Also, escape single quote characters, because the output uses single quotes for strings\n *\n * @param pattern\n */\nexport const getPattern = (pattern?: string): string | undefined =>\n pattern?.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\");\n","import type { Client } from '../../../types/client';\nimport { escapeName } from '../../../utils/escape';\nimport type { Model } from '../../common/interfaces/client';\nimport { getPattern } from '../../common/parser/getPattern';\nimport { getType } from '../../common/parser/type';\nimport type { GetModelFn } from '../interfaces/Model';\nimport type { OpenApi } from '../interfaces/OpenApi';\nimport type { OpenApiSchema } from '../interfaces/OpenApiSchema';\n\nexport const getModelProperties = ({\n definition,\n getModel,\n openApi,\n types,\n}: {\n definition: OpenApiSchema;\n getModel: GetModelFn;\n openApi: OpenApi;\n types: Client['types'];\n}): Model[] => {\n const models: Model[] = [];\n\n Object.entries(definition.properties ?? {}).forEach(\n ([propertyName, property]) => {\n const propertyRequired = Boolean(\n definition.required?.includes(propertyName),\n );\n if (property.$ref) {\n const model = getType({ type: property.$ref });\n models.push({\n $refs: [],\n base: model.base,\n description: property.description || null,\n enum: [],\n enums: [],\n exclusiveMaximum: property.exclusiveMaximum,\n exclusiveMinimum: property.exclusiveMinimum,\n export: 'reference',\n format: property.format,\n imports: model.imports,\n in: '',\n isDefinition: false,\n isNullable: property['x-nullable'] === true,\n isReadOnly: property.readOnly === true,\n isRequired: propertyRequired,\n link: null,\n maxItems: property.maxItems,\n maxLength: property.maxLength,\n maxProperties: property.maxProperties,\n maximum: property.maximum,\n minItems: property.minItems,\n minLength: property.minLength,\n minProperties: property.minProperties,\n minimum: property.minimum,\n multipleOf: property.multipleOf,\n name: escapeName(propertyName),\n pattern: getPattern(property.pattern),\n properties: [],\n template: model.template,\n type: model.type,\n uniqueItems: property.uniqueItems,\n });\n } else {\n const model = getModel({ definition: property, openApi, types });\n models.push({\n $refs: [],\n base: model.base,\n description: property.description || null,\n enum: model.enum,\n enums: model.enums,\n exclusiveMaximum: property.exclusiveMaximum,\n exclusiveMinimum: property.exclusiveMinimum,\n export: model.export,\n format: property.format,\n imports: model.imports,\n in: '',\n isDefinition: false,\n isNullable: property['x-nullable'] === true,\n isReadOnly: property.readOnly === true,\n isRequired: propertyRequired,\n link: model.link,\n maxItems: property.maxItems,\n maxLength: property.maxLength,\n maxProperties: property.maxProperties,\n maximum: property.maximum,\n minItems: property.minItems,\n minLength: property.minLength,\n minProperties: property.minProperties,\n minimum: property.minimum,\n multipleOf: property.multipleOf,\n name: escapeName(propertyName),\n pattern: getPattern(property.pattern),\n properties: model.properties,\n template: model.template,\n type: model.type,\n uniqueItems: property.uniqueItems,\n });\n }\n },\n );\n\n return models;\n};\n","import type { OpenApiReference as OpenApiReferenceV2 } from '../../v2/interfaces/OpenApiReference';\nimport type { OpenApiReference as OpenApiReferenceV3 } from '../../v3/interfaces/OpenApiReference';\nimport type { OpenApi } from '../interfaces/OpenApi';\n\nconst ESCAPED_REF_SLASH = /~1/g;\nconst ESCAPED_REF_TILDE = /~0/g;\n\nexport function getRef<T>(\n openApi: OpenApi,\n item: T & (OpenApiReferenceV2 | OpenApiReferenceV3),\n): T {\n if (item.$ref) {\n // Fetch the paths to the definitions, this converts:\n // \"#/components/schemas/Form\" to [\"components\", \"schemas\", \"Form\"]\n const paths = item.$ref.replace(/^#/g, '').split('/').filter(Boolean);\n\n // Try to find the reference by walking down the path,\n // if we cannot find it, then we throw an error.\n let result = openApi;\n paths.forEach((path) => {\n const decodedPath = decodeURIComponent(\n path.replace(ESCAPED_REF_SLASH, '/').replace(ESCAPED_REF_TILDE, '~'),\n );\n if (result.hasOwnProperty(decodedPath)) {\n // @ts-expect-error\n result = result[decodedPath];\n } else {\n throw new Error(`Could not find reference: \"${item.$ref}\"`);\n }\n });\n return result as T;\n }\n return item as T;\n}\n","import type { Client } from '../../../types/client';\nimport type { Model } from '../../common/interfaces/client';\nimport { getRef } from '../../common/parser/getRef';\nimport type { GetModelFn } from '../interfaces/Model';\nimport type { OpenApi } from '../interfaces/OpenApi';\nimport type { OpenApiSchema } from '../interfaces/OpenApiSchema';\n\nexport const getRequiredPropertiesFromComposition = ({\n definitions,\n getModel,\n openApi,\n required,\n types,\n}: {\n definitions: OpenApiSchema[];\n getModel: GetModelFn;\n openApi: OpenApi;\n required: string[];\n types: Client['types'];\n}): Model[] =>\n definitions\n .reduce((properties, definition) => {\n if (definition.$ref) {\n const schema = getRef<OpenApiSchema>(openApi, definition);\n return [\n ...properties,\n ...getModel({ definition: schema, openApi, types }).properties,\n ];\n }\n return [\n ...properties,\n ...getModel({ definition, openApi, types }).properties,\n ];\n }, [] as Model[])\n .filter(\n (property) => !property.isRequired && required.includes(property.name),\n )\n .map((property) => ({\n ...property,\n isRequired: true,\n }));\n","import type { Client } from '../../../types/client';\nimport type { Model, ModelComposition } from '../../common/interfaces/client';\nimport type { GetModelFn } from '../interfaces/Model';\nimport type { OpenApi } from '../interfaces/OpenApi';\nimport type { OpenApiSchema } from '../interfaces/OpenApiSchema';\nimport { getModelProperties } from './getModelProperties';\nimport { getRequiredPropertiesFromComposition } from './getRequiredPropertiesFromComposition';\n\nexport const getModelComposition = ({\n definition,\n definitions,\n getModel,\n openApi,\n type,\n types,\n}: {\n definition: OpenApiSchema;\n definitions: OpenApiSchema[];\n getModel: GetModelFn;\n openApi: OpenApi;\n type: 'one-of' | 'any-of' | 'all-of';\n types: Client['types'];\n}): ModelComposition => {\n const composition: ModelComposition = {\n $refs: [],\n enums: [],\n export: type,\n imports: [],\n properties: [],\n };\n\n const properties: Model[] = [];\n\n definitions\n .map((definition) => getModel({ definition, openApi, types }))\n .filter((model) => {\n const hasProperties = model.properties.length;\n const hasEnums = model.enums.length;\n const isObject = model.type === 'unknown';\n const isEmpty = isObject && !hasProperties && !hasEnums;\n return !isEmpty;\n })\n .forEach((model) => {\n composition.imports.push(...model.imports);\n composition.enums.push(...model.enums);\n composition.properties.push(model);\n });\n\n if (definition.required && type === 'all-of') {\n const requiredProperties = getRequiredPropertiesFromComposition({\n definitions,\n getModel,\n openApi,\n required: definition.required,\n types,\n });\n requiredProperties.forEach((requiredProperty) => {\n composition.imports.push(...requiredProperty.imports);\n composition.enums.push(...requiredProperty.enums);\n });\n properties.push(...requiredProperties);\n }\n\n if (definition.properties) {\n const modelProperties = getModelProperties({\n definition,\n getModel,\n openApi,\n types,\n });\n modelProperties.forEach((modelProperty) => {\n composition.imports.push(...modelProperty.imports);\n composition.enums.push(...modelProperty.enums);\n if (modelProperty.export === 'enum') {\n composition.enums.push(modelProperty);\n }\n });\n properties.push(...modelProperties);\n }\n\n if (properties.length) {\n composition.properties.push({\n $refs: [],\n base: 'unknown',\n description: '',\n enum: [],\n enums: [],\n export: 'interface',\n imports: [],\n in: '',\n isDefinition: false,\n isNullable: false,\n isReadOnly: false,\n isRequired: false,\n link: null,\n name: 'properties',\n properties,\n template: null,\n type: 'unknown',\n });\n }\n\n return composition;\n};\n","import type { Client } from '../../../types/client';\nimport type { Model, ModelMeta } from '../../common/interfaces/client';\nimport { getEnums } from '../../common/parser/getEnums';\nimport { getPattern } from '../../common/parser/getPattern';\nimport { getType } from '../../common/parser/type';\nimport type { OpenApi } from '../interfaces/OpenApi';\nimport type { OpenApiSchema } from '../interfaces/OpenApiSchema';\nimport { getModelComposition } from './getModelComposition';\nimport { getModelProperties } from './getModelProperties';\n\nexport const getModel = ({\n definition,\n isDefinition = false,\n meta,\n openApi,\n types,\n}: Pick<Client, 'types'> & {\n definition: OpenApiSchema;\n isDefinition?: boolean;\n meta?: ModelMeta;\n openApi: OpenApi;\n}): Model => {\n const model: Model = {\n $refs: [],\n base: 'unknown',\n description: definition.description || null,\n enum: [],\n enums: [],\n exclusiveMaximum: definition.exclusiveMaximum,\n exclusiveMinimum: definition.exclusiveMinimum,\n export: 'interface',\n format: definition.format,\n imports: [],\n in: '',\n isDefinition,\n isNullable: definition['x-nullable'] === true,\n isReadOnly: definition.readOnly === true,\n isRequired: false,\n link: null,\n maxItems: definition.maxItems,\n maxLength: definition.maxLength,\n maxProperties: definition.maxProperties,\n maximum: definition.maximum,\n meta,\n minItems: definition.minItems,\n minLength: definition.minLength,\n minProperties: definition.minProperties,\n minimum: definition.minimum,\n multipleOf: definition.multipleOf,\n name: meta?.name ?? '',\n pattern: getPattern(definition.pattern),\n properties: [],\n template: null,\n type: 'unknown',\n uniqueItems: definition.uniqueItems,\n };\n\n if (definition.$ref) {\n const definitionRef = getType({ type: definition.$ref });\n model.export = 'reference';\n model.type = definitionRef.type;\n model.base = definitionRef.base;\n model.template = definitionRef.template;\n model.imports.push(...definitionRef.imports);\n return model;\n }\n\n if (definition.enum && definition.type !== 'boolean') {\n const enums = getEnums(definition, definition.enum);\n if (enums.length) {\n model.base = 'string';\n model.enum = [...model.enum, ...enums];\n model.export = 'enum';\n model.type = 'string';\n return model;\n }\n }\n\n if (definition.type === 'array' && definition.items) {\n if (definition.items.$ref) {\n const arrayItems = getType({ type: definition.items.$ref });\n model.export = 'array';\n model.type = arrayItems.type;\n model.base = arrayItems.base;\n model.template = arrayItems.template;\n model.imports.push(...arrayItems.imports);\n return model;\n } else {\n const arrayItems = getModel({\n definition: definition.items,\n openApi,\n types,\n });\n model.export = 'array';\n model.type = arrayItems.type;\n model.base = arrayItems.base;\n model.template = arrayItems.template;\n model.link = arrayItems;\n model.imports.push(...arrayItems.imports);\n return model;\n }\n }\n\n if (\n definition.type === 'object' &&\n typeof definition.additionalProperties === 'object'\n ) {\n if (definition.additionalProperties.$ref) {\n const additionalProperties = getType({\n type: definition.additionalProperties.$ref,\n });\n model.export = 'dictionary';\n model.type = additionalProperties.type;\n model.base = additionalProperties.base;\n model.template = additionalProperties.template;\n model.imports.push(...additionalProperties.imports);\n return model;\n } else {\n const additionalProperties = getModel({\n definition: definition.additionalProperties,\n openApi,\n types,\n });\n model.export = 'dictionary';\n model.type = additionalProperties.type;\n model.base = additionalProperties.base;\n model.template = additionalProperties.template;\n model.link = additionalProperties;\n model.imports.push(...additionalProperties.imports);\n return model;\n }\n }\n\n if (definition.allOf?.length) {\n const composition = getModelComposition({\n definition,\n definitions: definition.allOf,\n getModel,\n openApi,\n type: 'all-of',\n types,\n });\n model.export = composition.export;\n model.imports.push(...composition.imports);\n model.properties.push(...composition.properties);\n model.enums = [...model.enums, ...composition.enums];\n return model;\n }\n\n if (definition.type === 'object') {\n model.export = 'interface';\n model.type = 'unknown';\n model.base = 'unknown';\n\n if (definition.properties) {\n const modelProperties = getModelProperties({\n definition,\n getModel,\n openApi,\n types,\n });\n modelProperties.forEach((modelProperty) => {\n model.imports.push(...modelProperty.imports);\n model.enums = [...model.enums, ...modelProperty.enums];\n model.properties.push(modelProperty);\n if (modelProperty.export === 'enum') {\n model.enums = [...model.enums, modelProperty];\n }\n });\n }\n return model;\n }\n\n // If the schema has a type than it can be a basic or generic type.\n if (definition.type) {\n const definitionType = getType({\n format: definition.format,\n type: definition.type,\n });\n model.export = 'generic';\n model.type = definitionType.type;\n model.base = definitionType.base;\n model.template = definitionType.template;\n model.imports.push(...definitionType.imports);\n return model;\n }\n\n return model;\n};\n","import type { Client } from '../../../types/client';\nimport { reservedJavaScriptKeywordsRegExp } from '../../../utils/regexp';\nimport { getType } from '../../common/parser/type';\nimport type { OpenApi } from '../interfaces/OpenApi';\nimport { getModel } from './getModel';\n\nexport const getModels = (\n openApi: OpenApi,\n): Pick<Client, 'models' | 'types'> => {\n const types: Client['types'] = {};\n let models: Client['models'] = [];\n\n Object.entries(openApi.definitions ?? {}).forEach(\n ([definitionName, definition]) => {\n const definitionType = getType({ type: definitionName });\n const name = definitionType.base.replace(\n reservedJavaScriptKeywordsRegExp,\n '_$1',\n );\n const meta = {\n $ref: `#/definitions/${definitionName}`,\n name,\n };\n types[name] = meta;\n const model = getModel({\n definition,\n isDefinition: true,\n meta,\n openApi,\n types,\n });\n models = [...models, model];\n },\n );\n\n return {\n models,\n types,\n };\n};\n","export function sort(a: string, b: string): number {\n const nameA = a.toLocaleLowerCase();\n const nameB = b.toLocaleLowerCase();\n return nameA.localeCompare(nameB, 'en');\n}\n\nexport const sorterByName = <T extends { name: string }>(a: T, b: T) =>\n sort(a.name, b.name);\n\nexport function sortByName<T extends { name: string }>(items: T[]): T[] {\n return items.sort(sorterByName);\n}\n","import type { Enum, Model } from '../openApi';\nimport { ensureValidTypeScriptJavaScriptIdentifier } from '../openApi';\nimport { unescapeName } from './escape';\nimport { sort } from './sort';\nimport { unique } from './unique';\n\n/**\n * Sanitizes names of enums, so they are valid typescript identifiers of a certain form.\n *\n * 1: Replace all characters not legal as part of identifier with '_'\n * 2: Add '_' prefix if first character of enum name has character not legal for start of identifier\n * 3: Add '_' where the string transitions from lowercase to uppercase\n * 4: Transform the whole string to uppercase\n *\n * Javascript identifier regexp pattern retrieved from https://developer.mozilla.org/docs/Web/JavaScript/Reference/Lexical_grammar#identifiers\n */\nexport const enumKey = (value?: string | number, customName?: string) => {\n if (customName) {\n return customName;\n }\n // prefix numbers with underscore\n if (typeof value === 'number') {\n return `'_${value}'`;\n }\n\n let key = '';\n if (typeof value === 'string') {\n key = value\n .replace(/[^$\\u200c\\u200d\\p{ID_Continue}]/gu, '_')\n .replace(/^([^$_\\p{ID_Start}])/u, '_$1')\n .replace(/(\\p{Lowercase})(\\p{Uppercase}+)/gu, '$1_$2');\n }\n key = key.trim();\n if (!key) {\n key = 'empty_string';\n }\n return key.toUpperCase();\n};\n\nexport const enumUnionType = (enums: Enum[]) =>\n enums\n .map((enumerator) => enumValue(enumerator.value, true))\n .filter(unique)\n .join(' | ');\n\nexport const enumValue = (value?: string | number, union: boolean = false) => {\n if (typeof value === 'string') {\n if (value.includes(\"'\") && union) {\n return `\"${value}\"`;\n }\n return `'${value}'`;\n }\n return value;\n};\n\nexport const enumEntry = (enumerator: Enum) => {\n const key = enumKey(enumerator.value, enumerator.customName);\n const value = enumValue(enumerator.value);\n return { key, value };\n};\n\n/**\n * Represent enum in `meta` object for deduplication\n */\nexport const enumMeta = (model: Model): Required<Model>['meta'] => {\n // serialize enum values in namespace for quick lookup\n const serialized = model.enum\n .map((enumerator) => enumEntry(enumerator))\n .sort((a, b) => sort(a.key, b.key))\n .map((enumerator) => `${enumerator.key}=${enumerator.value}`)\n .join('&');\n return {\n $ref: `enum/${model.name}/${serialized}`,\n name: ensureValidTypeScriptJavaScriptIdentifier(unescapeName(model.name)),\n };\n};\n","import { getType } from '../openApi';\nimport { refParametersPartial, refSchemasPartial } from './const';\nimport { reservedJavaScriptKeywordsRegExp } from './regexp';\nimport { cleanAndTransformTypeName } from './transform';\n\nexport const getParametersMeta = (definitionName: string) => {\n const definitionType = getType({ type: definitionName });\n /**\n * Prefix parameter names to avoid name conflicts with schemas.\n * Assuming people are mostly interested in importing schema types\n * and don't care about this name as much. It should be resolved in\n * a cleaner way, there just isn't a good deduplication strategy\n * today. This is a workaround in the meantime, hopefully reducing\n * the chance of conflicts.\n *\n * Example where this would break: schema named `ParameterFoo` and\n * parameter named `Foo` (this would transform to `ParameterFoo`)\n *\n * Note: there's a related code to this workaround in `getType()`\n * method that needs to be cleaned up when this is addressed.\n */\n const name = `Parameter${definitionType.base.replace(reservedJavaScriptKeywordsRegExp, '_$1')}`;\n const meta = {\n $ref: refParametersPartial + definitionName,\n name,\n };\n return meta;\n};\n\n/**\n * @param definitionName Name of the schema definition in OpenAPI specification.\n * @returns meta object\n */\nexport const getSchemasMeta = (definitionName: string) => {\n const name = cleanAndTransformTypeName(definitionName);\n const meta = {\n $ref: refSchemasPartial + definitionName,\n name,\n };\n return meta;\n};\n","import type ts from 'typescript';\n\nimport { compiler, type Property } from '../compiler';\nimport type { Model } from '../openApi';\nimport { sanitizeOperationParameterName } from '../openApi';\nimport type { Client } from '../types/client';\nimport { getConfig, isLegacyClient } from './config';\nimport { refSchemasPartial } from './const';\nimport { enumValue } from './enum';\nimport { escapeComment, escapeName, unescapeName } from './escape';\nimport { getSchemasMeta } from './meta';\nimport { reservedJavaScriptKeywordsRegExp } from './regexp';\nimport { stringCase } from './stringCase';\nimport { unique } from './unique';\n\nexport const isModelDate = (model: Model): boolean =>\n model.format === 'date' || model.format === 'date-time';\n\nconst base = (model: Model) => {\n const config = getConfig();\n\n if (model.base === 'binary') {\n return compiler.typeUnionNode({\n types: ['Blob', 'File'],\n });\n }\n\n if (\n config.plugins['@hey-api/transformers']?.config.dates &&\n isModelDate(model)\n ) {\n return compiler.typeNode('Date');\n }\n\n return compiler.typeNode(model.base);\n};\n\nconst typeReference = (model: Model) => {\n // nullable is false when base is null to avoid duplicate null statements\n const isNullable = model.base === 'null' ? false : model.isNullable;\n let typeNode = base(model);\n /**\n * special handling for single reference. The current approach didn't handle\n * transformed names, this fixes that. We should add a more robust solution,\n * but this will work for now.\n * {@link https://github.com/hey-api/openapi-ts/issues/768}\n */\n if (model.export === 'reference' && model.$refs.length === 1) {\n if (model.$refs[0]!.startsWith(refSchemasPartial)) {\n const meta = getSchemasMeta(model.base);\n typeNode = compiler.typeNode(meta.name);\n }\n }\n const unionNode = compiler.typeUnionNode({\n isNullable,\n types: [typeNode],\n });\n return unionNode;\n};\n\nconst typeArray = (model: Model) => {\n if (model.link) {\n // We treat an array of `model.link` as constant size array definition.\n if (Array.isArray(model.link)) {\n const types = model.link.map((m) => toType(m));\n const tuple = compiler.typeTupleNode({\n isNullable: model.isNullable,\n types,\n });\n return tuple;\n }\n\n // Special case where we use tuple to define constant size array.\n if (\n model.export === 'array' &&\n model.maxItems &&\n model.minItems &&\n model.maxItems === model.minItems &&\n model.maxItems <= 100\n ) {\n const types = Array(model.maxItems).fill(toType(model.link));\n const tuple = compiler.typeTupleNode({\n isNullable: model.isNullable,\n types,\n });\n return tuple;\n }\n\n return compiler.typeArrayNode([toType(model.link)], model.isNullable);\n }\n\n return compiler.typeArrayNode([base(model)], model.isNullable);\n};\n\nconst typeEnum = (model: Model) => {\n const values = model.enum.map((enumerator) => enumValue(enumerator.value));\n return compiler.typeUnionNode({\n isNullable: model.isNullable,\n types: values,\n });\n};\n\nconst typeDict = (model: Model) => {\n const type =\n model.link && !Array.isArray(model.link) ? toType(model.link) : base(model);\n return compiler.typeRecordNode(['string'], [type], model.isNullable, true);\n};\n\nconst typeUnionOrIntersection = ({\n model,\n style,\n}: {\n model: Model;\n style: 'intersection' | 'union';\n}) => {\n const types = model.properties\n .map((model) => {\n const str = compiler.nodeToString({\n node: toType(model),\n unescape: true,\n });\n return str;\n })\n .filter(unique);\n\n const node =\n style === 'union'\n ? compiler.typeUnionNode({\n // avoid printing duplicate null statements\n isNullable:\n model.isNullable &&\n !model.properties.find((property) => property.isNullable),\n types,\n })\n : compiler.typeIntersectionNode({\n isNullable: model.isNullable,\n types,\n });\n\n // top-level models don't need parentheses around them\n if (model.meta) {\n return node;\n }\n\n return compiler.typeParenthesizedNode({\n type: node,\n });\n};\n\nconst typeInterface = (model: Model) => {\n if (!model.properties.length) {\n return compiler.typeNode('unknown');\n }\n\n const config = getConfig();\n\n const isLegacy = isLegacyClient(config);\n\n const properties: Property[] = model.properties.map((property) => {\n let maybeRequired = property.isRequired ? '' : '?';\n let value = toType(property);\n let name = !isLegacy\n ? escapeName(unescapeName(transformTypeKeyName(property.name)))\n : // special test for 1XX status codes. We need a more robust system\n // for escaping values depending on context in which they're printed,\n // but since this works for client packages, it's not worth it right now\n /^\\dXX$/.test(property.name)\n ? escapeName(property.name)\n : property.name;\n // special case for additional properties type\n if (property.name === '[key: string]') {\n name = property.name;\n if (maybeRequired) {\n maybeRequired = '';\n value = compiler.typeUnionNode({\n types: [value, 'undefined'],\n });\n }\n }\n return {\n comment: [\n property.description && escapeComment(property.description),\n property.deprecated && '@deprecated',\n ],\n isReadOnly: property.isReadOnly,\n isRequired: maybeRequired === '',\n name,\n type: value,\n };\n });\n\n return compiler.typeInterfaceNode({\n isNullable: model.isNullable,\n properties,\n useLegacyResolution: true,\n });\n};\n\nexport const toType = (model: Model): ts.TypeNode => {\n switch (model.export) {\n case 'all-of':\n return typeUnionOrIntersection({\n model,\n style: 'intersection',\n });\n case 'any-of':\n case 'one-of':\n return typeUnionOrIntersection({\n model,\n style: 'union',\n });\n case 'array':\n return typeArray(model);\n case 'dictionary':\n return typeDict(model);\n case 'enum':\n return typeEnum(model);\n case 'interface':\n return typeInterface(model);\n case 'const':\n case 'generic':\n case 'reference':\n default:\n return typeReference(model);\n }\n};\n\nexport interface SetUniqueTypeNameResult {\n /**\n * Did this function add a new property to the `client.types` object?\n */\n created: boolean;\n /**\n * Unique name for the exported type.\n */\n name: string;\n}\n\n/**\n * Generates a unique name for the exported type for given model meta.\n * @param args.client Internal client instance\n * @param args.count Unique key for deduplication\n * @param args.create If a name record does not exist, should it be created?\n * @param args.meta Meta property from the model\n * @param args.nameTransformer Function for transforming name into the final\n * value. In different contexts, a different strategy might be used. For\n * example, slashes `/` are invalid in TypeScript identifiers, but okay in\n * a JavaScript object key name.\n * @returns {SetUniqueTypeNameResult}\n */\nexport const setUniqueTypeName = ({\n client,\n count = 1,\n create = false,\n meta,\n nameTransformer,\n}: Pick<Required<Model>, 'meta'> & {\n client: Client;\n count?: number;\n create?: boolean;\n nameTransformer?: (value: string) => string;\n}): SetUniqueTypeNameResult => {\n let result: SetUniqueTypeNameResult = {\n created: false,\n name: '',\n };\n let name = meta.name;\n if (nameTransformer) {\n name = nameTransformer(name);\n }\n if (count > 1) {\n name = `${name}${count}`;\n }\n const type = client.types[name];\n if (!type) {\n if (create) {\n client.types[name] = meta;\n result = {\n created: true,\n name,\n };\n }\n } else if (type.$ref === meta.$ref) {\n result = {\n created: false,\n name,\n };\n } else {\n result = setUniqueTypeName({\n client,\n count: count + 1,\n create,\n meta,\n nameTransformer,\n });\n }\n return result;\n};\n\nexport interface UnsetUniqueTypeNameResult {\n /**\n * Did this function delete a property from the `client.types` object?\n */\n deleted: boolean;\n /**\n * Unique name removed from the `client.types` object.\n */\n name: string;\n}\n\nexport const unsetUniqueTypeName = ({\n client,\n name,\n}: {\n client: Client;\n name: string;\n}): UnsetUniqueTypeNameResult => {\n let result: UnsetUniqueTypeNameResult = {\n deleted: false,\n name: '',\n };\n if (!client.types[name]) {\n return result;\n }\n delete client.types[name];\n result = {\n deleted: true,\n name,\n };\n return result;\n};\n\n/**\n * Replaces any invalid characters from a parameter name.\n * For example: 'filter.someProperty' becomes 'filterSomeProperty'.\n */\nexport const transformTypeKeyName = (value: string): string => {\n const config = getConfig();\n\n // transform only for legacy clients\n if (!isLegacyClient(config)) {\n return value;\n }\n\n const name = stringCase({\n case: 'camelCase',\n value: sanitizeOperationParameterName(value),\n }).replace(reservedJavaScriptKeywordsRegExp, '_$1');\n return name;\n};\n","import type { Config } from '../../../types/config';\nimport { getConfig, isLegacyClient } from '../../../utils/config';\nimport { stringCase } from '../../../utils/stringCase';\nimport { transformTypeKeyName } from '../../../utils/type';\nimport type {\n OperationParameter,\n OperationResponse,\n} from '../interfaces/client';\nimport { sanitizeNamespaceIdentifier } from './sanitize';\n\nexport const getOperationResponseHeader = (\n operationResponses: OperationResponse[],\n): string | null => {\n const header = operationResponses.find(\n (operationResponses) => operationResponses.in === 'header',\n );\n if (header) {\n return header.name;\n }\n return null;\n};\n\n/**\n * Does this operation have at least one required parameter?\n * @returns boolean\n */\nexport const isOperationParameterRequired = (\n parameters: OperationParameter[],\n) => {\n const isRequired = parameters.some((parameter) => parameter.isRequired);\n return isRequired;\n};\n\n/**\n * Attempts to parse response status code from string into number.\n * @param value string status code from OpenAPI definition\n * @returns Parsed status code or null if invalid value\n */\nexport const parseResponseStatusCode = (\n value: string,\n): OperationResponse['code'] | null => {\n if (value === 'default') {\n return 'default';\n }\n\n if (value === '1XX') {\n return '1XX';\n }\n\n if (value === '2XX') {\n return '2XX';\n }\n\n if (value === '3XX') {\n return '3XX';\n }\n\n if (value === '4XX') {\n return '4XX';\n }\n\n if (value === '5XX') {\n return '5XX';\n }\n\n if (/\\d{3}/g.test(value)) {\n const code = Number.parseInt(value, 10);\n if (code >= 100 && code < 600) {\n return code;\n }\n }\n\n return null;\n};\n\nexport const sorterByResponseStatusCode = (\n a: OperationResponse,\n b: OperationResponse,\n) => {\n if (a.code > b.code) {\n return 1;\n }\n\n if (a.code < b.code) {\n return -1;\n }\n\n return 0;\n};\n\nconst isErrorStatusCode = (code: OperationResponse['code']) =>\n code === '3XX' ||\n code === '4XX' ||\n code === '5XX' ||\n (typeof code === 'number' && code >= 300);\n\nconst isSuccessStatusCode = (code: OperationResponse['code']) =>\n code === '2XX' || (typeof code === 'number' && code >= 200 && code < 300);\n\n/**\n * Detects whether default response is meant to be used\n * for error or success response.\n */\nconst inferDefaultResponseTypes = (\n response: OperationResponse,\n responses: OperationResponse[],\n) => {\n let types: Array<'error' | 'success'> = [];\n\n const addResponseType = (type: (typeof types)[number]) => {\n if (!types.includes(type)) {\n types = [...types, type];\n }\n };\n\n const hasSuccessResponse = responses.some(({ code }) =>\n isSuccessStatusCode(code),\n );\n if (!hasSuccessResponse) {\n addResponseType('success');\n }\n\n const description = (response.description ?? '').toLocaleLowerCase();\n const $refs = response.$refs.join('|').toLocaleLowerCase();\n\n // must be in lowercase\n const errorKeywords = ['error', 'problem'];\n const successKeywords = ['success'];\n\n if (\n successKeywords.some(\n (keyword) => description.includes(keyword) || $refs.includes(keyword),\n )\n ) {\n addResponseType('success');\n }\n\n if (\n errorKeywords.some(\n (keyword) => description.includes(keyword) || $refs.includes(keyword),\n )\n ) {\n addResponseType('error');\n }\n\n if (!types.length) {\n addResponseType('error');\n }\n\n return types;\n};\n\nexport const operationFilterFn = ({\n config,\n operationKey,\n}: {\n config: Config;\n operationKey: string;\n}): boolean => {\n const regexp = config.plugins['@hey-api/sdk']?.config.filter\n ? new RegExp(config.plugins['@hey-api/sdk']?.config.filter)\n : undefined;\n return !regexp || regexp.test(operationKey);\n};\n\n/**\n * Convert the input value to a correct operation (method) class name.\n * This will use the operation ID - if available - and otherwise fallback\n * on a generated name from the URL\n */\nexport const operationNameFn = ({\n config,\n method,\n operationId,\n path,\n}: {\n config: Config;\n method: string;\n operationId: string | undefined;\n path: string;\n}): string => {\n if (config.plugins['@hey-api/sdk']?.config.operationId && operationId) {\n return stringCase({\n case: 'camelCase',\n value: sanitizeNamespaceIdentifier(operationId),\n });\n }\n\n let urlWithoutPlaceholders = path;\n\n // legacy clients ignore the \"api-version\" param since we do not want to\n // add it as the first/default parameter for each of the service calls\n if (isLegacyClient(config)) {\n urlWithoutPlaceholders = urlWithoutPlaceholders.replace(\n /[^/]*?{api-version}.*?\\//g,\n '',\n );\n }\n\n urlWithoutPlaceholders = urlWithoutPlaceholders\n .replace(/{(.*?)}/g, 'by-$1')\n // replace slashes with hyphens for camelcase method at the end\n .replace(/[/:+]/g, '-');\n\n return stringCase({\n case: 'camelCase',\n value: `${method}-${urlWithoutPlaceholders}`,\n });\n};\n\nexport const operationParameterFilterFn = (\n parameter: OperationParameter,\n): boolean => {\n const config = getConfig();\n\n // legacy clients ignore the \"api-version\" param since we do not want to\n // add it as the first/default parameter for each of the service calls\n return !isLegacyClient(config) || parameter.prop !== 'api-version';\n};\n\nexport const operationParameterNameFn = (\n parameter: Omit<OperationParameter, 'name'>,\n): string => {\n const config = getConfig();\n\n return !isLegacyClient(config)\n ? parameter.prop\n : transformTypeKeyName(parameter.prop);\n};\n\nexport const tagResponseTypes = (responses: OperationResponse[]) =>\n responses.map((response) => {\n const { code } = response;\n if (code === 'default') {\n response.responseTypes = inferDefaultResponseTypes(response, responses);\n } else if (isSuccessStatusCode(code)) {\n response.responseTypes = ['success'];\n } else if (isErrorStatusCode(code)) {\n response.responseTypes = ['error'];\n }\n return response;\n });\n","import type { Model } from '../../common/interfaces/client';\nimport type { OpenApiParameter } from '../../v2/interfaces/OpenApiParameter';\nimport type { OpenApiSchema } from '../../v3/interfaces/OpenApiSchema';\nimport { getDefinitionTypes } from '../../v3/parser/inferType';\nimport type { OperationParameter } from '../interfaces/client';\n\nexport const getDefault = (\n definition: OpenApiSchema | OpenApiParameter,\n model?: Model | OperationParameter,\n): unknown | undefined => {\n if (definition.default === undefined || definition.default === null) {\n return definition.default;\n }\n\n const definitionTypes = getDefinitionTypes(definition);\n\n const type =\n definitionTypes.find((type) => type !== 'null') ||\n typeof definition.default;\n\n switch (type) {\n case 'int':\n case 'integer':\n case 'number':\n if (\n model?.export === 'enum' &&\n model.enum?.[definition.default as number]\n ) {\n const { value } = model.enum[definition.default as number]!;\n return value;\n }\n return definition.default;\n case 'array':\n case 'boolean':\n case 'object':\n case 'string':\n return definition.default;\n default:\n return;\n }\n};\n","import type { Client } from '../../../types/client';\nimport type { OperationParameter } from '../../common/interfaces/client';\nimport { getDefault } from '../../common/parser/getDefault';\nimport { getEnums } from '../../common/parser/getEnums';\nimport { getPattern } from '../../common/parser/getPattern';\nimport { getRef } from '../../common/parser/getRef';\nimport { operationParameterNameFn } from '../../common/parser/operation';\nimport { getType } from '../../common/parser/type';\nimport type { OpenApi } from '../interfaces/OpenApi';\nimport type { OpenApiParameter } from '../interfaces/OpenApiParameter';\nimport type { OpenApiSchema } from '../interfaces/OpenApiSchema';\nimport { getModel } from './getModel';\n\nexport const getOperationParameter = ({\n openApi,\n parameter,\n types,\n}: {\n openApi: OpenApi;\n parameter: OpenApiParameter;\n types: Client['types'];\n}): OperationParameter => {\n const operationParameterWithoutName: Omit<OperationParameter, 'name'> = {\n $refs: [],\n base: 'unknown',\n description: parameter.description || null,\n enum: [],\n enums: [],\n exclusiveMaximum: parameter.exclusiveMaximum,\n exclusiveMinimum: parameter.exclusiveMinimum,\n export: 'interface',\n format: parameter.format,\n imports: [],\n in: parameter.in,\n isDefinition: false,\n isNullable: parameter['x-nullable'] === true,\n isReadOnly: false,\n isRequired: parameter.required === true,\n link: null,\n maxItems: parameter.maxItems,\n maxLength: parameter.maxLength,\n maximum: parameter.maximum,\n mediaType: null,\n minItems: parameter.minItems,\n minLength: parameter.minLength,\n minimum: parameter.minimum,\n multipleOf: parameter.multipleOf,\n pattern: getPattern(parameter.pattern),\n prop: parameter.name,\n properties: [],\n template: null,\n type: 'unknown',\n uniqueItems: parameter.uniqueItems,\n };\n let operationParameter = {\n ...operationParameterWithoutName,\n name: operationParameterNameFn(operationParameterWithoutName),\n };\n\n if (parameter.$ref) {\n const model = getType({ type: parameter.$ref });\n operationParameter = {\n ...operationParameter,\n $refs: [...operationParameter.$refs, ...model.$refs],\n base: model.base,\n export: 'reference',\n imports: [...operationParameter.imports, ...model.imports],\n template: model.template,\n type: model.type,\n };\n operationParameter.default = getDefault(parameter, operationParameter);\n return operationParameter;\n }\n\n if (parameter.enum) {\n const model = getEnums(parameter, parameter.enum);\n if (model.length) {\n operationParameter = {\n ...operationParameter,\n base: 'string',\n enum: [...operationParameter.enum, ...model],\n export: 'enum',\n type: 'string',\n };\n operationParameter.default = getDefault(parameter, operationParameter);\n return operationParameter;\n }\n }\n\n if (parameter.type === 'array' && parameter.items) {\n const model = getType({\n format: parameter.items.format,\n type: parameter.items.type,\n });\n operationParameter = {\n ...operationParameter,\n $refs: [...operationParameter.$refs, ...model.$refs],\n base: model.base,\n export: 'array',\n imports: [...operationParameter.imports, ...model.imports],\n template: model.template,\n type: model.type,\n };\n operationParameter.default = getDefault(parameter, operationParameter);\n return operationParameter;\n }\n\n if (parameter.type === 'object' && parameter.items) {\n const model = getType({\n format: parameter.items.format,\n type: parameter.items.type,\n });\n operationParameter = {\n ...operationParameter,\n $refs: [...operationParameter.$refs, ...model.$refs],\n base: model.base,\n export: 'dictionary',\n imports: [...operationParameter.imports, ...model.imports],\n template: model.template,\n type: model.type,\n };\n operationParameter.default = getDefault(parameter, operationParameter);\n return operationParameter;\n }\n\n let schema = parameter.schema;\n if (schema) {\n if (schema.$ref?.startsWith('#/parameters/')) {\n schema = getRef<OpenApiSchema>(openApi, schema);\n }\n\n if (schema.$ref) {\n const model = getType({ type: schema.$ref });\n operationParameter = {\n ...operationParameter,\n $refs: [...operationParameter.$refs, ...model.$refs],\n base: model.base,\n export: 'reference',\n imports: [...operationParameter.imports, ...model.imports],\n template: model.template,\n type: model.type,\n };\n operationParameter.default = getDefault(parameter, operationParameter);\n return operationParameter;\n }\n\n const model = getModel({ definition: schema, openApi, types });\n operationParameter = {\n ...operationParameter,\n $refs: [...operationParameter.$refs, ...model.$refs],\n base: model.base,\n enum: [...operationParameter.enum, ...model.enum],\n enums: [...operationParameter.enums, ...model.enums],\n export: model.export,\n imports: [...operationParameter.imports, ...model.imports],\n link: model.link,\n properties: [...operationParameter.properties, ...model.properties],\n template: model.template,\n type: model.type,\n };\n operationParameter.default = getDefault(parameter, operationParameter);\n return operationParameter;\n }\n\n // If the parameter has a type than it can be a basic or generic type.\n if (parameter.type) {\n const model = getType({\n format: parameter.format,\n type: parameter.type,\n });\n operationParameter = {\n ...operationParameter,\n $refs: [...operationParameter.$refs, ...model.$refs],\n base: model.base,\n export: 'generic',\n imports: [...operationParameter.imports, ...model.imports],\n template: model.template,\n type: model.type,\n };\n operationParameter.default = getDefault(parameter, operationParameter);\n return operationParameter;\n }\n\n return operationParameter;\n};\n","import type { Client } from '../../../types/client';\nimport type { OperationParameters } from '../../common/interfaces/client';\nimport { getRef } from '../../common/parser/getRef';\nimport { operationParameterFilterFn } from '../../common/parser/operation';\nimport type { OpenApi } from '../interfaces/OpenApi';\nimport type { OpenApiParameter } from '../interfaces/OpenApiParameter';\nimport { getOperationParameter } from './getOperationParameter';\n\nconst allowedIn = ['body', 'formData', 'header', 'path', 'query'] as const;\n\nexport const getOperationParameters = ({\n openApi,\n parameters,\n types,\n}: {\n openApi: OpenApi;\n parameters: OpenApiParameter[];\n types: Client['types'];\n}): OperationParameters => {\n const operationParameters: OperationParameters = {\n $refs: [],\n imports: [],\n parameters: [],\n parametersBody: null,\n parametersCookie: [], // not used in v2\n parametersForm: [],\n parametersHeader: [],\n parametersPath: [],\n parametersQuery: [],\n };\n\n parameters.forEach((parameterOrReference) => {\n const parameterDef = getRef<OpenApiParameter>(\n openApi,\n parameterOrReference,\n );\n const parameter = getOperationParameter({\n openApi,\n parameter: parameterDef,\n types,\n });\n\n const skip = !operationParameterFilterFn(parameter);\n if (!allowedIn.includes(parameterDef.in) || skip) {\n return;\n }\n\n switch (parameterDef.in) {\n case 'body':\n operationParameters.parametersBody = parameter;\n break;\n case 'formData':\n operationParameters.parametersForm = [\n ...operationParameters.parametersForm,\n parameter,\n ];\n break;\n case 'header':\n operationParameters.parametersHeader = [\n ...operationParameters.parametersHeader,\n parameter,\n ];\n break;\n case 'path':\n operationParameters.parametersPath = [\n ...operationParameters.parametersPath,\n parameter,\n ];\n break;\n case 'query':\n operationParameters.parametersQuery = [\n ...operationParameters.parametersQuery,\n parameter,\n ];\n break;\n }\n\n operationParameters.$refs = [\n ...operationParameters.$refs,\n ...parameter.$refs,\n ];\n operationParameters.imports = [\n ...operationParameters.imports,\n ...parameter.imports,\n ];\n operationParameters.parameters = [\n ...operationParameters.parameters,\n parameter,\n ];\n });\n\n return operationParameters;\n};\n","/**\n * Sort list of values and ensure that required parameters are first so that we do not generate\n * invalid types. Optional parameters cannot be positioned after required ones.\n */\nexport function toSortedByRequired<\n T extends { default?: unknown; isRequired: boolean },\n>(values: T[]): T[] {\n return values.sort((a, b) => {\n const aNeedsValue = a.isRequired && a.default === undefined;\n const bNeedsValue = b.isRequired && b.default === undefined;\n if (aNeedsValue && !bNeedsValue) return -1;\n if (bNeedsValue && !aNeedsValue) return 1;\n return 0;\n });\n}\n","import type { Client } from '../../../types/client';\nimport type { OperationResponse } from '../../common/interfaces/client';\nimport { getPattern } from '../../common/parser/getPattern';\nimport { getRef } from '../../common/parser/getRef';\nimport { getType } from '../../common/parser/type';\nimport type { OpenApi } from '../interfaces/OpenApi';\nimport type { OpenApiResponse } from '../interfaces/OpenApiResponse';\nimport type { OpenApiSchema } from '../interfaces/OpenApiSchema';\nimport { getModel } from './getModel';\n\nexport const getOperationResponse = ({\n code,\n openApi,\n response,\n types,\n}: {\n code: OperationResponse['code'];\n openApi: OpenApi;\n response: OpenApiResponse;\n types: Client['types'];\n}): OperationResponse => {\n const operationResponse: OperationResponse = {\n $refs: [],\n base: code !== 204 ? 'unknown' : 'void',\n code,\n description: response.description || null,\n enum: [],\n enums: [],\n export: 'generic',\n imports: [],\n in: 'response',\n isDefinition: false,\n isNullable: false,\n isReadOnly: false,\n isRequired: false,\n link: null,\n name: '',\n properties: [],\n responseTypes: [],\n template: null,\n type: code !== 204 ? 'unknown' : 'void',\n };\n\n let schema = response.schema;\n if (schema) {\n if (schema.$ref?.startsWith('#/responses/')) {\n schema = getRef<OpenApiSchema>(openApi, schema);\n }\n\n if (schema.$ref) {\n const model = getType({ type: schema.$ref });\n operationResponse.export = 'reference';\n operationResponse.type = model.type;\n operationResponse.base = model.base;\n operationResponse.template = model.template;\n operationResponse.imports = [\n ...operationResponse.imports,\n ...model.imports,\n ];\n return operationResponse;\n }\n\n const model = getModel({ definition: schema, openApi, types });\n operationResponse.export = model.export;\n operationResponse.type = model.type;\n operationResponse.base = model.base;\n operationResponse.template = model.template;\n operationResponse.link = model.link;\n operationResponse.isReadOnly = model.isReadOnly;\n operationResponse.isRequired = model.isRequired;\n operationResponse.isNullable = model.isNullable;\n operationResponse.format = model.format;\n operationResponse.maximum = model.maximum;\n operationResponse.exclusiveMaximum = model.exclusiveMaximum;\n operationResponse.minimum = model.minimum;\n operationResponse.exclusiveMinimum = model.exclusiveMinimum;\n operationResponse.multipleOf = model.multipleOf;\n operationResponse.maxLength = model.maxLength;\n operationResponse.minLength = model.minLength;\n operationResponse.maxItems = model.maxItems;\n operationResponse.minItems = model.minItems;\n operationResponse.uniqueItems = model.uniqueItems;\n operationResponse.maxProperties = model.maxProperties;\n operationResponse.minProperties = model.minProperties;\n operationResponse.pattern = getPattern(model.pattern);\n operationResponse.imports = [\n ...operationResponse.imports,\n ...model.imports,\n ];\n operationResponse.enum = [...operationResponse.enum, ...model.enum];\n operationResponse.enums = [...operationResponse.enums, ...model.enums];\n operationResponse.properties = [\n ...operationResponse.properties,\n ...model.properties,\n ];\n return operationResponse;\n }\n\n // We support basic properties from response headers, since both\n // fetch and XHR client just support string types.\n if (response.headers) {\n for (const name in response.headers) {\n operationResponse.in = 'header';\n operationResponse.name = name;\n operationResponse.type = 'string';\n operationResponse.base = 'string';\n return operationResponse;\n }\n }\n\n return operationResponse;\n};\n","import type { Client } from '../../../types/client';\nimport type { OperationResponse } from '../../common/interfaces/client';\nimport { getRef } from '../../common/parser/getRef';\nimport {\n parseResponseStatusCode,\n sorterByResponseStatusCode,\n tagResponseTypes,\n} from '../../common/parser/operation';\nimport type { OpenApi } from '../interfaces/OpenApi';\nimport type { OpenApiResponse } from '../interfaces/OpenApiResponse';\nimport type { OpenApiResponses } from '../interfaces/OpenApiResponses';\nimport { getOperationResponse } from './getOperationResponse';\n\nexport const getOperationResponses = ({\n openApi,\n responses,\n types,\n}: {\n openApi: OpenApi;\n responses: OpenApiResponses;\n types: Client['types'];\n}): OperationResponse[] => {\n let operationResponses: OperationResponse[] = [];\n\n Object.entries(responses).forEach(([responseCode, responseOrReference]) => {\n const code = parseResponseStatusCode(responseCode);\n if (!code) {\n return;\n }\n\n const response = getRef<OpenApiResponse>(openApi, responseOrReference);\n const operationResponse = getOperationResponse({\n code,\n openApi,\n response,\n types,\n });\n operationResponses = [...operationResponses, operationResponse];\n });\n\n operationResponses = tagResponseTypes(operationResponses);\n\n return operationResponses.sort(sorterByResponseStatusCode);\n};\n","import type { Client } from '../../../types/client';\nimport { getConfig } from '../../../utils/config';\nimport type {\n Operation,\n OperationParameters,\n} from '../../common/interfaces/client';\nimport {\n getOperationResponseHeader,\n operationNameFn,\n} from '../../common/parser/operation';\nimport { toSortedByRequired } from '../../common/parser/sort';\nimport type { OpenApi } from '../interfaces/OpenApi';\nimport type { OpenApiOperation } from '../interfaces/OpenApiOperation';\nimport { getOperationParameters } from './getOperationParameters';\nimport { getOperationResponses } from './getOperationResponses';\n\nexport const getOperation = ({\n method,\n op,\n openApi,\n pathParams,\n types,\n url,\n}: {\n method: Lowercase<Operation['method']>;\n op: OpenApiOperation;\n openApi: OpenApi;\n pathParams: OperationParameters;\n types: Client['types'];\n url: string;\n}): Operation => {\n const operationWithoutName: Omit<Operation, 'name'> = {\n $refs: [],\n deprecated: op.deprecated === true,\n description: op.description || null,\n id: op.operationId || null,\n imports: [],\n method: method.toUpperCase() as Operation['method'],\n parameters: [...pathParams.parameters],\n parametersBody: pathParams.parametersBody,\n parametersCookie: [...pathParams.parametersCookie],\n parametersForm: [...pathParams.parametersForm],\n parametersHeader: [...pathParams.parametersHeader],\n parametersPath: [...pathParams.parametersPath],\n parametersQuery: [...pathParams.parametersQuery],\n path: url,\n responseHeader: null,\n responses: [],\n summary: op.summary || null,\n tags: op.tags || null,\n };\n const operation = {\n ...operationWithoutName,\n name: operationNameFn({\n config: getConfig(),\n method: operationWithoutName.method,\n operationId: op.operationId,\n path: operationWithoutName.path,\n }),\n };\n\n if (op.parameters) {\n const parameters = getOperationParameters({\n openApi,\n parameters: op.parameters,\n types,\n });\n operation.$refs = [...operation.$refs, ...parameters.$refs];\n operation.imports = [...operation.imports, ...parameters.imports];\n operation.parameters = [...operation.parameters, ...parameters.parameters];\n operation.parametersBody = parameters.parametersBody;\n operation.parametersCookie = [\n ...operation.parametersCookie,\n ...parameters.parametersCookie,\n ];\n operation.parametersForm = [\n ...operation.parametersForm,\n ...parameters.parametersForm,\n ];\n operation.parametersHeader = [\n ...operation.parametersHeader,\n ...parameters.parametersHeader,\n ];\n operation.parametersPath = [\n ...operation.parametersPath,\n ...parameters.parametersPath,\n ];\n operation.parametersQuery = [\n ...operation.parametersQuery,\n ...parameters.parametersQuery,\n ];\n }\n\n if (op.responses) {\n operation.responses = getOperationResponses({\n openApi,\n responses: op.responses,\n types,\n });\n const successResponses = operation.responses.filter((response) =>\n response.responseTypes.includes('success'),\n );\n\n operation.responseHeader = getOperationResponseHeader(successResponses);\n\n successResponses.forEach((response) => {\n operation.$refs = [...operation.$refs, ...response.$refs];\n operation.imports = [...operation.imports, ...response.imports];\n });\n }\n\n operation.parameters = toSortedByRequired(operation.parameters);\n\n return operation;\n};\n","import { createOperationKey } from '../../../ir/operation';\nimport { getConfig } from '../../../utils/config';\nimport type { Client, Operation } from '../../common/interfaces/client';\nimport { operationFilterFn } from '../../common/parser/operation';\nimport { allowedServiceMethods } from '../../common/parser/service';\nimport type { OpenApi } from '../interfaces/OpenApi';\nimport { getOperationParameters } from './getOperationParameters';\nimport { getOperation } from './operation';\n\nexport const getOperations = ({\n openApi,\n types,\n}: {\n openApi: OpenApi;\n types: Client['types'];\n}): Operation[] => {\n const operationIds = new Map<string, string>();\n const operations: Operation[] = [];\n\n const config = getConfig();\n\n for (const path in openApi.paths) {\n const pathItem = openApi.paths[path]!;\n const pathParameters = getOperationParameters({\n openApi,\n parameters: pathItem.parameters ?? [],\n types,\n });\n\n for (const name in pathItem) {\n const method = name as Lowercase<Operation['method']>;\n\n const operationKey = createOperationKey({\n method,\n path,\n });\n\n if (allowedServiceMethods.includes(method)) {\n const op = pathItem[method]!;\n\n if (op.operationId) {\n if (operationIds.has(op.operationId)) {\n if (config.logs.level !== 'silent') {\n console.warn(\n `❗️ Duplicate operationId: ${op.operationId} in ${operationKey}. Please ensure your operation IDs are unique. This behavior is not supported and will likely lead to unexpected results.`,\n );\n }\n } else {\n operationIds.set(op.operationId, operationKey);\n }\n }\n\n if (\n operationFilterFn({\n config,\n operationKey,\n })\n ) {\n const operation = getOperation({\n method,\n op,\n openApi,\n pathParams: pathParameters,\n types,\n url: path,\n });\n operations.push(operation);\n }\n }\n }\n }\n\n return operations;\n};\n","import type { OpenApi } from '../interfaces/OpenApi';\n\n/**\n * Get the base server url.\n * @param openApi\n */\nexport const getServer = (openApi: OpenApi): string => {\n const scheme = openApi.schemes?.[0] || 'http';\n const host = openApi.host;\n const basePath = openApi.basePath || '';\n const url = host ? `${scheme}://${host}${basePath}` : basePath;\n return url.replace(/\\/$/g, '');\n};\n","import type { Client } from '../common/interfaces/client';\nimport { getServiceVersion } from '../common/parser/service';\nimport type { OpenApi } from './interfaces/OpenApi';\nimport { getModels } from './parser/getModels';\nimport { getOperations } from './parser/getOperations';\nimport { getServer } from './parser/getServer';\n\n/**\n * Parse the OpenAPI specification to a Client model that contains\n * all the models, operations and schema's we should output.\n * @param openApi The OpenAPI spec that we have loaded from disk.\n */\nexport const parse = (openApi: OpenApi): Omit<Client, 'config'> => {\n const version = getServiceVersion(openApi.info.version);\n const server = getServer(openApi);\n const { models, types } = getModels(openApi);\n const operations = getOperations({ openApi, types });\n\n return {\n models,\n operations,\n server,\n types,\n version,\n };\n};\n","import type { Model } from '../../common/interfaces/client';\nimport type { Dictionary } from '../../common/interfaces/Dictionary';\nimport { stripNamespace } from '../../common/parser/stripNamespace';\nimport type { OpenApi } from '../interfaces/OpenApi';\nimport type { OpenApiDiscriminator } from '../interfaces/OpenApiDiscriminator';\n\nconst inverseDictionary = (map: Dictionary<string>): Dictionary<string> => {\n const m2: Dictionary<string> = {};\n for (const name in map) {\n m2[map[name]!] = name;\n }\n return m2;\n};\n\nexport const findOneOfParentDiscriminator = (\n openApi: OpenApi,\n parent?: Model,\n): OpenApiDiscriminator | undefined => {\n if (openApi.components && parent) {\n for (const definitionName in openApi.components.schemas) {\n if (openApi.components.schemas.hasOwnProperty(definitionName)) {\n const schema = openApi.components.schemas[definitionName]!;\n if (\n schema.discriminator &&\n schema.oneOf?.length &&\n schema.oneOf.some(\n (definition) =>\n definition.$ref && stripNamespace(definition.$ref) == parent.name,\n )\n ) {\n return schema.discriminator;\n }\n }\n }\n }\n return;\n};\n\nexport const mapPropertyValue = (\n discriminator: OpenApiDiscriminator,\n parent: Model,\n): string => {\n if (discriminator.mapping) {\n const mapping = inverseDictionary(discriminator.mapping);\n const key = Object.keys(mapping).find(\n (item) => stripNamespace(item) == parent.name,\n );\n if (key && mapping[key]) {\n return mapping[key];\n }\n }\n return parent.name;\n};\n","import type { Client } from '../../../types/client';\nimport { escapeName } from '../../../utils/escape';\nimport { unique } from '../../../utils/unique';\nimport type { Model } from '../../common/interfaces/client';\nimport { getDefault } from '../../common/parser/getDefault';\nimport { getPattern } from '../../common/parser/getPattern';\nimport { getType } from '../../common/parser/type';\nimport type { GetModelFn } from '../interfaces/Model';\nimport type { OpenApi } from '../interfaces/OpenApi';\nimport type { OpenApiSchema } from '../interfaces/OpenApiSchema';\nimport {\n findOneOfParentDiscriminator,\n mapPropertyValue,\n} from './discriminator';\nimport { isDefinitionNullable } from './inferType';\n\nexport const getAdditionalPropertiesModel = ({\n debug,\n definition,\n getModel,\n model,\n openApi,\n types,\n}: {\n debug?: boolean;\n definition: OpenApiSchema;\n getModel: GetModelFn;\n model: Model;\n openApi: OpenApi;\n types: Client['types'];\n}): Model => {\n const ap =\n typeof definition.additionalProperties === 'object'\n ? definition.additionalProperties\n : {};\n const apModel = getModel({\n debug,\n definition: ap,\n openApi,\n parentDefinition: definition,\n types,\n });\n\n if (ap.$ref) {\n const apType = getType({ type: ap.$ref });\n model.base = apType.base;\n model.default = getDefault(definition, model);\n model.export = 'dictionary';\n model.imports.push(...apType.imports);\n model.template = apType.template;\n model.type = apType.type;\n return model;\n }\n\n if (\n definition.additionalProperties &&\n definition.properties &&\n Object.keys(definition.properties).length > 0\n ) {\n const additionalPropertiesType =\n typeof definition.additionalProperties === 'object' &&\n definition.additionalProperties.type &&\n !Array.isArray(definition.additionalProperties.type)\n ? definition.additionalProperties.type\n : apModel.base;\n const additionalProperties = [\n getType({ type: additionalPropertiesType }).base,\n ...model.properties.map((property) => property.base),\n ];\n apModel.base = additionalProperties.filter(unique).join(' | ');\n apModel.default = getDefault(definition, model);\n apModel.export = 'generic';\n apModel.isRequired = definition.additionalProperties === true;\n apModel.name = '[key: string]';\n return apModel;\n }\n\n model.base = apModel.base;\n model.default = getDefault(definition, model);\n model.export = 'dictionary';\n model.imports.push(...apModel.imports);\n model.link = apModel;\n model.template = apModel.template;\n model.type = apModel.type;\n return model;\n};\n\nexport const getModelProperties = ({\n debug,\n definition,\n getModel,\n openApi,\n parent,\n types,\n}: {\n debug?: boolean;\n definition: OpenApiSchema;\n getModel: GetModelFn;\n openApi: OpenApi;\n parent?: Model;\n types: Client['types'];\n}): Model[] => {\n let models: Model[] = [];\n const discriminator = findOneOfParentDiscriminator(openApi, parent);\n\n Object.entries(definition.properties ?? {}).forEach(\n ([propertyName, property]) => {\n const propertyRequired = Boolean(\n definition.required?.includes(propertyName),\n );\n\n const propertyValues: Omit<\n Model,\n | '$refs'\n | 'base'\n | 'enum'\n | 'enums'\n | 'export'\n | 'imports'\n | 'isNullable'\n | 'link'\n | 'properties'\n | 'template'\n | 'type'\n > = {\n default: property.default,\n deprecated: property.deprecated === true,\n description: property.description || null,\n exclusiveMaximum: property.exclusiveMaximum,\n exclusiveMinimum: property.exclusiveMinimum,\n format:\n property.type === 'array'\n ? (property.items?.format ?? property.format)\n : property.format,\n in: '',\n isDefinition: false,\n isReadOnly: property.readOnly === true,\n isRequired: propertyRequired,\n maxItems: property.maxItems,\n maxLength: property.maxLength,\n maxProperties: property.maxProperties,\n maximum: property.maximum,\n minItems: property.minItems,\n minLength: property.minLength,\n minProperties: property.minProperties,\n minimum: property.minimum,\n multipleOf: property.multipleOf,\n name: escapeName(propertyName),\n pattern: getPattern(property.pattern),\n uniqueItems: property.uniqueItems,\n };\n\n if (parent && discriminator?.propertyName == propertyName) {\n models = [\n ...models,\n {\n ...propertyValues,\n $refs: [],\n base: `'${mapPropertyValue(discriminator, parent)}'`,\n enum: [],\n enums: [],\n export: 'reference',\n imports: [],\n isNullable: isDefinitionNullable(property),\n link: null,\n properties: [],\n template: null,\n type: 'string',\n },\n ];\n return;\n }\n\n if (property.$ref) {\n const model = getType({ type: property.$ref });\n models = [\n ...models,\n {\n ...propertyValues,\n $refs: model.$refs,\n base: model.base,\n enum: [],\n enums: [],\n export: 'reference',\n imports: model.imports,\n isNullable: model.isNullable || isDefinitionNullable(property),\n link: null,\n properties: [],\n template: model.template,\n type: model.type,\n },\n ];\n return;\n }\n\n const model = getModel({\n debug,\n definition: property,\n initialValues: propertyValues,\n openApi,\n parentDefinition: definition,\n types,\n });\n model.isNullable = model.isNullable || isDefinitionNullable(property);\n models = [...models, model];\n },\n );\n\n return models;\n};\n","import type { Client } from '../../../types/client';\nimport type { Model } from '../../common/interfaces/client';\nimport { getRef } from '../../common/parser/getRef';\nimport { getType } from '../../common/parser/type';\nimport type { GetModelFn } from '../interfaces/Model';\nimport type { OpenApi } from '../interfaces/OpenApi';\nimport type { OpenApiSchema } from '../interfaces/OpenApiSchema';\n\nexport const getRequiredPropertiesFromComposition = ({\n debug,\n definitions,\n getModel,\n openApi,\n required,\n types,\n}: {\n debug?: boolean;\n definitions: OpenApiSchema[];\n getModel: GetModelFn;\n openApi: OpenApi;\n required: string[];\n types: Client['types'];\n}): Model[] => {\n const requiredProperties = definitions\n .reduce((properties, definition) => {\n if (definition.$ref) {\n const type = getType({ type: definition.$ref });\n // avoid circular references if two refs reference each other\n // if (types[type.base] && types[type.base].$ref === definition.$ref) {\n // const schema = getRef<OpenApiSchema>(openApi, definition);\n // return [...properties]\n // }\n\n const meta = {\n $ref: definition.$ref,\n name: type.base,\n };\n types[type.base] = meta;\n const schema = getRef<OpenApiSchema>(openApi, definition);\n return [\n ...properties,\n ...getModel({\n debug,\n definition: schema,\n meta,\n openApi,\n types,\n }).properties,\n ];\n }\n\n return [\n ...properties,\n ...getModel({\n debug,\n definition,\n openApi,\n parentDefinition: definition,\n types,\n }).properties,\n ];\n }, [] as Model[])\n .filter(\n (property) => !property.isRequired && required.includes(property.name),\n )\n .map((property) => ({\n ...property,\n isRequired: true,\n }));\n\n return requiredProperties;\n};\n","import type { Client } from '../../../types/client';\nimport type { Model, ModelComposition } from '../../common/interfaces/client';\nimport type { GetModelFn } from '../interfaces/Model';\nimport type { OpenApi } from '../interfaces/OpenApi';\nimport type { OpenApiSchema } from '../interfaces/OpenApiSchema';\nimport { getModelProperties } from './getModelProperties';\nimport { getRequiredPropertiesFromComposition } from './getRequiredPropertiesFromComposition';\n\ntype Composition = {\n definitions: OpenApiSchema[];\n type: ModelComposition['export'];\n};\n\nexport const findModelComposition = (\n definition: OpenApiSchema,\n): Composition | undefined => {\n const compositions: ReadonlyArray<{\n definitions: Composition['definitions'] | undefined;\n type: Composition['type'];\n }> = [\n {\n definitions: definition.allOf,\n type: 'all-of',\n },\n {\n definitions: definition.anyOf,\n type: 'any-of',\n },\n {\n definitions: definition.oneOf,\n type: 'one-of',\n },\n ];\n return compositions.find(\n (composition) => composition.definitions?.length,\n ) as ReturnType<typeof findModelComposition>;\n};\n\nexport const getModelComposition = ({\n debug,\n definition,\n definitions,\n getModel,\n model,\n openApi,\n type,\n types,\n}: Composition &\n Pick<Client, 'types'> & {\n debug?: boolean;\n definition: OpenApiSchema;\n getModel: GetModelFn;\n model: Model;\n openApi: OpenApi;\n }): ModelComposition => {\n const composition: ModelComposition = {\n $refs: model.$refs,\n enums: model.enums,\n export: type,\n imports: model.imports,\n properties: model.properties,\n };\n\n let properties: Model[] = [];\n\n definitions\n .map((def) => {\n const modelFromDef = getModel({\n debug,\n definition: def,\n openApi,\n parentDefinition: definition,\n types,\n });\n return modelFromDef;\n })\n .forEach((model) => {\n composition.$refs = [...composition.$refs, ...model.$refs];\n composition.imports = [...composition.imports, ...model.imports];\n composition.enums = [...composition.enums, ...model.enums];\n composition.properties = [...composition.properties, model];\n });\n\n if (definition.required && type === 'all-of') {\n const requiredProperties = getRequiredPropertiesFromComposition({\n debug,\n definitions,\n getModel,\n openApi,\n required: definition.required,\n types,\n });\n requiredProperties.forEach((requiredProperty) => {\n composition.$refs = [...composition.$refs, ...requiredProperty.$refs];\n composition.imports = [\n ...composition.imports,\n ...requiredProperty.imports,\n ];\n composition.enums = [...composition.enums, ...requiredProperty.enums];\n });\n properties = [...properties, ...requiredProperties];\n }\n\n if (definition.properties) {\n const modelProperties = getModelProperties({\n definition,\n getModel,\n openApi,\n types,\n });\n modelProperties.forEach((modelProperty) => {\n composition.$refs = [...composition.$refs, ...modelProperty.$refs];\n composition.imports = [...composition.imports, ...modelProperty.imports];\n composition.enums = [...composition.enums, ...modelProperty.enums];\n if (modelProperty.export === 'enum') {\n composition.enums = [...composition.enums, modelProperty];\n }\n });\n properties = [...properties, ...modelProperties];\n }\n\n if (properties.length) {\n const foundComposition = findModelComposition(definition);\n if (foundComposition) {\n const propertiesProperty: Model = {\n $refs: [],\n base: 'unknown',\n description: '',\n enum: [],\n enums: [],\n export: 'interface',\n imports: [],\n in: '',\n isDefinition: false,\n isNullable: false,\n isReadOnly: false,\n isRequired: false,\n link: null,\n name: 'properties',\n properties,\n template: null,\n type: 'unknown',\n };\n\n if (foundComposition.type === 'one-of') {\n composition.properties = [\n {\n ...composition,\n base: '',\n description: null,\n enum: [],\n in: '',\n isDefinition: false,\n isNullable: false,\n isReadOnly: false,\n isRequired: true,\n link: null,\n name: '',\n template: null,\n type: '',\n },\n propertiesProperty,\n ];\n composition.export = 'all-of';\n } else {\n composition.properties = [\n ...composition.properties,\n propertiesProperty,\n ];\n }\n }\n }\n\n return composition;\n};\n","import type { Client } from '../../../types/client';\nimport { enumMeta } from '../../../utils/enum';\nimport type { Model, ModelMeta } from '../../common/interfaces/client';\nimport { getDefault } from '../../common/parser/getDefault';\nimport { getEnums } from '../../common/parser/getEnums';\nimport { getPattern } from '../../common/parser/getPattern';\nimport { getType } from '../../common/parser/type';\nimport type { OpenApi } from '../interfaces/OpenApi';\nimport type { OpenApiSchema } from '../interfaces/OpenApiSchema';\nimport {\n findModelComposition,\n getModelComposition,\n} from './getModelComposition';\nimport {\n getAdditionalPropertiesModel,\n getModelProperties,\n} from './getModelProperties';\nimport {\n getDefinitionTypes,\n inferType,\n isDefinitionNullable,\n} from './inferType';\n\nexport const getModel = ({\n debug,\n definition,\n initialValues = {},\n isDefinition = false,\n meta,\n openApi,\n parentDefinition = null,\n types,\n}: Pick<Client, 'types'> & {\n debug?: boolean;\n definition: OpenApiSchema;\n /**\n * Pass through initial model values\n */\n initialValues?: Partial<Model>;\n isDefinition?: boolean;\n meta?: ModelMeta;\n openApi: OpenApi;\n parentDefinition?: OpenApiSchema | null;\n}): Model => {\n const definitionTypes = getDefinitionTypes(definition);\n const inferredType = inferType(definition, definitionTypes);\n\n const model: Model = {\n $refs: [],\n base: 'unknown',\n deprecated: Boolean(definition.deprecated),\n description: definition.description || null,\n enum: [],\n enums: [],\n exclusiveMaximum: definition.exclusiveMaximum,\n exclusiveMinimum: definition.exclusiveMinimum,\n export: 'interface',\n format: definition.format,\n imports: [],\n in: '',\n isDefinition,\n isNullable: isDefinitionNullable(definition),\n isReadOnly: definition.readOnly === true,\n isRequired: false,\n link: null,\n maxItems: definition.maxItems,\n maxLength: definition.maxLength,\n maxProperties: definition.maxProperties,\n maximum: definition.maximum,\n meta,\n minItems: definition.minItems,\n minLength: definition.minLength,\n minProperties: definition.minProperties,\n minimum: definition.minimum,\n multipleOf: definition.multipleOf,\n name: meta?.name ?? '',\n pattern: getPattern(definition.pattern),\n properties: [],\n template: null,\n type: 'unknown',\n uniqueItems: definition.uniqueItems,\n ...initialValues,\n };\n\n if (definition.$ref) {\n const definitionRef = getType({\n debug,\n type: definition.$ref,\n });\n model.$refs = [...model.$refs, decodeURIComponent(definition.$ref)];\n model.base = definitionRef.base;\n model.export = 'reference';\n model.imports = [...model.imports, ...definitionRef.imports];\n model.template = definitionRef.template;\n model.type = definitionRef.type;\n model.default = getDefault(definition, model);\n return model;\n }\n\n if (inferredType === 'enum') {\n const enums = getEnums(definition, definition.enum);\n if (enums.length) {\n model.base = 'string';\n model.enum = [...model.enum, ...enums];\n model.export = 'enum';\n model.type = 'string';\n model.default = getDefault(definition, model);\n if (!model.meta) {\n model.meta = enumMeta(model);\n }\n return model;\n }\n }\n\n if (\n definitionTypes.includes('array') &&\n (definition.items || definition.prefixItems)\n ) {\n if (definition.prefixItems) {\n const arrayItems = definition.prefixItems.map((item) =>\n getModel({\n definition: item,\n openApi,\n parentDefinition: definition,\n types,\n }),\n );\n\n model.export = 'array';\n model.$refs = [\n ...model.$refs,\n ...arrayItems.reduce(\n (acc, m) => [...acc, ...m.$refs],\n [] as Model['$refs'],\n ),\n ];\n model.imports = [\n ...model.imports,\n ...arrayItems.reduce(\n (acc, m) => [...acc, ...m.imports],\n [] as Model['imports'],\n ),\n ];\n model.link = arrayItems;\n model.default = getDefault(definition, model);\n return model;\n }\n\n if (!definition.items) {\n return model;\n }\n\n if (definition.items.$ref) {\n const arrayItems = getType({ type: definition.items.$ref });\n model.$refs = [...model.$refs, decodeURIComponent(definition.items.$ref)];\n model.base = arrayItems.base;\n model.export = 'array';\n model.imports = [...model.imports, ...arrayItems.imports];\n model.template = arrayItems.template;\n model.type = arrayItems.type;\n model.default = getDefault(definition, model);\n return model;\n }\n\n if (definition.items.anyOf && parentDefinition && parentDefinition.type) {\n const foundComposition = findModelComposition(parentDefinition);\n if (\n foundComposition &&\n foundComposition.definitions.some(\n (definition) => !getDefinitionTypes(definition).includes('array'),\n )\n ) {\n return getModel({\n definition: definition.items,\n openApi,\n parentDefinition: definition,\n types,\n });\n }\n }\n\n /**\n * if items are a plain array, infer any-of composition\n * {@link} https://github.com/ferdikoomen/openapi-typescript-codegen/issues/2062\n */\n const arrayItemsDefinition: OpenApiSchema = Array.isArray(definition.items)\n ? {\n anyOf: definition.items,\n }\n : definition.items;\n const arrayItems = getModel({\n definition: arrayItemsDefinition,\n openApi,\n parentDefinition: definition,\n types,\n });\n model.base = arrayItems.base;\n model.export = 'array';\n model.$refs = [...model.$refs, ...arrayItems.$refs];\n model.imports = [...model.imports, ...arrayItems.imports];\n model.link = arrayItems;\n model.template = arrayItems.template;\n model.type = arrayItems.type;\n model.default = getDefault(definition, model);\n return model;\n }\n\n const foundComposition = findModelComposition(definition);\n if (foundComposition) {\n const composition = getModelComposition({\n ...foundComposition,\n debug,\n definition,\n getModel,\n model,\n openApi,\n types,\n });\n const result = { ...model, ...composition };\n return result;\n }\n\n if (\n definitionTypes.includes('object') ||\n definition.properties ||\n definition.additionalProperties\n ) {\n if (\n definition.properties &&\n (Object.keys(definition.properties).length > 0 ||\n !definition.additionalProperties)\n ) {\n model.base = 'unknown';\n model.export = 'interface';\n model.type = 'unknown';\n model.default = getDefault(definition, model);\n\n const modelProperties = getModelProperties({\n debug,\n definition,\n getModel,\n openApi,\n parent: model,\n types,\n });\n modelProperties.forEach((modelProperty) => {\n model.$refs = [...model.$refs, ...modelProperty.$refs];\n model.enums = [...model.enums, ...modelProperty.enums];\n model.imports = [...model.imports, ...modelProperty.imports];\n model.properties = [...model.properties, modelProperty];\n if (modelProperty.export === 'enum') {\n model.enums = [...model.enums, modelProperty];\n }\n });\n\n if (definition.additionalProperties) {\n const modelProperty = getAdditionalPropertiesModel({\n debug,\n definition,\n getModel,\n model,\n openApi,\n types,\n });\n model.properties = [...model.properties, modelProperty];\n }\n\n // objects with no explicit properties accept any key/value pair\n if (\n !model.properties.length &&\n model.base === 'unknown' &&\n model.type === 'unknown'\n ) {\n model.export = 'dictionary';\n if (!model.name) {\n model.name = '[key: string]';\n }\n }\n\n return model;\n }\n\n const result = getAdditionalPropertiesModel({\n debug,\n definition,\n getModel,\n model,\n openApi,\n types,\n });\n return result;\n }\n\n if (definition.const !== undefined) {\n const definitionConst = definition.const;\n const modelConst =\n typeof definitionConst === 'string'\n ? `\"${definitionConst}\"`\n : `${definitionConst}`;\n model.base = modelConst;\n model.export = 'const';\n model.type = modelConst;\n return model;\n }\n\n // If the schema has a type than it can be a basic or generic type.\n if (definitionTypes.length) {\n const definitionType = getType({\n format: definition.format,\n type: definition.type,\n });\n model.base = definitionType.base;\n model.export = 'generic';\n model.$refs = [...model.$refs, ...definitionType.$refs];\n model.imports = [...model.imports, ...definitionType.imports];\n model.isNullable = definitionType.isNullable || model.isNullable;\n model.template = definitionType.template;\n model.type = definitionType.type;\n model.default = getDefault(definition, model);\n return model;\n }\n\n return model;\n};\n","import type { OpenApiParameter } from '../interfaces/OpenApiParameter';\nimport type { OpenApiSchema } from '../interfaces/OpenApiSchema';\n\nexport const getParameterSchema = (\n definition: OpenApiParameter,\n): OpenApiSchema | undefined => {\n if (definition.schema) {\n return definition.schema;\n }\n\n if (definition.content) {\n // treat every media type the same for now, types should be modified to\n // preserve this data so client knows which headers to use and how to\n // parse response bodies\n const contents = Object.entries(definition.content);\n for (const [key, mediaTypeObject] of contents) {\n if (mediaTypeObject.schema) {\n const mediaType = key as keyof Required<OpenApiParameter>['content'];\n return definition.content[mediaType].schema;\n }\n }\n }\n\n return;\n};\n","import type { Client } from '../../../types/client';\nimport { getParametersMeta, getSchemasMeta } from '../../../utils/meta';\nimport type { OpenApi } from '../interfaces/OpenApi';\nimport { getModel } from './getModel';\nimport { getParameterSchema } from './parameter';\n\nexport const getModels = (\n openApi: OpenApi,\n): Pick<Client, 'models' | 'types'> => {\n const types: Client['types'] = {};\n let models: Client['models'] = [];\n\n if (!openApi.components) {\n return {\n models,\n types,\n };\n }\n\n Object.entries(openApi.components.schemas ?? {}).forEach(\n ([definitionName, definition]) => {\n const meta = getSchemasMeta(definitionName);\n types[meta.name] = meta;\n const model = getModel({\n definition,\n isDefinition: true,\n meta,\n openApi,\n types,\n });\n models = [...models, model];\n },\n );\n\n Object.entries(openApi.components.parameters ?? {}).forEach(\n ([definitionName, definition]) => {\n const schema = getParameterSchema(definition);\n if (!schema) {\n return;\n }\n\n const meta = getParametersMeta(definitionName);\n types[meta.name] = meta;\n const model = getModel({\n definition: schema,\n isDefinition: true,\n meta,\n openApi,\n types,\n });\n model.deprecated = definition.deprecated;\n model.description = definition.description || null;\n models = [...models, model];\n },\n );\n\n return {\n models,\n types,\n };\n};\n","import type { Client } from '../../../types/client';\nimport { refParametersPartial } from '../../../utils/const';\nimport { enumMeta } from '../../../utils/enum';\nimport type { OperationParameter } from '../../common/interfaces/client';\nimport { getDefault } from '../../common/parser/getDefault';\nimport { getPattern } from '../../common/parser/getPattern';\nimport { getRef } from '../../common/parser/getRef';\nimport { operationParameterNameFn } from '../../common/parser/operation';\nimport { getType } from '../../common/parser/type';\nimport type { OpenApi } from '../interfaces/OpenApi';\nimport type { OpenApiParameter } from '../interfaces/OpenApiParameter';\nimport type { OpenApiSchema } from '../interfaces/OpenApiSchema';\nimport { getModel } from './getModel';\nimport { isDefinitionNullable } from './inferType';\nimport { getParameterSchema } from './parameter';\n\nexport const getOperationParameter = ({\n openApi,\n parameter,\n types,\n}: {\n openApi: OpenApi;\n parameter: OpenApiParameter;\n types: Client['types'];\n}): OperationParameter => {\n const operationParameterWithoutName: Omit<OperationParameter, 'name'> = {\n $refs: [],\n base: 'unknown',\n deprecated: parameter.deprecated === true,\n description: parameter.description || null,\n enum: [],\n enums: [],\n export: 'interface',\n imports: [],\n in: parameter.in,\n isDefinition: false,\n isNullable: isDefinitionNullable(parameter),\n isReadOnly: false,\n isRequired: parameter.required === true,\n link: null,\n mediaType: null,\n prop: parameter.name,\n properties: [],\n template: null,\n type: 'unknown',\n };\n let operationParameter = {\n ...operationParameterWithoutName,\n name: operationParameterNameFn(operationParameterWithoutName),\n };\n\n if (parameter.$ref) {\n const model = getType({ type: parameter.$ref });\n operationParameter = {\n ...operationParameter,\n $refs: [...operationParameter.$refs, ...model.$refs],\n base: model.base,\n export: 'reference',\n imports: [...operationParameter.imports, ...model.imports],\n template: model.template,\n type: model.type,\n };\n return operationParameter;\n }\n\n let schema = getParameterSchema(parameter);\n if (schema) {\n if (schema.$ref?.startsWith(refParametersPartial)) {\n schema = getRef<OpenApiSchema>(openApi, schema);\n }\n\n if (schema.$ref) {\n const model = getType({ type: schema.$ref });\n operationParameter = {\n ...operationParameter,\n $refs: [...operationParameter.$refs, ...model.$refs],\n base: model.base,\n export: 'reference',\n imports: [...operationParameter.imports, ...model.imports],\n template: model.template,\n type: model.type,\n };\n operationParameter.default = getDefault(schema);\n return operationParameter;\n }\n\n const model = getModel({ definition: schema, openApi, types });\n operationParameter = {\n ...operationParameter,\n $refs: [...operationParameter.$refs, ...model.$refs],\n base: model.base,\n enum: [...operationParameter.enum, ...model.enum],\n enums: [...operationParameter.enums, ...model.enums],\n exclusiveMaximum: model.exclusiveMaximum,\n exclusiveMinimum: model.exclusiveMinimum,\n export: model.export,\n format: model.format,\n imports: [...operationParameter.imports, ...model.imports],\n isNullable: operationParameter.isNullable || model.isNullable,\n isReadOnly: model.isReadOnly,\n isRequired: operationParameter.isRequired || model.isRequired,\n link: model.link,\n maxItems: model.maxItems,\n maxLength: model.maxLength,\n maxProperties: model.maxProperties,\n maximum: model.maximum,\n minItems: model.minItems,\n minLength: model.minLength,\n minProperties: model.minProperties,\n minimum: model.minimum,\n multipleOf: model.multipleOf,\n pattern: getPattern(model.pattern),\n properties: [...operationParameter.properties, ...model.properties],\n template: model.template,\n type: model.type,\n uniqueItems: model.uniqueItems,\n };\n if (\n (operationParameter.enum.length || operationParameter.enums.length) &&\n !operationParameter.meta\n ) {\n operationParameter.meta = enumMeta(operationParameter);\n }\n operationParameter.default = model.default;\n return operationParameter;\n }\n\n return operationParameter;\n};\n","import type { Client } from '../../../types/client';\nimport type { OperationParameters } from '../../common/interfaces/client';\nimport { getRef } from '../../common/parser/getRef';\nimport { operationParameterFilterFn } from '../../common/parser/operation';\nimport type { OpenApi } from '../interfaces/OpenApi';\nimport type { OpenApiParameter } from '../interfaces/OpenApiParameter';\nimport { getOperationParameter } from './getOperationParameter';\n\nconst allowedIn = ['cookie', 'formData', 'header', 'path', 'query'] as const;\n\nexport const getOperationParameters = ({\n openApi,\n parameters,\n types,\n}: {\n openApi: OpenApi;\n parameters: OpenApiParameter[];\n types: Client['types'];\n}): OperationParameters => {\n const operationParameters: OperationParameters = {\n $refs: [],\n imports: [],\n parameters: [],\n parametersBody: null,\n parametersCookie: [],\n parametersForm: [],\n parametersHeader: [],\n parametersPath: [],\n parametersQuery: [], // not used in v3 -> @see requestBody\n };\n\n parameters.forEach((parameterOrReference) => {\n const parameterDef = getRef<OpenApiParameter>(\n openApi,\n parameterOrReference,\n );\n const parameter = getOperationParameter({\n openApi,\n parameter: parameterDef,\n types,\n });\n\n const skip = !operationParameterFilterFn(parameter);\n if (!allowedIn.includes(parameterDef.in) || skip) {\n return;\n }\n\n switch (parameterDef.in) {\n case 'cookie':\n operationParameters.parametersCookie = [\n ...operationParameters.parametersCookie,\n parameter,\n ];\n break;\n case 'formData':\n operationParameters.parametersForm = [\n ...operationParameters.parametersForm,\n parameter,\n ];\n break;\n case 'header':\n operationParameters.parametersHeader = [\n ...operationParameters.parametersHeader,\n parameter,\n ];\n break;\n case 'path':\n operationParameters.parametersPath = [\n ...operationParameters.parametersPath,\n parameter,\n ];\n break;\n case 'query':\n operationParameters.parametersQuery = [\n ...operationParameters.parametersQuery,\n parameter,\n ];\n break;\n }\n\n operationParameters.$refs = [\n ...operationParameters.$refs,\n ...parameter.$refs,\n ];\n operationParameters.imports = [\n ...operationParameters.imports,\n ...parameter.imports,\n ];\n operationParameters.parameters = [\n ...operationParameters.parameters,\n parameter,\n ];\n });\n\n return operationParameters;\n};\n","import type { Dictionary } from '../../common/interfaces/Dictionary';\nimport type { OpenApi } from '../interfaces/OpenApi';\nimport type { OpenApiMediaType } from '../interfaces/OpenApiMediaType';\nimport type { OpenApiSchema } from '../interfaces/OpenApiSchema';\n\nexport interface Content {\n mediaType: string;\n schema: OpenApiSchema;\n}\n\nconst BASIC_MEDIA_TYPES = [\n 'application/json-patch+json',\n 'application/json',\n 'application/ld+json',\n 'application/x-www-form-urlencoded',\n 'multipart/batch',\n 'multipart/form-data',\n 'multipart/mixed',\n 'multipart/related',\n 'text/json',\n 'text/plain',\n];\n\nexport const getContent = (\n _openApi: OpenApi,\n content: Dictionary<OpenApiMediaType>,\n): Content | undefined => {\n const basicMediaTypeWithSchema = Object.keys(content)\n .filter((mediaType) => {\n const cleanMediaType = mediaType.split(';')[0]!.trim();\n return BASIC_MEDIA_TYPES.includes(cleanMediaType);\n })\n .find((mediaType) => Boolean(content[mediaType]?.schema));\n\n if (basicMediaTypeWithSchema) {\n return {\n mediaType: basicMediaTypeWithSchema,\n schema: content[basicMediaTypeWithSchema]!.schema as OpenApiSchema,\n };\n }\n\n const firstMediaTypeWithSchema = Object.keys(content).find((mediaType) =>\n Boolean(content[mediaType]?.schema),\n );\n\n if (firstMediaTypeWithSchema) {\n return {\n mediaType: firstMediaTypeWithSchema,\n schema: content[firstMediaTypeWithSchema]!.schema as OpenApiSchema,\n };\n }\n\n return;\n};\n","import type { Client } from '../../../types/client';\nimport type { OperationParameter } from '../../common/interfaces/client';\nimport { getPattern } from '../../common/parser/getPattern';\nimport { getType } from '../../common/parser/type';\nimport type { OpenApi } from '../interfaces/OpenApi';\nimport type { OpenApiRequestBody } from '../interfaces/OpenApiRequestBody';\nimport { getContent } from './getContent';\nimport { getModel } from './getModel';\n\nexport const getOperationRequestBody = ({\n body,\n debug,\n openApi,\n types,\n}: {\n body: OpenApiRequestBody;\n debug?: boolean;\n openApi: OpenApi;\n types: Client['types'];\n}): OperationParameter => {\n const name = body['x-body-name'] ?? 'requestBody';\n\n const requestBody: OperationParameter = {\n $refs: [],\n base: 'unknown',\n default: undefined,\n description: body.description || null,\n enum: [],\n enums: [],\n export: 'interface',\n imports: [],\n in: 'body',\n isDefinition: false,\n isNullable: body.nullable === true,\n isReadOnly: false,\n isRequired: body.required === true,\n link: null,\n mediaType: null,\n name,\n prop: name,\n properties: [],\n template: null,\n type: 'unknown',\n };\n\n if (!body.content) {\n return requestBody;\n }\n\n const content = getContent(openApi, body.content);\n if (!content) {\n return requestBody;\n }\n\n requestBody.mediaType = content.mediaType;\n\n switch (requestBody.mediaType) {\n case 'application/x-www-form-urlencoded':\n case 'multipart/form-data':\n requestBody.in = 'formData';\n requestBody.name = 'formData';\n requestBody.prop = 'formData';\n break;\n }\n\n if (content.schema.$ref) {\n const model = getType({ type: content.schema.$ref });\n requestBody.export = 'reference';\n requestBody.type = model.type;\n requestBody.base = model.base;\n requestBody.template = model.template;\n requestBody.$refs = [...requestBody.$refs, ...model.$refs];\n requestBody.imports = [...requestBody.imports, ...model.imports];\n return requestBody;\n }\n\n const model = getModel({\n debug,\n definition: content.schema,\n openApi,\n types,\n });\n requestBody.$refs = [...requestBody.$refs, ...model.$refs];\n requestBody.base = model.base;\n requestBody.enum = [...requestBody.enum, ...model.enum];\n requestBody.enums = [...requestBody.enums, ...model.enums];\n requestBody.exclusiveMaximum = model.exclusiveMaximum;\n requestBody.exclusiveMinimum = model.exclusiveMinimum;\n requestBody.export = model.export;\n requestBody.format = model.format;\n requestBody.imports = [...requestBody.imports, ...model.imports];\n requestBody.isNullable = requestBody.isNullable || model.isNullable;\n requestBody.isReadOnly = model.isReadOnly;\n requestBody.isRequired = requestBody.isRequired || model.isRequired;\n requestBody.link = model.link;\n requestBody.maximum = model.maximum;\n requestBody.maxItems = model.maxItems;\n requestBody.maxLength = model.maxLength;\n requestBody.maxProperties = model.maxProperties;\n requestBody.minimum = model.minimum;\n requestBody.minItems = model.minItems;\n requestBody.minLength = model.minLength;\n requestBody.minProperties = model.minProperties;\n requestBody.multipleOf = model.multipleOf;\n requestBody.pattern = getPattern(model.pattern);\n requestBody.properties = [...requestBody.properties, ...model.properties];\n requestBody.template = model.template;\n requestBody.type = model.type;\n requestBody.uniqueItems = model.uniqueItems;\n return requestBody;\n};\n","import type { Client } from '../../../types/client';\nimport type { OperationResponse } from '../../common/interfaces/client';\nimport { getPattern } from '../../common/parser/getPattern';\nimport { getRef } from '../../common/parser/getRef';\nimport { getType } from '../../common/parser/type';\nimport type { OpenApi } from '../interfaces/OpenApi';\nimport type { OpenApiResponse } from '../interfaces/OpenApiResponse';\nimport type { OpenApiSchema } from '../interfaces/OpenApiSchema';\nimport { getContent } from './getContent';\nimport { getModel } from './getModel';\n\nexport const getOperationResponse = ({\n code,\n openApi,\n response,\n types,\n}: {\n code: OperationResponse['code'];\n openApi: OpenApi;\n response: OpenApiResponse;\n types: Client['types'];\n}): OperationResponse => {\n const operationResponse: OperationResponse = {\n $refs: [],\n base: code !== 204 ? 'unknown' : 'void',\n code,\n description: response.description || null,\n enum: [],\n enums: [],\n export: 'generic',\n imports: [],\n in: 'response',\n isDefinition: false,\n isNullable: false,\n isReadOnly: false,\n isRequired: false,\n link: null,\n name: '',\n properties: [],\n responseTypes: [],\n template: null,\n type: code !== 204 ? 'unknown' : 'void',\n };\n\n if (response.content) {\n const content = getContent(openApi, response.content);\n if (content) {\n if (content.schema.$ref?.startsWith('#/components/responses/')) {\n content.schema = getRef<OpenApiSchema>(openApi, content.schema);\n }\n\n if (content.schema.$ref) {\n const model = getType({ type: content.schema.$ref });\n operationResponse.base = model.base;\n operationResponse.export = 'reference';\n operationResponse.$refs = [...operationResponse.$refs, ...model.$refs];\n operationResponse.imports = [\n ...operationResponse.imports,\n ...model.imports,\n ];\n operationResponse.template = model.template;\n operationResponse.type = model.type;\n return operationResponse;\n }\n\n const model = getModel({ definition: content.schema, openApi, types });\n operationResponse.export = model.export;\n operationResponse.type = model.type;\n operationResponse.base = model.base;\n operationResponse.template = model.template;\n operationResponse.link = model.link;\n operationResponse.isReadOnly = model.isReadOnly;\n operationResponse.isRequired = model.isRequired;\n operationResponse.isNullable = model.isNullable;\n operationResponse.format = model.format;\n operationResponse.maximum = model.maximum;\n operationResponse.exclusiveMaximum = model.exclusiveMaximum;\n operationResponse.minimum = model.minimum;\n operationResponse.exclusiveMinimum = model.exclusiveMinimum;\n operationResponse.multipleOf = model.multipleOf;\n operationResponse.maxLength = model.maxLength;\n operationResponse.minLength = model.minLength;\n operationResponse.maxItems = model.maxItems;\n operationResponse.minItems = model.minItems;\n operationResponse.uniqueItems = model.uniqueItems;\n operationResponse.maxProperties = model.maxProperties;\n operationResponse.minProperties = model.minProperties;\n operationResponse.pattern = getPattern(model.pattern);\n operationResponse.$refs = [...operationResponse.$refs, ...model.$refs];\n operationResponse.imports = [\n ...operationResponse.imports,\n ...model.imports,\n ];\n operationResponse.enum = [...operationResponse.enum, ...model.enum];\n operationResponse.enums = [...operationResponse.enums, ...model.enums];\n operationResponse.properties = [\n ...operationResponse.properties,\n ...model.properties,\n ];\n return operationResponse;\n }\n }\n\n // We support basic properties from response headers, since both\n // fetch and XHR client just support string types.\n if (response.headers) {\n for (const name in response.headers) {\n operationResponse.in = 'header';\n operationResponse.name = name;\n operationResponse.type = 'string';\n operationResponse.base = 'string';\n return operationResponse;\n }\n }\n\n return operationResponse;\n};\n","import type { Client } from '../../../types/client';\nimport type { OperationResponse } from '../../common/interfaces/client';\nimport { getRef } from '../../common/parser/getRef';\nimport {\n parseResponseStatusCode,\n sorterByResponseStatusCode,\n tagResponseTypes,\n} from '../../common/parser/operation';\nimport type { OpenApi } from '../interfaces/OpenApi';\nimport type { OpenApiResponse } from '../interfaces/OpenApiResponse';\nimport type { OpenApiResponses } from '../interfaces/OpenApiResponses';\nimport { getOperationResponse } from './getOperationResponse';\n\nexport const getOperationResponses = ({\n openApi,\n responses,\n types,\n}: {\n debug?: boolean;\n openApi: OpenApi;\n responses: OpenApiResponses;\n types: Client['types'];\n}): OperationResponse[] => {\n let operationResponses: OperationResponse[] = [];\n\n Object.entries(responses).forEach(([responseCode, responseOrReference]) => {\n const code = parseResponseStatusCode(responseCode);\n if (!code) {\n return;\n }\n\n const response = getRef<OpenApiResponse>(openApi, responseOrReference);\n const operationResponse = getOperationResponse({\n code,\n openApi,\n response,\n types,\n });\n operationResponses = [...operationResponses, operationResponse];\n });\n\n operationResponses = tagResponseTypes(operationResponses);\n\n return operationResponses.sort(sorterByResponseStatusCode);\n};\n","import type { Client } from '../../../types/client';\nimport { getConfig } from '../../../utils/config';\nimport type {\n Operation,\n OperationParameter,\n OperationParameters,\n} from '../../common/interfaces/client';\nimport { getRef } from '../../common/parser/getRef';\nimport {\n getOperationResponseHeader,\n operationNameFn,\n} from '../../common/parser/operation';\nimport { toSortedByRequired } from '../../common/parser/sort';\nimport type { OpenApi } from '../interfaces/OpenApi';\nimport type { OpenApiOperation } from '../interfaces/OpenApiOperation';\nimport type { OpenApiRequestBody } from '../interfaces/OpenApiRequestBody';\nimport { getOperationParameters } from './getOperationParameters';\nimport { getOperationRequestBody } from './getOperationRequestBody';\nimport { getOperationResponses } from './getOperationResponses';\n\n// add global path parameters, skip duplicate names\nconst mergeParameters = (\n opParams: OperationParameter[],\n globalParams: OperationParameter[],\n): OperationParameter[] => {\n let mergedParameters = [...opParams];\n let pendingParameters = [...globalParams];\n while (pendingParameters.length > 0) {\n const pendingParam = pendingParameters[0]!;\n pendingParameters = pendingParameters.slice(1);\n const canMerge = mergedParameters.every(\n (param) =>\n param.in !== pendingParam.in || param.name !== pendingParam.name,\n );\n if (canMerge) {\n mergedParameters = [...mergedParameters, pendingParam];\n }\n }\n return mergedParameters;\n};\n\nexport const getOperation = ({\n debug,\n method,\n op,\n openApi,\n pathParams,\n types,\n url,\n}: {\n debug?: boolean;\n method: Lowercase<Operation['method']>;\n op: OpenApiOperation;\n openApi: OpenApi;\n pathParams: OperationParameters;\n types: Client['types'];\n url: string;\n}): Operation => {\n const operationWithoutName: Omit<Operation, 'name'> = {\n $refs: [],\n deprecated: Boolean(op.deprecated),\n description: op.description || null,\n id: op.operationId || null,\n imports: [],\n method: method.toUpperCase() as Operation['method'],\n parameters: [],\n parametersBody: pathParams.parametersBody,\n parametersCookie: [],\n parametersForm: [],\n parametersHeader: [],\n parametersPath: [],\n parametersQuery: [],\n path: url,\n responseHeader: null,\n responses: [],\n summary: op.summary || null,\n tags: op.tags || null,\n };\n const operation = {\n ...operationWithoutName,\n name: operationNameFn({\n config: getConfig(),\n method: operationWithoutName.method,\n operationId: op.operationId,\n path: operationWithoutName.path,\n }),\n };\n\n if (op.parameters) {\n const parameters = getOperationParameters({\n openApi,\n parameters: op.parameters,\n types,\n });\n operation.$refs = [...operation.$refs, ...parameters.$refs];\n operation.imports = [...operation.imports, ...parameters.imports];\n operation.parameters = [...operation.parameters, ...parameters.parameters];\n operation.parametersBody = parameters.parametersBody;\n operation.parametersCookie = [\n ...operation.parametersCookie,\n ...parameters.parametersCookie,\n ];\n operation.parametersForm = [\n ...operation.parametersForm,\n ...parameters.parametersForm,\n ];\n operation.parametersHeader = [\n ...operation.parametersHeader,\n ...parameters.parametersHeader,\n ];\n operation.parametersPath = [\n ...operation.parametersPath,\n ...parameters.parametersPath,\n ];\n operation.parametersQuery = [\n ...operation.parametersQuery,\n ...parameters.parametersQuery,\n ];\n }\n\n if (op.requestBody) {\n const requestBodyDef = getRef<OpenApiRequestBody>(openApi, op.requestBody);\n const requestBody = getOperationRequestBody({\n body: requestBodyDef,\n debug,\n openApi,\n types,\n });\n operation.$refs = [...operation.$refs, ...requestBody.$refs];\n operation.imports = [...operation.imports, ...requestBody.imports];\n operation.parameters = [...operation.parameters, requestBody];\n operation.parametersBody = requestBody;\n }\n\n if (op.responses) {\n operation.responses = getOperationResponses({\n openApi,\n responses: op.responses,\n types,\n });\n const successResponses = operation.responses.filter((response) =>\n response.responseTypes.includes('success'),\n );\n\n operation.responseHeader = getOperationResponseHeader(successResponses);\n\n successResponses.forEach((response) => {\n operation.$refs = [...operation.$refs, ...response.$refs];\n operation.imports = [...operation.imports, ...response.imports];\n });\n }\n\n operation.parameters = mergeParameters(\n operation.parameters,\n pathParams.parameters,\n );\n operation.parametersCookie = mergeParameters(\n operation.parametersCookie,\n pathParams.parametersCookie,\n );\n operation.parametersForm = mergeParameters(\n operation.parametersForm,\n pathParams.parametersForm,\n );\n operation.parametersHeader = mergeParameters(\n operation.parametersHeader,\n pathParams.parametersHeader,\n );\n operation.parametersPath = mergeParameters(\n operation.parametersPath,\n pathParams.parametersPath,\n );\n operation.parametersQuery = mergeParameters(\n operation.parametersQuery,\n pathParams.parametersQuery,\n );\n\n operation.parameters = toSortedByRequired(operation.parameters);\n\n return operation;\n};\n","import { createOperationKey } from '../../../ir/operation';\nimport { getConfig } from '../../../utils/config';\nimport type { Client, Operation } from '../../common/interfaces/client';\nimport { operationFilterFn } from '../../common/parser/operation';\nimport { allowedServiceMethods } from '../../common/parser/service';\nimport type { OpenApi } from '../interfaces/OpenApi';\nimport { getOperationParameters } from './getOperationParameters';\nimport { getOperation } from './operation';\n\nexport const getOperations = ({\n openApi,\n types,\n}: {\n openApi: OpenApi;\n types: Client['types'];\n}): Operation[] => {\n const operationIds = new Map<string, string>();\n const operations: Operation[] = [];\n\n const config = getConfig();\n\n for (const path in openApi.paths) {\n const pathItem = openApi.paths[path]!;\n const pathParameters = getOperationParameters({\n openApi,\n parameters: pathItem.parameters ?? [],\n types,\n });\n\n for (const name in pathItem) {\n const method = name as Lowercase<Operation['method']>;\n\n const operationKey = createOperationKey({\n method,\n path,\n });\n\n if (allowedServiceMethods.includes(method)) {\n const op = pathItem[method]!;\n\n if (op.operationId) {\n if (operationIds.has(op.operationId)) {\n if (config.logs.level !== 'silent') {\n console.warn(\n `❗️ Duplicate operationId: ${op.operationId} in ${operationKey}. Please ensure your operation IDs are unique. This behavior is not supported and will likely lead to unexpected results.`,\n );\n }\n } else {\n operationIds.set(op.operationId, operationKey);\n }\n }\n\n if (\n operationFilterFn({\n config,\n operationKey,\n })\n ) {\n const operation = getOperation({\n method,\n op,\n openApi,\n pathParams: pathParameters,\n types,\n url: path,\n });\n operations.push(operation);\n }\n }\n }\n }\n\n return operations;\n};\n","import type { OpenApi } from '../interfaces/OpenApi';\n\nexport const getServer = (openApi: OpenApi): string => {\n const server = openApi.servers?.[0];\n const variables = server?.variables || {};\n let url = server?.url || '';\n Object.entries(variables).forEach(([name, variable]) => {\n url = url.replace(`{${name}}`, variable.default);\n });\n return url.replace(/\\/$/g, '');\n};\n","import type { Client } from '../common/interfaces/client';\nimport { getServiceVersion } from '../common/parser/service';\nimport type { OpenApi } from './interfaces/OpenApi';\nimport { getModels } from './parser/getModels';\nimport { getOperations } from './parser/getOperations';\nimport { getServer } from './parser/getServer';\n\n/**\n * Parse the OpenAPI specification to a Client model that contains\n * all the models, operations and schema's we should output.\n * @param openApi The OpenAPI spec that we have loaded from disk.\n */\nexport const parse = (openApi: OpenApi): Omit<Client, 'config'> => {\n const version = getServiceVersion(openApi.info.version);\n const server = getServer(openApi);\n const { models, types } = getModels(openApi);\n const operations = getOperations({ openApi, types });\n\n return {\n models,\n operations,\n server,\n types,\n version,\n };\n};\n","import { IRContext } from '../ir/context';\nimport type { IR } from '../ir/types';\nimport type { Config } from '../types/config';\nimport { parseV2_0_X } from './2.0.x';\nimport { parseV3_0_X } from './3.0.x';\nimport { parseV3_1_X } from './3.1.x';\nimport type { Client } from './common/interfaces/client';\nimport type { OpenApi as LegacyOpenApi } from './common/interfaces/OpenApi';\nimport type { OpenApi } from './types';\nimport { parse as parseV2 } from './v2';\nimport { parse as parseV3 } from './v3';\n\nexport type {\n Client,\n Enum,\n Method,\n Model,\n ModelMeta,\n Operation,\n OperationParameter,\n OperationResponse,\n} from './common/interfaces/client';\nexport type { OpenApi } from './common/interfaces/OpenApi';\nexport { isOperationParameterRequired } from './common/parser/operation';\nexport {\n ensureValidTypeScriptJavaScriptIdentifier,\n sanitizeNamespaceIdentifier,\n sanitizeOperationParameterName,\n} from './common/parser/sanitize';\nexport { getType } from './common/parser/type';\nexport type { OpenApiSchema as OpenApiV2Schema } from './v2/interfaces/OpenApiSchema';\nexport type { OpenApiSchema as OpenApiV3Schema } from './v3/interfaces/OpenApiSchema';\n\n/**\n * Parse the OpenAPI specification to a Client model that contains\n * all the models, services and schema's we should output.\n * @param openApi The OpenAPI spec that we have loaded from disk.\n */\nexport function parseLegacy({\n openApi,\n}: {\n openApi: unknown;\n}): Omit<Client, 'config'> {\n const spec = openApi as LegacyOpenApi;\n\n if ('openapi' in spec) {\n return parseV3(spec);\n }\n\n if ('swagger' in spec) {\n return parseV2(spec);\n }\n\n throw new Error(\n `Unsupported OpenAPI specification: ${JSON.stringify(spec, null, 2)}`,\n );\n}\n\n/**\n * @internal\n * Parse the resolved OpenAPI specification. This will populate and return\n * `context` with intermediate representation obtained from the parsed spec.\n */\nexport const parseOpenApiSpec = ({\n config,\n spec,\n}: {\n config: Config;\n spec: unknown;\n}): IR.Context | undefined => {\n const context = new IRContext({\n config,\n spec: spec as OpenApi.V2_0_X | OpenApi.V3_0_X | OpenApi.V3_1_X,\n });\n\n if ('swagger' in context.spec) {\n parseV2_0_X(context as IR.Context<OpenApi.V2_0_X>);\n return context;\n }\n\n switch (context.spec.openapi) {\n case '3.0.0':\n case '3.0.1':\n case '3.0.2':\n case '3.0.3':\n case '3.0.4':\n parseV3_0_X(context as IR.Context<OpenApi.V3_0_X>);\n return context;\n case '3.1.0':\n case '3.1.1':\n parseV3_1_X(context as IR.Context<OpenApi.V3_1_X>);\n return context;\n default:\n break;\n }\n\n throw new Error('Unsupported OpenAPI specification');\n};\n","import { definePluginConfig } from '../../shared/utils/config';\nimport { clientDefaultConfig, clientDefaultMeta } from '../client-core/config';\nimport { clientPluginHandler } from '../client-core/plugin';\nimport type { HeyApiClientAxiosPlugin } from './types';\n\nexport const defaultConfig: HeyApiClientAxiosPlugin['Config'] = {\n ...clientDefaultMeta,\n config: {\n ...clientDefaultConfig,\n throwOnError: false,\n },\n handler: clientPluginHandler as HeyApiClientAxiosPlugin['Handler'],\n name: '@hey-api/client-axios',\n};\n\n/**\n * Type helper for `@hey-api/client-axios` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig = definePluginConfig(defaultConfig);\n","import { definePluginConfig } from '../../shared/utils/config';\nimport { clientDefaultConfig, clientDefaultMeta } from '../client-core/config';\nimport { clientPluginHandler } from '../client-core/plugin';\nimport type { HeyApiClientFetchPlugin } from './types';\n\nexport const defaultConfig: HeyApiClientFetchPlugin['Config'] = {\n ...clientDefaultMeta,\n config: {\n ...clientDefaultConfig,\n throwOnError: false,\n },\n handler: clientPluginHandler as HeyApiClientFetchPlugin['Handler'],\n name: '@hey-api/client-fetch',\n};\n\n/**\n * Type helper for `@hey-api/client-fetch` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig = definePluginConfig(defaultConfig);\n","import { definePluginConfig } from '../../shared/utils/config';\nimport { clientDefaultConfig, clientDefaultMeta } from '../client-core/config';\nimport { clientPluginHandler } from '../client-core/plugin';\nimport type { HeyApiClientNextPlugin } from './types';\n\nexport const defaultConfig: HeyApiClientNextPlugin['Config'] = {\n ...clientDefaultMeta,\n config: {\n ...clientDefaultConfig,\n throwOnError: false,\n },\n handler: clientPluginHandler as HeyApiClientNextPlugin['Handler'],\n name: '@hey-api/client-next',\n};\n\n/**\n * Type helper for `@hey-api/client-next` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig = definePluginConfig(defaultConfig);\n","import { definePluginConfig } from '../../shared/utils/config';\nimport { clientDefaultConfig, clientDefaultMeta } from '../client-core/config';\nimport { clientPluginHandler } from '../client-core/plugin';\nimport type { HeyApiClientNuxtPlugin } from './types';\n\nexport const defaultConfig: HeyApiClientNuxtPlugin['Config'] = {\n ...clientDefaultMeta,\n config: clientDefaultConfig,\n handler: clientPluginHandler as HeyApiClientNuxtPlugin['Handler'],\n name: '@hey-api/client-nuxt',\n};\n\n/**\n * Type helper for `@hey-api/client-nuxt` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig = definePluginConfig(defaultConfig);\n","import { definePluginConfig } from '../../shared/utils/config';\nimport type { HeyApiClientLegacyAngularPlugin } from './types';\n\nexport const defaultConfig: HeyApiClientLegacyAngularPlugin['Config'] = {\n config: {},\n handler: () => {},\n name: 'legacy/angular',\n output: 'client',\n tags: ['client'],\n};\n\n/**\n * Type helper for `legacy/angular` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig = definePluginConfig(defaultConfig);\n","import { definePluginConfig } from '../../shared/utils/config';\nimport type { HeyApiClientLegacyAxiosPlugin } from './types';\n\nexport const defaultConfig: HeyApiClientLegacyAxiosPlugin['Config'] = {\n config: {},\n handler: () => {},\n name: 'legacy/axios',\n output: 'client',\n tags: ['client'],\n};\n\n/**\n * Type helper for `legacy/axios` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig = definePluginConfig(defaultConfig);\n","import { definePluginConfig } from '../../shared/utils/config';\nimport type { HeyApiClientLegacyFetchPlugin } from './types';\n\nexport const defaultConfig: HeyApiClientLegacyFetchPlugin['Config'] = {\n config: {},\n handler: () => {},\n name: 'legacy/fetch',\n output: 'client',\n tags: ['client'],\n};\n\n/**\n * Type helper for `legacy/fetch` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig = definePluginConfig(defaultConfig);\n","import { definePluginConfig } from '../../shared/utils/config';\nimport type { HeyApiClientLegacyNodePlugin } from './types';\n\nexport const defaultConfig: HeyApiClientLegacyNodePlugin['Config'] = {\n config: {},\n handler: () => {},\n name: 'legacy/node',\n output: 'client',\n tags: ['client'],\n};\n\n/**\n * Type helper for `legacy/node` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig = definePluginConfig(defaultConfig);\n","import { definePluginConfig } from '../../shared/utils/config';\nimport type { HeyApiClientLegacyXhrPlugin } from './types';\n\nexport const defaultConfig: HeyApiClientLegacyXhrPlugin['Config'] = {\n config: {},\n handler: () => {},\n name: 'legacy/xhr',\n output: 'client',\n tags: ['client'],\n};\n\n/**\n * Type helper for `legacy/xhr` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig = definePluginConfig(defaultConfig);\n","import { compiler } from '../../../compiler';\nimport type { IR } from '../../../ir/types';\nimport type { OpenApiV2_0_XTypes } from '../../../openApi/2.0.x';\nimport type { OpenApiV3_0_XTypes } from '../../../openApi/3.0.x';\nimport type { OpenApiV3_1_XTypes } from '../../../openApi/3.1.x';\nimport { ensureValidIdentifier } from '../../../openApi/shared/utils/identifier';\nimport type { OpenApi } from '../../../openApi/types';\nimport type { HeyApiSchemasPlugin } from './types';\n\nconst schemasId = 'schemas';\n\nconst stripSchema = ({\n plugin,\n schema,\n}: {\n plugin: HeyApiSchemasPlugin['Instance'];\n schema:\n | OpenApiV2_0_XTypes['SchemaObject']\n | OpenApiV3_0_XTypes['SchemaObject']\n | OpenApiV3_1_XTypes['SchemaObject'];\n}) => {\n if (plugin.config.type === 'form') {\n if (schema.description) {\n delete schema.description;\n }\n\n if (schema['x-enum-descriptions']) {\n delete schema['x-enum-descriptions'];\n }\n\n if (schema['x-enum-varnames']) {\n delete schema['x-enum-varnames'];\n }\n\n if (schema['x-enumNames']) {\n delete schema['x-enumNames'];\n }\n\n if (schema.title) {\n delete schema.title;\n }\n }\n};\n\nconst schemaToJsonSchemaDraft_04 = ({\n context,\n plugin,\n schema: _schema,\n}: {\n context: IR.Context;\n plugin: HeyApiSchemasPlugin['Instance'];\n schema: OpenApiV2_0_XTypes['SchemaObject'];\n}): OpenApiV2_0_XTypes['SchemaObject'] => {\n if (Array.isArray(_schema)) {\n return _schema.map((item) =>\n schemaToJsonSchemaDraft_04({\n context,\n plugin,\n schema: item,\n }),\n ) as unknown as OpenApiV2_0_XTypes['SchemaObject'];\n }\n\n const schema = structuredClone(_schema);\n\n if (schema.$ref) {\n // refs using unicode characters become encoded, didn't investigate why\n // but the suspicion is this comes from `@hey-api/json-schema-ref-parser`\n schema.$ref = decodeURI(schema.$ref);\n return schema;\n }\n\n stripSchema({ plugin, schema });\n\n if (\n schema.additionalProperties &&\n typeof schema.additionalProperties !== 'boolean'\n ) {\n schema.additionalProperties = schemaToJsonSchemaDraft_04({\n context,\n plugin,\n schema: schema.additionalProperties,\n });\n }\n\n if (schema.allOf) {\n schema.allOf = schema.allOf.map((item) =>\n schemaToJsonSchemaDraft_04({\n context,\n plugin,\n schema: item,\n }),\n );\n }\n\n if (schema.items) {\n schema.items = schemaToJsonSchemaDraft_04({\n context,\n plugin,\n schema: schema.items as OpenApiV2_0_XTypes['SchemaObject'],\n });\n }\n\n if (schema.properties) {\n for (const name in schema.properties) {\n const property = schema.properties[name]!;\n\n if (typeof property !== 'boolean') {\n schema.properties[name] = schemaToJsonSchemaDraft_04({\n context,\n plugin,\n schema: property,\n });\n }\n }\n }\n\n return schema;\n};\n\nconst schemaToJsonSchemaDraft_05 = ({\n context,\n plugin,\n schema: _schema,\n}: {\n context: IR.Context;\n plugin: HeyApiSchemasPlugin['Instance'];\n schema:\n | OpenApiV3_0_XTypes['SchemaObject']\n | OpenApiV3_0_XTypes['ReferenceObject'];\n}):\n | OpenApiV3_0_XTypes['SchemaObject']\n | OpenApiV3_0_XTypes['ReferenceObject'] => {\n if (Array.isArray(_schema)) {\n return _schema.map((item) =>\n schemaToJsonSchemaDraft_05({\n context,\n plugin,\n schema: item,\n }),\n ) as\n | OpenApiV3_0_XTypes['SchemaObject']\n | OpenApiV3_0_XTypes['ReferenceObject'];\n }\n\n const schema = structuredClone(_schema);\n\n if ('$ref' in schema) {\n // refs using unicode characters become encoded, didn't investigate why\n // but the suspicion is this comes from `@hey-api/json-schema-ref-parser`\n schema.$ref = decodeURI(schema.$ref);\n return schema;\n }\n\n stripSchema({ plugin, schema });\n\n if (\n schema.additionalProperties &&\n typeof schema.additionalProperties !== 'boolean'\n ) {\n schema.additionalProperties = schemaToJsonSchemaDraft_05({\n context,\n plugin,\n schema: schema.additionalProperties,\n });\n }\n\n if (schema.allOf) {\n schema.allOf = schema.allOf.map((item) =>\n schemaToJsonSchemaDraft_05({\n context,\n plugin,\n schema: item,\n }),\n );\n }\n\n if (schema.anyOf) {\n schema.anyOf = schema.anyOf.map((item) =>\n schemaToJsonSchemaDraft_05({\n context,\n plugin,\n schema: item,\n }),\n );\n }\n\n if (schema.items) {\n schema.items = schemaToJsonSchemaDraft_05({\n context,\n plugin,\n schema: schema.items,\n });\n }\n\n if (schema.oneOf) {\n schema.oneOf = schema.oneOf.map((item) =>\n schemaToJsonSchemaDraft_05({\n context,\n plugin,\n schema: item,\n }),\n );\n }\n\n if (schema.properties) {\n for (const name in schema.properties) {\n const property = schema.properties[name]!;\n\n if (typeof property !== 'boolean') {\n schema.properties[name] = schemaToJsonSchemaDraft_05({\n context,\n plugin,\n schema: property,\n });\n }\n }\n }\n\n return schema;\n};\n\nconst schemaToJsonSchema2020_12 = ({\n context,\n plugin,\n schema: _schema,\n}: {\n context: IR.Context;\n plugin: HeyApiSchemasPlugin['Instance'];\n schema: OpenApiV3_1_XTypes['SchemaObject'];\n}): OpenApiV3_1_XTypes['SchemaObject'] => {\n if (Array.isArray(_schema)) {\n return _schema.map((item) =>\n schemaToJsonSchema2020_12({\n context,\n plugin,\n schema: item,\n }),\n ) as OpenApiV3_1_XTypes['SchemaObject'];\n }\n\n const schema = structuredClone(_schema);\n\n stripSchema({ plugin, schema });\n\n if (schema.$ref) {\n // refs using unicode characters become encoded, didn't investigate why\n // but the suspicion is this comes from `@hey-api/json-schema-ref-parser`\n schema.$ref = decodeURI(schema.$ref);\n }\n\n if (\n schema.additionalProperties &&\n typeof schema.additionalProperties !== 'boolean'\n ) {\n schema.additionalProperties = schemaToJsonSchema2020_12({\n context,\n plugin,\n schema: schema.additionalProperties,\n });\n }\n\n if (schema.allOf) {\n schema.allOf = schema.allOf.map((item) =>\n schemaToJsonSchema2020_12({\n context,\n plugin,\n schema: item,\n }),\n );\n }\n\n if (schema.anyOf) {\n schema.anyOf = schema.anyOf.map((item) =>\n schemaToJsonSchema2020_12({\n context,\n plugin,\n schema: item,\n }),\n );\n }\n\n if (schema.items) {\n schema.items = schemaToJsonSchema2020_12({\n context,\n plugin,\n schema: schema.items,\n });\n }\n\n if (schema.oneOf) {\n schema.oneOf = schema.oneOf.map((item) =>\n schemaToJsonSchema2020_12({\n context,\n plugin,\n schema: item,\n }),\n );\n }\n\n if (schema.prefixItems) {\n schema.prefixItems = schema.prefixItems.map((item) =>\n schemaToJsonSchema2020_12({\n context,\n plugin,\n schema: item,\n }),\n );\n }\n\n if (schema.properties) {\n for (const name in schema.properties) {\n const property = schema.properties[name]!;\n\n if (typeof property !== 'boolean') {\n schema.properties[name] = schemaToJsonSchema2020_12({\n context,\n plugin,\n schema: property,\n });\n }\n }\n }\n\n return schema;\n};\n\nconst schemaName = ({\n name,\n plugin,\n schema,\n}: {\n name: string;\n plugin: HeyApiSchemasPlugin['Instance'];\n schema:\n | OpenApiV2_0_XTypes['SchemaObject']\n | OpenApiV3_0_XTypes['ReferenceObject']\n | OpenApiV3_0_XTypes['SchemaObject']\n | OpenApiV3_1_XTypes['SchemaObject'];\n}): string => {\n let customName = '';\n\n if (plugin.config.nameBuilder) {\n if (typeof plugin.config.nameBuilder === 'function') {\n customName = plugin.config.nameBuilder(name, schema);\n } else {\n customName = plugin.config.nameBuilder.replace('{{name}}', name);\n }\n }\n\n if (!customName) {\n customName = `${name}Schema`;\n }\n\n return ensureValidIdentifier(customName);\n};\n\nconst schemasV2_0_X = ({\n context,\n plugin,\n}: {\n context: IR.Context<OpenApi.V2_0_X>;\n plugin: HeyApiSchemasPlugin['Instance'];\n}) => {\n if (!context.spec.definitions) {\n return;\n }\n\n for (const name in context.spec.definitions) {\n const schema = context.spec.definitions[name]!;\n const obj = schemaToJsonSchemaDraft_04({\n context,\n plugin,\n schema,\n });\n const statement = compiler.constVariable({\n assertion: 'const',\n exportConst: true,\n expression: compiler.objectExpression({ obj }),\n name: schemaName({ name, plugin, schema }),\n });\n context.file({ id: schemasId })!.add(statement);\n }\n};\n\nconst schemasV3_0_X = ({\n context,\n plugin,\n}: {\n context: IR.Context<OpenApi.V3_0_X>;\n plugin: HeyApiSchemasPlugin['Instance'];\n}) => {\n if (!context.spec.components) {\n return;\n }\n\n for (const name in context.spec.components.schemas) {\n const schema = context.spec.components.schemas[name]!;\n const obj = schemaToJsonSchemaDraft_05({\n context,\n plugin,\n schema,\n });\n const statement = compiler.constVariable({\n assertion: 'const',\n exportConst: true,\n expression: compiler.objectExpression({ obj }),\n name: schemaName({ name, plugin, schema }),\n });\n context.file({ id: schemasId })!.add(statement);\n }\n};\n\nconst schemasV3_1_X = ({\n context,\n plugin,\n}: {\n context: IR.Context<OpenApi.V3_1_X>;\n plugin: HeyApiSchemasPlugin['Instance'];\n}) => {\n if (!context.spec.components) {\n return;\n }\n\n for (const name in context.spec.components.schemas) {\n const schema = context.spec.components.schemas[name]!;\n const obj = schemaToJsonSchema2020_12({\n context,\n plugin,\n schema,\n });\n const statement = compiler.constVariable({\n assertion: 'const',\n exportConst: true,\n expression: compiler.objectExpression({ obj }),\n name: schemaName({ name, plugin, schema }),\n });\n context.file({ id: schemasId })!.add(statement);\n }\n};\n\nexport const handler: HeyApiSchemasPlugin['Handler'] = ({ plugin }) => {\n plugin.createFile({\n id: schemasId,\n path: plugin.output,\n });\n\n if ('swagger' in plugin.context.spec) {\n schemasV2_0_X({\n context: plugin.context as IR.Context<OpenApi.V2_0_X>,\n plugin,\n });\n return;\n }\n\n switch (plugin.context.spec.openapi) {\n case '3.0.0':\n case '3.0.1':\n case '3.0.2':\n case '3.0.3':\n case '3.0.4':\n schemasV3_0_X({\n context: plugin.context as IR.Context<OpenApi.V3_0_X>,\n plugin,\n });\n break;\n case '3.1.0':\n case '3.1.1':\n schemasV3_1_X({\n context: plugin.context as IR.Context<OpenApi.V3_1_X>,\n plugin,\n });\n break;\n default:\n throw new Error('Unsupported OpenAPI specification');\n }\n};\n","import { compiler } from '../../../compiler';\nimport { TypeScriptFile } from '../../../generate/files';\nimport type { OpenApiV2Schema, OpenApiV3Schema } from '../../../openApi';\nimport { ensureValidTypeScriptJavaScriptIdentifier } from '../../../openApi';\nimport { getConfig } from '../../../utils/config';\nimport type { HeyApiSchemasPlugin } from './types';\n\nconst ensureValidSchemaOutput = (\n schema: unknown,\n parentKey?: string,\n): object => {\n const config = getConfig();\n\n if (Array.isArray(schema)) {\n return schema.map((item) => ensureValidSchemaOutput(item));\n }\n\n if (typeof schema !== 'object' || schema === null) {\n return schema as object;\n }\n\n const result = { ...schema };\n Object.entries(result).forEach(([key, value]) => {\n if (config.plugins['@hey-api/schemas']?.config.type === 'form') {\n if (\n [\n 'description',\n 'x-enum-descriptions',\n 'x-enum-varnames',\n 'x-enumNames',\n 'title',\n ].includes(key) &&\n parentKey !== 'properties'\n ) {\n // @ts-expect-error\n delete result[key];\n return;\n }\n }\n\n // refs are encoded probably by json-schema-ref-parser, didn't investigate\n // further\n if (key === '$ref' && typeof value === 'string') {\n // @ts-expect-error\n result[key] = decodeURIComponent(value);\n }\n\n if (value && typeof value === 'object') {\n // @ts-expect-error\n result[key] = ensureValidSchemaOutput(value, key);\n }\n });\n return result;\n};\n\nconst toSchemaName = (\n name: string,\n schema: OpenApiV2Schema | OpenApiV3Schema,\n): string => {\n const config = getConfig();\n\n const validName = ensureValidTypeScriptJavaScriptIdentifier(name);\n\n const plugin = config.plugins['@hey-api/schemas'];\n\n if (plugin?.config.nameBuilder) {\n if (typeof plugin.config.nameBuilder === 'function') {\n return plugin.config.nameBuilder(validName, schema);\n } else {\n return plugin.config.nameBuilder.replace('{{name}}', validName);\n }\n }\n\n return `${validName}Schema`;\n};\n\nexport const handlerLegacy: HeyApiSchemasPlugin['LegacyHandler'] = ({\n files,\n openApi,\n plugin,\n}) => {\n const config = getConfig();\n\n files.schemas = new TypeScriptFile({\n dir: config.output.path,\n exportFromIndex: plugin.config.exportFromIndex,\n id: 'schemas',\n name: 'schemas.ts',\n });\n\n const addSchema = (\n name: string,\n schema: OpenApiV2Schema | OpenApiV3Schema,\n ) => {\n const obj = ensureValidSchemaOutput(schema);\n const expression = compiler.objectExpression({ obj });\n const statement = compiler.constVariable({\n assertion: 'const',\n exportConst: true,\n expression,\n name: toSchemaName(name, schema),\n });\n files.schemas!.add(statement);\n };\n\n // OpenAPI 2.0\n if ('swagger' in openApi) {\n Object.entries(openApi.definitions ?? {}).forEach(([name, definition]) => {\n addSchema(name, definition);\n });\n }\n\n // OpenAPI 3.x\n if ('openapi' in openApi) {\n Object.entries(openApi.components?.schemas ?? {}).forEach(\n ([name, schema]) => {\n addSchema(name, schema);\n },\n );\n }\n};\n","import { definePluginConfig } from '../../shared/utils/config';\nimport { handler } from './plugin';\nimport { handlerLegacy } from './plugin-legacy';\nimport type { HeyApiSchemasPlugin } from './types';\n\nexport const defaultConfig: HeyApiSchemasPlugin['Config'] = {\n config: {\n exportFromIndex: false,\n nameBuilder: (name) => `${name}Schema`,\n type: 'json',\n },\n handler,\n handlerLegacy,\n name: '@hey-api/schemas',\n output: 'schemas',\n};\n\n/**\n * Type helper for `@hey-api/schemas` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig = definePluginConfig(defaultConfig);\n","import type { Comments } from '../../../compiler';\nimport { hasOperationDataRequired } from '../../../ir/operation';\nimport type { IR } from '../../../ir/types';\nimport { escapeComment } from '../../../utils/escape';\nimport { getClientPlugin } from '../../@hey-api/client-core/utils';\n\nexport const createOperationComment = ({\n operation,\n}: {\n operation: IR.OperationObject;\n}): Comments | undefined => {\n const comments: Array<string> = [];\n\n if (operation.summary) {\n comments.push(escapeComment(operation.summary));\n }\n\n if (operation.description) {\n comments.push(escapeComment(operation.description));\n }\n\n if (operation.deprecated) {\n comments.push('@deprecated');\n }\n\n return comments.length ? comments : undefined;\n};\n\nexport const isOperationOptionsRequired = ({\n context,\n operation,\n}: {\n context: IR.Context;\n operation: IR.OperationObject;\n}): boolean => {\n const client = getClientPlugin(context.config);\n const isNuxtClient = client.name === '@hey-api/client-nuxt';\n const plugin = context.config.plugins['@hey-api/sdk'];\n return (\n (plugin && !plugin.config.client && !plugin.config.instance) ||\n isNuxtClient ||\n hasOperationDataRequired(operation)\n );\n};\n","export const nuxtTypeComposable = 'TComposable';\nexport const nuxtTypeDefault = 'DefaultT';\nexport const nuxtTypeResponse = 'ResT';\n\nexport const sdkId = 'sdk';\n","import ts from 'typescript';\n\nimport { compiler } from '../../../compiler';\nimport {\n createOperationKey,\n operationResponsesMap,\n} from '../../../ir/operation';\nimport type { IR } from '../../../ir/types';\nimport { irRef } from '../../../utils/ref';\nimport { stringCase } from '../../../utils/stringCase';\nimport { operationIrRef } from '../../shared/utils/ref';\nimport { typesId } from '../typescript/ref';\nimport { bigIntExpressions, dateExpressions } from './expressions';\nimport type { HeyApiTransformersPlugin } from './types';\n\ninterface OperationIRRef {\n /**\n * Operation ID\n */\n id: string;\n}\n\nexport const operationTransformerIrRef = ({\n id,\n type,\n}: OperationIRRef & {\n type: 'data' | 'error' | 'response';\n}): string => {\n let affix = '';\n switch (type) {\n case 'data':\n affix = 'DataResponseTransformer';\n break;\n case 'error':\n affix = 'ErrorResponseTransformer';\n break;\n case 'response':\n affix = 'ResponseTransformer';\n break;\n }\n return `${irRef}${stringCase({\n // TODO: parser - do not pascalcase for functions, only for types\n case: 'camelCase',\n value: id,\n })}${affix}`;\n};\n\nconst schemaIrRef = ({\n $ref,\n type,\n}: {\n $ref: string;\n type: 'response';\n}): string => {\n let affix = '';\n switch (type) {\n case 'response':\n affix = 'SchemaResponseTransformer';\n break;\n }\n const parts = $ref.split('/');\n return `${parts.slice(0, parts.length - 1).join('/')}/${stringCase({\n case: 'camelCase',\n value: parts[parts.length - 1]!,\n })}${affix}`;\n};\n\nexport const schemaResponseTransformerRef = ({\n $ref,\n}: {\n $ref: string;\n}): string => schemaIrRef({ $ref, type: 'response' });\n\nexport const transformersId = 'transformers';\nconst dataVariableName = 'data';\n\nconst ensureStatements = (\n nodes: Array<ts.Expression | ts.Statement>,\n): Array<ts.Statement> =>\n nodes.map((node) =>\n ts.isStatement(node)\n ? node\n : compiler.expressionToStatement({ expression: node }),\n );\n\nconst isNodeReturnStatement = ({\n node,\n}: {\n node: ts.Expression | ts.Statement;\n}) => node.kind === ts.SyntaxKind.ReturnStatement;\n\nconst schemaResponseTransformerNodes = ({\n plugin,\n schema,\n}: {\n plugin: HeyApiTransformersPlugin['Instance'];\n schema: IR.SchemaObject;\n}): Array<ts.Expression | ts.Statement> => {\n const identifierData = compiler.identifier({ text: dataVariableName });\n const nodes = processSchemaType({\n dataExpression: identifierData,\n plugin,\n schema,\n });\n // append return statement if one does not already exist\n if (\n nodes.length &&\n !isNodeReturnStatement({ node: nodes[nodes.length - 1]! })\n ) {\n nodes.push(compiler.returnStatement({ expression: identifierData }));\n }\n return nodes;\n};\n\nconst processSchemaType = ({\n dataExpression,\n plugin,\n schema,\n}: {\n dataExpression?: ts.Expression | string;\n plugin: HeyApiTransformersPlugin['Instance'];\n schema: IR.SchemaObject;\n}): Array<ts.Expression | ts.Statement> => {\n const file = plugin.context.file({ id: transformersId })!;\n\n if (schema.$ref) {\n let identifier = file.identifier({\n $ref: schemaResponseTransformerRef({ $ref: schema.$ref }),\n create: true,\n namespace: 'value',\n });\n\n if (identifier.created && identifier.name) {\n // create each schema response transformer only once\n const refSchema = plugin.context.resolveIrRef<IR.SchemaObject>(\n schema.$ref,\n );\n const nodes = schemaResponseTransformerNodes({\n plugin,\n schema: refSchema,\n });\n if (nodes.length) {\n const node = compiler.constVariable({\n expression: compiler.arrowFunction({\n async: false,\n multiLine: true,\n parameters: [\n {\n name: dataVariableName,\n // TODO: parser - add types, generate types without transforms\n type: compiler.keywordTypeNode({ keyword: 'any' }),\n },\n ],\n statements: ensureStatements(nodes),\n }),\n name: identifier.name,\n });\n file.add(node);\n } else {\n // the created schema response transformer was empty, do not generate\n // it and prevent any future attempts\n identifier = file.blockIdentifier({\n $ref: schemaResponseTransformerRef({ $ref: schema.$ref }),\n namespace: 'value',\n });\n }\n }\n\n if (identifier.name) {\n const callExpression = compiler.callExpression({\n functionName: identifier.name,\n parameters: [dataExpression],\n });\n\n if (dataExpression) {\n // In a map callback, the item needs to be returned, not just the transformation result\n if (typeof dataExpression === 'string' && dataExpression === 'item') {\n return [\n compiler.returnStatement({\n expression: callExpression,\n }),\n ];\n }\n\n return [\n typeof dataExpression === 'string'\n ? callExpression\n : compiler.assignment({\n left: dataExpression,\n right: callExpression,\n }),\n ];\n }\n }\n\n return [];\n }\n\n if (schema.type === 'array') {\n if (!dataExpression || typeof dataExpression === 'string') {\n return [];\n }\n\n // TODO: parser - handle tuples and complex arrays\n const nodes = !schema.items\n ? []\n : processSchemaType({\n dataExpression: 'item',\n plugin,\n schema: schema.items?.[0]\n ? schema.items[0]\n : {\n ...schema,\n type: undefined,\n },\n });\n\n if (!nodes.length) {\n return [];\n }\n\n // Ensure the map callback has a return statement for the item\n const mapCallbackStatements = ensureStatements(nodes);\n const hasReturnStatement = mapCallbackStatements.some((stmt) =>\n isNodeReturnStatement({ node: stmt }),\n );\n\n if (!hasReturnStatement) {\n mapCallbackStatements.push(\n compiler.returnStatement({\n expression: compiler.identifier({ text: 'item' }),\n }),\n );\n }\n\n return [\n compiler.assignment({\n left: dataExpression,\n right: compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: dataExpression,\n name: 'map',\n }),\n parameters: [\n compiler.arrowFunction({\n multiLine: true,\n parameters: [\n {\n name: 'item',\n type: 'any',\n },\n ],\n statements: mapCallbackStatements,\n }),\n ],\n }),\n }),\n ];\n }\n\n if (schema.type === 'object') {\n let nodes: Array<ts.Expression | ts.Statement> = [];\n const required = schema.required ?? [];\n\n for (const name in schema.properties) {\n const property = schema.properties[name]!;\n const propertyAccessExpression = compiler.propertyAccessExpression({\n expression: dataExpression || dataVariableName,\n name,\n });\n const propertyNodes = processSchemaType({\n dataExpression: propertyAccessExpression,\n plugin,\n schema: property,\n });\n if (!propertyNodes.length) {\n continue;\n }\n const noNullableTypesInSchema = !property.items?.find(\n (x) => x.type === 'null',\n );\n const requiredField = required.includes(name);\n // Cannot fully rely on required fields\n // Such value has to be present, but it doesn't guarantee that this value is not nullish\n if (requiredField && noNullableTypesInSchema) {\n nodes = nodes.concat(propertyNodes);\n } else {\n nodes.push(\n // todo: Probably, it would make more sense to go with if(x !== undefined && x !== null) instead of if(x)\n // this place influences all underlying transformers, while it's not exactly transformer itself\n // Keep in mind that !!0 === false, so it already makes output for Bigint undesirable\n compiler.ifStatement({\n expression: propertyAccessExpression,\n thenStatement: compiler.block({\n statements: ensureStatements(propertyNodes),\n }),\n }),\n );\n }\n }\n\n return nodes;\n }\n\n if (schema.items) {\n if (schema.items.length === 1) {\n return processSchemaType({\n dataExpression: 'item',\n plugin,\n schema: schema.items[0]!,\n });\n }\n\n let arrayNodes: Array<ts.Expression | ts.Statement> = [];\n // process 2 items if one of them is null\n if (\n schema.logicalOperator === 'and' ||\n (schema.items.length === 2 &&\n schema.items.find(\n (item) => item.type === 'null' || item.type === 'void',\n ))\n ) {\n for (const item of schema.items) {\n const nodes = processSchemaType({\n dataExpression: dataExpression || 'item',\n plugin,\n schema: item,\n });\n if (nodes.length) {\n if (dataExpression) {\n arrayNodes = arrayNodes.concat(nodes);\n } else {\n const identifierItem = compiler.identifier({ text: 'item' });\n // processed means the item was transformed\n arrayNodes.push(\n compiler.ifStatement({\n expression: identifierItem,\n thenStatement: compiler.block({\n statements: ensureStatements(nodes),\n }),\n }),\n compiler.returnStatement({ expression: identifierItem }),\n );\n }\n }\n }\n return arrayNodes;\n }\n\n // assume enums do not contain transformable values\n if (schema.type !== 'enum') {\n if (\n !(schema.items ?? []).every((item) =>\n (\n ['boolean', 'integer', 'null', 'number', 'string'] as ReadonlyArray<\n typeof item.type\n >\n ).includes(item.type),\n )\n ) {\n console.warn(\n `❗️ Transformers warning: schema ${JSON.stringify(schema)} is too complex and won't be currently processed. This will likely produce an incomplete transformer which is not what you want. Please open an issue if you'd like this improved https://github.com/hey-api/openapi-ts/issues`,\n );\n }\n }\n }\n\n for (const transformer of plugin.config.transformers ?? []) {\n const t = transformer({\n config: plugin.config,\n dataExpression,\n file,\n schema,\n });\n if (t) {\n return t;\n }\n }\n\n return [];\n};\n\n// handles only response transformers for now\nexport const handler: HeyApiTransformersPlugin['Handler'] = ({ plugin }) => {\n const file = plugin.createFile({\n id: transformersId,\n path: plugin.output,\n });\n\n if (plugin.config.dates) {\n plugin.config.transformers = [\n ...(plugin.config.transformers ?? []),\n dateExpressions,\n ];\n }\n\n if (plugin.config.bigInt) {\n plugin.config.transformers = [\n ...(plugin.config.transformers ?? []),\n bigIntExpressions,\n ];\n }\n\n plugin.forEach('operation', ({ operation }) => {\n const { response } = operationResponsesMap(operation);\n\n if (!response) {\n return;\n }\n\n if (response.items && response.items.length > 1) {\n if (plugin.context.config.logs.level === 'debug') {\n console.warn(\n `❗️ Transformers warning: route ${createOperationKey(operation)} has ${response.items.length} non-void success responses. This is currently not handled and we will not generate a response transformer. Please open an issue if you'd like this feature https://github.com/hey-api/openapi-ts/issues`,\n );\n }\n return;\n }\n\n const identifierResponse = plugin.context\n .file({ id: typesId })!\n .identifier({\n $ref: operationIrRef({\n config: plugin.context.config,\n id: operation.id,\n type: 'response',\n }),\n namespace: 'type',\n });\n if (!identifierResponse.name) {\n return;\n }\n\n let identifierResponseTransformer = file.identifier({\n $ref: operationTransformerIrRef({ id: operation.id, type: 'response' }),\n create: true,\n namespace: 'value',\n });\n if (!identifierResponseTransformer.name) {\n return;\n }\n\n // TODO: parser - consider handling simple string response which is also a date\n const nodes = schemaResponseTransformerNodes({ plugin, schema: response });\n if (nodes.length) {\n file.import({\n asType: true,\n module: file.relativePathToFile({\n context: plugin.context,\n id: typesId,\n }),\n name: identifierResponse.name,\n });\n const responseTransformerNode = compiler.constVariable({\n exportConst: true,\n expression: compiler.arrowFunction({\n async: true,\n multiLine: true,\n parameters: [\n {\n name: dataVariableName,\n // TODO: parser - add types, generate types without transforms\n type: compiler.keywordTypeNode({ keyword: 'any' }),\n },\n ],\n returnType: compiler.typeReferenceNode({\n typeArguments: [\n compiler.typeReferenceNode({\n typeName: identifierResponse.name,\n }),\n ],\n typeName: 'Promise',\n }),\n statements: ensureStatements(nodes),\n }),\n name: identifierResponseTransformer.name,\n });\n file.add(responseTransformerNode);\n } else {\n // the created schema response transformer was empty, do not generate\n // it and prevent any future attempts\n identifierResponseTransformer = file.blockIdentifier({\n $ref: operationTransformerIrRef({\n id: operation.id,\n type: 'response',\n }),\n namespace: 'value',\n });\n }\n });\n};\n","import type ts from 'typescript';\n\nimport { compiler } from '../../../compiler';\nimport type { TypeScriptFile } from '../../../generate/files';\nimport type { IR } from '../../../ir/types';\nimport type { Config } from './types';\n\nexport type ExpressionTransformer = ({\n config,\n dataExpression,\n file,\n schema,\n}: {\n config: Omit<Config, 'name'>;\n dataExpression?: ts.Expression | string;\n file: TypeScriptFile;\n schema: IR.SchemaObject;\n}) => Array<ts.Expression> | undefined;\n\nexport const bigIntExpressions: ExpressionTransformer = ({\n dataExpression,\n schema,\n}) => {\n if (schema.type !== 'integer' || schema.format !== 'int64') {\n return;\n }\n\n const bigIntCallExpression =\n dataExpression !== undefined\n ? compiler.callExpression({\n functionName: 'BigInt',\n parameters: [\n compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: dataExpression,\n name: 'toString',\n }),\n }),\n ],\n })\n : undefined;\n\n if (bigIntCallExpression) {\n if (typeof dataExpression === 'string') {\n return [bigIntCallExpression];\n }\n\n if (dataExpression) {\n return [\n compiler.assignment({\n left: dataExpression,\n right: bigIntCallExpression,\n }),\n ];\n }\n }\n\n return;\n};\n\nexport const dateExpressions: ExpressionTransformer = ({\n dataExpression,\n schema,\n}) => {\n if (\n schema.type !== 'string' ||\n !(schema.format === 'date' || schema.format === 'date-time')\n ) {\n return;\n }\n\n const identifierDate = compiler.identifier({ text: 'Date' });\n\n if (typeof dataExpression === 'string') {\n return [\n compiler.newExpression({\n argumentsArray: [compiler.identifier({ text: dataExpression })],\n expression: identifierDate,\n }),\n ];\n }\n\n if (dataExpression) {\n return [\n compiler.assignment({\n left: dataExpression,\n right: compiler.newExpression({\n argumentsArray: [dataExpression],\n expression: identifierDate,\n }),\n }),\n ];\n }\n\n return;\n};\n","import type { IR } from '../../../ir/types';\nimport type { Auth } from '../client-core/bundle/auth';\nimport type { HeyApiSdkPlugin } from './types';\n\n// TODO: parser - handle more security types\nconst securitySchemeObjectToAuthObject = ({\n securitySchemeObject,\n}: {\n securitySchemeObject: IR.SecurityObject;\n}): Auth | undefined => {\n if (securitySchemeObject.type === 'openIdConnect') {\n return {\n scheme: 'bearer',\n type: 'http',\n };\n }\n\n if (securitySchemeObject.type === 'oauth2') {\n if (\n securitySchemeObject.flows.password ||\n securitySchemeObject.flows.authorizationCode ||\n securitySchemeObject.flows.clientCredentials ||\n securitySchemeObject.flows.implicit\n ) {\n return {\n scheme: 'bearer',\n type: 'http',\n };\n }\n\n return;\n }\n\n if (securitySchemeObject.type === 'apiKey') {\n if (securitySchemeObject.in === 'header') {\n return {\n name: securitySchemeObject.name,\n type: 'apiKey',\n };\n }\n\n if (\n securitySchemeObject.in === 'query' ||\n securitySchemeObject.in == 'cookie'\n ) {\n return {\n in: securitySchemeObject.in,\n name: securitySchemeObject.name,\n type: 'apiKey',\n };\n }\n\n return;\n }\n\n if (securitySchemeObject.type === 'http') {\n const scheme = securitySchemeObject.scheme.toLowerCase();\n if (scheme === 'bearer' || scheme === 'basic') {\n return {\n scheme: scheme as 'bearer' | 'basic',\n type: 'http',\n };\n }\n\n return;\n }\n\n return;\n};\n\nexport const operationAuth = ({\n operation,\n plugin,\n}: {\n context: IR.Context;\n operation: IR.OperationObject;\n plugin: HeyApiSdkPlugin['Instance'];\n}): Array<Auth> => {\n if (!operation.security || !plugin.config.auth) {\n return [];\n }\n\n const auth: Array<Auth> = [];\n\n for (const securitySchemeObject of operation.security) {\n const authObject = securitySchemeObjectToAuthObject({\n securitySchemeObject,\n });\n if (authObject) {\n auth.push(authObject);\n } else {\n console.warn(\n `❗️ SDK warning: unsupported security scheme. Please open an issue if you'd like it added https://github.com/hey-api/openapi-ts/issues\\n${JSON.stringify(securitySchemeObject, null, 2)}`,\n );\n }\n }\n\n return auth;\n};\n","import type { IR } from '../../../ir/types';\nimport { sdkId } from './constants';\nimport type { HeyApiSdkPlugin } from './types';\n\nexport const createRequestValidator = ({\n operation,\n plugin,\n}: {\n operation: IR.OperationObject;\n plugin: HeyApiSdkPlugin['Instance'];\n}) => {\n if (!plugin.config.validator.request) {\n return;\n }\n\n const pluginValidator = plugin.getPlugin(plugin.config.validator.request);\n if (!pluginValidator || !pluginValidator.api.createRequestValidator) {\n return;\n }\n\n return pluginValidator.api.createRequestValidator({\n file: plugin.context.file({ id: sdkId })!,\n operation,\n // @ts-expect-error\n plugin: pluginValidator,\n });\n};\n\nexport const createResponseValidator = ({\n operation,\n plugin,\n}: {\n operation: IR.OperationObject;\n plugin: HeyApiSdkPlugin['Instance'];\n}) => {\n if (!plugin.config.validator.response) {\n return;\n }\n\n const pluginValidator = plugin.getPlugin(plugin.config.validator.response);\n if (!pluginValidator || !pluginValidator.api.createResponseValidator) {\n return;\n }\n\n return pluginValidator.api.createResponseValidator({\n file: plugin.context.file({ id: sdkId })!,\n operation,\n // @ts-expect-error\n plugin: pluginValidator,\n });\n};\n","import type ts from 'typescript';\n\nimport { compiler } from '../../../compiler';\nimport type { ObjectValue } from '../../../compiler/types';\nimport { clientApi, clientModulePath } from '../../../generate/client';\nimport type { TypeScriptFile } from '../../../generate/files';\nimport { statusCodeToGroup } from '../../../ir/operation';\nimport type { IR } from '../../../ir/types';\nimport { sanitizeNamespaceIdentifier } from '../../../openApi';\nimport { reservedJavaScriptKeywordsRegExp } from '../../../utils/regexp';\nimport { stringCase } from '../../../utils/stringCase';\nimport { transformClassName } from '../../../utils/transform';\nimport { clientId, getClientPlugin } from '../client-core/utils';\nimport {\n operationTransformerIrRef,\n transformersId,\n} from '../transformers/plugin';\nimport { importIdentifier } from '../typescript/ref';\nimport { operationAuth } from './auth';\nimport { nuxtTypeComposable, nuxtTypeDefault, sdkId } from './constants';\nimport type { HeyApiSdkPlugin } from './types';\nimport { createRequestValidator, createResponseValidator } from './validator';\n\ninterface ClassNameEntry {\n /**\n * Name of the class where this function appears.\n */\n className: string;\n /**\n * Name of the function within the class.\n */\n methodName: string;\n /**\n * JSONPath-like array to class location.\n */\n path: ReadonlyArray<string>;\n}\n\nconst operationClassName = ({\n context,\n value,\n}: {\n context: IR.Context;\n value: string;\n}) => {\n const name = stringCase({\n case: 'PascalCase',\n value: sanitizeNamespaceIdentifier(value),\n });\n return transformClassName({\n config: context.config,\n name,\n });\n};\n\nconst getOperationMethodName = ({\n operation,\n plugin,\n}: {\n operation: IR.OperationObject;\n plugin: {\n config: Pick<\n HeyApiSdkPlugin['Instance']['config'],\n 'asClass' | 'methodNameBuilder'\n >;\n };\n}) => {\n if (plugin.config.methodNameBuilder) {\n return plugin.config.methodNameBuilder(operation);\n }\n\n const handleIllegal = !plugin.config.asClass;\n if (handleIllegal && operation.id.match(reservedJavaScriptKeywordsRegExp)) {\n return `${operation.id}_`;\n }\n\n return operation.id;\n};\n\n/**\n * Returns a list of classes where this operation appears in the generated SDK.\n */\nexport const operationClasses = ({\n context,\n operation,\n plugin,\n}: {\n context: IR.Context;\n operation: IR.OperationObject;\n plugin: {\n config: Pick<\n HeyApiSdkPlugin['Instance']['config'],\n 'asClass' | 'classStructure' | 'instance'\n >;\n };\n}): Map<string, ClassNameEntry> => {\n const classNames = new Map<string, ClassNameEntry>();\n\n let className: string | undefined;\n let methodName: string | undefined;\n let classCandidates: Array<string> = [];\n\n if (plugin.config.classStructure === 'auto' && operation.operationId) {\n classCandidates = operation.operationId.split(/[./]/).filter(Boolean);\n if (classCandidates.length > 1) {\n const methodCandidate = classCandidates.pop()!;\n methodName = stringCase({\n case: 'camelCase',\n value: sanitizeNamespaceIdentifier(methodCandidate),\n });\n className = classCandidates.pop()!;\n }\n }\n\n const rootClasses = plugin.config.instance\n ? [plugin.config.instance as string]\n : (operation.tags ?? ['default']);\n\n for (const rootClass of rootClasses) {\n const finalClassName = operationClassName({\n context,\n value: className || rootClass,\n });\n classNames.set(rootClass, {\n className: finalClassName,\n methodName: methodName || getOperationMethodName({ operation, plugin }),\n path: (className\n ? [rootClass, ...classCandidates, className]\n : [rootClass]\n ).map((value) =>\n operationClassName({\n context,\n value,\n }),\n ),\n });\n }\n\n return classNames;\n};\n\nexport const operationOptionsType = ({\n context,\n file,\n operation,\n throwOnError,\n}: {\n context: IR.Context;\n file: TypeScriptFile;\n operation: IR.OperationObject;\n throwOnError?: string;\n}) => {\n const client = getClientPlugin(context.config);\n const isNuxtClient = client.name === '@hey-api/client-nuxt';\n\n const identifierData = importIdentifier({\n context,\n file,\n operation,\n type: 'data',\n });\n const identifierResponse = importIdentifier({\n context,\n file,\n operation,\n type: isNuxtClient ? 'response' : 'responses',\n });\n\n const optionsName = clientApi.Options.name;\n\n if (isNuxtClient) {\n return `${optionsName}<${nuxtTypeComposable}, ${identifierData.name || 'unknown'}, ${identifierResponse.name || 'unknown'}, ${nuxtTypeDefault}>`;\n }\n\n // TODO: refactor this to be more generic, works for now\n if (throwOnError) {\n return `${optionsName}<${identifierData.name || 'unknown'}, ${throwOnError}>`;\n }\n return identifierData.name\n ? `${optionsName}<${identifierData.name}>`\n : optionsName;\n};\n\n/**\n * Infers `responseType` value from provided response content type. This is\n * an adapted version of `getParseAs()` from the Fetch API client.\n *\n * From Axios documentation:\n * `responseType` indicates the type of data that the server will respond with\n * options are: 'arraybuffer', 'document', 'json', 'text', 'stream'\n * browser only: 'blob'\n */\nconst getResponseType = (\n contentType: string | null | undefined,\n):\n | 'arraybuffer'\n | 'blob'\n | 'document'\n | 'json'\n | 'stream'\n | 'text'\n | undefined => {\n if (!contentType) {\n return;\n }\n\n const cleanContent = contentType.split(';')[0]?.trim();\n\n if (!cleanContent) {\n return;\n }\n\n if (\n cleanContent.startsWith('application/json') ||\n cleanContent.endsWith('+json')\n ) {\n return 'json';\n }\n\n // Axios does not handle form data out of the box\n // if (cleanContent === 'multipart/form-data') {\n // return 'formData';\n // }\n\n if (\n ['application/', 'audio/', 'image/', 'video/'].some((type) =>\n cleanContent.startsWith(type),\n )\n ) {\n return 'blob';\n }\n\n if (cleanContent.startsWith('text/')) {\n return 'text';\n }\n\n return;\n};\n\nexport const operationStatements = ({\n context,\n isRequiredOptions,\n operation,\n plugin,\n}: {\n context: IR.Context;\n isRequiredOptions: boolean;\n operation: IR.OperationObject;\n plugin: HeyApiSdkPlugin['Instance'];\n}): Array<ts.Statement> => {\n const file = context.file({ id: sdkId })!;\n const sdkOutput = file.nameWithoutExtension();\n\n const client = getClientPlugin(context.config);\n const isNuxtClient = client.name === '@hey-api/client-nuxt';\n\n const identifierError = importIdentifier({\n context,\n file,\n operation,\n type: isNuxtClient ? 'error' : 'errors',\n });\n const identifierResponse = importIdentifier({\n context,\n file,\n operation,\n type: isNuxtClient ? 'response' : 'responses',\n });\n\n // TODO: transform parameters\n // const query = {\n // BarBaz: options.query.bar_baz,\n // qux_quux: options.query.qux_quux,\n // fooBar: options.query.foo_bar,\n // };\n\n // if (operation.parameters) {\n // for (const name in operation.parameters.query) {\n // const parameter = operation.parameters.query[name]\n // if (parameter.name !== fieldName({ context, name: parameter.name })) {\n // console.warn(parameter.name)\n // }\n // }\n // }\n\n const requestOptions: ObjectValue[] = [];\n\n if (operation.body) {\n switch (operation.body.type) {\n case 'form-data':\n requestOptions.push({ spread: 'formDataBodySerializer' });\n file.import({\n module: clientModulePath({\n config: context.config,\n sourceOutput: sdkOutput,\n }),\n name: 'formDataBodySerializer',\n });\n break;\n case 'json':\n // jsonBodySerializer is the default, no need to specify\n break;\n case 'text':\n case 'octet-stream':\n // ensure we don't use any serializer by default\n requestOptions.push({\n key: 'bodySerializer',\n value: null,\n });\n break;\n case 'url-search-params':\n requestOptions.push({ spread: 'urlSearchParamsBodySerializer' });\n file.import({\n module: clientModulePath({\n config: context.config,\n sourceOutput: sdkOutput,\n }),\n name: 'urlSearchParamsBodySerializer',\n });\n break;\n }\n }\n\n // TODO: parser - set parseAs to skip inference if every response has the same\n // content type. currently impossible because successes do not contain\n // header information\n\n for (const name in operation.parameters?.query) {\n const parameter = operation.parameters.query[name]!;\n if (\n (parameter.schema.type === 'array' ||\n parameter.schema.type === 'tuple') &&\n (parameter.style !== 'form' || !parameter.explode)\n ) {\n // override the default settings for `querySerializer`\n requestOptions.push({\n key: 'querySerializer',\n value: [\n {\n key: 'array',\n value: [\n {\n key: 'explode',\n value: false,\n },\n {\n key: 'style',\n value: 'form',\n },\n ],\n },\n ],\n });\n break;\n }\n }\n\n const requestValidator = createRequestValidator({ operation, plugin });\n if (requestValidator) {\n requestOptions.push({\n key: 'requestValidator',\n value: requestValidator,\n });\n }\n\n if (plugin.config.transformer === '@hey-api/transformers') {\n const identifierTransformer = context\n .file({ id: transformersId })!\n .identifier({\n $ref: operationTransformerIrRef({ id: operation.id, type: 'response' }),\n namespace: 'value',\n });\n\n if (identifierTransformer.name) {\n file.import({\n module: file.relativePathToFile({\n context,\n id: transformersId,\n }),\n name: identifierTransformer.name,\n });\n\n requestOptions.push({\n key: 'responseTransformer',\n value: identifierTransformer.name,\n });\n }\n }\n\n if (client.name === '@hey-api/client-axios') {\n // try to infer `responseType` option for Axios. We don't need this in\n // Fetch API client because it automatically detects the correct response\n // during runtime.\n for (const statusCode in operation.responses) {\n // this doesn't handle default status code for now\n if (statusCodeToGroup({ statusCode }) === '2XX') {\n const response = operation.responses[statusCode];\n const responseType = getResponseType(response?.mediaType);\n if (responseType) {\n requestOptions.push({\n key: 'responseType',\n value: responseType,\n });\n break;\n }\n }\n }\n }\n\n const responseValidator = createResponseValidator({ operation, plugin });\n if (responseValidator) {\n requestOptions.push({\n key: 'responseValidator',\n value: responseValidator,\n });\n }\n\n if (plugin.config.responseStyle === 'data') {\n requestOptions.push({\n key: 'responseStyle',\n value: plugin.config.responseStyle,\n });\n }\n\n const auth = operationAuth({ context, operation, plugin });\n if (auth.length) {\n requestOptions.push({\n key: 'security',\n value: compiler.arrayLiteralExpression({ elements: auth }),\n });\n }\n\n requestOptions.push({\n key: 'url',\n value: operation.path,\n });\n\n // options must go last to allow overriding parameters above\n requestOptions.push({ spread: 'options' });\n\n if (operation.body) {\n const parameterContentType = operation.parameters?.header?.['content-type'];\n const hasRequiredContentType = Boolean(parameterContentType?.required);\n // spreading required Content-Type on generated header would throw a TypeScript error\n if (!hasRequiredContentType) {\n const spread = compiler.propertyAccessExpression({\n expression: compiler.identifier({ text: 'options' }),\n isOptional: !isRequiredOptions,\n name: 'headers',\n });\n requestOptions.push({\n key: 'headers',\n value: [\n {\n key: parameterContentType?.name ?? 'Content-Type',\n // form-data does not need Content-Type header, browser will set it automatically\n value:\n operation.body.type === 'form-data'\n ? null\n : operation.body.mediaType,\n },\n {\n spread,\n },\n ],\n });\n }\n }\n\n const responseType = identifierResponse.name || 'unknown';\n const errorType = identifierError.name || 'unknown';\n\n const heyApiClient = plugin.config.client\n ? file.import({\n alias: '_heyApiClient',\n module: file.relativePathToFile({\n context,\n id: clientId,\n }),\n name: 'client',\n })\n : undefined;\n\n const optionsClient = compiler.propertyAccessExpression({\n expression: compiler.identifier({ text: 'options' }),\n isOptional: !isRequiredOptions,\n name: 'client',\n });\n\n let clientExpression: ts.Expression;\n\n if (plugin.config.instance) {\n clientExpression = compiler.binaryExpression({\n left: optionsClient,\n operator: '??',\n right: compiler.propertyAccessExpression({\n expression: compiler.this(),\n name: '_client',\n }),\n });\n } else if (heyApiClient?.name) {\n clientExpression = compiler.binaryExpression({\n left: optionsClient,\n operator: '??',\n right: compiler.identifier({ text: heyApiClient.name }),\n });\n } else {\n clientExpression = optionsClient;\n }\n\n const types: Array<string | ts.StringLiteral> = [];\n if (isNuxtClient) {\n types.push(\n nuxtTypeComposable,\n `${responseType} | ${nuxtTypeDefault}`,\n errorType,\n nuxtTypeDefault,\n );\n } else {\n types.push(responseType, errorType, 'ThrowOnError');\n }\n\n if (plugin.config.responseStyle === 'data') {\n types.push(compiler.stringLiteral({ text: plugin.config.responseStyle }));\n }\n\n return [\n compiler.returnFunctionCall({\n args: [\n compiler.objectExpression({\n identifiers: ['responseTransformer'],\n obj: requestOptions,\n }),\n ],\n name: compiler.propertyAccessExpression({\n expression: clientExpression,\n name: compiler.identifier({ text: operation.method }),\n }),\n types,\n }),\n ];\n};\n","import type ts from 'typescript';\n\nimport type { Comments, FunctionParameter } from '../../../compiler';\nimport { compiler } from '../../../compiler';\nimport type {\n FunctionTypeParameter,\n ObjectValue,\n} from '../../../compiler/types';\nimport { clientApi, clientModulePath } from '../../../generate/client';\nimport { TypeScriptFile } from '../../../generate/files';\nimport type { IR } from '../../../ir/types';\nimport { isOperationParameterRequired } from '../../../openApi';\nimport type {\n Client,\n Model,\n Operation,\n OperationParameter,\n Service,\n} from '../../../types/client';\nimport type { Config as ClientConfig } from '../../../types/config';\nimport {\n getConfig,\n isLegacyClient,\n legacyNameFromConfig,\n} from '../../../utils/config';\nimport { escapeComment, escapeName } from '../../../utils/escape';\nimport { reservedJavaScriptKeywordsRegExp } from '../../../utils/regexp';\nimport { stringCase } from '../../../utils/stringCase';\nimport { transformClassName } from '../../../utils/transform';\nimport { setUniqueTypeName } from '../../../utils/type';\nimport { unique } from '../../../utils/unique';\nimport { getClientPlugin } from '../client-core/utils';\nimport type { HeyApiSdkPlugin } from './types';\n\ntype OnNode = (node: ts.Node) => void;\ntype OnImport = (name: string) => void;\n\nexport const generateImport = ({\n meta,\n onImport,\n ...setUniqueTypeNameArgs\n}: Pick<Parameters<typeof setUniqueTypeName>[0], 'client' | 'nameTransformer'> &\n Pick<Model, 'meta'> & {\n onImport: OnImport;\n }) => {\n // generate imports only for top-level models\n if (!meta) {\n // TODO: this used to return undefined. We could refactor this function to\n // return undefined again, but we will need to improve types so we can safely\n // do `const { name } = generateImport({ meta: ... })` (note when meta is defined\n // we guarantee the response to be an object). For now, nothing relies on this\n // response shape except for plugins, so it was acceptable to patch it that way\n return { created: false, name: '' };\n }\n\n const { created, name } = setUniqueTypeName({\n meta,\n ...setUniqueTypeNameArgs,\n });\n if (name) {\n onImport(name);\n }\n return { created, name };\n};\n\nexport const modelResponseTransformerTypeName = (name: string) =>\n `${name}ModelResponseTransformer`;\n\nexport const operationDataTypeName = (name: string) =>\n `${stringCase({\n case: 'PascalCase',\n value: name,\n })}Data`;\n\nexport const operationErrorTypeName = (name: string) =>\n `${stringCase({\n case: 'PascalCase',\n value: name,\n })}Error`;\n\n// operation response type ends with \"Response\", it's enough to append \"Transformer\"\nexport const operationResponseTransformerTypeName = (name: string) =>\n `${name}Transformer`;\n\nexport const operationResponseTypeName = (name: string) =>\n `${stringCase({\n case: 'PascalCase',\n value: name,\n })}Response`;\n\n/**\n * @param importedType unique type name returned from `setUniqueTypeName()`\n * @returns options type\n */\nexport const operationOptionsLegacyParserType = ({\n importedType,\n throwOnError,\n}: {\n importedType?: string | false;\n throwOnError?: string;\n}) => {\n const optionsName = clientApi.OptionsLegacyParser.name;\n // TODO: refactor this to be more generic, works for now\n if (throwOnError) {\n return `${optionsName}<${importedType || 'unknown'}, ${throwOnError}>`;\n }\n return importedType ? `${optionsName}<${importedType}>` : optionsName;\n};\n\nconst toOperationParamType = (\n client: Client,\n operation: Operation,\n): FunctionParameter[] => {\n const config = getConfig();\n\n const { name: importedType } = setUniqueTypeName({\n client,\n meta: {\n // TODO: this should be exact ref to operation for consistency,\n // but name should work too as operation ID is unique\n $ref: operation.name,\n name: operation.name,\n },\n nameTransformer: operationDataTypeName,\n });\n\n const isRequired = isOperationParameterRequired(operation.parameters);\n\n if (!isLegacyClient(config)) {\n return [\n {\n isRequired,\n name: 'options',\n type: operationOptionsLegacyParserType({\n importedType,\n throwOnError: 'ThrowOnError',\n }),\n },\n ];\n }\n\n if (!operation.parameters.length) {\n return [];\n }\n\n const getDefaultPrintable = (\n p: OperationParameter | Model,\n ): string | undefined => {\n if (p.default === undefined) {\n return;\n }\n return JSON.stringify(p.default, null, 4);\n };\n\n // legacy configuration\n if (!config.useOptions) {\n return operation.parameters.map((p) => {\n const typePath = `${importedType}['${p.name}']`;\n return {\n default: p?.default,\n isRequired:\n (!p.isRequired && !getDefaultPrintable(p) ? '?' : '') === '',\n name: p.name,\n type: typePath,\n };\n });\n }\n\n return [\n {\n default: isRequired ? undefined : {},\n name: 'data',\n type: importedType,\n },\n ];\n};\n\nconst toOperationReturnType = (client: Client, operation: Operation) => {\n const config = getConfig();\n\n let returnType = compiler.typeNode('void');\n\n const successResponses = operation.responses.filter((response) =>\n response.responseTypes.includes('success'),\n );\n\n // TODO: we should return nothing when successes don't exist\n // can't remove this logic without removing request/name config\n // as it complicates things\n if (successResponses.length) {\n const { name: importedType } = setUniqueTypeName({\n client,\n meta: {\n // TODO: this should be exact ref to operation for consistency,\n // but name should work too as operation ID is unique\n $ref: operation.name,\n name: operation.name,\n },\n nameTransformer: operationResponseTypeName,\n });\n returnType = compiler.typeUnionNode({\n types: [importedType],\n });\n }\n\n if (\n config.useOptions &&\n config.plugins['@hey-api/sdk']?.config.response === 'response'\n ) {\n returnType = compiler.typeNode('ApiResult', [returnType]);\n }\n\n const clientPlugin = getClientPlugin(config);\n if (clientPlugin.name === 'legacy/angular') {\n returnType = compiler.typeNode('Observable', [returnType]);\n } else {\n returnType = compiler.typeNode('CancelablePromise', [returnType]);\n }\n\n return returnType;\n};\n\nconst toOperationComment = (operation: Operation): Comments => {\n const config = getConfig();\n\n if (!isLegacyClient(config)) {\n const comment = [\n operation.deprecated && '@deprecated',\n operation.summary && escapeComment(operation.summary),\n operation.description && escapeComment(operation.description),\n ];\n return comment;\n }\n\n let params: string[] = [];\n\n if (operation.parameters.length) {\n if (config.useOptions) {\n params = [\n '@param data The data for the request.',\n ...operation.parameters.map(\n (parameter) =>\n `@param data.${parameter.name} ${parameter.description ? escapeComment(parameter.description) : ''}`,\n ),\n ];\n } else {\n params = operation.parameters.map(\n (parameter) =>\n `@param ${parameter.name} ${parameter.description ? escapeComment(parameter.description) : ''}`,\n );\n }\n }\n\n const successResponses = operation.responses.filter((response) =>\n response.responseTypes.includes('success'),\n );\n\n const comment = [\n operation.deprecated && '@deprecated',\n operation.summary && escapeComment(operation.summary),\n operation.description && escapeComment(operation.description),\n ...params,\n ...successResponses.map(\n (response) =>\n `@returns ${response.type} ${response.description ? escapeComment(response.description) : ''}`,\n ),\n '@throws ApiError',\n ];\n return comment;\n};\n\nconst toRequestOptions = ({\n client,\n onClientImport,\n onImport,\n operation,\n}: {\n client: Client;\n onClientImport: OnImport | undefined;\n onImport: OnImport;\n operation: Operation;\n}) => {\n const config = getConfig();\n\n const name = operationResponseTypeName(operation.name);\n const { name: responseTransformerName } = setUniqueTypeName({\n client,\n meta: {\n $ref: `transformers/${name}`,\n name,\n },\n nameTransformer: operationResponseTransformerTypeName,\n });\n\n if (responseTransformerName) {\n onImport(responseTransformerName);\n }\n\n if (!isLegacyClient(config)) {\n let obj: ObjectValue[] = [\n {\n spread: 'options',\n },\n ];\n\n const bodyParameters = operation.parameters.filter(\n (parameter) => parameter.in === 'body' || parameter.in === 'formData',\n );\n const contents = bodyParameters\n .map(\n (parameter) =>\n parameter.mediaType ||\n (parameter.in === 'formData' ? 'multipart/form-data' : undefined),\n )\n .filter(Boolean)\n .filter(unique);\n if (contents.length === 1) {\n if (contents[0] === 'multipart/form-data') {\n obj = [\n ...obj,\n {\n spread: 'formDataBodySerializer',\n },\n {\n key: 'headers',\n value: [\n {\n // no need for Content-Type header, browser will set it automatically\n key: 'Content-Type',\n value: null,\n },\n {\n spread: 'options?.headers',\n },\n ],\n },\n ];\n onClientImport?.('formDataBodySerializer');\n }\n\n if (contents[0] === 'application/x-www-form-urlencoded') {\n obj = [\n ...obj,\n {\n spread: 'urlSearchParamsBodySerializer',\n },\n {\n key: 'headers',\n value: [\n {\n key: 'Content-Type',\n value: contents[0],\n },\n {\n spread: 'options?.headers',\n },\n ],\n },\n ];\n onClientImport?.('urlSearchParamsBodySerializer');\n }\n }\n\n // TODO: set parseAs to skip inference if every result has the same\n // content type. currently impossible because successes do not contain\n // header information\n\n obj = [\n ...obj,\n {\n key: 'url',\n value: operation.path,\n },\n ];\n\n if (responseTransformerName) {\n obj = [\n ...obj,\n {\n key: 'responseTransformer',\n value: responseTransformerName,\n },\n ];\n }\n\n return compiler.objectExpression({\n identifiers: ['responseTransformer'],\n obj,\n });\n }\n\n const toObj = (parameters: OperationParameter[]) =>\n parameters.reduce(\n (prev, curr) => {\n const key = curr.prop;\n const value = config.useOptions ? `data.${curr.name}` : curr.name;\n if (key === value) {\n prev[key] = key;\n } else if (escapeName(key) === key) {\n prev[key] = value;\n } else {\n prev[`'${key}'`] = value;\n }\n return prev;\n },\n {} as Record<string, unknown>,\n );\n\n const obj: Record<string, any> = {\n method: operation.method,\n url: operation.path,\n };\n\n if (operation.parametersPath.length) {\n obj.path = toObj(operation.parametersPath);\n }\n\n if (operation.parametersCookie.length) {\n obj.cookies = toObj(operation.parametersCookie);\n }\n\n if (operation.parametersHeader.length) {\n obj.headers = toObj(operation.parametersHeader);\n }\n\n if (operation.parametersQuery.length) {\n obj.query = toObj(operation.parametersQuery);\n }\n\n if (operation.parametersForm.length) {\n obj.formData = toObj(operation.parametersForm);\n }\n\n if (operation.parametersBody) {\n if (operation.parametersBody.in === 'formData') {\n if (config.useOptions) {\n obj.formData = `data.${operation.parametersBody.name}`;\n } else {\n obj.formData = operation.parametersBody.name;\n }\n }\n if (operation.parametersBody.in === 'body') {\n if (config.useOptions) {\n obj.body = `data.${operation.parametersBody.name}`;\n } else {\n obj.body = operation.parametersBody.name;\n }\n }\n }\n\n if (operation.parametersBody?.mediaType) {\n obj.mediaType = operation.parametersBody?.mediaType;\n }\n\n if (operation.responseHeader) {\n obj.responseHeader = operation.responseHeader;\n }\n\n if (responseTransformerName) {\n obj.responseTransformer = responseTransformerName;\n }\n\n const errorResponses = operation.responses.filter((response) =>\n response.responseTypes.includes('error'),\n );\n if (errorResponses.length > 0) {\n const errors: Record<number | string, string> = {};\n errorResponses.forEach((response) => {\n errors[response.code] = response.description ?? '';\n });\n obj.errors = errors;\n }\n\n return compiler.objectExpression({\n identifiers: [\n 'body',\n 'cookies',\n 'formData',\n 'headers',\n 'path',\n 'query',\n 'responseTransformer',\n ],\n obj,\n shorthand: true,\n });\n};\n\nexport const serviceFunctionIdentifier = ({\n config,\n handleIllegal,\n id,\n operation,\n}: {\n config: ClientConfig;\n handleIllegal?: boolean;\n id: string;\n operation: IR.OperationObject | Operation;\n}) => {\n if (config.plugins['@hey-api/sdk']?.config.methodNameBuilder) {\n return config.plugins['@hey-api/sdk'].config.methodNameBuilder(operation);\n }\n\n if (handleIllegal && id.match(reservedJavaScriptKeywordsRegExp)) {\n return `${id}_`;\n }\n\n return id;\n};\n\nconst toOperationStatements = ({\n client,\n onClientImport,\n onImport,\n operation,\n}: {\n client: Client;\n onClientImport?: OnImport;\n onImport: OnImport;\n operation: Operation;\n}) => {\n const config = getConfig();\n\n const options = toRequestOptions({\n client,\n onClientImport,\n onImport,\n operation,\n });\n\n if (!isLegacyClient(config)) {\n const errorType = setUniqueTypeName({\n client,\n meta: {\n // TODO: this should be exact ref to operation for consistency,\n // but name should work too as operation ID is unique\n $ref: operation.name,\n name: operation.name,\n },\n nameTransformer: operationErrorTypeName,\n }).name;\n const successResponses = operation.responses.filter((response) =>\n response.responseTypes.includes('success'),\n );\n const responseType = successResponses.length\n ? setUniqueTypeName({\n client,\n meta: {\n // TODO: this should be exact ref to operation for consistency,\n // but name should work too as operation ID is unique\n $ref: operation.name,\n name: operation.name,\n },\n nameTransformer: operationResponseTypeName,\n }).name\n : 'void';\n return [\n compiler.returnFunctionCall({\n args: [options],\n name: `(options?.client ?? client).${operation.method.toLocaleLowerCase()}`,\n types:\n errorType && responseType\n ? [responseType, errorType, 'ThrowOnError']\n : errorType\n ? ['unknown', errorType, 'ThrowOnError']\n : responseType\n ? [responseType, 'unknown', 'ThrowOnError']\n : [],\n }),\n ];\n }\n\n if (legacyNameFromConfig(config)) {\n return [\n compiler.returnFunctionCall({\n args: [options],\n name: 'this.httpRequest.request',\n }),\n ];\n }\n\n const clientPlugin = getClientPlugin(config);\n if (clientPlugin.name === 'legacy/angular') {\n return [\n compiler.returnFunctionCall({\n args: ['OpenAPI', 'this.http', options],\n name: '__request',\n }),\n ];\n }\n\n return [\n compiler.returnFunctionCall({\n args: ['OpenAPI', options],\n name: '__request',\n }),\n ];\n};\n\nconst processService = ({\n client,\n onClientImport,\n onImport,\n onNode,\n service,\n}: {\n client: Client;\n onClientImport: OnImport;\n onImport: OnImport;\n onNode: OnNode;\n service: Service;\n}) => {\n const config = getConfig();\n\n const clientPlugin = getClientPlugin(config);\n const isLegacy = isLegacyClient(config);\n\n for (const operation of service.operations) {\n if (operation.parameters.length) {\n generateImport({\n client,\n meta: {\n // TODO: this should be exact ref to operation for consistency,\n // but name should work too as operation ID is unique\n $ref: operation.name,\n name: operation.name,\n },\n nameTransformer: operationDataTypeName,\n onImport,\n });\n }\n\n if (!isLegacy) {\n generateImport({\n client,\n meta: {\n // TODO: this should be exact ref to operation for consistency,\n // but name should work too as operation ID is unique\n $ref: operation.name,\n name: operation.name,\n },\n nameTransformer: operationErrorTypeName,\n onImport,\n });\n }\n\n const successResponses = operation.responses.filter((response) =>\n response.responseTypes.includes('success'),\n );\n if (successResponses.length) {\n generateImport({\n client,\n meta: {\n // TODO: this should be exact ref to operation for consistency,\n // but name should work too as operation ID is unique\n $ref: operation.name,\n name: operation.name,\n },\n nameTransformer: operationResponseTypeName,\n onImport,\n });\n }\n }\n\n const throwOnErrorTypeGeneric: FunctionTypeParameter = {\n default:\n ('throwOnError' in clientPlugin.config\n ? clientPlugin.config.throwOnError\n : false) ?? false,\n extends: 'boolean',\n name: 'ThrowOnError',\n };\n\n if (\n !config.plugins['@hey-api/sdk']?.config.asClass &&\n !legacyNameFromConfig(config)\n ) {\n for (const operation of service.operations) {\n const compileFunctionParams = {\n parameters: toOperationParamType(client, operation),\n returnType: !isLegacy\n ? undefined\n : toOperationReturnType(client, operation),\n statements: toOperationStatements({\n client,\n onClientImport,\n onImport,\n operation,\n }),\n types: !isLegacy ? [throwOnErrorTypeGeneric] : undefined,\n };\n const expression =\n clientPlugin.name === 'legacy/angular'\n ? compiler.anonymousFunction(compileFunctionParams)\n : compiler.arrowFunction(compileFunctionParams);\n const statement = compiler.constVariable({\n comment: toOperationComment(operation),\n exportConst: true,\n expression,\n name: serviceFunctionIdentifier({\n config,\n handleIllegal: true,\n id: operation.name,\n operation,\n }),\n });\n onNode(statement);\n }\n return;\n }\n\n let members: ts.ClassElement[] = service.operations.map((operation) => {\n const node = compiler.methodDeclaration({\n accessLevel: 'public',\n comment: toOperationComment(operation),\n isStatic:\n legacyNameFromConfig(config) === undefined &&\n clientPlugin.name !== 'legacy/angular',\n name: serviceFunctionIdentifier({\n config,\n id: operation.name,\n operation,\n }),\n parameters: toOperationParamType(client, operation),\n returnType: !isLegacy\n ? undefined\n : toOperationReturnType(client, operation),\n statements: toOperationStatements({\n client,\n onClientImport,\n onImport,\n operation,\n }),\n types: !isLegacy ? [throwOnErrorTypeGeneric] : undefined,\n });\n return node;\n });\n\n if (!members.length) {\n return;\n }\n\n // Push constructor to front if needed\n if (legacyNameFromConfig(config)) {\n members = [\n compiler.constructorDeclaration({\n multiLine: false,\n parameters: [\n {\n accessLevel: 'public',\n isReadOnly: true,\n name: 'httpRequest',\n type: 'BaseHttpRequest',\n },\n ],\n }),\n ...members,\n ];\n } else if (clientPlugin.name === 'legacy/angular') {\n members = [\n compiler.constructorDeclaration({\n multiLine: false,\n parameters: [\n {\n accessLevel: 'public',\n isReadOnly: true,\n name: 'http',\n type: 'HttpClient',\n },\n ],\n }),\n ...members,\n ];\n }\n\n const _members: Array<ts.ClassElement> = [];\n members.forEach((member, index) => {\n // add newline between each class member\n if (index) {\n // @ts-expect-error\n _members.push(compiler.identifier({ text: '\\n' }));\n }\n\n _members.push(member);\n });\n\n const statement = compiler.classDeclaration({\n decorator:\n clientPlugin.name === 'legacy/angular'\n ? { args: [{ providedIn: 'root' }], name: 'Injectable' }\n : undefined,\n exportClass: true,\n name: transformClassName({\n config,\n name: service.name,\n }),\n nodes: _members,\n });\n onNode(statement);\n};\n\nexport const handlerLegacy: HeyApiSdkPlugin['LegacyHandler'] = ({\n client,\n files,\n plugin,\n}) => {\n const config = getConfig();\n\n const isLegacy = isLegacyClient(config);\n\n const sdkOutput = 'sdk';\n\n files.sdk = new TypeScriptFile({\n dir: config.output.path,\n exportFromIndex: plugin.config.exportFromIndex,\n id: 'sdk',\n name: `${sdkOutput}.ts`,\n });\n\n // Import required packages and core files.\n if (!isLegacy) {\n files.sdk.import({\n module: clientModulePath({ config, sourceOutput: sdkOutput }),\n name: 'createClient',\n });\n files.sdk.import({\n module: clientModulePath({ config, sourceOutput: sdkOutput }),\n name: 'createConfig',\n });\n files.sdk.import({\n ...clientApi.OptionsLegacyParser,\n module: clientModulePath({ config, sourceOutput: sdkOutput }),\n });\n } else {\n const clientPlugin = getClientPlugin(config);\n if (clientPlugin.name === 'legacy/angular') {\n files.sdk.import({\n module: '@angular/core',\n name: 'Injectable',\n });\n\n if (!legacyNameFromConfig(config)) {\n files.sdk.import({\n module: '@angular/common/http',\n name: 'HttpClient',\n });\n }\n\n files.sdk.import({\n asType: true,\n module: 'rxjs',\n name: 'Observable',\n });\n } else {\n files.sdk.import({\n asType: true,\n module: './core/CancelablePromise',\n name: 'CancelablePromise',\n });\n }\n\n if (config.plugins['@hey-api/sdk']?.config.response === 'response') {\n files.sdk.import({\n asType: true,\n module: './core/ApiResult',\n name: 'ApiResult',\n });\n }\n\n if (legacyNameFromConfig(config)) {\n const clientPlugin = getClientPlugin(config);\n files.sdk.import({\n asType: clientPlugin.name !== 'legacy/angular',\n module: './core/BaseHttpRequest',\n name: 'BaseHttpRequest',\n });\n } else {\n files.sdk.import({\n module: './core/OpenAPI',\n name: 'OpenAPI',\n });\n files.sdk.import({\n alias: '__request',\n module: './core/request',\n name: 'request',\n });\n }\n }\n\n // define client first\n if (!isLegacy) {\n const clientPlugin = getClientPlugin(config);\n const statement = compiler.constVariable({\n exportConst: true,\n expression: compiler.callExpression({\n functionName: 'createClient',\n parameters: [\n compiler.callExpression({\n functionName: 'createConfig',\n parameters: [\n 'throwOnError' in clientPlugin && clientPlugin.throwOnError\n ? compiler.objectExpression({\n obj: [\n {\n key: 'throwOnError',\n value: true,\n },\n ],\n })\n : undefined,\n ],\n }),\n ],\n }),\n name: 'client',\n });\n files.sdk.add(statement);\n }\n\n for (const service of client.services) {\n processService({\n client,\n onClientImport: (imported) => {\n files.sdk!.import({\n module: clientModulePath({ config, sourceOutput: sdkOutput }),\n name: imported,\n });\n },\n onImport: (imported) => {\n files.sdk!.import({\n // this detection could be done safer, but it shouldn't cause any issues\n asType: !imported.endsWith('Transformer'),\n module: `./${files.types!.nameWithoutExtension()}`,\n name: imported,\n });\n },\n onNode: (node) => {\n files.sdk!.add(node);\n },\n service,\n });\n }\n};\n","import { compiler } from '../../../compiler';\nimport { clientModulePath } from '../../../generate/client';\nimport type { FileImportResult } from '../../../generate/files';\nimport type { IR } from '../../../ir/types';\nimport { getClientPlugin } from '../client-core/utils';\nimport { nuxtTypeDefault, nuxtTypeResponse, sdkId } from './constants';\nimport type { HeyApiSdkPlugin } from './types';\n\nexport const createTypeOptions = ({\n clientOptions,\n context,\n plugin,\n}: {\n clientOptions: FileImportResult;\n context: IR.Context;\n plugin: HeyApiSdkPlugin['Instance'];\n}) => {\n const file = context.file({ id: sdkId })!;\n const client = getClientPlugin(context.config);\n const isNuxtClient = client.name === '@hey-api/client-nuxt';\n\n const clientModule = clientModulePath({\n config: context.config,\n sourceOutput: file.nameWithoutExtension(),\n });\n const tDataShape = file.import({\n asType: true,\n module: clientModule,\n name: 'TDataShape',\n });\n const clientType = file.import({\n asType: true,\n module: clientModule,\n name: 'Client',\n });\n\n const typeOptions = compiler.typeAliasDeclaration({\n exportType: true,\n name: 'Options',\n type: compiler.typeIntersectionNode({\n types: [\n compiler.typeReferenceNode({\n typeArguments: isNuxtClient\n ? [\n compiler.typeReferenceNode({ typeName: 'TComposable' }),\n compiler.typeReferenceNode({ typeName: 'TData' }),\n compiler.typeReferenceNode({ typeName: nuxtTypeResponse }),\n compiler.typeReferenceNode({ typeName: nuxtTypeDefault }),\n ]\n : [\n compiler.typeReferenceNode({ typeName: 'TData' }),\n compiler.typeReferenceNode({ typeName: 'ThrowOnError' }),\n ],\n typeName: clientOptions.name,\n }),\n compiler.typeInterfaceNode({\n properties: [\n {\n comment: [\n 'You can provide a client instance returned by `createClient()` instead of',\n 'individual options. This might be also useful if you want to implement a',\n 'custom client.',\n ],\n isRequired: !plugin.config.client,\n name: 'client',\n type: compiler.typeReferenceNode({ typeName: clientType.name }),\n },\n {\n comment: [\n 'You can pass arbitrary values through the `meta` object. This can be',\n \"used to access values that aren't defined as part of the SDK function.\",\n ],\n isRequired: false,\n name: 'meta',\n type: compiler.typeReferenceNode({\n typeArguments: [\n compiler.keywordTypeNode({ keyword: 'string' }),\n compiler.keywordTypeNode({ keyword: 'unknown' }),\n ],\n typeName: 'Record',\n }),\n },\n ],\n useLegacyResolution: false,\n }),\n ],\n }),\n typeParameters: isNuxtClient\n ? [\n compiler.typeParameterDeclaration({\n constraint: compiler.typeReferenceNode({ typeName: 'Composable' }),\n name: 'TComposable',\n }),\n compiler.typeParameterDeclaration({\n constraint: compiler.typeReferenceNode({\n typeName: tDataShape.name,\n }),\n defaultType: compiler.typeReferenceNode({\n typeName: tDataShape.name,\n }),\n name: 'TData',\n }),\n compiler.typeParameterDeclaration({\n defaultType: compiler.keywordTypeNode({ keyword: 'unknown' }),\n name: nuxtTypeResponse,\n }),\n compiler.typeParameterDeclaration({\n defaultType: compiler.keywordTypeNode({ keyword: 'undefined' }),\n name: nuxtTypeDefault,\n }),\n ]\n : [\n compiler.typeParameterDeclaration({\n constraint: compiler.typeReferenceNode({\n typeName: tDataShape.name,\n }),\n defaultType: compiler.typeReferenceNode({\n typeName: tDataShape.name,\n }),\n name: 'TData',\n }),\n compiler.typeParameterDeclaration({\n constraint: compiler.keywordTypeNode({ keyword: 'boolean' }),\n defaultType: compiler.keywordTypeNode({ keyword: 'boolean' }),\n name: 'ThrowOnError',\n }),\n ],\n });\n\n file.add(typeOptions);\n};\n","import ts from 'typescript';\n\nimport { compiler } from '../../../compiler';\nimport { clientApi, clientModulePath } from '../../../generate/client';\nimport { stringCase } from '../../../utils/stringCase';\nimport {\n createOperationComment,\n isOperationOptionsRequired,\n} from '../../shared/utils/operation';\nimport { getClientPlugin } from '../client-core/utils';\nimport { importIdentifier } from '../typescript/ref';\nimport { nuxtTypeComposable, nuxtTypeDefault, sdkId } from './constants';\nimport {\n operationClasses,\n operationOptionsType,\n operationStatements,\n} from './operation';\nimport { serviceFunctionIdentifier } from './plugin-legacy';\nimport { createTypeOptions } from './typeOptions';\nimport type { HeyApiSdkPlugin } from './types';\n\nconst createClientClassNodes = ({\n plugin,\n}: {\n plugin: HeyApiSdkPlugin['Instance'];\n}): ReadonlyArray<ts.ClassElement> => {\n const clientAssignmentStatement = compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: compiler.this(),\n name: '_client',\n }),\n operator: '=',\n right: compiler.propertyAccessExpression({\n expression: compiler.identifier({ text: 'args' }),\n name: 'client',\n }),\n }),\n });\n\n return [\n compiler.propertyDeclaration({\n initializer: plugin.config.client\n ? compiler.identifier({ text: '_heyApiClient' })\n : undefined,\n modifier: 'protected',\n name: '_client',\n type: ts.factory.createTypeReferenceNode('Client'),\n }),\n // @ts-expect-error\n compiler.identifier({ text: '\\n' }),\n compiler.constructorDeclaration({\n multiLine: true,\n parameters: [\n {\n isRequired: !plugin.config.client,\n name: 'args',\n type: compiler.typeInterfaceNode({\n properties: [\n {\n isRequired: !plugin.config.client,\n name: 'client',\n type: 'Client',\n },\n ],\n useLegacyResolution: false,\n }),\n },\n ],\n statements: [\n !plugin.config.client\n ? clientAssignmentStatement\n : compiler.ifStatement({\n expression: compiler.propertyAccessExpression({\n expression: compiler.identifier({ text: 'args' }),\n isOptional: true,\n name: 'client',\n }),\n thenStatement: compiler.block({\n statements: [clientAssignmentStatement],\n }),\n }),\n ],\n }),\n ];\n};\n\ninterface SdkClassEntry {\n /**\n * Name of the class.\n */\n className: string;\n /**\n * Child classes located inside this class.\n */\n classes: Set<string>;\n /**\n * Track unique added method nodes.\n */\n methods: Set<string>;\n /**\n * List of class nodes containing methods.\n */\n nodes: Array<ts.ClassElement>;\n /**\n * Is this a root class?\n */\n root: boolean;\n}\n\nconst generateClassSdk = ({\n plugin,\n}: {\n plugin: HeyApiSdkPlugin['Instance'];\n}) => {\n const client = getClientPlugin(plugin.context.config);\n const isNuxtClient = client.name === '@hey-api/client-nuxt';\n const file = plugin.context.file({ id: sdkId })!;\n const sdkClasses = new Map<string, SdkClassEntry>();\n /**\n * Track unique added classes.\n */\n const generatedClasses = new Set<string>();\n\n const clientClassNodes = plugin.config.instance\n ? createClientClassNodes({ plugin })\n : [];\n\n plugin.forEach('operation', ({ operation }) => {\n const isRequiredOptions = isOperationOptionsRequired({\n context: plugin.context,\n operation,\n });\n const identifierResponse = importIdentifier({\n context: plugin.context,\n file,\n operation,\n type: 'response',\n });\n\n const classes = operationClasses({\n context: plugin.context,\n operation,\n plugin,\n });\n\n for (const entry of classes.values()) {\n entry.path.forEach((currentClassName, index) => {\n if (!sdkClasses.has(currentClassName)) {\n sdkClasses.set(currentClassName, {\n className: currentClassName,\n classes: new Set(),\n methods: new Set(),\n nodes: [],\n root: !index,\n });\n }\n\n const parentClassName = entry.path[index - 1];\n if (parentClassName) {\n const parentClass = sdkClasses.get(parentClassName)!;\n parentClass.classes.add(currentClassName);\n sdkClasses.set(parentClassName, parentClass);\n }\n\n const isLast = entry.path.length === index + 1;\n // add methods only to the last class\n if (!isLast) {\n return;\n }\n\n const currentClass = sdkClasses.get(currentClassName)!;\n\n // avoid duplicate methods\n if (currentClass.methods.has(entry.methodName)) {\n return;\n }\n\n const functionNode = compiler.methodDeclaration({\n accessLevel: 'public',\n comment: createOperationComment({ operation }),\n isStatic: !plugin.config.instance,\n name: entry.methodName,\n parameters: [\n {\n isRequired: isRequiredOptions,\n name: 'options',\n type: operationOptionsType({\n context: plugin.context,\n file,\n operation,\n throwOnError: isNuxtClient ? undefined : 'ThrowOnError',\n }),\n },\n ],\n returnType: undefined,\n statements: operationStatements({\n context: plugin.context,\n isRequiredOptions,\n operation,\n plugin,\n }),\n types: isNuxtClient\n ? [\n {\n // default: compiler.ots.string('$fetch'),\n extends: compiler.typeNode('Composable'),\n name: nuxtTypeComposable,\n },\n {\n default: identifierResponse.name\n ? compiler.typeReferenceNode({\n typeName: identifierResponse.name,\n })\n : compiler.typeNode('undefined'),\n extends: identifierResponse.name\n ? compiler.typeReferenceNode({\n typeName: identifierResponse.name,\n })\n : undefined,\n name: nuxtTypeDefault,\n },\n ]\n : [\n {\n default:\n ('throwOnError' in client.config\n ? client.config.throwOnError\n : false) ?? false,\n extends: 'boolean',\n name: 'ThrowOnError',\n },\n ],\n });\n\n if (!currentClass.nodes.length) {\n currentClass.nodes.push(functionNode);\n } else {\n currentClass.nodes.push(\n // @ts-expect-error\n compiler.identifier({ text: '\\n' }),\n functionNode,\n );\n }\n\n currentClass.methods.add(entry.methodName);\n\n sdkClasses.set(currentClassName, currentClass);\n });\n }\n });\n\n const generateClass = (currentClass: SdkClassEntry) => {\n if (generatedClasses.has(currentClass.className)) {\n return;\n }\n\n if (currentClass.classes.size) {\n for (const childClassName of currentClass.classes) {\n const childClass = sdkClasses.get(childClassName)!;\n generateClass(childClass);\n\n currentClass.nodes.push(\n compiler.propertyDeclaration({\n initializer: plugin.config.instance\n ? compiler.newExpression({\n argumentsArray: plugin.config.instance\n ? [\n compiler.objectExpression({\n multiLine: false,\n obj: [\n {\n key: 'client',\n value: compiler.propertyAccessExpression({\n expression: compiler.this(),\n name: '_client',\n }),\n },\n ],\n }),\n ]\n : [],\n expression: compiler.identifier({\n text: childClass.className,\n }),\n })\n : compiler.identifier({ text: childClass.className }),\n modifier: plugin.config.instance ? undefined : 'static',\n name: stringCase({\n case: 'camelCase',\n value: childClass.className,\n }),\n }),\n );\n }\n }\n\n const node = compiler.classDeclaration({\n exportClass: currentClass.root,\n extendedClasses: plugin.config.instance ? ['_HeyApiClient'] : undefined,\n name: currentClass.className,\n nodes: currentClass.nodes,\n });\n file.add(node);\n generatedClasses.add(currentClass.className);\n };\n\n if (clientClassNodes.length) {\n const node = compiler.classDeclaration({\n exportClass: false,\n name: '_HeyApiClient',\n nodes: clientClassNodes,\n });\n file.add(node);\n }\n\n for (const sdkClass of sdkClasses.values()) {\n generateClass(sdkClass);\n }\n};\n\nconst generateFlatSdk = ({\n plugin,\n}: {\n plugin: HeyApiSdkPlugin['Instance'];\n}) => {\n const client = getClientPlugin(plugin.context.config);\n const isNuxtClient = client.name === '@hey-api/client-nuxt';\n const file = plugin.context.file({ id: sdkId })!;\n\n plugin.forEach('operation', ({ operation }) => {\n const isRequiredOptions = isOperationOptionsRequired({\n context: plugin.context,\n operation,\n });\n const identifierResponse = importIdentifier({\n context: plugin.context,\n file,\n operation,\n type: 'response',\n });\n const node = compiler.constVariable({\n comment: createOperationComment({ operation }),\n exportConst: true,\n expression: compiler.arrowFunction({\n parameters: [\n {\n isRequired: isRequiredOptions,\n name: 'options',\n type: operationOptionsType({\n context: plugin.context,\n file,\n operation,\n throwOnError: isNuxtClient ? undefined : 'ThrowOnError',\n }),\n },\n ],\n returnType: undefined,\n statements: operationStatements({\n context: plugin.context,\n isRequiredOptions,\n operation,\n plugin,\n }),\n types: isNuxtClient\n ? [\n {\n // default: compiler.ots.string('$fetch'),\n extends: compiler.typeNode('Composable'),\n name: nuxtTypeComposable,\n },\n {\n default: identifierResponse.name\n ? compiler.typeReferenceNode({\n typeName: identifierResponse.name,\n })\n : compiler.typeNode('undefined'),\n extends: identifierResponse.name\n ? compiler.typeReferenceNode({\n typeName: identifierResponse.name,\n })\n : undefined,\n name: nuxtTypeDefault,\n },\n ]\n : [\n {\n default:\n ('throwOnError' in client.config\n ? client.config.throwOnError\n : false) ?? false,\n extends: 'boolean',\n name: 'ThrowOnError',\n },\n ],\n }),\n name: serviceFunctionIdentifier({\n config: plugin.context.config,\n handleIllegal: true,\n id: operation.id,\n operation,\n }),\n });\n file.add(node);\n });\n};\n\nexport const handler: HeyApiSdkPlugin['Handler'] = ({ plugin }) => {\n const file = plugin.createFile({\n id: sdkId,\n path: plugin.output,\n });\n\n // import required packages and core files\n const clientModule = clientModulePath({\n config: plugin.context.config,\n sourceOutput: file.nameWithoutExtension(),\n });\n const clientOptions = file.import({\n ...clientApi.Options,\n alias: 'ClientOptions',\n module: clientModule,\n });\n\n const client = getClientPlugin(plugin.context.config);\n const isNuxtClient = client.name === '@hey-api/client-nuxt';\n if (isNuxtClient) {\n file.import({\n asType: true,\n module: clientModule,\n name: 'Composable',\n });\n }\n\n createTypeOptions({\n clientOptions,\n context: plugin.context,\n plugin,\n });\n\n if (plugin.config.asClass) {\n generateClassSdk({ plugin });\n } else {\n generateFlatSdk({ plugin });\n }\n};\n","import { definePluginConfig } from '../../shared/utils/config';\nimport { handler } from './plugin';\nimport { handlerLegacy } from './plugin-legacy';\nimport type { HeyApiSdkPlugin } from './types';\n\nexport const defaultConfig: HeyApiSdkPlugin['Config'] = {\n config: {\n asClass: false,\n auth: true,\n classStructure: 'auto',\n client: true,\n exportFromIndex: true,\n instance: false,\n operationId: true,\n response: 'body',\n responseStyle: 'fields',\n transformer: false,\n validator: false,\n },\n dependencies: ['@hey-api/typescript'],\n handler,\n handlerLegacy,\n name: '@hey-api/sdk',\n output: 'sdk',\n resolveConfig: (plugin, context) => {\n if (plugin.config.client) {\n if (typeof plugin.config.client === 'boolean') {\n plugin.config.client = context.pluginByTag('client', {\n defaultPlugin: '@hey-api/client-fetch',\n });\n }\n\n plugin.dependencies.add(plugin.config.client!);\n } else {\n plugin.config.client = false;\n }\n\n if (plugin.config.transformer) {\n if (typeof plugin.config.transformer === 'boolean') {\n plugin.config.transformer = context.pluginByTag('transformer');\n }\n\n plugin.dependencies.add(plugin.config.transformer!);\n } else {\n plugin.config.transformer = false;\n }\n\n if (typeof plugin.config.validator !== 'object') {\n plugin.config.validator = {\n request: plugin.config.validator,\n response: plugin.config.validator,\n };\n }\n\n if (plugin.config.validator.request) {\n if (typeof plugin.config.validator.request === 'boolean') {\n plugin.config.validator.request = context.pluginByTag('validator');\n }\n\n plugin.dependencies.add(plugin.config.validator.request!);\n } else {\n plugin.config.validator.request = false;\n }\n\n if (plugin.config.validator.response) {\n if (typeof plugin.config.validator.response === 'boolean') {\n plugin.config.validator.response = context.pluginByTag('validator');\n }\n\n plugin.dependencies.add(plugin.config.validator.response!);\n } else {\n plugin.config.validator.response = false;\n }\n\n if (plugin.config.instance) {\n if (typeof plugin.config.instance !== 'string') {\n plugin.config.instance = 'Sdk';\n }\n\n plugin.config.asClass = true;\n } else {\n plugin.config.instance = false;\n }\n },\n};\n\n/**\n * Type helper for `@hey-api/sdk` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig = definePluginConfig(defaultConfig);\n","import type ts from 'typescript';\n\nimport { type Comments, compiler } from '../../../compiler';\nimport { TypeScriptFile } from '../../../generate/files';\nimport { isOperationParameterRequired } from '../../../openApi';\nimport type {\n Client,\n Method,\n Model,\n OperationParameter,\n} from '../../../types/client';\nimport { getConfig, isLegacyClient } from '../../../utils/config';\nimport { enumEntry, enumUnionType } from '../../../utils/enum';\nimport { escapeComment } from '../../../utils/escape';\nimport { sortByName, sorterByName } from '../../../utils/sort';\nimport {\n setUniqueTypeName,\n type SetUniqueTypeNameResult,\n toType,\n} from '../../../utils/type';\nimport {\n operationDataTypeName,\n operationErrorTypeName,\n operationResponseTypeName,\n} from '../sdk/plugin-legacy';\nimport type { HeyApiTypeScriptPlugin } from './types';\n\nexport interface TypesProps {\n client: Client;\n model: Model;\n onNode: (node: ts.Node) => void;\n onRemoveNode?: VoidFunction;\n}\n\nconst treeName = '$OpenApiTs';\n\nexport const emptyModel: Model = {\n $refs: [],\n base: '',\n description: null,\n enum: [],\n enums: [],\n export: 'interface',\n imports: [],\n in: '',\n isDefinition: false,\n isNullable: false,\n isReadOnly: false,\n isRequired: false,\n link: null,\n name: '',\n properties: [],\n template: null,\n type: '',\n};\n\nconst generateEnum = ({\n comments,\n leadingComment,\n meta,\n obj,\n onNode,\n ...setUniqueTypeNameArgs\n}: Omit<Parameters<typeof compiler.enumDeclaration>[0], 'name'> &\n Pick<Parameters<typeof setUniqueTypeName>[0], 'client' | 'nameTransformer'> &\n Pick<Model, 'meta'> &\n Pick<TypesProps, 'onNode'>) => {\n // generate types only for top-level models\n if (!meta) {\n return;\n }\n\n const { created, name } = setUniqueTypeName({\n create: true,\n meta,\n ...setUniqueTypeNameArgs,\n });\n if (created) {\n const node = compiler.enumDeclaration({\n comments,\n leadingComment,\n name,\n obj,\n });\n onNode(node);\n }\n};\n\nexport const generateType = ({\n comment,\n meta,\n onCreated,\n onNode,\n type,\n ...setUniqueTypeNameArgs\n}: Omit<Parameters<typeof compiler.typeAliasDeclaration>[0], 'name'> &\n Pick<Parameters<typeof setUniqueTypeName>[0], 'client' | 'nameTransformer'> &\n Pick<Model, 'meta'> &\n Pick<TypesProps, 'onNode'> & {\n onCreated?: (name: string) => void;\n }): SetUniqueTypeNameResult => {\n // generate types only for top-level models\n if (!meta) {\n return {\n created: false,\n name: '',\n };\n }\n\n const result = setUniqueTypeName({\n create: true,\n meta,\n ...setUniqueTypeNameArgs,\n });\n const { created, name } = result;\n if (created) {\n const node = compiler.typeAliasDeclaration({\n comment,\n exportType: true,\n name,\n type,\n });\n onNode(node);\n\n onCreated?.(name);\n }\n return result;\n};\n\nconst processComposition = (props: TypesProps) => {\n const config = getConfig();\n\n const enumDeclarations = [] as ts.EnumDeclaration[];\n\n processType(props);\n\n props.model.enums.forEach((enumerator) => {\n const pluginTypeScript = config.plugins['@hey-api/typescript'];\n if (\n pluginTypeScript?.config &&\n typeof pluginTypeScript.config.enums === 'object' &&\n pluginTypeScript.config.enums.mode !== 'typescript+namespace'\n ) {\n return processEnum({\n ...props,\n model: enumerator,\n });\n }\n\n return processScopedEnum({\n ...props,\n model: enumerator,\n onNode: (node) => {\n enumDeclarations.push(node as ts.EnumDeclaration);\n },\n });\n });\n\n if (enumDeclarations.length) {\n props.onNode(\n compiler.namespaceDeclaration({\n name: props.model.name,\n statements: enumDeclarations,\n }),\n );\n }\n};\n\nconst processEnum = ({ client, model, onNode }: TypesProps) => {\n const config = getConfig();\n\n const properties: Record<string | number, unknown> = {};\n const comments: Record<string | number, Comments> = {};\n model.enum.forEach((enumerator) => {\n const { key, value } = enumEntry(enumerator);\n properties[key] = value;\n const comment = enumerator.customDescription || enumerator.description;\n if (comment) {\n comments[key] = [escapeComment(comment)];\n }\n });\n\n const comment = [\n model.description && escapeComment(model.description),\n model.deprecated && '@deprecated',\n ];\n\n const pluginTypeScript = config.plugins['@hey-api/typescript'];\n if (\n pluginTypeScript?.config &&\n typeof pluginTypeScript.config.enums === 'object' &&\n pluginTypeScript.config.enums.enabled &&\n (pluginTypeScript.config.enums.mode === 'typescript' ||\n pluginTypeScript.config.enums.mode === 'typescript+namespace')\n ) {\n generateEnum({\n client,\n comments,\n leadingComment: comment,\n meta: model.meta,\n obj: properties,\n onNode,\n });\n return;\n }\n\n generateType({\n client,\n comment,\n meta: model.meta,\n onCreated: (name) => {\n // create a separate JavaScript object export\n const pluginTypeScript = config.plugins['@hey-api/typescript'];\n if (\n pluginTypeScript?.config &&\n typeof pluginTypeScript.config.enums === 'object' &&\n pluginTypeScript.config.enums.enabled &&\n pluginTypeScript.config.enums.mode === 'javascript'\n ) {\n const expression = compiler.objectExpression({\n multiLine: true,\n obj: Object.entries(properties).map(([key, value]) => ({\n comments: comments[key],\n key,\n value,\n })),\n unescape: true,\n });\n const node = compiler.constVariable({\n assertion: 'const',\n comment,\n exportConst: true,\n expression,\n name,\n });\n onNode(node);\n }\n },\n onNode,\n type: enumUnionType(model.enum),\n });\n};\n\nconst processScopedEnum = ({ model, onNode }: TypesProps) => {\n const properties: Record<string | number, unknown> = {};\n const comments: Record<string | number, Comments> = {};\n model.enum.forEach((enumerator) => {\n const { key, value } = enumEntry(enumerator);\n properties[key] = value;\n const comment = enumerator.customDescription || enumerator.description;\n if (comment) {\n comments[key] = [escapeComment(comment)];\n }\n });\n onNode(\n compiler.enumDeclaration({\n comments,\n leadingComment: [\n model.description && escapeComment(model.description),\n model.deprecated && '@deprecated',\n ],\n name: model.meta?.name || model.name,\n obj: properties,\n }),\n );\n};\n\nconst processType = ({ client, model, onNode }: TypesProps) => {\n generateType({\n client,\n comment: [\n model.description && escapeComment(model.description),\n model.deprecated && '@deprecated',\n ],\n meta: model.meta,\n onNode,\n type: toType(model),\n });\n};\n\nconst processModel = (props: TypesProps) => {\n switch (props.model.export) {\n case 'all-of':\n case 'any-of':\n case 'one-of':\n case 'interface':\n return processComposition(props);\n case 'enum':\n return processEnum(props);\n default:\n return processType(props);\n }\n};\n\ninterface MethodMap {\n $ref?: string;\n req?: OperationParameter[];\n res?: Record<number | string, Model>;\n}\n\ntype PathMap = {\n [method in Method]?: MethodMap;\n};\n\ntype PathsMap = Record<string, PathMap>;\n\nconst processServiceTypes = ({\n client,\n onNode,\n}: Pick<TypesProps, 'client' | 'onNode'>) => {\n const pathsMap: PathsMap = {};\n\n const config = getConfig();\n\n if (\n !config.plugins['@hey-api/sdk'] &&\n !config.plugins['@hey-api/typescript']?.config.tree\n ) {\n return;\n }\n\n const isLegacy = isLegacyClient(config);\n\n for (const service of client.services) {\n for (const operation of service.operations) {\n if (!operation.parameters.length && !operation.responses.length) {\n continue;\n }\n\n if (!pathsMap[operation.path]) {\n pathsMap[operation.path] = {};\n }\n const pathMap = pathsMap[operation.path]!;\n\n if (!pathMap[operation.method]) {\n pathMap[operation.method] = {};\n }\n const methodMap = pathMap[operation.method]!;\n methodMap.$ref = operation.name;\n\n if (operation.responses.length > 0) {\n if (!methodMap.res) {\n methodMap.res = {};\n }\n\n if (Array.isArray(methodMap.res)) {\n continue;\n }\n\n operation.responses.forEach((response) => {\n methodMap.res![response.code] = response;\n });\n }\n\n if (operation.parameters.length > 0) {\n let bodyParameters: OperationParameter = {\n mediaType: null,\n ...emptyModel,\n in: 'body',\n name: 'body',\n prop: 'body',\n };\n let bodyParameter = operation.parameters.filter(\n (parameter) => parameter.in === 'body',\n );\n if (!bodyParameter.length) {\n bodyParameter = operation.parameters.filter(\n (parameter) => parameter.in === 'formData',\n );\n }\n\n if (bodyParameter.length === 1) {\n bodyParameters = {\n ...emptyModel,\n ...bodyParameter[0]!,\n in: 'body',\n isRequired: bodyParameter[0]!.isRequired,\n name: 'body',\n prop: 'body',\n };\n // assume we have multiple formData parameters from Swagger 2.0\n } else if (bodyParameter.length > 1) {\n bodyParameters = {\n ...emptyModel,\n in: 'body',\n isRequired: bodyParameter.some((parameter) => parameter.isRequired),\n mediaType: 'multipart/form-data',\n name: 'body',\n prop: 'body',\n properties: bodyParameter,\n };\n }\n\n const headerParameters: OperationParameter = {\n ...emptyModel,\n in: 'header',\n isRequired: isOperationParameterRequired(\n operation.parameters.filter(\n (parameter) => parameter.in === 'header',\n ),\n ),\n mediaType: null,\n name: isLegacy ? 'header' : 'headers',\n prop: isLegacy ? 'header' : 'headers',\n properties: operation.parameters\n .filter((parameter) => parameter.in === 'header')\n .sort(sorterByName),\n };\n const pathParameters: OperationParameter = {\n ...emptyModel,\n in: 'path',\n isRequired: isOperationParameterRequired(\n operation.parameters.filter((parameter) => parameter.in === 'path'),\n ),\n mediaType: null,\n name: 'path',\n prop: 'path',\n properties: operation.parameters\n .filter((parameter) => parameter.in === 'path')\n .sort(sorterByName),\n };\n const queryParameters: OperationParameter = {\n ...emptyModel,\n in: 'query',\n isRequired: isOperationParameterRequired(\n operation.parameters.filter(\n (parameter) => parameter.in === 'query',\n ),\n ),\n mediaType: null,\n name: 'query',\n prop: 'query',\n properties: operation.parameters\n .filter((parameter) => parameter.in === 'query')\n .sort(sorterByName),\n };\n const operationProperties = !isLegacy\n ? [\n bodyParameters,\n headerParameters,\n pathParameters,\n queryParameters,\n ].filter(\n (param) =>\n param.properties.length ||\n param.$refs.length ||\n param.mediaType,\n )\n : sortByName([...operation.parameters]);\n\n methodMap.req = operationProperties;\n\n // create type export for operation data\n generateType({\n client,\n meta: {\n // TODO: this should be exact ref to operation for consistency,\n // but name should work too as operation ID is unique\n $ref: operation.name,\n name: operation.name,\n },\n nameTransformer: operationDataTypeName,\n onNode,\n type: toType({\n ...emptyModel,\n isRequired: true,\n properties: operationProperties,\n }),\n });\n }\n\n const successResponses = operation.responses.filter((response) =>\n response.responseTypes.includes('success'),\n );\n\n if (successResponses.length > 0) {\n // create type export for operation response\n generateType({\n client,\n meta: {\n // TODO: this should be exact ref to operation for consistency,\n // but name should work too as operation ID is unique\n $ref: operation.name,\n name: operation.name,\n },\n nameTransformer: operationResponseTypeName,\n onNode,\n type: toType({\n ...emptyModel,\n export: 'any-of',\n isRequired: true,\n properties: successResponses,\n }),\n });\n\n const errorResponses = operation.responses.filter((response) =>\n response.responseTypes.includes('error'),\n );\n\n if (!isLegacy) {\n // create type export for operation error\n generateType({\n client,\n meta: {\n // TODO: this should be exact ref to operation for consistency,\n // but name should work too as operation ID is unique\n $ref: operation.name,\n name: operation.name,\n },\n nameTransformer: operationErrorTypeName,\n onNode,\n type: toType(\n errorResponses.length\n ? {\n ...emptyModel,\n export: 'one-of',\n isRequired: true,\n properties: errorResponses,\n }\n : {\n ...emptyModel,\n base: 'unknown',\n isRequired: true,\n type: 'unknown',\n },\n ),\n });\n }\n }\n }\n }\n\n const properties = Object.entries(pathsMap).map(([path, pathMap]) => {\n const pathParameters = Object.entries(pathMap)\n .map(([_method, methodMap]) => {\n const method = _method as Method;\n\n let methodParameters: Model[] = [];\n\n if (methodMap.req) {\n const operationName = methodMap.$ref!;\n const { name: base } = setUniqueTypeName({\n client,\n meta: {\n // TODO: this should be exact ref to operation for consistency,\n // but name should work too as operation ID is unique\n $ref: operationName,\n name: operationName,\n },\n nameTransformer: operationDataTypeName,\n });\n const reqKey: Model = {\n ...emptyModel,\n base,\n export: 'reference',\n isRequired: true,\n name: 'req',\n properties: [],\n type: base,\n };\n methodParameters = [...methodParameters, reqKey];\n }\n\n if (methodMap.res) {\n const reqResParameters = Object.entries(methodMap.res).map(\n ([code, base]) => {\n // TODO: move query params into separate query key\n const value: Model = {\n ...emptyModel,\n ...base,\n isRequired: true,\n name: String(code),\n };\n return value;\n },\n );\n\n const resKey: Model = {\n ...emptyModel,\n isRequired: true,\n name: 'res',\n properties: reqResParameters,\n };\n methodParameters = [...methodParameters, resKey];\n }\n\n const methodKey: Model = {\n ...emptyModel,\n isRequired: true,\n name: method.toLocaleLowerCase(),\n properties: methodParameters,\n };\n return methodKey;\n })\n .filter(Boolean);\n const pathKey: Model = {\n ...emptyModel,\n isRequired: true,\n name: `'${path}'`,\n properties: pathParameters as Model[],\n };\n return pathKey;\n });\n\n if (config.plugins['@hey-api/typescript']?.config.tree) {\n generateType({\n client,\n meta: {\n $ref: '@hey-api/openapi-ts',\n name: treeName,\n },\n onNode,\n type: toType({\n ...emptyModel,\n properties,\n }),\n });\n }\n};\n\nexport const handlerLegacy: HeyApiTypeScriptPlugin['LegacyHandler'] = ({\n client,\n files,\n plugin,\n}) => {\n const config = getConfig();\n\n files.types = new TypeScriptFile({\n dir: config.output.path,\n exportFromIndex: plugin.config.exportFromIndex,\n id: 'types',\n name: 'types.ts',\n });\n\n const onNode: TypesProps['onNode'] = (node) => {\n files.types?.add(node);\n };\n\n for (const model of client.models) {\n processModel({ client, model, onNode });\n }\n\n processServiceTypes({ client, onNode });\n};\n","import type ts from 'typescript';\n\nimport { compiler } from '../../../compiler';\nimport { createOperationKey } from '../../../ir/operation';\nimport type { ModelMeta, OperationResponse } from '../../../types/client';\nimport { getConfig } from '../../../utils/config';\nimport { isModelDate, unsetUniqueTypeName } from '../../../utils/type';\nimport {\n modelResponseTransformerTypeName,\n operationResponseTransformerTypeName,\n operationResponseTypeName,\n} from '../sdk/plugin-legacy';\nimport { generateType, type TypesProps } from '../typescript/plugin-legacy';\nimport type { HeyApiTransformersPlugin } from './types';\n\ninterface ModelProps extends TypesProps {\n meta?: ModelMeta;\n path: Array<string>;\n}\n\nconst dataVariableName = 'data';\n\nconst isVoidResponse = (response: OperationResponse) =>\n response.base === 'unknown' &&\n response.export === 'generic' &&\n response.type === 'unknown';\n\nconst getRefModels = ({\n client,\n model,\n}: Pick<TypesProps, 'client' | 'model'>) => {\n const refModels = model.$refs.map((ref) => {\n const refModel = client.models.find((model) => model.meta?.$ref === ref);\n if (!refModel) {\n throw new Error(\n `Ref ${ref} could not be found. Transformers cannot be generated without having access to all refs.`,\n );\n }\n return refModel;\n });\n return refModels;\n};\n\nconst ensureModelResponseTransformerExists = (\n props: Omit<ModelProps, 'path'>,\n) => {\n const modelName = props.model.meta!.name;\n\n const { name } = generateType({\n ...props,\n meta: {\n $ref: `transformers/${modelName}`,\n name: modelName,\n },\n nameTransformer: modelResponseTransformerTypeName,\n onCreated: (name) => {\n const statements = processModel({\n ...props,\n meta: {\n $ref: `transformers/${modelName}`,\n name,\n },\n path: [dataVariableName],\n });\n generateResponseTransformer({\n ...props,\n async: false,\n name,\n statements,\n });\n },\n type: `(${dataVariableName}: any) => ${modelName}`,\n });\n\n const result = {\n created: Boolean(props.client.types[name]),\n name,\n };\n return result;\n};\n\nconst processArray = (props: ModelProps) => {\n const { model } = props;\n const refModels = getRefModels(props);\n\n if (refModels.length === 1) {\n const { created, name: nameModelResponseTransformer } =\n ensureModelResponseTransformerExists({ ...props, model: refModels[0]! });\n\n if (!created) {\n return [];\n }\n\n return [\n compiler.transformArrayMutation({\n path: props.path,\n transformerName: nameModelResponseTransformer,\n }),\n ];\n }\n\n if (\n isModelDate(model) ||\n (model.link &&\n !Array.isArray(model.link) &&\n model.link.export === 'any-of' &&\n model.link.properties.find((property) => isModelDate(property)))\n ) {\n return [\n compiler.transformArrayMap({\n path: props.path,\n transformExpression: compiler.conditionalExpression({\n condition: compiler.identifier({ text: 'item' }),\n whenFalse: compiler.identifier({ text: 'item' }),\n whenTrue: compiler.transformNewDate({\n parameterName: 'item',\n }),\n }),\n }),\n ];\n }\n\n // Not transform for this type\n return [];\n};\n\nconst processProperty = (props: ModelProps) => {\n const { model } = props;\n const path = [...props.path, model.name];\n\n if (\n model.type === 'string' &&\n model.export !== 'array' &&\n isModelDate(model)\n ) {\n return [compiler.transformDateMutation({ path })];\n }\n\n // otherwise we recurse in case it's an object/array, and if it's not that will just bail with []\n return processModel({\n ...props,\n model,\n path,\n });\n};\n\nconst processModel = (props: ModelProps): ts.Statement[] => {\n const { model } = props;\n\n switch (model.export) {\n case 'array':\n return processArray(props);\n case 'interface':\n return model.properties.flatMap((property) =>\n processProperty({ ...props, model: property }),\n );\n case 'reference': {\n if (model.$refs.length !== 1) {\n return [];\n }\n const refModels = getRefModels(props);\n\n const { created, name: nameModelResponseTransformer } =\n ensureModelResponseTransformerExists({\n ...props,\n model: refModels[0]!,\n });\n\n if (!created) {\n return [];\n }\n\n return model.in === 'response'\n ? [\n compiler.expressionToStatement({\n expression: compiler.callExpression({\n functionName: nameModelResponseTransformer,\n parameters: [dataVariableName],\n }),\n }),\n ]\n : compiler.transformFunctionMutation({\n path: props.path,\n transformerName: nameModelResponseTransformer,\n });\n }\n // unsupported\n default:\n return [];\n }\n};\n\nconst generateResponseTransformer = ({\n async,\n client,\n name,\n onNode,\n onRemoveNode,\n statements,\n}: Pick<TypesProps, 'client' | 'onNode' | 'onRemoveNode'> & {\n async: boolean;\n name: string;\n statements: Array<ts.Statement>;\n}) => {\n const result = {\n created: false,\n name,\n };\n\n if (!statements.length) {\n // clean up created type for response transformer if it turns out\n // the transformer was never generated\n unsetUniqueTypeName({\n client,\n name,\n });\n onRemoveNode?.();\n return result;\n }\n\n const expression = compiler.arrowFunction({\n async,\n multiLine: true,\n parameters: [\n {\n name: dataVariableName,\n },\n ],\n statements: [\n ...statements,\n compiler.returnVariable({\n expression: dataVariableName,\n }),\n ],\n });\n const statement = compiler.constVariable({\n exportConst: true,\n expression,\n name,\n typeName: name,\n });\n onNode(statement);\n\n return {\n created: true,\n name,\n };\n};\n\n// handles only response transformers for now\nexport const handlerLegacy: HeyApiTransformersPlugin['LegacyHandler'] = ({\n client,\n files,\n}) => {\n const config = getConfig();\n\n const onNode: TypesProps['onNode'] = (node) => {\n files.types?.add(node);\n };\n const onRemoveNode: TypesProps['onRemoveNode'] = () => {\n files.types?.removeNode();\n };\n\n for (const service of client.services) {\n for (const operation of service.operations) {\n const successResponses = operation.responses.filter((response) =>\n response.responseTypes.includes('success'),\n );\n\n if (!successResponses.length) {\n continue;\n }\n\n const nonVoidResponses = successResponses.filter(\n (response) => !isVoidResponse(response),\n );\n\n if (!nonVoidResponses.length) {\n continue;\n }\n\n if (nonVoidResponses.length > 1) {\n if (config.logs.level === 'debug') {\n console.warn(\n `❗️ Transformers warning: route ${createOperationKey(operation)} has ${nonVoidResponses.length} non-void success responses. This is currently not handled and we will not generate a response transformer. Please open an issue if you'd like this feature https://github.com/hey-api/openapi-ts/issues`,\n );\n }\n continue;\n }\n\n const name = operationResponseTypeName(operation.name);\n generateType({\n client,\n meta: {\n $ref: `transformers/${name}`,\n name,\n },\n nameTransformer: operationResponseTransformerTypeName,\n onCreated: (nameCreated) => {\n const statements =\n successResponses.length > 1\n ? successResponses.flatMap((response) => {\n const statements = processModel({\n client,\n meta: {\n $ref: `transformers/${name}`,\n name,\n },\n model: response,\n onNode,\n onRemoveNode,\n path: [dataVariableName],\n });\n\n // assume unprocessed responses are void\n if (!statements.length) {\n return [];\n }\n\n return [\n compiler.ifStatement({\n expression: compiler.safeAccessExpression(['data']),\n thenStatement: compiler.block({ statements }),\n }),\n ];\n })\n : processModel({\n client,\n meta: {\n $ref: `transformers/${name}`,\n name,\n },\n model: successResponses[0]!,\n onNode,\n onRemoveNode,\n path: [dataVariableName],\n });\n generateResponseTransformer({\n async: true,\n client,\n name: nameCreated,\n onNode,\n onRemoveNode,\n statements,\n });\n },\n onNode,\n type: `(${dataVariableName}: any) => Promise<${name}>`,\n });\n }\n }\n};\n","import { definePluginConfig } from '../../shared/utils/config';\nimport { handler } from './plugin';\nimport { handlerLegacy } from './plugin-legacy';\nimport type { HeyApiTransformersPlugin } from './types';\n\nexport const defaultConfig: HeyApiTransformersPlugin['Config'] = {\n config: {\n bigInt: true,\n dates: true,\n exportFromIndex: false,\n },\n dependencies: ['@hey-api/typescript'],\n handler,\n handlerLegacy,\n name: '@hey-api/transformers',\n output: 'transformers',\n tags: ['transformer'],\n};\n\n/**\n * Type helper for `@hey-api/transformers`, returns {@link Plugin.Config} object\n */\nexport const defineConfig = definePluginConfig(defaultConfig);\n","import ts from 'typescript';\n\nimport type { IR } from '../../../ir/types';\nimport { numberRegExp } from '../../../utils/regexp';\nimport { stringCase } from '../../../utils/stringCase';\n\n/**\n * Returns final field name for object properties. This might differ from the\n * original value as applying case transform function might alter it.\n */\nexport const fieldName = ({\n context,\n name,\n}: {\n context: IR.Context;\n name: string;\n}) => {\n numberRegExp.lastIndex = 0;\n if (numberRegExp.test(name)) {\n // For negative numbers, use string literals instead\n if (name.startsWith('-')) {\n return ts.factory.createStringLiteral(name);\n }\n return ts.factory.createNumericLiteral(name);\n }\n\n // if (typeof context.config.output.case === 'function') {\n // return context.config.output.case({ value: name });\n // }\n\n return stringCase({ case: context.config.output.case, value: name });\n};\n","import type { Comments } from '../../../compiler';\nimport type { IR } from '../../../ir/types';\nimport { escapeComment } from '../../../utils/escape';\n\nexport const createSchemaComment = ({\n schema,\n}: {\n schema: IR.SchemaObject;\n}): Comments | undefined => {\n const comments: Array<string> = [];\n\n if (schema.title) {\n comments.push(escapeComment(schema.title));\n }\n\n if (schema.description) {\n comments.push(escapeComment(schema.description));\n }\n\n if (schema.deprecated) {\n comments.push('@deprecated');\n }\n\n return comments.length ? comments : undefined;\n};\n","import ts from 'typescript';\n\nimport { compiler } from '../../../compiler';\nimport type { Identifier } from '../../../generate/files';\nimport type { IR } from '../../../ir/types';\nimport { parseUrl } from '../../../utils/url';\nimport { getClientBaseUrlKey, getClientPlugin } from '../client-core/utils';\nimport { typesId } from './ref';\nimport type { HeyApiTypeScriptPlugin } from './types';\n\nconst stringType = compiler.keywordTypeNode({ keyword: 'string' });\n\nconst serverToBaseUrlType = ({ server }: { server: IR.ServerObject }) => {\n const url = parseUrl(server.url);\n\n if (url.protocol && url.host) {\n return compiler.literalTypeNode({\n literal: compiler.stringLiteral({ text: server.url }),\n });\n }\n\n return compiler.templateLiteralType({\n value: [\n url.protocol || stringType,\n '://',\n url.host || stringType,\n url.port ? `:${url.port}` : '',\n url.path || '',\n ],\n });\n};\n\nexport const createClientOptions = ({\n identifier,\n plugin,\n servers,\n}: {\n identifier: Identifier;\n plugin: HeyApiTypeScriptPlugin['Instance'];\n servers: ReadonlyArray<IR.ServerObject>;\n}) => {\n const file = plugin.context.file({ id: typesId })!;\n\n if (!identifier.name) {\n return;\n }\n\n const client = getClientPlugin(plugin.context.config);\n\n const types: Array<ts.TypeNode> = servers.map((server) =>\n serverToBaseUrlType({ server }),\n );\n\n if (!servers.length) {\n types.push(stringType);\n } else if (\n !('strictBaseUrl' in client.config && client.config.strictBaseUrl)\n ) {\n types.push(\n compiler.typeIntersectionNode({\n types: [stringType, ts.factory.createTypeLiteralNode([])],\n }),\n );\n }\n\n const typeClientOptions = compiler.typeAliasDeclaration({\n exportType: true,\n name: identifier.name,\n type: compiler.typeInterfaceNode({\n properties: [\n {\n name: getClientBaseUrlKey(plugin.context.config),\n type: compiler.typeUnionNode({ types }),\n },\n ],\n useLegacyResolution: false,\n }),\n });\n\n file.add(typeClientOptions);\n};\n","import ts from 'typescript';\n\nimport type { Property } from '../../../compiler';\nimport { compiler } from '../../../compiler';\nimport { operationResponsesMap } from '../../../ir/operation';\nimport { deduplicateSchema } from '../../../ir/schema';\nimport type { IR } from '../../../ir/types';\nimport { irRef, isRefOpenApiComponent } from '../../../utils/ref';\nimport { numberRegExp } from '../../../utils/regexp';\nimport { stringCase } from '../../../utils/stringCase';\nimport { fieldName } from '../../shared/utils/case';\nimport { operationIrRef } from '../../shared/utils/ref';\nimport { createSchemaComment } from '../../shared/utils/schema';\nimport { createClientOptions } from './clientOptions';\nimport { typesId } from './ref';\nimport type { HeyApiTypeScriptPlugin } from './types';\n\ninterface SchemaWithType<T extends Required<IR.SchemaObject>['type']>\n extends Omit<IR.SchemaObject, 'type'> {\n type: Extract<Required<IR.SchemaObject>['type'], T>;\n}\n\ninterface State {\n /**\n * If set, we keep the specified properties (read-only or write-only) and\n * strip the other type.\n */\n accessScope?: 'read' | 'write';\n /**\n * Path to the currently processed field. This can be used to generate\n * deduplicated inline types. For example, if two schemas define a different\n * enum `foo`, we want to generate two unique types instead of one.\n */\n path: ReadonlyArray<string>;\n}\n\nconst addJavaScriptEnum = ({\n $ref,\n plugin,\n schema,\n}: {\n $ref: string;\n plugin: HeyApiTypeScriptPlugin['Instance'];\n schema: SchemaWithType<'enum'>;\n}) => {\n const file = plugin.context.file({ id: typesId })!;\n const identifier = file.identifier({\n $ref,\n create: true,\n namespace: 'value',\n });\n\n // TODO: parser - this is the old parser behavior where we would NOT\n // print nested enum identifiers if they already exist. This is a\n // blocker for referencing these identifiers within the file as\n // we cannot guarantee just because they have a duplicate identifier,\n // they have a duplicate value.\n if (!identifier.created) {\n return;\n }\n\n const enumObject = schemaToEnumObject({ plugin, schema });\n\n // JavaScript enums might want to ignore null values\n if (\n plugin.config.enums.constantsIgnoreNull &&\n enumObject.typeofItems.includes('object')\n ) {\n enumObject.obj = enumObject.obj.filter((item) => item.value !== null);\n }\n\n const expression = compiler.objectExpression({\n multiLine: true,\n obj: enumObject.obj,\n });\n const node = compiler.constVariable({\n assertion: 'const',\n comment: createSchemaComment({ schema }),\n exportConst: true,\n expression,\n name: identifier.name || '',\n });\n return node;\n};\n\nconst schemaToEnumObject = ({\n plugin,\n schema,\n}: {\n plugin: HeyApiTypeScriptPlugin['Instance'];\n schema: IR.SchemaObject;\n}) => {\n const typeofItems: Array<\n | 'bigint'\n | 'boolean'\n | 'function'\n | 'number'\n | 'object'\n | 'string'\n | 'symbol'\n | 'undefined'\n > = [];\n\n const obj = (schema.items ?? []).map((item, index) => {\n const typeOfItemConst = typeof item.const;\n\n if (!typeofItems.includes(typeOfItemConst)) {\n // track types of enum values because some modes support\n // only enums with string and number types\n typeofItems.push(typeOfItemConst);\n }\n\n let key: string | undefined;\n if (item.title) {\n key = item.title;\n } else if (typeOfItemConst === 'number' || typeOfItemConst === 'string') {\n key = `${item.const}`;\n } else if (typeOfItemConst === 'boolean') {\n key = item.const ? 'true' : 'false';\n } else if (item.const === null) {\n key = 'null';\n } else {\n key = `${index}`;\n }\n\n if (key) {\n key = stringCase({\n case: plugin.config.enums.case,\n stripLeadingSeparators: false,\n value: key,\n });\n\n numberRegExp.lastIndex = 0;\n // TypeScript enum keys cannot be numbers\n if (\n numberRegExp.test(key) &&\n plugin.config.enums.enabled &&\n (plugin.config.enums.mode === 'typescript' ||\n plugin.config.enums.mode === 'typescript+namespace')\n ) {\n key = `_${key}`;\n }\n }\n\n return {\n comments: createSchemaComment({ schema: item }),\n key,\n value: item.const,\n };\n });\n\n return {\n obj,\n typeofItems,\n };\n};\n\nconst addTypeEnum = ({\n $ref,\n plugin,\n schema,\n state,\n}: {\n $ref: string;\n plugin: HeyApiTypeScriptPlugin['Instance'];\n schema: SchemaWithType<'enum'>;\n state: State | undefined;\n}): ts.TypeAliasDeclaration | undefined => {\n const file = plugin.context.file({ id: typesId })!;\n const identifier = file.identifier({\n $ref,\n create: true,\n namespace: 'type',\n });\n\n // TODO: parser - this is the old parser behavior where we would NOT\n // print nested enum identifiers if they already exist. This is a\n // blocker for referencing these identifiers within the file as\n // we cannot guarantee just because they have a duplicate identifier,\n // they have a duplicate value.\n if (\n !identifier.created &&\n !isRefOpenApiComponent($ref) &&\n plugin.config.enums.mode !== 'typescript+namespace'\n ) {\n return;\n }\n\n const type = schemaToType({\n plugin,\n schema: {\n ...schema,\n type: undefined,\n },\n state,\n });\n\n if (type) {\n const node = compiler.typeAliasDeclaration({\n comment: createSchemaComment({ schema }),\n exportType: true,\n name: identifier.name || '',\n type,\n });\n return node;\n }\n\n return;\n};\n\nconst shouldCreateTypeScriptEnum = ({\n plugin,\n schema,\n}: {\n plugin: HeyApiTypeScriptPlugin['Instance'];\n schema: SchemaWithType<'enum'>;\n}) => {\n const enumObject = schemaToEnumObject({ plugin, schema });\n // TypeScript enums support only string and number values\n return !enumObject.typeofItems.filter(\n (type) => type !== 'number' && type !== 'string',\n ).length;\n};\n\nconst addTypeScriptEnum = ({\n $ref,\n plugin,\n schema,\n state,\n}: {\n $ref: string;\n plugin: HeyApiTypeScriptPlugin['Instance'];\n schema: SchemaWithType<'enum'>;\n state: State | undefined;\n}) => {\n const enumObject = schemaToEnumObject({ plugin, schema });\n\n // fallback to types\n if (!shouldCreateTypeScriptEnum({ plugin, schema })) {\n const node = addTypeEnum({\n $ref,\n plugin,\n schema,\n state,\n });\n return node;\n }\n\n const file = plugin.context.file({ id: typesId })!;\n const identifier = file.identifier({\n $ref,\n create: true,\n namespace: 'enum',\n });\n const node = compiler.enumDeclaration({\n leadingComment: createSchemaComment({ schema }),\n name: identifier.name || '',\n obj: enumObject.obj,\n });\n return node;\n};\n\nconst arrayTypeToIdentifier = ({\n namespace,\n plugin,\n schema,\n state,\n}: {\n namespace: Array<ts.Statement>;\n plugin: HeyApiTypeScriptPlugin['Instance'];\n schema: SchemaWithType<'array'>;\n state: State | undefined;\n}): ts.TypeNode | undefined => {\n if (!schema.items) {\n return compiler.typeArrayNode(\n compiler.keywordTypeNode({\n keyword: 'unknown',\n }),\n );\n }\n\n schema = deduplicateSchema({ detectFormat: false, schema });\n\n const itemTypes: Array<ts.TypeNode> = [];\n\n for (const item of schema.items!) {\n const type = schemaToType({\n namespace,\n plugin,\n schema: item,\n state,\n });\n\n if (type) {\n itemTypes.push(type);\n }\n }\n\n if (!itemTypes.length) {\n return;\n }\n\n if (itemTypes.length === 1) {\n return compiler.typeArrayNode(itemTypes[0]!);\n }\n\n if (schema.logicalOperator === 'and') {\n return compiler.typeArrayNode(\n compiler.typeIntersectionNode({ types: itemTypes }),\n );\n }\n\n return compiler.typeArrayNode(compiler.typeUnionNode({ types: itemTypes }));\n};\n\nconst booleanTypeToIdentifier = ({\n schema,\n}: {\n namespace: Array<ts.Statement>;\n schema: SchemaWithType<'boolean'>;\n}): ts.TypeNode => {\n if (schema.const !== undefined) {\n return compiler.literalTypeNode({\n literal: compiler.ots.boolean(schema.const as boolean),\n });\n }\n\n return compiler.keywordTypeNode({\n keyword: 'boolean',\n });\n};\n\nconst enumTypeToIdentifier = ({\n $ref,\n namespace,\n plugin,\n schema,\n state,\n}: {\n $ref?: string;\n namespace: Array<ts.Statement>;\n plugin: HeyApiTypeScriptPlugin['Instance'];\n schema: SchemaWithType<'enum'>;\n state: State | undefined;\n}): ts.TypeNode | undefined => {\n const file = plugin.context.file({ id: typesId })!;\n const isRefComponent = $ref ? isRefOpenApiComponent($ref) : false;\n\n if ($ref && isRefComponent) {\n // when enums are disabled (default), emit only reusable components\n // as types, otherwise the output would be broken if we skipped all enums\n if (!plugin.config.enums.enabled) {\n const typeNode = addTypeEnum({\n $ref,\n plugin,\n schema,\n state,\n });\n if (typeNode) {\n file.add(typeNode);\n }\n }\n\n if (plugin.config.enums.enabled) {\n if (plugin.config.enums.mode === 'javascript') {\n const typeNode = addTypeEnum({\n $ref,\n plugin,\n schema,\n state,\n });\n if (typeNode) {\n file.add(typeNode);\n }\n\n const objectNode = addJavaScriptEnum({\n $ref,\n plugin,\n schema,\n });\n if (objectNode) {\n file.add(objectNode);\n }\n }\n\n if (plugin.config.enums.mode === 'typescript') {\n const enumNode = addTypeScriptEnum({\n $ref,\n plugin,\n schema,\n state,\n });\n if (enumNode) {\n file.add(enumNode);\n }\n }\n\n if (plugin.config.enums.mode === 'typescript+namespace') {\n const enumNode = addTypeScriptEnum({\n $ref,\n plugin,\n schema,\n state,\n });\n if (enumNode) {\n if (isRefComponent) {\n file.add(enumNode);\n } else {\n // emit enum inside TypeScript namespace\n namespace.push(enumNode);\n }\n }\n }\n }\n }\n\n const type = schemaToType({\n plugin,\n schema: {\n ...schema,\n type: undefined,\n },\n state,\n });\n return type;\n};\n\nconst numberTypeToIdentifier = ({\n plugin,\n schema,\n}: {\n namespace: Array<ts.Statement>;\n plugin: HeyApiTypeScriptPlugin['Instance'];\n schema: SchemaWithType<'integer' | 'number'>;\n}): ts.TypeNode => {\n if (schema.const !== undefined) {\n return compiler.literalTypeNode({\n literal: compiler.ots.number(schema.const as number),\n });\n }\n\n if (schema.type === 'integer' && schema.format === 'int64') {\n // TODO: parser - add ability to skip type transformers\n if (plugin.getPlugin('@hey-api/transformers')?.config.bigInt) {\n return compiler.typeReferenceNode({ typeName: 'bigint' });\n }\n }\n\n return compiler.keywordTypeNode({\n keyword: 'number',\n });\n};\n\nconst objectTypeToIdentifier = ({\n namespace,\n plugin,\n schema,\n state,\n}: {\n namespace: Array<ts.Statement>;\n plugin: HeyApiTypeScriptPlugin['Instance'];\n schema: SchemaWithType<'object'>;\n state: State | undefined;\n}): ts.TypeNode | undefined => {\n const file = plugin.context.file({ id: typesId })!;\n\n // TODO: parser - handle constants\n let indexKey: string | undefined;\n let indexProperty: Property | undefined;\n const schemaProperties: Array<Property> = [];\n let indexPropertyItems: Array<IR.SchemaObject> = [];\n const required = schema.required ?? [];\n let hasOptionalProperties = false;\n\n for (const name in schema.properties) {\n const property = schema.properties[name]!;\n\n const propertyType = schemaToType({\n $ref: state ? [...state.path, name].join('/') : `${irRef}${name}`,\n namespace,\n plugin,\n schema: property,\n state,\n });\n\n if (!propertyType) {\n continue;\n }\n\n const isRequired = required.includes(name);\n schemaProperties.push({\n comment: createSchemaComment({ schema: property }),\n isReadOnly: property.accessScope === 'read',\n isRequired,\n name: fieldName({ context: plugin.context, name }),\n type: propertyType,\n });\n indexPropertyItems.push(property);\n\n if (!isRequired) {\n hasOptionalProperties = true;\n }\n }\n\n if (\n schema.additionalProperties &&\n (schema.additionalProperties.type !== 'never' || !indexPropertyItems.length)\n ) {\n if (schema.additionalProperties.type === 'never') {\n indexPropertyItems = [schema.additionalProperties];\n } else {\n indexPropertyItems.unshift(schema.additionalProperties);\n }\n\n if (hasOptionalProperties) {\n indexPropertyItems.push({\n type: 'undefined',\n });\n }\n\n indexProperty = {\n isRequired: !schema.propertyNames,\n name: 'key',\n type: schemaToType({\n namespace,\n plugin,\n schema:\n indexPropertyItems.length === 1\n ? indexPropertyItems[0]!\n : {\n items: indexPropertyItems,\n logicalOperator: 'or',\n },\n state,\n }),\n };\n\n if (schema.propertyNames?.$ref) {\n const identifier = file.identifier({\n $ref: schema.propertyNames.$ref,\n create: true,\n namespace: 'type',\n });\n if (identifier.name) {\n indexKey = identifier.name;\n }\n }\n }\n\n return compiler.typeInterfaceNode({\n indexKey,\n indexProperty,\n properties: schemaProperties,\n useLegacyResolution: false,\n });\n};\n\nconst stringTypeToIdentifier = ({\n plugin,\n schema,\n}: {\n namespace: Array<ts.Statement>;\n plugin: HeyApiTypeScriptPlugin['Instance'];\n schema: SchemaWithType<'string'>;\n}): ts.TypeNode => {\n if (schema.const !== undefined) {\n return compiler.literalTypeNode({\n literal: compiler.stringLiteral({ text: schema.const as string }),\n });\n }\n\n if (schema.format) {\n if (schema.format === 'binary') {\n return compiler.typeUnionNode({\n types: [\n compiler.typeReferenceNode({\n typeName: 'Blob',\n }),\n compiler.typeReferenceNode({\n typeName: 'File',\n }),\n ],\n });\n }\n\n if (schema.format === 'date-time' || schema.format === 'date') {\n // TODO: parser - add ability to skip type transformers\n if (plugin.getPlugin('@hey-api/transformers')?.config.dates) {\n return compiler.typeReferenceNode({ typeName: 'Date' });\n }\n }\n }\n\n return compiler.keywordTypeNode({\n keyword: 'string',\n });\n};\n\nconst tupleTypeToIdentifier = ({\n namespace,\n plugin,\n schema,\n state,\n}: {\n namespace: Array<ts.Statement>;\n plugin: HeyApiTypeScriptPlugin['Instance'];\n schema: SchemaWithType<'tuple'>;\n state: State | undefined;\n}): ts.TypeNode | undefined => {\n let itemTypes: Array<ts.Expression | ts.TypeNode> = [];\n\n if (schema.const && Array.isArray(schema.const)) {\n itemTypes = schema.const.map((value) => {\n const expression = compiler.valueToExpression({ value });\n return expression ?? compiler.identifier({ text: 'unknown' });\n });\n } else if (schema.items) {\n for (const item of schema.items) {\n const type = schemaToType({\n namespace,\n plugin,\n schema: item,\n state,\n });\n\n if (type) {\n itemTypes.push(type);\n }\n }\n }\n\n if (!itemTypes.length) {\n return;\n }\n\n return compiler.typeTupleNode({\n types: itemTypes,\n });\n};\n\nconst schemaTypeToIdentifier = ({\n $ref,\n namespace,\n plugin,\n schema,\n state,\n}: {\n $ref?: string;\n namespace: Array<ts.Statement>;\n plugin: HeyApiTypeScriptPlugin['Instance'];\n schema: IR.SchemaObject;\n state: State | undefined;\n}): ts.TypeNode | undefined => {\n switch (schema.type as Required<IR.SchemaObject>['type']) {\n case 'array':\n return arrayTypeToIdentifier({\n namespace,\n plugin,\n schema: schema as SchemaWithType<'array'>,\n state,\n });\n case 'boolean':\n return booleanTypeToIdentifier({\n namespace,\n schema: schema as SchemaWithType<'boolean'>,\n });\n case 'enum':\n return enumTypeToIdentifier({\n $ref,\n namespace,\n plugin,\n schema: schema as SchemaWithType<'enum'>,\n state,\n });\n case 'integer':\n case 'number':\n return numberTypeToIdentifier({\n namespace,\n plugin,\n schema: schema as SchemaWithType<'integer' | 'number'>,\n });\n case 'never':\n return compiler.keywordTypeNode({\n keyword: 'never',\n });\n case 'null':\n return compiler.literalTypeNode({\n literal: compiler.null(),\n });\n case 'object':\n return objectTypeToIdentifier({\n namespace,\n plugin,\n schema: schema as SchemaWithType<'object'>,\n state,\n });\n case 'string':\n return stringTypeToIdentifier({\n namespace,\n plugin,\n schema: schema as SchemaWithType<'string'>,\n });\n case 'tuple':\n return tupleTypeToIdentifier({\n namespace,\n plugin,\n schema: schema as SchemaWithType<'tuple'>,\n state,\n });\n case 'undefined':\n return compiler.keywordTypeNode({\n keyword: 'undefined',\n });\n case 'unknown':\n return compiler.keywordTypeNode({\n keyword: 'unknown',\n });\n case 'void':\n return compiler.keywordTypeNode({\n keyword: 'void',\n });\n }\n};\n\nconst irParametersToIrSchema = ({\n parameters,\n}: {\n parameters: Record<string, IR.ParameterObject>;\n}): IR.SchemaObject => {\n const irSchema: IR.SchemaObject = {\n type: 'object',\n };\n\n if (parameters) {\n const properties: Record<string, IR.SchemaObject> = {};\n const required: Array<string> = [];\n\n for (const key in parameters) {\n const parameter = parameters[key]!;\n\n properties[parameter.name] = deduplicateSchema({\n detectFormat: false,\n schema: parameter.schema,\n });\n\n if (parameter.required) {\n required.push(parameter.name);\n }\n }\n\n irSchema.properties = properties;\n\n if (required.length) {\n irSchema.required = required;\n }\n }\n\n return irSchema;\n};\n\nconst operationToDataType = ({\n operation,\n plugin,\n}: {\n operation: IR.OperationObject;\n plugin: HeyApiTypeScriptPlugin['Instance'];\n}) => {\n const file = plugin.context.file({ id: typesId })!;\n const data: IR.SchemaObject = {\n type: 'object',\n };\n const dataRequired: Array<string> = [];\n\n if (!data.properties) {\n data.properties = {};\n }\n\n if (operation.body) {\n data.properties.body = operation.body.schema;\n\n if (operation.body.required) {\n dataRequired.push('body');\n }\n } else {\n data.properties.body = {\n type: 'never',\n };\n }\n\n // TODO: parser - handle cookie parameters\n\n // do not set headers to never so we can always pass arbitrary values\n if (operation.parameters?.header) {\n data.properties.headers = irParametersToIrSchema({\n parameters: operation.parameters.header,\n });\n\n if (data.properties.headers.required) {\n dataRequired.push('headers');\n }\n }\n\n if (operation.parameters?.path) {\n data.properties.path = irParametersToIrSchema({\n parameters: operation.parameters.path,\n });\n\n if (data.properties.path.required) {\n dataRequired.push('path');\n }\n } else {\n data.properties.path = {\n type: 'never',\n };\n }\n\n if (operation.parameters?.query) {\n data.properties.query = irParametersToIrSchema({\n parameters: operation.parameters.query,\n });\n\n if (data.properties.query.required) {\n dataRequired.push('query');\n }\n } else {\n data.properties.query = {\n type: 'never',\n };\n }\n\n data.properties.url = {\n const: operation.path,\n type: 'string',\n };\n dataRequired.push('url');\n\n data.required = dataRequired;\n\n const identifier = file.identifier({\n $ref: operationIrRef({\n config: plugin.context.config,\n id: operation.id,\n type: 'data',\n }),\n create: true,\n namespace: 'type',\n });\n const type = schemaToType({\n plugin,\n schema: data,\n state: {\n path: [operation.method, operation.path, 'data'],\n },\n });\n\n if (type) {\n const node = compiler.typeAliasDeclaration({\n exportType: true,\n name: identifier.name || '',\n type,\n });\n file.add(node);\n }\n};\n\nconst operationToType = ({\n operation,\n plugin,\n}: {\n operation: IR.OperationObject;\n plugin: HeyApiTypeScriptPlugin['Instance'];\n}) => {\n operationToDataType({ operation, plugin });\n\n const file = plugin.context.file({ id: typesId })!;\n\n const { error, errors, response, responses } =\n operationResponsesMap(operation);\n\n if (errors) {\n const identifierErrors = file.identifier({\n $ref: operationIrRef({\n config: plugin.context.config,\n id: operation.id,\n type: 'errors',\n }),\n create: true,\n namespace: 'type',\n });\n if (identifierErrors.name) {\n const type = schemaToType({\n plugin,\n schema: errors,\n state: {\n path: [operation.method, operation.path, 'errors'],\n },\n });\n\n if (type) {\n const node = compiler.typeAliasDeclaration({\n exportType: true,\n name: identifierErrors.name,\n type,\n });\n file.add(node);\n }\n\n if (error) {\n const identifierError = file.identifier({\n $ref: operationIrRef({\n config: plugin.context.config,\n id: operation.id,\n type: 'error',\n }),\n create: true,\n namespace: 'type',\n });\n if (identifierError.name) {\n const errorsType = compiler.typeReferenceNode({\n typeName: identifierErrors.name,\n });\n const keyofType = ts.factory.createTypeOperatorNode(\n ts.SyntaxKind.KeyOfKeyword,\n errorsType,\n );\n const node = compiler.typeAliasDeclaration({\n exportType: true,\n name: identifierError.name,\n type: compiler.indexedAccessTypeNode({\n indexType: keyofType,\n objectType: errorsType,\n }),\n });\n file.add(node);\n }\n }\n }\n }\n\n if (responses) {\n const identifierResponses = file.identifier({\n $ref: operationIrRef({\n config: plugin.context.config,\n id: operation.id,\n type: 'responses',\n }),\n create: true,\n namespace: 'type',\n });\n if (identifierResponses.name) {\n const type = schemaToType({\n plugin,\n schema: responses,\n state: {\n path: [operation.method, operation.path, 'responses'],\n },\n });\n\n if (type) {\n const node = compiler.typeAliasDeclaration({\n exportType: true,\n name: identifierResponses.name,\n type,\n });\n file.add(node);\n }\n\n if (response) {\n const identifierResponse = file.identifier({\n $ref: operationIrRef({\n config: plugin.context.config,\n id: operation.id,\n type: 'response',\n }),\n create: true,\n namespace: 'type',\n });\n if (identifierResponse.name) {\n const responsesType = compiler.typeReferenceNode({\n typeName: identifierResponses.name,\n });\n const keyofType = ts.factory.createTypeOperatorNode(\n ts.SyntaxKind.KeyOfKeyword,\n responsesType,\n );\n const node = compiler.typeAliasDeclaration({\n exportType: true,\n name: identifierResponse.name,\n type: compiler.indexedAccessTypeNode({\n indexType: keyofType,\n objectType: responsesType,\n }),\n });\n file.add(node);\n }\n }\n }\n }\n};\n\nexport const schemaToType = ({\n $ref,\n namespace = [],\n plugin,\n schema,\n state,\n}: {\n $ref?: string;\n namespace?: Array<ts.Statement>;\n plugin: HeyApiTypeScriptPlugin['Instance'];\n schema: IR.SchemaObject;\n state: State | undefined;\n}): ts.TypeNode | undefined => {\n const file = plugin.context.file({ id: typesId })!;\n\n let type: ts.TypeNode | undefined;\n\n if (schema.$ref) {\n const refSchema = plugin.context.resolveIrRef<IR.SchemaObject>(schema.$ref);\n\n const identifier = file.identifier({\n $ref: schema.$ref,\n create: true,\n namespace:\n refSchema.type === 'enum' &&\n plugin.config.enums.enabled &&\n (plugin.config.enums.mode === 'typescript' ||\n plugin.config.enums.mode === 'typescript+namespace') &&\n shouldCreateTypeScriptEnum({\n plugin,\n schema: refSchema as SchemaWithType<'enum'>,\n })\n ? 'enum'\n : 'type',\n });\n type = compiler.typeReferenceNode({\n typeName: identifier.name || '',\n });\n } else if (schema.type) {\n type = schemaTypeToIdentifier({\n $ref,\n namespace,\n plugin,\n schema,\n state,\n });\n } else if (schema.items) {\n schema = deduplicateSchema({ detectFormat: false, schema });\n if (schema.items) {\n const itemTypes: Array<ts.TypeNode> = [];\n\n for (const item of schema.items) {\n // TODO: correctly populate state.path\n const type = schemaToType({\n namespace,\n plugin,\n schema: item,\n state,\n });\n if (type) {\n itemTypes.push(type);\n }\n }\n\n type =\n schema.logicalOperator === 'and'\n ? compiler.typeIntersectionNode({ types: itemTypes })\n : compiler.typeUnionNode({ types: itemTypes });\n } else {\n // TODO: correctly populate state.path\n type = schemaToType({\n namespace,\n plugin,\n schema,\n state,\n });\n }\n } else {\n // catch-all fallback for failed schemas\n type = schemaTypeToIdentifier({\n namespace,\n plugin,\n schema: {\n type: 'unknown',\n },\n state,\n });\n }\n\n // emit nodes only if $ref points to a reusable component\n if ($ref && isRefOpenApiComponent($ref)) {\n // emit namespace if it has any members\n if (namespace.length) {\n const identifier = file.identifier({\n $ref,\n create: true,\n namespace: 'value',\n });\n const node = compiler.namespaceDeclaration({\n name: identifier.name || '',\n statements: namespace,\n });\n file.add(node);\n }\n\n // enum handler emits its own artifacts\n if (schema.type !== 'enum' && type) {\n const identifier = file.identifier({\n $ref,\n create: true,\n namespace: 'type',\n });\n const node = compiler.typeAliasDeclaration({\n comment: createSchemaComment({ schema }),\n exportType: true,\n name: identifier.name || '',\n type,\n });\n file.add(node);\n }\n }\n\n return type;\n};\n\nexport const handler: HeyApiTypeScriptPlugin['Handler'] = ({ plugin }) => {\n const file = plugin.createFile({\n id: typesId,\n identifierCase: plugin.config.case,\n path: plugin.output,\n });\n\n // reserve identifier for ClientOptions\n const clientOptions = file.identifier({\n $ref: 'ClientOptions',\n create: true,\n namespace: 'type',\n });\n\n const servers: Array<IR.ServerObject> = [];\n\n plugin.forEach(\n 'operation',\n 'parameter',\n 'requestBody',\n 'schema',\n 'server',\n (event) => {\n if (event.type === 'operation') {\n operationToType({ operation: event.operation, plugin });\n } else if (event.type === 'parameter') {\n schemaToType({\n $ref: event.$ref,\n plugin,\n schema: event.parameter.schema,\n state: {\n // TODO: correctly populate state.path\n path: [],\n },\n });\n } else if (event.type === 'requestBody') {\n schemaToType({\n $ref: event.$ref,\n plugin,\n schema: event.requestBody.schema,\n state: {\n // TODO: correctly populate state.path\n path: [],\n },\n });\n } else if (event.type === 'schema') {\n schemaToType({\n $ref: event.$ref,\n plugin,\n schema: event.schema,\n state: {\n // TODO: correctly populate state.path\n path: [],\n },\n });\n } else if (event.type === 'server') {\n servers.push(event.server);\n }\n },\n );\n\n createClientOptions({ identifier: clientOptions, plugin, servers });\n};\n","import { definePluginConfig } from '../../shared/utils/config';\nimport { handler } from './plugin';\nimport { handlerLegacy } from './plugin-legacy';\nimport type { HeyApiTypeScriptPlugin } from './types';\n\nexport const defaultConfig: HeyApiTypeScriptPlugin['Config'] = {\n config: {\n case: 'PascalCase',\n exportFromIndex: true,\n style: 'preserve',\n tree: false,\n },\n handler,\n handlerLegacy,\n name: '@hey-api/typescript',\n output: 'types',\n resolveConfig: (plugin, context) => {\n plugin.config.enums = context.valueToObject({\n defaultValue: {\n case: 'SCREAMING_SNAKE_CASE',\n constantsIgnoreNull: false,\n enabled: Boolean(plugin.config.enums),\n mode: 'javascript',\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n string: (mode) => ({ mode }),\n },\n value: plugin.config.enums,\n });\n },\n};\n\n/**\n * Type helper for `@hey-api/typescript` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig = definePluginConfig(defaultConfig);\n","import type { ImportExportItemObject } from '../../../compiler/utils';\nimport type { IR } from '../../../ir/types';\nimport { getClientPlugin } from '../../@hey-api/client-core/utils';\nimport { operationOptionsType } from '../../@hey-api/sdk/operation';\nimport { importIdentifier } from '../../@hey-api/typescript/ref';\nimport type { PluginInstance } from './types';\n\nexport const useTypeData = ({\n operation,\n plugin,\n}: {\n operation: IR.OperationObject;\n plugin: PluginInstance;\n}) => {\n const file = plugin.context.file({ id: plugin.name })!;\n\n const typeData = operationOptionsType({\n context: plugin.context,\n file,\n operation,\n });\n return typeData;\n};\n\nexport const useTypeError = ({\n operation,\n plugin,\n}: {\n operation: IR.OperationObject;\n plugin: PluginInstance;\n}) => {\n const file = plugin.context.file({ id: plugin.name })!;\n const identifierError = importIdentifier({\n context: plugin.context,\n file,\n operation,\n type: 'error',\n });\n let typeError: ImportExportItemObject = {\n asType: true,\n name: identifierError.name || '',\n };\n if (!typeError.name) {\n typeError = file.import({\n asType: true,\n module: plugin.name,\n name: 'DefaultError',\n });\n }\n const client = getClientPlugin(plugin.context.config);\n if (client.name === '@hey-api/client-axios') {\n const axiosError = file.import({\n asType: true,\n module: 'axios',\n name: 'AxiosError',\n });\n typeError = {\n ...axiosError,\n name: `${axiosError.name}<${typeError.name}>`,\n };\n }\n return typeError;\n};\n\nexport const useTypeResponse = ({\n operation,\n plugin,\n}: {\n operation: IR.OperationObject;\n plugin: PluginInstance;\n}) => {\n const file = plugin.context.file({ id: plugin.name })!;\n const identifierResponse = importIdentifier({\n context: plugin.context,\n file,\n operation,\n type: 'response',\n });\n const typeResponse = identifierResponse.name || 'unknown';\n return typeResponse;\n};\n","import { compiler, type Property } from '../../../compiler';\nimport { clientApi } from '../../../generate/client';\nimport { hasOperationDataRequired } from '../../../ir/operation';\nimport type { IR } from '../../../ir/types';\nimport { getClientBaseUrlKey } from '../../@hey-api/client-core/utils';\nimport type { PluginInstance } from './types';\nimport { useTypeData } from './useType';\n\nconst createQueryKeyFn = 'createQueryKey';\nexport const queryKeyName = 'QueryKey';\nconst TOptionsType = 'TOptions';\n\nconst infiniteIdentifier = compiler.identifier({ text: 'infinite' });\nconst optionsIdentifier = compiler.identifier({ text: 'options' });\n\nexport const createQueryKeyFunction = ({\n plugin,\n}: {\n plugin: PluginInstance;\n}) => {\n const file = plugin.context.file({ id: plugin.name })!;\n\n const identifierCreateQueryKey = file.identifier({\n // TODO: refactor for better cross-plugin compatibility\n $ref: `#/tanstack-query-create-query-key/${createQueryKeyFn}`,\n case: plugin.config.case,\n create: true,\n namespace: 'value',\n });\n\n if (identifierCreateQueryKey.name) {\n const returnType = compiler.indexedAccessTypeNode({\n indexType: compiler.literalTypeNode({\n literal: compiler.ots.number(0),\n }),\n objectType: compiler.typeReferenceNode({\n typeArguments: [compiler.typeReferenceNode({ typeName: TOptionsType })],\n typeName: queryKeyName,\n }),\n });\n\n const fn = compiler.constVariable({\n expression: compiler.arrowFunction({\n multiLine: true,\n parameters: [\n {\n name: 'id',\n type: compiler.typeReferenceNode({ typeName: 'string' }),\n },\n {\n isRequired: false,\n name: 'options',\n type: compiler.typeReferenceNode({ typeName: TOptionsType }),\n },\n {\n isRequired: false,\n name: 'infinite',\n type: compiler.typeReferenceNode({ typeName: 'boolean' }),\n },\n ],\n returnType: compiler.typeTupleNode({\n types: [returnType],\n }),\n statements: [\n compiler.constVariable({\n assertion: returnType,\n expression: compiler.objectExpression({\n multiLine: false,\n obj: [\n {\n key: '_id',\n value: compiler.identifier({ text: 'id' }),\n },\n {\n key: getClientBaseUrlKey(plugin.context.config),\n value: compiler.identifier({\n text: `(options?.client ?? _heyApiClient).getConfig().${getClientBaseUrlKey(plugin.context.config)}`,\n }),\n },\n ],\n }),\n name: 'params',\n typeName: returnType,\n }),\n compiler.ifStatement({\n expression: infiniteIdentifier,\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: '_infinite',\n }),\n right: infiniteIdentifier,\n }),\n }),\n ],\n }),\n }),\n compiler.ifStatement({\n expression: compiler.propertyAccessExpression({\n expression: optionsIdentifier,\n isOptional: true,\n name: compiler.identifier({ text: 'body' }),\n }),\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: 'body',\n }),\n right: compiler.propertyAccessExpression({\n expression: 'options',\n name: 'body',\n }),\n }),\n }),\n ],\n }),\n }),\n compiler.ifStatement({\n expression: compiler.propertyAccessExpression({\n expression: optionsIdentifier,\n isOptional: true,\n name: compiler.identifier({ text: 'headers' }),\n }),\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: 'headers',\n }),\n right: compiler.propertyAccessExpression({\n expression: 'options',\n name: 'headers',\n }),\n }),\n }),\n ],\n }),\n }),\n compiler.ifStatement({\n expression: compiler.propertyAccessExpression({\n expression: optionsIdentifier,\n isOptional: true,\n name: compiler.identifier({ text: 'path' }),\n }),\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: 'path',\n }),\n right: compiler.propertyAccessExpression({\n expression: 'options',\n name: 'path',\n }),\n }),\n }),\n ],\n }),\n }),\n compiler.ifStatement({\n expression: compiler.propertyAccessExpression({\n expression: optionsIdentifier,\n isOptional: true,\n name: compiler.identifier({ text: 'query' }),\n }),\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: 'query',\n }),\n right: compiler.propertyAccessExpression({\n expression: 'options',\n name: 'query',\n }),\n }),\n }),\n ],\n }),\n }),\n compiler.returnStatement({\n expression: compiler.arrayLiteralExpression({\n elements: [compiler.identifier({ text: 'params' })],\n }),\n }),\n ],\n types: [\n {\n extends: compiler.typeReferenceNode({\n typeName: compiler.identifier({\n text: clientApi.Options.name,\n }),\n }),\n name: TOptionsType,\n },\n ],\n }),\n name: identifierCreateQueryKey.name,\n });\n file.add(fn);\n }\n};\n\nconst createQueryKeyLiteral = ({\n id,\n isInfinite,\n plugin,\n}: {\n id: string;\n isInfinite?: boolean;\n plugin: PluginInstance;\n}) => {\n const file = plugin.context.file({ id: plugin.name })!;\n const identifierCreateQueryKey = file.identifier({\n // TODO: refactor for better cross-plugin compatibility\n $ref: `#/tanstack-query-create-query-key/${createQueryKeyFn}`,\n case: plugin.config.case,\n namespace: 'value',\n });\n const createQueryKeyCallExpression = compiler.callExpression({\n functionName: identifierCreateQueryKey.name || '',\n parameters: [\n compiler.ots.string(id),\n 'options',\n isInfinite ? compiler.ots.boolean(true) : undefined,\n ],\n });\n return createQueryKeyCallExpression;\n};\n\nexport const createQueryKeyType = ({ plugin }: { plugin: PluginInstance }) => {\n const file = plugin.context.file({ id: plugin.name })!;\n\n const properties: Property[] = [\n {\n name: '_id',\n type: compiler.keywordTypeNode({\n keyword: 'string',\n }),\n },\n {\n isRequired: false,\n name: '_infinite',\n type: compiler.keywordTypeNode({\n keyword: 'boolean',\n }),\n },\n ];\n\n const queryKeyType = compiler.typeAliasDeclaration({\n exportType: true,\n name: queryKeyName,\n type: compiler.typeTupleNode({\n types: [\n compiler.typeIntersectionNode({\n types: [\n compiler.typeReferenceNode({\n typeName: `Pick<${TOptionsType}, '${getClientBaseUrlKey(plugin.context.config)}' | 'body' | 'headers' | 'path' | 'query'>`,\n }),\n compiler.typeInterfaceNode({\n properties,\n useLegacyResolution: true,\n }),\n ],\n }),\n ],\n }),\n typeParameters: [\n {\n extends: compiler.typeReferenceNode({\n typeName: compiler.identifier({\n text: clientApi.Options.name,\n }),\n }),\n name: TOptionsType,\n },\n ],\n });\n file.add(queryKeyType);\n};\n\nexport const queryKeyStatement = ({\n isInfinite,\n operation,\n plugin,\n typeQueryKey,\n}: {\n isInfinite: boolean;\n operation: IR.OperationObject;\n plugin: PluginInstance;\n typeQueryKey?: string;\n}) => {\n const file = plugin.context.file({ id: plugin.name })!;\n const typeData = useTypeData({ operation, plugin });\n const identifier = isInfinite\n ? file.identifier({\n // TODO: refactor for better cross-plugin compatibility\n $ref: `#/tanstack-query-infinite-query-key/${operation.id}`,\n case: plugin.config.infiniteQueryKeys.case,\n create: true,\n nameTransformer: plugin.config.infiniteQueryKeys.name,\n namespace: 'value',\n })\n : file.identifier({\n // TODO: refactor for better cross-plugin compatibility\n $ref: `#/tanstack-query-query-key/${operation.id}`,\n case: plugin.config.queryKeys.case,\n create: true,\n nameTransformer: plugin.config.queryKeys.name,\n namespace: 'value',\n });\n const statement = compiler.constVariable({\n exportConst: true,\n expression: compiler.arrowFunction({\n parameters: [\n {\n isRequired: hasOperationDataRequired(operation),\n name: 'options',\n type: typeData,\n },\n ],\n returnType: isInfinite ? typeQueryKey : undefined,\n statements: createQueryKeyLiteral({\n id: operation.id,\n isInfinite,\n plugin,\n }),\n }),\n name: identifier.name || '',\n });\n return statement;\n};\n","import ts from 'typescript';\n\nimport { compiler } from '../../../compiler';\nimport { tsNodeToString } from '../../../compiler/utils';\nimport { clientApi } from '../../../generate/client';\nimport { operationPagination } from '../../../ir/operation';\nimport type { IR } from '../../../ir/types';\nimport { schemaToType } from '../../@hey-api/typescript/plugin';\nimport {\n createOperationComment,\n isOperationOptionsRequired,\n} from '../../shared/utils/operation';\nimport {\n createQueryKeyFunction,\n createQueryKeyType,\n queryKeyName,\n queryKeyStatement,\n} from './queryKey';\nimport type { PluginInstance, PluginState } from './types';\nimport { useTypeData, useTypeError, useTypeResponse } from './useType';\n\nconst createInfiniteParamsFn = 'createInfiniteParams';\nconst infiniteQueryOptionsFn = 'infiniteQueryOptions';\n\nconst createInfiniteParamsFunction = ({\n plugin,\n}: {\n plugin: PluginInstance;\n}) => {\n const file = plugin.context.file({ id: plugin.name })!;\n\n const identifierCreateInfiniteParams = file.identifier({\n // TODO: refactor for better cross-plugin compatibility\n $ref: `#/tanstack-query-create-infinite-params/${createInfiniteParamsFn}`,\n case: plugin.config.case,\n create: true,\n namespace: 'value',\n });\n\n const fn = compiler.constVariable({\n expression: compiler.arrowFunction({\n multiLine: true,\n parameters: [\n {\n name: 'queryKey',\n type: compiler.typeReferenceNode({\n typeName: `QueryKey<${clientApi.Options.name}>`,\n }),\n },\n {\n name: 'page',\n type: compiler.typeReferenceNode({ typeName: 'K' }),\n },\n ],\n statements: [\n compiler.constVariable({\n expression: compiler.objectExpression({\n obj: [\n {\n spread: compiler.propertyAccessExpression({\n expression: 'queryKey',\n name: 0,\n }),\n },\n ],\n }),\n name: 'params',\n }),\n compiler.ifStatement({\n expression: compiler.propertyAccessExpression({\n expression: compiler.identifier({\n text: 'page',\n }),\n name: compiler.identifier({ text: 'body' }),\n }),\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: 'body',\n }),\n right: compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n assertion: 'any',\n spread: 'queryKey[0].body',\n },\n {\n assertion: 'any',\n spread: 'page.body',\n },\n ],\n }),\n }),\n }),\n ],\n }),\n }),\n compiler.ifStatement({\n expression: compiler.propertyAccessExpression({\n expression: compiler.identifier({\n text: 'page',\n }),\n name: compiler.identifier({ text: 'headers' }),\n }),\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: 'headers',\n }),\n right: compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n spread: 'queryKey[0].headers',\n },\n {\n spread: 'page.headers',\n },\n ],\n }),\n }),\n }),\n ],\n }),\n }),\n compiler.ifStatement({\n expression: compiler.propertyAccessExpression({\n expression: compiler.identifier({\n text: 'page',\n }),\n name: compiler.identifier({ text: 'path' }),\n }),\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: 'path',\n }),\n right: compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n assertion: 'any',\n spread: 'queryKey[0].path',\n },\n {\n assertion: 'any',\n spread: 'page.path',\n },\n ],\n }),\n }),\n }),\n ],\n }),\n }),\n compiler.ifStatement({\n expression: compiler.propertyAccessExpression({\n expression: compiler.identifier({\n text: 'page',\n }),\n name: compiler.identifier({ text: 'query' }),\n }),\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: 'query',\n }),\n right: compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n assertion: 'any',\n spread: 'queryKey[0].query',\n },\n {\n assertion: 'any',\n spread: 'page.query',\n },\n ],\n }),\n }),\n }),\n ],\n }),\n }),\n compiler.returnVariable({\n expression: compiler.asExpression({\n expression: compiler.asExpression({\n expression: compiler.identifier({ text: 'params' }),\n type: compiler.keywordTypeNode({ keyword: 'unknown' }),\n }),\n type: ts.factory.createTypeQueryNode(\n compiler.identifier({ text: 'page' }),\n ),\n }),\n }),\n ],\n types: [\n {\n extends: compiler.typeReferenceNode({\n typeName: compiler.identifier({\n text: `Pick<QueryKey<${clientApi.Options.name}>[0], 'body' | 'headers' | 'path' | 'query'>`,\n }),\n }),\n name: 'K',\n },\n ],\n }),\n name: identifierCreateInfiniteParams.name || '',\n });\n file.add(fn);\n};\n\nexport const createInfiniteQueryOptions = ({\n operation,\n plugin,\n queryFn,\n state,\n}: {\n operation: IR.OperationObject;\n plugin: PluginInstance;\n queryFn: string;\n state: PluginState;\n}) => {\n if (\n !plugin.config.infiniteQueryOptions ||\n !(['get', 'post'] as (typeof operation.method)[]).includes(operation.method)\n ) {\n return state;\n }\n\n const pagination = operationPagination({\n context: plugin.context,\n operation,\n });\n\n if (!pagination) {\n return state;\n }\n\n const file = plugin.context.file({ id: plugin.name })!;\n const isRequiredOptions = isOperationOptionsRequired({\n context: plugin.context,\n operation,\n });\n\n if (!state.hasInfiniteQueries) {\n state.hasInfiniteQueries = true;\n\n if (!state.hasCreateQueryKeyParamsFunction) {\n createQueryKeyType({ plugin });\n createQueryKeyFunction({ plugin });\n state.hasCreateQueryKeyParamsFunction = true;\n }\n\n if (!state.hasCreateInfiniteParamsFunction) {\n createInfiniteParamsFunction({ plugin });\n state.hasCreateInfiniteParamsFunction = true;\n }\n\n file.import({\n module: plugin.name,\n name: infiniteQueryOptionsFn,\n });\n\n state.typeInfiniteData = file.import({\n asType: true,\n module: plugin.name,\n name: 'InfiniteData',\n });\n }\n\n state.hasUsedQueryFn = true;\n\n const typeData = useTypeData({ operation, plugin });\n const typeError = useTypeError({ operation, plugin });\n const typeResponse = useTypeResponse({ operation, plugin });\n\n const typeQueryKey = `${queryKeyName}<${typeData}>`;\n const typePageObjectParam = `Pick<${typeQueryKey}[0], 'body' | 'headers' | 'path' | 'query'>`;\n const pluginTypeScript = plugin.getPlugin('@hey-api/typescript');\n // TODO: parser - this is a bit clunky, need to compile type to string because\n // `compiler.returnFunctionCall()` accepts only strings, should be cleaned up\n const type = schemaToType({\n plugin: pluginTypeScript as Parameters<typeof schemaToType>[0]['plugin'],\n schema: pagination.schema,\n state: undefined,\n });\n const typePageParam = type\n ? `${tsNodeToString({\n node: type,\n unescape: true,\n })} | ${typePageObjectParam}`\n : `${typePageObjectParam}`;\n\n const node = queryKeyStatement({\n isInfinite: true,\n operation,\n plugin,\n typeQueryKey,\n });\n file.add(node);\n\n const identifierInfiniteQueryKey = file.identifier({\n // TODO: refactor for better cross-plugin compatibility\n $ref: `#/tanstack-query-infinite-query-key/${operation.id}`,\n case: plugin.config.infiniteQueryKeys.case,\n nameTransformer: plugin.config.infiniteQueryKeys.name,\n namespace: 'value',\n });\n\n const awaitSdkExpression = compiler.awaitExpression({\n expression: compiler.callExpression({\n functionName: queryFn,\n parameters: [\n compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n spread: 'options',\n },\n {\n spread: 'params',\n },\n {\n key: 'signal',\n shorthand: true,\n value: compiler.identifier({\n text: 'signal',\n }),\n },\n {\n key: 'throwOnError',\n value: true,\n },\n ],\n }),\n ],\n }),\n });\n\n const identifierCreateInfiniteParams = file.identifier({\n // TODO: refactor for better cross-plugin compatibility\n $ref: `#/tanstack-query-create-infinite-params/${createInfiniteParamsFn}`,\n case: plugin.config.case,\n namespace: 'value',\n });\n\n const statements: Array<ts.Statement> = [\n compiler.constVariable({\n comment: [\n {\n jsdoc: false,\n lines: ['@ts-ignore'],\n },\n ],\n expression: compiler.conditionalExpression({\n condition: compiler.binaryExpression({\n left: compiler.typeOfExpression({\n text: 'pageParam',\n }),\n operator: '===',\n right: compiler.ots.string('object'),\n }),\n whenFalse: compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n key: pagination.in,\n value: compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n key: pagination.name,\n value: compiler.identifier({\n text: 'pageParam',\n }),\n },\n ],\n }),\n },\n ],\n }),\n whenTrue: compiler.identifier({\n text: 'pageParam',\n }),\n }),\n name: 'page',\n typeName: typePageObjectParam,\n }),\n compiler.constVariable({\n expression: compiler.callExpression({\n functionName: identifierCreateInfiniteParams.name || '',\n parameters: ['queryKey', 'page'],\n }),\n name: 'params',\n }),\n ];\n\n if (plugin.getPlugin('@hey-api/sdk')?.config.responseStyle === 'data') {\n statements.push(\n compiler.returnVariable({\n expression: awaitSdkExpression,\n }),\n );\n } else {\n statements.push(\n compiler.constVariable({\n destructure: true,\n expression: awaitSdkExpression,\n name: 'data',\n }),\n compiler.returnVariable({\n expression: 'data',\n }),\n );\n }\n\n const identifierInfiniteQueryOptions = file.identifier({\n // TODO: refactor for better cross-plugin compatibility\n $ref: `#/tanstack-query-infinite-query-options/${operation.id}`,\n case: plugin.config.infiniteQueryOptions.case,\n create: true,\n nameTransformer: plugin.config.infiniteQueryOptions.name,\n namespace: 'value',\n });\n\n const statement = compiler.constVariable({\n comment: plugin.config.comments\n ? createOperationComment({ operation })\n : undefined,\n exportConst: true,\n expression: compiler.arrowFunction({\n parameters: [\n {\n isRequired: isRequiredOptions,\n name: 'options',\n type: typeData,\n },\n ],\n statements: [\n compiler.returnFunctionCall({\n args: [\n compiler.objectExpression({\n comments: [\n {\n jsdoc: false,\n lines: ['@ts-ignore'],\n },\n ],\n obj: [\n {\n key: 'queryFn',\n value: compiler.arrowFunction({\n async: true,\n multiLine: true,\n parameters: [\n {\n destructure: [\n {\n name: 'pageParam',\n },\n {\n name: 'queryKey',\n },\n {\n name: 'signal',\n },\n ],\n },\n ],\n statements,\n }),\n },\n {\n key: 'queryKey',\n value: compiler.callExpression({\n functionName: identifierInfiniteQueryKey.name || '',\n parameters: ['options'],\n }),\n },\n ],\n }),\n ],\n name: infiniteQueryOptionsFn,\n // TODO: better types syntax\n types: [\n typeResponse,\n typeError.name,\n `${typeof state.typeInfiniteData === 'string' ? state.typeInfiniteData : state.typeInfiniteData.name}<${typeResponse}>`,\n typeQueryKey,\n typePageParam,\n ],\n }),\n ],\n }),\n name: identifierInfiniteQueryOptions.name || '',\n });\n file.add(statement);\n return;\n};\n","import type ts from 'typescript';\n\nimport { compiler } from '../../../compiler';\nimport type { IR } from '../../../ir/types';\nimport { createOperationComment } from '../../shared/utils/operation';\nimport type { PluginInstance, PluginState } from './types';\nimport { useTypeData, useTypeError, useTypeResponse } from './useType';\n\nconst mutationOptionsFn = 'mutationOptions';\n\nexport const createMutationOptions = ({\n operation,\n plugin,\n queryFn,\n state,\n}: {\n operation: IR.OperationObject;\n plugin: PluginInstance;\n queryFn: string;\n state: PluginState;\n}) => {\n if (\n !plugin.config.mutationOptions.enabled ||\n !(\n ['delete', 'patch', 'post', 'put'] as (typeof operation.method)[]\n ).includes(operation.method)\n ) {\n return state;\n }\n\n const mutationsType =\n plugin.name === '@tanstack/angular-query-experimental' ||\n plugin.name === '@tanstack/svelte-query' ||\n plugin.name === '@tanstack/solid-query'\n ? 'MutationOptions'\n : 'UseMutationOptions';\n\n const file = plugin.context.file({ id: plugin.name })!;\n\n if (!state.hasMutations) {\n state.hasMutations = true;\n\n file.import({\n asType: true,\n module: plugin.name,\n name: mutationsType,\n });\n }\n\n state.hasUsedQueryFn = true;\n\n const typeData = useTypeData({ operation, plugin });\n const typeError = useTypeError({ operation, plugin });\n const typeResponse = useTypeResponse({ operation, plugin });\n // TODO: better types syntax\n const mutationType = `${mutationsType}<${typeResponse}, ${typeError.name}, ${typeData}>`;\n\n const awaitSdkExpression = compiler.awaitExpression({\n expression: compiler.callExpression({\n functionName: queryFn,\n parameters: [\n compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n spread: 'options',\n },\n {\n spread: 'localOptions',\n },\n {\n key: 'throwOnError',\n value: true,\n },\n ],\n }),\n ],\n }),\n });\n\n const statements: Array<ts.Statement> = [];\n\n if (plugin.getPlugin('@hey-api/sdk')?.config.responseStyle === 'data') {\n statements.push(\n compiler.returnVariable({\n expression: awaitSdkExpression,\n }),\n );\n } else {\n statements.push(\n compiler.constVariable({\n destructure: true,\n expression: awaitSdkExpression,\n name: 'data',\n }),\n compiler.returnVariable({\n expression: 'data',\n }),\n );\n }\n\n const identifier = file.identifier({\n // TODO: refactor for better cross-plugin compatibility\n $ref: `#/tanstack-query-mutation-options/${operation.id}`,\n case: plugin.config.mutationOptions.case,\n create: true,\n nameTransformer: plugin.config.mutationOptions.name,\n namespace: 'value',\n });\n\n const expression = compiler.arrowFunction({\n parameters: [\n {\n isRequired: false,\n name: 'options',\n type: `Partial<${typeData}>`,\n },\n ],\n returnType: mutationType,\n statements: [\n compiler.constVariable({\n expression: compiler.objectExpression({\n obj: [\n {\n key: 'mutationFn',\n value: compiler.arrowFunction({\n async: true,\n multiLine: true,\n parameters: [\n {\n name: 'localOptions',\n },\n ],\n statements,\n }),\n },\n ],\n }),\n name: mutationOptionsFn,\n typeName: mutationType,\n }),\n compiler.returnVariable({\n expression: mutationOptionsFn,\n }),\n ],\n });\n const statement = compiler.constVariable({\n comment: plugin.config.comments\n ? createOperationComment({ operation })\n : undefined,\n exportConst: true,\n expression,\n name: identifier.name || '',\n });\n file.add(statement);\n\n return state;\n};\n","import type ts from 'typescript';\n\nimport { compiler } from '../../../compiler';\nimport type { IR } from '../../../ir/types';\nimport {\n createOperationComment,\n isOperationOptionsRequired,\n} from '../../shared/utils/operation';\nimport {\n createQueryKeyFunction,\n createQueryKeyType,\n queryKeyStatement,\n} from './queryKey';\nimport type { PluginInstance, PluginState } from './types';\nimport { useTypeData } from './useType';\n\nconst queryOptionsFn = 'queryOptions';\n\nexport const createQueryOptions = ({\n operation,\n plugin,\n queryFn,\n state,\n}: {\n operation: IR.OperationObject;\n plugin: PluginInstance;\n queryFn: string;\n state: PluginState;\n}) => {\n if (\n !plugin.config.queryOptions ||\n !(['get', 'post'] as (typeof operation.method)[]).includes(operation.method)\n ) {\n return state;\n }\n\n const file = plugin.context.file({ id: plugin.name })!;\n const isRequiredOptions = isOperationOptionsRequired({\n context: plugin.context,\n operation,\n });\n\n if (!state.hasQueries) {\n state.hasQueries = true;\n\n if (!state.hasCreateQueryKeyParamsFunction) {\n createQueryKeyType({ plugin });\n createQueryKeyFunction({ plugin });\n state.hasCreateQueryKeyParamsFunction = true;\n }\n\n file.import({\n module: plugin.name,\n name: queryOptionsFn,\n });\n }\n\n state.hasUsedQueryFn = true;\n\n const node = queryKeyStatement({\n isInfinite: false,\n operation,\n plugin,\n });\n file.add(node);\n\n const typeData = useTypeData({ operation, plugin });\n\n const identifierQueryKey = file.identifier({\n // TODO: refactor for better cross-plugin compatibility\n $ref: `#/tanstack-query-query-key/${operation.id}`,\n case: plugin.config.queryKeys.case,\n nameTransformer: plugin.config.queryKeys.name,\n namespace: 'value',\n });\n\n const awaitSdkExpression = compiler.awaitExpression({\n expression: compiler.callExpression({\n functionName: queryFn,\n parameters: [\n compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n spread: 'options',\n },\n {\n spread: 'queryKey[0]',\n },\n {\n key: 'signal',\n shorthand: true,\n value: compiler.identifier({\n text: 'signal',\n }),\n },\n {\n key: 'throwOnError',\n value: true,\n },\n ],\n }),\n ],\n }),\n });\n\n const statements: Array<ts.Statement> = [];\n\n if (plugin.getPlugin('@hey-api/sdk')?.config.responseStyle === 'data') {\n statements.push(\n compiler.returnVariable({\n expression: awaitSdkExpression,\n }),\n );\n } else {\n statements.push(\n compiler.constVariable({\n destructure: true,\n expression: awaitSdkExpression,\n name: 'data',\n }),\n compiler.returnVariable({\n expression: 'data',\n }),\n );\n }\n\n const identifierQueryOptions = file.identifier({\n // TODO: refactor for better cross-plugin compatibility\n $ref: `#/tanstack-query-query-options/${operation.id}`,\n case: plugin.config.queryOptions.case,\n create: true,\n nameTransformer: plugin.config.queryOptions.name,\n namespace: 'value',\n });\n\n const statement = compiler.constVariable({\n comment: plugin.config.comments\n ? createOperationComment({ operation })\n : undefined,\n exportConst: true,\n expression: compiler.arrowFunction({\n parameters: [\n {\n isRequired: isRequiredOptions,\n name: 'options',\n type: typeData,\n },\n ],\n statements: [\n compiler.returnFunctionCall({\n args: [\n compiler.objectExpression({\n obj: [\n {\n key: 'queryFn',\n value: compiler.arrowFunction({\n async: true,\n multiLine: true,\n parameters: [\n {\n destructure: [\n {\n name: 'queryKey',\n },\n {\n name: 'signal',\n },\n ],\n },\n ],\n statements,\n }),\n },\n {\n key: 'queryKey',\n value: compiler.callExpression({\n functionName: identifierQueryKey.name || '',\n parameters: ['options'],\n }),\n },\n ],\n }),\n ],\n name: queryOptionsFn,\n }),\n ],\n }),\n name: identifierQueryOptions.name || '',\n // TODO: add type error\n // TODO: AxiosError<PutSubmissionMetaError>\n });\n file.add(statement);\n\n return state;\n};\n","import { clientApi } from '../../../generate/client';\nimport { stringCase } from '../../../utils/stringCase';\nimport { clientId } from '../../@hey-api/client-core/utils';\nimport { sdkId } from '../../@hey-api/sdk/constants';\nimport { operationClasses } from '../../@hey-api/sdk/operation';\nimport { serviceFunctionIdentifier } from '../../@hey-api/sdk/plugin-legacy';\nimport { createInfiniteQueryOptions } from './infiniteQueryOptions';\nimport { createMutationOptions } from './mutationOptions';\nimport { createQueryOptions } from './queryOptions';\nimport type { PluginHandler, PluginState } from './types';\n\nexport const handler = ({ plugin }: Parameters<PluginHandler>[0]) => {\n const file = plugin.createFile({\n id: plugin.name,\n identifierCase: plugin.config.case,\n path: plugin.output,\n });\n\n const state: PluginState = {\n hasCreateInfiniteParamsFunction: false,\n hasCreateQueryKeyParamsFunction: false,\n hasInfiniteQueries: false,\n hasMutations: false,\n hasQueries: false,\n hasUsedQueryFn: false,\n typeInfiniteData: undefined!,\n };\n\n file.import({\n ...clientApi.Options,\n module: file.relativePathToFile({ context: plugin.context, id: sdkId }),\n });\n\n plugin.forEach('operation', ({ operation }) => {\n state.hasUsedQueryFn = false;\n\n const sdkPlugin = plugin.getPlugin('@hey-api/sdk');\n const classes = sdkPlugin?.config.asClass\n ? operationClasses({\n context: plugin.context,\n operation,\n plugin: sdkPlugin,\n })\n : undefined;\n const entry = classes ? classes.values().next().value : undefined;\n const queryFn =\n // TODO: this should use class graph to determine correct path string\n // as it's really easy to break once we change the class casing\n (\n entry\n ? [\n entry.path[0],\n ...entry.path.slice(1).map((className) =>\n stringCase({\n case: 'camelCase',\n value: className,\n }),\n ),\n entry.methodName,\n ].filter(Boolean)\n : [\n serviceFunctionIdentifier({\n config: plugin.context.config,\n handleIllegal: true,\n id: operation.id,\n operation,\n }),\n ]\n ).join('.');\n\n createQueryOptions({\n operation,\n plugin,\n queryFn,\n state,\n });\n\n createInfiniteQueryOptions({\n operation,\n plugin,\n queryFn,\n state,\n });\n\n createMutationOptions({\n operation,\n plugin,\n queryFn,\n state,\n });\n\n if (state.hasUsedQueryFn) {\n file.import({\n module: file.relativePathToFile({ context: plugin.context, id: sdkId }),\n name: queryFn.split('.')[0]!,\n });\n }\n });\n\n if (state.hasQueries || state.hasInfiniteQueries) {\n file.import({\n alias: '_heyApiClient',\n module: file.relativePathToFile({\n context: plugin.context,\n id: clientId,\n }),\n name: 'client',\n });\n }\n};\n","import ts from 'typescript';\n\nimport { compiler, type Property } from '../../../compiler';\nimport type { ImportExportItem } from '../../../compiler/module';\nimport type { ImportExportItemObject } from '../../../compiler/utils';\nimport { clientApi, clientModulePath } from '../../../generate/client';\nimport { relativeModulePath } from '../../../generate/utils';\nimport { createOperationKey } from '../../../ir/operation';\nimport { getPaginationKeywordsRegExp } from '../../../ir/pagination';\nimport type { IR } from '../../../ir/types';\nimport { isOperationParameterRequired } from '../../../openApi';\nimport type {\n Client,\n Method,\n Model,\n Operation,\n OperationParameter,\n} from '../../../types/client';\nimport type { Config } from '../../../types/config';\nimport type { Files } from '../../../types/utils';\nimport { getConfig, isLegacyClient } from '../../../utils/config';\nimport { transformClassName } from '../../../utils/transform';\nimport {\n getClientBaseUrlKey,\n getClientPlugin,\n} from '../../@hey-api/client-core/utils';\nimport {\n generateImport,\n operationDataTypeName,\n operationErrorTypeName,\n operationOptionsLegacyParserType,\n operationResponseTypeName,\n serviceFunctionIdentifier,\n} from '../../@hey-api/sdk/plugin-legacy';\nimport type { TanStackAngularQueryPlugin } from '../angular-query-experimental';\nimport type { TanStackReactQueryPlugin } from '../react-query';\nimport type { TanStackSolidQueryPlugin } from '../solid-query';\nimport type { TanStackSvelteQueryPlugin } from '../svelte-query';\nimport type { TanStackVueQueryPlugin } from '../vue-query';\n\nconst toInfiniteQueryOptionsName = (operation: Operation) =>\n `${serviceFunctionIdentifier({\n config: getConfig(),\n id: operation.name,\n operation,\n })}InfiniteOptions`;\n\nconst toMutationOptionsName = (operation: Operation) =>\n `${serviceFunctionIdentifier({\n config: getConfig(),\n id: operation.name,\n operation,\n })}Mutation`;\n\nconst toQueryOptionsName = ({\n config,\n id,\n operation,\n}: {\n config: Config;\n id: string;\n operation: IR.OperationObject | Operation;\n}) =>\n `${serviceFunctionIdentifier({\n config,\n id,\n operation,\n })}Options`;\n\nconst toQueryKeyName = ({\n config,\n id,\n isInfinite,\n operation,\n}: {\n config: Config;\n id: string;\n isInfinite?: boolean;\n operation: IR.OperationObject | Operation;\n}) =>\n `${serviceFunctionIdentifier({\n config,\n id,\n operation,\n })}${isInfinite ? 'Infinite' : ''}QueryKey`;\n\nconst getPaginationIn = (parameter: OperationParameter) => {\n switch (parameter.in) {\n case 'formData':\n return 'body';\n case 'header':\n return 'headers';\n default:\n return parameter.in;\n }\n};\n\nconst createInfiniteParamsFn = 'createInfiniteParams';\nconst createQueryKeyFn = 'createQueryKey';\nconst infiniteQueryOptionsFn = 'infiniteQueryOptions';\nconst mutationOptionsFn = 'mutationOptions';\nconst queryKeyName = 'QueryKey';\nconst queryOptionsFn = 'queryOptions';\nconst TOptionsType = 'TOptions';\n\nconst createInfiniteParamsFunction = ({\n file,\n}: {\n file: Files[keyof Files];\n}) => {\n const fn = compiler.constVariable({\n expression: compiler.arrowFunction({\n multiLine: true,\n parameters: [\n {\n name: 'queryKey',\n type: compiler.typeNode(\n `QueryKey<${clientApi.OptionsLegacyParser.name}>`,\n ),\n },\n {\n name: 'page',\n type: compiler.typeNode('K'),\n },\n ],\n statements: [\n compiler.constVariable({\n expression: compiler.identifier({\n text: 'queryKey[0]',\n }),\n name: 'params',\n }),\n compiler.ifStatement({\n expression: compiler.propertyAccessExpression({\n expression: compiler.identifier({\n text: 'page',\n }),\n name: compiler.identifier({ text: 'body' }),\n }),\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: 'body',\n }),\n right: compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n assertion: 'any',\n spread: 'queryKey[0].body',\n },\n {\n assertion: 'any',\n spread: 'page.body',\n },\n ],\n }),\n }),\n }),\n ],\n }),\n }),\n compiler.ifStatement({\n expression: compiler.propertyAccessExpression({\n expression: compiler.identifier({\n text: 'page',\n }),\n name: compiler.identifier({ text: 'headers' }),\n }),\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: 'headers',\n }),\n right: compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n spread: 'queryKey[0].headers',\n },\n {\n spread: 'page.headers',\n },\n ],\n }),\n }),\n }),\n ],\n }),\n }),\n compiler.ifStatement({\n expression: compiler.propertyAccessExpression({\n expression: compiler.identifier({\n text: 'page',\n }),\n name: compiler.identifier({ text: 'path' }),\n }),\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: 'path',\n }),\n right: compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n spread: 'queryKey[0].path',\n },\n {\n spread: 'page.path',\n },\n ],\n }),\n }),\n }),\n ],\n }),\n }),\n compiler.ifStatement({\n expression: compiler.propertyAccessExpression({\n expression: compiler.identifier({\n text: 'page',\n }),\n name: compiler.identifier({ text: 'query' }),\n }),\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: 'query',\n }),\n right: compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n spread: 'queryKey[0].query',\n },\n {\n spread: 'page.query',\n },\n ],\n }),\n }),\n }),\n ],\n }),\n }),\n compiler.returnVariable({\n expression: ts.factory.createAsExpression(\n ts.factory.createAsExpression(\n compiler.identifier({ text: 'params' }),\n ts.factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword),\n ),\n ts.factory.createTypeQueryNode(\n compiler.identifier({ text: 'page' }),\n ),\n ),\n }),\n ],\n types: [\n {\n extends: compiler.typeReferenceNode({\n typeName: compiler.identifier({\n text: `Pick<QueryKey<${clientApi.OptionsLegacyParser.name}>[0], 'body' | 'headers' | 'path' | 'query'>`,\n }),\n }),\n name: 'K',\n },\n ],\n }),\n name: createInfiniteParamsFn,\n });\n file.add(fn);\n};\n\nconst createQueryKeyFunction = ({ file }: { file: Files[keyof Files] }) => {\n const returnType = compiler.indexedAccessTypeNode({\n indexType: compiler.typeNode(0),\n objectType: compiler.typeNode(queryKeyName, [\n compiler.typeNode(TOptionsType),\n ]),\n });\n\n const infiniteIdentifier = compiler.identifier({ text: 'infinite' });\n\n const fn = compiler.constVariable({\n expression: compiler.arrowFunction({\n multiLine: true,\n parameters: [\n {\n name: 'id',\n type: compiler.typeNode('string'),\n },\n {\n isRequired: false,\n name: 'options',\n type: compiler.typeNode(TOptionsType),\n },\n {\n isRequired: false,\n name: 'infinite',\n type: compiler.typeNode('boolean'),\n },\n ],\n returnType,\n statements: [\n compiler.constVariable({\n assertion: returnType,\n expression: compiler.objectExpression({\n multiLine: false,\n obj: [\n {\n key: '_id',\n value: compiler.identifier({ text: 'id' }),\n },\n {\n key: getClientBaseUrlKey(getConfig()),\n value: compiler.identifier({\n text: `(options?.client ?? _heyApiClient).getConfig().${getClientBaseUrlKey(getConfig())}`,\n }),\n },\n ],\n }),\n name: 'params',\n typeName: returnType,\n }),\n compiler.ifStatement({\n expression: infiniteIdentifier,\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: '_infinite',\n }),\n right: infiniteIdentifier,\n }),\n }),\n ],\n }),\n }),\n compiler.ifStatement({\n expression: compiler.propertyAccessExpression({\n expression: compiler.identifier({ text: 'options' }),\n isOptional: true,\n name: compiler.identifier({ text: 'body' }),\n }),\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: 'body',\n }),\n right: compiler.propertyAccessExpression({\n expression: 'options',\n name: 'body',\n }),\n }),\n }),\n ],\n }),\n }),\n compiler.ifStatement({\n expression: compiler.propertyAccessExpression({\n expression: compiler.identifier({ text: 'options' }),\n isOptional: true,\n name: compiler.identifier({ text: 'headers' }),\n }),\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: 'headers',\n }),\n right: compiler.propertyAccessExpression({\n expression: 'options',\n name: 'headers',\n }),\n }),\n }),\n ],\n }),\n }),\n compiler.ifStatement({\n expression: compiler.propertyAccessExpression({\n expression: compiler.identifier({ text: 'options' }),\n isOptional: true,\n name: compiler.identifier({ text: 'path' }),\n }),\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: 'path',\n }),\n right: compiler.propertyAccessExpression({\n expression: 'options',\n name: 'path',\n }),\n }),\n }),\n ],\n }),\n }),\n compiler.ifStatement({\n expression: compiler.propertyAccessExpression({\n expression: compiler.identifier({ text: 'options' }),\n isOptional: true,\n name: compiler.identifier({ text: 'query' }),\n }),\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: 'query',\n }),\n right: compiler.propertyAccessExpression({\n expression: 'options',\n name: 'query',\n }),\n }),\n }),\n ],\n }),\n }),\n compiler.returnVariable({\n expression: 'params',\n }),\n ],\n types: [\n {\n extends: compiler.typeReferenceNode({\n typeName: compiler.identifier({\n text: clientApi.OptionsLegacyParser.name,\n }),\n }),\n name: TOptionsType,\n },\n ],\n }),\n name: createQueryKeyFn,\n });\n file.add(fn);\n};\n\nconst createQueryKeyType = ({ file }: { file: Files[keyof Files] }) => {\n const properties: Property[] = [\n {\n name: '_id',\n type: compiler.keywordTypeNode({\n keyword: 'string',\n }),\n },\n {\n isRequired: false,\n name: '_infinite',\n type: compiler.keywordTypeNode({\n keyword: 'boolean',\n }),\n },\n ];\n\n const queryKeyType = compiler.typeAliasDeclaration({\n name: queryKeyName,\n type: compiler.typeTupleNode({\n types: [\n compiler.typeIntersectionNode({\n types: [\n compiler.typeReferenceNode({\n typeName: `Pick<${TOptionsType}, '${getClientBaseUrlKey(getConfig())}' | 'body' | 'headers' | 'path' | 'query'>`,\n }),\n compiler.typeInterfaceNode({\n properties,\n useLegacyResolution: true,\n }),\n ],\n }),\n ],\n }),\n typeParameters: [\n {\n extends: compiler.typeReferenceNode({\n typeName: compiler.identifier({\n text: clientApi.OptionsLegacyParser.name,\n }),\n }),\n name: TOptionsType,\n },\n ],\n });\n file.add(queryKeyType);\n};\n\nconst createTypeData = ({\n client,\n file,\n operation,\n typesModulePath,\n}: {\n client: Client;\n file: Files[keyof Files];\n operation: Operation;\n typesModulePath: string;\n}) => {\n const { name: nameTypeData } = generateImport({\n client,\n meta: operation.parameters.length\n ? {\n // TODO: this should be exact ref to operation for consistency,\n // but name should work too as operation ID is unique\n $ref: operation.name,\n name: operation.name,\n }\n : undefined,\n nameTransformer: operationDataTypeName,\n onImport: (name) => {\n file.import({\n asType: true,\n module: typesModulePath,\n name,\n });\n },\n });\n\n const typeData = operationOptionsLegacyParserType({\n importedType: nameTypeData,\n });\n\n return { typeData };\n};\n\nconst createTypeError = ({\n client,\n file,\n operation,\n pluginName,\n typesModulePath,\n}: {\n client: Client;\n file: Files[keyof Files];\n operation: Operation;\n pluginName: string;\n typesModulePath: string;\n}) => {\n const config = getConfig();\n\n const { name: nameTypeError } = generateImport({\n client,\n meta: {\n // TODO: this should be exact ref to operation for consistency,\n // but name should work too as operation ID is unique\n $ref: operation.name,\n name: operation.name,\n },\n nameTransformer: operationErrorTypeName,\n onImport: (name) => {\n file.import({\n asType: true,\n module: typesModulePath,\n name,\n });\n },\n });\n\n let typeError: ImportExportItemObject = {\n asType: true,\n name: nameTypeError,\n };\n if (!typeError.name) {\n typeError = file.import({\n asType: true,\n module: pluginName,\n name: 'DefaultError',\n });\n }\n\n const clientPlugin = getClientPlugin(config);\n if (clientPlugin.name === '@hey-api/client-axios') {\n const axiosError = file.import({\n asType: true,\n module: 'axios',\n name: 'AxiosError',\n });\n typeError = {\n ...axiosError,\n name: `${axiosError.name}<${typeError.name}>`,\n };\n }\n\n return { typeError };\n};\n\nconst createTypeResponse = ({\n client,\n file,\n operation,\n typesModulePath,\n}: {\n client: Client;\n file: Files[keyof Files];\n operation: Operation;\n typesModulePath: string;\n}) => {\n const { name: nameTypeResponse } = generateImport({\n client,\n meta: {\n // TODO: this should be exact ref to operation for consistency,\n // but name should work too as operation ID is unique\n $ref: operation.name,\n name: operation.name,\n },\n nameTransformer: operationResponseTypeName,\n onImport: (imported) => {\n file.import({\n asType: true,\n module: typesModulePath,\n name: imported,\n });\n },\n });\n\n const typeResponse = nameTypeResponse || 'void';\n\n return { typeResponse };\n};\n\nconst createQueryKeyLiteral = ({\n id,\n isInfinite,\n}: {\n id: string;\n isInfinite?: boolean;\n}) => {\n const queryKeyLiteral = compiler.arrayLiteralExpression({\n elements: [\n compiler.callExpression({\n functionName: createQueryKeyFn,\n parameters: [\n compiler.ots.string(id),\n 'options',\n isInfinite ? compiler.ots.boolean(true) : undefined,\n ],\n }),\n ],\n multiLine: false,\n });\n return queryKeyLiteral;\n};\n\nexport const handlerLegacy = ({\n client,\n files,\n plugin,\n}: Parameters<\n | TanStackAngularQueryPlugin['LegacyHandler']\n | TanStackReactQueryPlugin['LegacyHandler']\n | TanStackSolidQueryPlugin['LegacyHandler']\n | TanStackSvelteQueryPlugin['LegacyHandler']\n | TanStackVueQueryPlugin['LegacyHandler']\n>[0]) => {\n const config = getConfig();\n\n if (isLegacyClient(config)) {\n throw new Error('TanStack Query plugin does not support legacy clients');\n }\n\n const file = files[plugin.name]!;\n\n file.import({\n ...clientApi.OptionsLegacyParser,\n module: clientModulePath({ config, sourceOutput: plugin.output }),\n });\n\n const typesModulePath = relativeModulePath({\n moduleOutput: files.types!.nameWithoutExtension(),\n sourceOutput: plugin.output,\n });\n\n const mutationsType =\n plugin.name === '@tanstack/angular-query-experimental' ||\n plugin.name === '@tanstack/svelte-query' ||\n plugin.name === '@tanstack/solid-query'\n ? 'MutationOptions'\n : 'UseMutationOptions';\n\n let typeInfiniteData!: ImportExportItem;\n let hasCreateInfiniteParamsFunction = false;\n let hasCreateQueryKeyParamsFunction = false;\n let hasInfiniteQueries = false;\n let hasMutations = false;\n let hasQueries = false;\n\n const processedOperations = new Map<string, boolean>();\n\n for (const service of client.services) {\n for (const operation of service.operations) {\n // track processed operations to avoid creating duplicates\n const operationKey = createOperationKey(operation);\n if (processedOperations.has(operationKey)) {\n continue;\n }\n processedOperations.set(operationKey, true);\n\n const queryFn = [\n config.plugins['@hey-api/sdk']?.config.asClass &&\n transformClassName({\n config,\n name: service.name,\n }),\n serviceFunctionIdentifier({\n config,\n handleIllegal: !config.plugins['@hey-api/sdk']?.config.asClass,\n id: operation.name,\n operation,\n }),\n ]\n .filter(Boolean)\n .join('.');\n let hasUsedQueryFn = false;\n\n // queries\n if (\n plugin.config.queryOptions &&\n (['GET', 'POST'] as ReadonlyArray<Method>).includes(operation.method)\n ) {\n if (!hasQueries) {\n hasQueries = true;\n\n if (!hasCreateQueryKeyParamsFunction) {\n createQueryKeyType({ file });\n createQueryKeyFunction({ file });\n hasCreateQueryKeyParamsFunction = true;\n }\n\n file.import({\n module: plugin.name,\n name: queryOptionsFn,\n });\n }\n\n hasUsedQueryFn = true;\n\n const { typeData } = createTypeData({\n client,\n file,\n operation,\n typesModulePath,\n });\n\n const isRequired = isOperationParameterRequired(operation.parameters);\n\n const queryKeyStatement = compiler.constVariable({\n exportConst: true,\n expression: compiler.arrowFunction({\n parameters: [\n {\n isRequired,\n name: 'options',\n type: typeData,\n },\n ],\n statements: createQueryKeyLiteral({\n id: operation.name,\n }),\n }),\n name: toQueryKeyName({\n config,\n id: operation.name,\n operation,\n }),\n });\n file.add(queryKeyStatement);\n\n const statement = compiler.constVariable({\n // TODO: describe options, same as the actual function call\n comment: [],\n exportConst: true,\n expression: compiler.arrowFunction({\n parameters: [\n {\n isRequired,\n name: 'options',\n type: typeData,\n },\n ],\n statements: [\n compiler.returnFunctionCall({\n args: [\n compiler.objectExpression({\n obj: [\n {\n key: 'queryFn',\n value: compiler.arrowFunction({\n async: true,\n multiLine: true,\n parameters: [\n {\n destructure: [\n {\n name: 'queryKey',\n },\n {\n name: 'signal',\n },\n ],\n },\n ],\n statements: [\n compiler.constVariable({\n destructure: true,\n expression: compiler.awaitExpression({\n expression: compiler.callExpression({\n functionName: queryFn,\n parameters: [\n compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n spread: 'options',\n },\n {\n spread: 'queryKey[0]',\n },\n {\n key: 'signal',\n shorthand: true,\n value: compiler.identifier({\n text: 'signal',\n }),\n },\n {\n key: 'throwOnError',\n value: true,\n },\n ],\n }),\n ],\n }),\n }),\n name: 'data',\n }),\n compiler.returnVariable({\n expression: 'data',\n }),\n ],\n }),\n },\n {\n key: 'queryKey',\n value: compiler.callExpression({\n functionName: toQueryKeyName({\n config,\n id: operation.name,\n operation,\n }),\n parameters: ['options'],\n }),\n },\n ],\n }),\n ],\n name: queryOptionsFn,\n }),\n ],\n }),\n name: toQueryOptionsName({\n config,\n id: operation.name,\n operation,\n }),\n // TODO: add type error\n // TODO: AxiosError<PutSubmissionMetaError>\n });\n file.add(statement);\n }\n\n // infinite queries\n if (\n plugin.config.infiniteQueryOptions &&\n (['GET', 'POST'] as ReadonlyArray<Method>).includes(operation.method)\n ) {\n // the actual pagination field might be nested inside parameter, e.g. body\n let paginationField!: Model | OperationParameter;\n\n const paginationParameter = operation.parameters.find((parameter) => {\n const paginationRegExp = getPaginationKeywordsRegExp(\n config.parser.pagination,\n );\n if (paginationRegExp.test(parameter.name)) {\n paginationField = parameter;\n return true;\n }\n\n if (parameter.in !== 'body') {\n return;\n }\n\n if (parameter.export === 'reference') {\n const ref = parameter.$refs[0];\n const refModel = client.models.find(\n (model) => model.meta?.$ref === ref,\n );\n return refModel?.properties.find((property) => {\n const paginationRegExp = getPaginationKeywordsRegExp(\n config.parser.pagination,\n );\n if (paginationRegExp.test(property.name)) {\n paginationField = property;\n return true;\n }\n return;\n });\n }\n\n return parameter.properties.find((property) => {\n const paginationRegExp = getPaginationKeywordsRegExp(\n config.parser.pagination,\n );\n if (paginationRegExp.test(property.name)) {\n paginationField = property;\n return true;\n }\n return;\n });\n });\n\n if (paginationParameter && paginationField) {\n if (!hasInfiniteQueries) {\n hasInfiniteQueries = true;\n\n if (!hasCreateQueryKeyParamsFunction) {\n createQueryKeyType({ file });\n createQueryKeyFunction({ file });\n hasCreateQueryKeyParamsFunction = true;\n }\n\n if (!hasCreateInfiniteParamsFunction) {\n createInfiniteParamsFunction({ file });\n hasCreateInfiniteParamsFunction = true;\n }\n\n file.import({\n module: plugin.name,\n name: infiniteQueryOptionsFn,\n });\n\n typeInfiniteData = file.import({\n asType: true,\n module: plugin.name,\n name: 'InfiniteData',\n });\n }\n\n hasUsedQueryFn = true;\n\n const { typeData } = createTypeData({\n client,\n file,\n operation,\n typesModulePath,\n });\n const { typeError } = createTypeError({\n client,\n file,\n operation,\n pluginName: plugin.name,\n typesModulePath,\n });\n const { typeResponse } = createTypeResponse({\n client,\n file,\n operation,\n typesModulePath,\n });\n\n const isRequired = isOperationParameterRequired(operation.parameters);\n\n const typeQueryKey = `${queryKeyName}<${typeData}>`;\n const typePageObjectParam = `Pick<${typeQueryKey}[0], 'body' | 'headers' | 'path' | 'query'>`;\n const typePageParam = `${paginationField.base} | ${typePageObjectParam}`;\n\n const queryKeyStatement = compiler.constVariable({\n exportConst: true,\n expression: compiler.arrowFunction({\n parameters: [\n {\n isRequired,\n name: 'options',\n type: typeData,\n },\n ],\n returnType: typeQueryKey,\n statements: createQueryKeyLiteral({\n id: operation.name,\n isInfinite: true,\n }),\n }),\n name: toQueryKeyName({\n config,\n id: operation.name,\n isInfinite: true,\n operation,\n }),\n });\n file.add(queryKeyStatement);\n\n const statement = compiler.constVariable({\n // TODO: describe options, same as the actual function call\n comment: [],\n exportConst: true,\n expression: compiler.arrowFunction({\n parameters: [\n {\n isRequired,\n name: 'options',\n type: typeData,\n },\n ],\n statements: [\n compiler.returnFunctionCall({\n args: [\n compiler.objectExpression({\n comments: [\n {\n jsdoc: false,\n lines: ['@ts-ignore'],\n },\n ],\n obj: [\n {\n key: 'queryFn',\n value: compiler.arrowFunction({\n async: true,\n multiLine: true,\n parameters: [\n {\n destructure: [\n {\n name: 'pageParam',\n },\n {\n name: 'queryKey',\n },\n {\n name: 'signal',\n },\n ],\n },\n ],\n statements: [\n compiler.constVariable({\n comment: [\n {\n jsdoc: false,\n lines: ['@ts-ignore'],\n },\n ],\n expression: compiler.conditionalExpression({\n condition: compiler.binaryExpression({\n left: compiler.typeOfExpression({\n text: 'pageParam',\n }),\n operator: '===',\n right: compiler.ots.string('object'),\n }),\n whenFalse: compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n key: getPaginationIn(\n paginationParameter,\n ),\n value: compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n key: paginationField.name,\n value: compiler.identifier({\n text: 'pageParam',\n }),\n },\n ],\n }),\n },\n ],\n }),\n whenTrue: compiler.identifier({\n text: 'pageParam',\n }),\n }),\n name: 'page',\n typeName: typePageObjectParam,\n }),\n compiler.constVariable({\n expression: compiler.callExpression({\n functionName: 'createInfiniteParams',\n parameters: ['queryKey', 'page'],\n }),\n name: 'params',\n }),\n compiler.constVariable({\n destructure: true,\n expression: compiler.awaitExpression({\n expression: compiler.callExpression({\n functionName: queryFn,\n parameters: [\n compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n spread: 'options',\n },\n {\n spread: 'params',\n },\n {\n key: 'signal',\n shorthand: true,\n value: compiler.identifier({\n text: 'signal',\n }),\n },\n {\n key: 'throwOnError',\n value: true,\n },\n ],\n }),\n ],\n }),\n }),\n name: 'data',\n }),\n compiler.returnVariable({\n expression: 'data',\n }),\n ],\n }),\n },\n {\n key: 'queryKey',\n value: compiler.callExpression({\n functionName: toQueryKeyName({\n config,\n id: operation.name,\n isInfinite: true,\n operation,\n }),\n parameters: ['options'],\n }),\n },\n ],\n }),\n ],\n name: infiniteQueryOptionsFn,\n // TODO: better types syntax\n types: [\n typeResponse,\n typeError.name,\n `${typeof typeInfiniteData === 'string' ? typeInfiniteData : typeInfiniteData.name}<${typeResponse}>`,\n typeQueryKey,\n typePageParam,\n ],\n }),\n ],\n }),\n name: toInfiniteQueryOptionsName(operation),\n });\n file.add(statement);\n }\n }\n\n // mutations\n if (\n plugin.config.mutationOptions &&\n (['DELETE', 'PATCH', 'POST', 'PUT'] as ReadonlyArray<Method>).includes(\n operation.method,\n )\n ) {\n if (!hasMutations) {\n hasMutations = true;\n\n file.import({\n asType: true,\n module: plugin.name,\n name: mutationsType,\n });\n }\n\n hasUsedQueryFn = true;\n\n const { typeData } = createTypeData({\n client,\n file,\n operation,\n typesModulePath,\n });\n const { typeError } = createTypeError({\n client,\n file,\n operation,\n pluginName: plugin.name,\n typesModulePath,\n });\n const { typeResponse } = createTypeResponse({\n client,\n file,\n operation,\n typesModulePath,\n });\n\n const expression = compiler.arrowFunction({\n parameters: [\n {\n isRequired: false,\n name: 'options',\n type: `Partial<${typeData}>`,\n },\n ],\n statements: [\n compiler.constVariable({\n expression: compiler.objectExpression({\n obj: [\n {\n key: 'mutationFn',\n value: compiler.arrowFunction({\n async: true,\n multiLine: true,\n parameters: [\n {\n name: 'localOptions',\n },\n ],\n statements: [\n compiler.constVariable({\n destructure: true,\n expression: compiler.awaitExpression({\n expression: compiler.callExpression({\n functionName: queryFn,\n parameters: [\n compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n spread: 'options',\n },\n {\n spread: 'localOptions',\n },\n {\n key: 'throwOnError',\n value: true,\n },\n ],\n }),\n ],\n }),\n }),\n name: 'data',\n }),\n compiler.returnVariable({\n expression: 'data',\n }),\n ],\n }),\n },\n ],\n }),\n name: mutationOptionsFn,\n // TODO: better types syntax\n typeName: `${mutationsType}<${typeResponse}, ${typeError.name}, ${typeData}>`,\n }),\n compiler.returnVariable({\n expression: mutationOptionsFn,\n }),\n ],\n });\n const statement = compiler.constVariable({\n // TODO: describe options, same as the actual function call\n comment: [],\n exportConst: true,\n expression,\n name: toMutationOptionsName(operation),\n });\n file.add(statement);\n }\n\n if (hasQueries || hasInfiniteQueries) {\n file.import({\n alias: '_heyApiClient',\n module: relativeModulePath({\n moduleOutput: files.client!.nameWithoutExtension(),\n sourceOutput: plugin.output,\n }),\n name: 'client',\n });\n }\n\n if (hasUsedQueryFn) {\n file.import({\n module: relativeModulePath({\n moduleOutput: files.sdk!.nameWithoutExtension(),\n sourceOutput: plugin.output,\n }),\n name: queryFn.split('.')[0]!,\n });\n }\n }\n }\n};\n","import { definePluginConfig } from '../../shared/utils/config';\nimport { handler } from '../query-core/plugin';\nimport { handlerLegacy } from '../query-core/plugin-legacy';\nimport type { TanStackAngularQueryPlugin } from './types';\n\nexport const defaultConfig: TanStackAngularQueryPlugin['Config'] = {\n config: {\n case: 'camelCase',\n comments: true,\n exportFromIndex: false,\n },\n dependencies: ['@hey-api/sdk', '@hey-api/typescript'],\n handler: handler as TanStackAngularQueryPlugin['Handler'],\n handlerLegacy: handlerLegacy as TanStackAngularQueryPlugin['LegacyHandler'],\n name: '@tanstack/angular-query-experimental',\n output: '@tanstack/angular-query-experimental',\n resolveConfig: (plugin, context) => {\n plugin.config.infiniteQueryKeys = context.valueToObject({\n defaultValue: {\n case: plugin.config.case ?? 'camelCase',\n enabled: true,\n name: '{{name}}InfiniteQueryKey',\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n string: (name) => ({ enabled: true, name }),\n },\n value: plugin.config.infiniteQueryKeys,\n });\n\n plugin.config.infiniteQueryOptions = context.valueToObject({\n defaultValue: {\n case: plugin.config.case ?? 'camelCase',\n enabled: true,\n name: '{{name}}InfiniteOptions',\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n string: (name) => ({ enabled: true, name }),\n },\n value: plugin.config.infiniteQueryOptions,\n });\n\n plugin.config.mutationOptions = context.valueToObject({\n defaultValue: {\n case: plugin.config.case ?? 'camelCase',\n enabled: true,\n name: '{{name}}Mutation',\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n string: (name) => ({ enabled: true, name }),\n },\n value: plugin.config.mutationOptions,\n });\n\n plugin.config.queryKeys = context.valueToObject({\n defaultValue: {\n case: plugin.config.case ?? 'camelCase',\n enabled: true,\n name: '{{name}}QueryKey',\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n string: (name) => ({ enabled: true, name }),\n },\n value: plugin.config.queryKeys,\n });\n\n plugin.config.queryOptions = context.valueToObject({\n defaultValue: {\n case: plugin.config.case ?? 'camelCase',\n enabled: true,\n name: '{{name}}Options',\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n string: (name) => ({ enabled: true, name }),\n },\n value: plugin.config.queryOptions,\n });\n },\n};\n\n/**\n * Type helper for `@tanstack/angular-query-experimental` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig = definePluginConfig(defaultConfig);\n","import { definePluginConfig } from '../../shared/utils/config';\nimport { handler } from '../query-core/plugin';\nimport { handlerLegacy } from '../query-core/plugin-legacy';\nimport type { TanStackReactQueryPlugin } from './types';\n\nexport const defaultConfig: TanStackReactQueryPlugin['Config'] = {\n config: {\n case: 'camelCase',\n comments: true,\n exportFromIndex: false,\n },\n dependencies: ['@hey-api/sdk', '@hey-api/typescript'],\n handler: handler as TanStackReactQueryPlugin['Handler'],\n handlerLegacy: handlerLegacy as TanStackReactQueryPlugin['LegacyHandler'],\n name: '@tanstack/react-query',\n output: '@tanstack/react-query',\n resolveConfig: (plugin, context) => {\n plugin.config.infiniteQueryKeys = context.valueToObject({\n defaultValue: {\n case: plugin.config.case ?? 'camelCase',\n enabled: true,\n name: '{{name}}InfiniteQueryKey',\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n string: (name) => ({ enabled: true, name }),\n },\n value: plugin.config.infiniteQueryKeys,\n });\n\n plugin.config.infiniteQueryOptions = context.valueToObject({\n defaultValue: {\n case: plugin.config.case ?? 'camelCase',\n enabled: true,\n name: '{{name}}InfiniteOptions',\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n string: (name) => ({ enabled: true, name }),\n },\n value: plugin.config.infiniteQueryOptions,\n });\n\n plugin.config.mutationOptions = context.valueToObject({\n defaultValue: {\n case: plugin.config.case ?? 'camelCase',\n enabled: true,\n name: '{{name}}Mutation',\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n string: (name) => ({ enabled: true, name }),\n },\n value: plugin.config.mutationOptions,\n });\n\n plugin.config.queryKeys = context.valueToObject({\n defaultValue: {\n case: plugin.config.case ?? 'camelCase',\n enabled: true,\n name: '{{name}}QueryKey',\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n string: (name) => ({ enabled: true, name }),\n },\n value: plugin.config.queryKeys,\n });\n\n plugin.config.queryOptions = context.valueToObject({\n defaultValue: {\n case: plugin.config.case ?? 'camelCase',\n enabled: true,\n name: '{{name}}Options',\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n string: (name) => ({ enabled: true, name }),\n },\n value: plugin.config.queryOptions,\n });\n },\n};\n\n/**\n * Type helper for `@tanstack/react-query` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig = definePluginConfig(defaultConfig);\n","import { definePluginConfig } from '../../shared/utils/config';\nimport { handler } from '../query-core/plugin';\nimport { handlerLegacy } from '../query-core/plugin-legacy';\nimport type { TanStackSolidQueryPlugin } from './types';\n\nexport const defaultConfig: TanStackSolidQueryPlugin['Config'] = {\n config: {\n case: 'camelCase',\n comments: true,\n exportFromIndex: false,\n },\n dependencies: ['@hey-api/sdk', '@hey-api/typescript'],\n handler: handler as TanStackSolidQueryPlugin['Handler'],\n handlerLegacy: handlerLegacy as TanStackSolidQueryPlugin['LegacyHandler'],\n name: '@tanstack/solid-query',\n output: '@tanstack/solid-query',\n resolveConfig: (plugin, context) => {\n plugin.config.infiniteQueryKeys = context.valueToObject({\n defaultValue: {\n case: plugin.config.case ?? 'camelCase',\n enabled: true,\n name: '{{name}}InfiniteQueryKey',\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n string: (name) => ({ enabled: true, name }),\n },\n value: plugin.config.infiniteQueryKeys,\n });\n\n plugin.config.infiniteQueryOptions = context.valueToObject({\n defaultValue: {\n case: plugin.config.case ?? 'camelCase',\n enabled: true,\n name: '{{name}}InfiniteOptions',\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n string: (name) => ({ enabled: true, name }),\n },\n value: plugin.config.infiniteQueryOptions,\n });\n\n plugin.config.mutationOptions = context.valueToObject({\n defaultValue: {\n case: plugin.config.case ?? 'camelCase',\n enabled: true,\n name: '{{name}}Mutation',\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n string: (name) => ({ enabled: true, name }),\n },\n value: plugin.config.mutationOptions,\n });\n\n plugin.config.queryKeys = context.valueToObject({\n defaultValue: {\n case: plugin.config.case ?? 'camelCase',\n enabled: true,\n name: '{{name}}QueryKey',\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n string: (name) => ({ enabled: true, name }),\n },\n value: plugin.config.queryKeys,\n });\n\n plugin.config.queryOptions = context.valueToObject({\n defaultValue: {\n case: plugin.config.case ?? 'camelCase',\n enabled: true,\n name: '{{name}}Options',\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n string: (name) => ({ enabled: true, name }),\n },\n value: plugin.config.queryOptions,\n });\n },\n};\n\n/**\n * Type helper for `@tanstack/solid-query` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig = definePluginConfig(defaultConfig);\n","import { definePluginConfig } from '../../shared/utils/config';\nimport { handler } from '../query-core/plugin';\nimport { handlerLegacy } from '../query-core/plugin-legacy';\nimport type { TanStackSvelteQueryPlugin } from './types';\n\nexport const defaultConfig: TanStackSvelteQueryPlugin['Config'] = {\n config: {\n case: 'camelCase',\n comments: true,\n exportFromIndex: false,\n },\n dependencies: ['@hey-api/sdk', '@hey-api/typescript'],\n handler: handler as TanStackSvelteQueryPlugin['Handler'],\n handlerLegacy: handlerLegacy as TanStackSvelteQueryPlugin['LegacyHandler'],\n name: '@tanstack/svelte-query',\n output: '@tanstack/svelte-query',\n resolveConfig: (plugin, context) => {\n plugin.config.infiniteQueryKeys = context.valueToObject({\n defaultValue: {\n case: plugin.config.case ?? 'camelCase',\n enabled: true,\n name: '{{name}}InfiniteQueryKey',\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n string: (name) => ({ enabled: true, name }),\n },\n value: plugin.config.infiniteQueryKeys,\n });\n\n plugin.config.infiniteQueryOptions = context.valueToObject({\n defaultValue: {\n case: plugin.config.case ?? 'camelCase',\n enabled: true,\n name: '{{name}}InfiniteOptions',\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n string: (name) => ({ enabled: true, name }),\n },\n value: plugin.config.infiniteQueryOptions,\n });\n\n plugin.config.mutationOptions = context.valueToObject({\n defaultValue: {\n case: plugin.config.case ?? 'camelCase',\n enabled: true,\n name: '{{name}}Mutation',\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n string: (name) => ({ enabled: true, name }),\n },\n value: plugin.config.mutationOptions,\n });\n\n plugin.config.queryKeys = context.valueToObject({\n defaultValue: {\n case: plugin.config.case ?? 'camelCase',\n enabled: true,\n name: '{{name}}QueryKey',\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n string: (name) => ({ enabled: true, name }),\n },\n value: plugin.config.queryKeys,\n });\n\n plugin.config.queryOptions = context.valueToObject({\n defaultValue: {\n case: plugin.config.case ?? 'camelCase',\n enabled: true,\n name: '{{name}}Options',\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n string: (name) => ({ enabled: true, name }),\n },\n value: plugin.config.queryOptions,\n });\n },\n};\n\n/**\n * Type helper for `@tanstack/svelte-query` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig = definePluginConfig(defaultConfig);\n","import { definePluginConfig } from '../../shared/utils/config';\nimport { handler } from '../query-core/plugin';\nimport { handlerLegacy } from '../query-core/plugin-legacy';\nimport type { TanStackVueQueryPlugin } from './types';\n\nexport const defaultConfig: TanStackVueQueryPlugin['Config'] = {\n config: {\n case: 'camelCase',\n comments: true,\n exportFromIndex: false,\n },\n dependencies: ['@hey-api/sdk', '@hey-api/typescript'],\n handler: handler as TanStackVueQueryPlugin['Handler'],\n handlerLegacy: handlerLegacy as TanStackVueQueryPlugin['LegacyHandler'],\n name: '@tanstack/vue-query',\n output: '@tanstack/vue-query',\n resolveConfig: (plugin, context) => {\n plugin.config.infiniteQueryKeys = context.valueToObject({\n defaultValue: {\n case: plugin.config.case ?? 'camelCase',\n enabled: true,\n name: '{{name}}InfiniteQueryKey',\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n string: (name) => ({ enabled: true, name }),\n },\n value: plugin.config.infiniteQueryKeys,\n });\n\n plugin.config.infiniteQueryOptions = context.valueToObject({\n defaultValue: {\n case: plugin.config.case ?? 'camelCase',\n enabled: true,\n name: '{{name}}InfiniteOptions',\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n string: (name) => ({ enabled: true, name }),\n },\n value: plugin.config.infiniteQueryOptions,\n });\n\n plugin.config.mutationOptions = context.valueToObject({\n defaultValue: {\n case: plugin.config.case ?? 'camelCase',\n enabled: true,\n name: '{{name}}Mutation',\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n string: (name) => ({ enabled: true, name }),\n },\n value: plugin.config.mutationOptions,\n });\n\n plugin.config.queryKeys = context.valueToObject({\n defaultValue: {\n case: plugin.config.case ?? 'camelCase',\n enabled: true,\n name: '{{name}}QueryKey',\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n string: (name) => ({ enabled: true, name }),\n },\n value: plugin.config.queryKeys,\n });\n\n plugin.config.queryOptions = context.valueToObject({\n defaultValue: {\n case: plugin.config.case ?? 'camelCase',\n enabled: true,\n name: '{{name}}Options',\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n string: (name) => ({ enabled: true, name }),\n },\n value: plugin.config.queryOptions,\n });\n },\n};\n\n/**\n * Type helper for `@tanstack/vue-query` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig = definePluginConfig(defaultConfig);\n","import type ts from 'typescript';\n\nimport { compiler, type Property } from '../../compiler';\nimport { operationResponsesMap } from '../../ir/operation';\nimport { hasParameterGroupObjectRequired } from '../../ir/parameter';\nimport type { IR } from '../../ir/types';\nimport { typesId } from '../@hey-api/typescript/ref';\nimport { operationIrRef } from '../shared/utils/ref';\nimport type { FastifyPlugin } from './types';\n\nconst fastifyId = 'fastify';\n\nconst operationToRouteHandler = ({\n context,\n operation,\n}: {\n context: IR.Context;\n operation: IR.OperationObject;\n}): Property | undefined => {\n const file = context.file({ id: fastifyId })!;\n const fileTypes = context.file({ id: typesId })!;\n\n const properties: Array<Property> = [];\n\n const identifierData = fileTypes.identifier({\n $ref: operationIrRef({\n config: context.config,\n id: operation.id,\n type: 'data',\n }),\n namespace: 'type',\n });\n if (identifierData.name) {\n if (operation.body) {\n file.import({\n asType: true,\n module: file.relativePathToFile({ context, id: typesId }),\n name: identifierData.name,\n });\n properties.push({\n isRequired: operation.body.required,\n name: 'Body',\n type: `${identifierData.name}['body']`,\n });\n }\n\n if (operation.parameters) {\n if (operation.parameters.header) {\n file.import({\n asType: true,\n module: file.relativePathToFile({ context, id: typesId }),\n name: identifierData.name,\n });\n properties.push({\n isRequired: hasParameterGroupObjectRequired(\n operation.parameters.header,\n ),\n name: 'Headers',\n type: `${identifierData.name}['headers']`,\n });\n }\n\n if (operation.parameters.path) {\n file.import({\n asType: true,\n module: file.relativePathToFile({ context, id: typesId }),\n name: identifierData.name,\n });\n properties.push({\n isRequired: hasParameterGroupObjectRequired(\n operation.parameters.path,\n ),\n name: 'Params',\n type: `${identifierData.name}['path']`,\n });\n }\n\n if (operation.parameters.query) {\n file.import({\n asType: true,\n module: file.relativePathToFile({ context, id: typesId }),\n name: identifierData.name,\n });\n properties.push({\n isRequired: hasParameterGroupObjectRequired(\n operation.parameters.query,\n ),\n name: 'Querystring',\n type: `${identifierData.name}['query']`,\n });\n }\n }\n }\n\n const { errors, responses } = operationResponsesMap(operation);\n\n let errorsTypeReference: ts.TypeReferenceNode | undefined = undefined;\n const identifierErrors = fileTypes.identifier({\n $ref: operationIrRef({\n config: context.config,\n id: operation.id,\n type: 'errors',\n }),\n namespace: 'type',\n });\n if (identifierErrors.name && errors && errors.properties) {\n const keys = Object.keys(errors.properties);\n if (keys.length) {\n const hasDefaultResponse = keys.includes('default');\n if (!hasDefaultResponse) {\n file.import({\n asType: true,\n module: file.relativePathToFile({ context, id: typesId }),\n name: identifierErrors.name,\n });\n errorsTypeReference = compiler.typeReferenceNode({\n typeName: identifierErrors.name,\n });\n } else if (keys.length > 1) {\n file.import({\n asType: true,\n module: file.relativePathToFile({ context, id: typesId }),\n name: identifierErrors.name,\n });\n const errorsType = compiler.typeReferenceNode({\n typeName: identifierErrors.name,\n });\n const defaultType = compiler.literalTypeNode({\n literal: compiler.stringLiteral({ text: 'default' }),\n });\n errorsTypeReference = compiler.typeReferenceNode({\n typeArguments: [errorsType, defaultType],\n typeName: 'Omit',\n });\n }\n }\n }\n\n let responsesTypeReference: ts.TypeReferenceNode | undefined = undefined;\n const identifierResponses = fileTypes.identifier({\n $ref: operationIrRef({\n config: context.config,\n id: operation.id,\n type: 'responses',\n }),\n namespace: 'type',\n });\n if (identifierResponses.name && responses && responses.properties) {\n const keys = Object.keys(responses.properties);\n if (keys.length) {\n const hasDefaultResponse = keys.includes('default');\n if (!hasDefaultResponse) {\n file.import({\n asType: true,\n module: file.relativePathToFile({ context, id: typesId }),\n name: identifierResponses.name,\n });\n responsesTypeReference = compiler.typeReferenceNode({\n typeName: identifierResponses.name,\n });\n } else if (keys.length > 1) {\n file.import({\n asType: true,\n module: file.relativePathToFile({ context, id: typesId }),\n name: identifierResponses.name,\n });\n const responsesType = compiler.typeReferenceNode({\n typeName: identifierResponses.name,\n });\n const defaultType = compiler.literalTypeNode({\n literal: compiler.stringLiteral({ text: 'default' }),\n });\n responsesTypeReference = compiler.typeReferenceNode({\n typeArguments: [responsesType, defaultType],\n typeName: 'Omit',\n });\n }\n }\n }\n\n const replyTypes = [errorsTypeReference, responsesTypeReference].filter(\n Boolean,\n );\n if (replyTypes.length) {\n properties.push({\n name: 'Reply',\n type: compiler.typeIntersectionNode({\n types: replyTypes,\n }),\n });\n }\n\n if (!properties.length) {\n return;\n }\n\n const routeHandler: Property = {\n name: operation.id,\n type: compiler.typeNode('RouteHandler', [\n compiler.typeInterfaceNode({\n properties,\n useLegacyResolution: false,\n }),\n ]),\n };\n return routeHandler;\n};\n\nexport const handler: FastifyPlugin['Handler'] = ({ plugin }) => {\n const file = plugin.createFile({\n id: fastifyId,\n path: plugin.output,\n });\n\n const routeHandlers: Array<Property> = [];\n\n plugin.forEach('operation', ({ operation }) => {\n const routeHandler = operationToRouteHandler({\n context: plugin.context,\n operation,\n });\n if (routeHandler) {\n routeHandlers.push(routeHandler);\n }\n });\n\n const identifier = file.identifier({\n $ref: 'RouteHandlers',\n create: true,\n namespace: 'type',\n });\n\n if (!identifier.name) {\n return;\n }\n\n if (routeHandlers.length) {\n file.import({\n asType: true,\n module: 'fastify',\n name: 'RouteHandler',\n });\n }\n\n file.add(\n compiler.typeAliasDeclaration({\n exportType: true,\n name: identifier.name,\n type: compiler.typeInterfaceNode({\n properties: routeHandlers,\n useLegacyResolution: false,\n }),\n }),\n );\n};\n","import { definePluginConfig } from '../shared/utils/config';\nimport { handler } from './plugin';\nimport type { FastifyPlugin } from './types';\n\nexport const defaultConfig: FastifyPlugin['Config'] = {\n config: {\n exportFromIndex: false,\n },\n dependencies: ['@hey-api/typescript'],\n handler,\n name: 'fastify',\n output: 'fastify',\n};\n\n/**\n * Type helper for `fastify` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig = definePluginConfig(defaultConfig);\n","import { compiler } from '../../compiler';\n\nexport const identifiers = {\n /**\n * {@link https://valibot.dev/api/#actions Actions}\n */\n actions: {\n args: compiler.identifier({ text: 'args' }),\n base64: compiler.identifier({ text: 'base64' }),\n bic: compiler.identifier({ text: 'bic' }),\n brand: compiler.identifier({ text: 'brand' }),\n bytes: compiler.identifier({ text: 'bytes' }),\n check: compiler.identifier({ text: 'check' }),\n checkItems: compiler.identifier({ text: 'checkItems' }),\n creditCard: compiler.identifier({ text: 'creditCard' }),\n cuid2: compiler.identifier({ text: 'cuid2' }),\n decimal: compiler.identifier({ text: 'decimal' }),\n description: compiler.identifier({ text: 'description' }),\n digits: compiler.identifier({ text: 'digits' }),\n email: compiler.identifier({ text: 'email' }),\n emoji: compiler.identifier({ text: 'emoji' }),\n empty: compiler.identifier({ text: 'empty' }),\n endsWith: compiler.identifier({ text: 'endsWith' }),\n entries: compiler.identifier({ text: 'entries' }),\n everyItem: compiler.identifier({ text: 'everyItem' }),\n excludes: compiler.identifier({ text: 'excludes' }),\n filterItems: compiler.identifier({ text: 'filterItems' }),\n findItem: compiler.identifier({ text: 'findItem' }),\n finite: compiler.identifier({ text: 'finite' }),\n flavor: compiler.identifier({ text: 'flavor' }),\n graphemes: compiler.identifier({ text: 'graphemes' }),\n gtValue: compiler.identifier({ text: 'gtValue' }),\n hash: compiler.identifier({ text: 'hash' }),\n hexColor: compiler.identifier({ text: 'hexColor' }),\n hexadecimal: compiler.identifier({ text: 'hexadecimal' }),\n imei: compiler.identifier({ text: 'imei' }),\n includes: compiler.identifier({ text: 'includes' }),\n integer: compiler.identifier({ text: 'integer' }),\n ip: compiler.identifier({ text: 'ip' }),\n ipv4: compiler.identifier({ text: 'ipv4' }),\n ipv6: compiler.identifier({ text: 'ipv6' }),\n isoDate: compiler.identifier({ text: 'isoDate' }),\n isoDateTime: compiler.identifier({ text: 'isoDateTime' }),\n isoTime: compiler.identifier({ text: 'isoTime' }),\n isoTimeSecond: compiler.identifier({ text: 'isoTimeSecond' }),\n isoTimestamp: compiler.identifier({ text: 'isoTimestamp' }),\n isoWeek: compiler.identifier({ text: 'isoWeek' }),\n length: compiler.identifier({ text: 'length' }),\n ltValue: compiler.identifier({ text: 'ltValue' }),\n mac: compiler.identifier({ text: 'mac' }),\n mac48: compiler.identifier({ text: 'mac48' }),\n mac64: compiler.identifier({ text: 'mac64' }),\n mapItems: compiler.identifier({ text: 'mapItems' }),\n maxBytes: compiler.identifier({ text: 'maxBytes' }),\n maxEntries: compiler.identifier({ text: 'maxEntries' }),\n maxGraphemes: compiler.identifier({ text: 'maxGraphemes' }),\n maxLength: compiler.identifier({ text: 'maxLength' }),\n maxSize: compiler.identifier({ text: 'maxSize' }),\n maxValue: compiler.identifier({ text: 'maxValue' }),\n maxWords: compiler.identifier({ text: 'maxWords' }),\n metadata: compiler.identifier({ text: 'metadata' }),\n mimeType: compiler.identifier({ text: 'mimeType' }),\n minBytes: compiler.identifier({ text: 'minBytes' }),\n minEntries: compiler.identifier({ text: 'minEntries' }),\n minGraphemes: compiler.identifier({ text: 'minGraphemes' }),\n minLength: compiler.identifier({ text: 'minLength' }),\n minSize: compiler.identifier({ text: 'minSize' }),\n minValue: compiler.identifier({ text: 'minValue' }),\n minWords: compiler.identifier({ text: 'minWords' }),\n multipleOf: compiler.identifier({ text: 'multipleOf' }),\n nanoid: compiler.identifier({ text: 'nanoid' }),\n nonEmpty: compiler.identifier({ text: 'nonEmpty' }),\n normalize: compiler.identifier({ text: 'normalize' }),\n notBytes: compiler.identifier({ text: 'notBytes' }),\n notEntries: compiler.identifier({ text: 'notEntries' }),\n notGraphemes: compiler.identifier({ text: 'notGraphemes' }),\n notLength: compiler.identifier({ text: 'notLength' }),\n notSize: compiler.identifier({ text: 'notSize' }),\n notValue: compiler.identifier({ text: 'notValue' }),\n notValues: compiler.identifier({ text: 'notValues' }),\n notWords: compiler.identifier({ text: 'notWords' }),\n octal: compiler.identifier({ text: 'octal' }),\n parseJson: compiler.identifier({ text: 'parseJson' }),\n partialCheck: compiler.identifier({ text: 'partialCheck' }),\n rawCheck: compiler.identifier({ text: 'rawCheck' }),\n rawTransform: compiler.identifier({ text: 'rawTransform' }),\n readonly: compiler.identifier({ text: 'readonly' }),\n reduceItems: compiler.identifier({ text: 'reduceItems' }),\n regex: compiler.identifier({ text: 'regex' }),\n returns: compiler.identifier({ text: 'returns' }),\n rfcEmail: compiler.identifier({ text: 'rfcEmail' }),\n safeInteger: compiler.identifier({ text: 'safeInteger' }),\n size: compiler.identifier({ text: 'size' }),\n slug: compiler.identifier({ text: 'slug' }),\n someItem: compiler.identifier({ text: 'someItem' }),\n sortItems: compiler.identifier({ text: 'sortItems' }),\n startsWith: compiler.identifier({ text: 'startsWith' }),\n stringifyJson: compiler.identifier({ text: 'stringifyJson' }),\n title: compiler.identifier({ text: 'title' }),\n toLowerCase: compiler.identifier({ text: 'toLowerCase' }),\n toMaxValue: compiler.identifier({ text: 'toMaxValue' }),\n toMinValue: compiler.identifier({ text: 'toMinValue' }),\n toUpperCase: compiler.identifier({ text: 'toUpperCase' }),\n transform: compiler.identifier({ text: 'transform' }),\n trim: compiler.identifier({ text: 'trim' }),\n trimEnd: compiler.identifier({ text: 'trimEnd' }),\n trimStart: compiler.identifier({ text: 'trimStart' }),\n ulid: compiler.identifier({ text: 'ulid' }),\n url: compiler.identifier({ text: 'url' }),\n uuid: compiler.identifier({ text: 'uuid' }),\n value: compiler.identifier({ text: 'value' }),\n values: compiler.identifier({ text: 'values' }),\n words: compiler.identifier({ text: 'words' }),\n },\n /**\n * {@link https://valibot.dev/api/#async Async}\n */\n async: {\n argsAsync: compiler.identifier({ text: 'argsAsync' }),\n arrayAsync: compiler.identifier({ text: 'arrayAsync' }),\n awaitAsync: compiler.identifier({ text: 'awaitAsync' }),\n checkAsync: compiler.identifier({ text: 'checkAsync' }),\n checkItemsAsync: compiler.identifier({ text: 'checkItemsAsync' }),\n customAsync: compiler.identifier({ text: 'customAsync' }),\n exactOptionalAsync: compiler.identifier({ text: 'exactOptionalAsync' }),\n fallbackAsync: compiler.identifier({ text: 'fallbackAsync' }),\n forwardAsync: compiler.identifier({ text: 'forwardAsync' }),\n getDefaultsAsync: compiler.identifier({ text: 'getDefaultsAsync' }),\n getFallbacksAsync: compiler.identifier({ text: 'getFallbacksAsync' }),\n intersectAsync: compiler.identifier({ text: 'intersectAsync' }),\n lazyAsync: compiler.identifier({ text: 'lazyAsync' }),\n looseObjectAsync: compiler.identifier({ text: 'looseObjectAsync' }),\n looseTupleAsync: compiler.identifier({ text: 'looseTupleAsync' }),\n mapAsync: compiler.identifier({ text: 'mapAsync' }),\n nonNullableAsync: compiler.identifier({ text: 'nonNullableAsync' }),\n nonNullishAsync: compiler.identifier({ text: 'nonNullishAsync' }),\n nonOptionalAsync: compiler.identifier({ text: 'nonOptionalAsync' }),\n nullableAsync: compiler.identifier({ text: 'nullableAsync' }),\n nullishAsync: compiler.identifier({ text: 'nullishAsync' }),\n objectAsync: compiler.identifier({ text: 'objectAsync' }),\n objectWithRestAsync: compiler.identifier({ text: 'objectWithRestAsync' }),\n optionalAsync: compiler.identifier({ text: 'optionalAsync' }),\n parseAsync: compiler.identifier({ text: 'parseAsync' }),\n parserAsync: compiler.identifier({ text: 'parserAsync' }),\n partialAsync: compiler.identifier({ text: 'partialAsync' }),\n partialCheckAsync: compiler.identifier({ text: 'partialCheckAsync' }),\n pipeAsync: compiler.identifier({ text: 'pipeAsync' }),\n rawCheckAsync: compiler.identifier({ text: 'rawCheckAsync' }),\n rawTransformAsync: compiler.identifier({ text: 'rawTransformAsync' }),\n recordAsync: compiler.identifier({ text: 'recordAsync' }),\n requiredAsync: compiler.identifier({ text: 'requiredAsync' }),\n returnsAsync: compiler.identifier({ text: 'returnsAsync' }),\n safeParseAsync: compiler.identifier({ text: 'safeParseAsync' }),\n safeParserAsync: compiler.identifier({ text: 'safeParserAsync' }),\n setAsync: compiler.identifier({ text: 'setAsync' }),\n strictObjectAsync: compiler.identifier({ text: 'strictObjectAsync' }),\n strictTupleAsync: compiler.identifier({ text: 'strictTupleAsync' }),\n transformAsync: compiler.identifier({ text: 'transformAsync' }),\n tupleAsync: compiler.identifier({ text: 'tupleAsync' }),\n tupleWithRestAsync: compiler.identifier({ text: 'tupleWithRestAsync' }),\n undefinedableAsync: compiler.identifier({ text: 'undefinedableAsync' }),\n unionAsync: compiler.identifier({ text: 'unionAsync' }),\n variantAsync: compiler.identifier({ text: 'variantAsync' }),\n },\n /**\n * {@link https://valibot.dev/api/#methods Methods}\n */\n methods: {\n assert: compiler.identifier({ text: 'assert' }),\n config: compiler.identifier({ text: 'config' }),\n fallback: compiler.identifier({ text: 'fallback' }),\n flatten: compiler.identifier({ text: 'flatten' }),\n forward: compiler.identifier({ text: 'forward' }),\n getDefault: compiler.identifier({ text: 'getDefault' }),\n getDefaults: compiler.identifier({ text: 'getDefaults' }),\n getDescription: compiler.identifier({ text: 'getDescription' }),\n getFallback: compiler.identifier({ text: 'getFallback' }),\n getFallbacks: compiler.identifier({ text: 'getFallbacks' }),\n getMetadata: compiler.identifier({ text: 'getMetadata' }),\n getTitle: compiler.identifier({ text: 'getTitle' }),\n is: compiler.identifier({ text: 'is' }),\n keyof: compiler.identifier({ text: 'keyof' }),\n message: compiler.identifier({ text: 'message' }),\n omit: compiler.identifier({ text: 'omit' }),\n parse: compiler.identifier({ text: 'parse' }),\n parser: compiler.identifier({ text: 'parser' }),\n partial: compiler.identifier({ text: 'partial' }),\n pick: compiler.identifier({ text: 'pick' }),\n pipe: compiler.identifier({ text: 'pipe' }),\n required: compiler.identifier({ text: 'required' }),\n safeParse: compiler.identifier({ text: 'safeParse' }),\n safeParser: compiler.identifier({ text: 'safeParser' }),\n summarize: compiler.identifier({ text: 'summarize' }),\n unwrap: compiler.identifier({ text: 'unwrap' }),\n },\n /**\n * {@link https://valibot.dev/api/#schemas Schemas}\n */\n schemas: {\n any: compiler.identifier({ text: 'any' }),\n array: compiler.identifier({ text: 'array' }),\n bigInt: compiler.identifier({ text: 'bigint' }),\n blob: compiler.identifier({ text: 'blob' }),\n boolean: compiler.identifier({ text: 'boolean' }),\n custom: compiler.identifier({ text: 'custom' }),\n date: compiler.identifier({ text: 'date' }),\n enum: compiler.identifier({ text: 'enum' }),\n exactOptional: compiler.identifier({ text: 'exactOptional' }),\n file: compiler.identifier({ text: 'file' }),\n function: compiler.identifier({ text: 'function' }),\n instance: compiler.identifier({ text: 'instance' }),\n intersect: compiler.identifier({ text: 'intersect' }),\n lazy: compiler.identifier({ text: 'lazy' }),\n literal: compiler.identifier({ text: 'literal' }),\n looseObject: compiler.identifier({ text: 'looseObject' }),\n looseTuple: compiler.identifier({ text: 'looseTuple' }),\n map: compiler.identifier({ text: 'map' }),\n nan: compiler.identifier({ text: 'nan' }),\n never: compiler.identifier({ text: 'never' }),\n nonNullable: compiler.identifier({ text: 'nonNullable' }),\n nonNullish: compiler.identifier({ text: 'nonNullish' }),\n nonOptional: compiler.identifier({ text: 'nonOptional' }),\n null: compiler.identifier({ text: 'null' }),\n nullable: compiler.identifier({ text: 'nullable' }),\n nullish: compiler.identifier({ text: 'nullish' }),\n number: compiler.identifier({ text: 'number' }),\n object: compiler.identifier({ text: 'object' }),\n objectWithRest: compiler.identifier({ text: 'objectWithRest' }),\n optional: compiler.identifier({ text: 'optional' }),\n picklist: compiler.identifier({ text: 'picklist' }),\n promise: compiler.identifier({ text: 'promise' }),\n record: compiler.identifier({ text: 'record' }),\n set: compiler.identifier({ text: 'set' }),\n strictObject: compiler.identifier({ text: 'strictObject' }),\n strictTuple: compiler.identifier({ text: 'strictTuple' }),\n string: compiler.identifier({ text: 'string' }),\n symbol: compiler.identifier({ text: 'symbol' }),\n tuple: compiler.identifier({ text: 'tuple' }),\n tupleWithRest: compiler.identifier({ text: 'tupleWithRest' }),\n undefined: compiler.identifier({ text: 'undefined' }),\n undefinedable: compiler.identifier({ text: 'undefinedable' }),\n union: compiler.identifier({ text: 'union' }),\n unknown: compiler.identifier({ text: 'unknown' }),\n variant: compiler.identifier({ text: 'variant' }),\n void: compiler.identifier({ text: 'void' }),\n },\n /**\n * {@link https://valibot.dev/api/#storages Storages}\n */\n storages: {\n // TODO: implement if necessary\n },\n /**\n * {@link https://valibot.dev/api/#types Types}\n */\n types: {\n // TODO: implement if necessary\n GenericSchema: compiler.identifier({ text: 'GenericSchema' }),\n },\n /**\n * {@link https://valibot.dev/api/#utils Utils}\n */\n utils: {\n // TODO: implement if necessary\n },\n v: compiler.identifier({ text: 'v' }),\n};\n\nexport const valibotId = 'valibot';\n","import type ts from 'typescript';\n\nimport { compiler } from '../../compiler';\nimport type { TypeScriptFile } from '../../generate/files';\nimport type { IR } from '../../ir/types';\nimport { identifiers, valibotId } from './constants';\nimport type { ValibotPlugin } from './types';\n\nconst createRequestValidator = ({\n file,\n operation,\n plugin,\n}: {\n file: TypeScriptFile;\n operation: IR.OperationObject;\n plugin: ValibotPlugin['Instance'];\n}): ts.ArrowFunction | undefined => {\n const { requests } = plugin.config;\n const schemaIdentifier = plugin.context.file({ id: valibotId })!.identifier({\n // TODO: refactor for better cross-plugin compatibility\n $ref: `#/valibot-response/${operation.id}`,\n // TODO: refactor to not have to define nameTransformer\n nameTransformer: typeof requests === 'object' ? requests.name : undefined,\n namespace: 'value',\n });\n\n if (!schemaIdentifier.name) {\n return;\n }\n\n file.import({\n module: file.relativePathToFile({\n context: plugin.context,\n id: valibotId,\n }),\n name: schemaIdentifier.name,\n });\n\n file.import({\n alias: identifiers.v.text,\n module: 'valibot',\n name: '*',\n });\n\n const dataParameterName = 'data';\n\n return compiler.arrowFunction({\n async: true,\n parameters: [\n {\n name: dataParameterName,\n },\n ],\n statements: [\n compiler.returnStatement({\n expression: compiler.awaitExpression({\n expression: compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.async.parseAsync,\n }),\n parameters: [\n compiler.identifier({ text: schemaIdentifier.name }),\n compiler.identifier({ text: dataParameterName }),\n ],\n }),\n }),\n }),\n ],\n });\n};\n\nconst createResponseValidator = ({\n file,\n operation,\n plugin,\n}: {\n file: TypeScriptFile;\n operation: IR.OperationObject;\n plugin: ValibotPlugin['Instance'];\n}): ts.ArrowFunction | undefined => {\n const { responses } = plugin.config;\n const schemaIdentifier = plugin.context.file({ id: valibotId })!.identifier({\n // TODO: refactor for better cross-plugin compatibility\n $ref: `#/valibot-response/${operation.id}`,\n // TODO: refactor to not have to define nameTransformer\n nameTransformer: typeof responses === 'object' ? responses.name : undefined,\n namespace: 'value',\n });\n\n if (!schemaIdentifier.name) {\n return;\n }\n\n file.import({\n module: file.relativePathToFile({\n context: plugin.context,\n id: valibotId,\n }),\n name: schemaIdentifier.name,\n });\n\n file.import({\n alias: identifiers.v.text,\n module: 'valibot',\n name: '*',\n });\n\n const dataParameterName = 'data';\n\n return compiler.arrowFunction({\n async: true,\n parameters: [\n {\n name: dataParameterName,\n },\n ],\n statements: [\n compiler.returnStatement({\n expression: compiler.awaitExpression({\n expression: compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.async.parseAsync,\n }),\n parameters: [\n compiler.identifier({ text: schemaIdentifier.name }),\n compiler.identifier({ text: dataParameterName }),\n ],\n }),\n }),\n }),\n ],\n });\n};\n\nexport type Api = {\n createRequestValidator: (args: {\n file: TypeScriptFile;\n operation: IR.OperationObject;\n plugin: ValibotPlugin['Instance'];\n }) => ts.ArrowFunction | undefined;\n createResponseValidator: (args: {\n file: TypeScriptFile;\n operation: IR.OperationObject;\n plugin: ValibotPlugin['Instance'];\n }) => ts.ArrowFunction | undefined;\n};\n\nexport const api: Api = {\n createRequestValidator,\n createResponseValidator,\n};\n","import ts from 'typescript';\n\nimport { compiler } from '../../compiler';\nimport type { Identifier } from '../../generate/files';\nimport { deduplicateSchema } from '../../ir/schema';\nimport type { IR } from '../../ir/types';\nimport type { StringCase } from '../../types/case';\nimport { numberRegExp } from '../../utils/regexp';\nimport { createSchemaComment } from '../shared/utils/schema';\nimport { identifiers, valibotId } from './constants';\nimport { operationToValibotSchema } from './operation';\nimport type { ValibotPlugin } from './types';\n\ninterface SchemaWithType<T extends Required<IR.SchemaObject>['type']>\n extends Omit<IR.SchemaObject, 'type'> {\n type: Extract<Required<IR.SchemaObject>['type'], T>;\n}\n\nexport interface State {\n circularReferenceTracker: Set<string>;\n hasCircularReference: boolean;\n nameCase: StringCase;\n nameTransformer: string | ((name: string) => string);\n}\n\nconst pipesToExpression = (pipes: Array<ts.Expression>) => {\n if (pipes.length === 1) {\n return pipes[0]!;\n }\n\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.methods.pipe,\n }),\n parameters: pipes,\n });\n return expression;\n};\n\nconst arrayTypeToValibotSchema = ({\n plugin,\n schema,\n state,\n}: {\n plugin: ValibotPlugin['Instance'];\n schema: SchemaWithType<'array'>;\n state: State;\n}): ts.Expression => {\n const functionName = compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.schemas.array,\n });\n\n const pipes: Array<ts.CallExpression> = [];\n\n if (!schema.items) {\n const expression = compiler.callExpression({\n functionName,\n parameters: [\n unknownTypeToValibotSchema({\n schema: {\n type: 'unknown',\n },\n }),\n ],\n });\n pipes.push(expression);\n } else {\n schema = deduplicateSchema({ schema });\n\n // at least one item is guaranteed\n const itemExpressions = schema.items!.map((item) => {\n const schemaPipes = schemaToValibotSchema({\n plugin,\n schema: item,\n state,\n });\n return pipesToExpression(schemaPipes);\n });\n\n if (itemExpressions.length === 1) {\n const expression = compiler.callExpression({\n functionName,\n parameters: itemExpressions,\n });\n pipes.push(expression);\n } else {\n if (schema.logicalOperator === 'and') {\n // TODO: parser - handle intersection\n // return compiler.typeArrayNode(\n // compiler.typeIntersectionNode({ types: itemExpressions }),\n // );\n }\n\n // TODO: parser - handle union\n // return compiler.typeArrayNode(compiler.typeUnionNode({ types: itemExpressions }));\n\n const expression = compiler.callExpression({\n functionName,\n parameters: [\n unknownTypeToValibotSchema({\n schema: {\n type: 'unknown',\n },\n }),\n ],\n });\n pipes.push(expression);\n }\n }\n\n if (schema.minItems === schema.maxItems && schema.minItems !== undefined) {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.actions.length,\n }),\n parameters: [compiler.valueToExpression({ value: schema.minItems })],\n });\n pipes.push(expression);\n } else {\n if (schema.minItems !== undefined) {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.actions.minLength,\n }),\n parameters: [compiler.valueToExpression({ value: schema.minItems })],\n });\n pipes.push(expression);\n }\n\n if (schema.maxItems !== undefined) {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.actions.maxLength,\n }),\n parameters: [compiler.valueToExpression({ value: schema.maxItems })],\n });\n pipes.push(expression);\n }\n }\n\n return pipesToExpression(pipes);\n};\n\nconst booleanTypeToValibotSchema = ({\n schema,\n}: {\n schema: SchemaWithType<'boolean'>;\n}) => {\n if (typeof schema.const === 'boolean') {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.schemas.literal,\n }),\n parameters: [compiler.ots.boolean(schema.const)],\n });\n return expression;\n }\n\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.schemas.boolean,\n }),\n });\n return expression;\n};\n\nconst enumTypeToValibotSchema = ({\n schema,\n}: {\n schema: SchemaWithType<'enum'>;\n}): ts.CallExpression => {\n const enumMembers: Array<ts.LiteralExpression> = [];\n\n let isNullable = false;\n\n for (const item of schema.items ?? []) {\n // Zod supports only string enums\n if (item.type === 'string' && typeof item.const === 'string') {\n enumMembers.push(\n compiler.stringLiteral({\n text: item.const,\n }),\n );\n } else if (item.type === 'null' || item.const === null) {\n isNullable = true;\n }\n }\n\n if (!enumMembers.length) {\n return unknownTypeToValibotSchema({\n schema: {\n type: 'unknown',\n },\n });\n }\n\n let resultExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.schemas.picklist,\n }),\n parameters: [\n compiler.arrayLiteralExpression({\n elements: enumMembers,\n multiLine: false,\n }),\n ],\n });\n\n if (isNullable) {\n resultExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.schemas.nullable,\n }),\n parameters: [resultExpression],\n });\n }\n\n return resultExpression;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst neverTypeToValibotSchema = (_props: {\n schema: SchemaWithType<'never'>;\n}) => {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.schemas.never,\n }),\n });\n return expression;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst nullTypeToValibotSchema = (_props: {\n schema: SchemaWithType<'null'>;\n}) => {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.schemas.null,\n }),\n });\n return expression;\n};\n\nconst numberParameter = ({\n isBigInt,\n value,\n}: {\n isBigInt: boolean;\n value: unknown;\n}) => {\n const expression = compiler.valueToExpression({ value });\n\n if (\n isBigInt &&\n (typeof value === 'bigint' ||\n typeof value === 'number' ||\n typeof value === 'string' ||\n typeof value === 'boolean')\n ) {\n return compiler.callExpression({\n functionName: 'BigInt',\n parameters: [expression],\n });\n }\n\n return expression;\n};\n\nconst numberTypeToValibotSchema = ({\n schema,\n}: {\n schema: SchemaWithType<'integer' | 'number'>;\n}) => {\n const isBigInt = schema.type === 'integer' && schema.format === 'int64';\n\n if (typeof schema.const === 'number') {\n // TODO: parser - handle bigint constants\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.schemas.literal,\n }),\n parameters: [compiler.ots.number(schema.const)],\n });\n return expression;\n }\n\n const pipes: Array<ts.CallExpression> = [];\n\n // Zod uses coerce for bigint here, might be needed for Valibot too\n const expression = compiler.callExpression({\n functionName: isBigInt\n ? compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.schemas.bigInt,\n })\n : compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.schemas.number,\n }),\n });\n pipes.push(expression);\n\n if (!isBigInt && schema.type === 'integer') {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.actions.integer,\n }),\n });\n pipes.push(expression);\n }\n\n if (schema.exclusiveMinimum !== undefined) {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.actions.gtValue,\n }),\n parameters: [\n numberParameter({ isBigInt, value: schema.exclusiveMinimum }),\n ],\n });\n pipes.push(expression);\n } else if (schema.minimum !== undefined) {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.actions.minValue,\n }),\n parameters: [numberParameter({ isBigInt, value: schema.minimum })],\n });\n pipes.push(expression);\n }\n\n if (schema.exclusiveMaximum !== undefined) {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.actions.ltValue,\n }),\n parameters: [\n numberParameter({ isBigInt, value: schema.exclusiveMaximum }),\n ],\n });\n pipes.push(expression);\n } else if (schema.maximum !== undefined) {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.actions.maxValue,\n }),\n parameters: [numberParameter({ isBigInt, value: schema.maximum })],\n });\n pipes.push(expression);\n }\n\n return pipesToExpression(pipes);\n};\n\nconst objectTypeToValibotSchema = ({\n plugin,\n schema,\n state,\n}: {\n plugin: ValibotPlugin['Instance'];\n schema: SchemaWithType<'object'>;\n state: State;\n}): {\n anyType: string;\n expression: ts.CallExpression;\n} => {\n // TODO: parser - handle constants\n const properties: Array<ts.PropertyAssignment> = [];\n\n const required = schema.required ?? [];\n\n for (const name in schema.properties) {\n const property = schema.properties[name]!;\n const isRequired = required.includes(name);\n\n const schemaPipes = schemaToValibotSchema({\n optional: !isRequired,\n plugin,\n schema: property,\n state,\n });\n\n numberRegExp.lastIndex = 0;\n let propertyName;\n if (numberRegExp.test(name)) {\n // For numeric literals, we'll handle negative numbers by using a string literal\n // instead of trying to use a PrefixUnaryExpression\n propertyName = name.startsWith('-')\n ? ts.factory.createStringLiteral(name)\n : ts.factory.createNumericLiteral(name);\n } else {\n propertyName = name;\n }\n // TODO: parser - abstract safe property name logic\n if (\n ((name.match(/^[0-9]/) && name.match(/\\D+/g)) || name.match(/\\W/g)) &&\n !name.startsWith(\"'\") &&\n !name.endsWith(\"'\")\n ) {\n propertyName = `'${name}'`;\n }\n properties.push(\n compiler.propertyAssignment({\n initializer: pipesToExpression(schemaPipes),\n name: propertyName,\n }),\n );\n }\n\n if (\n schema.additionalProperties &&\n schema.additionalProperties.type === 'object' &&\n !Object.keys(properties).length\n ) {\n const pipes = schemaToValibotSchema({\n plugin,\n schema: schema.additionalProperties,\n state,\n });\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.schemas.record,\n }),\n parameters: [\n compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.schemas.string,\n }),\n parameters: [],\n }),\n pipesToExpression(pipes),\n ],\n });\n return {\n anyType: 'AnyZodObject',\n expression,\n };\n }\n\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.schemas.object,\n }),\n parameters: [ts.factory.createObjectLiteralExpression(properties, true)],\n });\n return {\n // Zod uses AnyZodObject here, maybe we want to be more specific too\n anyType: identifiers.types.GenericSchema.text,\n expression,\n };\n};\n\nconst stringTypeToValibotSchema = ({\n schema,\n}: {\n schema: SchemaWithType<'string'>;\n}) => {\n if (typeof schema.const === 'string') {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.schemas.literal,\n }),\n parameters: [compiler.ots.string(schema.const)],\n });\n return expression;\n }\n\n const pipes: Array<ts.CallExpression> = [];\n\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.schemas.string,\n }),\n });\n pipes.push(expression);\n\n if (schema.format) {\n switch (schema.format) {\n case 'date':\n pipes.push(\n compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.actions.isoDate,\n }),\n }),\n );\n break;\n case 'date-time':\n pipes.push(\n compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.actions.isoTimestamp,\n }),\n }),\n );\n break;\n case 'ipv4':\n case 'ipv6':\n pipes.push(\n compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.actions.ip,\n }),\n }),\n );\n break;\n case 'uri':\n pipes.push(\n compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.actions.url,\n }),\n }),\n );\n break;\n case 'email':\n case 'time':\n case 'uuid':\n pipes.push(\n compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: compiler.identifier({ text: schema.format }),\n }),\n }),\n );\n break;\n }\n }\n\n if (schema.minLength === schema.maxLength && schema.minLength !== undefined) {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.actions.length,\n }),\n parameters: [compiler.valueToExpression({ value: schema.minLength })],\n });\n pipes.push(expression);\n } else {\n if (schema.minLength !== undefined) {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.actions.minLength,\n }),\n parameters: [compiler.valueToExpression({ value: schema.minLength })],\n });\n pipes.push(expression);\n }\n\n if (schema.maxLength !== undefined) {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.actions.maxLength,\n }),\n parameters: [compiler.valueToExpression({ value: schema.maxLength })],\n });\n pipes.push(expression);\n }\n }\n\n if (schema.pattern) {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.actions.regex,\n }),\n parameters: [compiler.regularExpressionLiteral({ text: schema.pattern })],\n });\n pipes.push(expression);\n }\n\n return pipesToExpression(pipes);\n};\n\nconst tupleTypeToValibotSchema = ({\n plugin,\n schema,\n state,\n}: {\n plugin: ValibotPlugin['Instance'];\n schema: SchemaWithType<'tuple'>;\n state: State;\n}) => {\n if (schema.const && Array.isArray(schema.const)) {\n const tupleElements = schema.const.map((value) =>\n compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.schemas.literal,\n }),\n parameters: [compiler.valueToExpression({ value })],\n }),\n );\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.schemas.tuple,\n }),\n parameters: [\n compiler.arrayLiteralExpression({\n elements: tupleElements,\n }),\n ],\n });\n return expression;\n }\n\n if (schema.items) {\n const tupleElements = schema.items.map((item) => {\n const schemaPipes = schemaToValibotSchema({\n plugin,\n schema: item,\n state,\n });\n return pipesToExpression(schemaPipes);\n });\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.schemas.tuple,\n }),\n parameters: [\n compiler.arrayLiteralExpression({\n elements: tupleElements,\n }),\n ],\n });\n return expression;\n }\n\n return unknownTypeToValibotSchema({\n schema: {\n type: 'unknown',\n },\n });\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst undefinedTypeToValibotSchema = (_props: {\n schema: SchemaWithType<'undefined'>;\n}) => {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.schemas.undefined,\n }),\n });\n return expression;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst unknownTypeToValibotSchema = (_props: {\n schema: SchemaWithType<'unknown'>;\n}) => {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.schemas.unknown,\n }),\n });\n return expression;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst voidTypeToValibotSchema = (_props: {\n schema: SchemaWithType<'void'>;\n}) => {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.schemas.void,\n }),\n });\n return expression;\n};\n\nconst schemaTypeToValibotSchema = ({\n plugin,\n schema,\n state,\n}: {\n plugin: ValibotPlugin['Instance'];\n schema: IR.SchemaObject;\n state: State;\n}): {\n anyType?: string;\n expression: ts.Expression;\n} => {\n switch (schema.type as Required<IR.SchemaObject>['type']) {\n case 'array':\n return {\n expression: arrayTypeToValibotSchema({\n plugin,\n schema: schema as SchemaWithType<'array'>,\n state,\n }),\n };\n case 'boolean':\n return {\n expression: booleanTypeToValibotSchema({\n schema: schema as SchemaWithType<'boolean'>,\n }),\n };\n case 'enum':\n return {\n expression: enumTypeToValibotSchema({\n schema: schema as SchemaWithType<'enum'>,\n }),\n };\n case 'integer':\n case 'number':\n return {\n expression: numberTypeToValibotSchema({\n schema: schema as SchemaWithType<'integer' | 'number'>,\n }),\n };\n case 'never':\n return {\n expression: neverTypeToValibotSchema({\n schema: schema as SchemaWithType<'never'>,\n }),\n };\n case 'null':\n return {\n expression: nullTypeToValibotSchema({\n schema: schema as SchemaWithType<'null'>,\n }),\n };\n case 'object':\n return objectTypeToValibotSchema({\n plugin,\n schema: schema as SchemaWithType<'object'>,\n state,\n });\n case 'string':\n return {\n expression: stringTypeToValibotSchema({\n schema: schema as SchemaWithType<'string'>,\n }),\n };\n case 'tuple':\n return {\n expression: tupleTypeToValibotSchema({\n plugin,\n schema: schema as SchemaWithType<'tuple'>,\n state,\n }),\n };\n case 'undefined':\n return {\n expression: undefinedTypeToValibotSchema({\n schema: schema as SchemaWithType<'undefined'>,\n }),\n };\n case 'unknown':\n return {\n expression: unknownTypeToValibotSchema({\n schema: schema as SchemaWithType<'unknown'>,\n }),\n };\n case 'void':\n return {\n expression: voidTypeToValibotSchema({\n schema: schema as SchemaWithType<'void'>,\n }),\n };\n }\n};\n\nexport const schemaToValibotSchema = ({\n $ref,\n identifier: _identifier,\n optional,\n plugin,\n schema,\n state,\n}: {\n /**\n * When $ref is supplied, a node will be emitted to the file.\n */\n $ref?: string;\n identifier?: Identifier;\n /**\n * Accept `optional` to handle optional object properties. We can't handle\n * this inside the object function because `.optional()` must come before\n * `.default()` which is handled in this function.\n */\n optional?: boolean;\n plugin: ValibotPlugin['Instance'];\n schema: IR.SchemaObject;\n state: State;\n}): Array<ts.Expression> => {\n const file = plugin.context.file({ id: valibotId })!;\n\n let anyType: string | undefined;\n let identifier: ReturnType<typeof file.identifier> | undefined = _identifier;\n let pipes: Array<ts.Expression> = [];\n\n if ($ref) {\n state.circularReferenceTracker.add($ref);\n\n if (!identifier) {\n identifier = file.identifier({\n $ref,\n case: state.nameCase,\n create: true,\n nameTransformer: state.nameTransformer,\n namespace: 'value',\n });\n }\n }\n\n if (schema.$ref) {\n const isCircularReference = state.circularReferenceTracker.has(schema.$ref);\n\n // if $ref hasn't been processed yet, inline it to avoid the\n // \"Block-scoped variable used before its declaration.\" error\n // this could be (maybe?) fixed by reshuffling the generation order\n let identifierRef = file.identifier({\n $ref: schema.$ref,\n case: state.nameCase,\n nameTransformer: state.nameTransformer,\n namespace: 'value',\n });\n\n if (!identifierRef.name) {\n const ref = plugin.context.resolveIrRef<IR.SchemaObject>(schema.$ref);\n const schemaPipes = schemaToValibotSchema({\n $ref: schema.$ref,\n plugin,\n schema: ref,\n state,\n });\n pipes.push(...schemaPipes);\n\n identifierRef = file.identifier({\n $ref: schema.$ref,\n case: state.nameCase,\n nameTransformer: state.nameTransformer,\n namespace: 'value',\n });\n }\n\n // if `identifierRef.name` is falsy, we already set expression above\n if (identifierRef.name) {\n const refIdentifier = compiler.identifier({ text: identifierRef.name });\n if (isCircularReference) {\n const lazyExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.schemas.lazy,\n }),\n parameters: [\n compiler.arrowFunction({\n statements: [\n compiler.returnStatement({\n expression: refIdentifier,\n }),\n ],\n }),\n ],\n });\n pipes.push(lazyExpression);\n state.hasCircularReference = true;\n } else {\n pipes.push(refIdentifier);\n }\n }\n } else if (schema.type) {\n const valibotSchema = schemaTypeToValibotSchema({ plugin, schema, state });\n anyType = valibotSchema.anyType;\n pipes.push(valibotSchema.expression);\n\n if (plugin.config.metadata && schema.description) {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.actions.metadata,\n }),\n parameters: [\n compiler.objectExpression({\n obj: [\n {\n key: 'description',\n value: compiler.stringLiteral({ text: schema.description }),\n },\n ],\n }),\n ],\n });\n pipes.push(expression);\n }\n } else if (schema.items) {\n schema = deduplicateSchema({ schema });\n\n if (schema.items) {\n const itemTypes = schema.items.map((item) => {\n const schemaPipes = schemaToValibotSchema({\n plugin,\n schema: item,\n state,\n });\n return pipesToExpression(schemaPipes);\n });\n\n if (schema.logicalOperator === 'and') {\n const intersectExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.schemas.intersect,\n }),\n parameters: [\n compiler.arrayLiteralExpression({\n elements: itemTypes,\n }),\n ],\n });\n pipes.push(intersectExpression);\n } else {\n const unionExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.schemas.union,\n }),\n parameters: [\n compiler.arrayLiteralExpression({\n elements: itemTypes,\n }),\n ],\n });\n pipes.push(unionExpression);\n }\n } else {\n const schemaPipes = schemaToValibotSchema({\n plugin,\n schema,\n state,\n });\n pipes.push(...schemaPipes);\n }\n } else {\n // catch-all fallback for failed schemas\n const valibotSchema = schemaTypeToValibotSchema({\n plugin,\n schema: {\n type: 'unknown',\n },\n state,\n });\n anyType = valibotSchema.anyType;\n pipes.push(valibotSchema.expression);\n }\n\n if ($ref) {\n state.circularReferenceTracker.delete($ref);\n }\n\n if (pipes.length) {\n if (schema.accessScope === 'read') {\n const readonlyExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.actions.readonly,\n }),\n });\n pipes.push(readonlyExpression);\n }\n }\n\n if (pipes.length) {\n let callParameter: ts.Expression | undefined;\n\n if (schema.default !== undefined) {\n const isBigInt = schema.type === 'integer' && schema.format === 'int64';\n callParameter = numberParameter({ isBigInt, value: schema.default });\n if (callParameter) {\n pipes = [\n compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.schemas.optional,\n }),\n parameters: [pipesToExpression(pipes), callParameter],\n }),\n ];\n }\n }\n\n if (optional && !callParameter) {\n pipes = [\n compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: identifiers.schemas.optional,\n }),\n parameters: [pipesToExpression(pipes)],\n }),\n ];\n }\n }\n\n // emit nodes only if $ref points to a reusable component\n if (identifier && identifier.name && identifier.created) {\n const statement = compiler.constVariable({\n comment: plugin.config.comments\n ? createSchemaComment({ schema })\n : undefined,\n exportConst: true,\n expression: pipesToExpression(pipes),\n name: identifier.name,\n typeName: state.hasCircularReference\n ? (compiler.propertyAccessExpression({\n expression: identifiers.v,\n name: anyType || identifiers.types.GenericSchema.text,\n }) as unknown as ts.TypeNode)\n : undefined,\n });\n file.add(statement);\n\n return [];\n }\n\n return pipes;\n};\n\nexport const handler: ValibotPlugin['Handler'] = ({ plugin }) => {\n const file = plugin.createFile({\n id: valibotId,\n identifierCase: plugin.config.case,\n path: plugin.output,\n });\n\n file.import({\n alias: identifiers.v.text,\n module: 'valibot',\n name: '*',\n });\n\n plugin.forEach('operation', 'parameter', 'requestBody', 'schema', (event) => {\n const state: State = {\n circularReferenceTracker: new Set(),\n hasCircularReference: false,\n nameCase: plugin.config.definitions.case,\n nameTransformer: plugin.config.definitions.name,\n };\n\n if (event.type === 'operation') {\n operationToValibotSchema({\n operation: event.operation,\n plugin,\n state,\n });\n } else if (event.type === 'parameter') {\n schemaToValibotSchema({\n $ref: event.$ref,\n plugin,\n schema: event.parameter.schema,\n state,\n });\n } else if (event.type === 'requestBody') {\n schemaToValibotSchema({\n $ref: event.$ref,\n plugin,\n schema: event.requestBody.schema,\n state,\n });\n } else if (event.type === 'schema') {\n schemaToValibotSchema({\n $ref: event.$ref,\n plugin,\n schema: event.schema,\n state,\n });\n }\n });\n};\n","import { operationResponsesMap } from '../../ir/operation';\nimport type { IR } from '../../ir/types';\nimport { valibotId } from './constants';\nimport { schemaToValibotSchema, type State } from './plugin';\nimport type { ValibotPlugin } from './types';\n\nexport const operationToValibotSchema = ({\n operation,\n plugin,\n state,\n}: {\n operation: IR.OperationObject;\n plugin: ValibotPlugin['Instance'];\n state: State;\n}) => {\n const file = plugin.context.file({ id: valibotId })!;\n\n if (plugin.config.requests.enabled) {\n const requiredProperties = new Set<string>();\n\n const schemaData: IR.SchemaObject = {\n properties: {\n body: {\n type: 'never',\n },\n path: {\n type: 'never',\n },\n query: {\n type: 'never',\n },\n },\n type: 'object',\n };\n\n if (operation.parameters) {\n // TODO: add support for cookies\n\n if (operation.parameters.header) {\n const properties: Record<string, IR.SchemaObject> = {};\n const required: Array<string> = [];\n\n for (const key in operation.parameters.header) {\n const parameter = operation.parameters.header[key]!;\n properties[parameter.name] = parameter.schema;\n if (parameter.required) {\n required.push(parameter.name);\n requiredProperties.add('headers');\n }\n }\n\n if (Object.keys(properties).length) {\n schemaData.properties!.headers = {\n properties,\n required,\n type: 'object',\n };\n }\n }\n\n if (operation.parameters.path) {\n const properties: Record<string, IR.SchemaObject> = {};\n const required: Array<string> = [];\n\n for (const key in operation.parameters.path) {\n const parameter = operation.parameters.path[key]!;\n properties[parameter.name] = parameter.schema;\n if (parameter.required) {\n required.push(parameter.name);\n requiredProperties.add('path');\n }\n }\n\n if (Object.keys(properties).length) {\n schemaData.properties!.path = {\n properties,\n required,\n type: 'object',\n };\n }\n }\n\n if (operation.parameters.query) {\n const properties: Record<string, IR.SchemaObject> = {};\n const required: Array<string> = [];\n\n for (const key in operation.parameters.query) {\n const parameter = operation.parameters.query[key]!;\n properties[parameter.name] = parameter.schema;\n if (parameter.required) {\n required.push(parameter.name);\n requiredProperties.add('query');\n }\n }\n\n if (Object.keys(properties).length) {\n schemaData.properties!.query = {\n properties,\n required,\n type: 'object',\n };\n }\n }\n }\n\n if (operation.body) {\n schemaData.properties!.body = operation.body.schema;\n\n if (operation.body.required) {\n requiredProperties.add('body');\n }\n }\n\n schemaData.required = [...requiredProperties];\n\n const identifierData = file.identifier({\n // TODO: refactor for better cross-plugin compatibility\n $ref: `#/valibot-data/${operation.id}`,\n case: plugin.config.requests.case,\n create: true,\n nameTransformer: plugin.config.requests.name,\n namespace: 'value',\n });\n schemaToValibotSchema({\n // TODO: refactor for better cross-plugin compatibility\n $ref: `#/valibot-data/${operation.id}`,\n identifier: identifierData,\n plugin,\n schema: schemaData,\n state,\n });\n }\n\n if (plugin.config.responses.enabled) {\n if (operation.responses) {\n const { response } = operationResponsesMap(operation);\n\n if (response) {\n const identifierResponse = file.identifier({\n // TODO: refactor for better cross-plugin compatibility\n $ref: `#/valibot-response/${operation.id}`,\n case: plugin.config.responses.case,\n create: true,\n nameTransformer: plugin.config.responses.name,\n namespace: 'value',\n });\n schemaToValibotSchema({\n // TODO: refactor for better cross-plugin compatibility\n $ref: `#/valibot-response/${operation.id}`,\n identifier: identifierResponse,\n plugin,\n schema: response,\n state,\n });\n }\n }\n }\n};\n","import { definePluginConfig } from '../shared/utils/config';\nimport { api } from './api';\nimport { handler } from './plugin';\nimport type { ValibotPlugin } from './types';\n\nexport const defaultConfig: ValibotPlugin['Config'] = {\n api,\n config: {\n case: 'camelCase',\n comments: true,\n exportFromIndex: false,\n metadata: false,\n },\n handler,\n name: 'valibot',\n output: 'valibot',\n resolveConfig: (plugin, context) => {\n plugin.config.definitions = context.valueToObject({\n defaultValue: {\n case: plugin.config.case ?? 'camelCase',\n enabled: true,\n name: 'v{{name}}',\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n string: (name) => ({ enabled: true, name }),\n },\n value: plugin.config.definitions,\n });\n\n plugin.config.requests = context.valueToObject({\n defaultValue: {\n case: plugin.config.case ?? 'camelCase',\n enabled: true,\n name: 'v{{name}}Data',\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n string: (name) => ({ enabled: true, name }),\n },\n value: plugin.config.requests,\n });\n\n plugin.config.responses = context.valueToObject({\n defaultValue: {\n case: plugin.config.case ?? 'camelCase',\n enabled: true,\n name: 'v{{name}}Response',\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n string: (name) => ({ enabled: true, name }),\n },\n value: plugin.config.responses,\n });\n },\n tags: ['validator'],\n};\n\n/**\n * Type helper for Valibot plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig = definePluginConfig(defaultConfig);\n","import { compiler } from '../../compiler';\n\nexport const identifiers = {\n parseAsync: compiler.identifier({ text: 'parseAsync' }),\n};\n\nexport const zodId = 'zod';\n","import type ts from 'typescript';\n\nimport { compiler } from '../../compiler';\nimport type { TypeScriptFile } from '../../generate/files';\nimport type { IR } from '../../ir/types';\nimport { identifiers, zodId } from './constants';\nimport type { ZodPlugin } from './types';\n\nconst createRequestValidator = ({\n file,\n operation,\n plugin,\n}: {\n file: TypeScriptFile;\n operation: IR.OperationObject;\n plugin: ZodPlugin['Instance'];\n}): ts.ArrowFunction | undefined => {\n const { requests } = plugin.config;\n const schemaIdentifier = plugin.context.file({ id: zodId })!.identifier({\n // TODO: refactor for better cross-plugin compatibility\n $ref: `#/zod-data/${operation.id}`,\n // TODO: refactor to not have to define nameTransformer\n nameTransformer: typeof requests === 'object' ? requests.name : undefined,\n namespace: 'value',\n });\n\n if (!schemaIdentifier.name) {\n return;\n }\n\n file.import({\n module: file.relativePathToFile({\n context: plugin.context,\n id: zodId,\n }),\n name: schemaIdentifier.name,\n });\n\n const dataParameterName = 'data';\n\n return compiler.arrowFunction({\n async: true,\n parameters: [\n {\n name: dataParameterName,\n },\n ],\n statements: [\n compiler.returnStatement({\n expression: compiler.awaitExpression({\n expression: compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: compiler.identifier({ text: schemaIdentifier.name }),\n name: identifiers.parseAsync,\n }),\n parameters: [compiler.identifier({ text: dataParameterName })],\n }),\n }),\n }),\n ],\n });\n};\n\nconst createResponseValidator = ({\n file,\n operation,\n plugin,\n}: {\n file: TypeScriptFile;\n operation: IR.OperationObject;\n plugin: ZodPlugin['Instance'];\n}): ts.ArrowFunction | undefined => {\n const { responses } = plugin.config;\n const schemaIdentifier = plugin.context.file({ id: zodId })!.identifier({\n // TODO: refactor for better cross-plugin compatibility\n $ref: `#/zod-response/${operation.id}`,\n // TODO: refactor to not have to define nameTransformer\n nameTransformer: typeof responses === 'object' ? responses.name : undefined,\n namespace: 'value',\n });\n\n if (!schemaIdentifier.name) {\n return;\n }\n\n file.import({\n module: file.relativePathToFile({\n context: plugin.context,\n id: zodId,\n }),\n name: schemaIdentifier.name,\n });\n\n const dataParameterName = 'data';\n\n return compiler.arrowFunction({\n async: true,\n parameters: [\n {\n name: dataParameterName,\n },\n ],\n statements: [\n compiler.returnStatement({\n expression: compiler.awaitExpression({\n expression: compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: compiler.identifier({ text: schemaIdentifier.name }),\n name: identifiers.parseAsync,\n }),\n parameters: [compiler.identifier({ text: dataParameterName })],\n }),\n }),\n }),\n ],\n });\n};\n\nexport type Api = {\n createRequestValidator: (args: {\n file: TypeScriptFile;\n operation: IR.OperationObject;\n plugin: ZodPlugin['Instance'];\n }) => ts.ArrowFunction | undefined;\n createResponseValidator: (args: {\n file: TypeScriptFile;\n operation: IR.OperationObject;\n plugin: ZodPlugin['Instance'];\n }) => ts.ArrowFunction | undefined;\n};\n\nexport const api: Api = {\n createRequestValidator,\n createResponseValidator,\n};\n","import { operationResponsesMap } from '../../ir/operation';\nimport type { IR } from '../../ir/types';\nimport { zodId } from './constants';\nimport type { State } from './plugin';\nimport { schemaToZodSchema } from './plugin';\nimport type { ZodPlugin } from './types';\n\nexport const operationToZodSchema = ({\n operation,\n plugin,\n state,\n}: {\n operation: IR.OperationObject;\n plugin: ZodPlugin['Instance'];\n state: State;\n}) => {\n const file = plugin.context.file({ id: zodId })!;\n\n if (plugin.config.requests.enabled) {\n const requiredProperties = new Set<string>();\n\n const schemaData: IR.SchemaObject = {\n properties: {\n body: {\n type: 'never',\n },\n path: {\n type: 'never',\n },\n query: {\n type: 'never',\n },\n },\n type: 'object',\n };\n\n if (operation.parameters) {\n // TODO: add support for cookies\n\n if (operation.parameters.header) {\n const properties: Record<string, IR.SchemaObject> = {};\n const required: Array<string> = [];\n\n for (const key in operation.parameters.header) {\n const parameter = operation.parameters.header[key]!;\n properties[parameter.name] = parameter.schema;\n if (parameter.required) {\n required.push(parameter.name);\n requiredProperties.add('headers');\n }\n }\n\n if (Object.keys(properties).length) {\n schemaData.properties!.headers = {\n properties,\n required,\n type: 'object',\n };\n }\n }\n\n if (operation.parameters.path) {\n const properties: Record<string, IR.SchemaObject> = {};\n const required: Array<string> = [];\n\n for (const key in operation.parameters.path) {\n const parameter = operation.parameters.path[key]!;\n properties[parameter.name] = parameter.schema;\n if (parameter.required) {\n required.push(parameter.name);\n requiredProperties.add('path');\n }\n }\n\n if (Object.keys(properties).length) {\n schemaData.properties!.path = {\n properties,\n required,\n type: 'object',\n };\n }\n }\n\n if (operation.parameters.query) {\n const properties: Record<string, IR.SchemaObject> = {};\n const required: Array<string> = [];\n\n for (const key in operation.parameters.query) {\n const parameter = operation.parameters.query[key]!;\n properties[parameter.name] = parameter.schema;\n if (parameter.required) {\n required.push(parameter.name);\n requiredProperties.add('query');\n }\n }\n\n if (Object.keys(properties).length) {\n schemaData.properties!.query = {\n properties,\n required,\n type: 'object',\n };\n }\n }\n }\n\n if (operation.body) {\n schemaData.properties!.body = operation.body.schema;\n\n if (operation.body.required) {\n requiredProperties.add('body');\n }\n }\n\n schemaData.required = [...requiredProperties];\n\n const identifierData = file.identifier({\n // TODO: refactor for better cross-plugin compatibility\n $ref: `#/zod-data/${operation.id}`,\n case: plugin.config.requests.case,\n create: true,\n nameTransformer: plugin.config.requests.name,\n namespace: 'value',\n });\n schemaToZodSchema({\n // TODO: refactor for better cross-plugin compatibility\n $ref: `#/zod-data/${operation.id}`,\n identifier: identifierData,\n plugin,\n schema: schemaData,\n state,\n });\n }\n\n if (plugin.config.responses.enabled) {\n if (operation.responses) {\n const { response } = operationResponsesMap(operation);\n\n if (response) {\n const identifierResponse = file.identifier({\n // TODO: refactor for better cross-plugin compatibility\n $ref: `#/zod-response/${operation.id}`,\n case: plugin.config.responses.case,\n create: true,\n nameTransformer: plugin.config.responses.name,\n namespace: 'value',\n });\n schemaToZodSchema({\n // TODO: refactor for better cross-plugin compatibility\n $ref: `#/zod-response/${operation.id}`,\n identifier: identifierResponse,\n plugin,\n schema: response,\n state,\n });\n }\n }\n }\n};\n","import ts from 'typescript';\n\nimport { compiler } from '../../compiler';\nimport type { Identifier } from '../../generate/files';\nimport { deduplicateSchema } from '../../ir/schema';\nimport type { IR } from '../../ir/types';\nimport type { StringCase } from '../../types/case';\nimport { numberRegExp } from '../../utils/regexp';\nimport { createSchemaComment } from '../shared/utils/schema';\nimport { zodId } from './constants';\nimport { operationToZodSchema } from './operation';\nimport type { ZodPlugin } from './types';\n\ninterface SchemaWithType<T extends Required<IR.SchemaObject>['type']>\n extends Omit<IR.SchemaObject, 'type'> {\n type: Extract<Required<IR.SchemaObject>['type'], T>;\n}\n\nexport interface State {\n circularReferenceTracker: Set<string>;\n hasCircularReference: boolean;\n nameCase: StringCase;\n nameTransformer: string | ((name: string) => string);\n}\n\n// frequently used identifiers\nconst andIdentifier = compiler.identifier({ text: 'and' });\nconst arrayIdentifier = compiler.identifier({ text: 'array' });\nconst coerceIdentifier = compiler.identifier({ text: 'coerce' });\nconst defaultIdentifier = compiler.identifier({ text: 'default' });\nconst describeIdentifier = compiler.identifier({ text: 'describe' });\nconst intersectionIdentifier = compiler.identifier({ text: 'intersection' });\nconst lazyIdentifier = compiler.identifier({ text: 'lazy' });\nconst lengthIdentifier = compiler.identifier({ text: 'length' });\nconst literalIdentifier = compiler.identifier({ text: 'literal' });\nconst maxIdentifier = compiler.identifier({ text: 'max' });\nconst minIdentifier = compiler.identifier({ text: 'min' });\nconst objectIdentifier = compiler.identifier({ text: 'object' });\nconst optionalIdentifier = compiler.identifier({ text: 'optional' });\nconst readonlyIdentifier = compiler.identifier({ text: 'readonly' });\nconst recordIdentifier = compiler.identifier({ text: 'record' });\nconst regexIdentifier = compiler.identifier({ text: 'regex' });\nconst unionIdentifier = compiler.identifier({ text: 'union' });\nconst zIdentifier = compiler.identifier({ text: 'z' });\n\nconst arrayTypeToZodSchema = ({\n plugin,\n schema,\n state,\n}: {\n plugin: ZodPlugin['Instance'];\n schema: SchemaWithType<'array'>;\n state: State;\n}): ts.CallExpression => {\n const functionName = compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: arrayIdentifier,\n });\n\n let arrayExpression: ts.CallExpression | undefined;\n\n if (!schema.items) {\n arrayExpression = compiler.callExpression({\n functionName,\n parameters: [\n unknownTypeToZodSchema({\n schema: {\n type: 'unknown',\n },\n }),\n ],\n });\n } else {\n schema = deduplicateSchema({ schema });\n\n // at least one item is guaranteed\n const itemExpressions = schema.items!.map((item) =>\n schemaToZodSchema({\n plugin,\n schema: item,\n state,\n }),\n );\n\n if (itemExpressions.length === 1) {\n arrayExpression = compiler.callExpression({\n functionName,\n parameters: itemExpressions,\n });\n } else {\n if (schema.logicalOperator === 'and') {\n // TODO: parser - handle intersection\n // return compiler.typeArrayNode(\n // compiler.typeIntersectionNode({ types: itemExpressions }),\n // );\n }\n\n arrayExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: arrayIdentifier,\n }),\n parameters: [\n compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: unionIdentifier,\n }),\n parameters: [\n compiler.arrayLiteralExpression({\n elements: itemExpressions,\n }),\n ],\n }),\n ],\n });\n }\n }\n\n if (schema.minItems === schema.maxItems && schema.minItems !== undefined) {\n arrayExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: arrayExpression,\n name: lengthIdentifier,\n }),\n parameters: [compiler.valueToExpression({ value: schema.minItems })],\n });\n } else {\n if (schema.minItems !== undefined) {\n arrayExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: arrayExpression,\n name: minIdentifier,\n }),\n parameters: [compiler.valueToExpression({ value: schema.minItems })],\n });\n }\n\n if (schema.maxItems !== undefined) {\n arrayExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: arrayExpression,\n name: maxIdentifier,\n }),\n parameters: [compiler.valueToExpression({ value: schema.maxItems })],\n });\n }\n }\n\n return arrayExpression;\n};\n\nconst booleanTypeToZodSchema = ({\n schema,\n}: {\n schema: SchemaWithType<'boolean'>;\n}) => {\n if (typeof schema.const === 'boolean') {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: literalIdentifier,\n }),\n parameters: [compiler.ots.boolean(schema.const)],\n });\n return expression;\n }\n\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: compiler.identifier({ text: 'boolean' }),\n }),\n });\n return expression;\n};\n\nconst enumTypeToZodSchema = ({\n schema,\n}: {\n schema: SchemaWithType<'enum'>;\n}): ts.CallExpression => {\n const enumMembers: Array<ts.LiteralExpression> = [];\n\n let isNullable = false;\n\n for (const item of schema.items ?? []) {\n // Zod supports only string enums\n if (item.type === 'string' && typeof item.const === 'string') {\n enumMembers.push(\n compiler.stringLiteral({\n text: item.const,\n }),\n );\n } else if (item.type === 'null' || item.const === null) {\n isNullable = true;\n }\n }\n\n if (!enumMembers.length) {\n return unknownTypeToZodSchema({\n schema: {\n type: 'unknown',\n },\n });\n }\n\n let enumExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: compiler.identifier({ text: 'enum' }),\n }),\n parameters: [\n compiler.arrayLiteralExpression({\n elements: enumMembers,\n multiLine: false,\n }),\n ],\n });\n\n if (isNullable) {\n enumExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: enumExpression,\n name: compiler.identifier({ text: 'nullable' }),\n }),\n });\n }\n\n return enumExpression;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst neverTypeToZodSchema = (_props: { schema: SchemaWithType<'never'> }) => {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: compiler.identifier({ text: 'never' }),\n }),\n });\n return expression;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst nullTypeToZodSchema = (_props: { schema: SchemaWithType<'null'> }) => {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: compiler.identifier({ text: 'null' }),\n }),\n });\n return expression;\n};\n\nconst numberParameter = ({\n isBigInt,\n value,\n}: {\n isBigInt: boolean;\n value: unknown;\n}) => {\n const expression = compiler.valueToExpression({ value });\n\n if (\n isBigInt &&\n (typeof value === 'bigint' ||\n typeof value === 'number' ||\n typeof value === 'string' ||\n typeof value === 'boolean')\n ) {\n return compiler.callExpression({\n functionName: 'BigInt',\n parameters: [expression],\n });\n }\n\n return expression;\n};\n\nconst numberTypeToZodSchema = ({\n schema,\n}: {\n schema: SchemaWithType<'integer' | 'number'>;\n}) => {\n const isBigInt = schema.type === 'integer' && schema.format === 'int64';\n\n if (typeof schema.const === 'number') {\n // TODO: parser - handle bigint constants\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: literalIdentifier,\n }),\n parameters: [compiler.ots.number(schema.const)],\n });\n return expression;\n }\n\n let numberExpression = compiler.callExpression({\n functionName: isBigInt\n ? compiler.propertyAccessExpression({\n expression: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: coerceIdentifier,\n }),\n name: compiler.identifier({ text: 'bigint' }),\n })\n : compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: compiler.identifier({ text: 'number' }),\n }),\n });\n\n if (!isBigInt && schema.type === 'integer') {\n numberExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: numberExpression,\n name: compiler.identifier({ text: 'int' }),\n }),\n });\n }\n\n if (schema.exclusiveMinimum !== undefined) {\n numberExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: numberExpression,\n name: compiler.identifier({ text: 'gt' }),\n }),\n parameters: [\n numberParameter({ isBigInt, value: schema.exclusiveMinimum }),\n ],\n });\n } else if (schema.minimum !== undefined) {\n numberExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: numberExpression,\n name: compiler.identifier({ text: 'gte' }),\n }),\n parameters: [numberParameter({ isBigInt, value: schema.minimum })],\n });\n }\n\n if (schema.exclusiveMaximum !== undefined) {\n numberExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: numberExpression,\n name: compiler.identifier({ text: 'lt' }),\n }),\n parameters: [\n numberParameter({ isBigInt, value: schema.exclusiveMaximum }),\n ],\n });\n } else if (schema.maximum !== undefined) {\n numberExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: numberExpression,\n name: compiler.identifier({ text: 'lte' }),\n }),\n parameters: [numberParameter({ isBigInt, value: schema.maximum })],\n });\n }\n\n return numberExpression;\n};\n\nconst objectTypeToZodSchema = ({\n plugin,\n schema,\n state,\n}: {\n plugin: ZodPlugin['Instance'];\n schema: SchemaWithType<'object'>;\n state: State;\n}): {\n anyType: string;\n expression: ts.CallExpression;\n} => {\n // TODO: parser - handle constants\n const properties: Array<ts.PropertyAssignment> = [];\n\n const required = schema.required ?? [];\n\n for (const name in schema.properties) {\n const property = schema.properties[name]!;\n const isRequired = required.includes(name);\n\n const propertyExpression = schemaToZodSchema({\n optional: !isRequired,\n plugin,\n schema: property,\n state,\n });\n\n numberRegExp.lastIndex = 0;\n let propertyName;\n if (numberRegExp.test(name)) {\n // For numeric literals, we'll handle negative numbers by using a string literal\n // instead of trying to use a PrefixUnaryExpression\n propertyName = name.startsWith('-')\n ? ts.factory.createStringLiteral(name)\n : ts.factory.createNumericLiteral(name);\n } else {\n propertyName = name;\n }\n // TODO: parser - abstract safe property name logic\n if (\n ((name.match(/^[0-9]/) && name.match(/\\D+/g)) || name.match(/\\W/g)) &&\n !name.startsWith(\"'\") &&\n !name.endsWith(\"'\")\n ) {\n propertyName = `'${name}'`;\n }\n properties.push(\n compiler.propertyAssignment({\n initializer: propertyExpression,\n name: propertyName,\n }),\n );\n }\n\n if (\n schema.additionalProperties &&\n schema.additionalProperties.type === 'object' &&\n !Object.keys(properties).length\n ) {\n const zodSchema = schemaToZodSchema({\n plugin,\n schema: schema.additionalProperties,\n state,\n });\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: recordIdentifier,\n }),\n parameters: [zodSchema],\n });\n return {\n anyType: 'AnyZodObject',\n expression,\n };\n }\n\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: objectIdentifier,\n }),\n parameters: [ts.factory.createObjectLiteralExpression(properties, true)],\n });\n return {\n anyType: 'AnyZodObject',\n expression,\n };\n};\n\nconst stringTypeToZodSchema = ({\n plugin,\n schema,\n}: {\n plugin: ZodPlugin['Instance'];\n schema: SchemaWithType<'string'>;\n}) => {\n if (typeof schema.const === 'string') {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: literalIdentifier,\n }),\n parameters: [compiler.ots.string(schema.const)],\n });\n return expression;\n }\n\n let stringExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: compiler.identifier({ text: 'string' }),\n }),\n });\n\n if (schema.format) {\n switch (schema.format) {\n case 'date-time':\n stringExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: stringExpression,\n name: compiler.identifier({ text: 'datetime' }),\n }),\n parameters: plugin.config.dates.offset\n ? [\n compiler.objectExpression({\n obj: [\n {\n key: 'offset',\n value: true,\n },\n ],\n }),\n ]\n : [],\n });\n break;\n case 'ipv4':\n case 'ipv6':\n stringExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: stringExpression,\n name: compiler.identifier({ text: 'ip' }),\n }),\n });\n break;\n case 'uri':\n stringExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: stringExpression,\n name: compiler.identifier({ text: 'url' }),\n }),\n });\n break;\n case 'date':\n case 'email':\n case 'time':\n case 'uuid':\n stringExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: stringExpression,\n name: compiler.identifier({ text: schema.format }),\n }),\n });\n break;\n }\n }\n\n if (schema.minLength === schema.maxLength && schema.minLength !== undefined) {\n stringExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: stringExpression,\n name: lengthIdentifier,\n }),\n parameters: [compiler.valueToExpression({ value: schema.minLength })],\n });\n } else {\n if (schema.minLength !== undefined) {\n stringExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: stringExpression,\n name: minIdentifier,\n }),\n parameters: [compiler.valueToExpression({ value: schema.minLength })],\n });\n }\n\n if (schema.maxLength !== undefined) {\n stringExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: stringExpression,\n name: maxIdentifier,\n }),\n parameters: [compiler.valueToExpression({ value: schema.maxLength })],\n });\n }\n }\n\n if (schema.pattern) {\n stringExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: stringExpression,\n name: regexIdentifier,\n }),\n parameters: [compiler.regularExpressionLiteral({ text: schema.pattern })],\n });\n }\n\n return stringExpression;\n};\n\nconst tupleTypeToZodSchema = ({\n plugin,\n schema,\n state,\n}: {\n plugin: ZodPlugin['Instance'];\n schema: SchemaWithType<'tuple'>;\n state: State;\n}) => {\n if (schema.const && Array.isArray(schema.const)) {\n const tupleElements = schema.const.map((value) =>\n compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: literalIdentifier,\n }),\n parameters: [compiler.valueToExpression({ value })],\n }),\n );\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: compiler.identifier({ text: 'tuple' }),\n }),\n parameters: [\n compiler.arrayLiteralExpression({\n elements: tupleElements,\n }),\n ],\n });\n return expression;\n }\n\n const tupleElements: Array<ts.Expression> = [];\n\n for (const item of schema.items ?? []) {\n tupleElements.push(\n schemaToZodSchema({\n plugin,\n schema: item,\n state,\n }),\n );\n }\n\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: compiler.identifier({ text: 'tuple' }),\n }),\n parameters: [\n compiler.arrayLiteralExpression({\n elements: tupleElements,\n }),\n ],\n });\n return expression;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst undefinedTypeToZodSchema = (_props: {\n schema: SchemaWithType<'undefined'>;\n}) => {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: compiler.identifier({ text: 'undefined' }),\n }),\n });\n return expression;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst unknownTypeToZodSchema = (_props: {\n schema: SchemaWithType<'unknown'>;\n}) => {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: compiler.identifier({ text: 'unknown' }),\n }),\n });\n return expression;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst voidTypeToZodSchema = (_props: { schema: SchemaWithType<'void'> }) => {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: compiler.identifier({ text: 'void' }),\n }),\n });\n return expression;\n};\n\nconst schemaTypeToZodSchema = ({\n plugin,\n schema,\n state,\n}: {\n plugin: ZodPlugin['Instance'];\n schema: IR.SchemaObject;\n state: State;\n}): {\n anyType?: string;\n expression: ts.Expression;\n} => {\n switch (schema.type as Required<IR.SchemaObject>['type']) {\n case 'array':\n return {\n expression: arrayTypeToZodSchema({\n plugin,\n schema: schema as SchemaWithType<'array'>,\n state,\n }),\n };\n case 'boolean':\n return {\n expression: booleanTypeToZodSchema({\n schema: schema as SchemaWithType<'boolean'>,\n }),\n };\n case 'enum':\n return {\n expression: enumTypeToZodSchema({\n schema: schema as SchemaWithType<'enum'>,\n }),\n };\n case 'integer':\n case 'number':\n return {\n expression: numberTypeToZodSchema({\n schema: schema as SchemaWithType<'integer' | 'number'>,\n }),\n };\n case 'never':\n return {\n expression: neverTypeToZodSchema({\n schema: schema as SchemaWithType<'never'>,\n }),\n };\n case 'null':\n return {\n expression: nullTypeToZodSchema({\n schema: schema as SchemaWithType<'null'>,\n }),\n };\n case 'object':\n return objectTypeToZodSchema({\n plugin,\n schema: schema as SchemaWithType<'object'>,\n state,\n });\n case 'string':\n return {\n expression: stringTypeToZodSchema({\n plugin,\n schema: schema as SchemaWithType<'string'>,\n }),\n };\n case 'tuple':\n return {\n expression: tupleTypeToZodSchema({\n plugin,\n schema: schema as SchemaWithType<'tuple'>,\n state,\n }),\n };\n case 'undefined':\n return {\n expression: undefinedTypeToZodSchema({\n schema: schema as SchemaWithType<'undefined'>,\n }),\n };\n case 'unknown':\n return {\n expression: unknownTypeToZodSchema({\n schema: schema as SchemaWithType<'unknown'>,\n }),\n };\n case 'void':\n return {\n expression: voidTypeToZodSchema({\n schema: schema as SchemaWithType<'void'>,\n }),\n };\n }\n};\n\nexport const schemaToZodSchema = ({\n $ref,\n identifier: _identifier,\n optional,\n plugin,\n schema,\n state,\n}: {\n /**\n * When $ref is supplied, a node will be emitted to the file.\n */\n $ref?: string;\n identifier?: Identifier;\n /**\n * Accept `optional` to handle optional object properties. We can't handle\n * this inside the object function because `.optional()` must come before\n * `.default()` which is handled in this function.\n */\n optional?: boolean;\n plugin: ZodPlugin['Instance'];\n schema: IR.SchemaObject;\n state: State;\n}): ts.Expression => {\n const file = plugin.context.file({ id: zodId })!;\n\n let anyType: string | undefined;\n let expression: ts.Expression | undefined;\n let identifier: ReturnType<typeof file.identifier> | undefined = _identifier;\n\n if ($ref) {\n state.circularReferenceTracker.add($ref);\n\n if (!identifier) {\n identifier = file.identifier({\n $ref,\n case: state.nameCase,\n create: true,\n nameTransformer: state.nameTransformer,\n namespace: 'value',\n });\n }\n }\n\n if (schema.$ref) {\n const isCircularReference = state.circularReferenceTracker.has(schema.$ref);\n\n // if $ref hasn't been processed yet, inline it to avoid the\n // \"Block-scoped variable used before its declaration.\" error\n // this could be (maybe?) fixed by reshuffling the generation order\n let identifierRef = file.identifier({\n $ref: schema.$ref,\n case: state.nameCase,\n nameTransformer: state.nameTransformer,\n namespace: 'value',\n });\n\n if (!identifierRef.name) {\n const ref = plugin.context.resolveIrRef<IR.SchemaObject>(schema.$ref);\n expression = schemaToZodSchema({\n $ref: schema.$ref,\n plugin,\n schema: ref,\n state,\n });\n\n identifierRef = file.identifier({\n $ref: schema.$ref,\n case: state.nameCase,\n nameTransformer: state.nameTransformer,\n namespace: 'value',\n });\n }\n\n // if `identifierRef.name` is falsy, we already set expression above\n if (identifierRef.name) {\n const refIdentifier = compiler.identifier({ text: identifierRef.name });\n if (isCircularReference) {\n expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: lazyIdentifier,\n }),\n parameters: [\n compiler.arrowFunction({\n statements: [\n compiler.returnStatement({\n expression: refIdentifier,\n }),\n ],\n }),\n ],\n });\n state.hasCircularReference = true;\n } else {\n expression = refIdentifier;\n }\n }\n } else if (schema.type) {\n const zodSchema = schemaTypeToZodSchema({ plugin, schema, state });\n anyType = zodSchema.anyType;\n expression = zodSchema.expression;\n\n if (plugin.config.metadata && schema.description) {\n expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression,\n name: describeIdentifier,\n }),\n parameters: [compiler.stringLiteral({ text: schema.description })],\n });\n }\n } else if (schema.items) {\n schema = deduplicateSchema({ schema });\n\n if (schema.items) {\n const itemTypes = schema.items.map((item) =>\n schemaToZodSchema({\n plugin,\n schema: item,\n state,\n }),\n );\n\n if (schema.logicalOperator === 'and') {\n const firstSchema = schema.items[0]!;\n // we want to add an intersection, but not every schema can use the same API.\n // if the first item contains another array or not an object, we cannot use\n // `.merge()` as that does not exist on `.union()` and non-object schemas.\n if (\n firstSchema.logicalOperator === 'or' ||\n (firstSchema.type && firstSchema.type !== 'object')\n ) {\n expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: intersectionIdentifier,\n }),\n parameters: itemTypes,\n });\n } else {\n expression = itemTypes[0];\n itemTypes.slice(1).forEach((item) => {\n expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: expression!,\n name: andIdentifier,\n }),\n parameters: [item],\n });\n });\n }\n } else {\n expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: unionIdentifier,\n }),\n parameters: [\n compiler.arrayLiteralExpression({\n elements: itemTypes,\n }),\n ],\n });\n }\n } else {\n expression = schemaToZodSchema({\n plugin,\n schema,\n state,\n });\n }\n } else {\n // catch-all fallback for failed schemas\n const zodSchema = schemaTypeToZodSchema({\n plugin,\n schema: {\n type: 'unknown',\n },\n state,\n });\n anyType = zodSchema.anyType;\n expression = zodSchema.expression;\n }\n\n if ($ref) {\n state.circularReferenceTracker.delete($ref);\n }\n\n if (expression) {\n if (schema.accessScope === 'read') {\n expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression,\n name: readonlyIdentifier,\n }),\n });\n }\n\n if (optional) {\n expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression,\n name: optionalIdentifier,\n }),\n });\n }\n\n if (schema.default !== undefined) {\n const isBigInt = schema.type === 'integer' && schema.format === 'int64';\n const callParameter = numberParameter({\n isBigInt,\n value: schema.default,\n });\n if (callParameter) {\n expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression,\n name: defaultIdentifier,\n }),\n parameters: [callParameter],\n });\n }\n }\n }\n\n // emit nodes only if $ref points to a reusable component\n if (identifier && identifier.name && identifier.created) {\n const statement = compiler.constVariable({\n comment: plugin.config.comments\n ? createSchemaComment({ schema })\n : undefined,\n exportConst: true,\n expression: expression!,\n name: identifier.name,\n typeName: state.hasCircularReference\n ? (compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: anyType || 'ZodTypeAny',\n }) as unknown as ts.TypeNode)\n : undefined,\n });\n file.add(statement);\n }\n\n return expression!;\n};\n\nexport const handler: ZodPlugin['Handler'] = ({ plugin }) => {\n const file = plugin.createFile({\n id: zodId,\n identifierCase: plugin.config.case,\n path: plugin.output,\n });\n\n file.import({\n module: 'zod',\n name: 'z',\n });\n\n plugin.forEach('operation', 'parameter', 'requestBody', 'schema', (event) => {\n const state: State = {\n circularReferenceTracker: new Set(),\n hasCircularReference: false,\n nameCase: plugin.config.definitions.case,\n nameTransformer: plugin.config.definitions.name,\n };\n\n if (event.type === 'operation') {\n operationToZodSchema({ operation: event.operation, plugin, state });\n } else if (event.type === 'parameter') {\n schemaToZodSchema({\n $ref: event.$ref,\n plugin,\n schema: event.parameter.schema,\n state,\n });\n } else if (event.type === 'requestBody') {\n schemaToZodSchema({\n $ref: event.$ref,\n plugin,\n schema: event.requestBody.schema,\n state,\n });\n } else if (event.type === 'schema') {\n schemaToZodSchema({\n $ref: event.$ref,\n plugin,\n schema: event.schema,\n state,\n });\n }\n });\n};\n","import { definePluginConfig } from '../shared/utils/config';\nimport { api } from './api';\nimport { handler } from './plugin';\nimport type { ZodPlugin } from './types';\n\nexport const defaultConfig: ZodPlugin['Config'] = {\n api,\n config: {\n case: 'camelCase',\n comments: true,\n exportFromIndex: false,\n metadata: false,\n },\n handler,\n name: 'zod',\n output: 'zod',\n resolveConfig: (plugin, context) => {\n plugin.config.dates = context.valueToObject({\n defaultValue: {\n offset: false,\n },\n value: plugin.config.dates,\n });\n\n plugin.config.definitions = context.valueToObject({\n defaultValue: {\n case: plugin.config.case ?? 'camelCase',\n enabled: true,\n name: 'z{{name}}',\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n string: (name) => ({ enabled: true, name }),\n },\n value: plugin.config.definitions,\n });\n\n plugin.config.requests = context.valueToObject({\n defaultValue: {\n case: plugin.config.case ?? 'camelCase',\n enabled: true,\n name: 'z{{name}}Data',\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n string: (name) => ({ enabled: true, name }),\n },\n value: plugin.config.requests,\n });\n\n plugin.config.responses = context.valueToObject({\n defaultValue: {\n case: plugin.config.case ?? 'camelCase',\n enabled: true,\n name: 'z{{name}}Response',\n },\n mappers: {\n boolean: (enabled) => ({ enabled }),\n string: (name) => ({ enabled: true, name }),\n },\n value: plugin.config.responses,\n });\n },\n tags: ['validator'],\n};\n\n/**\n * Type helper for Zod plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig = definePluginConfig(defaultConfig);\n","import type { HeyApiClientAxiosPlugin } from './@hey-api/client-axios';\nimport { defaultConfig as heyApiClientAxios } from './@hey-api/client-axios';\nimport type { HeyApiClientFetchPlugin } from './@hey-api/client-fetch';\nimport { defaultConfig as heyApiClientFetch } from './@hey-api/client-fetch';\nimport type { HeyApiClientNextPlugin } from './@hey-api/client-next';\nimport { defaultConfig as heyApiClientNext } from './@hey-api/client-next';\nimport type { HeyApiClientNuxtPlugin } from './@hey-api/client-nuxt';\nimport { defaultConfig as heyApiClientNuxt } from './@hey-api/client-nuxt';\nimport type { HeyApiClientLegacyAngularPlugin } from './@hey-api/legacy-angular';\nimport { defaultConfig as heyApiLegacyAngular } from './@hey-api/legacy-angular';\nimport type { HeyApiClientLegacyAxiosPlugin } from './@hey-api/legacy-axios';\nimport { defaultConfig as heyApiLegacyAxios } from './@hey-api/legacy-axios';\nimport type { HeyApiClientLegacyFetchPlugin } from './@hey-api/legacy-fetch';\nimport { defaultConfig as heyApiLegacyFetch } from './@hey-api/legacy-fetch';\nimport type { HeyApiClientLegacyNodePlugin } from './@hey-api/legacy-node';\nimport { defaultConfig as heyApiLegacyNode } from './@hey-api/legacy-node';\nimport type { HeyApiClientLegacyXhrPlugin } from './@hey-api/legacy-xhr';\nimport { defaultConfig as heyApiLegacyXhr } from './@hey-api/legacy-xhr';\nimport type { HeyApiSchemasPlugin } from './@hey-api/schemas';\nimport { defaultConfig as heyApiSchemas } from './@hey-api/schemas';\nimport type { HeyApiSdkPlugin } from './@hey-api/sdk';\nimport { defaultConfig as heyApiSdk } from './@hey-api/sdk';\nimport type { HeyApiTransformersPlugin } from './@hey-api/transformers';\nimport { defaultConfig as heyApiTransformers } from './@hey-api/transformers';\nimport type { HeyApiTypeScriptPlugin } from './@hey-api/typescript';\nimport { defaultConfig as heyApiTypeScript } from './@hey-api/typescript';\nimport type { TanStackAngularQueryPlugin } from './@tanstack/angular-query-experimental';\nimport { defaultConfig as tanStackAngularQuery } from './@tanstack/angular-query-experimental';\nimport type { TanStackReactQueryPlugin } from './@tanstack/react-query';\nimport { defaultConfig as tanStackReactQuery } from './@tanstack/react-query';\nimport type { TanStackSolidQueryPlugin } from './@tanstack/solid-query';\nimport { defaultConfig as tanStackSolidQuery } from './@tanstack/solid-query';\nimport type { TanStackSvelteQueryPlugin } from './@tanstack/svelte-query';\nimport { defaultConfig as tanStackSvelteQuery } from './@tanstack/svelte-query';\nimport type { TanStackVueQueryPlugin } from './@tanstack/vue-query';\nimport { defaultConfig as tanStackVueQuery } from './@tanstack/vue-query';\nimport type { FastifyPlugin } from './fastify';\nimport { defaultConfig as fastify } from './fastify';\nimport type { Plugin, PluginNames } from './types';\nimport type { ValibotPlugin } from './valibot';\nimport { defaultConfig as valibot } from './valibot';\nimport type { ZodPlugin } from './zod';\nimport { defaultConfig as zod } from './zod';\n\nexport interface PluginConfigMap {\n '@hey-api/client-axios': HeyApiClientAxiosPlugin['Types'];\n '@hey-api/client-fetch': HeyApiClientFetchPlugin['Types'];\n '@hey-api/client-next': HeyApiClientNextPlugin['Types'];\n '@hey-api/client-nuxt': HeyApiClientNuxtPlugin['Types'];\n '@hey-api/schemas': HeyApiSchemasPlugin['Types'];\n '@hey-api/sdk': HeyApiSdkPlugin['Types'];\n '@hey-api/transformers': HeyApiTransformersPlugin['Types'];\n '@hey-api/typescript': HeyApiTypeScriptPlugin['Types'];\n '@tanstack/angular-query-experimental': TanStackAngularQueryPlugin['Types'];\n '@tanstack/react-query': TanStackReactQueryPlugin['Types'];\n '@tanstack/solid-query': TanStackSolidQueryPlugin['Types'];\n '@tanstack/svelte-query': TanStackSvelteQueryPlugin['Types'];\n '@tanstack/vue-query': TanStackVueQueryPlugin['Types'];\n fastify: FastifyPlugin['Types'];\n 'legacy/angular': HeyApiClientLegacyAngularPlugin['Types'];\n 'legacy/axios': HeyApiClientLegacyAxiosPlugin['Types'];\n 'legacy/fetch': HeyApiClientLegacyFetchPlugin['Types'];\n 'legacy/node': HeyApiClientLegacyNodePlugin['Types'];\n 'legacy/xhr': HeyApiClientLegacyXhrPlugin['Types'];\n valibot: ValibotPlugin['Types'];\n zod: ZodPlugin['Types'];\n}\n\nexport const defaultPluginConfigs: {\n [K in PluginNames]: Plugin.Config<PluginConfigMap[K]>;\n} = {\n '@hey-api/client-axios': heyApiClientAxios,\n '@hey-api/client-fetch': heyApiClientFetch,\n '@hey-api/client-next': heyApiClientNext,\n '@hey-api/client-nuxt': heyApiClientNuxt,\n '@hey-api/schemas': heyApiSchemas,\n '@hey-api/sdk': heyApiSdk,\n '@hey-api/transformers': heyApiTransformers,\n '@hey-api/typescript': heyApiTypeScript,\n '@tanstack/angular-query-experimental': tanStackAngularQuery,\n '@tanstack/react-query': tanStackReactQuery,\n '@tanstack/solid-query': tanStackSolidQuery,\n '@tanstack/svelte-query': tanStackSvelteQuery,\n '@tanstack/vue-query': tanStackVueQuery,\n fastify,\n 'legacy/angular': heyApiLegacyAngular,\n 'legacy/axios': heyApiLegacyAxios,\n 'legacy/fetch': heyApiLegacyFetch,\n 'legacy/node': heyApiLegacyNode,\n 'legacy/xhr': heyApiLegacyXhr,\n valibot,\n zod,\n};\n","import { defaultPluginConfigs } from '../plugins/config';\nimport type {\n AnyPluginName,\n PluginContext,\n PluginNames,\n} from '../plugins/types';\nimport type { Config, UserConfig } from '../types/config';\nimport { valueToObject } from './utils';\n\n/**\n * Default plugins used to generate artifacts if plugins aren't specified.\n */\nexport const defaultPlugins = [\n '@hey-api/typescript',\n '@hey-api/sdk',\n] as const satisfies ReadonlyArray<PluginNames>;\n\nconst getPluginsConfig = ({\n userPlugins,\n userPluginsConfig,\n}: {\n userPlugins: ReadonlyArray<AnyPluginName>;\n userPluginsConfig: Config['plugins'];\n}): Pick<Config, 'plugins' | 'pluginOrder'> => {\n const circularReferenceTracker = new Set<AnyPluginName>();\n const pluginOrder = new Set<AnyPluginName>();\n const plugins: Config['plugins'] = {};\n\n const dfs = (name: AnyPluginName) => {\n if (circularReferenceTracker.has(name)) {\n throw new Error(`Circular reference detected at '${name}'`);\n }\n\n if (pluginOrder.has(name)) {\n return;\n }\n\n circularReferenceTracker.add(name);\n\n const defaultPlugin = defaultPluginConfigs[name as PluginNames];\n const userPlugin = userPluginsConfig[name as PluginNames];\n\n if (!defaultPlugin && !userPlugin) {\n throw new Error(\n `unknown plugin dependency \"${name}\" - do you need to register a custom plugin with this name?`,\n );\n }\n\n const plugin = {\n ...defaultPlugin,\n ...userPlugin,\n config: {\n ...defaultPlugin?.config,\n ...userPlugin?.config,\n },\n dependencies: new Set([\n ...(defaultPlugin?.dependencies || []),\n ...(userPlugin?.dependencies || []),\n ]),\n };\n\n if (plugin.resolveConfig) {\n const context: PluginContext = {\n pluginByTag: (tag, props = {}) => {\n const { defaultPlugin, errorMessage } = props;\n\n for (const userPlugin of userPlugins) {\n const defaultConfig =\n defaultPluginConfigs[userPlugin as PluginNames] ||\n userPluginsConfig[userPlugin as PluginNames];\n if (\n defaultConfig &&\n defaultConfig.tags?.includes(tag) &&\n userPlugin !== name\n ) {\n return userPlugin as any;\n }\n }\n\n if (defaultPlugin) {\n const defaultConfig =\n defaultPluginConfigs[defaultPlugin as PluginNames] ||\n userPluginsConfig[defaultPlugin as PluginNames];\n if (\n defaultConfig &&\n defaultConfig.tags?.includes(tag) &&\n defaultPlugin !== name\n ) {\n return defaultPlugin;\n }\n }\n\n throw new Error(\n errorMessage ||\n `missing plugin - no plugin with tag \"${tag}\" found`,\n );\n },\n valueToObject,\n };\n // @ts-expect-error\n plugin.resolveConfig(plugin, context);\n }\n\n for (const dependency of plugin.dependencies) {\n dfs(dependency);\n }\n\n circularReferenceTracker.delete(name);\n pluginOrder.add(name);\n\n // @ts-expect-error\n plugins[name] = plugin;\n };\n\n for (const name of userPlugins) {\n dfs(name);\n }\n\n return {\n pluginOrder: Array.from(pluginOrder) as ReadonlyArray<PluginNames>,\n plugins,\n };\n};\n\nconst isPluginClient = (plugin: Required<UserConfig>['plugins'][number]) => {\n if (typeof plugin === 'string') {\n return plugin.startsWith('@hey-api/client') || plugin.startsWith('legacy/');\n }\n\n return (\n plugin.name.startsWith('@hey-api/client') ||\n plugin.name.startsWith('legacy/') ||\n // @ts-expect-error\n (plugin.tags && plugin.tags.includes('client'))\n );\n};\n\nexport const getPlugins = (\n userConfig: UserConfig,\n): Pick<Config, 'plugins' | 'pluginOrder'> => {\n const userPluginsConfig: Config['plugins'] = {};\n\n let definedPlugins: UserConfig['plugins'] = defaultPlugins;\n\n if (userConfig.plugins) {\n userConfig.plugins = userConfig.plugins.filter(\n (plugin) =>\n (typeof plugin === 'string' && plugin) ||\n (typeof plugin !== 'string' && plugin.name),\n );\n if (\n userConfig.plugins.length === 1 &&\n isPluginClient(userConfig.plugins[0]!)\n ) {\n definedPlugins = [...defaultPlugins, ...userConfig.plugins];\n } else {\n definedPlugins = userConfig.plugins;\n }\n }\n\n const userPlugins = definedPlugins\n .map((plugin) => {\n if (typeof plugin === 'string') {\n return plugin;\n }\n\n const pluginName = plugin.name;\n\n if (pluginName) {\n // @ts-expect-error\n if (plugin.handler) {\n // @ts-expect-error\n userPluginsConfig[pluginName] = plugin;\n } else {\n // @ts-expect-error\n userPluginsConfig[pluginName] = {\n config: { ...plugin },\n };\n // @ts-expect-error\n delete userPluginsConfig[pluginName]!.config.name;\n }\n }\n\n return pluginName;\n })\n .filter(Boolean);\n\n return getPluginsConfig({ userPlugins, userPluginsConfig });\n};\n","import type { Config, UserConfig } from '../types/config';\n\nconst defaultWatch: Config['input']['watch'] = {\n enabled: false,\n interval: 1_000,\n timeout: 60_000,\n};\n\nconst getWatch = (\n input: Pick<Config['input'], 'path' | 'watch'>,\n): Config['input']['watch'] => {\n let watch = { ...defaultWatch };\n\n // we cannot watch spec passed as an object\n if (typeof input.path !== 'string') {\n return watch;\n }\n\n if (typeof input.watch === 'boolean') {\n watch.enabled = input.watch;\n } else if (typeof input.watch === 'number') {\n watch.enabled = true;\n watch.interval = input.watch;\n } else if (input.watch) {\n watch = {\n ...watch,\n ...input.watch,\n };\n }\n\n return watch;\n};\n\nexport const getInput = (userConfig: UserConfig): Config['input'] => {\n let input: Config['input'] = {\n path: '',\n watch: defaultWatch,\n };\n\n if (typeof userConfig.input === 'string') {\n input.path = userConfig.input;\n } else if (\n userConfig.input &&\n (userConfig.input.path !== undefined ||\n userConfig.input.organization !== undefined)\n ) {\n // @ts-expect-error\n input = {\n ...input,\n path: 'https://get.heyapi.dev',\n ...userConfig.input,\n };\n\n // watch only remote files\n if (input.watch !== undefined) {\n input.watch = getWatch(input);\n }\n } else {\n input = {\n ...input,\n path: userConfig.input as Record<string, unknown>,\n };\n }\n\n if (\n userConfig.watch !== undefined &&\n input.watch.enabled === defaultWatch.enabled &&\n input.watch.interval === defaultWatch.interval &&\n input.watch.timeout === defaultWatch.timeout\n ) {\n input.watch = getWatch({\n path: input.path,\n // @ts-expect-error\n watch: userConfig.watch,\n });\n }\n\n return input;\n};\n","import type { UserConfig } from '../types/config';\n\nconst mergeObjects = (\n objA: Record<string, unknown> | undefined,\n objB: Record<string, unknown> | undefined,\n): Record<string, unknown> => {\n const a = objA || {};\n const b = objB || {};\n return {\n ...a,\n ...b,\n };\n};\n\nexport const mergeConfigs = (\n configA: UserConfig | undefined,\n configB: UserConfig | undefined,\n): UserConfig => {\n const a: Partial<UserConfig> = configA || {};\n const b: Partial<UserConfig> = configB || {};\n const merged: UserConfig = {\n ...(a as UserConfig),\n ...(b as UserConfig),\n };\n if (typeof merged.logs === 'object') {\n merged.logs = mergeObjects(\n a.logs as Record<string, unknown>,\n b.logs as Record<string, unknown>,\n );\n }\n return merged;\n};\n","import type { Config, UserConfig } from '../types/config';\n\nexport const getOutput = (userConfig: UserConfig): Config['output'] => {\n let output: Config['output'] = {\n clean: true,\n format: false,\n indexFile: true,\n lint: false,\n path: '',\n tsConfigPath: '',\n };\n\n if (typeof userConfig.output === 'string') {\n output.path = userConfig.output;\n } else {\n output = {\n ...output,\n ...userConfig.output,\n };\n }\n\n return output;\n};\n","import path from 'node:path';\n\nimport { loadConfig } from 'c12';\n\nimport type { Config, UserConfig } from '../types/config';\nimport { isLegacyClient, setConfig } from '../utils/config';\nimport { getInput } from './input';\nimport { getLogs } from './logs';\nimport { mergeConfigs } from './merge';\nimport { getOutput } from './output';\nimport { getParser } from './parser';\nimport { getPlugins } from './plugins';\n\n/**\n * @internal\n */\nexport const initConfigs = async (\n userConfig: UserConfig | undefined,\n): Promise<\n ReadonlyArray<{\n config: Config;\n errors: ReadonlyArray<Error>;\n }>\n> => {\n let configurationFile: string | undefined = undefined;\n if (userConfig?.configFile) {\n const parts = userConfig.configFile.split('.');\n configurationFile = parts.slice(0, parts.length - 1).join('.');\n }\n\n const { config: configFromFile } = await loadConfig<UserConfig>({\n configFile: configurationFile,\n name: 'openapi-ts',\n });\n\n const userConfigs: ReadonlyArray<UserConfig> = Array.isArray(userConfig)\n ? userConfig\n : Array.isArray(configFromFile)\n ? configFromFile.map((config) => mergeConfigs(config, userConfig))\n : [mergeConfigs(configFromFile, userConfig)];\n\n const results: Array<{\n config: Config;\n errors: Array<Error>;\n }> = [];\n\n for (const userConfig of userConfigs) {\n const {\n base,\n configFile = '',\n dryRun = false,\n experimentalParser = true,\n exportCore = true,\n name,\n request,\n useOptions = true,\n } = userConfig;\n\n const errors: Array<Error> = [];\n\n const logs = getLogs(userConfig);\n\n if (logs.level === 'debug') {\n console.warn('userConfig:', userConfig);\n }\n\n const input = getInput(userConfig);\n const output = getOutput(userConfig);\n const parser = getParser(userConfig);\n\n if (!input.path) {\n errors.push(\n new Error(\n 'missing input - which OpenAPI specification should we use to generate your output?',\n ),\n );\n }\n\n if (!output.path) {\n errors.push(\n new Error('missing output - where should we generate your output?'),\n );\n }\n\n if (!useOptions) {\n console.warn(\n '❗️ Deprecation warning: useOptions set to false. This setting will be removed in future versions. Please migrate useOptions to true https://heyapi.dev/openapi-ts/migrating.html#v0-27-38',\n );\n }\n\n output.path = path.resolve(process.cwd(), output.path);\n\n let plugins: Pick<Config, 'plugins' | 'pluginOrder'>;\n\n try {\n plugins = getPlugins(userConfig);\n } catch (error) {\n errors.push(error);\n plugins = {\n pluginOrder: [],\n plugins: {},\n };\n }\n\n const config = setConfig({\n ...plugins,\n base,\n configFile,\n dryRun,\n experimentalParser,\n exportCore: false,\n input,\n logs,\n name,\n output,\n parser,\n request,\n useOptions,\n });\n config.exportCore = isLegacyClient(config) ? exportCore : false;\n\n if (logs.level === 'debug') {\n console.warn('config:', config);\n }\n\n results.push({\n config,\n errors,\n });\n }\n\n return results;\n};\n","import { getAuthToken } from '../../client-core/bundle/auth';\nimport type {\n QuerySerializer,\n QuerySerializerOptions,\n} from '../../client-core/bundle/bodySerializer';\nimport { jsonBodySerializer } from '../../client-core/bundle/bodySerializer';\nimport {\n serializeArrayParam,\n serializeObjectParam,\n serializePrimitiveParam,\n} from '../../client-core/bundle/pathSerializer';\nimport type { Client, ClientOptions, Config, RequestOptions } from './types';\n\ninterface PathSerializer {\n path: Record<string, unknown>;\n url: string;\n}\n\nconst PATH_PARAM_RE = /\\{[^{}]+\\}/g;\n\ntype ArrayStyle = 'form' | 'spaceDelimited' | 'pipeDelimited';\ntype MatrixStyle = 'label' | 'matrix' | 'simple';\ntype ArraySeparatorStyle = ArrayStyle | MatrixStyle;\n\nconst defaultPathSerializer = ({ path, url: _url }: PathSerializer) => {\n let url = _url;\n const matches = _url.match(PATH_PARAM_RE);\n if (matches) {\n for (const match of matches) {\n let explode = false;\n let name = match.substring(1, match.length - 1);\n let style: ArraySeparatorStyle = 'simple';\n\n if (name.endsWith('*')) {\n explode = true;\n name = name.substring(0, name.length - 1);\n }\n\n if (name.startsWith('.')) {\n name = name.substring(1);\n style = 'label';\n } else if (name.startsWith(';')) {\n name = name.substring(1);\n style = 'matrix';\n }\n\n const value = path[name];\n\n if (value === undefined || value === null) {\n continue;\n }\n\n if (Array.isArray(value)) {\n url = url.replace(\n match,\n serializeArrayParam({ explode, name, style, value }),\n );\n continue;\n }\n\n if (typeof value === 'object') {\n url = url.replace(\n match,\n serializeObjectParam({\n explode,\n name,\n style,\n value: value as Record<string, unknown>,\n valueOnly: true,\n }),\n );\n continue;\n }\n\n if (style === 'matrix') {\n url = url.replace(\n match,\n `;${serializePrimitiveParam({\n name,\n value: value as string,\n })}`,\n );\n continue;\n }\n\n const replaceValue = encodeURIComponent(\n style === 'label' ? `.${value as string}` : (value as string),\n );\n url = url.replace(match, replaceValue);\n }\n }\n return url;\n};\n\nexport const createQuerySerializer = <T = unknown>({\n allowReserved,\n array,\n object,\n}: QuerySerializerOptions = {}) => {\n const querySerializer = (queryParams: T) => {\n const search: string[] = [];\n if (queryParams && typeof queryParams === 'object') {\n for (const name in queryParams) {\n const value = queryParams[name];\n\n if (value === undefined || value === null) {\n continue;\n }\n\n if (Array.isArray(value)) {\n const serializedArray = serializeArrayParam({\n allowReserved,\n explode: true,\n name,\n style: 'form',\n value,\n ...array,\n });\n if (serializedArray) search.push(serializedArray);\n } else if (typeof value === 'object') {\n const serializedObject = serializeObjectParam({\n allowReserved,\n explode: true,\n name,\n style: 'deepObject',\n value: value as Record<string, unknown>,\n ...object,\n });\n if (serializedObject) search.push(serializedObject);\n } else {\n const serializedPrimitive = serializePrimitiveParam({\n allowReserved,\n name,\n value: value as string,\n });\n if (serializedPrimitive) search.push(serializedPrimitive);\n }\n }\n }\n return search.join('&');\n };\n return querySerializer;\n};\n\n/**\n * Infers parseAs value from provided Content-Type header.\n */\nexport const getParseAs = (\n contentType: string | null,\n): Exclude<Config['parseAs'], 'auto'> => {\n if (!contentType) {\n // If no Content-Type header is provided, the best we can do is return the raw response body,\n // which is effectively the same as the 'stream' option.\n return 'stream';\n }\n\n const cleanContent = contentType.split(';')[0]?.trim();\n\n if (!cleanContent) {\n return;\n }\n\n if (\n cleanContent.startsWith('application/json') ||\n cleanContent.endsWith('+json')\n ) {\n return 'json';\n }\n\n if (cleanContent === 'multipart/form-data') {\n return 'formData';\n }\n\n if (\n ['application/', 'audio/', 'image/', 'video/'].some((type) =>\n cleanContent.startsWith(type),\n )\n ) {\n return 'blob';\n }\n\n if (cleanContent.startsWith('text/')) {\n return 'text';\n }\n\n return;\n};\n\nexport const setAuthParams = async ({\n security,\n ...options\n}: Pick<Required<RequestOptions>, 'security'> &\n Pick<RequestOptions, 'auth' | 'query'> & {\n headers: Headers;\n }) => {\n for (const auth of security) {\n const token = await getAuthToken(auth, options.auth);\n\n if (!token) {\n continue;\n }\n\n const name = auth.name ?? 'Authorization';\n\n switch (auth.in) {\n case 'query':\n if (!options.query) {\n options.query = {};\n }\n options.query[name] = token;\n break;\n case 'cookie':\n options.headers.append('Cookie', `${name}=${token}`);\n break;\n case 'header':\n default:\n options.headers.set(name, token);\n break;\n }\n\n return;\n }\n};\n\nexport const buildUrl: Client['buildUrl'] = (options) => {\n const url = getUrl({\n baseUrl: options.baseUrl as string,\n path: options.path,\n query: options.query,\n querySerializer:\n typeof options.querySerializer === 'function'\n ? options.querySerializer\n : createQuerySerializer(options.querySerializer),\n url: options.url,\n });\n return url;\n};\n\nexport const getUrl = ({\n baseUrl,\n path,\n query,\n querySerializer,\n url: _url,\n}: {\n baseUrl?: string;\n path?: Record<string, unknown>;\n query?: Record<string, unknown>;\n querySerializer: QuerySerializer;\n url: string;\n}) => {\n const pathUrl = _url.startsWith('/') ? _url : `/${_url}`;\n let url = (baseUrl ?? '') + pathUrl;\n if (path) {\n url = defaultPathSerializer({ path, url });\n }\n let search = query ? querySerializer(query) : '';\n if (search.startsWith('?')) {\n search = search.substring(1);\n }\n if (search) {\n url += `?${search}`;\n }\n return url;\n};\n\nexport const mergeConfigs = (a: Config, b: Config): Config => {\n const config = { ...a, ...b };\n if (config.baseUrl?.endsWith('/')) {\n config.baseUrl = config.baseUrl.substring(0, config.baseUrl.length - 1);\n }\n config.headers = mergeHeaders(a.headers, b.headers);\n return config;\n};\n\nexport const mergeHeaders = (\n ...headers: Array<Required<Config>['headers'] | undefined>\n): Headers => {\n const mergedHeaders = new Headers();\n for (const header of headers) {\n if (!header || typeof header !== 'object') {\n continue;\n }\n\n const iterator =\n header instanceof Headers ? header.entries() : Object.entries(header);\n\n for (const [key, value] of iterator) {\n if (value === null) {\n mergedHeaders.delete(key);\n } else if (Array.isArray(value)) {\n for (const v of value) {\n mergedHeaders.append(key, v as string);\n }\n } else if (value !== undefined) {\n // assume object headers are meant to be JSON stringified, i.e. their\n // content value in OpenAPI specification is 'application/json'\n mergedHeaders.set(\n key,\n typeof value === 'object' ? JSON.stringify(value) : (value as string),\n );\n }\n }\n }\n return mergedHeaders;\n};\n\ntype ErrInterceptor<Err, Res, Req, Options> = (\n error: Err,\n response: Res,\n request: Req,\n options: Options,\n) => Err | Promise<Err>;\n\ntype ReqInterceptor<Req, Options> = (\n request: Req,\n options: Options,\n) => Req | Promise<Req>;\n\ntype ResInterceptor<Res, Req, Options> = (\n response: Res,\n request: Req,\n options: Options,\n) => Res | Promise<Res>;\n\nclass Interceptors<Interceptor> {\n _fns: (Interceptor | null)[];\n\n constructor() {\n this._fns = [];\n }\n\n clear() {\n this._fns = [];\n }\n\n getInterceptorIndex(id: number | Interceptor): number {\n if (typeof id === 'number') {\n return this._fns[id] ? id : -1;\n } else {\n return this._fns.indexOf(id);\n }\n }\n exists(id: number | Interceptor) {\n const index = this.getInterceptorIndex(id);\n return !!this._fns[index];\n }\n\n eject(id: number | Interceptor) {\n const index = this.getInterceptorIndex(id);\n if (this._fns[index]) {\n this._fns[index] = null;\n }\n }\n\n update(id: number | Interceptor, fn: Interceptor) {\n const index = this.getInterceptorIndex(id);\n if (this._fns[index]) {\n this._fns[index] = fn;\n return id;\n } else {\n return false;\n }\n }\n\n use(fn: Interceptor) {\n this._fns = [...this._fns, fn];\n return this._fns.length - 1;\n }\n}\n\n// `createInterceptors()` response, meant for external use as it does not\n// expose internals\nexport interface Middleware<Req, Res, Err, Options> {\n error: Pick<\n Interceptors<ErrInterceptor<Err, Res, Req, Options>>,\n 'eject' | 'use'\n >;\n request: Pick<Interceptors<ReqInterceptor<Req, Options>>, 'eject' | 'use'>;\n response: Pick<\n Interceptors<ResInterceptor<Res, Req, Options>>,\n 'eject' | 'use'\n >;\n}\n\n// do not add `Middleware` as return type so we can use _fns internally\nexport const createInterceptors = <Req, Res, Err, Options>() => ({\n error: new Interceptors<ErrInterceptor<Err, Res, Req, Options>>(),\n request: new Interceptors<ReqInterceptor<Req, Options>>(),\n response: new Interceptors<ResInterceptor<Res, Req, Options>>(),\n});\n\nconst defaultQuerySerializer = createQuerySerializer({\n allowReserved: false,\n array: {\n explode: true,\n style: 'form',\n },\n object: {\n explode: true,\n style: 'deepObject',\n },\n});\n\nconst defaultHeaders = {\n 'Content-Type': 'application/json',\n};\n\nexport const createConfig = <T extends ClientOptions = ClientOptions>(\n override: Config<Omit<ClientOptions, keyof T> & T> = {},\n): Config<Omit<ClientOptions, keyof T> & T> => ({\n ...jsonBodySerializer,\n headers: defaultHeaders,\n parseAs: 'auto',\n querySerializer: defaultQuerySerializer,\n ...override,\n});\n","import {\n $RefParser,\n getResolvedInput,\n type JSONSchema,\n sendRequest,\n} from '@hey-api/json-schema-ref-parser';\n\nimport { mergeHeaders } from './plugins/@hey-api/client-fetch/bundle';\nimport type { Config } from './types/config';\nimport type { WatchValues } from './types/types';\n\ninterface SpecResponse {\n data: JSONSchema;\n error?: undefined;\n response?: undefined;\n}\n\ninterface SpecError {\n data?: undefined;\n error: 'not-modified' | 'not-ok';\n response: Response;\n}\n\n/**\n * @internal\n */\nexport const getSpec = async ({\n fetchOptions,\n inputPath,\n timeout,\n watch,\n}: {\n fetchOptions?: RequestInit;\n inputPath: Config['input']['path'];\n timeout: number;\n watch: WatchValues;\n}): Promise<SpecResponse | SpecError> => {\n const refParser = new $RefParser();\n const resolvedInput = getResolvedInput({ pathOrUrlOrSchema: inputPath });\n\n let arrayBuffer: ArrayBuffer | undefined;\n // boolean signals whether the file has **definitely** changed\n let hasChanged: boolean | undefined;\n let response: Response | undefined;\n\n if (resolvedInput.type === 'url') {\n // do NOT send HEAD request on first run or if unsupported\n if (watch.lastValue && watch.isHeadMethodSupported !== false) {\n try {\n const request = await sendRequest({\n fetchOptions: {\n method: 'HEAD',\n ...fetchOptions,\n headers: mergeHeaders(fetchOptions?.headers, watch.headers),\n },\n timeout,\n url: resolvedInput.path,\n });\n\n if (request.response.status >= 300) {\n return {\n error: 'not-ok',\n response: request.response,\n };\n }\n\n response = request.response;\n } catch (error) {\n return {\n error: 'not-ok',\n response: new Response(error.message),\n };\n }\n\n if (!response.ok && watch.isHeadMethodSupported) {\n // assume the server is no longer running\n // do nothing, it might be restarted later\n return {\n error: 'not-ok',\n response,\n };\n }\n\n if (watch.isHeadMethodSupported === undefined) {\n watch.isHeadMethodSupported = response.ok;\n }\n\n if (response.status === 304) {\n return {\n error: 'not-modified',\n response,\n };\n }\n\n if (hasChanged === undefined) {\n const eTag = response.headers.get('ETag');\n if (eTag) {\n hasChanged = eTag !== watch.headers.get('If-None-Match');\n\n if (hasChanged) {\n watch.headers.set('If-None-Match', eTag);\n }\n }\n }\n\n if (hasChanged === undefined) {\n const lastModified = response.headers.get('Last-Modified');\n if (lastModified) {\n hasChanged = lastModified !== watch.headers.get('If-Modified-Since');\n\n if (hasChanged) {\n watch.headers.set('If-Modified-Since', lastModified);\n }\n }\n }\n\n // we definitely know the input has not changed\n if (hasChanged === false) {\n return {\n error: 'not-modified',\n response,\n };\n }\n }\n\n try {\n const request = await sendRequest({\n fetchOptions: {\n method: 'GET',\n ...fetchOptions,\n },\n timeout,\n url: resolvedInput.path,\n });\n\n if (request.response.status >= 300) {\n return {\n error: 'not-ok',\n response: request.response,\n };\n }\n\n response = request.response;\n } catch (error) {\n return {\n error: 'not-ok',\n response: new Response(error.message),\n };\n }\n\n if (!response.ok) {\n // assume the server is no longer running\n // do nothing, it might be restarted later\n return {\n error: 'not-ok',\n response,\n };\n }\n\n arrayBuffer = response.body\n ? await response.arrayBuffer()\n : new ArrayBuffer(0);\n\n if (hasChanged === undefined) {\n const content = new TextDecoder().decode(arrayBuffer);\n hasChanged = content !== watch.lastValue;\n watch.lastValue = content;\n }\n } else {\n // we do not support watch mode for files or raw spec data\n if (!watch.lastValue) {\n watch.lastValue = resolvedInput.type;\n } else {\n hasChanged = false;\n }\n }\n\n if (hasChanged === false) {\n return {\n error: 'not-modified',\n response: response!,\n };\n }\n\n const data = await refParser.bundle({\n arrayBuffer,\n pathOrUrlOrSchema: undefined,\n resolvedInput,\n });\n\n return {\n data,\n };\n};\n"]}
|