@zimic/http 1.3.4-canary.0 → 1.3.4-canary.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../zimic-utils/src/data/isDefined.ts","../src/typegen/openapi/utils/types.ts","../src/types/schema.ts","../../zimic-utils/src/logging/Logger.ts","../src/utils/logging.ts","../src/typegen/openapi/transform/operations.ts","../src/typegen/openapi/transform/methods.ts","../src/typegen/openapi/transform/paths.ts","../src/typegen/openapi/transform/components.ts","../src/utils/strings.ts","../../zimic-utils/src/data/isNonEmpty.ts","../../zimic-utils/src/url/createRegexFromPath.ts","../../zimic-utils/src/url/createWildcardRegexFromPath.ts","../../zimic-utils/src/import/createCachedDynamicImport.ts","../src/utils/files.ts","../src/typegen/openapi/transform/filters.ts","../src/typegen/openapi/transform/context.ts","../src/typegen/openapi/transform/imports.ts","../src/typegen/openapi/transform/io.ts","../src/typegen/openapi/generate.ts"],"names":["ts","color","type","isComponent","path","node","componentPath","fs","generateTypesFromOpenAPI"],"mappings":"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","file":"chunk-WHFERPU3.mjs","sourcesContent":["function isDefined<Value>(value: Value): value is NonNullable<Value> {\n return value !== undefined && value !== null;\n}\n\nexport default isDefined;\n","import ts from 'typescript';\n\nexport function isNeverType(type: ts.TypeNode) {\n return type.kind === ts.SyntaxKind.NeverKeyword;\n}\n\nexport function isUnknownType(type: ts.TypeNode) {\n return type.kind === ts.SyntaxKind.UnknownKeyword;\n}\n\nexport function isNumericType(type: ts.TypeNode) {\n return type.kind === ts.SyntaxKind.NumberKeyword;\n}\n\nexport function isBooleanType(type: ts.TypeNode) {\n return type.kind === ts.SyntaxKind.BooleanKeyword;\n}\n\nexport function isNullType(type: ts.TypeNode | ts.LiteralTypeNode['literal']) {\n return type.kind === ts.SyntaxKind.NullKeyword;\n}\n\nexport function createBlobType() {\n return ts.factory.createTypeReferenceNode('Blob');\n}\n\nexport function createNullType() {\n return ts.factory.createLiteralTypeNode(ts.factory.createNull());\n}\n\nexport function createImportSpecifier(importName: string) {\n return ts.factory.createImportSpecifier(false, undefined, ts.factory.createIdentifier(importName));\n}\n\nexport function createImportDeclaration(\n importSpecifiers: ts.ImportSpecifier[],\n moduleName: string,\n options: { typeOnly: boolean },\n) {\n return ts.factory.createImportDeclaration(\n undefined,\n ts.factory.createImportClause(\n options.typeOnly ? ts.SyntaxKind.TypeKeyword : undefined,\n undefined,\n ts.factory.createNamedImports(importSpecifiers),\n ),\n ts.factory.createStringLiteral(moduleName),\n );\n}\n","import {\n IfAny,\n UnionToIntersection,\n UnionHasMoreThanOneType,\n Prettify,\n NonEmptyArray,\n Branded,\n} from '@zimic/utils/types';\n\nimport { HttpFormDataSchema } from '../formData/types';\nimport { HttpHeadersSchema } from '../headers/types';\nimport { HttpPathParamsSchema } from '../pathParams/types';\nimport { HttpSearchParamsSchema } from '../searchParams/types';\nimport { HttpBody } from './requests';\n\nexport const HTTP_METHODS = Object.freeze(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'] as const);\n/**\n * A type representing the currently supported\n * {@link https://developer.mozilla.org/docs/Web/HTTP/Methods `HTTP methods`}.\n */\nexport type HttpMethod = (typeof HTTP_METHODS)[number];\n\n/**\n * A schema representing the structure of an HTTP request.\n *\n * @see {@link https://zimic.dev/docs/http/api/http-schema `HttpSchema` API reference}\n */\nexport interface HttpRequestSchema {\n headers?: HttpHeadersSchema.Loose;\n searchParams?: HttpSearchParamsSchema.Loose;\n body?: HttpBody.Loose;\n}\n\n/**\n * A schema representing the structure of an HTTP response.\n *\n * @see {@link https://zimic.dev/docs/http/api/http-schema `HttpSchema` API reference}\n */\nexport interface HttpResponseSchema {\n headers?: HttpHeadersSchema.Loose;\n body?: HttpBody.Loose;\n}\n\n/**\n * The status codes used in HTTP responses, as defined by\n * {@link https://httpwg.org/specs/rfc9110.html#overview.of.status.codes RFC-9110}.\n *\n * - `HttpStatusCode.Information`: {@link https://developer.mozilla.org/docs/Web/HTTP/Status#information_responses `1XX`}\n * - `HttpStatusCode.Success`: {@link https://developer.mozilla.org/docs/Web/HTTP/Status#successful_responses `2XX`}\n * - `HttpStatusCode.Redirection`: {@link https://developer.mozilla.org/docs/Web/HTTP/Status#redirection_messages `3XX`}\n * - `HttpStatusCode.ClientError`: {@link https://developer.mozilla.org/docs/Web/HTTP/Status#client_error_responses `4XX`}\n * - `HttpStatusCode.ServerError`: {@link https://developer.mozilla.org/docs/Web/HTTP/Status#server_error_responses `5XX`}\n */\nexport type HttpStatusCode =\n | HttpStatusCode.Information\n | HttpStatusCode.Success\n | HttpStatusCode.Redirection\n | HttpStatusCode.ClientError\n | HttpStatusCode.ServerError;\n\nexport namespace HttpStatusCode {\n /**\n * An HTTP status code in the `1XX` range, representing an informational response.\n *\n * @see {@link https://developer.mozilla.org/docs/Web/HTTP/Status#information_responses `1XX`}\n */\n export type Information =\n | 100 // Continue\n | 101 // Switching Protocols\n | 102 // Processing\n | 103; // Early Hints\n\n /**\n * An HTTP status code in the `2XX` range, representing a successful response.\n *\n * @see {@link https://developer.mozilla.org/docs/Web/HTTP/Status#successful_responses `2XX`}\n */\n export type Success =\n | 200 // OK\n | 201 // Created\n | 202 // Accepted\n | 203 // Non-Authoritative Information\n | 204 // No Content\n | 205 // Reset Content\n | 206 // Partial Content\n | 207 // Multi-Status\n | 208 // Already Reported\n | 226; // IM Used\n\n /**\n * An HTTP status code in the `3XX` range, representing a redirection response.\n *\n * @see {@link https://developer.mozilla.org/docs/Web/HTTP/Status#redirection_messages `3XX`}\n */\n export type Redirection =\n | 300 // Multiple Choices\n | 301 // Moved Permanently\n | 302 // Found\n | 303 // See Other\n | 304 // Not Modified\n | 307 // Temporary Redirect\n | 308; // Permanent Redirect\n\n /**\n * An HTTP status code in the `4XX` range, representing a client error response.\n *\n * @see {@link https://developer.mozilla.org/docs/Web/HTTP/Status#client_error_responses `4XX`}\n */\n export type ClientError =\n | 400 // Bad Request\n | 401 // Unauthorized\n | 402 // Payment Required\n | 403 // Forbidden\n | 404 // Not Found\n | 405 // Method Not Allowed\n | 406 // Not Acceptable\n | 407 // Proxy Authentication Required\n | 408 // Request Timeout\n | 409 // Conflict\n | 410 // Gone\n | 411 // Length Required\n | 412 // Precondition Failed\n | 413 // Content Too Large\n | 414 // URI Too Long\n | 415 // Unsupported Media Type\n | 416 // Range Not Satisfiable\n | 417 // Expectation Failed\n | 418 // I'm a teapot\n | 421 // Misdirected Request\n | 422 // Unprocessable Content\n | 423 // Locked\n | 424 // Failed Dependency\n | 425 // Too Early\n | 426 // Upgrade Required\n | 428 // Precondition Required\n | 429 // Too Many Requests\n | 431 // Request Header Fields Too Large\n | 451; // Unavailable For Legal Reasons\n\n /**\n * An HTTP status code in the `5XX` range, representing a server error response.\n *\n * @see {@link https://developer.mozilla.org/docs/Web/HTTP/Status#server_error_responses `5XX`}\n */\n export type ServerError =\n | 500 // Internal Server Error\n | 501 // Not Implemented\n | 502 // Bad Gateway\n | 503 // Service Unavailable\n | 504 // Gateway Timeout\n | 505 // HTTP Version Not Supported\n | 506 // Variant Also Negotiates\n | 507 // Insufficient Storage\n | 508 // Loop Detected\n | 510 // Not Extended\n | 511; // Network Authentication Required\n}\n\n/**\n * A schema representing the structure of HTTP responses by status code.\n *\n * @see {@link https://zimic.dev/docs/http/api/http-schema `HttpSchema` API reference}\n */\nexport type HttpResponseSchemaByStatusCode = {\n [StatusCode in HttpStatusCode]?: HttpResponseSchema;\n};\n\n/**\n * Extracts the status codes used in a response schema by status code.\n *\n * @see {@link https://zimic.dev/docs/http/api/http-schema `HttpSchema` API reference}\n */\nexport type HttpResponseSchemaStatusCode<ResponseSchemaByStatusCode extends HttpResponseSchemaByStatusCode> =\n keyof ResponseSchemaByStatusCode & HttpStatusCode;\n\n/**\n * A schema representing the structure of an HTTP request and response for a given method.\n *\n * @see {@link https://zimic.dev/docs/http/api/http-schema `HttpSchema` API reference}\n */\nexport interface HttpMethodSchema {\n request?: HttpRequestSchema;\n response?: HttpResponseSchemaByStatusCode;\n}\n\n/**\n * A schema representing the structure of HTTP request and response by method.\n *\n * @see {@link https://zimic.dev/docs/http/api/http-schema `HttpSchema` API reference}\n */\nexport interface HttpMethodsSchema {\n GET?: HttpMethodSchema;\n POST?: HttpMethodSchema;\n PUT?: HttpMethodSchema;\n PATCH?: HttpMethodSchema;\n DELETE?: HttpMethodSchema;\n HEAD?: HttpMethodSchema;\n OPTIONS?: HttpMethodSchema;\n}\n\ninterface BaseHttpSchema {\n [path: string]: HttpMethodsSchema;\n}\n\n/** @see {@link https://zimic.dev/docs/http/api/http-schema `HttpSchema` API reference} */\nexport type HttpSchema<Schema extends BaseHttpSchema = BaseHttpSchema> = Branded<Schema, 'HttpSchema'>;\n\nexport namespace HttpSchema {\n /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemamethods `HttpSchema.Methods` API reference} */\n export type Methods<Schema extends HttpMethodsSchema> = Schema;\n\n /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemamethod `HttpSchema.Method` API reference} */\n export type Method<Schema extends HttpMethodSchema> = Schema;\n\n /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemarequest `HttpSchema.Request` API reference} */\n export type Request<Schema extends HttpRequestSchema> = Schema;\n\n /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemaresponsebystatuscode `HttpSchema.ResponseByStatusCode` API reference} */\n export type ResponseByStatusCode<Schema extends HttpResponseSchemaByStatusCode> = Schema;\n\n /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemaresponse `HttpSchema.Response` API reference} */\n export type Response<Schema extends HttpResponseSchema> = Schema;\n\n /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemabody `HttpSchema.Body` API reference} */\n export type Body<Schema extends HttpBody.Loose> = Schema;\n\n /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemaheaders `HttpSchema.Headers` API reference} */\n export type Headers<Schema extends HttpHeadersSchema.Loose> = Schema;\n\n /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemasearchparams `HttpSchema.SearchParams` API reference} */\n export type SearchParams<Schema extends HttpSearchParamsSchema.Loose> = Schema;\n\n /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemapathparams `HttpSchema.PathParams` API reference} */\n export type PathParams<Schema extends HttpPathParamsSchema.Loose> = Schema;\n\n /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemaformdata `HttpSchema.FormData` API reference} */\n export type FormData<Schema extends HttpFormDataSchema.Loose> = Schema;\n}\n\n/**\n * Extracts the methods from an HTTP service schema.\n *\n * @see {@link https://zimic.dev/docs/http/api/http-schema `HttpSchema` API reference}\n */\nexport type HttpSchemaMethod<Schema extends HttpSchema> = IfAny<\n Schema,\n any, // eslint-disable-line @typescript-eslint/no-explicit-any\n keyof UnionToIntersection<Schema[keyof Schema]> & HttpMethod\n>;\n\ntype RepeatingPathParamModifier = '+';\ntype OptionalPathParamModifier = '?' | '*';\n\ntype ConvertPathParamToRecord<PathParam extends string> = PathParam extends `${infer PathParamWithoutSlash}/`\n ? ConvertPathParamToRecord<PathParamWithoutSlash>\n : PathParam extends `${infer PathParamWithoutSlash}\\\\:`\n ? ConvertPathParamToRecord<PathParamWithoutSlash>\n : PathParam extends `${infer PathParamWithoutModifier}${OptionalPathParamModifier}`\n ? { [Name in PathParamWithoutModifier]?: string }\n : PathParam extends `${infer PathParamWithoutModifier}${RepeatingPathParamModifier}`\n ? { [Name in PathParamWithoutModifier]: string }\n : { [Name in PathParam]: string };\n\ntype RecursiveInferPathParams<Path extends string> = Path extends `${infer Prefix}:${infer PathParamWithRemainingPath}`\n ? PathParamWithRemainingPath extends `${infer PathParam}/${infer RemainingPath}`\n ? Prefix extends `${string}\\\\`\n ? RecursiveInferPathParams<RemainingPath>\n : ConvertPathParamToRecord<PathParam> & RecursiveInferPathParams<RemainingPath>\n : PathParamWithRemainingPath extends `${infer PathParam}\\\\:${infer RemainingPath}`\n ? Prefix extends `${string}\\\\`\n ? RecursiveInferPathParams<`\\\\:${RemainingPath}`>\n : ConvertPathParamToRecord<PathParam> & RecursiveInferPathParams<`\\\\:${RemainingPath}`>\n : PathParamWithRemainingPath extends `${infer PathParam}:${infer RemainingPath}`\n ? Prefix extends `${string}\\\\`\n ? RecursiveInferPathParams<RemainingPath>\n : ConvertPathParamToRecord<PathParam> & RecursiveInferPathParams<`:${RemainingPath}`>\n : Prefix extends `${string}\\\\`\n ? {}\n : ConvertPathParamToRecord<PathParamWithRemainingPath>\n : {};\n\n/** @see {@link https://zimic.dev/docs/http/api/http-schema#inferpathparams `InferPathParams` API reference} */\nexport type InferPathParams<\n PathOrSchema extends string | HttpSchema,\n OptionalPath extends PathOrSchema extends HttpSchema ? HttpSchemaPath.Literal<PathOrSchema> : never = never,\n> = Prettify<\n RecursiveInferPathParams<\n PathOrSchema extends HttpSchema ? OptionalPath : PathOrSchema extends string ? PathOrSchema : never\n >\n>;\n\ntype WithoutEscapedColons<Path extends string> = Path extends `${infer Prefix}\\\\:${infer Suffix}`\n ? WithoutEscapedColons<`${Prefix}:${Suffix}`>\n : Path;\n\ntype ConvertPathParamToString<PathParam extends string> = PathParam extends `${infer PathParamWithoutSlash}/`\n ? `${ConvertPathParamToString<PathParamWithoutSlash>}/`\n : PathParam extends `${infer PathParamWithoutSlash}\\\\:`\n ? `${ConvertPathParamToString<PathParamWithoutSlash>}:`\n : string;\n\nexport type AllowAnyStringInPathParams<Path extends string> =\n Path extends `${infer Prefix}:${infer PathParamWithRemainingPath}`\n ? PathParamWithRemainingPath extends `${infer PathParam}/${infer RemainingPath}`\n ? Prefix extends `${infer PrefixPrefix}\\\\`\n ? `${PrefixPrefix}:${AllowAnyStringInPathParams<PathParamWithRemainingPath>}`\n : `${Prefix}${ConvertPathParamToString<PathParam>}/${AllowAnyStringInPathParams<RemainingPath>}`\n : PathParamWithRemainingPath extends `${infer PathParam}\\\\:${infer RemainingPath}`\n ? Prefix extends `${infer PrefixPrefix}\\\\`\n ? `${PrefixPrefix}:${AllowAnyStringInPathParams<PathParamWithRemainingPath>}`\n : `${Prefix}${ConvertPathParamToString<PathParam>}:${AllowAnyStringInPathParams<RemainingPath>}`\n : PathParamWithRemainingPath extends `${infer PathParam}:${infer RemainingPath}`\n ? Prefix extends `${infer PrefixPrefix}\\\\`\n ? `${PrefixPrefix}:${AllowAnyStringInPathParams<PathParamWithRemainingPath>}`\n : `${Prefix}${ConvertPathParamToString<PathParam>}${AllowAnyStringInPathParams<`:${RemainingPath}`>}`\n : Prefix extends `${infer PrefixPrefix}\\\\`\n ? `${PrefixPrefix}:${PathParamWithRemainingPath}`\n : `${Prefix}${ConvertPathParamToString<PathParamWithRemainingPath>}`\n : Path;\n\n/** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemapath `HttpSchemaPath` API reference} */\nexport namespace HttpSchemaPath {\n type LooseLiteral<Schema extends HttpSchema, Method extends HttpMethod = HttpMethod> = {\n [Path in keyof Schema & string]: Method extends keyof Schema[Path] ? Path : never;\n }[keyof Schema & string];\n\n /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemapathliteral `HttpSchemaPath.Literal` API reference} */\n export type Literal<\n Schema extends HttpSchema,\n Method extends HttpSchemaMethod<Schema> = HttpSchemaMethod<Schema>,\n > = LooseLiteral<Schema, Method>;\n\n /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemapathnonliteral `HttpSchemaPath.NonLiteral` API reference} */\n export type NonLiteral<\n Schema extends HttpSchema,\n Method extends HttpSchemaMethod<Schema> = HttpSchemaMethod<Schema>,\n > = WithoutEscapedColons<AllowAnyStringInPathParams<LooseLiteral<Schema, Method>>>;\n}\n\nexport type HttpSchemaPath<\n Schema extends HttpSchema,\n Method extends HttpSchemaMethod<Schema> = HttpSchemaMethod<Schema>,\n> = HttpSchemaPath.Literal<Schema, Method> | HttpSchemaPath.NonLiteral<Schema, Method>;\n\ntype LargestPathPrefix<Path extends string> = Path extends `${infer Prefix}/${infer Suffix}`\n ? `${Prefix}/${Suffix extends `${string}/${string}` ? LargestPathPrefix<Suffix> : ''}`\n : Path;\n\ntype ExcludeNonLiteralPathsSupersededByLiteralPath<Path extends string> =\n Path extends `${LargestPathPrefix<Path>}:${string}` ? never : Path;\n\nexport type PreferMostStaticLiteralPath<Path extends string> =\n UnionHasMoreThanOneType<Path> extends true ? ExcludeNonLiteralPathsSupersededByLiteralPath<Path> : Path;\n\ntype RecursiveInferHttpSchemaPath<\n Schema extends HttpSchema,\n Method extends HttpSchemaMethod<Schema>,\n NonLiteralPath extends string,\n LiteralPath extends HttpSchemaPath.Literal<Schema, Method>,\n> =\n NonLiteralPath extends AllowAnyStringInPathParams<LiteralPath>\n ? NonLiteralPath extends `${AllowAnyStringInPathParams<LiteralPath>}/${string}`\n ? never\n : LiteralPath\n : never;\n\nexport type LiteralHttpSchemaPathFromNonLiteral<\n Schema extends HttpSchema,\n Method extends HttpSchemaMethod<Schema>,\n NonLiteralPath extends string,\n LiteralPath extends HttpSchemaPath.Literal<Schema, Method> = HttpSchemaPath.Literal<Schema, Method>,\n> = PreferMostStaticLiteralPath<\n LiteralPath extends LiteralPath ? RecursiveInferHttpSchemaPath<Schema, Method, NonLiteralPath, LiteralPath> : never\n>;\n\ntype OmitPastHttpStatusCodes<\n Schema extends HttpResponseSchemaByStatusCode,\n PastSchemas extends HttpResponseSchemaByStatusCode[],\n> =\n PastSchemas extends NonEmptyArray<HttpResponseSchemaByStatusCode>\n ? Omit<Schema, keyof UnionToIntersection<PastSchemas[number]>>\n : Schema;\n\n/** @see {@link https://zimic.dev/docs/http/api/http-schema#mergehttpresponsesbystatuscode `MergeHttpResponsesByStatusCode` API reference} */\nexport type MergeHttpResponsesByStatusCode<\n Schemas extends HttpResponseSchemaByStatusCode[],\n PastSchemas extends HttpResponseSchemaByStatusCode[] = [],\n> = Schemas extends [\n infer FirstSchema extends HttpResponseSchemaByStatusCode,\n ...infer RestSchemas extends HttpResponseSchemaByStatusCode[],\n]\n ? RestSchemas extends NonEmptyArray<HttpResponseSchemaByStatusCode>\n ? OmitPastHttpStatusCodes<FirstSchema, PastSchemas> &\n MergeHttpResponsesByStatusCode<RestSchemas, [...PastSchemas, FirstSchema]>\n : OmitPastHttpStatusCodes<FirstSchema, PastSchemas>\n : never;\n","export type TableLogRow = Record<string, string>;\n\nexport interface TableLogHeader<Row extends TableLogRow> {\n title: string;\n property: keyof Row;\n}\n\nexport interface LoggerOptions {\n prefix?: string;\n}\n\nclass Logger {\n prefix?: string;\n\n raw: Logger;\n\n constructor(options: LoggerOptions = {}) {\n const { prefix } = options;\n\n this.prefix = prefix;\n\n this.raw = prefix ? new Logger({ ...options, prefix: undefined }) : this;\n }\n\n private logWithLevel(level: 'log' | 'warn' | 'error', ...messages: unknown[]) {\n if (this.prefix) {\n console[level](this.prefix, ...messages);\n } else {\n console[level](...messages);\n }\n }\n\n info(...messages: unknown[]) {\n this.logWithLevel('log', ...messages);\n }\n\n warn(...messages: unknown[]) {\n this.logWithLevel('warn', ...messages);\n }\n\n error(...messages: unknown[]) {\n this.logWithLevel('error', ...messages);\n }\n\n table<Row extends TableLogRow>(headers: TableLogHeader<Row>[], rows: Row[]) {\n const columnLengths = headers.map((header) => {\n let maxValueLength = header.title.length;\n\n for (const row of rows) {\n const value = row[header.property];\n\n if (value.length > maxValueLength) {\n maxValueLength = value.length;\n }\n }\n\n return maxValueLength;\n });\n\n const formattedRows: string[][] = [];\n\n const horizontalLine = columnLengths.map((length) => '─'.repeat(length));\n formattedRows.push(horizontalLine, []);\n\n for (let headerIndex = 0; headerIndex < headers.length; headerIndex++) {\n const header = headers[headerIndex];\n const columnLength = columnLengths[headerIndex];\n\n const value = header.title;\n formattedRows.at(-1)?.push(value.padEnd(columnLength, ' '));\n }\n\n formattedRows.push(horizontalLine);\n\n for (const row of rows) {\n formattedRows.push([]);\n\n for (let headerIndex = 0; headerIndex < headers.length; headerIndex++) {\n const header = headers[headerIndex];\n const columnLength = columnLengths[headerIndex];\n\n const value = row[header.property];\n formattedRows.at(-1)?.push(value.padEnd(columnLength, ' '));\n }\n }\n\n formattedRows.push(horizontalLine);\n\n const formattedTable = formattedRows\n .map((row, index) => {\n const isFirstLine = index === 0;\n if (isFirstLine) {\n return `┌─${row.join('─┬─')}─┐`;\n }\n\n const isLineAfterHeaders = index === 2;\n if (isLineAfterHeaders) {\n return `├─${row.join('─┼─')}─┤`;\n }\n\n const isLastLine = index === formattedRows.length - 1;\n if (isLastLine) {\n return `└─${row.join('─┴─')}─┘`;\n }\n\n return `│ ${row.join(' │ ')} │`;\n })\n .join('\\n');\n\n this.logWithLevel('log', formattedTable);\n }\n}\n\nexport default Logger;\n","import Logger from '@zimic/utils/logging/Logger';\nimport color from 'picocolors';\n\nexport const logger = new Logger({\n prefix: color.cyan('[@zimic/http]'),\n});\n","import isDefined from '@zimic/utils/data/isDefined';\nimport { Override } from '@zimic/utils/types';\nimport ts from 'typescript';\n\nimport { TypeTransformContext } from './context';\nimport { normalizeTypeLiteralMethodType } from './methods';\n\nexport function createOperationsIdentifierText(serviceName: string) {\n return `${serviceName}Operations`;\n}\n\nexport function createOperationsIdentifier(serviceName: string) {\n return ts.factory.createIdentifier(createOperationsIdentifierText(serviceName));\n}\n\ntype OperationsDeclaration = ts.InterfaceDeclaration;\n\nexport function isOperationsDeclaration(node: ts.Node | undefined): node is OperationsDeclaration {\n return node !== undefined && ts.isInterfaceDeclaration(node) && node.name.text === 'operations';\n}\n\ntype Operation = Override<\n ts.PropertySignature,\n {\n type: ts.TypeLiteralNode;\n name: ts.Identifier | ts.StringLiteral;\n }\n>;\n\nfunction isOperation(node: ts.Node): node is Operation {\n return (\n ts.isPropertySignature(node) &&\n (ts.isIdentifier(node.name) || ts.isStringLiteral(node.name)) &&\n node.type !== undefined &&\n ts.isTypeLiteralNode(node.type)\n );\n}\n\nfunction normalizeOperation(operation: ts.TypeElement, context: TypeTransformContext) {\n /* istanbul ignore if -- @preserve\n * Operation members are always expected to be an operation. */\n if (!isOperation(operation)) {\n return undefined;\n }\n\n const newType = normalizeTypeLiteralMethodType(operation.type, context);\n\n return ts.factory.updatePropertySignature(\n operation,\n operation.modifiers,\n operation.name,\n operation.questionToken,\n newType,\n );\n}\n\nexport function normalizeOperations(operations: OperationsDeclaration, context: TypeTransformContext) {\n const newIdentifier = createOperationsIdentifier(context.serviceName);\n\n const newMembers = operations.members.map((operation) => normalizeOperation(operation, context)).filter(isDefined);\n\n return ts.factory.updateInterfaceDeclaration(\n operations,\n operations.modifiers,\n newIdentifier,\n operations.typeParameters,\n operations.heritageClauses,\n newMembers,\n );\n}\n\nfunction removeOperationIfUnreferenced(operation: ts.TypeElement, context: TypeTransformContext) {\n /* istanbul ignore if -- @preserve\n * Operation members are always expected to be an operation. */\n if (!isOperation(operation)) {\n return undefined;\n }\n\n const operationName = operation.name.text;\n const isReferenced = context.referencedTypes.operations.has(operationName);\n\n if (isReferenced) {\n context.referencedTypes.operations.delete(operationName);\n return operation;\n }\n\n return undefined;\n}\n\nexport function removeUnreferencedOperations(operations: OperationsDeclaration, context: TypeTransformContext) {\n const newMembers = operations.members\n .map((operation) => removeOperationIfUnreferenced(operation, context))\n .filter(isDefined);\n\n context.referencedTypes.operations.clear();\n\n if (newMembers.length === 0) {\n return undefined;\n }\n\n return ts.factory.updateInterfaceDeclaration(\n operations,\n operations.modifiers,\n operations.name,\n operations.typeParameters,\n operations.heritageClauses,\n newMembers,\n );\n}\n","import isDefined from '@zimic/utils/data/isDefined';\nimport { Override } from '@zimic/utils/types';\nimport color from 'picocolors';\nimport ts from 'typescript';\n\nimport { HTTP_METHODS, HttpMethod } from '@/types/schema';\nimport { logger } from '@/utils/logging';\n\nimport { isUnknownType, isNeverType, isNullType } from '../utils/types';\nimport { renameComponentReferences } from './components';\nimport { TypeTransformContext } from './context';\nimport { createOperationsIdentifier } from './operations';\n\ntype Method = Override<\n ts.PropertySignature,\n {\n type: ts.TypeLiteralNode | ts.IndexedAccessTypeNode;\n name: ts.Identifier;\n }\n>;\n\nfunction isMethod(node: ts.Node): node is Method {\n return (\n ts.isPropertySignature(node) &&\n ts.isIdentifier(node.name) &&\n node.type !== undefined &&\n (ts.isTypeLiteralNode(node.type) || ts.isIndexedAccessTypeNode(node.type))\n );\n}\n\ntype MethodMember = Override<\n ts.PropertySignature,\n {\n name: ts.Identifier | ts.StringLiteral;\n type: ts.TypeLiteralNode | ts.IndexedAccessTypeNode;\n }\n>;\n\nfunction isMethodMember(node: ts.Node): node is MethodMember {\n return (\n ts.isPropertySignature(node) &&\n ts.isIdentifier(node.name) &&\n node.type !== undefined &&\n (ts.isTypeLiteralNode(node.type) || ts.isIndexedAccessTypeNode(node.type) || isNeverType(node.type))\n );\n}\n\ntype RequestMember = Override<\n ts.PropertySignature,\n {\n name: ts.Identifier;\n type: ts.TypeNode;\n }\n>;\n\nfunction isRequestMember(node: ts.Node): node is RequestMember {\n return (\n ts.isPropertySignature(node) && ts.isIdentifier(node.name) && node.type !== undefined && !isNeverType(node.type)\n );\n}\n\ntype RequestHeaders = Override<RequestMember, { type: ts.TypeLiteralNode }>;\n\nfunction isRequestHeaders(node: ts.Node): node is RequestHeaders {\n return isRequestMember(node) && node.name.text === 'headers' && ts.isTypeLiteralNode(node.type);\n}\n\ntype NormalizedRequestHeaders = Override<RequestHeaders, { type: ts.TypeLiteralNode }>;\n\nfunction isNormalizedRequestHeaders(node: ts.Node): node is NormalizedRequestHeaders {\n return isRequestMember(node) && node.name.text === 'headers' && ts.isTypeLiteralNode(node.type);\n}\n\ntype RequestParameters = Override<RequestMember, { type: ts.TypeLiteralNode }>;\n\nfunction isRequestParameters(node: ts.Node): node is RequestParameters {\n return isRequestMember(node) && node.name.text === 'parameters' && ts.isTypeLiteralNode(node.type);\n}\n\ntype Content = Override<RequestMember, { type: ts.TypeLiteralNode }>;\n\nfunction isContentPropertySignature(node: ts.Node): node is Content {\n return isRequestMember(node) && node.name.text === 'content' && ts.isTypeLiteralNode(node.type);\n}\n\ntype ContentMember = Override<\n ts.PropertySignature,\n {\n name: ts.Identifier | ts.StringLiteral;\n type: ts.TypeNode;\n }\n>;\n\nfunction isContentMember(node: ts.Node): node is ContentMember {\n return (\n ts.isPropertySignature(node) &&\n (ts.isIdentifier(node.name) || ts.isStringLiteral(node.name)) &&\n node.type !== undefined &&\n !isNeverType(node.type)\n );\n}\n\ntype Response = Override<\n ts.PropertySignature,\n {\n name: ts.Identifier | ts.StringLiteral | ts.NumericLiteral;\n type: ts.TypeNode;\n }\n>;\n\nfunction isResponse(node: ts.Node): node is Response {\n return (\n ts.isPropertySignature(node) &&\n (ts.isIdentifier(node.name) || ts.isStringLiteral(node.name) || ts.isNumericLiteral(node.name)) &&\n node.type !== undefined\n );\n}\n\nfunction removeRedundantNullUnionIfNecessary(type: ts.TypeNode) {\n const containsRedundantNullUnion =\n ts.isUnionTypeNode(type) &&\n type.types.some((type) => {\n const isNull = ts.isLiteralTypeNode(type) && isNullType(type.literal);\n return isNull;\n }) &&\n type.types.some((type) => {\n return (\n ts.isParenthesizedTypeNode(type) &&\n ts.isUnionTypeNode(type.type) &&\n type.type.types.some((subType) => {\n const isNull = ts.isLiteralTypeNode(subType) && isNullType(subType.literal);\n return isNull;\n })\n );\n });\n\n if (!containsRedundantNullUnion) {\n return type;\n }\n\n const typesWithoutRedundantNullUnion = type.types\n .filter((type) => {\n const isNull = ts.isLiteralTypeNode(type) && isNullType(type.literal);\n return !isNull;\n })\n .flatMap((type) => {\n /* istanbul ignore else -- @preserve */\n if (ts.isParenthesizedTypeNode(type) && ts.isUnionTypeNode(type.type)) {\n return type.type.types;\n }\n /* istanbul ignore next -- @preserve\n * Member types are always expected to be a union type or a parenthesized union type. */\n return [type];\n });\n\n return ts.factory.createUnionTypeNode(typesWithoutRedundantNullUnion);\n}\n\nfunction wrapFormDataContentType(type: ts.TypeNode, context: TypeTransformContext) {\n context.typeImports.http.add('HttpFormData');\n\n return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('HttpFormData'), [\n renameComponentReferences(type, context),\n ]);\n}\n\nfunction wrapURLEncodedContentType(type: ts.TypeNode, context: TypeTransformContext) {\n context.typeImports.http.add('HttpSearchParams');\n\n return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('HttpSearchParams'), [\n renameComponentReferences(type, context),\n ]);\n}\n\nfunction normalizeRequestBodyMember(\n requestBodyMember: ts.TypeElement,\n context: TypeTransformContext,\n options: { questionToken: ts.QuestionToken | undefined },\n) {\n /* istanbul ignore if -- @preserve\n * Request body members are always expected to be a request body. */\n if (!isContentMember(requestBodyMember)) {\n return undefined;\n }\n\n const newIdentifier = ts.factory.createIdentifier('body');\n\n const contentType = requestBodyMember.name.text;\n let newType = removeRedundantNullUnionIfNecessary(renameComponentReferences(requestBodyMember.type, context));\n\n if (contentType === 'multipart/form-data') {\n newType = wrapFormDataContentType(newType, context);\n } else if (contentType === 'x-www-form-urlencoded') {\n newType = wrapURLEncodedContentType(newType, context);\n }\n\n return {\n contentTypeName: contentType,\n propertySignature: ts.factory.updatePropertySignature(\n requestBodyMember,\n requestBodyMember.modifiers,\n newIdentifier,\n options.questionToken,\n newType,\n ),\n };\n}\n\nfunction normalizeHeaders(headers: ts.TypeLiteralNode) {\n const newHeaderMembers = headers.members.filter((header) => {\n if (ts.isIndexSignatureDeclaration(header)) {\n return false;\n }\n /* istanbul ignore else -- @preserve */\n if (ts.isPropertySignature(header)) {\n return header.type !== undefined && !isUnknownType(header.type);\n }\n /* istanbul ignore next -- @preserve\n * Headers are always expected to be property signatures or index signatures. */\n return true;\n });\n\n if (newHeaderMembers.length === 0) {\n return undefined;\n }\n\n return ts.factory.updateTypeLiteralNode(headers, ts.factory.createNodeArray(newHeaderMembers));\n}\n\nfunction normalizeRequestHeaders(requestHeader: ts.TypeElement): NormalizedRequestHeaders | undefined {\n if (!isRequestHeaders(requestHeader)) {\n return undefined;\n }\n\n const newType = normalizeHeaders(requestHeader.type);\n\n if (!newType) {\n return undefined;\n }\n\n return ts.factory.updatePropertySignature(\n requestHeader,\n requestHeader.modifiers,\n requestHeader.name,\n requestHeader.questionToken,\n newType satisfies NormalizedRequestHeaders['type'],\n ) satisfies ts.PropertySignature as NormalizedRequestHeaders;\n}\n\nfunction createHeaderForUnionByContentType(\n existingHeader: NormalizedRequestHeaders | undefined,\n contentTypeName: string,\n) {\n const existingHeaderMembers = existingHeader?.type.members ?? [];\n\n const contentTypeIdentifier = ts.factory.createIdentifier('\"content-type\"');\n const contentTypeValue = ts.factory.createLiteralTypeNode(ts.factory.createStringLiteral(contentTypeName));\n\n const newHeaderType = ts.factory.createTypeLiteralNode([\n ts.factory.createPropertySignature(undefined, contentTypeIdentifier, undefined, contentTypeValue),\n ...existingHeaderMembers,\n ]);\n\n return ts.factory.createPropertySignature(\n existingHeader?.modifiers,\n ts.factory.createIdentifier('headers'),\n undefined,\n newHeaderType,\n );\n}\n\nexport function normalizeContentType(\n contentType: ts.TypeNode,\n context: TypeTransformContext,\n options: { bodyQuestionToken: ts.QuestionToken | undefined },\n) {\n const { bodyQuestionToken } = options;\n\n if (ts.isIndexedAccessTypeNode(contentType)) {\n return renameComponentReferences(contentType, context);\n }\n\n if (!ts.isTypeLiteralNode(contentType)) {\n return contentType;\n }\n\n const newHeader = contentType.members.map(normalizeRequestHeaders).find(isDefined);\n\n const newBodyMembers = contentType.members.flatMap((body) => {\n if (isContentPropertySignature(body)) {\n return body.type.members\n .map((member) => normalizeRequestBodyMember(member, context, { questionToken: bodyQuestionToken }))\n .filter(isDefined);\n }\n return [];\n });\n\n if (newBodyMembers.length === 0) {\n const newMembers = [newHeader].filter(isDefined);\n\n return ts.factory.updateTypeLiteralNode(contentType, ts.factory.createNodeArray(newMembers));\n } else {\n const bodyMemberUnionTypes = newBodyMembers.map((bodyMember) => {\n const headerMember = createHeaderForUnionByContentType(newHeader, bodyMember.contentTypeName);\n return ts.factory.createTypeLiteralNode([headerMember, bodyMember.propertySignature]);\n });\n\n return ts.factory.createUnionTypeNode(bodyMemberUnionTypes);\n }\n}\n\nfunction normalizeRequest(request: MethodMember, context: TypeTransformContext) {\n const newIdentifier = ts.factory.createIdentifier('request');\n\n const newType = normalizeContentType(request.type, context, {\n bodyQuestionToken: request.questionToken,\n });\n\n if (\n request.questionToken &&\n ts.isIndexedAccessTypeNode(request.type) &&\n ts.isLiteralTypeNode(request.type.indexType) &&\n (ts.isIdentifier(request.type.indexType.literal) || ts.isStringLiteral(request.type.indexType.literal))\n ) {\n const referencedComponentName = request.type.indexType.literal.text;\n context.pendingActions.components.requests.toMarkBodyAsOptional.add(referencedComponentName);\n }\n\n return ts.factory.updatePropertySignature(request, request.modifiers, newIdentifier, undefined, newType);\n}\n\nfunction normalizeResponseType(\n responseType: ts.TypeNode,\n context: TypeTransformContext,\n options: { questionToken?: ts.QuestionToken },\n) {\n const { questionToken } = options;\n\n if (!ts.isTypeLiteralNode(responseType)) {\n return responseType;\n }\n\n return normalizeContentType(responseType, context, { bodyQuestionToken: questionToken });\n}\n\nconst NON_NUMERIC_RESPONSE_STATUS_TO_MAPPED_TYPE: Record<string, string | undefined> = {\n default: 'HttpStatusCode',\n '1xx': 'HttpStatusCode.Information',\n '2xx': 'HttpStatusCode.Success',\n '3xx': 'HttpStatusCode.Redirection',\n '4xx': 'HttpStatusCode.ClientError',\n '5xx': 'HttpStatusCode.ServerError',\n};\n\nexport function normalizeResponse(\n response: ts.TypeElement,\n context: TypeTransformContext,\n options: { isComponent?: boolean } = {},\n) {\n const { isComponent = false } = options;\n\n /* istanbul ignore if -- @preserve\n * Response members are always expected to be a response. */\n if (!isResponse(response)) {\n return undefined;\n }\n\n const newType = normalizeResponseType(response.type, context, {\n questionToken: response.questionToken,\n });\n\n const statusCodeOrComponentName = response.name.text;\n const isNumericStatusCode = /^\\d+$/.test(statusCodeOrComponentName);\n const shouldReuseIdentifier = isComponent || isNumericStatusCode;\n\n let newSignature: ts.PropertySignature;\n\n if (shouldReuseIdentifier) {\n newSignature = ts.factory.updatePropertySignature(\n response,\n response.modifiers,\n response.name,\n response.questionToken,\n newType,\n );\n } else {\n const statusCode = statusCodeOrComponentName.toLowerCase();\n const mappedType = NON_NUMERIC_RESPONSE_STATUS_TO_MAPPED_TYPE[statusCode];\n\n if (!mappedType) {\n logger.warn(\n `Warning: Response has a non-standard status code: ${color.yellow(response.name.text)}. ` +\n \"Consider replacing it with a number (e.g. '200'), a pattern ('1xx', '2xx', '3xx', '4xx', or '5xx'), \" +\n \"or 'default'.\",\n );\n\n return undefined;\n }\n\n context.typeImports.http.add('HttpStatusCode');\n const newIdentifier = ts.factory.createIdentifier(`[StatusCode in ${mappedType}]`);\n\n newSignature = ts.factory.updatePropertySignature(\n response,\n response.modifiers,\n newIdentifier,\n response.questionToken,\n newType,\n );\n }\n\n return {\n newSignature,\n statusCode: {\n value: statusCodeOrComponentName,\n isNumeric: isNumericStatusCode,\n },\n };\n}\n\nexport function normalizeResponses(responses: MethodMember, context: TypeTransformContext) {\n if (isNeverType(responses.type) || !ts.isTypeLiteralNode(responses.type)) {\n return undefined;\n }\n\n const newIdentifier = ts.factory.createIdentifier('response');\n const newQuestionToken = undefined;\n\n const newMembers = responses.type.members\n .map((response) => normalizeResponse(response, context), context)\n .filter(isDefined);\n\n const sortedNewMembers = Array.from(newMembers).sort((response, otherResponse) => {\n return response.statusCode.value.localeCompare(otherResponse.statusCode.value);\n });\n\n const isEveryStatusCodeNumeric = sortedNewMembers.every((response) => response.statusCode.isNumeric);\n let newType: ts.TypeLiteralNode | ts.TypeReferenceNode;\n\n if (isEveryStatusCodeNumeric) {\n newType = ts.factory.updateTypeLiteralNode(\n responses.type,\n ts.factory.createNodeArray(sortedNewMembers.map((response) => response.newSignature)),\n );\n } else {\n context.typeImports.http.add('MergeHttpResponsesByStatusCode');\n\n const typeMembersToMerge = sortedNewMembers.reduce<{\n numeric: ts.PropertySignature[];\n nonNumeric: ts.PropertySignature[];\n }>(\n (members, response) => {\n if (response.statusCode.isNumeric) {\n members.numeric.push(response.newSignature);\n } else {\n members.nonNumeric.push(response.newSignature);\n }\n return members;\n },\n { numeric: [], nonNumeric: [] },\n );\n\n const numericTypeLiteral = ts.factory.createTypeLiteralNode(typeMembersToMerge.numeric);\n const nonNumericTypeLiterals = typeMembersToMerge.nonNumeric.map((response) =>\n ts.factory.createTypeLiteralNode([response]),\n );\n\n const mergeWrapper = ts.factory.createIdentifier('MergeHttpResponsesByStatusCode');\n newType = ts.factory.createTypeReferenceNode(mergeWrapper, [\n ts.factory.createTupleTypeNode([numericTypeLiteral, ...nonNumericTypeLiterals]),\n ]);\n }\n\n return ts.factory.updatePropertySignature(\n responses,\n responses.modifiers,\n newIdentifier,\n newQuestionToken,\n renameComponentReferences(newType, context),\n );\n}\n\nfunction normalizeMethodMember(methodMember: ts.TypeElement, context: TypeTransformContext) {\n /* istanbul ignore else -- @preserve */\n if (isMethodMember(methodMember)) {\n if (methodMember.name.text === 'requestBody') {\n return normalizeRequest(methodMember, context);\n }\n if (methodMember.name.text === 'responses') {\n return normalizeResponses(methodMember, context);\n }\n return methodMember;\n }\n\n /* istanbul ignore next -- @preserve\n * Method members are always expected as property signatures in methods. */\n return undefined;\n}\n\nfunction normalizeRequestQueryWithParameters(requestMember: RequestMember, context: TypeTransformContext) {\n const newIdentifier = ts.factory.createIdentifier('searchParams');\n const newQuestionToken = undefined;\n\n const newType = renameComponentReferences(requestMember.type, context);\n\n return ts.factory.updatePropertySignature(\n requestMember,\n requestMember.modifiers,\n newIdentifier,\n newQuestionToken,\n newType,\n );\n}\n\nfunction normalizeRequestHeadersWithParameters(requestMember: RequestMember, context: TypeTransformContext) {\n const newIdentifier = ts.factory.createIdentifier('headers');\n const newQuestionToken = undefined;\n\n const newType = renameComponentReferences(requestMember.type, context);\n\n return ts.factory.updatePropertySignature(\n requestMember,\n requestMember.modifiers,\n newIdentifier,\n newQuestionToken,\n newType,\n );\n}\n\nfunction normalizeRequestMemberWithParameters(requestMember: ts.TypeElement, context: TypeTransformContext) {\n if (!isRequestMember(requestMember) || requestMember.name.text === 'path') {\n return undefined;\n }\n\n if (requestMember.name.text === 'query') {\n return normalizeRequestQueryWithParameters(requestMember, context);\n }\n if (requestMember.name.text === 'header') {\n return normalizeRequestHeadersWithParameters(requestMember, context);\n }\n\n return requestMember;\n}\n\nfunction mergeRequestHeadersMember(headers: NormalizedRequestHeaders, otherHeaders: NormalizedRequestHeaders) {\n const newType = ts.factory.updateTypeLiteralNode(\n headers.type,\n ts.factory.createNodeArray([...otherHeaders.type.members, ...headers.type.members]),\n );\n\n return ts.factory.updatePropertySignature(\n headers,\n headers.modifiers,\n headers.name,\n headers.questionToken,\n newType satisfies NormalizedRequestHeaders['type'],\n ) satisfies ts.PropertySignature as NormalizedRequestHeaders;\n}\n\nfunction mergeRequestHeadersMembers(members: (ts.PropertySignature | undefined)[]) {\n let mergedHeaders: NormalizedRequestHeaders | undefined;\n let firstHeadersIndex: number | undefined;\n\n const mergedHeadersMembers = members.map((member, index) => {\n if (!member || !isNormalizedRequestHeaders(member)) {\n return member;\n }\n\n if (firstHeadersIndex === undefined || !mergedHeaders) {\n firstHeadersIndex = index;\n mergedHeaders = member;\n return member;\n }\n\n mergedHeaders = mergeRequestHeadersMember(mergedHeaders, member);\n return undefined;\n });\n\n if (firstHeadersIndex !== undefined) {\n mergedHeadersMembers[firstHeadersIndex] = mergedHeaders;\n }\n\n return mergedHeadersMembers.filter(isDefined);\n}\n\nfunction mergeRequestAndParameterTypes(\n requestType: ts.TypeNode,\n methodMembers: ts.TypeElement[],\n context: TypeTransformContext,\n) {\n const parameters = methodMembers.find(isRequestParameters);\n /* istanbul ignore next -- @preserve\n * Parameters member is always expected to be found. */\n const parametersMembers = parameters ? parameters.type.members : [];\n\n const requestMembers = ts.isTypeLiteralNode(requestType) ? requestType.members : [];\n\n const newMembers = mergeRequestHeadersMembers(\n [...parametersMembers, ...requestMembers].map((member) => {\n return normalizeRequestMemberWithParameters(member, context);\n }),\n );\n\n if (newMembers.length === 0) {\n return undefined;\n }\n\n return ts.factory.createTypeLiteralNode(newMembers);\n}\n\nfunction normalizeRequestTypeWithParameters(\n requestType: ts.TypeNode,\n methodMembers: ts.TypeElement[],\n context: TypeTransformContext,\n): ts.TypeNode | undefined {\n if (ts.isUnionTypeNode(requestType)) {\n const newTypes = requestType.types\n .map((type) => normalizeRequestTypeWithParameters(type, methodMembers, context))\n .filter(isDefined);\n return ts.factory.updateUnionTypeNode(requestType, ts.factory.createNodeArray(newTypes));\n }\n\n if (ts.isIndexedAccessTypeNode(requestType)) {\n const newType = normalizeRequestTypeWithParameters(ts.factory.createTypeLiteralNode([]), methodMembers, context);\n return ts.factory.createIntersectionTypeNode([requestType, newType].filter(isDefined));\n }\n\n return mergeRequestAndParameterTypes(requestType, methodMembers, context);\n}\n\nfunction normalizeMethodMemberWithParameters(\n methodMember: ts.PropertySignature,\n methodMembers: ts.TypeElement[],\n context: TypeTransformContext,\n) {\n /* istanbul ignore if -- @preserve\n * Method members are always expected to have a name and type at this point. */\n if (!ts.isIdentifier(methodMember.name) || !methodMember.type) {\n return undefined;\n }\n\n if (methodMember.name.text === 'request') {\n const newType = normalizeRequestTypeWithParameters(methodMember.type, methodMembers, context);\n\n if (!newType) {\n return undefined;\n }\n\n return ts.factory.updatePropertySignature(\n methodMember,\n methodMember.modifiers,\n methodMember.name,\n undefined,\n newType,\n );\n }\n\n if (methodMember.name.text === 'response') {\n return methodMember;\n }\n\n return undefined;\n}\n\nexport function normalizeTypeLiteralMethodType(methodType: ts.TypeLiteralNode, context: TypeTransformContext) {\n const newMembers = methodType.members\n .map((member) => normalizeMethodMember(member, context))\n .filter(isDefined)\n .map((member, _index, partialMembers) => normalizeMethodMemberWithParameters(member, partialMembers, context))\n .filter(isDefined);\n\n return ts.factory.updateTypeLiteralNode(methodType, ts.factory.createNodeArray(newMembers));\n}\n\nfunction normalizeIndexedAccessMethodType(methodType: ts.IndexedAccessTypeNode, context: TypeTransformContext) {\n const isOperationsReference =\n ts.isTypeReferenceNode(methodType.objectType) &&\n ts.isIdentifier(methodType.objectType.typeName) &&\n methodType.objectType.typeName.text === 'operations';\n\n /* istanbul ignore if -- @preserve\n * In indexed access method types, the reference is always expected to be an operation. */\n if (!isOperationsReference) {\n return methodType;\n }\n\n const newIdentifier = createOperationsIdentifier(context.serviceName);\n const newObjectType = ts.factory.createTypeReferenceNode(newIdentifier, methodType.objectType.typeArguments);\n\n const hasIndexTypeName =\n ts.isLiteralTypeNode(methodType.indexType) &&\n (ts.isIdentifier(methodType.indexType.literal) || ts.isStringLiteral(methodType.indexType.literal));\n\n /* istanbul ignore else -- @preserve\n * In indexed access method types referencing operations, an index type name is always expected. */\n if (hasIndexTypeName) {\n const operationName = methodType.indexType.literal.text;\n context.referencedTypes.operations.add(operationName);\n }\n\n return ts.factory.updateIndexedAccessTypeNode(methodType, newObjectType, methodType.indexType);\n}\n\nexport function normalizeMethod(method: ts.TypeElement, context: TypeTransformContext, options: { pathName: string }) {\n if (!isMethod(method)) {\n return undefined;\n }\n\n const methodName = method.name.text.toUpperCase<HttpMethod>();\n\n if (!HTTP_METHODS.includes(methodName)) {\n return undefined;\n }\n\n const matchesPositiveFilters =\n context.filters.paths.positive.length === 0 ||\n context.filters.paths.positive.some(\n (filter) => filter.methodRegex.test(methodName) && filter.pathRegex.test(options.pathName),\n );\n\n if (!matchesPositiveFilters) {\n return undefined;\n }\n\n const matchesNegativeFilters =\n context.filters.paths.negative.length > 0 &&\n context.filters.paths.negative.some(\n (filter) => filter.methodRegex.test(methodName) && filter.pathRegex.test(options.pathName),\n );\n\n if (matchesNegativeFilters) {\n return undefined;\n }\n\n const newIdentifier = ts.factory.createIdentifier(methodName);\n\n const newType = ts.isTypeLiteralNode(method.type)\n ? normalizeTypeLiteralMethodType(method.type, context)\n : normalizeIndexedAccessMethodType(method.type, context);\n\n return ts.factory.updatePropertySignature(method, method.modifiers, newIdentifier, method.questionToken, newType);\n}\n","import isDefined from '@zimic/utils/data/isDefined';\nimport { Override } from '@zimic/utils/types';\nimport ts from 'typescript';\n\nimport { renameComponentReferences } from './components';\nimport { TypeTransformContext } from './context';\nimport { normalizeMethod } from './methods';\n\nexport function createPathsIdentifier(serviceName: string) {\n return ts.factory.createIdentifier(`${serviceName}Schema`);\n}\n\ntype PathsDeclaration = ts.InterfaceDeclaration | ts.TypeAliasDeclaration;\n\nexport function isPathsDeclaration(node: ts.Node | undefined): node is PathsDeclaration {\n return (\n node !== undefined &&\n (ts.isInterfaceDeclaration(node) || ts.isTypeAliasDeclaration(node)) &&\n node.name.text === 'paths'\n );\n}\n\ntype Path = Override<\n ts.PropertySignature,\n {\n type: ts.TypeLiteralNode | ts.IndexedAccessTypeNode;\n name: ts.Identifier | ts.StringLiteral;\n }\n>;\n\nfunction isPath(node: ts.TypeElement): node is Path {\n return (\n ts.isPropertySignature(node) &&\n (ts.isIdentifier(node.name) || ts.isStringLiteral(node.name)) &&\n node.type !== undefined &&\n (ts.isTypeLiteralNode(node.type) || ts.isIndexedAccessTypeNode(node.type))\n );\n}\n\nfunction normalizePathNameWithParameters(pathName: string) {\n return pathName.replace(/{([^}]+)}/g, ':$1');\n}\n\nexport function normalizePath(\n path: ts.TypeElement,\n context: TypeTransformContext,\n options: { isComponent?: boolean } = {},\n) {\n const { isComponent = false } = options;\n\n /* istanbul ignore if -- @preserve\n * Path members are always expected to be a path. */\n if (!isPath(path)) {\n return undefined;\n }\n\n const newPathName = isComponent ? path.name.text : normalizePathNameWithParameters(path.name.text);\n const newIdentifier = isComponent ? path.name : ts.factory.createStringLiteral(newPathName);\n\n let newType: ts.TypeNode;\n\n if (ts.isTypeLiteralNode(path.type)) {\n const newMethods = path.type.members\n .map((method) => normalizeMethod(method, context, { pathName: newPathName }))\n .filter(isDefined);\n\n if (newMethods.length === 0) {\n return undefined;\n }\n\n newType = ts.factory.updateTypeLiteralNode(path.type, ts.factory.createNodeArray(newMethods));\n } else {\n newType = renameComponentReferences(path.type, context);\n }\n\n return ts.factory.updatePropertySignature(path, path.modifiers, newIdentifier, path.questionToken, newType);\n}\n\nfunction wrapPathsType(type: ts.TypeLiteralNode, context: TypeTransformContext) {\n context.typeImports.http.add('HttpSchema');\n\n const httpSchemaPathsWrapper = ts.factory.createIdentifier('HttpSchema');\n return ts.factory.createTypeReferenceNode(httpSchemaPathsWrapper, [type]);\n}\n\nexport function normalizePaths(pathsOrTypeAlias: PathsDeclaration, context: TypeTransformContext) {\n const newIdentifier = createPathsIdentifier(context.serviceName);\n\n const paths = ts.isTypeAliasDeclaration(pathsOrTypeAlias)\n ? ts.factory.createInterfaceDeclaration(pathsOrTypeAlias.modifiers, pathsOrTypeAlias.name, undefined, undefined, [])\n : pathsOrTypeAlias;\n\n const newMembers = paths.members.map((path) => normalizePath(path, context)).filter(isDefined);\n const newType = ts.factory.createTypeLiteralNode(newMembers);\n\n return ts.factory.createTypeAliasDeclaration(\n paths.modifiers,\n newIdentifier,\n paths.typeParameters,\n wrapPathsType(newType, context),\n );\n}\n","import isDefined from '@zimic/utils/data/isDefined';\nimport { Override } from '@zimic/utils/types';\nimport ts from 'typescript';\n\nimport { isNeverType, isUnknownType } from '../utils/types';\nimport { ComponentPath, TypeTransformContext } from './context';\nimport { normalizeContentType, normalizeResponse } from './methods';\nimport { normalizePath } from './paths';\n\nexport function createComponentsIdentifierText(serviceName: string) {\n return `${serviceName}Components`;\n}\n\nfunction createComponentsIdentifier(serviceName: string) {\n return ts.factory.createIdentifier(createComponentsIdentifierText(serviceName));\n}\n\ntype ComponentsDeclaration = ts.InterfaceDeclaration;\n\nexport function isComponentsDeclaration(\n node: ts.Node | undefined,\n context: TypeTransformContext,\n): node is ComponentsDeclaration {\n const componentIdentifiers = ['components', createComponentsIdentifierText(context.serviceName)];\n return node !== undefined && ts.isInterfaceDeclaration(node) && componentIdentifiers.includes(node.name.text);\n}\n\ntype ComponentGroup = Override<\n ts.PropertySignature,\n {\n type: ts.TypeLiteralNode;\n name: ts.Identifier | ts.StringLiteral;\n }\n>;\n\nfunction isComponentGroup(node: ts.TypeElement): node is ComponentGroup {\n return (\n ts.isPropertySignature(node) &&\n node.type !== undefined &&\n ts.isTypeLiteralNode(node.type) &&\n ts.isIdentifier(node.name)\n );\n}\n\ntype Component = Override<\n ts.PropertySignature,\n {\n type: ts.TypeNode;\n name: ts.Identifier | ts.StringLiteral;\n }\n>;\n\nfunction isComponent(node: ts.TypeElement): node is Component {\n return (\n ts.isPropertySignature(node) &&\n node.type !== undefined &&\n !isNeverType(node.type) &&\n (ts.isIdentifier(node.name) || ts.isStringLiteral(node.name))\n );\n}\n\ntype RequestComponent = Override<Component, { type: ts.TypeLiteralNode }>;\n\nfunction isRequestComponent(node: Component): node is RequestComponent {\n return ts.isTypeLiteralNode(node.type);\n}\n\nfunction unchangedIndexedAccessTypeNode(node: ts.IndexedAccessTypeNode) {\n return node;\n}\n\nfunction visitComponentReferences(\n node: ts.TypeNode,\n context: TypeTransformContext & {\n isComponentIndexedAccess?: boolean;\n partialComponentPath?: string[];\n },\n options: {\n onComponentReference: (node: ts.IndexedAccessTypeNode, componentPath: ComponentPath) => void;\n renameComponentReference?: (\n node: ts.IndexedAccessTypeNode,\n resources: {\n objectType: ts.TypeReferenceNode;\n indexType: ts.LiteralTypeNode;\n componentGroupName: string;\n },\n ) => ts.IndexedAccessTypeNode;\n },\n): ts.TypeNode {\n const { onComponentReference, renameComponentReference = unchangedIndexedAccessTypeNode } = options;\n\n if (isUnknownType(node)) {\n return ts.factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword);\n }\n\n if (ts.isTypeReferenceNode(node)) {\n const newTypeArguments = node.typeArguments?.map((type) => visitComponentReferences(type, context, options));\n return ts.factory.updateTypeReferenceNode(node, node.typeName, ts.factory.createNodeArray(newTypeArguments));\n }\n\n if (ts.isArrayTypeNode(node)) {\n const newElementType = visitComponentReferences(node.elementType, context, options);\n return ts.factory.updateArrayTypeNode(node, newElementType);\n }\n\n if (ts.isTupleTypeNode(node)) {\n const newElements = node.elements.map((element) => visitComponentReferences(element, context, options));\n return ts.factory.updateTupleTypeNode(node, ts.factory.createNodeArray(newElements));\n }\n\n if (ts.isUnionTypeNode(node)) {\n const newTypes = node.types.map((type) => visitComponentReferences(type, context, options));\n return ts.factory.updateUnionTypeNode(node, ts.factory.createNodeArray(newTypes));\n }\n\n if (ts.isIntersectionTypeNode(node)) {\n const newTypes = node.types.map((type) => visitComponentReferences(type, context, options));\n return ts.factory.updateIntersectionTypeNode(node, ts.factory.createNodeArray(newTypes));\n }\n\n if (ts.isParenthesizedTypeNode(node)) {\n const newType = visitComponentReferences(node.type, context, options);\n return ts.factory.updateParenthesizedType(node, newType);\n }\n\n if (ts.isTypeLiteralNode(node)) {\n const newMembers = node.members.map((member) => {\n if (ts.isPropertySignature(member) && member.type) {\n const newType = visitComponentReferences(member.type, context, options);\n return ts.factory.updatePropertySignature(member, member.modifiers, member.name, member.questionToken, newType);\n }\n\n /* istanbul ignore else -- @preserve */\n if (ts.isIndexSignatureDeclaration(member)) {\n const newType = visitComponentReferences(member.type, context, options);\n return ts.factory.updateIndexSignature(member, member.modifiers, member.parameters, newType);\n }\n\n /* istanbul ignore next -- @preserve\n * All members are expected to be either a property signature or an index signature. */\n return member;\n });\n\n return ts.factory.updateTypeLiteralNode(node, ts.factory.createNodeArray(newMembers));\n }\n\n if (ts.isIndexedAccessTypeNode(node)) {\n const isRootIndexedAccess = context.isComponentIndexedAccess ?? true;\n\n if (ts.isIndexedAccessTypeNode(node.objectType)) {\n const childContext: typeof context = { ...context, isComponentIndexedAccess: false };\n const newObjectType = visitComponentReferences(node.objectType, childContext, options);\n\n const newNode = ts.factory.updateIndexedAccessTypeNode(node, newObjectType, node.indexType);\n\n /* istanbul ignore else -- @preserve\n * Component indexed accesses are always expected to have child indexed accesses. */\n if (childContext.partialComponentPath && childContext.partialComponentPath.length > 0) {\n const hasIndexTypeName =\n ts.isLiteralTypeNode(node.indexType) &&\n (ts.isIdentifier(node.indexType.literal) || ts.isStringLiteral(node.indexType.literal));\n\n /* istanbul ignore else -- @preserve\n * Component indexed accesses are always expected to have child indexed accesses. */\n if (hasIndexTypeName) {\n const componentName = node.indexType.literal.text;\n childContext.partialComponentPath.push(componentName);\n }\n\n /* istanbul ignore else -- @preserve\n * Component indexed accesses are always expected to have child indexed accesses. */\n if (isRootIndexedAccess) {\n const componentGroupName = childContext.partialComponentPath[0];\n const componentName = childContext.partialComponentPath.slice(1).join('.');\n const componentPath = `${componentGroupName}.${componentName}` as const;\n onComponentReference(newNode, componentPath);\n }\n }\n\n return newNode;\n }\n\n const componentIdentifiers = ['components', createComponentsIdentifierText(context.serviceName)];\n\n const isComponentIndexedAccess =\n ts.isTypeReferenceNode(node.objectType) &&\n ts.isIdentifier(node.objectType.typeName) &&\n componentIdentifiers.includes(node.objectType.typeName.text) &&\n ts.isLiteralTypeNode(node.indexType) &&\n (ts.isIdentifier(node.indexType.literal) || ts.isStringLiteral(node.indexType.literal));\n\n /* istanbul ignore else -- @preserve\n * All indexed accesses are expected to point to components. */\n if (isComponentIndexedAccess) {\n const isRawComponent = node.objectType.typeName.text === 'components';\n const componentGroupName = node.indexType.literal.text;\n\n const newNode = isRawComponent\n ? renameComponentReference(node, {\n objectType: node.objectType,\n indexType: node.indexType,\n componentGroupName,\n })\n : node;\n\n const newNodeHasComponentGroupName =\n ts.isLiteralTypeNode(newNode.indexType) &&\n (ts.isIdentifier(newNode.indexType.literal) || ts.isStringLiteral(newNode.indexType.literal));\n\n /* istanbul ignore else -- @preserve\n * All component indexed accesses are expected to have an index type name. */\n if (newNodeHasComponentGroupName) {\n const newComponentGroupName = newNode.indexType.literal.text;\n context.partialComponentPath = [newComponentGroupName];\n }\n\n return newNode;\n }\n }\n\n return node;\n}\n\nexport function normalizeComponentGroupName(rawComponentGroupName: string) {\n if (rawComponentGroupName === 'requestBodies') {\n return 'requests';\n }\n return rawComponentGroupName;\n}\n\nexport function renameComponentReferences(node: ts.TypeNode, context: TypeTransformContext): ts.TypeNode {\n return visitComponentReferences(node, context, {\n onComponentReference(_node, componentPath) {\n context.referencedTypes.components.add(componentPath);\n },\n\n renameComponentReference(node, { indexType, objectType, componentGroupName }) {\n const newIdentifier = createComponentsIdentifier(context.serviceName);\n const newObjectType = ts.factory.updateTypeReferenceNode(objectType, newIdentifier, objectType.typeArguments);\n\n const newComponentGroupName = normalizeComponentGroupName(componentGroupName);\n const newIndexType = ts.factory.updateLiteralTypeNode(\n indexType,\n ts.factory.createStringLiteral(newComponentGroupName),\n );\n\n return ts.factory.updateIndexedAccessTypeNode(node, newObjectType, newIndexType);\n },\n });\n}\n\nfunction processPendingRequestComponentActions(component: RequestComponent, context: TypeTransformContext) {\n const pendingRequestActions = context.pendingActions.components.requests;\n\n const componentName = component.name.text;\n const shouldBeMarkedAsOptional = pendingRequestActions.toMarkBodyAsOptional.has(componentName);\n\n const bodyQuestionToken = shouldBeMarkedAsOptional\n ? ts.factory.createToken(ts.SyntaxKind.QuestionToken)\n : component.questionToken;\n\n pendingRequestActions.toMarkBodyAsOptional.delete(componentName);\n\n return { bodyQuestionToken };\n}\n\nfunction normalizeRequestComponent(component: Component, context: TypeTransformContext) {\n /* istanbul ignore if -- @preserve\n * Component group members in `requests` are always expected the be request components. */\n if (!isRequestComponent(component)) {\n return undefined;\n }\n\n const { bodyQuestionToken } = processPendingRequestComponentActions(component, context);\n const newType = normalizeContentType(component.type, context, { bodyQuestionToken });\n\n return ts.factory.updatePropertySignature(\n component,\n component.modifiers,\n component.name,\n component.questionToken,\n newType,\n );\n}\n\nfunction normalizeComponent(\n component: ts.TypeElement,\n componentGroupName: string,\n context: TypeTransformContext,\n): ts.TypeElement | undefined {\n /* istanbul ignore if -- @preserve\n * Component group members are always expected the be components. */\n if (!isComponent(component)) {\n return undefined;\n }\n\n if (componentGroupName === 'requests') {\n return normalizeRequestComponent(component, context);\n }\n\n if (componentGroupName === 'responses') {\n const responseComponent = normalizeResponse(component, context, { isComponent: true });\n return responseComponent?.newSignature;\n }\n\n if (componentGroupName === 'pathItems') {\n return normalizePath(component, context, { isComponent: true });\n }\n\n return ts.factory.updatePropertySignature(\n component,\n component.modifiers,\n component.name,\n component.questionToken,\n renameComponentReferences(component.type, context),\n );\n}\n\nfunction normalizeComponentGroup(componentGroup: ts.TypeElement, context: TypeTransformContext) {\n if (!isComponentGroup(componentGroup)) {\n return undefined;\n }\n\n const componentGroupName = normalizeComponentGroupName(componentGroup.name.text);\n const newIdentifier = ts.factory.createIdentifier(componentGroupName);\n\n const newComponents = componentGroup.type.members\n .map((component) => normalizeComponent(component, componentGroupName, context))\n .filter(isDefined);\n\n const newType = ts.factory.updateTypeLiteralNode(componentGroup.type, ts.factory.createNodeArray(newComponents));\n\n return ts.factory.updatePropertySignature(\n componentGroup,\n componentGroup.modifiers,\n newIdentifier,\n componentGroup.questionToken,\n newType,\n );\n}\n\nexport function normalizeComponents(components: ts.InterfaceDeclaration, context: TypeTransformContext) {\n const newIdentifier = createComponentsIdentifier(context.serviceName);\n\n const newMembers = components.members\n .map((componentGroup) => normalizeComponentGroup(componentGroup, context))\n .filter(isDefined);\n\n return ts.factory.updateInterfaceDeclaration(\n components,\n components.modifiers,\n newIdentifier,\n components.typeParameters,\n components.heritageClauses,\n newMembers,\n );\n}\n\nexport function populateReferencedComponents(components: ts.InterfaceDeclaration, context: TypeTransformContext) {\n const pathsToVisit = new Set(context.referencedTypes.components);\n\n while (pathsToVisit.size > 0) {\n const previousPathsToVisit = new Set(pathsToVisit);\n pathsToVisit.clear();\n\n for (const componentGroup of components.members) {\n if (!isComponentGroup(componentGroup)) {\n continue;\n }\n\n const componentGroupName = normalizeComponentGroupName(componentGroup.name.text);\n\n for (const component of componentGroup.type.members) {\n /* istanbul ignore if -- @preserve\n * Component group members are always expected the be components. */\n if (!isComponent(component)) {\n continue;\n }\n\n const componentName = component.name.text;\n const componentPath = `${componentGroupName}.${componentName}` as const;\n const isComponentToVisit = previousPathsToVisit.has(componentPath);\n\n if (!isComponentToVisit) {\n continue;\n }\n\n context.referencedTypes.components.add(componentPath);\n\n visitComponentReferences(component.type, context, {\n onComponentReference(_node, componentPath) {\n const isKnownReferencedComponent = context.referencedTypes.components.has(componentPath);\n if (!isKnownReferencedComponent) {\n pathsToVisit.add(componentPath);\n }\n },\n });\n }\n }\n }\n}\n\nexport function removeComponentIfUnreferenced(\n component: ts.TypeElement,\n componentGroupName: string,\n context: TypeTransformContext,\n) {\n /* istanbul ignore if -- @preserve\n * Component group members are always expected the be components. */\n if (!isComponent(component)) {\n return undefined;\n }\n\n const componentName = component.name.text;\n const componentPath = `${componentGroupName}.${componentName}` as const;\n\n if (context.referencedTypes.components.has(componentPath)) {\n context.referencedTypes.components.delete(componentPath);\n return component;\n }\n\n return undefined;\n}\n\nfunction removeUnreferencedComponentsInGroup(componentGroup: ts.TypeElement, context: TypeTransformContext) {\n /* istanbul ignore if -- @preserve\n * Component members are always expected the be component groups. */\n if (!isComponentGroup(componentGroup)) {\n return undefined;\n }\n\n const componentGroupName = normalizeComponentGroupName(componentGroup.name.text);\n\n const newComponents = componentGroup.type.members\n .map((component) => removeComponentIfUnreferenced(component, componentGroupName, context))\n .filter(isDefined);\n\n if (newComponents.length === 0) {\n return undefined;\n }\n\n return ts.factory.updatePropertySignature(\n componentGroup,\n componentGroup.modifiers,\n componentGroup.name,\n componentGroup.questionToken,\n ts.factory.updateTypeLiteralNode(componentGroup.type, ts.factory.createNodeArray(newComponents)),\n );\n}\n\nexport function removeUnreferencedComponents(components: ts.InterfaceDeclaration, context: TypeTransformContext) {\n const newComponentGroups = components.members\n .map((componentGroup) => removeUnreferencedComponentsInGroup(componentGroup, context))\n .filter(isDefined);\n\n context.referencedTypes.components.clear();\n\n if (newComponentGroups.length === 0) {\n return undefined;\n }\n\n return ts.factory.updateInterfaceDeclaration(\n components,\n components.modifiers,\n components.name,\n components.typeParameters,\n components.heritageClauses,\n newComponentGroups,\n );\n}\n","export function convertToPascalCase(value: string) {\n return value.replace(/(?:^|[^A-Za-z\\d])([A-Za-z\\d])/g, (_match, letter: string) => letter.toUpperCase());\n}\n","import isDefined from './isDefined';\n\nfunction isNonEmpty<Value>(value: Value): value is Exclude<NonNullable<Value>, ''> {\n return isDefined(value) && value !== '';\n}\n\nexport default isNonEmpty;\n","export function createPathCharactersToEscapeRegex() {\n return /([.(){}+$])/g;\n}\n\nexport function preparePathForRegex(path: string) {\n // We encode the path using the URL API because, differently from encodeURI and encodeURIComponent, URL does not\n // re-encode already encoded characters. Since URL requires a full URL, we use a data scheme and strip it later.\n const pathURLPrefix = `data:${path.startsWith('/') ? '' : '/'}`;\n const pathAsURL = new URL(`${pathURLPrefix}${path}`);\n const encodedPath = pathAsURL.href.replace(pathURLPrefix, '');\n\n return encodedPath.replace(/^\\/+/g, '').replace(/\\/+$/g, '').replace(createPathCharactersToEscapeRegex(), '\\\\$1');\n}\n\n// Path params names must match the JavaScript identifier pattern.\n// See // https://developer.mozilla.org/docs/Web/JavaScript/Reference/Lexical_grammar#identifiers.\nexport function createPathParamRegex() {\n return /(?<escape>\\\\)?:(?<identifier>[$_\\p{ID_Start}][$\\p{ID_Continue}]+)(?!\\\\[*+?])/gu;\n}\n\nexport function createRepeatingPathParamRegex() {\n return /(?<escape>\\\\)?:(?<identifier>[$_\\p{ID_Start}][$\\p{ID_Continue}]+)\\\\\\+/gu;\n}\n\nexport function createOptionalPathParamRegex() {\n return /(?<leadingSlash>\\/)?(?<escape>\\\\)?:(?<identifier>[$_\\p{ID_Start}][$\\p{ID_Continue}]+)\\?(?<trailingSlash>\\/)?/gu;\n}\n\nexport function createOptionalRepeatingPathParamRegex() {\n return /(?<leadingSlash>\\/)?(?<escape>\\\\)?:(?<identifier>[$_\\p{ID_Start}][$\\p{ID_Continue}]+)\\*(?<trailingSlash>\\/)?/gu;\n}\n\nfunction createRegexFromPath(path: string) {\n const pathRegexContent = preparePathForRegex(path)\n .replace(\n createOptionalRepeatingPathParamRegex(),\n (\n _match,\n leadingSlash: string | undefined,\n escape: string | undefined,\n identifier: string,\n trailingSlash: string | undefined,\n ) => {\n if (escape) {\n return `${leadingSlash ?? ''}:${identifier}\\\\*${trailingSlash ?? ''}`;\n }\n\n const hasSegmentBeforePrefix = leadingSlash === '/';\n const prefixExpression = hasSegmentBeforePrefix ? '/?' : leadingSlash;\n\n const hasSegmentAfterSuffix = trailingSlash === '/';\n const suffixExpression = hasSegmentAfterSuffix ? '/?' : trailingSlash;\n\n if (prefixExpression && suffixExpression) {\n return `(?:${prefixExpression}(?<${identifier}>.+?)?${suffixExpression})?`;\n } else if (prefixExpression) {\n return `(?:${prefixExpression}(?<${identifier}>.+?))?`;\n } else if (suffixExpression) {\n return `(?:(?<${identifier}>.+?)${suffixExpression})?`;\n } else {\n return `(?<${identifier}>.+?)?`;\n }\n },\n )\n .replace(createRepeatingPathParamRegex(), (_match, escape: string | undefined, identifier: string) => {\n return escape ? `:${identifier}\\\\+` : `(?<${identifier}>.+)`;\n })\n .replace(\n createOptionalPathParamRegex(),\n (\n _match,\n leadingSlash: string | undefined,\n escape: string | undefined,\n identifier: string,\n trailingSlash: string | undefined,\n ) => {\n if (escape) {\n return `${leadingSlash ?? ''}:${identifier}\\\\?${trailingSlash ?? ''}`;\n }\n\n const hasSegmentBeforePrefix = leadingSlash === '/';\n const prefixExpression = hasSegmentBeforePrefix ? '/?' : leadingSlash;\n\n const hasSegmentAfterSuffix = trailingSlash === '/';\n const suffixExpression = hasSegmentAfterSuffix ? '/?' : trailingSlash;\n\n if (prefixExpression && suffixExpression) {\n return `(?:${prefixExpression}(?<${identifier}>[^\\\\/]+?)?${suffixExpression})`;\n } else if (prefixExpression) {\n return `(?:${prefixExpression}(?<${identifier}>[^\\\\/]+?))?`;\n } else if (suffixExpression) {\n return `(?:(?<${identifier}>[^\\\\/]+?)${suffixExpression})?`;\n } else {\n return `(?<${identifier}>[^\\\\/]+?)?`;\n }\n },\n )\n .replace(createPathParamRegex(), (_match, escape: string | undefined, identifier: string) => {\n return escape ? `:${identifier}` : `(?<${identifier}>[^\\\\/]+?)`;\n });\n\n return new RegExp(`^/?${pathRegexContent}/?$`);\n}\n\nexport default createRegexFromPath;\n","import { preparePathForRegex } from './createRegexFromPath';\n\nfunction getSingleWildcardPathRegex() {\n return /(?<wildcardPrefix>^|[^*])(?<escape>\\\\)?\\*(?<wildcardSuffix>[^*]|$)/g;\n}\n\nfunction getDoubleWildcardPathRegex() {\n return /(?<escape>\\\\)?\\*\\*/g;\n}\n\nfunction getTripleWildcardPathRegex() {\n return /(?<escape>\\\\)?\\*\\*\\/\\*(?<wildcardSuffix>[^*]|$)/g;\n}\n\nfunction createWildcardRegexFromPath(path: string) {\n const pathRegexContent = preparePathForRegex(path)\n .replace(getTripleWildcardPathRegex(), (_match, escape: string | undefined, wildcardSuffix: string) => {\n return escape === '\\\\' ? `\\\\*\\\\*/\\\\*${wildcardSuffix}` : `**${wildcardSuffix}`;\n })\n .replace(\n getSingleWildcardPathRegex(),\n (_match, wildcardPrefix: string, escape: string | undefined, wildcardSuffix: string) => {\n return escape === '\\\\' ? `${wildcardPrefix}\\\\*${wildcardSuffix}` : `${wildcardPrefix}[^/]*${wildcardSuffix}`;\n },\n )\n .replace(getDoubleWildcardPathRegex(), (_match, escape: string | undefined) => {\n return escape === '\\\\' ? '\\\\*\\\\*' : '.*';\n });\n\n return new RegExp(`^/?${pathRegexContent}/?$`);\n}\n\nexport default createWildcardRegexFromPath;\n","function createCachedDynamicImport<ImportType>(\n importModuleDynamically: () => Promise<ImportType>,\n): () => Promise<ImportType> {\n let cachedImportResult: ImportType | undefined;\n\n return async function importModuleDynamicallyWithCache() {\n cachedImportResult ??= await importModuleDynamically();\n return cachedImportResult;\n };\n}\n\nexport default createCachedDynamicImport;\n","import createCachedDynamicImport from '@zimic/utils/import/createCachedDynamicImport';\nimport fs from 'fs';\nimport path from 'path';\n\nexport const importFile = createCachedDynamicImport(\n /* istanbul ignore next -- @preserve\n * Ignoring as Node.js >=20 provides a global File and the import fallback won't run. */\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n async () => globalThis.File ?? (await import('buffer')).File,\n);\n\nexport function replaceFileExtension(filePath: string, newExtension: string) {\n const parsedFilePath = path.parse(filePath);\n return path.join(parsedFilePath.dir, `${parsedFilePath.name}.${newExtension}`);\n}\n\nexport async function pathExists(path: string) {\n try {\n await fs.promises.access(path, fs.constants.R_OK);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function ensurePathExists(path: string, options: { errorMessage: string }) {\n try {\n await fs.promises.access(path, fs.constants.R_OK);\n } catch (accessError) {\n const error = new Error(options.errorMessage);\n error.cause = accessError;\n throw error;\n }\n}\n","import isNonEmpty from '@zimic/utils/data/isNonEmpty';\nimport createWildcardRegexFromPath from '@zimic/utils/url/createWildcardRegexFromPath';\nimport fs from 'fs';\nimport color from 'picocolors';\n\nimport { HTTP_METHODS } from '@/types/schema';\nimport { ensurePathExists } from '@/utils/files';\nimport { logger } from '@/utils/logging';\n\nimport { TypePathFilter, TypePathFilters } from './context';\n\nconst HTTP_METHOD_OPTIONS = HTTP_METHODS.join('|');\nconst MODIFIER_GROUP = '(?<modifier>!?)';\nconst METHOD_FILTER_GROUP = `(?<method>(?:\\\\*|(?:${HTTP_METHOD_OPTIONS})(?:,\\\\s*(?:${HTTP_METHOD_OPTIONS}))*))`;\nconst PATH_FILTER_GROUP = '(?<path>.+)';\nconst FILTER_REGEX = new RegExp(`^${MODIFIER_GROUP}\\\\s*${METHOD_FILTER_GROUP}\\\\s+${PATH_FILTER_GROUP}$`, 'i');\n\nexport function parseRawFilter(rawFilter: string): TypePathFilter | undefined {\n const filterMatch = rawFilter.match(FILTER_REGEX);\n const { modifier: filterModifier, method: filteredMethodsOrWildcard, path: filteredPath } = filterMatch?.groups ?? {};\n\n const isValidFilter = !filteredMethodsOrWildcard || !filteredPath;\n\n if (isValidFilter) {\n logger.warn(`Warning: Filter could not be parsed and was ignored: ${color.yellow(rawFilter)}`);\n return undefined;\n }\n\n return {\n methodRegex: new RegExp(`(?:${filteredMethodsOrWildcard.toUpperCase().replace(/,/g, '|').replace(/\\*/g, '.*')})`),\n pathRegex: createWildcardRegexFromPath(filteredPath),\n isNegativeMatch: filterModifier === '!',\n };\n}\n\nexport function groupParsedFiltersByMatch(parsedFilters: (TypePathFilter | undefined)[]) {\n return parsedFilters.reduce<TypePathFilters>(\n (groupedFilters, filter) => {\n if (filter) {\n if (filter.isNegativeMatch) {\n groupedFilters.negative.push(filter);\n } else {\n groupedFilters.positive.push(filter);\n }\n }\n\n return groupedFilters;\n },\n { positive: [], negative: [] },\n );\n}\n\nexport async function readPathFiltersFromFile(filePath: string) {\n await ensurePathExists(filePath, {\n errorMessage: `Could not read filter file: ${color.yellow(filePath)}`,\n });\n\n const fileContent = await fs.promises.readFile(filePath, 'utf-8');\n const fileContentWithoutComments = fileContent.replace(/#.*$/gm, '');\n\n const filters = fileContentWithoutComments.split('\\n');\n return filters;\n}\n\nexport function ignoreEmptyFilters(filters: string[]) {\n return filters.map((line) => line.trim()).filter(isNonEmpty);\n}\n","import { convertToPascalCase } from '@/utils/strings';\n\nimport { parseRawFilter, groupParsedFiltersByMatch } from './filters';\n\nexport interface TypePathFilter {\n methodRegex: RegExp;\n pathRegex: RegExp;\n isNegativeMatch: boolean;\n}\n\nexport interface TypePathFilters {\n positive: TypePathFilter[];\n negative: TypePathFilter[];\n}\n\ntype HttpTypeImportName =\n | 'HttpSchema'\n | 'HttpFormData'\n | 'HttpSearchParams'\n | 'HttpStatusCode'\n | 'MergeHttpResponsesByStatusCode';\n\ntype OperationName = string;\nexport type OperationPath = OperationName;\n\nexport type ComponentGroupName = string;\nexport type ComponentName = string;\nexport type ComponentPath = `${ComponentGroupName}.${ComponentName}`;\n\nexport interface TypeTransformContext {\n serviceName: string;\n filters: {\n paths: TypePathFilters;\n };\n typeImports: {\n http: Set<HttpTypeImportName>;\n };\n referencedTypes: {\n operations: Set<OperationPath>;\n components: Set<ComponentPath>;\n };\n pendingActions: {\n components: {\n requests: { toMarkBodyAsOptional: Set<ComponentName> };\n };\n };\n}\n\nexport function createTypeTransformationContext(serviceName: string, rawFilters: string[]): TypeTransformContext {\n const parsedFilters = rawFilters.map(parseRawFilter);\n\n return {\n serviceName: convertToPascalCase(serviceName),\n filters: {\n paths: groupParsedFiltersByMatch(parsedFilters),\n },\n typeImports: {\n http: new Set(),\n },\n referencedTypes: {\n operations: new Set(),\n components: new Set(),\n },\n pendingActions: {\n components: {\n requests: { toMarkBodyAsOptional: new Set() },\n },\n },\n };\n}\n","import { createImportDeclaration, createImportSpecifier } from '../utils/types';\nimport { TypeTransformContext } from './context';\n\n/* istanbul ignore next -- @preserve\n * The root import module is defined at build time. The fallback is not expected to be used. */\nexport const TYPEGEN_HTTP_IMPORT_MODULE = process.env.TYPEGEN_HTTP_IMPORT_MODULE ?? '@zimic/http';\n\nexport function createImportDeclarations(context: TypeTransformContext) {\n const httpTypeImports = Array.from(context.typeImports.http).sort().map(createImportSpecifier);\n const httpImportDeclaration = createImportDeclaration(httpTypeImports, TYPEGEN_HTTP_IMPORT_MODULE, {\n typeOnly: true,\n });\n\n return [httpImportDeclaration];\n}\n","import createCachedDynamicImport from '@zimic/utils/import/createCachedDynamicImport';\nimport fs from 'fs';\nimport type { SchemaObject } from 'openapi-typescript';\nimport path from 'path';\nimport ts from 'typescript';\n\nimport { createBlobType, createNullType } from '../utils/types';\n\nconst importOpenapiTypeScript = createCachedDynamicImport(() => import('openapi-typescript'));\n\nfunction transformSchemaObject(schemaObject: SchemaObject) {\n if (schemaObject.format === 'binary') {\n const blobType = createBlobType();\n\n if (schemaObject.nullable) {\n const nullType = createNullType();\n return ts.factory.createUnionTypeNode([blobType, nullType]);\n }\n\n return blobType;\n }\n}\n\nfunction convertFilePathOrURLToURL(filePathOrURL: string) {\n try {\n return new URL(filePathOrURL);\n } catch {\n return new URL(`file://${path.resolve(filePathOrURL)}`);\n }\n}\n\nexport async function importTypesFromOpenAPI(filePathOrURL: string) {\n const schemaURL = convertFilePathOrURLToURL(filePathOrURL);\n\n const { default: generateTypesFromOpenAPI } = await importOpenapiTypeScript();\n\n const rawNodes = await generateTypesFromOpenAPI(schemaURL, {\n alphabetize: false,\n additionalProperties: false,\n excludeDeprecated: false,\n propertiesRequiredByDefault: false,\n defaultNonNullable: true,\n pathParamsAsTypes: false,\n emptyObjectsUnknown: true,\n exportType: false,\n arrayLength: false,\n immutable: false,\n enumValues: false,\n enum: false,\n silent: true,\n transform: transformSchemaObject,\n });\n\n return rawNodes;\n}\n\nexport async function convertTypesToString(nodes: ts.Node[], options: { includeComments: boolean }) {\n const { astToString: convertTypeASTToString } = await importOpenapiTypeScript();\n\n const typegenResult = convertTypeASTToString(nodes, {\n formatOptions: { removeComments: !options.includeComments },\n });\n\n return typegenResult;\n}\n\nexport function formatTypegenResultToOutput(typegenResult: string) {\n const formattedResult = typegenResult\n .replace(/^export (\\w+)/gm, '\\nexport $1')\n .replace(/^( {4})+/gm, (match) => match.replace(/ {4}/g, ' '));\n\n return [\n '// Auto-generated by @zimic/http.',\n '// NOTE: Do not manually edit this file. Changes will be overridden.\\n',\n formattedResult,\n ].join('\\n');\n}\n\nexport async function writeTypegenResultToStandardOutput(typegenResult: string) {\n await new Promise((resolve) => {\n process.stdout.write(typegenResult, 'utf-8', resolve);\n });\n}\n\nexport async function writeTypegenResultToFile(outputFilePath: string, formattedResult: string) {\n const outputDirectory = path.dirname(outputFilePath);\n await fs.promises.mkdir(outputDirectory, { recursive: true });\n\n await fs.promises.writeFile(outputFilePath, formattedResult);\n}\n","import isDefined from '@zimic/utils/data/isDefined';\nimport path from 'path';\nimport ts from 'typescript';\n\nimport {\n isComponentsDeclaration,\n normalizeComponents,\n populateReferencedComponents,\n removeUnreferencedComponents,\n} from './transform/components';\nimport { createTypeTransformationContext, TypeTransformContext } from './transform/context';\nimport { readPathFiltersFromFile, ignoreEmptyFilters } from './transform/filters';\nimport { createImportDeclarations } from './transform/imports';\nimport {\n convertTypesToString,\n importTypesFromOpenAPI,\n formatTypegenResultToOutput,\n writeTypegenResultToStandardOutput,\n writeTypegenResultToFile,\n} from './transform/io';\nimport { isOperationsDeclaration, normalizeOperations, removeUnreferencedOperations } from './transform/operations';\nimport { isPathsDeclaration, normalizePaths } from './transform/paths';\n\nconst RESOURCES_TO_REMOVE_IF_NOT_NORMALIZED = ['paths', 'webhooks', 'operations', 'components', '$defs'];\n\nfunction removeUnknownResources(node: ts.Node | undefined) {\n const isUnknownResource =\n !node ||\n ((ts.isTypeAliasDeclaration(node) || ts.isInterfaceDeclaration(node)) &&\n RESOURCES_TO_REMOVE_IF_NOT_NORMALIZED.includes(node.name.text));\n\n if (isUnknownResource) {\n return undefined;\n }\n\n return node;\n}\n\nfunction normalizeRawNodes(rawNodes: ts.Node[], context: TypeTransformContext, options: { prune: boolean }) {\n let normalizedNodes = rawNodes.map((node) => (isPathsDeclaration(node) ? normalizePaths(node, context) : node));\n\n if (options.prune) {\n normalizedNodes = normalizedNodes\n .map((node) => (isOperationsDeclaration(node) ? removeUnreferencedOperations(node, context) : node))\n .filter(isDefined);\n }\n\n normalizedNodes = normalizedNodes\n .map((node) => (isOperationsDeclaration(node) ? normalizeOperations(node, context) : node))\n .filter(isDefined);\n\n if (options.prune) {\n for (const node of normalizedNodes) {\n if (isComponentsDeclaration(node, context)) {\n populateReferencedComponents(node, context);\n }\n }\n\n normalizedNodes = normalizedNodes\n .map((node) => (isComponentsDeclaration(node, context) ? removeUnreferencedComponents(node, context) : node))\n .filter(isDefined);\n }\n\n normalizedNodes = normalizedNodes\n .map((node) => (isComponentsDeclaration(node, context) ? normalizeComponents(node, context) : node))\n .map(removeUnknownResources)\n .filter(isDefined);\n\n return normalizedNodes;\n}\n\n/** @see {@link https://zimic.dev/docs/http/api/typegen#generatetypesfromopenapi `generateTypesFromOpenAPI()` API reference} */\nexport interface OpenAPITypegenOptions {\n /** @see {@link https://zimic.dev/docs/http/api/typegen#generatetypesfromopenapi `generateTypesFromOpenAPI()` API reference} */\n input: string;\n /** @see {@link https://zimic.dev/docs/http/api/typegen#generatetypesfromopenapi `generateTypesFromOpenAPI()` API reference} */\n output?: string;\n /** @see {@link https://zimic.dev/docs/http/api/typegen#generatetypesfromopenapi `generateTypesFromOpenAPI()` API reference} */\n serviceName: string;\n /** @see {@link https://zimic.dev/docs/http/api/typegen#generatetypesfromopenapi `generateTypesFromOpenAPI()` API reference} */\n includeComments: boolean;\n /** @see {@link https://zimic.dev/docs/http/api/typegen#generatetypesfromopenapi `generateTypesFromOpenAPI()` API reference} */\n prune: boolean;\n /** @see {@link https://zimic.dev/docs/http/api/typegen#generatetypesfromopenapi `generateTypesFromOpenAPI()` API reference} */\n filters?: string[];\n /** @see {@link https://zimic.dev/docs/http/api/typegen#generatetypesfromopenapi `generateTypesFromOpenAPI()` API reference} */\n filterFile?: string;\n}\n\n/** @see {@link https://zimic.dev/docs/http/api/typegen#generatetypesfromopenapi `generateTypesFromOpenAPI()` API reference} */\nasync function generateTypesFromOpenAPI({\n input: inputFilePathOrURL,\n output: outputFilePath,\n serviceName,\n includeComments,\n prune,\n filters: filtersFromArguments = [],\n filterFile,\n}: OpenAPITypegenOptions) {\n const filtersFromFile = filterFile ? await readPathFiltersFromFile(path.resolve(filterFile)) : [];\n const filters = ignoreEmptyFilters([...filtersFromFile, ...filtersFromArguments]);\n\n const rawNodes = await importTypesFromOpenAPI(inputFilePathOrURL);\n const context = createTypeTransformationContext(serviceName, filters);\n const nodes = normalizeRawNodes(rawNodes, context, { prune });\n\n const importDeclarations = createImportDeclarations(context);\n\n for (const declaration of importDeclarations) {\n nodes.unshift(declaration);\n }\n\n const typegenResult = await convertTypesToString(nodes, { includeComments });\n const formattedTypegenResult = formatTypegenResultToOutput(typegenResult);\n\n const shouldWriteToStandardOutput = outputFilePath === undefined;\n\n if (shouldWriteToStandardOutput) {\n await writeTypegenResultToStandardOutput(formattedTypegenResult);\n } else {\n await writeTypegenResultToFile(path.resolve(outputFilePath), formattedTypegenResult);\n }\n}\n\nexport default generateTypesFromOpenAPI;\n"]}
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  'use strict';
3
3
 
4
- var chunkBWLSBTQ7_js = require('./chunk-BWLSBTQ7.js');
4
+ var chunkCQ5T5GPN_js = require('./chunk-CQ5T5GPN.js');
5
5
  var color = require('picocolors');
6
6
  var yargs = require('yargs');
7
7
  var helpers = require('yargs/helpers');
@@ -12,7 +12,7 @@ var color__default = /*#__PURE__*/_interopDefault(color);
12
12
  var yargs__default = /*#__PURE__*/_interopDefault(yargs);
13
13
 
14
14
  // package.json
15
- var version = "1.3.4-canary.0";
15
+ var version = "1.3.4-canary.1";
16
16
 
17
17
  // src/utils/time.ts
18
18
  async function usingElapsedTime(callback) {
@@ -83,7 +83,7 @@ async function runCLI() {
83
83
  }),
84
84
  async (cliArguments) => {
85
85
  const executionSummary = await usingElapsedTime(async () => {
86
- await chunkBWLSBTQ7_js.generate_default({
86
+ await chunkCQ5T5GPN_js.generate_default({
87
87
  input: cliArguments.input,
88
88
  output: cliArguments.output,
89
89
  serviceName: cliArguments.serviceName,
@@ -98,7 +98,7 @@ async function runCLI() {
98
98
  `(${formatElapsedTime(executionSummary.elapsedTime)})`
99
99
  )}`;
100
100
  const hasWrittenToStdout = outputFilePath === void 0;
101
- chunkBWLSBTQ7_js.logger[hasWrittenToStdout ? "warn" : "info"](successMessage);
101
+ chunkCQ5T5GPN_js.logger[hasWrittenToStdout ? "warn" : "info"](successMessage);
102
102
  }
103
103
  )
104
104
  ).parse();
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../package.json","../src/utils/time.ts","../src/cli/cli.ts","../src/cli/index.ts"],"names":["yargs","hideBin","generate_default","color","logger"],"mappings":"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","file":"cli.js","sourcesContent":["{\n \"name\": \"@zimic/http\",\n \"description\": \"Next-gen TypeScript-first HTTP utilities\",\n \"keywords\": [\n \"zimic\",\n \"typescript\",\n \"types\",\n \"typegen\",\n \"validation\",\n \"inference\",\n \"http\",\n \"api\",\n \"static\"\n ],\n \"version\": \"1.3.4-canary.0\",\n \"homepage\": \"https://zimic.dev/docs/http\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/zimicjs/zimic.git\",\n \"directory\": \"packages/zimic-http\"\n },\n \"author\": {\n \"name\": \"Diego Aquino\",\n \"url\": \"https://github.com/diego-aquino\"\n },\n \"funding\": {\n \"type\": \"github\",\n \"url\": \"https://github.com/sponsors/zimicjs\"\n },\n \"private\": false,\n \"publishConfig\": {\n \"access\": \"public\",\n \"provenance\": true\n },\n \"engines\": {\n \"node\": \">=20.0.0\"\n },\n \"license\": \"MIT\",\n \"files\": [\n \"package.json\",\n \"README.md\",\n \"LICENSE.md\",\n \"src\",\n \"!src/**/tests\",\n \"!src/**/__tests__\",\n \"!src/**/*.test.ts\",\n \"dist\",\n \"index.d.ts\",\n \"typegen.d.ts\"\n ],\n \"sideEffects\": false,\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.mjs\",\n \"types\": \"index.d.ts\",\n \"bin\": {\n \"zimic-http\": \"./dist/cli.js\"\n },\n \"exports\": {\n \".\": {\n \"types\": \"./index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\",\n \"default\": \"./dist/index.js\"\n },\n \"./typegen\": {\n \"types\": \"./typegen.d.ts\",\n \"import\": \"./dist/typegen.mjs\",\n \"require\": \"./dist/typegen.js\",\n \"default\": \"./dist/typegen.js\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"cli\": \"node --enable-source-maps ./dist/cli.js\",\n \"build\": \"tsup\",\n \"lint\": \"eslint --cache --no-error-on-unmatched-pattern --no-warn-ignored --fix\",\n \"lint:turbo\": \"pnpm lint . --max-warnings 0\",\n \"style\": \"prettier --log-level warn --ignore-unknown --no-error-on-unmatched-pattern --cache\",\n \"style:check\": \"pnpm style --check\",\n \"style:format\": \"pnpm style --write\",\n \"test\": \"dotenv -v NODE_ENV=test -v FORCE_COLOR=1 -- vitest\",\n \"test:turbo\": \"dotenv -v CI=true -- pnpm run test run --coverage\",\n \"types:check\": \"tsc --noEmit\",\n \"typegen:fixtures\": \"tsx ./scripts/typegen/generateFixtureTypes.ts\",\n \"deps:setup-playwright\": \"playwright install chromium\",\n \"deps:setup\": \"pnpm deps:setup-playwright\"\n },\n \"dependencies\": {\n \"openapi-typescript\": \"7.10.1\",\n \"picocolors\": \"^1.1.1\",\n \"yargs\": \"18.0.0\"\n },\n \"devDependencies\": {\n \"@types/js-yaml\": \"^4.0.9\",\n \"@types/node\": \"^24.10.0\",\n \"@types/yargs\": \"^17.0.34\",\n \"@vitest/browser\": \"^4.0.6\",\n \"@vitest/browser-playwright\": \"^4.0.6\",\n \"@vitest/coverage-istanbul\": \"^4.0.6\",\n \"@zimic/eslint-config-node\": \"workspace:*\",\n \"@zimic/interceptor\": \"workspace:*\",\n \"@zimic/lint-staged-config\": \"workspace:*\",\n \"@zimic/tsconfig\": \"workspace:*\",\n \"@zimic/utils\": \"workspace:*\",\n \"dotenv-cli\": \"^11.0.0\",\n \"eslint\": \"^9.39.1\",\n \"execa\": \"9.6.0\",\n \"js-yaml\": \"^4.1.1\",\n \"playwright\": \"^1.56.1\",\n \"prettier\": \"^3.6.2\",\n \"tsup\": \"^8.4.0\",\n \"tsx\": \"^4.20.6\",\n \"typescript\": \"^5.9.3\",\n \"vitest\": \"^4.0.6\"\n },\n \"peerDependencies\": {\n \"typescript\": \">=5.0.0\"\n },\n \"peerDependenciesMeta\": {\n \"typescript\": {\n \"optional\": true\n }\n }\n}\n","import { PossiblePromise } from '@zimic/utils/types';\n\nexport async function usingElapsedTime<ReturnType>(callback: () => PossiblePromise<ReturnType>) {\n const startTimeInMilliseconds = performance.now();\n\n const result = await callback();\n\n const endTimeInMilliseconds = performance.now();\n const elapsedTimeInMilliseconds = endTimeInMilliseconds - startTimeInMilliseconds;\n\n return {\n startTime: startTimeInMilliseconds,\n elapsedTime: elapsedTimeInMilliseconds,\n endTime: endTimeInMilliseconds,\n result,\n };\n}\n\nexport function formatElapsedTime(elapsedTimeInMilliseconds: number) {\n if (elapsedTimeInMilliseconds < 1000) {\n return `${elapsedTimeInMilliseconds.toFixed(0)}ms`;\n } else {\n return `${(elapsedTimeInMilliseconds / 1000).toFixed(2)}s`;\n }\n}\n","import color from 'picocolors';\nimport yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\n\nimport { version } from '@@/package.json';\n\nimport { generateTypesFromOpenAPI } from '@/typegen';\nimport { logger } from '@/utils/logging';\nimport { usingElapsedTime, formatElapsedTime } from '@/utils/time';\n\nasync function runCLI() {\n await yargs(hideBin(process.argv))\n .scriptName('zimic-http')\n .version(version)\n .showHelpOnFail(false)\n .strict()\n\n .command('typegen', 'Generate types from schema sources.', (yargs) =>\n yargs.demandCommand().command(\n 'openapi <input>',\n 'Generate types from an OpenAPI schema.',\n (yargs) =>\n yargs\n .positional('input', {\n type: 'string',\n description:\n 'The path to a local OpenAPI schema file or an URL to fetch it. ' +\n 'Version 3 is supported as YAML or JSON.',\n demandOption: true,\n })\n .option('output', {\n type: 'string',\n description:\n 'The path to write the generated types to. If not provided, the types will be written to stdout.',\n alias: 'o',\n })\n .option('service-name', {\n type: 'string',\n description: 'The name of the service to use in the generated types.',\n alias: 's',\n demandOption: true,\n })\n .option('comments', {\n type: 'boolean',\n description: 'Whether to include comments in the generated types.',\n alias: 'c',\n default: true,\n })\n .option('prune', {\n type: 'boolean',\n description:\n 'Whether to remove unused operations and components from the generated types. This is useful for ' +\n 'reducing the size of the output file.',\n alias: 'p',\n default: true,\n })\n .option('filter', {\n type: 'string',\n array: true,\n description: [\n 'One or more expressions filtering which endpoints to include. Filters must follow the format `<method> ' +\n '<path>`, where:',\n '- `<method>`: one HTTP method, a list of HTTP methods separated by commas, or `*` to match any HTTP ' +\n 'method;',\n '- `<path>`: a literal path or a glob. `*` matches zero or more characters in a segment (except `/`), ' +\n 'while `**` matches zero or more characters across segments (may include `/`). For example, ' +\n '`GET /users` matches a single method and path, while `* /users` matches any method to the `/users` ' +\n 'path; `GET /users*` matches any `GET` request whose path starts with `/users`, and `GET /users/**/*` ' +\n 'matches any `GET` request to any sub-path of `/users`.',\n\n 'Negative filters can be created by prefixing the expression with `!`. For example, `!GET /users` will ' +\n 'exclude paths matching `GET /users`.',\n ].join('\\n'),\n alias: 'f',\n })\n .option('filter-file', {\n type: 'string',\n description:\n 'A path to a file containing filter expressions. One expression is expected per line and the format ' +\n 'is the same as used in a `--filter` option. Comments are prefixed with `#`. A filter file can be ' +\n 'used alongside additional `--filter` expressions.',\n alias: 'F',\n }),\n async (cliArguments) => {\n const executionSummary = await usingElapsedTime(async () => {\n await generateTypesFromOpenAPI({\n input: cliArguments.input,\n output: cliArguments.output,\n serviceName: cliArguments.serviceName,\n includeComments: cliArguments.comments,\n prune: cliArguments.prune,\n filters: cliArguments.filter,\n filterFile: cliArguments.filterFile,\n });\n });\n\n const outputFilePath = cliArguments.output;\n\n const successMessage =\n `${color.green(color.bold('✔'))} Generated ` +\n `${outputFilePath ? color.green(outputFilePath) : `to ${color.yellow('stdout')}`} ${color.dim(\n `(${formatElapsedTime(executionSummary.elapsedTime)})`,\n )}`;\n\n const hasWrittenToStdout = outputFilePath === undefined;\n logger[hasWrittenToStdout ? 'warn' : 'info'](successMessage);\n },\n ),\n )\n\n .parse();\n}\n\nexport default runCLI;\n","#!/usr/bin/env node\nimport runCLI from './cli';\n\nvoid runCLI();\n"]}
1
+ {"version":3,"sources":["../package.json","../src/utils/time.ts","../src/cli/cli.ts","../src/cli/index.ts"],"names":["yargs","hideBin","generate_default","color","logger"],"mappings":"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","file":"cli.js","sourcesContent":["{\n \"name\": \"@zimic/http\",\n \"description\": \"Next-gen TypeScript-first HTTP utilities\",\n \"keywords\": [\n \"zimic\",\n \"typescript\",\n \"types\",\n \"typegen\",\n \"validation\",\n \"inference\",\n \"http\",\n \"api\",\n \"static\"\n ],\n \"version\": \"1.3.4-canary.1\",\n \"homepage\": \"https://zimic.dev/docs/http\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/zimicjs/zimic.git\",\n \"directory\": \"packages/zimic-http\"\n },\n \"author\": {\n \"name\": \"Diego Aquino\",\n \"url\": \"https://github.com/diego-aquino\"\n },\n \"funding\": {\n \"type\": \"github\",\n \"url\": \"https://github.com/sponsors/zimicjs\"\n },\n \"private\": false,\n \"publishConfig\": {\n \"access\": \"public\",\n \"provenance\": true\n },\n \"engines\": {\n \"node\": \">=20.0.0\"\n },\n \"license\": \"MIT\",\n \"files\": [\n \"package.json\",\n \"README.md\",\n \"LICENSE.md\",\n \"src\",\n \"!src/**/tests\",\n \"!src/**/__tests__\",\n \"!src/**/*.test.ts\",\n \"dist\",\n \"index.d.ts\",\n \"typegen.d.ts\"\n ],\n \"sideEffects\": false,\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.mjs\",\n \"types\": \"index.d.ts\",\n \"bin\": {\n \"zimic-http\": \"./dist/cli.js\"\n },\n \"exports\": {\n \".\": {\n \"types\": \"./index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\",\n \"default\": \"./dist/index.js\"\n },\n \"./typegen\": {\n \"types\": \"./typegen.d.ts\",\n \"import\": \"./dist/typegen.mjs\",\n \"require\": \"./dist/typegen.js\",\n \"default\": \"./dist/typegen.js\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"cli\": \"node --enable-source-maps ./dist/cli.js\",\n \"build\": \"tsup\",\n \"lint\": \"eslint --cache --no-error-on-unmatched-pattern --no-warn-ignored --fix\",\n \"lint:turbo\": \"pnpm lint . --max-warnings 0\",\n \"style\": \"prettier --log-level warn --ignore-unknown --no-error-on-unmatched-pattern --cache\",\n \"style:check\": \"pnpm style --check\",\n \"style:format\": \"pnpm style --write\",\n \"test\": \"dotenv -v NODE_ENV=test -v FORCE_COLOR=1 -- vitest\",\n \"test:turbo\": \"dotenv -v CI=true -- pnpm run test run --coverage\",\n \"types:check\": \"tsc --noEmit\",\n \"typegen:fixtures\": \"tsx ./scripts/typegen/generateFixtureTypes.ts\",\n \"deps:setup-playwright\": \"playwright install chromium\",\n \"deps:setup\": \"pnpm deps:setup-playwright\"\n },\n \"dependencies\": {\n \"openapi-typescript\": \"7.10.1\",\n \"picocolors\": \"^1.1.1\",\n \"yargs\": \"18.0.0\"\n },\n \"devDependencies\": {\n \"@types/js-yaml\": \"^4.0.9\",\n \"@types/node\": \"^24.10.1\",\n \"@types/yargs\": \"^17.0.35\",\n \"@vitest/browser\": \"^4.0.6\",\n \"@vitest/browser-playwright\": \"^4.0.6\",\n \"@vitest/coverage-istanbul\": \"^4.0.6\",\n \"@zimic/eslint-config-node\": \"workspace:*\",\n \"@zimic/interceptor\": \"workspace:*\",\n \"@zimic/lint-staged-config\": \"workspace:*\",\n \"@zimic/tsconfig\": \"workspace:*\",\n \"@zimic/utils\": \"workspace:*\",\n \"dotenv-cli\": \"^11.0.0\",\n \"eslint\": \"^9.39.1\",\n \"execa\": \"9.6.0\",\n \"js-yaml\": \"^4.1.1\",\n \"playwright\": \"^1.56.1\",\n \"prettier\": \"^3.6.2\",\n \"tsup\": \"^8.5.1\",\n \"tsx\": \"^4.20.6\",\n \"typescript\": \"^5.9.3\",\n \"vitest\": \"^4.0.6\"\n },\n \"peerDependencies\": {\n \"typescript\": \">=5.0.0\"\n },\n \"peerDependenciesMeta\": {\n \"typescript\": {\n \"optional\": true\n }\n }\n}\n","import { PossiblePromise } from '@zimic/utils/types';\n\nexport async function usingElapsedTime<ReturnType>(callback: () => PossiblePromise<ReturnType>) {\n const startTimeInMilliseconds = performance.now();\n\n const result = await callback();\n\n const endTimeInMilliseconds = performance.now();\n const elapsedTimeInMilliseconds = endTimeInMilliseconds - startTimeInMilliseconds;\n\n return {\n startTime: startTimeInMilliseconds,\n elapsedTime: elapsedTimeInMilliseconds,\n endTime: endTimeInMilliseconds,\n result,\n };\n}\n\nexport function formatElapsedTime(elapsedTimeInMilliseconds: number) {\n if (elapsedTimeInMilliseconds < 1000) {\n return `${elapsedTimeInMilliseconds.toFixed(0)}ms`;\n } else {\n return `${(elapsedTimeInMilliseconds / 1000).toFixed(2)}s`;\n }\n}\n","import color from 'picocolors';\nimport yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\n\nimport { version } from '@@/package.json';\n\nimport { generateTypesFromOpenAPI } from '@/typegen';\nimport { logger } from '@/utils/logging';\nimport { usingElapsedTime, formatElapsedTime } from '@/utils/time';\n\nasync function runCLI() {\n await yargs(hideBin(process.argv))\n .scriptName('zimic-http')\n .version(version)\n .showHelpOnFail(false)\n .strict()\n\n .command('typegen', 'Generate types from schema sources.', (yargs) =>\n yargs.demandCommand().command(\n 'openapi <input>',\n 'Generate types from an OpenAPI schema.',\n (yargs) =>\n yargs\n .positional('input', {\n type: 'string',\n description:\n 'The path to a local OpenAPI schema file or an URL to fetch it. ' +\n 'Version 3 is supported as YAML or JSON.',\n demandOption: true,\n })\n .option('output', {\n type: 'string',\n description:\n 'The path to write the generated types to. If not provided, the types will be written to stdout.',\n alias: 'o',\n })\n .option('service-name', {\n type: 'string',\n description: 'The name of the service to use in the generated types.',\n alias: 's',\n demandOption: true,\n })\n .option('comments', {\n type: 'boolean',\n description: 'Whether to include comments in the generated types.',\n alias: 'c',\n default: true,\n })\n .option('prune', {\n type: 'boolean',\n description:\n 'Whether to remove unused operations and components from the generated types. This is useful for ' +\n 'reducing the size of the output file.',\n alias: 'p',\n default: true,\n })\n .option('filter', {\n type: 'string',\n array: true,\n description: [\n 'One or more expressions filtering which endpoints to include. Filters must follow the format `<method> ' +\n '<path>`, where:',\n '- `<method>`: one HTTP method, a list of HTTP methods separated by commas, or `*` to match any HTTP ' +\n 'method;',\n '- `<path>`: a literal path or a glob. `*` matches zero or more characters in a segment (except `/`), ' +\n 'while `**` matches zero or more characters across segments (may include `/`). For example, ' +\n '`GET /users` matches a single method and path, while `* /users` matches any method to the `/users` ' +\n 'path; `GET /users*` matches any `GET` request whose path starts with `/users`, and `GET /users/**/*` ' +\n 'matches any `GET` request to any sub-path of `/users`.',\n\n 'Negative filters can be created by prefixing the expression with `!`. For example, `!GET /users` will ' +\n 'exclude paths matching `GET /users`.',\n ].join('\\n'),\n alias: 'f',\n })\n .option('filter-file', {\n type: 'string',\n description:\n 'A path to a file containing filter expressions. One expression is expected per line and the format ' +\n 'is the same as used in a `--filter` option. Comments are prefixed with `#`. A filter file can be ' +\n 'used alongside additional `--filter` expressions.',\n alias: 'F',\n }),\n async (cliArguments) => {\n const executionSummary = await usingElapsedTime(async () => {\n await generateTypesFromOpenAPI({\n input: cliArguments.input,\n output: cliArguments.output,\n serviceName: cliArguments.serviceName,\n includeComments: cliArguments.comments,\n prune: cliArguments.prune,\n filters: cliArguments.filter,\n filterFile: cliArguments.filterFile,\n });\n });\n\n const outputFilePath = cliArguments.output;\n\n const successMessage =\n `${color.green(color.bold('✔'))} Generated ` +\n `${outputFilePath ? color.green(outputFilePath) : `to ${color.yellow('stdout')}`} ${color.dim(\n `(${formatElapsedTime(executionSummary.elapsedTime)})`,\n )}`;\n\n const hasWrittenToStdout = outputFilePath === undefined;\n logger[hasWrittenToStdout ? 'warn' : 'info'](successMessage);\n },\n ),\n )\n\n .parse();\n}\n\nexport default runCLI;\n","#!/usr/bin/env node\nimport runCLI from './cli';\n\nvoid runCLI();\n"]}
package/dist/cli.mjs CHANGED
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
- import { logger, generate_default } from './chunk-B3PRDVUG.mjs';
2
+ import { logger, generate_default } from './chunk-WHFERPU3.mjs';
3
3
  import color from 'picocolors';
4
4
  import yargs from 'yargs';
5
5
  import { hideBin } from 'yargs/helpers';
6
6
 
7
7
  // package.json
8
- var version = "1.3.4-canary.0";
8
+ var version = "1.3.4-canary.1";
9
9
 
10
10
  // src/utils/time.ts
11
11
  async function usingElapsedTime(callback) {
package/dist/cli.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../package.json","../src/utils/time.ts","../src/cli/cli.ts","../src/cli/index.ts"],"names":["yargs"],"mappings":"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","file":"cli.mjs","sourcesContent":["{\n \"name\": \"@zimic/http\",\n \"description\": \"Next-gen TypeScript-first HTTP utilities\",\n \"keywords\": [\n \"zimic\",\n \"typescript\",\n \"types\",\n \"typegen\",\n \"validation\",\n \"inference\",\n \"http\",\n \"api\",\n \"static\"\n ],\n \"version\": \"1.3.4-canary.0\",\n \"homepage\": \"https://zimic.dev/docs/http\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/zimicjs/zimic.git\",\n \"directory\": \"packages/zimic-http\"\n },\n \"author\": {\n \"name\": \"Diego Aquino\",\n \"url\": \"https://github.com/diego-aquino\"\n },\n \"funding\": {\n \"type\": \"github\",\n \"url\": \"https://github.com/sponsors/zimicjs\"\n },\n \"private\": false,\n \"publishConfig\": {\n \"access\": \"public\",\n \"provenance\": true\n },\n \"engines\": {\n \"node\": \">=20.0.0\"\n },\n \"license\": \"MIT\",\n \"files\": [\n \"package.json\",\n \"README.md\",\n \"LICENSE.md\",\n \"src\",\n \"!src/**/tests\",\n \"!src/**/__tests__\",\n \"!src/**/*.test.ts\",\n \"dist\",\n \"index.d.ts\",\n \"typegen.d.ts\"\n ],\n \"sideEffects\": false,\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.mjs\",\n \"types\": \"index.d.ts\",\n \"bin\": {\n \"zimic-http\": \"./dist/cli.js\"\n },\n \"exports\": {\n \".\": {\n \"types\": \"./index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\",\n \"default\": \"./dist/index.js\"\n },\n \"./typegen\": {\n \"types\": \"./typegen.d.ts\",\n \"import\": \"./dist/typegen.mjs\",\n \"require\": \"./dist/typegen.js\",\n \"default\": \"./dist/typegen.js\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"cli\": \"node --enable-source-maps ./dist/cli.js\",\n \"build\": \"tsup\",\n \"lint\": \"eslint --cache --no-error-on-unmatched-pattern --no-warn-ignored --fix\",\n \"lint:turbo\": \"pnpm lint . --max-warnings 0\",\n \"style\": \"prettier --log-level warn --ignore-unknown --no-error-on-unmatched-pattern --cache\",\n \"style:check\": \"pnpm style --check\",\n \"style:format\": \"pnpm style --write\",\n \"test\": \"dotenv -v NODE_ENV=test -v FORCE_COLOR=1 -- vitest\",\n \"test:turbo\": \"dotenv -v CI=true -- pnpm run test run --coverage\",\n \"types:check\": \"tsc --noEmit\",\n \"typegen:fixtures\": \"tsx ./scripts/typegen/generateFixtureTypes.ts\",\n \"deps:setup-playwright\": \"playwright install chromium\",\n \"deps:setup\": \"pnpm deps:setup-playwright\"\n },\n \"dependencies\": {\n \"openapi-typescript\": \"7.10.1\",\n \"picocolors\": \"^1.1.1\",\n \"yargs\": \"18.0.0\"\n },\n \"devDependencies\": {\n \"@types/js-yaml\": \"^4.0.9\",\n \"@types/node\": \"^24.10.0\",\n \"@types/yargs\": \"^17.0.34\",\n \"@vitest/browser\": \"^4.0.6\",\n \"@vitest/browser-playwright\": \"^4.0.6\",\n \"@vitest/coverage-istanbul\": \"^4.0.6\",\n \"@zimic/eslint-config-node\": \"workspace:*\",\n \"@zimic/interceptor\": \"workspace:*\",\n \"@zimic/lint-staged-config\": \"workspace:*\",\n \"@zimic/tsconfig\": \"workspace:*\",\n \"@zimic/utils\": \"workspace:*\",\n \"dotenv-cli\": \"^11.0.0\",\n \"eslint\": \"^9.39.1\",\n \"execa\": \"9.6.0\",\n \"js-yaml\": \"^4.1.1\",\n \"playwright\": \"^1.56.1\",\n \"prettier\": \"^3.6.2\",\n \"tsup\": \"^8.4.0\",\n \"tsx\": \"^4.20.6\",\n \"typescript\": \"^5.9.3\",\n \"vitest\": \"^4.0.6\"\n },\n \"peerDependencies\": {\n \"typescript\": \">=5.0.0\"\n },\n \"peerDependenciesMeta\": {\n \"typescript\": {\n \"optional\": true\n }\n }\n}\n","import { PossiblePromise } from '@zimic/utils/types';\n\nexport async function usingElapsedTime<ReturnType>(callback: () => PossiblePromise<ReturnType>) {\n const startTimeInMilliseconds = performance.now();\n\n const result = await callback();\n\n const endTimeInMilliseconds = performance.now();\n const elapsedTimeInMilliseconds = endTimeInMilliseconds - startTimeInMilliseconds;\n\n return {\n startTime: startTimeInMilliseconds,\n elapsedTime: elapsedTimeInMilliseconds,\n endTime: endTimeInMilliseconds,\n result,\n };\n}\n\nexport function formatElapsedTime(elapsedTimeInMilliseconds: number) {\n if (elapsedTimeInMilliseconds < 1000) {\n return `${elapsedTimeInMilliseconds.toFixed(0)}ms`;\n } else {\n return `${(elapsedTimeInMilliseconds / 1000).toFixed(2)}s`;\n }\n}\n","import color from 'picocolors';\nimport yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\n\nimport { version } from '@@/package.json';\n\nimport { generateTypesFromOpenAPI } from '@/typegen';\nimport { logger } from '@/utils/logging';\nimport { usingElapsedTime, formatElapsedTime } from '@/utils/time';\n\nasync function runCLI() {\n await yargs(hideBin(process.argv))\n .scriptName('zimic-http')\n .version(version)\n .showHelpOnFail(false)\n .strict()\n\n .command('typegen', 'Generate types from schema sources.', (yargs) =>\n yargs.demandCommand().command(\n 'openapi <input>',\n 'Generate types from an OpenAPI schema.',\n (yargs) =>\n yargs\n .positional('input', {\n type: 'string',\n description:\n 'The path to a local OpenAPI schema file or an URL to fetch it. ' +\n 'Version 3 is supported as YAML or JSON.',\n demandOption: true,\n })\n .option('output', {\n type: 'string',\n description:\n 'The path to write the generated types to. If not provided, the types will be written to stdout.',\n alias: 'o',\n })\n .option('service-name', {\n type: 'string',\n description: 'The name of the service to use in the generated types.',\n alias: 's',\n demandOption: true,\n })\n .option('comments', {\n type: 'boolean',\n description: 'Whether to include comments in the generated types.',\n alias: 'c',\n default: true,\n })\n .option('prune', {\n type: 'boolean',\n description:\n 'Whether to remove unused operations and components from the generated types. This is useful for ' +\n 'reducing the size of the output file.',\n alias: 'p',\n default: true,\n })\n .option('filter', {\n type: 'string',\n array: true,\n description: [\n 'One or more expressions filtering which endpoints to include. Filters must follow the format `<method> ' +\n '<path>`, where:',\n '- `<method>`: one HTTP method, a list of HTTP methods separated by commas, or `*` to match any HTTP ' +\n 'method;',\n '- `<path>`: a literal path or a glob. `*` matches zero or more characters in a segment (except `/`), ' +\n 'while `**` matches zero or more characters across segments (may include `/`). For example, ' +\n '`GET /users` matches a single method and path, while `* /users` matches any method to the `/users` ' +\n 'path; `GET /users*` matches any `GET` request whose path starts with `/users`, and `GET /users/**/*` ' +\n 'matches any `GET` request to any sub-path of `/users`.',\n\n 'Negative filters can be created by prefixing the expression with `!`. For example, `!GET /users` will ' +\n 'exclude paths matching `GET /users`.',\n ].join('\\n'),\n alias: 'f',\n })\n .option('filter-file', {\n type: 'string',\n description:\n 'A path to a file containing filter expressions. One expression is expected per line and the format ' +\n 'is the same as used in a `--filter` option. Comments are prefixed with `#`. A filter file can be ' +\n 'used alongside additional `--filter` expressions.',\n alias: 'F',\n }),\n async (cliArguments) => {\n const executionSummary = await usingElapsedTime(async () => {\n await generateTypesFromOpenAPI({\n input: cliArguments.input,\n output: cliArguments.output,\n serviceName: cliArguments.serviceName,\n includeComments: cliArguments.comments,\n prune: cliArguments.prune,\n filters: cliArguments.filter,\n filterFile: cliArguments.filterFile,\n });\n });\n\n const outputFilePath = cliArguments.output;\n\n const successMessage =\n `${color.green(color.bold('✔'))} Generated ` +\n `${outputFilePath ? color.green(outputFilePath) : `to ${color.yellow('stdout')}`} ${color.dim(\n `(${formatElapsedTime(executionSummary.elapsedTime)})`,\n )}`;\n\n const hasWrittenToStdout = outputFilePath === undefined;\n logger[hasWrittenToStdout ? 'warn' : 'info'](successMessage);\n },\n ),\n )\n\n .parse();\n}\n\nexport default runCLI;\n","#!/usr/bin/env node\nimport runCLI from './cli';\n\nvoid runCLI();\n"]}
1
+ {"version":3,"sources":["../package.json","../src/utils/time.ts","../src/cli/cli.ts","../src/cli/index.ts"],"names":["yargs"],"mappings":";;;;;;;AAcE,IAAA,OAAA,GAAW,gBAAA;;;ACZb,eAAsB,iBAA6B,QAAA,EAA6C;AAC9F,EAAA,MAAM,uBAAA,GAA0B,YAAY,GAAA,EAAI;AAEhD,EAAA,MAAM,MAAA,GAAS,MAAM,QAAA,EAAS;AAE9B,EAAA,MAAM,qBAAA,GAAwB,YAAY,GAAA,EAAI;AAC9C,EAAA,MAAM,4BAA4B,qBAAA,GAAwB,uBAAA;AAE1D,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,uBAAA;AAAA,IACX,WAAA,EAAa,yBAAA;AAAA,IACb,OAAA,EAAS,qBAAA;AAAA,IACT;AAAA,GACF;AACF;AAEO,SAAS,kBAAkB,yBAAA,EAAmC;AACnE,EAAA,IAAI,4BAA4B,GAAA,EAAM;AACpC,IAAA,OAAO,CAAA,EAAG,yBAAA,CAA0B,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,CAAA;AAAA,EAChD,CAAA,MAAO;AACL,IAAA,OAAO,CAAA,EAAA,CAAI,yBAAA,GAA4B,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,EACzD;AACF;;;ACdA,eAAe,MAAA,GAAS;AACtB,EAAA,MAAM,MAAM,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAC,EAC9B,UAAA,CAAW,YAAY,CAAA,CACvB,OAAA,CAAQ,OAAO,CAAA,CACf,cAAA,CAAe,KAAK,CAAA,CACpB,QAAO,CAEP,OAAA;AAAA,IAAQ,SAAA;AAAA,IAAW,qCAAA;AAAA,IAAuC,CAACA,MAAAA,KAC1DA,MAAAA,CAAM,aAAA,EAAc,CAAE,OAAA;AAAA,MACpB,iBAAA;AAAA,MACA,wCAAA;AAAA,MACA,CAACA,MAAAA,KACCA,MAAAA,CACG,UAAA,CAAW,OAAA,EAAS;AAAA,QACnB,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EACE,wGAAA;AAAA,QAEF,YAAA,EAAc;AAAA,OACf,CAAA,CACA,MAAA,CAAO,QAAA,EAAU;AAAA,QAChB,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EACE,iGAAA;AAAA,QACF,KAAA,EAAO;AAAA,OACR,CAAA,CACA,MAAA,CAAO,cAAA,EAAgB;AAAA,QACtB,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa,wDAAA;AAAA,QACb,KAAA,EAAO,GAAA;AAAA,QACP,YAAA,EAAc;AAAA,OACf,CAAA,CACA,MAAA,CAAO,UAAA,EAAY;AAAA,QAClB,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,qDAAA;AAAA,QACb,KAAA,EAAO,GAAA;AAAA,QACP,OAAA,EAAS;AAAA,OACV,CAAA,CACA,MAAA,CAAO,OAAA,EAAS;AAAA,QACf,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EACE,uIAAA;AAAA,QAEF,KAAA,EAAO,GAAA;AAAA,QACP,OAAA,EAAS;AAAA,OACV,CAAA,CACA,MAAA,CAAO,QAAA,EAAU;AAAA,QAChB,IAAA,EAAM,QAAA;AAAA,QACN,KAAA,EAAO,IAAA;AAAA,QACP,WAAA,EAAa;AAAA,UACX,wHAAA;AAAA,UAEA,6GAAA;AAAA,UAEA,gcAAA;AAAA,UAMA;AAAA,SAEF,CAAE,KAAK,IAAI,CAAA;AAAA,QACX,KAAA,EAAO;AAAA,OACR,CAAA,CACA,MAAA,CAAO,aAAA,EAAe;AAAA,QACrB,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EACE,uPAAA;AAAA,QAGF,KAAA,EAAO;AAAA,OACR,CAAA;AAAA,MACL,OAAO,YAAA,KAAiB;AACtB,QAAA,MAAM,gBAAA,GAAmB,MAAM,gBAAA,CAAiB,YAAY;AAC1D,UAAA,MAAM,gBAAA,CAAyB;AAAA,YAC7B,OAAO,YAAA,CAAa,KAAA;AAAA,YACpB,QAAQ,YAAA,CAAa,MAAA;AAAA,YACrB,aAAa,YAAA,CAAa,WAAA;AAAA,YAC1B,iBAAiB,YAAA,CAAa,QAAA;AAAA,YAC9B,OAAO,YAAA,CAAa,KAAA;AAAA,YACpB,SAAS,YAAA,CAAa,MAAA;AAAA,YACtB,YAAY,YAAA,CAAa;AAAA,WAC1B,CAAA;AAAA,QACH,CAAC,CAAA;AAED,QAAA,MAAM,iBAAiB,YAAA,CAAa,MAAA;AAEpC,QAAA,MAAM,cAAA,GACJ,GAAG,KAAA,CAAM,KAAA,CAAM,MAAM,IAAA,CAAK,QAAG,CAAC,CAAC,CAAA,WAAA,EAC5B,cAAA,GAAiB,MAAM,KAAA,CAAM,cAAc,IAAI,CAAA,GAAA,EAAM,KAAA,CAAM,OAAO,QAAQ,CAAC,CAAA,CAAE,CAAA,CAAA,EAAI,KAAA,CAAM,GAAA;AAAA,UACxF,CAAA,CAAA,EAAI,iBAAA,CAAkB,gBAAA,CAAiB,WAAW,CAAC,CAAA,CAAA;AAAA,SACpD,CAAA,CAAA;AAEH,QAAA,MAAM,qBAAqB,cAAA,KAAmB,MAAA;AAC9C,QAAA,MAAA,CAAO,kBAAA,GAAqB,MAAA,GAAS,MAAM,CAAA,CAAE,cAAc,CAAA;AAAA,MAC7D;AAAA;AACF,IAGD,KAAA,EAAM;AACX;AAEA,IAAO,WAAA,GAAQ,MAAA;;;AC9Gf,KAAK,WAAA,EAAO","file":"cli.mjs","sourcesContent":["{\n \"name\": \"@zimic/http\",\n \"description\": \"Next-gen TypeScript-first HTTP utilities\",\n \"keywords\": [\n \"zimic\",\n \"typescript\",\n \"types\",\n \"typegen\",\n \"validation\",\n \"inference\",\n \"http\",\n \"api\",\n \"static\"\n ],\n \"version\": \"1.3.4-canary.1\",\n \"homepage\": \"https://zimic.dev/docs/http\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/zimicjs/zimic.git\",\n \"directory\": \"packages/zimic-http\"\n },\n \"author\": {\n \"name\": \"Diego Aquino\",\n \"url\": \"https://github.com/diego-aquino\"\n },\n \"funding\": {\n \"type\": \"github\",\n \"url\": \"https://github.com/sponsors/zimicjs\"\n },\n \"private\": false,\n \"publishConfig\": {\n \"access\": \"public\",\n \"provenance\": true\n },\n \"engines\": {\n \"node\": \">=20.0.0\"\n },\n \"license\": \"MIT\",\n \"files\": [\n \"package.json\",\n \"README.md\",\n \"LICENSE.md\",\n \"src\",\n \"!src/**/tests\",\n \"!src/**/__tests__\",\n \"!src/**/*.test.ts\",\n \"dist\",\n \"index.d.ts\",\n \"typegen.d.ts\"\n ],\n \"sideEffects\": false,\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.mjs\",\n \"types\": \"index.d.ts\",\n \"bin\": {\n \"zimic-http\": \"./dist/cli.js\"\n },\n \"exports\": {\n \".\": {\n \"types\": \"./index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\",\n \"default\": \"./dist/index.js\"\n },\n \"./typegen\": {\n \"types\": \"./typegen.d.ts\",\n \"import\": \"./dist/typegen.mjs\",\n \"require\": \"./dist/typegen.js\",\n \"default\": \"./dist/typegen.js\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"cli\": \"node --enable-source-maps ./dist/cli.js\",\n \"build\": \"tsup\",\n \"lint\": \"eslint --cache --no-error-on-unmatched-pattern --no-warn-ignored --fix\",\n \"lint:turbo\": \"pnpm lint . --max-warnings 0\",\n \"style\": \"prettier --log-level warn --ignore-unknown --no-error-on-unmatched-pattern --cache\",\n \"style:check\": \"pnpm style --check\",\n \"style:format\": \"pnpm style --write\",\n \"test\": \"dotenv -v NODE_ENV=test -v FORCE_COLOR=1 -- vitest\",\n \"test:turbo\": \"dotenv -v CI=true -- pnpm run test run --coverage\",\n \"types:check\": \"tsc --noEmit\",\n \"typegen:fixtures\": \"tsx ./scripts/typegen/generateFixtureTypes.ts\",\n \"deps:setup-playwright\": \"playwright install chromium\",\n \"deps:setup\": \"pnpm deps:setup-playwright\"\n },\n \"dependencies\": {\n \"openapi-typescript\": \"7.10.1\",\n \"picocolors\": \"^1.1.1\",\n \"yargs\": \"18.0.0\"\n },\n \"devDependencies\": {\n \"@types/js-yaml\": \"^4.0.9\",\n \"@types/node\": \"^24.10.1\",\n \"@types/yargs\": \"^17.0.35\",\n \"@vitest/browser\": \"^4.0.6\",\n \"@vitest/browser-playwright\": \"^4.0.6\",\n \"@vitest/coverage-istanbul\": \"^4.0.6\",\n \"@zimic/eslint-config-node\": \"workspace:*\",\n \"@zimic/interceptor\": \"workspace:*\",\n \"@zimic/lint-staged-config\": \"workspace:*\",\n \"@zimic/tsconfig\": \"workspace:*\",\n \"@zimic/utils\": \"workspace:*\",\n \"dotenv-cli\": \"^11.0.0\",\n \"eslint\": \"^9.39.1\",\n \"execa\": \"9.6.0\",\n \"js-yaml\": \"^4.1.1\",\n \"playwright\": \"^1.56.1\",\n \"prettier\": \"^3.6.2\",\n \"tsup\": \"^8.5.1\",\n \"tsx\": \"^4.20.6\",\n \"typescript\": \"^5.9.3\",\n \"vitest\": \"^4.0.6\"\n },\n \"peerDependencies\": {\n \"typescript\": \">=5.0.0\"\n },\n \"peerDependenciesMeta\": {\n \"typescript\": {\n \"optional\": true\n }\n }\n}\n","import { PossiblePromise } from '@zimic/utils/types';\n\nexport async function usingElapsedTime<ReturnType>(callback: () => PossiblePromise<ReturnType>) {\n const startTimeInMilliseconds = performance.now();\n\n const result = await callback();\n\n const endTimeInMilliseconds = performance.now();\n const elapsedTimeInMilliseconds = endTimeInMilliseconds - startTimeInMilliseconds;\n\n return {\n startTime: startTimeInMilliseconds,\n elapsedTime: elapsedTimeInMilliseconds,\n endTime: endTimeInMilliseconds,\n result,\n };\n}\n\nexport function formatElapsedTime(elapsedTimeInMilliseconds: number) {\n if (elapsedTimeInMilliseconds < 1000) {\n return `${elapsedTimeInMilliseconds.toFixed(0)}ms`;\n } else {\n return `${(elapsedTimeInMilliseconds / 1000).toFixed(2)}s`;\n }\n}\n","import color from 'picocolors';\nimport yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\n\nimport { version } from '@@/package.json';\n\nimport { generateTypesFromOpenAPI } from '@/typegen';\nimport { logger } from '@/utils/logging';\nimport { usingElapsedTime, formatElapsedTime } from '@/utils/time';\n\nasync function runCLI() {\n await yargs(hideBin(process.argv))\n .scriptName('zimic-http')\n .version(version)\n .showHelpOnFail(false)\n .strict()\n\n .command('typegen', 'Generate types from schema sources.', (yargs) =>\n yargs.demandCommand().command(\n 'openapi <input>',\n 'Generate types from an OpenAPI schema.',\n (yargs) =>\n yargs\n .positional('input', {\n type: 'string',\n description:\n 'The path to a local OpenAPI schema file or an URL to fetch it. ' +\n 'Version 3 is supported as YAML or JSON.',\n demandOption: true,\n })\n .option('output', {\n type: 'string',\n description:\n 'The path to write the generated types to. If not provided, the types will be written to stdout.',\n alias: 'o',\n })\n .option('service-name', {\n type: 'string',\n description: 'The name of the service to use in the generated types.',\n alias: 's',\n demandOption: true,\n })\n .option('comments', {\n type: 'boolean',\n description: 'Whether to include comments in the generated types.',\n alias: 'c',\n default: true,\n })\n .option('prune', {\n type: 'boolean',\n description:\n 'Whether to remove unused operations and components from the generated types. This is useful for ' +\n 'reducing the size of the output file.',\n alias: 'p',\n default: true,\n })\n .option('filter', {\n type: 'string',\n array: true,\n description: [\n 'One or more expressions filtering which endpoints to include. Filters must follow the format `<method> ' +\n '<path>`, where:',\n '- `<method>`: one HTTP method, a list of HTTP methods separated by commas, or `*` to match any HTTP ' +\n 'method;',\n '- `<path>`: a literal path or a glob. `*` matches zero or more characters in a segment (except `/`), ' +\n 'while `**` matches zero or more characters across segments (may include `/`). For example, ' +\n '`GET /users` matches a single method and path, while `* /users` matches any method to the `/users` ' +\n 'path; `GET /users*` matches any `GET` request whose path starts with `/users`, and `GET /users/**/*` ' +\n 'matches any `GET` request to any sub-path of `/users`.',\n\n 'Negative filters can be created by prefixing the expression with `!`. For example, `!GET /users` will ' +\n 'exclude paths matching `GET /users`.',\n ].join('\\n'),\n alias: 'f',\n })\n .option('filter-file', {\n type: 'string',\n description:\n 'A path to a file containing filter expressions. One expression is expected per line and the format ' +\n 'is the same as used in a `--filter` option. Comments are prefixed with `#`. A filter file can be ' +\n 'used alongside additional `--filter` expressions.',\n alias: 'F',\n }),\n async (cliArguments) => {\n const executionSummary = await usingElapsedTime(async () => {\n await generateTypesFromOpenAPI({\n input: cliArguments.input,\n output: cliArguments.output,\n serviceName: cliArguments.serviceName,\n includeComments: cliArguments.comments,\n prune: cliArguments.prune,\n filters: cliArguments.filter,\n filterFile: cliArguments.filterFile,\n });\n });\n\n const outputFilePath = cliArguments.output;\n\n const successMessage =\n `${color.green(color.bold('✔'))} Generated ` +\n `${outputFilePath ? color.green(outputFilePath) : `to ${color.yellow('stdout')}`} ${color.dim(\n `(${formatElapsedTime(executionSummary.elapsedTime)})`,\n )}`;\n\n const hasWrittenToStdout = outputFilePath === undefined;\n logger[hasWrittenToStdout ? 'warn' : 'info'](successMessage);\n },\n ),\n )\n\n .parse();\n}\n\nexport default runCLI;\n","#!/usr/bin/env node\nimport runCLI from './cli';\n\nvoid runCLI();\n"]}