{"version":3,"file":"index.cjs","sources":["../src/config-type.ts","../src/content-type.ts","../src/method.ts","../src/common-helpers.ts","../src/buffer-schema.ts","../src/date-in-schema.ts","../src/date-out-schema.ts","../src/errors.ts","../src/form-schema.ts","../src/upload-schema.ts","../src/raw-schema.ts","../src/deep-checks.ts","../src/result-helpers.ts","../src/last-resort.ts","../src/middleware.ts","../src/routable.ts","../src/endpoint.ts","../src/io-schema.ts","../src/api-response.ts","../src/result-handler.ts","../src/endpoints-factory.ts","../src/logger-helpers.ts","../src/builtin-logger.ts","../src/depends-on-method.ts","../src/serve-static.ts","../src/peer-helpers.ts","../src/json-schema-helpers.ts","../src/diagnostics.ts","../src/routing-walker.ts","../src/routing.ts","../src/graceful-helpers.ts","../src/graceful-shutdown.ts","../src/server-helpers.ts","../src/startup-logo.ts","../src/server.ts","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/nodes/identity.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/visit.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/doc/directives.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/doc/anchors.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/doc/applyReviver.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/nodes/toJS.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/nodes/Node.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/nodes/Alias.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/nodes/Scalar.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/doc/createNode.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/nodes/Collection.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/stringify/stringifyComment.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/stringify/foldFlowLines.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/stringify/stringifyString.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/stringify/stringify.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/stringify/stringifyPair.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/log.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/nodes/Pair.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/stringify/stringifyCollection.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/nodes/YAMLMap.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/common/map.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/nodes/YAMLSeq.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/common/seq.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/common/string.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/common/null.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/core/bool.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/stringify/stringifyNumber.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/core/float.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/core/int.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/core/schema.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/json/schema.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/yaml-1.1/float.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/yaml-1.1/int.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/yaml-1.1/set.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/tags.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/Schema.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/stringify/stringifyDocument.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/doc/Document.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/parse/lexer.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/public-api.js","../../node_modules/.pnpm/openapi3-ts@4.5.0/node_modules/openapi3-ts/dist/oas31-BgS8RJBM.mjs","../src/logical-container.ts","../src/documentation-helpers.ts","../src/documentation.ts","../src/testing.ts","../src/typescript-api.ts","../src/integration-base.ts","../src/schema-walker.ts","../src/zts.ts","../src/integration.ts","../src/sse.ts","../src/proprietary-schemas.ts"],"sourcesContent":["import type compression from \"compression\";\nimport { IRouter, Request, RequestHandler } from \"express\";\nimport type fileUpload from \"express-fileupload\";\nimport { ServerOptions } from \"node:https\";\nimport { BuiltinLoggerConfig } from \"./builtin-logger\";\nimport { AbstractEndpoint } from \"./endpoint\";\nimport { AbstractLogger, ActualLogger } from \"./logger-helpers\";\nimport { Method } from \"./method\";\nimport { AbstractResultHandler } from \"./result-handler\";\nimport { ListenOptions } from \"node:net\";\nimport { GetLogger } from \"./server-helpers\";\n\nexport type InputSource = keyof Pick<\n  Request,\n  \"query\" | \"body\" | \"files\" | \"params\" | \"headers\"\n>;\nexport type InputSources = Record<Method, InputSource[]>;\n\ntype Headers = Record<string, string>;\ntype HeadersProvider = (params: {\n  /** @desc The default headers to be overridden. */\n  defaultHeaders: Headers;\n  request: Request;\n  endpoint: AbstractEndpoint;\n  logger: ActualLogger;\n}) => Headers | Promise<Headers>;\n\ntype ChildLoggerProvider = (params: {\n  request: Request;\n  parent: ActualLogger;\n}) => ActualLogger | Promise<ActualLogger>;\n\ntype LogAccess = (request: Request, logger: ActualLogger) => void;\n\nexport interface CommonConfig {\n  /**\n   * @desc Enables cross-origin resource sharing.\n   * @link https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS\n   * @desc You can override the default CORS headers by setting up a provider function here.\n   */\n  cors: boolean | HeadersProvider;\n  /**\n   * @desc How to respond to a request that uses a wrong method to an existing endpoint\n   * @example 404 — Not found\n   * @example 405 — Method not allowed, incl. the \"Allow\" header with a list of methods\n   * @default 405\n   * */\n  wrongMethodBehavior?: 404 | 405;\n  /**\n   * @desc The ResultHandler to use for handling routing, parsing and upload errors\n   * @default defaultResultHandler\n   * @see defaultResultHandler\n   */\n  errorHandler?: AbstractResultHandler;\n  /**\n   * @desc Built-in logger configuration or an instance of any compatible logger.\n   * @example { level: \"debug\", color: true }\n   * @default { level: NODE_ENV === \"production\" ? \"warn\" : \"debug\", color: isSupported(), depth: 2 }\n   * */\n  logger?: Partial<BuiltinLoggerConfig> | AbstractLogger;\n  /**\n   * @desc A child logger returned by this function can override the logger in all handlers for each request\n   * @example ({ parent }) => parent.child({ requestId: uuid() })\n   * */\n  childLoggerProvider?: ChildLoggerProvider;\n  /**\n   * @desc The function for producing access logs\n   * @default ({ method, path }, logger) => logger.debug(`${method}: ${path}`)\n   * @example null — disables the feature\n   * */\n  accessLogger?: null | LogAccess;\n  /**\n   * @desc You can disable the startup logo.\n   * @default true\n   */\n  startupLogo?: boolean;\n  /**\n   * @desc Which properties of request are combined into the input for endpoints and middlewares.\n   * @desc The order matters: priority from lowest to highest\n   * @default defaultInputSources\n   * @see defaultInputSources\n   */\n  inputSources?: Partial<InputSources>;\n}\n\ntype BeforeUpload = (params: {\n  request: Request;\n  logger: ActualLogger;\n}) => void | Promise<void>;\n\ntype UploadOptions = Pick<\n  fileUpload.Options,\n  | \"createParentPath\"\n  | \"uriDecodeFileNames\"\n  | \"safeFileNames\"\n  | \"preserveExtension\"\n  | \"useTempFiles\"\n  | \"tempFileDir\"\n  | \"debug\"\n  | \"uploadTimeout\"\n  | \"limits\"\n> & {\n  /**\n   * @desc The error to throw when the file exceeds the configured fileSize limit (handled by errorHandler).\n   * @see limits\n   * @override limitHandler\n   * @example createHttpError(413, \"The file is too large\")\n   * */\n  limitError?: Error;\n  /**\n   * @desc A handler to execute before uploading — it can be used for restrictions by throwing an error.\n   * @example ({ request }) => { throw createHttpError(403, \"Not authorized\"); }\n   * */\n  beforeUpload?: BeforeUpload;\n};\n\ntype CompressionOptions = Pick<\n  compression.CompressionOptions,\n  \"threshold\" | \"level\" | \"strategy\" | \"chunkSize\" | \"memLevel\"\n>;\n\ninterface GracefulOptions {\n  /**\n   * @desc Time given to drain ongoing requests before closing the server.\n   * @default 1000\n   * */\n  timeout?: number;\n  /**\n   * @desc Process event (Signal) that triggers the graceful shutdown.\n   * @see Signals\n   * @default [SIGINT, SIGTERM]\n   * */\n  events?: string[];\n  /** @desc The hook to call after the server was closed, but before terminating the process. */\n  beforeExit?: () => void | Promise<void>;\n}\n\ntype BeforeRouting = (params: {\n  app: IRouter;\n  /** @desc Returns child logger for the given request (if configured) or the configured logger otherwise */\n  getLogger: GetLogger;\n}) => void | Promise<void>;\n\nexport interface HttpConfig {\n  /** @desc Port, UNIX socket or custom options. */\n  listen: number | string | ListenOptions;\n}\n\ninterface HttpsConfig extends HttpConfig {\n  /** @desc At least \"cert\" and \"key\" options required. */\n  options: ServerOptions;\n}\n\nexport interface ServerConfig extends CommonConfig {\n  /** @desc HTTP server configuration. */\n  http?: HttpConfig;\n  /** @desc HTTPS server configuration. */\n  https?: HttpsConfig;\n  /**\n   * @desc Custom JSON parser.\n   * @default express.json()\n   * @link https://expressjs.com/en/5x/api.html#express.json\n   * */\n  jsonParser?: RequestHandler;\n  /**\n   * @desc Enable or configure uploads handling.\n   * @requires express-fileupload\n   * */\n  upload?: boolean | UploadOptions;\n  /**\n   * @desc Enable or configure response compression.\n   * @requires compression\n   */\n  compression?: boolean | CompressionOptions;\n  /**\n   * @desc Custom raw parser (assigns Buffer to request body)\n   * @default express.raw()\n   * @link https://expressjs.com/en/5x/api.html#express.raw\n   * */\n  rawParser?: RequestHandler;\n  /**\n   * @desc Custom parser for URL Encoded requests used for submitting HTML forms\n   * @default express.urlencoded()\n   * @link https://expressjs.com/en/5x/api.html#express.urlencoded\n   * */\n  formParser?: RequestHandler;\n  /**\n   * @desc A code to execute before processing the Routing of your API (and before parsing).\n   * @desc This can be a good place for express middlewares establishing their own routes.\n   * @desc It can help to avoid making a DIY solution based on the attachRouting() approach.\n   * @example ({ app }) => { app.use('/docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument)); }\n   * */\n  beforeRouting?: BeforeRouting;\n  /**\n   * @desc Rejects new connections and attempts to finish ongoing ones in the specified time before exit.\n   * */\n  gracefulShutdown?: boolean | GracefulOptions;\n}\n\nexport interface AppConfig extends CommonConfig {\n  /** @desc Your custom express app or express router instead. */\n  app: IRouter;\n}\n\nexport function createConfig(config: ServerConfig): ServerConfig;\nexport function createConfig(config: AppConfig): AppConfig;\nexport function createConfig(config: AppConfig | ServerConfig) {\n  return config;\n}\n","export const contentTypes = {\n  json: \"application/json\",\n  upload: \"multipart/form-data\",\n  raw: \"application/octet-stream\",\n  sse: \"text/event-stream\",\n  form: \"application/x-www-form-urlencoded\",\n};\n\nexport type ContentType = keyof typeof contentTypes;\n","import type { IRouter } from \"express\";\n\nexport type SomeMethod = Lowercase<string>;\n\ntype FamiliarMethod = Exclude<\n  keyof IRouter,\n  \"param\" | \"use\" | \"route\" | \"stack\"\n>;\n\nexport const methods = [\n  \"get\",\n  \"post\",\n  \"put\",\n  \"delete\",\n  \"patch\",\n] satisfies Array<FamiliarMethod>;\n\nexport const clientMethods = [\n  ...methods,\n  \"head\",\n] satisfies Array<FamiliarMethod>;\n\n/**\n * @desc Methods supported by the framework API to produce Endpoints on EndpointsFactory.\n * @see BuildProps\n * @example \"get\" | \"post\" | \"put\" | \"delete\" | \"patch\"\n * */\nexport type Method = (typeof methods)[number];\n\n/**\n * @desc Methods usable on the client side, available via generated Integration and Documentation\n * @see withHead\n * @example Method | \"head\"\n * */\nexport type ClientMethod = (typeof clientMethods)[number];\n\n/**\n * @desc Methods supported in CORS headers\n * @see makeCorsHeaders\n * @see createWrongMethodHandler\n * @example ClientMethod | \"options\"\n * */\nexport type CORSMethod = ClientMethod | Extract<FamiliarMethod, \"options\">;\n\nexport const isMethod = (subject: string): subject is Method =>\n  (methods as string[]).includes(subject);\n","import { Request } from \"express\";\nimport * as R from \"ramda\";\nimport { z } from \"zod\";\nimport { CommonConfig, InputSource, InputSources } from \"./config-type\";\nimport { contentTypes } from \"./content-type\";\nimport {\n  ClientMethod,\n  SomeMethod,\n  isMethod,\n  Method,\n  CORSMethod,\n} from \"./method\";\nimport { NormalizedResponse } from \"./api-response\";\n\n/** @since zod 3.25.61 output type fixed */\nexport const emptySchema = z.object({});\nexport type EmptySchema = typeof emptySchema;\n/** @desc this type does not allow props assignment, but it works for reading them when merged with another interface */\nexport type EmptyObject = z.output<EmptySchema>;\nexport type FlatObject = Record<string, unknown>;\n\n/** @link https://stackoverflow.com/a/65492934 */\ntype NoNever<T, F> = [T] extends [never] ? F : T;\n\n/**\n * @desc Using module augmentation approach you can specify tags as the keys of this interface\n * @example declare module \"express-zod-api\" { interface TagOverrides { users: unknown } }\n * @link https://www.typescriptlang.org/docs/handbook/declaration-merging.html#module-augmentation\n * */\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type -- augmentation\nexport interface TagOverrides {}\nexport type Tag = NoNever<keyof TagOverrides, string>;\n\n/** @see https://expressjs.com/en/guide/routing.html */\nexport const routePathParamsRegex = /:([A-Za-z0-9_]+)/g;\nexport const getRoutePathParams = (path: string): string[] =>\n  path.match(routePathParamsRegex)?.map((param) => param.slice(1)) || [];\n\nconst areFilesAvailable = (request: Request): boolean => {\n  const contentType = request.header(\"content-type\") || \"\";\n  const isUpload = contentType.toLowerCase().startsWith(contentTypes.upload);\n  return \"files\" in request && isUpload;\n};\n\nexport const defaultInputSources: InputSources = {\n  get: [\"query\", \"params\"],\n  post: [\"body\", \"params\", \"files\"],\n  put: [\"body\", \"params\"],\n  patch: [\"body\", \"params\"],\n  delete: [\"query\", \"params\"],\n};\nconst fallbackInputSources: InputSource[] = [\"body\", \"query\", \"params\"];\n\nexport const getActualMethod = (request: Request) =>\n  request.method.toLowerCase() as SomeMethod;\n\nexport const getInputSources = (\n  actualMethod: SomeMethod,\n  userDefined: CommonConfig[\"inputSources\"] = {},\n) => {\n  if (actualMethod === (\"options\" satisfies CORSMethod)) return [];\n  const method =\n    actualMethod === (\"head\" satisfies ClientMethod)\n      ? (\"get\" satisfies Method)\n      : isMethod(actualMethod)\n        ? actualMethod\n        : undefined;\n  const matchingSources = method\n    ? userDefined[method] || defaultInputSources[method]\n    : undefined;\n  return matchingSources || fallbackInputSources;\n};\n\nexport const getInput = (\n  req: Request,\n  userDefined: CommonConfig[\"inputSources\"] = {},\n): FlatObject => {\n  const actualMethod = getActualMethod(req);\n  return getInputSources(actualMethod, userDefined)\n    .filter((src) => (src === \"files\" ? areFilesAvailable(req) : true))\n    .reduce<FlatObject>((agg, src) => Object.assign(agg, req[src]), {});\n};\n\nexport const ensureError = (subject: unknown): Error =>\n  subject instanceof Error\n    ? subject\n    : subject instanceof z.ZodError // ZodError does not extend Error, unlike ZodRealError that does\n      ? new z.ZodRealError(subject.issues)\n      : new Error(String(subject));\n\nexport const getMessageFromError = (error: Error): string => {\n  if (error instanceof z.ZodError) {\n    return error.issues\n      .map(({ path, message }) => {\n        const prefix = path.length ? `${z.core.toDotPath(path)}: ` : \"\";\n        return `${prefix}${message}`;\n      })\n      .join(\"; \");\n  }\n  return error.message;\n};\n\n/** Faster replacement to instanceof for code operating core types (traversing schemas) */\nexport const isSchema = <T extends z.core.$ZodType = z.core.$ZodType>(\n  subject: unknown,\n  type?: T[\"_zod\"][\"def\"][\"type\"],\n): subject is T =>\n  isObject(subject) &&\n  \"_zod\" in subject &&\n  (type ? R.path([\"_zod\", \"def\", \"type\"], subject) === type : true);\n\nexport const combinations = <T>(\n  a: T[],\n  b: T[],\n  merge: (pair: [T, T]) => T,\n): T[] => (a.length && b.length ? R.xprod(a, b).map(merge) : a.concat(b));\n\nexport const ucFirst = (subject: string) =>\n  subject.charAt(0).toUpperCase() + subject.slice(1).toLowerCase();\n\nexport const makeCleanId = (...args: string[]) => {\n  const byAlpha = R.chain((entry) => entry.split(/[^A-Z0-9]/gi), args);\n  const byWord = R.chain(\n    (entry) =>\n      entry.replaceAll(/[A-Z]+/g, (beginning) => `/${beginning}`).split(\"/\"),\n    byAlpha,\n  );\n  return byWord.map(ucFirst).join(\"\");\n};\n\nexport const getTransformedType = R.tryCatch(\n  <T>(schema: z.core.$ZodTransform<unknown, T>, sample: T) =>\n    typeof z.parse(schema, sample),\n  R.always(undefined),\n);\n\n/** @desc can still be an array, use Array.isArray() or rather R.type() to exclude that case */\nexport const isObject = (subject: unknown) =>\n  typeof subject === \"object\" && subject !== null;\n\nexport const isProduction = R.memoizeWith(\n  () => process.env.TSDOWN_STATIC as string, // eslint-disable-line no-restricted-syntax -- substituted by TSDOWN\n  () => process.env.NODE_ENV === \"production\", // eslint-disable-line no-restricted-syntax -- memoized\n);\n\nexport const shouldHaveContent = (\n  method: ClientMethod,\n  mimeTypes: NormalizedResponse[\"mimeTypes\"],\n): mimeTypes is NonNullable<NormalizedResponse[\"mimeTypes\"]> =>\n  Boolean(mimeTypes) && method !== \"head\";\n","import { z } from \"zod\";\n\nexport const ezBufferBrand = Symbol(\"Buffer\");\n\nexport const buffer = () =>\n  z\n    .custom<Buffer>((subject) => Buffer.isBuffer(subject), {\n      error: \"Expected Buffer\",\n    })\n    .brand(ezBufferBrand as symbol);\n","import { z } from \"zod\";\n\nexport const ezDateInBrand = Symbol(\"DateIn\");\n\nexport interface DateInParams\n  extends Omit<Parameters<z.ZodString[\"meta\"]>[0], \"examples\"> {\n  examples?: string[];\n}\n\nexport const dateIn = ({ examples, ...rest }: DateInParams = {}) => {\n  const schema = z.union([\n    z.iso.date(),\n    z.iso.datetime(),\n    z.iso.datetime({ local: true }),\n  ]);\n\n  return schema\n    .meta({ examples })\n    .transform((str) => new Date(str))\n    .pipe(z.date())\n    .brand(ezDateInBrand as symbol)\n    .meta(rest);\n};\n","import { z } from \"zod\";\n\nexport const ezDateOutBrand = Symbol(\"DateOut\");\n\nexport interface DateOutParams\n  extends Omit<Parameters<z.ZodString[\"meta\"]>[0], \"examples\"> {\n  examples?: string[];\n}\n\nexport const dateOut = (meta: DateOutParams = {}) =>\n  z\n    .date()\n    .transform((date) => date.toISOString())\n    .brand(ezDateOutBrand as symbol)\n    .meta(meta);\n","import { z } from \"zod\";\nimport { getMessageFromError } from \"./common-helpers\";\nimport { OpenAPIContext } from \"./documentation-helpers\";\nimport type { Method } from \"./method\";\n\n/** @desc An error related to the wrong Routing declaration */\nexport class RoutingError extends Error {\n  public override name = \"RoutingError\";\n  public override readonly cause: { method: Method; path: string };\n\n  constructor(message: string, method: Method, path: string) {\n    super(message);\n    this.cause = { method, path };\n  }\n}\n\n/**\n * @desc An error related to the generating of the documentation\n * */\nexport class DocumentationError extends Error {\n  public override name = \"DocumentationError\";\n  public override readonly cause: string;\n\n  constructor(\n    message: string,\n    {\n      method,\n      path,\n      isResponse,\n    }: Pick<OpenAPIContext, \"path\" | \"method\" | \"isResponse\">,\n  ) {\n    super(message);\n    this.cause = `${\n      isResponse ? \"Response\" : \"Input\"\n    } schema of an Endpoint assigned to ${method.toUpperCase()} method of ${path} path.`;\n  }\n}\n\n/** @desc An error related to the input and output schemas declaration */\nexport class IOSchemaError extends Error {\n  public override name = \"IOSchemaError\";\n}\n\nexport class DeepCheckError extends IOSchemaError {\n  public override name = \"DeepCheckError\";\n\n  constructor(public override readonly cause: z.core.$ZodType) {\n    super(\"Found\", { cause });\n  }\n}\n\n/** @desc An error of validating the Endpoint handler's returns against the Endpoint output schema */\nexport class OutputValidationError extends IOSchemaError {\n  public override name = \"OutputValidationError\";\n\n  constructor(public override readonly cause: z.ZodError) {\n    const prefixedPath = new z.ZodError(\n      cause.issues.map(({ path, ...rest }) => ({\n        ...rest,\n        path: [\"output\", ...path],\n      })),\n    );\n    super(getMessageFromError(prefixedPath), { cause });\n  }\n}\n\n/** @desc An error of validating the input sources against the Middleware or Endpoint input schema */\nexport class InputValidationError extends IOSchemaError {\n  public override name = \"InputValidationError\";\n\n  constructor(public override readonly cause: z.ZodError) {\n    super(getMessageFromError(cause), { cause });\n  }\n}\n\n/** @desc An error related to the execution or incorrect configuration of ResultHandler */\nexport class ResultHandlerError extends Error {\n  public override name = \"ResultHandlerError\";\n\n  constructor(\n    /** @desc The error thrown from ResultHandler */\n    public override readonly cause: Error,\n    /** @desc The error being processed by ResultHandler when it failed */\n    public readonly handled?: Error,\n  ) {\n    super(getMessageFromError(cause), { cause });\n  }\n}\n\nexport class MissingPeerError extends Error {\n  public override name = \"MissingPeerError\";\n  constructor(module: string) {\n    super(\n      `Missing peer dependency: ${module}. Please install it to use the feature.`,\n    );\n  }\n}\n","import { z } from \"zod\";\n\nexport const ezFormBrand = Symbol(\"Form\");\n\n/** @desc Accepts an object shape or a custom object schema */\nexport const form = <S extends z.core.$ZodShape>(base: S | z.ZodObject<S>) =>\n  (base instanceof z.ZodObject ? base : z.object(base)).brand(\n    ezFormBrand as symbol,\n  );\n","import type { UploadedFile } from \"express-fileupload\";\nimport { z } from \"zod\";\n\nexport const ezUploadBrand = Symbol(\"Upload\");\n\nexport const upload = () =>\n  z\n    .custom<UploadedFile>(\n      (subject) =>\n        typeof subject === \"object\" &&\n        subject !== null &&\n        \"name\" in subject &&\n        \"encoding\" in subject &&\n        \"mimetype\" in subject &&\n        \"data\" in subject &&\n        \"tempFilePath\" in subject &&\n        \"truncated\" in subject &&\n        \"size\" in subject &&\n        \"md5\" in subject &&\n        \"mv\" in subject &&\n        typeof subject.name === \"string\" &&\n        typeof subject.encoding === \"string\" &&\n        typeof subject.mimetype === \"string\" &&\n        Buffer.isBuffer(subject.data) &&\n        typeof subject.tempFilePath === \"string\" &&\n        typeof subject.truncated === \"boolean\" &&\n        typeof subject.size === \"number\" &&\n        typeof subject.md5 === \"string\" &&\n        typeof subject.mv === \"function\",\n      {\n        error: ({ input }) => ({\n          message: `Expected file upload, received ${typeof input}`,\n        }),\n      },\n    )\n    .brand(ezUploadBrand as symbol);\n","import { z } from \"zod\";\nimport { buffer } from \"./buffer-schema\";\n\nexport const ezRawBrand = Symbol(\"Raw\");\n\nconst base = z.object({ raw: buffer() });\ntype Base = ReturnType<typeof base.brand<symbol>>;\n\nconst extended = <S extends z.core.$ZodShape>(extra: S) =>\n  base.extend(extra).brand(ezRawBrand as symbol);\n\nexport function raw(): Base;\nexport function raw<S extends z.core.$ZodShape>(\n  extra: S,\n): ReturnType<typeof extended<S>>;\nexport function raw(extra?: z.core.$ZodShape) {\n  return extra ? extended(extra) : base.brand(ezRawBrand as symbol);\n}\n\nexport type RawSchema = Base;\n","import * as R from \"ramda\";\nimport { z } from \"zod\";\nimport { ezBufferBrand } from \"./buffer-schema\";\nimport { ezDateInBrand } from \"./date-in-schema\";\nimport { ezDateOutBrand } from \"./date-out-schema\";\nimport { DeepCheckError } from \"./errors\";\nimport { ezFormBrand } from \"./form-schema\";\nimport { IOSchema } from \"./io-schema\";\nimport { getBrand } from \"@express-zod-api/zod-plugin\";\nimport { FirstPartyKind } from \"./schema-walker\";\nimport { ezUploadBrand } from \"./upload-schema\";\nimport { ezRawBrand } from \"./raw-schema\";\n\ninterface NestedSchemaLookupProps {\n  io: \"input\" | \"output\";\n  condition: (zodSchema: z.core.$ZodType) => boolean;\n}\n\nexport const findNestedSchema = (\n  subject: z.core.$ZodType,\n  { io, condition }: NestedSchemaLookupProps,\n) =>\n  R.tryCatch(\n    () => {\n      z.toJSONSchema(subject, {\n        io,\n        unrepresentable: \"any\",\n        override: ({ zodSchema }) => {\n          if (condition(zodSchema)) throw new DeepCheckError(zodSchema); // exits early\n        },\n      });\n      return undefined;\n    },\n    (err: DeepCheckError) => err.cause,\n  )();\n\n/** not using cycle:\"throw\" because it also affects parenting objects */\nexport const hasCycle = (\n  subject: z.core.$ZodType,\n  { io }: Pick<NestedSchemaLookupProps, \"io\">,\n) => {\n  const json = z.toJSONSchema(subject, { io, unrepresentable: \"any\" });\n  const stack: unknown[] = [json];\n  while (stack.length) {\n    const entry = stack.shift()!;\n    if (R.is(Object, entry)) {\n      if ((entry as z.core.JSONSchema.BaseSchema).$ref === \"#\") return true;\n      stack.push(...R.values(entry));\n    }\n    if (R.is(Array, entry)) stack.push(...R.values(entry));\n  }\n  return false;\n};\n\nexport const findRequestTypeDefiningSchema = (subject: IOSchema) =>\n  findNestedSchema(subject, {\n    condition: (schema) => {\n      const brand = getBrand(schema);\n      return (\n        typeof brand === \"symbol\" &&\n        [ezUploadBrand, ezRawBrand, ezFormBrand].includes(brand)\n      );\n    },\n    io: \"input\",\n  });\n\nconst unsupported: FirstPartyKind[] = [\n  \"nan\",\n  \"symbol\",\n  \"map\",\n  \"set\",\n  \"bigint\",\n  \"void\",\n  \"promise\",\n  \"never\",\n];\n\nexport const findJsonIncompatible = (\n  subject: z.core.$ZodType,\n  io: \"input\" | \"output\",\n) =>\n  findNestedSchema(subject, {\n    io,\n    condition: (zodSchema) => {\n      const brand = getBrand(zodSchema);\n      const { type } = zodSchema._zod.def;\n      if (unsupported.includes(type)) return true;\n      if (brand === ezBufferBrand) return true;\n      if (io === \"input\") {\n        if (type === \"date\") return true;\n        if (brand === ezDateOutBrand) return true;\n      }\n      if (io === \"output\") {\n        if (brand === ezDateInBrand) return true;\n        if (brand === ezRawBrand) return true;\n        if (brand === ezUploadBrand) return true;\n      }\n      return false;\n    },\n  });\n","import { Request } from \"express\";\nimport createHttpError, { HttpError, isHttpError } from \"http-errors\";\nimport * as R from \"ramda\";\nimport { globalRegistry, z } from \"zod\";\nimport { NormalizedResponse, ResponseVariant } from \"./api-response\";\nimport {\n  combinations,\n  FlatObject,\n  getMessageFromError,\n  isProduction,\n} from \"./common-helpers\";\nimport { InputValidationError, ResultHandlerError } from \"./errors\";\nimport { ActualLogger } from \"./logger-helpers\";\nimport type { LazyResult, Result } from \"./result-handler\";\n\nexport type ResultSchema<R extends Result> =\n  R extends Result<infer S> ? S : never;\n\nexport type DiscriminatedResult =\n  | {\n      output: FlatObject;\n      error: null;\n    }\n  | {\n      output: null;\n      error: Error;\n    };\n\n/** @throws ResultHandlerError when Result is an empty array */\nexport const normalize = <A extends unknown[]>(\n  subject: Result | LazyResult<Result, A>,\n  {\n    variant,\n    args,\n    ...fallback\n  }: Omit<NormalizedResponse, \"schema\"> & {\n    variant: ResponseVariant;\n    args: A;\n  },\n): NormalizedResponse[] => {\n  if (typeof subject === \"function\") subject = subject(...args);\n  if (subject instanceof z.ZodType) return [{ schema: subject, ...fallback }];\n  if (Array.isArray(subject) && !subject.length) {\n    const err = new Error(`At least one ${variant} response schema required.`);\n    throw new ResultHandlerError(err);\n  }\n  return (Array.isArray(subject) ? subject : [subject]).map(\n    ({ schema, statusCode, mimeType }) => ({\n      schema,\n      statusCodes:\n        typeof statusCode === \"number\"\n          ? [statusCode]\n          : statusCode || fallback.statusCodes,\n      mimeTypes:\n        typeof mimeType === \"string\"\n          ? [mimeType]\n          : mimeType === undefined\n            ? fallback.mimeTypes\n            : mimeType,\n    }),\n  );\n};\n\nexport const logServerError = (\n  error: HttpError,\n  logger: ActualLogger,\n  { url }: Request,\n  payload: FlatObject | null,\n) =>\n  !error.expose && logger.error(\"Server side error\", { error, url, payload });\n\n/**\n * @example InputValidationError —> BadRequest(400)\n * @example Error —> InternalServerError(500)\n * */\nexport const ensureHttpError = (error: Error): HttpError => {\n  if (isHttpError(error)) return error;\n  return createHttpError(\n    error instanceof InputValidationError ? 400 : 500,\n    getMessageFromError(error),\n    { cause: error.cause || error },\n  );\n};\n\nexport const getPublicErrorMessage = (error: HttpError): string =>\n  isProduction() && !error.expose\n    ? createHttpError(error.statusCode).message // default message for that code\n    : error.message;\n\n/** @see pullRequestExamples */\nexport const pullResponseExamples = <T extends z.core.$ZodObject>(subject: T) =>\n  Object.entries(subject._zod.def.shape).reduce<FlatObject[]>(\n    (acc, [key, schema]) => {\n      const { examples = [] } = globalRegistry.get(schema) || {};\n      return combinations(acc, examples.map(R.objOf(key)), ([left, right]) => ({\n        ...left,\n        ...right,\n      }));\n    },\n    [],\n  );\n","import { Response } from \"express\";\nimport createHttpError, { isHttpError } from \"http-errors\";\nimport { ResultHandlerError } from \"./errors\";\nimport { ActualLogger } from \"./logger-helpers\";\nimport { getPublicErrorMessage } from \"./result-helpers\";\n\ninterface LastResortHandlerParams {\n  error: ResultHandlerError;\n  logger: ActualLogger;\n  response: Response;\n}\n\nexport const lastResortHandler = ({\n  error,\n  logger,\n  response,\n}: LastResortHandlerParams) => {\n  logger.error(\"Result handler failure\", error);\n  const message = getPublicErrorMessage(\n    createHttpError(\n      500,\n      `An error occurred while serving the result: ${error.message}.` +\n        (error.handled ? `\\nOriginal error: ${error.handled.message}.` : \"\"),\n      { expose: isHttpError(error.cause) ? error.cause.expose : false }, // retain the cause exposition setting\n    ),\n  );\n  response.status(500).type(\"text/plain\").end(message);\n};\n","import { NextFunction, Request, Response } from \"express\";\nimport { z } from \"zod\";\nimport { emptySchema, FlatObject } from \"./common-helpers\";\nimport { InputValidationError } from \"./errors\";\nimport { IOSchema } from \"./io-schema\";\nimport { LogicalContainer } from \"./logical-container\";\nimport { Security } from \"./security\";\nimport { ActualLogger } from \"./logger-helpers\";\n\ntype Handler<IN, OPT, OUT> = (params: {\n  /** @desc The inputs from the enabled input sources validated against the input schema of the Middleware */\n  input: IN;\n  /**\n   * @desc The returns of the previously executed Middlewares (typed when chaining Middlewares)\n   * @link https://github.com/RobinTail/express-zod-api/discussions/1250\n   * */\n  options: OPT;\n  /** @link https://expressjs.com/en/5x/api.html#req */\n  request: Request;\n  /** @link https://expressjs.com/en/5x/api.html#res */\n  response: Response;\n  /** @desc The instance of the configured logger */\n  logger: ActualLogger;\n}) => Promise<OUT>;\n\nexport abstract class AbstractMiddleware {\n  /** @internal */\n  public abstract get security(): LogicalContainer<Security> | undefined;\n  /** @internal */\n  public abstract get schema(): IOSchema | undefined;\n  public abstract execute(params: {\n    input: unknown;\n    options: FlatObject;\n    request: Request;\n    response: Response;\n    logger: ActualLogger;\n  }): Promise<FlatObject>;\n}\n\nexport class Middleware<\n  OPT extends FlatObject,\n  OUT extends FlatObject,\n  SCO extends string,\n  IN extends IOSchema | undefined = undefined,\n> extends AbstractMiddleware {\n  readonly #schema: IN;\n  readonly #security?: LogicalContainer<\n    Security<Extract<keyof z.input<IN>, string>, SCO>\n  >;\n  readonly #handler: Handler<z.output<IN>, OPT, OUT>;\n\n  constructor({\n    input,\n    security,\n    handler,\n  }: {\n    /**\n     * @desc Input schema of the Middleware, combining properties from all the enabled input sources\n     * @default undefined\n     * @see defaultInputSources\n     * */\n    input?: IN;\n    /** @desc Declaration of the security schemas implemented within the handler */\n    security?: LogicalContainer<\n      Security<Extract<keyof z.input<IN>, string>, SCO>\n    >;\n    /** @desc The handler returning options available to Endpoints */\n    handler: Handler<z.output<IN>, OPT, OUT>;\n  }) {\n    super();\n    this.#schema = input as IN;\n    this.#security = security;\n    this.#handler = handler;\n  }\n\n  /** @internal */\n  public override get security() {\n    return this.#security;\n  }\n\n  /** @internal */\n  public override get schema() {\n    return this.#schema;\n  }\n\n  /** @throws InputValidationError */\n  public override async execute({\n    input,\n    ...rest\n  }: {\n    input: unknown;\n    options: OPT;\n    request: Request;\n    response: Response;\n    logger: ActualLogger;\n  }) {\n    try {\n      const validInput = (await (this.#schema || emptySchema).parseAsync(\n        input,\n      )) as z.output<IN>;\n      return this.#handler({ ...rest, input: validInput });\n    } catch (e) {\n      throw e instanceof z.ZodError ? new InputValidationError(e) : e;\n    }\n  }\n}\n\nexport class ExpressMiddleware<\n  R extends Request,\n  S extends Response,\n  OUT extends FlatObject,\n> extends Middleware<FlatObject, OUT, string> {\n  constructor(\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any -- issue #2824, assignment compatibility fix\n    nativeMw: (request: R, response: S, next: NextFunction) => any,\n    {\n      provider = () => ({}) as OUT,\n      transformer = (err: Error) => err,\n    }: {\n      provider?: (request: R, response: S) => OUT | Promise<OUT>;\n      transformer?: (err: Error) => Error;\n    } = {},\n  ) {\n    super({\n      handler: async ({ request, response }) =>\n        new Promise<OUT>((resolve, reject) => {\n          const next = (err?: unknown) => {\n            if (err && err instanceof Error) return reject(transformer(err));\n            resolve(provider(request as R, response as S));\n          };\n          nativeMw(request as R, response as S, next)?.catch(next);\n        }),\n    });\n  }\n}\n","import { Routing } from \"./routing\";\n\nexport abstract class Routable {\n  /** @desc Marks the route as deprecated (makes a copy of the endpoint) */\n  public abstract deprecated(): this;\n\n  /** @desc Enables nested routes within the path assigned to the subject */\n  public nest(routing: Routing): Routing {\n    return Object.assign(routing, { \"\": this });\n  }\n}\n","import { Request, Response } from \"express\";\nimport * as R from \"ramda\";\nimport { z, globalRegistry } from \"zod\";\nimport { NormalizedResponse, ResponseVariant } from \"./api-response\";\nimport { findRequestTypeDefiningSchema } from \"./deep-checks\";\nimport {\n  FlatObject,\n  getActualMethod,\n  getInput,\n  ensureError,\n  isSchema,\n} from \"./common-helpers\";\nimport { CommonConfig } from \"./config-type\";\nimport {\n  InputValidationError,\n  OutputValidationError,\n  ResultHandlerError,\n} from \"./errors\";\nimport { ezFormBrand } from \"./form-schema\";\nimport { IOSchema } from \"./io-schema\";\nimport { lastResortHandler } from \"./last-resort\";\nimport { ActualLogger } from \"./logger-helpers\";\nimport { LogicalContainer } from \"./logical-container\";\nimport { getBrand } from \"@express-zod-api/zod-plugin\";\nimport { ClientMethod, CORSMethod, Method, SomeMethod } from \"./method\";\nimport { AbstractMiddleware, ExpressMiddleware } from \"./middleware\";\nimport { ContentType } from \"./content-type\";\nimport { ezRawBrand } from \"./raw-schema\";\nimport { DiscriminatedResult, pullResponseExamples } from \"./result-helpers\";\nimport { Routable } from \"./routable\";\nimport { AbstractResultHandler } from \"./result-handler\";\nimport { Security } from \"./security\";\nimport { ezUploadBrand } from \"./upload-schema\";\n\nexport type Handler<IN, OUT, OPT> = (params: {\n  /** @desc The inputs from the enabled input sources validated against the final input schema (incl. Middlewares) */\n  input: IN;\n  /** @desc The returns of the assigned Middlewares */\n  options: OPT;\n  /** @desc The instance of the configured logger */\n  logger: ActualLogger;\n}) => Promise<OUT>;\n\nexport abstract class AbstractEndpoint extends Routable {\n  public abstract execute(params: {\n    request: Request;\n    response: Response;\n    logger: ActualLogger;\n    config: CommonConfig;\n  }): Promise<void>;\n  /** @internal */\n  public abstract getResponses(\n    variant: ResponseVariant,\n  ): ReadonlyArray<NormalizedResponse>;\n  /** @internal */\n  public abstract getOperationId(method: ClientMethod): string | undefined;\n  /** @internal */\n  public abstract get description(): string | undefined;\n  /** @internal */\n  public abstract get shortDescription(): string | undefined;\n  /** @internal */\n  public abstract get methods(): ReadonlyArray<Method> | undefined;\n  /** @internal */\n  public abstract get inputSchema(): IOSchema;\n  /** @internal */\n  public abstract get outputSchema(): IOSchema;\n  /** @internal */\n  public abstract get security(): LogicalContainer<Security>[];\n  /** @internal */\n  public abstract get scopes(): ReadonlyArray<string>;\n  /** @internal */\n  public abstract get tags(): ReadonlyArray<string>;\n  /** @internal */\n  public abstract get requestType(): ContentType;\n  /** @internal */\n  public abstract get isDeprecated(): boolean;\n}\n\nexport class Endpoint<\n  IN extends IOSchema,\n  OUT extends IOSchema,\n  OPT extends FlatObject,\n> extends AbstractEndpoint {\n  readonly #def: ConstructorParameters<typeof Endpoint<IN, OUT, OPT>>[0];\n\n  /** considered expensive operation, only required for generators */\n  #ensureOutputExamples = R.once(() => {\n    if (globalRegistry.get(this.#def.outputSchema)?.examples?.length) return; // examples on output schema, or pull up:\n    if (!isSchema<z.core.$ZodObject>(this.#def.outputSchema, \"object\")) return;\n    const examples = pullResponseExamples(this.#def.outputSchema);\n    if (!examples.length) return;\n    const current = this.#def.outputSchema.meta();\n    globalRegistry\n      .remove(this.#def.outputSchema) // reassign to avoid cloning\n      .add(this.#def.outputSchema, { ...current, examples });\n  });\n\n  constructor(def: {\n    deprecated?: boolean;\n    middlewares?: AbstractMiddleware[];\n    inputSchema: IN;\n    outputSchema: OUT;\n    handler: Handler<z.output<IN>, z.input<OUT>, OPT>;\n    resultHandler: AbstractResultHandler;\n    description?: string;\n    shortDescription?: string;\n    getOperationId?: (method: ClientMethod) => string | undefined;\n    methods?: Method[];\n    scopes?: string[];\n    tags?: string[];\n  }) {\n    super();\n    this.#def = def;\n  }\n\n  #clone(\n    inc?: Partial<ConstructorParameters<typeof Endpoint<IN, OUT, OPT>>[0]>,\n  ) {\n    return new Endpoint({ ...this.#def, ...inc });\n  }\n\n  public override deprecated() {\n    return this.#clone({ deprecated: true }) as this;\n  }\n\n  /** @internal */\n  public override get isDeprecated(): boolean {\n    return this.#def.deprecated || false;\n  }\n\n  /** @internal */\n  public override get description() {\n    return this.#def.description;\n  }\n\n  /** @internal */\n  public override get shortDescription() {\n    return this.#def.shortDescription;\n  }\n\n  /** @internal */\n  public override get methods() {\n    return Object.freeze(this.#def.methods);\n  }\n\n  /** @internal */\n  public override get inputSchema(): IN {\n    return this.#def.inputSchema;\n  }\n\n  /** @internal */\n  public override get outputSchema(): OUT {\n    this.#ensureOutputExamples();\n    return this.#def.outputSchema;\n  }\n\n  /** @internal */\n  public override get requestType() {\n    const found = findRequestTypeDefiningSchema(this.#def.inputSchema);\n    if (found) {\n      const brand = getBrand(found);\n      if (brand === ezUploadBrand) return \"upload\";\n      if (brand === ezRawBrand) return \"raw\";\n      if (brand === ezFormBrand) return \"form\";\n    }\n    return \"json\";\n  }\n\n  /** @internal */\n  public override getResponses(variant: ResponseVariant) {\n    if (variant === \"positive\") this.#ensureOutputExamples();\n    return Object.freeze(\n      variant === \"negative\"\n        ? this.#def.resultHandler.getNegativeResponse()\n        : this.#def.resultHandler.getPositiveResponse(this.#def.outputSchema),\n    );\n  }\n\n  /** @internal */\n  public override get security() {\n    const entries = R.pluck(\"security\", this.#def.middlewares || []);\n    return R.reject(R.isNil, entries);\n  }\n\n  /** @internal */\n  public override get scopes() {\n    return Object.freeze(this.#def.scopes || []);\n  }\n\n  /** @internal */\n  public override get tags() {\n    return Object.freeze(this.#def.tags || []);\n  }\n\n  /** @internal */\n  public override getOperationId(method: ClientMethod): string | undefined {\n    return this.#def.getOperationId?.(method);\n  }\n\n  async #parseOutput(output: z.input<OUT>) {\n    try {\n      return (await this.#def.outputSchema.parseAsync(output)) as FlatObject;\n    } catch (e) {\n      throw e instanceof z.ZodError ? new OutputValidationError(e) : e;\n    }\n  }\n\n  async #runMiddlewares({\n    method,\n    logger,\n    options,\n    response,\n    ...rest\n  }: {\n    method: SomeMethod;\n    input: Readonly<FlatObject>; // Issue #673: input is immutable, since this.inputSchema is combined with ones of middlewares\n    request: Request;\n    response: Response;\n    logger: ActualLogger;\n    options: Partial<OPT>;\n  }) {\n    for (const mw of this.#def.middlewares || []) {\n      if (\n        method === (\"options\" satisfies CORSMethod) &&\n        !(mw instanceof ExpressMiddleware)\n      )\n        continue;\n      Object.assign(\n        options,\n        await mw.execute({ ...rest, options, response, logger }),\n      );\n      if (response.writableEnded) {\n        logger.warn(\n          \"A middleware has closed the stream. Accumulated options:\",\n          options,\n        );\n        break;\n      }\n    }\n  }\n\n  async #parseAndRunHandler({\n    input,\n    ...rest\n  }: {\n    input: Readonly<FlatObject>;\n    options: OPT;\n    logger: ActualLogger;\n  }) {\n    let finalInput: z.output<IN>; // final input types transformations for handler\n    try {\n      finalInput = (await this.#def.inputSchema.parseAsync(\n        input,\n      )) as z.output<IN>;\n    } catch (e) {\n      throw e instanceof z.ZodError ? new InputValidationError(e) : e;\n    }\n    return this.#def.handler({ ...rest, input: finalInput });\n  }\n\n  async #handleResult(\n    params: DiscriminatedResult & {\n      request: Request;\n      response: Response;\n      logger: ActualLogger;\n      input: FlatObject;\n      options: Partial<OPT>;\n    },\n  ) {\n    try {\n      await this.#def.resultHandler.execute(params);\n    } catch (e) {\n      lastResortHandler({\n        ...params,\n        error: new ResultHandlerError(\n          ensureError(e),\n          params.error || undefined,\n        ),\n      });\n    }\n  }\n\n  public override async execute({\n    request,\n    response,\n    logger,\n    config,\n  }: {\n    request: Request;\n    response: Response;\n    logger: ActualLogger;\n    config: CommonConfig;\n  }) {\n    const method = getActualMethod(request);\n    const options: Partial<OPT> = {};\n    let result: DiscriminatedResult = { output: {}, error: null };\n    const input = getInput(request, config.inputSources);\n    try {\n      await this.#runMiddlewares({\n        method,\n        input,\n        request,\n        response,\n        logger,\n        options,\n      });\n      if (response.writableEnded) return;\n      if (method === (\"options\" satisfies CORSMethod))\n        return void response.status(200).end();\n      result = {\n        output: await this.#parseOutput(\n          await this.#parseAndRunHandler({\n            input,\n            logger,\n            options: options as OPT, // ensured the complete OPT by writableEnded condition and try-catch\n          }),\n        ),\n        error: null,\n      };\n    } catch (e) {\n      result = { output: null, error: ensureError(e) };\n    }\n    await this.#handleResult({\n      ...result,\n      input,\n      request,\n      response,\n      logger,\n      options,\n    });\n  }\n}\n","import { z } from \"zod\";\n\ntype Base = object & { [Symbol.iterator]?: never };\n\n/** @desc The type allowed on the top level of Middlewares and Endpoints */\nexport type IOSchema = z.ZodType<Base>;\n\n/** EndpointsFactory schema extended type when adding a Middleware */\nexport type Extension<\n  Current extends IOSchema | undefined,\n  Inc extends IOSchema | undefined,\n> = Current extends IOSchema\n  ? Inc extends IOSchema\n    ? z.ZodIntersection<Current, Inc>\n    : Current\n  : Inc;\n\n/** Makes a schema for EndpointsFactory extended with a Middleware */\nexport const ensureExtension = <\n  Current extends IOSchema | undefined,\n  Inc extends IOSchema | undefined,\n>(\n  current: Current,\n  inc: Inc,\n) =>\n  (current && inc ? current.and(inc) : current || inc) as Extension<\n    Current,\n    Inc\n  >;\n\n/** The Endpoint input schema type, condition wrapped into schema to make it z.output-compatible */\nexport type FinalInputSchema<\n  FIN extends IOSchema | undefined,\n  BIN extends IOSchema,\n> = z.ZodIntersection<FIN extends IOSchema ? FIN : BIN, BIN>;\n\n/** Makes the Endpoint input schema */\nexport const makeFinalInputSchema = <\n  FIN extends IOSchema | undefined,\n  BIN extends IOSchema,\n>(\n  factorySchema: FIN,\n  buildSchema: BIN,\n) =>\n  (factorySchema\n    ? factorySchema.and(buildSchema)\n    : buildSchema) as FinalInputSchema<FIN, BIN>;\n","import { z } from \"zod\";\n\nexport const defaultStatusCodes = {\n  positive: 200,\n  negative: 400,\n} satisfies Record<string, number>;\n\nexport type ResponseVariant = keyof typeof defaultStatusCodes;\nexport const responseVariants = Object.keys(\n  defaultStatusCodes,\n) as ResponseVariant[];\n\n/** @public this is the user facing configuration */\nexport interface ApiResponse<S extends z.ZodType> {\n  schema: S;\n  /** @default 200 for a positive and 400 for a negative response */\n  statusCode?: number | [number, ...number[]];\n  /**\n   * @example null is for no content, such as 204 and 302\n   * @default \"application/json\"\n   * */\n  mimeType?: string | [string, ...string[]] | null;\n}\n\n/**\n * @private This is what the framework entities operate\n * @see normalize\n * */\nexport interface NormalizedResponse {\n  schema: z.ZodType;\n  statusCodes: [number, ...number[]];\n  mimeTypes: [string, ...string[]] | null;\n}\n","import { Request, Response } from \"express\";\nimport { globalRegistry, z } from \"zod\";\nimport {\n  ApiResponse,\n  defaultStatusCodes,\n  NormalizedResponse,\n} from \"./api-response\";\nimport { FlatObject, isObject } from \"./common-helpers\";\nimport { contentTypes } from \"./content-type\";\nimport { IOSchema } from \"./io-schema\";\nimport { ActualLogger } from \"./logger-helpers\";\nimport {\n  DiscriminatedResult,\n  ensureHttpError,\n  getPublicErrorMessage,\n  logServerError,\n  normalize,\n  ResultSchema,\n} from \"./result-helpers\";\n\ntype Handler<RES = unknown> = (\n  params: DiscriminatedResult & {\n    /** null in case of failure to parse or to find the matching endpoint (error: not found) */\n    input: FlatObject | null;\n    /** can be empty: check presence of the required property using \"in\" operator */\n    options: FlatObject;\n    request: Request;\n    response: Response<RES>;\n    logger: ActualLogger;\n  },\n) => void | Promise<void>;\n\nexport type Result<S extends z.ZodType = z.ZodType> =\n  | S // plain schema, default status codes applied\n  | ApiResponse<S> // single response definition, status code(s) customizable\n  | ApiResponse<S>[]; // Feature #1431: different responses for different status codes (non-empty, prog. check!)\n\nexport type LazyResult<R extends Result, A extends unknown[] = []> = (\n  ...args: A\n) => R;\n\nexport abstract class AbstractResultHandler {\n  readonly #handler: Handler;\n  /** @internal */\n  public abstract getPositiveResponse(output: IOSchema): NormalizedResponse[];\n  /** @internal */\n  public abstract getNegativeResponse(): NormalizedResponse[];\n  protected constructor(handler: Handler) {\n    this.#handler = handler;\n  }\n  public execute(...params: Parameters<Handler>) {\n    return this.#handler(...params);\n  }\n}\n\nexport class ResultHandler<\n  POS extends Result,\n  NEG extends Result,\n> extends AbstractResultHandler {\n  readonly #positive: POS | LazyResult<POS, [IOSchema]>;\n  readonly #negative: NEG | LazyResult<NEG>;\n\n  constructor(params: {\n    /** @desc A description of the API response in case of success (schema, status code, MIME type) */\n    positive: POS | LazyResult<POS, [IOSchema]>;\n    /** @desc A description of the API response in case of error (schema, status code, MIME type) */\n    negative: NEG | LazyResult<NEG>;\n    /** @desc The actual implementation to transmit the response in any case */\n    handler: Handler<z.output<ResultSchema<POS> | ResultSchema<NEG>>>;\n  }) {\n    super(params.handler);\n    this.#positive = params.positive;\n    this.#negative = params.negative;\n  }\n\n  /** @internal */\n  public override getPositiveResponse(output: IOSchema) {\n    return normalize(this.#positive, {\n      variant: \"positive\",\n      args: [output],\n      statusCodes: [defaultStatusCodes.positive],\n      mimeTypes: [contentTypes.json],\n    });\n  }\n\n  /** @internal */\n  public override getNegativeResponse() {\n    return normalize(this.#negative, {\n      variant: \"negative\",\n      args: [],\n      statusCodes: [defaultStatusCodes.negative],\n      mimeTypes: [contentTypes.json],\n    });\n  }\n}\n\nexport const defaultResultHandler = new ResultHandler({\n  positive: (output) => {\n    const responseSchema = z.object({\n      status: z.literal(\"success\"),\n      data: output,\n    });\n    const { examples } = globalRegistry.get(output) || {}; // pulling down:\n    if (examples?.length) {\n      globalRegistry.add(responseSchema, {\n        examples: examples.map((data) => ({\n          status: \"success\" as const,\n          data,\n        })),\n      });\n    }\n    return responseSchema;\n  },\n  negative: z\n    .object({\n      status: z.literal(\"error\"),\n      error: z.object({ message: z.string() }),\n    })\n    .example({\n      status: \"error\",\n      error: { message: \"Sample error message\" },\n    }),\n  handler: ({ error, input, output, request, response, logger }) => {\n    if (error) {\n      const httpError = ensureHttpError(error);\n      logServerError(httpError, logger, request, input);\n      return void response\n        .status(httpError.statusCode)\n        .set(httpError.headers)\n        .json({\n          status: \"error\",\n          error: { message: getPublicErrorMessage(httpError) },\n        });\n    }\n    response\n      .status(defaultStatusCodes.positive)\n      .json({ status: \"success\", data: output });\n  },\n});\n\n/**\n * @deprecated Resist the urge of using it: this handler is designed only to simplify the migration of legacy APIs.\n * @desc Responding with array is a bad practice keeping your endpoints from evolving without breaking changes.\n * @desc This handler expects your endpoint to have the property 'items' in the output object schema\n * */\nexport const arrayResultHandler = new ResultHandler({\n  positive: (output) => {\n    const responseSchema =\n      output instanceof z.ZodObject &&\n      \"items\" in output.shape &&\n      output.shape.items instanceof z.ZodArray\n        ? output.shape.items\n        : z.array(z.any());\n    if (globalRegistry.get(responseSchema)?.examples?.length)\n      return responseSchema; // has examples on the items, or pull down:\n    const examples = globalRegistry\n      .get(output)\n      ?.examples?.filter(\n        (example): example is { items: unknown[] } =>\n          isObject(example) &&\n          \"items\" in example &&\n          Array.isArray(example.items),\n      )\n      .map((example) => example.items);\n    if (examples?.length) {\n      const current = responseSchema.meta();\n      globalRegistry\n        .remove(responseSchema) // reassign to avoid cloning\n        .add(responseSchema, { ...current, examples });\n    }\n    return responseSchema;\n  },\n  negative: {\n    schema: z.string().example(\"Sample error message\"),\n    mimeType: \"text/plain\",\n  },\n  handler: ({ response, output, error, logger, request, input }) => {\n    if (error) {\n      const httpError = ensureHttpError(error);\n      logServerError(httpError, logger, request, input);\n      return void response\n        .status(httpError.statusCode)\n        .type(\"text/plain\")\n        .send(getPublicErrorMessage(httpError));\n    }\n    if (\"items\" in output && Array.isArray(output.items)) {\n      return void response\n        .status(defaultStatusCodes.positive)\n        .json(output.items);\n    }\n    throw new Error(\"Property 'items' is missing in the endpoint output\");\n  },\n});\n","import { Request, Response } from \"express\";\nimport { z } from \"zod\";\nimport {\n  EmptyObject,\n  emptySchema,\n  EmptySchema,\n  FlatObject,\n  Tag,\n} from \"./common-helpers\";\nimport { Endpoint, Handler } from \"./endpoint\";\nimport {\n  IOSchema,\n  FinalInputSchema,\n  Extension,\n  ensureExtension,\n  makeFinalInputSchema,\n} from \"./io-schema\";\nimport { ClientMethod, Method } from \"./method\";\nimport {\n  AbstractMiddleware,\n  ExpressMiddleware,\n  Middleware,\n} from \"./middleware\";\nimport {\n  AbstractResultHandler,\n  arrayResultHandler,\n  defaultResultHandler,\n} from \"./result-handler\";\n\ninterface BuildProps<\n  IN extends IOSchema,\n  OUT extends IOSchema | z.ZodVoid,\n  MIN extends IOSchema | undefined,\n  OPT extends FlatObject,\n  SCO extends string,\n> {\n  /**\n   * @desc Input schema of the Endpoint, combining properties from all the enabled input sources (path params, headers)\n   * @default z.object({})\n   * @see defaultInputSources\n   * */\n  input?: IN;\n  /** @desc The schema by which the returns of the Endpoint handler is validated */\n  output: OUT;\n  /** @desc The Endpoint handler receiving the validated inputs, returns of added Middlewares (options) and a logger */\n  handler: Handler<z.output<FinalInputSchema<MIN, IN>>, z.input<OUT>, OPT>;\n  /** @desc The operation description for the generated Documentation */\n  description?: string;\n  /** @desc The operation summary for the generated Documentation (50 symbols max) */\n  shortDescription?: string;\n  /** @desc The operation ID for the generated Documentation (must be unique) */\n  operationId?: string | ((method: ClientMethod) => string);\n  /**\n   * @desc HTTP method(s) this endpoint can handle\n   * @default \"get\" unless the Endpoint is assigned within DependsOnMethod\n   * @see DependsOnMethod\n   * */\n  method?: Method | [Method, ...Method[]];\n  /**\n   * @desc Scope(s) from the list of the ones defined by the added Middlewares having \"oauth2\" security type\n   * @see OAuth2Security\n   * */\n  scope?: SCO | SCO[];\n  /**\n   * @desc Tag(s) for generating Documentation. For establishing constraints:\n   * @see TagOverrides\n   * */\n  tag?: Tag | Tag[];\n  /** @desc Marks the operation deprecated in the generated Documentation */\n  deprecated?: boolean;\n}\n\nexport class EndpointsFactory<\n  IN extends IOSchema | undefined = undefined,\n  OUT extends FlatObject = EmptyObject,\n  SCO extends string = string,\n> {\n  protected schema = undefined as IN;\n  protected middlewares: AbstractMiddleware[] = [];\n  constructor(protected resultHandler: AbstractResultHandler) {}\n\n  #extend<\n    AIN extends IOSchema | undefined,\n    AOUT extends FlatObject,\n    ASCO extends string,\n  >(middleware: Middleware<OUT, AOUT, ASCO, AIN>) {\n    const factory = new EndpointsFactory<\n      Extension<IN, AIN>,\n      OUT & AOUT,\n      SCO & ASCO\n    >(this.resultHandler);\n    factory.middlewares = this.middlewares.concat(middleware);\n    factory.schema = ensureExtension(this.schema, middleware.schema);\n    return factory;\n  }\n\n  public addMiddleware<\n    AOUT extends FlatObject,\n    ASCO extends string,\n    AIN extends IOSchema | undefined = undefined,\n  >(\n    subject:\n      | Middleware<OUT, AOUT, ASCO, AIN>\n      | ConstructorParameters<typeof Middleware<OUT, AOUT, ASCO, AIN>>[0],\n  ) {\n    return this.#extend(\n      subject instanceof Middleware ? subject : new Middleware(subject),\n    );\n  }\n\n  public use = this.addExpressMiddleware;\n\n  public addExpressMiddleware<\n    R extends Request,\n    S extends Response,\n    AOUT extends FlatObject = EmptyObject,\n  >(...params: ConstructorParameters<typeof ExpressMiddleware<R, S, AOUT>>) {\n    return this.#extend(new ExpressMiddleware(...params));\n  }\n\n  public addOptions<AOUT extends FlatObject>(getOptions: () => Promise<AOUT>) {\n    return this.#extend(new Middleware({ handler: getOptions }));\n  }\n\n  public build<BOUT extends IOSchema, BIN extends IOSchema = EmptySchema>({\n    input = emptySchema as unknown as BIN,\n    output: outputSchema,\n    operationId,\n    scope,\n    tag,\n    method,\n    ...rest\n  }: BuildProps<BIN, BOUT, IN, OUT, SCO>) {\n    const { middlewares, resultHandler } = this;\n    const methods = typeof method === \"string\" ? [method] : method;\n    const getOperationId =\n      typeof operationId === \"function\"\n        ? operationId\n        : (mtd: ClientMethod) =>\n            operationId && `${operationId}${mtd === \"head\" ? \"__HEAD\" : \"\"}`; // ensure non-breaking change\n    const scopes = typeof scope === \"string\" ? [scope] : scope || [];\n    const tags = typeof tag === \"string\" ? [tag] : tag || [];\n    return new Endpoint({\n      ...rest,\n      middlewares,\n      outputSchema,\n      resultHandler,\n      scopes,\n      tags,\n      methods,\n      getOperationId,\n      inputSchema: makeFinalInputSchema(this.schema, input),\n    });\n  }\n\n  /** @desc shorthand for returning {} while having output schema z.object({}) */\n  public buildVoid<BIN extends IOSchema = EmptySchema>({\n    handler,\n    ...rest\n  }: Omit<BuildProps<BIN, z.ZodVoid, IN, OUT, SCO>, \"output\">) {\n    return this.build({\n      ...rest,\n      output: emptySchema,\n      handler: async (props) => {\n        await handler(props);\n        return {};\n      },\n    });\n  }\n}\n\nexport const defaultEndpointsFactory = new EndpointsFactory(\n  defaultResultHandler,\n);\n\n/**\n * @deprecated Resist the urge of using it: this factory is designed only to simplify the migration of legacy APIs.\n * @desc Responding with array is a bad practice keeping your endpoints from evolving without breaking changes.\n * @desc The result handler of this factory expects your endpoint to have the property 'items' in the output schema\n */\nexport const arrayEndpointsFactory = new EndpointsFactory(arrayResultHandler);\n","import { Ansis, blue, green, hex, red, cyanBright } from \"ansis\";\nimport * as R from \"ramda\";\nimport { isObject } from \"./common-helpers\";\n\nexport const styles = {\n  debug: blue,\n  info: green,\n  warn: hex(\"#FFA500\"),\n  error: red,\n  ctx: cyanBright,\n} satisfies Record<string, Ansis>;\n\nconst severity = {\n  debug: 10,\n  info: 20,\n  warn: 30,\n  error: 40,\n} satisfies Record<string, number>;\n\nexport type Severity = keyof typeof severity;\n\n/** @desc You can use any logger compatible with this type. */\nexport type AbstractLogger = Record<\n  Severity,\n  (message: string, meta?: any) => any // eslint-disable-line @typescript-eslint/no-explicit-any -- for compatibility\n>;\n\n/**\n * @desc Using module augmentation approach you can set the type of the actual logger used\n * @example declare module \"express-zod-api\" { interface LoggerOverrides extends winston.Logger {} }\n * @link https://www.typescriptlang.org/docs/handbook/declaration-merging.html#module-augmentation\n * */\nexport interface LoggerOverrides {} // eslint-disable-line @typescript-eslint/no-empty-object-type -- for augmentation\n\nexport type ActualLogger = AbstractLogger & LoggerOverrides;\n\nexport const isLoggerInstance = (subject: unknown): subject is AbstractLogger =>\n  isObject(subject) &&\n  Object.keys(severity).some((method) => method in subject);\n\nexport const isSeverity = (subject: PropertyKey): subject is Severity =>\n  subject in severity;\n\nexport const isHidden = (subject: Severity, gate: Severity) =>\n  severity[subject] < severity[gate];\n\n/** @link https://tc39.es/ecma402/#table-sanctioned-single-unit-identifiers */\ntype TimeUnit =\n  | \"nanosecond\"\n  | \"microsecond\"\n  | \"millisecond\"\n  | \"second\"\n  | \"minute\";\n\nconst _makeNumberFormat = (unit: TimeUnit, fraction = 0) =>\n  Intl.NumberFormat(undefined, {\n    useGrouping: false,\n    minimumFractionDigits: 0,\n    maximumFractionDigits: fraction,\n    style: \"unit\",\n    unitDisplay: \"long\",\n    unit,\n  });\nexport const makeNumberFormat = R.memoizeWith(\n  (unit, fraction) => `${unit}${fraction}`,\n  _makeNumberFormat,\n);\n\nexport const formatDuration = (ms: number) => {\n  if (ms < 1e-6) return makeNumberFormat(\"nanosecond\", 3).format(ms / 1e-6);\n  if (ms < 1e-3) return makeNumberFormat(\"nanosecond\").format(ms / 1e-6);\n  if (ms < 1) return makeNumberFormat(\"microsecond\").format(ms / 1e-3);\n  if (ms < 1e3) return makeNumberFormat(\"millisecond\").format(ms);\n  if (ms < 6e4) return makeNumberFormat(\"second\", 2).format(ms / 1e3);\n  return makeNumberFormat(\"minute\", 2).format(ms / 6e4);\n};\n","import ansis from \"ansis\";\nimport { inspect } from \"node:util\";\nimport { performance } from \"node:perf_hooks\";\nimport { FlatObject, isProduction } from \"./common-helpers\";\nimport {\n  AbstractLogger,\n  formatDuration,\n  isHidden,\n  Severity,\n  styles,\n} from \"./logger-helpers\";\n\ninterface Context extends FlatObject {\n  requestId?: string;\n}\n\nexport interface BuiltinLoggerConfig {\n  /**\n   * @desc The minimal severity to log or \"silent\" to disable logging\n   * @example \"debug\" also enables pretty output for inspected entities\n   * */\n  level: \"silent\" | \"warn\" | \"info\" | \"debug\";\n  /** @desc Enables colors on printed severity and inspected entities */\n  color: boolean;\n  /**\n   * @desc Control how deeply entities should be inspected\n   * @example null\n   * @example Infinity\n   * */\n  depth: number | null;\n  /**\n   * @desc Context: the metadata applicable for each logged entry, used by .child() method\n   * @see childLoggerProvider\n   * */\n  ctx: Context;\n}\n\ninterface ProfilerOptions {\n  message: string;\n  /** @default \"debug\" */\n  severity?: Severity | ((ms: number) => Severity);\n  /** @default formatDuration - adaptive units and limited fraction */\n  formatter?: (ms: number) => string | number;\n}\n\n/** @desc Built-in console logger with optional colorful inspections */\nexport class BuiltinLogger implements AbstractLogger {\n  protected readonly config: BuiltinLoggerConfig;\n\n  /** @example new BuiltinLogger({ level: \"debug\", color: true, depth: 4 }) */\n  public constructor({\n    color = ansis.isSupported(),\n    level = isProduction() ? \"warn\" : \"debug\",\n    depth = 2,\n    ctx = {},\n  }: Partial<BuiltinLoggerConfig> = {}) {\n    this.config = { color, level, depth, ctx };\n  }\n\n  protected format(subject: unknown) {\n    const { depth, color: colors, level } = this.config;\n    return inspect(subject, {\n      depth,\n      colors,\n      breakLength: level === \"debug\" ? 80 : Infinity,\n      compact: level === \"debug\" ? 3 : true,\n    });\n  }\n\n  protected print(method: Severity, message: string, meta?: unknown) {\n    const {\n      level,\n      ctx: { requestId, ...ctx },\n      color: hasColor,\n    } = this.config;\n    if (level === \"silent\" || isHidden(method, level)) return;\n    const output: string[] = [new Date().toISOString()];\n    if (requestId) output.push(hasColor ? styles.ctx(requestId) : requestId);\n    output.push(\n      hasColor ? `${styles[method](method)}:` : `${method}:`,\n      message,\n    );\n    if (meta !== undefined) output.push(this.format(meta));\n    if (Object.keys(ctx).length > 0) output.push(this.format(ctx));\n    console.log(output.join(\" \"));\n  }\n\n  public debug(message: string, meta?: unknown) {\n    this.print(\"debug\", message, meta);\n  }\n\n  public info(message: string, meta?: unknown) {\n    this.print(\"info\", message, meta);\n  }\n\n  public warn(message: string, meta?: unknown) {\n    this.print(\"warn\", message, meta);\n  }\n\n  public error(message: string, meta?: unknown) {\n    this.print(\"error\", message, meta);\n  }\n\n  public child(ctx: Context) {\n    return new BuiltinLogger({ ...this.config, ctx });\n  }\n\n  /**\n   * @desc The argument used for instance created by .child() method\n   * @see ChildLoggerProvider\n   * */\n  public get ctx() {\n    return this.config.ctx;\n  }\n\n  /** @desc Measures the duration until you invoke the returned callback */\n  public profile(message: string): () => void;\n  public profile(options: ProfilerOptions): () => void;\n  public profile(subject: string | ProfilerOptions) {\n    const start = performance.now();\n    return () => {\n      const duration = performance.now() - start;\n      const {\n        message,\n        severity = \"debug\",\n        formatter = formatDuration,\n      } = typeof subject === \"object\" ? subject : { message: subject };\n      this.print(\n        typeof severity === \"function\" ? severity(duration) : severity,\n        message,\n        formatter(duration),\n      );\n    };\n  }\n}\n","import * as R from \"ramda\";\nimport { AbstractEndpoint } from \"./endpoint\";\nimport { Method } from \"./method\";\nimport { Routable } from \"./routable\";\n\nexport class DependsOnMethod extends Routable {\n  readonly #endpoints: ConstructorParameters<typeof DependsOnMethod>[0];\n\n  constructor(endpoints: Partial<Record<Method, AbstractEndpoint>>) {\n    super();\n    this.#endpoints = endpoints;\n  }\n\n  /**\n   * @desc [method, endpoint]\n   * @internal\n   * */\n  public get entries() {\n    const nonempty = R.filter(\n      (pair): pair is [Method, AbstractEndpoint] => Boolean(pair[1]),\n      Object.entries(this.#endpoints),\n    );\n    return Object.freeze(nonempty);\n  }\n\n  public override deprecated() {\n    const deprecatedEndpoints = Object.entries(this.#endpoints).reduce(\n      (agg, [method, endpoint]) =>\n        Object.assign(agg, { [method]: endpoint.deprecated() }),\n      {} as ConstructorParameters<typeof DependsOnMethod>[0],\n    );\n    return new DependsOnMethod(deprecatedEndpoints) as this;\n  }\n}\n","import express from \"express\";\n\ntype OriginalStatic = typeof express.static;\nexport type StaticHandler = ReturnType<OriginalStatic>;\n\nexport class ServeStatic {\n  readonly #params: Parameters<OriginalStatic>;\n\n  constructor(...params: Parameters<OriginalStatic>) {\n    this.#params = params;\n  }\n\n  /** @internal */\n  public apply(\n    path: string,\n    cb: (path: string, handler: StaticHandler) => void,\n  ): void {\n    return cb(path, express.static(...this.#params));\n  }\n}\n","import { MissingPeerError } from \"./errors\";\n\nexport const loadPeer = async <T>(\n  moduleName: string,\n  moduleExport: string = \"default\",\n): Promise<T> => {\n  try {\n    return (await import(moduleName))[moduleExport];\n  } catch {}\n  throw new MissingPeerError(moduleName);\n};\n","import * as R from \"ramda\";\nimport { combinations, FlatObject, isObject } from \"./common-helpers\";\nimport type { z } from \"zod\";\n\nconst isJsonObjectSchema = (\n  subject: z.core.JSONSchema.BaseSchema,\n): subject is z.core.JSONSchema.ObjectSchema => subject.type === \"object\";\n\nconst propsMerger = R.mergeDeepWith((a: unknown, b: unknown) => {\n  if (Array.isArray(a) && Array.isArray(b)) return R.concat(a, b);\n  if (a === b) return b;\n  throw new Error(\"Can not flatten properties\", { cause: { a, b } });\n});\n\nconst canMerge = R.pipe(\n  Object.keys,\n  R.without([\n    \"type\",\n    \"properties\",\n    \"required\",\n    \"examples\",\n    \"description\",\n    \"additionalProperties\",\n  ] satisfies Array<keyof z.core.JSONSchema.ObjectSchema>),\n  R.isEmpty,\n);\n\nconst nestOptional = R.pair(true);\n\nexport const flattenIO = (\n  jsonSchema: z.core.JSONSchema.BaseSchema,\n  mode: \"coerce\" | \"throw\" = \"coerce\",\n) => {\n  const stack = [R.pair(false, jsonSchema)]; // [isOptional, JSON Schema]\n  const flat: z.core.JSONSchema.ObjectSchema &\n    Required<Pick<z.core.JSONSchema.ObjectSchema, \"properties\">> = {\n    type: \"object\",\n    properties: {},\n  };\n  const flatRequired: string[] = [];\n  while (stack.length) {\n    const [isOptional, entry] = stack.shift()!;\n    if (entry.description) flat.description ??= entry.description;\n    if (entry.allOf) {\n      stack.push(\n        ...entry.allOf.map((one) => {\n          if (mode === \"throw\" && !(one.type === \"object\" && canMerge(one)))\n            throw new Error(\"Can not merge\");\n          return R.pair(isOptional, one);\n        }),\n      );\n    }\n    if (entry.anyOf) stack.push(...R.map(nestOptional, entry.anyOf));\n    if (entry.oneOf) stack.push(...R.map(nestOptional, entry.oneOf));\n    if (entry.examples?.length) {\n      if (isOptional) {\n        flat.examples = R.concat(flat.examples || [], entry.examples);\n      } else {\n        flat.examples = combinations(\n          flat.examples?.filter(isObject) || [],\n          entry.examples.filter(isObject),\n          ([a, b]) => R.mergeDeepRight(a, b),\n        );\n      }\n    }\n    if (!isJsonObjectSchema(entry)) continue;\n    stack.push([isOptional, { examples: pullRequestExamples(entry) }]);\n    if (entry.properties) {\n      flat.properties = (mode === \"throw\" ? propsMerger : R.mergeDeepRight)(\n        flat.properties,\n        entry.properties,\n      );\n      if (!isOptional && entry.required) flatRequired.push(...entry.required);\n    }\n    if (isObject(entry.propertyNames)) {\n      const keys: string[] = [];\n      if (typeof entry.propertyNames.const === \"string\")\n        keys.push(entry.propertyNames.const);\n      if (entry.propertyNames.enum) {\n        keys.push(\n          ...entry.propertyNames.enum.filter((one) => typeof one === \"string\"),\n        );\n      }\n      const value = { ...Object(entry.additionalProperties) }; // it can be bool\n      for (const key of keys) flat.properties[key] ??= value;\n      if (!isOptional) flatRequired.push(...keys);\n    }\n  }\n  if (flatRequired.length) flat.required = [...new Set(flatRequired)];\n  return flat;\n};\n\n/** @see pullResponseExamples */\nexport const pullRequestExamples = (subject: z.core.JSONSchema.ObjectSchema) =>\n  Object.entries(subject.properties || {}).reduce<FlatObject[]>(\n    (acc, [key, prop]) => {\n      const { examples = [] } = isObject(prop) ? prop : {};\n      return combinations(acc, examples.map(R.objOf(key)), ([left, right]) => ({\n        ...left,\n        ...right,\n      }));\n    },\n    [],\n  );\n","import { z } from \"zod\";\nimport { responseVariants } from \"./api-response\";\nimport { FlatObject, getRoutePathParams } from \"./common-helpers\";\nimport { contentTypes } from \"./content-type\";\nimport { findJsonIncompatible } from \"./deep-checks\";\nimport { AbstractEndpoint } from \"./endpoint\";\nimport { flattenIO } from \"./json-schema-helpers\";\nimport { ActualLogger } from \"./logger-helpers\";\n\nexport class Diagnostics {\n  #verifiedEndpoints = new WeakSet<AbstractEndpoint>();\n  #verifiedPaths = new WeakMap<\n    AbstractEndpoint,\n    { flat: ReturnType<typeof flattenIO>; paths: string[] }\n  >();\n\n  constructor(protected logger: ActualLogger) {}\n\n  public checkSchema(endpoint: AbstractEndpoint, ctx: FlatObject): void {\n    if (this.#verifiedEndpoints.has(endpoint)) return;\n    for (const dir of [\"input\", \"output\"] as const) {\n      const stack = [\n        z.toJSONSchema(endpoint[`${dir}Schema`], { unrepresentable: \"any\" }),\n      ];\n      while (stack.length > 0) {\n        const entry = stack.shift()!;\n        if (entry.type && entry.type !== \"object\")\n          this.logger.warn(`Endpoint ${dir} schema is not object-based`, ctx);\n        for (const prop of [\"allOf\", \"oneOf\", \"anyOf\"] as const)\n          if (entry[prop]) stack.push(...entry[prop]);\n      }\n    }\n    if (endpoint.requestType === \"json\") {\n      const reason = findJsonIncompatible(endpoint.inputSchema, \"input\");\n      if (reason) {\n        this.logger.warn(\n          \"The final input schema of the endpoint contains an unsupported JSON payload type.\",\n          Object.assign(ctx, { reason }),\n        );\n      }\n    }\n    for (const variant of responseVariants) {\n      for (const { mimeTypes, schema } of endpoint.getResponses(variant)) {\n        if (!mimeTypes?.includes(contentTypes.json)) continue;\n        const reason = findJsonIncompatible(schema, \"output\");\n        if (reason) {\n          this.logger.warn(\n            `The final ${variant} response schema of the endpoint contains an unsupported JSON payload type.`,\n            Object.assign(ctx, { reason }),\n          );\n        }\n      }\n    }\n    this.#verifiedEndpoints.add(endpoint);\n  }\n\n  public checkPathParams(\n    path: string,\n    endpoint: AbstractEndpoint,\n    ctx: FlatObject,\n  ): void {\n    const ref = this.#verifiedPaths.get(endpoint);\n    if (ref?.paths.includes(path)) return;\n    const params = getRoutePathParams(path);\n    if (params.length === 0) return; // next statement can be expensive\n    const flat =\n      ref?.flat ||\n      flattenIO(\n        z.toJSONSchema(endpoint.inputSchema, {\n          unrepresentable: \"any\",\n          io: \"input\",\n        }),\n      );\n    for (const param of params) {\n      if (param in flat.properties) continue;\n      this.logger.warn(\n        \"The input schema of the endpoint is most likely missing the parameter of the path it's assigned to.\",\n        Object.assign(ctx, { path, param }),\n      );\n    }\n    if (ref) ref.paths.push(path);\n    else this.#verifiedPaths.set(endpoint, { flat, paths: [path] });\n  }\n}\n","import { DependsOnMethod } from \"./depends-on-method\";\nimport { AbstractEndpoint } from \"./endpoint\";\nimport { RoutingError } from \"./errors\";\nimport { ClientMethod, isMethod, Method } from \"./method\";\nimport { Routing } from \"./routing\";\nimport { ServeStatic, StaticHandler } from \"./serve-static\";\n\nexport type OnEndpoint<M extends string = Method> = (\n  method: M,\n  path: string,\n  endpoint: AbstractEndpoint,\n) => void;\n\n/** Calls the given hook with HEAD each time it's called with GET method */\nexport const withHead =\n  (onEndpoint: OnEndpoint<ClientMethod>): OnEndpoint =>\n  (method, ...rest) => {\n    onEndpoint(method, ...rest);\n    if (method === \"get\") onEndpoint(\"head\", ...rest);\n  };\n\ninterface RoutingWalkerParams {\n  routing: Routing;\n  onEndpoint: OnEndpoint;\n  onStatic?: (path: string, handler: StaticHandler) => void;\n}\n\n/** @example delete /v1/user/retrieve —> [/v1/user/retrieve, delete] */\nconst detachMethod = (subject: string): [string, Method?] => {\n  const [method, rest] = subject.trim().split(/ (.+)/, 2);\n  if (rest && isMethod(method)) return [rest, method];\n  return [subject];\n};\n\n/** Removes whitespace and slashes from the edges of the string */\nconst trimPath = (path: string) =>\n  path.trim().split(\"/\").filter(Boolean).join(\"/\");\n\nconst processEntries = (subject: Routing, parent?: string) =>\n  Object.entries(subject).map<[string, Routing[string], Method?]>(\n    ([_key, item]) => {\n      const [segment, method] = detachMethod(_key);\n      const path = [parent || \"\"].concat(trimPath(segment) || []).join(\"/\");\n      return [path, item, method];\n    },\n  );\n\nconst prohibit = (method: Method, path: string) => {\n  throw new RoutingError(\n    \"Route with explicit method can only be assigned with Endpoint\",\n    method,\n    path,\n  );\n};\n\nconst checkMethodSupported = (\n  method: Method,\n  path: string,\n  methods?: ReadonlyArray<Method>,\n) => {\n  if (!methods || methods.includes(method)) return;\n  throw new RoutingError(\n    `Method ${method} is not supported by the assigned Endpoint.`,\n    method,\n    path,\n  );\n};\n\nconst checkDuplicate = (method: Method, path: string, visited: Set<string>) => {\n  const key = `${method} ${path}`;\n  if (visited.has(key))\n    throw new RoutingError(\"Route has a duplicate\", method, path);\n  visited.add(key);\n};\n\nexport const walkRouting = ({\n  routing,\n  onEndpoint,\n  onStatic,\n}: RoutingWalkerParams) => {\n  const stack = processEntries(routing);\n  const visited = new Set<string>();\n  while (stack.length) {\n    const [path, element, explicitMethod] = stack.shift()!;\n    if (element instanceof AbstractEndpoint) {\n      if (explicitMethod) {\n        checkDuplicate(explicitMethod, path, visited);\n        checkMethodSupported(explicitMethod, path, element.methods);\n        onEndpoint(explicitMethod, path, element);\n      } else {\n        const { methods = [\"get\"] } = element;\n        for (const method of methods) {\n          checkDuplicate(method, path, visited);\n          onEndpoint(method, path, element);\n        }\n      }\n    } else {\n      if (explicitMethod) prohibit(explicitMethod, path);\n      if (element instanceof ServeStatic) {\n        if (onStatic) element.apply(path, onStatic);\n      } else if (element instanceof DependsOnMethod) {\n        for (const [method, endpoint] of element.entries) {\n          const { methods } = endpoint;\n          checkDuplicate(method, path, visited);\n          checkMethodSupported(method, path, methods);\n          onEndpoint(method, path, endpoint);\n        }\n      } else {\n        stack.unshift(...processEntries(element, path));\n      }\n    }\n  }\n};\n","import { IRouter, RequestHandler } from \"express\";\nimport createHttpError from \"http-errors\";\nimport { isProduction } from \"./common-helpers\";\nimport { CommonConfig } from \"./config-type\";\nimport { ContentType } from \"./content-type\";\nimport { DependsOnMethod } from \"./depends-on-method\";\nimport { Diagnostics } from \"./diagnostics\";\nimport { AbstractEndpoint } from \"./endpoint\";\nimport { CORSMethod, isMethod } from \"./method\";\nimport { OnEndpoint, walkRouting } from \"./routing-walker\";\nimport { ServeStatic } from \"./serve-static\";\nimport { GetLogger } from \"./server-helpers\";\nimport * as R from \"ramda\";\n\n/**\n * @example { v1: { books: { \":bookId\": getBookEndpoint } } }\n * @example { \"v1/books/:bookId\": getBookEndpoint }\n * @example { \"get /v1/books/:bookId\": getBookEndpoint }\n * @example { v1: { \"patch /books/:bookId\": changeBookEndpoint } }\n * */\nexport interface Routing {\n  [K: string]: Routing | DependsOnMethod | AbstractEndpoint | ServeStatic;\n}\n\nexport type Parsers = Partial<Record<ContentType, RequestHandler[]>>;\n\ninterface InitProps {\n  app: IRouter;\n  getLogger: GetLogger;\n  config: CommonConfig;\n  routing: Routing;\n  parsers?: Parsers;\n}\n\nconst lineUp = (methods: CORSMethod[]) =>\n  methods // auxiliary methods go last\n    .sort((a, b) => +isMethod(b) - +isMethod(a) || a.localeCompare(b))\n    .join(\", \")\n    .toUpperCase();\n\n/** @link https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/405 */\nexport const createWrongMethodHandler =\n  (allowedMethods: CORSMethod[]): RequestHandler =>\n  ({ method }, res, next) => {\n    const Allow = lineUp(allowedMethods);\n    res.set({ Allow }); // in case of a custom errorHandler configured that does not care about headers in error\n    const error = createHttpError(405, `${method} is not allowed`, {\n      headers: { Allow },\n    });\n    next(error);\n  };\n\nconst makeCorsHeaders = (accessMethods: CORSMethod[]) => ({\n  \"Access-Control-Allow-Origin\": \"*\",\n  \"Access-Control-Allow-Methods\": lineUp(accessMethods),\n  \"Access-Control-Allow-Headers\": \"content-type\",\n});\n\ntype Siblings = Map<CORSMethod, [RequestHandler[], AbstractEndpoint]>;\n\n/** This fn exists to reduce the complexity of initRouting and to ensure the disposal of Diagnostics ASAP */\nconst collectSiblings = ({\n  app,\n  getLogger,\n  config,\n  routing,\n  parsers,\n}: InitProps) => {\n  const doc = isProduction() ? undefined : new Diagnostics(getLogger());\n  const familiar = new Map<string, Siblings>();\n  const onEndpoint: OnEndpoint = (method, path, endpoint) => {\n    doc?.checkSchema(endpoint, { path, method });\n    doc?.checkPathParams(path, endpoint, { method });\n    const matchingParsers = parsers?.[endpoint.requestType] || [];\n    const value = R.pair(matchingParsers, endpoint);\n    if (!familiar.has(path))\n      familiar.set(path, new Map(config.cors ? [[\"options\", value]] : []));\n    familiar.get(path)?.set(method, value);\n  };\n  walkRouting({ routing, onEndpoint, onStatic: app.use.bind(app) });\n  return familiar;\n};\n\nexport const initRouting = ({ app, config, getLogger, ...rest }: InitProps) => {\n  const familiar = collectSiblings({ app, getLogger, config, ...rest });\n  const deprioritized = new Map<string, RequestHandler>();\n  for (const [path, methods] of familiar) {\n    const accessMethods = Array.from(methods.keys());\n    /** @link https://github.com/RobinTail/express-zod-api/discussions/2791#discussioncomment-13745912 */\n    if (accessMethods.includes(\"get\")) accessMethods.push(\"head\");\n    for (const [method, [matchingParsers, endpoint]] of methods) {\n      const handlers = matchingParsers\n        .slice() // must be immutable\n        .concat(async (request, response) => {\n          const logger = getLogger(request);\n          return endpoint.execute({ request, response, logger, config });\n        });\n      if (config.cors) {\n        // issue #2706, must go before parsers:\n        handlers.unshift(async (request, response, next) => {\n          const logger = getLogger(request);\n          const defaultHeaders = makeCorsHeaders(accessMethods);\n          const headers =\n            typeof config.cors === \"function\"\n              ? await config.cors({ request, endpoint, logger, defaultHeaders })\n              : defaultHeaders;\n          response.set(headers);\n          next();\n        });\n      }\n      app[method](path, ...handlers);\n    }\n    if (config.wrongMethodBehavior === 404) continue;\n    deprioritized.set(path, createWrongMethodHandler(accessMethods));\n  }\n  for (const [path, handler] of deprioritized) app.all(path, handler);\n};\n","import http from \"node:http\";\nimport type { Socket, Server } from \"node:net\";\n\n/** faster implementation than instanceof for using only the checked methods */\nexport const hasResponse = (\n  socket: Socket,\n): socket is typeof socket & {\n  _httpMessage: Pick<http.ServerResponse, \"headersSent\" | \"setHeader\">;\n} =>\n  \"_httpMessage\" in socket &&\n  typeof socket._httpMessage === \"object\" &&\n  socket._httpMessage !== null &&\n  \"headersSent\" in socket._httpMessage &&\n  typeof socket._httpMessage.headersSent === \"boolean\" &&\n  \"setHeader\" in socket._httpMessage &&\n  typeof socket._httpMessage.setHeader === \"function\";\n\n/** 6.88x faster than instanceof */\nexport const hasHttpServer = (socket: Socket): boolean =>\n  \"server\" in socket &&\n  typeof socket.server === \"object\" &&\n  socket.server !== null &&\n  \"close\" in socket.server &&\n  typeof socket.server.close === \"function\";\n\n/** 6.30x faster than instanceof TLSSocket */\nexport const isEncrypted = (socket: Socket): boolean =>\n  \"encrypted\" in socket &&\n  typeof socket.encrypted === \"boolean\" &&\n  socket.encrypted;\n\nexport const weAreClosed: http.RequestListener = ({}, res) =>\n  void (!res.headersSent && res.setHeader(\"connection\", \"close\"));\n\nexport const closeAsync = (server: Server) =>\n  new Promise<void>(\n    (resolve, reject) =>\n      void server.close((error) => (error ? reject(error) : resolve())),\n  );\n","import http from \"node:http\";\nimport https from \"node:https\";\nimport { setInterval } from \"node:timers/promises\";\nimport type { Socket } from \"node:net\";\nimport type { ActualLogger } from \"./logger-helpers\";\nimport {\n  closeAsync,\n  hasHttpServer,\n  hasResponse,\n  isEncrypted,\n  weAreClosed,\n} from \"./graceful-helpers\";\n\nexport const monitor = (\n  servers: Array<http.Server | https.Server>,\n  { timeout = 1e3, logger }: { timeout?: number; logger?: ActualLogger } = {},\n) => {\n  let pending: Promise<PromiseSettledResult<void>[]> | undefined;\n  const sockets = new Set<Socket>();\n  const destroy = (socket: Socket) => void sockets.delete(socket.destroy());\n\n  const disconnect = (socket: Socket) =>\n    void (hasResponse(socket)\n      ? !socket._httpMessage.headersSent &&\n        socket._httpMessage.setHeader(\"connection\", \"close\")\n      : /* v8 ignore next -- unreachable */ destroy(socket));\n\n  const watch = (socket: Socket) =>\n    void (pending\n      ? /* v8 ignore next -- unstable */ socket.destroy()\n      : sockets.add(socket.once(\"close\", () => void sockets.delete(socket))));\n\n  for (const server of servers) // eslint-disable-next-line curly\n    for (const event of [\"connection\", \"secureConnection\"])\n      server.on(event, watch);\n\n  const workflow = async () => {\n    for (const server of servers) server.on(\"request\", weAreClosed);\n    logger?.info(\"Graceful shutdown\", { sockets: sockets.size, timeout });\n    for (const socket of sockets)\n      if (isEncrypted(socket) || hasHttpServer(socket)) disconnect(socket);\n    for await (const started of setInterval(10, Date.now()))\n      if (sockets.size === 0 || Date.now() - started >= timeout) break;\n    for (const socket of sockets) destroy(socket);\n    return Promise.allSettled(servers.map(closeAsync));\n  };\n\n  return { sockets, shutdown: () => (pending ??= workflow()) };\n};\n","import type fileUpload from \"express-fileupload\";\nimport { loadPeer } from \"./peer-helpers\";\nimport { AbstractResultHandler } from \"./result-handler\";\nimport { ActualLogger } from \"./logger-helpers\";\nimport { CommonConfig, ServerConfig } from \"./config-type\";\nimport { ErrorRequestHandler, RequestHandler, Request } from \"express\";\nimport createHttpError from \"http-errors\";\nimport { lastResortHandler } from \"./last-resort\";\nimport { ResultHandlerError } from \"./errors\";\nimport { ensureError } from \"./common-helpers\";\nimport { monitor } from \"./graceful-shutdown\";\nimport { name as self } from \"../package.json\";\n\nexport const localsID = Symbol.for(self);\n\ntype EquippedRequest = Request<\n  unknown,\n  unknown,\n  unknown,\n  unknown,\n  { [localsID]?: { logger: ActualLogger } }\n>;\n\n/** @desc Returns child logger for the given request (if configured) or the configured logger otherwise */\nexport type GetLogger = (request?: Request) => ActualLogger;\n\ninterface HandlerCreatorParams {\n  errorHandler: AbstractResultHandler;\n  getLogger: GetLogger;\n}\n\nexport const createCatcher =\n  ({ errorHandler, getLogger }: HandlerCreatorParams): ErrorRequestHandler =>\n  async (error, request, response, next) => {\n    if (!error) return next();\n    return errorHandler.execute({\n      error: ensureError(error),\n      request,\n      response,\n      input: null,\n      output: null,\n      options: {},\n      logger: getLogger(request),\n    });\n  };\n\nexport const createNotFoundHandler =\n  ({ errorHandler, getLogger }: HandlerCreatorParams): RequestHandler =>\n  async (request, response) => {\n    const error = createHttpError(\n      404,\n      `Can not ${request.method} ${request.path}`,\n    );\n    const logger = getLogger(request);\n    try {\n      await errorHandler.execute({\n        request,\n        response,\n        logger,\n        error,\n        input: null,\n        output: null,\n        options: {},\n      });\n    } catch (e) {\n      lastResortHandler({\n        response,\n        logger,\n        error: new ResultHandlerError(ensureError(e), error),\n      });\n    }\n  };\n\nexport const createUploadFailureHandler =\n  (error: Error): RequestHandler =>\n  (req, {}, next) => {\n    const failedFile = Object.values(req?.files || [])\n      .flat()\n      .find(({ truncated }) => truncated);\n    if (failedFile) return next(error);\n    next();\n  };\n\nexport const createUploadLogger = (\n  logger: ActualLogger,\n): Pick<Console, \"log\"> => ({ log: logger.debug.bind(logger) });\n\nexport const createUploadParsers = async ({\n  getLogger,\n  config,\n}: {\n  getLogger: GetLogger;\n  config: ServerConfig;\n}): Promise<RequestHandler[]> => {\n  const uploader = await loadPeer<typeof fileUpload>(\"express-fileupload\");\n  const { limitError, beforeUpload, ...options } = {\n    ...(typeof config.upload === \"object\" && config.upload),\n  };\n  const parsers: RequestHandler[] = [];\n  parsers.push(async (request, response, next) => {\n    const logger = getLogger(request);\n    await beforeUpload?.({ request, logger });\n    return uploader({\n      debug: true,\n      ...options,\n      abortOnLimit: false,\n      parseNested: true,\n      logger: createUploadLogger(logger),\n    })(request, response, next);\n  });\n  if (limitError) parsers.push(createUploadFailureHandler(limitError));\n  return parsers;\n};\n\nexport const moveRaw: RequestHandler = (req, {}, next) => {\n  if (Buffer.isBuffer(req.body)) req.body = { raw: req.body };\n  next();\n};\n\n/** @since v22.13 the access logging can be customized and disabled */\nexport const createLoggingMiddleware =\n  ({\n    logger: parent,\n    config: {\n      childLoggerProvider,\n      accessLogger = ({ method, path }, logger) =>\n        logger.debug(`${method}: ${path}`),\n    },\n  }: {\n    logger: ActualLogger;\n    config: CommonConfig;\n  }): RequestHandler =>\n  async (request, response, next) => {\n    const logger = (await childLoggerProvider?.({ request, parent })) || parent;\n    accessLogger?.(request, logger);\n    if (request.res)\n      (request as EquippedRequest).res!.locals[localsID] = { logger };\n    next();\n  };\n\nexport const makeGetLogger =\n  (fallback: ActualLogger): GetLogger =>\n  (request) =>\n    (request as EquippedRequest | undefined)?.res?.locals[localsID]?.logger ||\n    fallback;\n\nexport const installDeprecationListener = (logger: ActualLogger) =>\n  process.on(\"deprecation\", ({ message, namespace, name, stack }) =>\n    logger.warn(\n      `${name} (${namespace}): ${message}`,\n      stack.split(\"\\n\").slice(1),\n    ),\n  );\n\nexport const installTerminationListener = ({\n  servers,\n  logger,\n  options: { timeout, beforeExit, events = [\"SIGINT\", \"SIGTERM\"] },\n}: {\n  servers: Parameters<typeof monitor>[0];\n  options: Extract<ServerConfig[\"gracefulShutdown\"], object>;\n  logger: ActualLogger;\n}) => {\n  const graceful = monitor(servers, { logger, timeout });\n  const onTerm = async () => {\n    await graceful.shutdown();\n    await beforeExit?.();\n    process.exit();\n  };\n  for (const trigger of events) process.on(trigger, onTerm);\n};\n","import { Ansis, gray, hex, italic, whiteBright } from \"ansis\";\nimport { WriteStream } from \"node:tty\";\n\nexport const printStartupLogo = (stream: WriteStream) => {\n  if (stream.columns < 132) return;\n  const proud = italic(\"Proudly supports transgender community.\".padStart(109));\n  const slogan = italic(\n    \"Start your API server with I/O schema validation and custom middlewares in minutes.\".padStart(\n      109,\n    ),\n  );\n  const thanks = italic(\n    \"Thank you for choosing Express Zod API for your project.\".padStart(132),\n  );\n  const dedicationMessage = italic(\"for Sara\".padEnd(20));\n\n  const pink = hex(\"#F5A9B8\");\n  const blue = hex(\"#5BCEFA\");\n\n  const colors = new Array<Ansis>(14)\n    .fill(blue, 1, 3)\n    .fill(pink, 3, 5)\n    .fill(whiteBright, 5, 7)\n    .fill(pink, 7, 9)\n    .fill(blue, 9, 12)\n    .fill(gray, 12, 13);\n\n  const logo = `\n8888888888                                                          8888888888P              888             d8888 8888888b. 8888888\n888                                                                       d88P               888            d88888 888   Y88b  888\n888                                                                      d88P                888           d88P888 888    888  888\n8888888    888  888 88888b.  888d888 .d88b.  .d8888b  .d8888b           d88P    .d88b.   .d88888          d88P 888 888   d88P  888\n888        `Y8bd8P' 888 \"88b 888P\"  d8P  Y8b 88K      88K              d88P    d88\"\"88b d88\" 888         d88P  888 8888888P\"   888\n888          X88K   888  888 888    88888888 \"Y8888b. \"Y8888b.        d88P     888  888 888  888        d88P   888 888         888\n888        .d8\"\"8b. 888 d88P 888    Y8b.          X88      X88       d88P      Y88..88P Y88b 888       d8888888888 888         888\n8888888888 888  888 88888P\"  888     \"Y8888   88888P'  88888P'      d8888888888 \"Y88P\"   \"Y88888      d88P     888 888       8888888\n                    888\n                    888${proud}\n${dedicationMessage}888${slogan}\n${thanks}\n`;\n\n  stream.write(\n    logo\n      .split(\"\\n\")\n      .map((line, index) => (colors[index] ? colors[index](line) : line))\n      .join(\"\\n\"),\n  );\n};\n","import express from \"express\";\nimport type compression from \"compression\";\nimport http from \"node:http\";\nimport https from \"node:https\";\nimport { BuiltinLogger } from \"./builtin-logger\";\nimport {\n  AppConfig,\n  CommonConfig,\n  HttpConfig,\n  ServerConfig,\n} from \"./config-type\";\nimport { isLoggerInstance } from \"./logger-helpers\";\nimport { loadPeer } from \"./peer-helpers\";\nimport { defaultResultHandler } from \"./result-handler\";\nimport { Parsers, Routing, initRouting } from \"./routing\";\nimport {\n  createLoggingMiddleware,\n  createNotFoundHandler,\n  createCatcher,\n  createUploadParsers,\n  makeGetLogger,\n  installDeprecationListener,\n  moveRaw,\n  installTerminationListener,\n} from \"./server-helpers\";\nimport { printStartupLogo } from \"./startup-logo\";\n\nconst makeCommonEntities = (config: CommonConfig) => {\n  if (config.startupLogo !== false) printStartupLogo(process.stdout);\n  const errorHandler = config.errorHandler || defaultResultHandler;\n  const logger = isLoggerInstance(config.logger)\n    ? config.logger\n    : new BuiltinLogger(config.logger);\n  logger.debug(\"Running\", {\n    build: process.env.TSDOWN_BUILD || \"from sources\", // eslint-disable-line no-restricted-syntax -- substituted by TSDOWN\n    env: process.env.NODE_ENV || \"development\", // eslint-disable-line no-restricted-syntax -- intentionally for debug\n  });\n  installDeprecationListener(logger);\n  const loggingMiddleware = createLoggingMiddleware({ logger, config });\n  const getLogger = makeGetLogger(logger);\n  const commons = { getLogger, errorHandler };\n  const notFoundHandler = createNotFoundHandler(commons);\n  const catcher = createCatcher(commons);\n  return {\n    ...commons,\n    logger,\n    notFoundHandler,\n    catcher,\n    loggingMiddleware,\n  };\n};\n\nexport const attachRouting = (config: AppConfig, routing: Routing) => {\n  const { logger, getLogger, notFoundHandler, loggingMiddleware } =\n    makeCommonEntities(config);\n  initRouting({\n    app: config.app.use(loggingMiddleware),\n    routing,\n    getLogger,\n    config,\n  });\n  return { notFoundHandler, logger };\n};\n\nexport const createServer = async (config: ServerConfig, routing: Routing) => {\n  const { logger, getLogger, notFoundHandler, catcher, loggingMiddleware } =\n    makeCommonEntities(config);\n  const app = express().disable(\"x-powered-by\").use(loggingMiddleware);\n\n  if (config.compression) {\n    const compressor = await loadPeer<typeof compression>(\"compression\");\n    app.use(\n      compressor(\n        typeof config.compression === \"object\" ? config.compression : undefined,\n      ),\n    );\n  }\n  await config.beforeRouting?.({ app, getLogger });\n\n  const parsers: Parsers = {\n    json: [config.jsonParser || express.json()],\n    raw: [config.rawParser || express.raw(), moveRaw],\n    form: [config.formParser || express.urlencoded()],\n    upload: config.upload\n      ? await createUploadParsers({ config, getLogger })\n      : [],\n  };\n  initRouting({ app, routing, getLogger, config, parsers });\n  app.use(catcher, notFoundHandler);\n\n  const created: Array<http.Server | https.Server> = [];\n  const makeStarter =\n    (server: (typeof created)[number], subject: HttpConfig[\"listen\"]) => () =>\n      server.listen(subject, () => logger.info(\"Listening\", subject));\n\n  const starters: Array<ReturnType<typeof makeStarter>> = [];\n  if (config.http) {\n    const httpServer = http.createServer(app);\n    created.push(httpServer);\n    starters.push(makeStarter(httpServer, config.http.listen));\n  }\n  if (config.https) {\n    const httpsServer = https.createServer(config.https.options, app);\n    created.push(httpsServer);\n    starters.push(makeStarter(httpsServer, config.https.listen));\n  }\n  if (!created.length) logger.warn(\"No servers configured.\");\n\n  if (config.gracefulShutdown) {\n    installTerminationListener({\n      logger,\n      servers: created,\n      options: config.gracefulShutdown === true ? {} : config.gracefulShutdown,\n    });\n  }\n\n  return { app, logger, servers: starters.map((starter) => starter()) };\n};\n","const ALIAS = Symbol.for('yaml.alias');\nconst DOC = Symbol.for('yaml.document');\nconst MAP = Symbol.for('yaml.map');\nconst PAIR = Symbol.for('yaml.pair');\nconst SCALAR = Symbol.for('yaml.scalar');\nconst SEQ = Symbol.for('yaml.seq');\nconst NODE_TYPE = Symbol.for('yaml.node.type');\nconst isAlias = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === ALIAS;\nconst isDocument = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === DOC;\nconst isMap = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === MAP;\nconst isPair = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === PAIR;\nconst isScalar = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SCALAR;\nconst isSeq = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SEQ;\nfunction isCollection(node) {\n    if (node && typeof node === 'object')\n        switch (node[NODE_TYPE]) {\n            case MAP:\n            case SEQ:\n                return true;\n        }\n    return false;\n}\nfunction isNode(node) {\n    if (node && typeof node === 'object')\n        switch (node[NODE_TYPE]) {\n            case ALIAS:\n            case MAP:\n            case SCALAR:\n            case SEQ:\n                return true;\n        }\n    return false;\n}\nconst hasAnchor = (node) => (isScalar(node) || isCollection(node)) && !!node.anchor;\n\nexport { ALIAS, DOC, MAP, NODE_TYPE, PAIR, SCALAR, SEQ, hasAnchor, isAlias, isCollection, isDocument, isMap, isNode, isPair, isScalar, isSeq };\n","import { isDocument, isNode, isPair, isCollection, isMap, isSeq, isScalar, isAlias } from './nodes/identity.js';\n\nconst BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove node');\n/**\n * Apply a visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n *   - `key`: For sequence values and map `Pair`, the node's index in the\n *     collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n *     `null` for the root node.\n *   - `node`: The current node.\n *   - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n *   - `undefined` (default): Do nothing and continue\n *   - `visit.SKIP`: Do not visit the children of this node, continue with next\n *     sibling\n *   - `visit.BREAK`: Terminate traversal completely\n *   - `visit.REMOVE`: Remove the current node, then continue with the next one\n *   - `Node`: Replace the current node, then continue by visiting it\n *   - `number`: While iterating the items of a sequence or map, set the index\n *     of the next step. This is useful especially if the index of the current\n *     node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nfunction visit(node, visitor) {\n    const visitor_ = initVisitor(visitor);\n    if (isDocument(node)) {\n        const cd = visit_(null, node.contents, visitor_, Object.freeze([node]));\n        if (cd === REMOVE)\n            node.contents = null;\n    }\n    else\n        visit_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisit.SKIP = SKIP;\n/** Remove the current node */\nvisit.REMOVE = REMOVE;\nfunction visit_(key, node, visitor, path) {\n    const ctrl = callVisitor(key, node, visitor, path);\n    if (isNode(ctrl) || isPair(ctrl)) {\n        replaceNode(key, path, ctrl);\n        return visit_(key, ctrl, visitor, path);\n    }\n    if (typeof ctrl !== 'symbol') {\n        if (isCollection(node)) {\n            path = Object.freeze(path.concat(node));\n            for (let i = 0; i < node.items.length; ++i) {\n                const ci = visit_(i, node.items[i], visitor, path);\n                if (typeof ci === 'number')\n                    i = ci - 1;\n                else if (ci === BREAK)\n                    return BREAK;\n                else if (ci === REMOVE) {\n                    node.items.splice(i, 1);\n                    i -= 1;\n                }\n            }\n        }\n        else if (isPair(node)) {\n            path = Object.freeze(path.concat(node));\n            const ck = visit_('key', node.key, visitor, path);\n            if (ck === BREAK)\n                return BREAK;\n            else if (ck === REMOVE)\n                node.key = null;\n            const cv = visit_('value', node.value, visitor, path);\n            if (cv === BREAK)\n                return BREAK;\n            else if (cv === REMOVE)\n                node.value = null;\n        }\n    }\n    return ctrl;\n}\n/**\n * Apply an async visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n *   - `key`: For sequence values and map `Pair`, the node's index in the\n *     collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n *     `null` for the root node.\n *   - `node`: The current node.\n *   - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n *   - `Promise`: Must resolve to one of the following values\n *   - `undefined` (default): Do nothing and continue\n *   - `visit.SKIP`: Do not visit the children of this node, continue with next\n *     sibling\n *   - `visit.BREAK`: Terminate traversal completely\n *   - `visit.REMOVE`: Remove the current node, then continue with the next one\n *   - `Node`: Replace the current node, then continue by visiting it\n *   - `number`: While iterating the items of a sequence or map, set the index\n *     of the next step. This is useful especially if the index of the current\n *     node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nasync function visitAsync(node, visitor) {\n    const visitor_ = initVisitor(visitor);\n    if (isDocument(node)) {\n        const cd = await visitAsync_(null, node.contents, visitor_, Object.freeze([node]));\n        if (cd === REMOVE)\n            node.contents = null;\n    }\n    else\n        await visitAsync_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisitAsync.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisitAsync.SKIP = SKIP;\n/** Remove the current node */\nvisitAsync.REMOVE = REMOVE;\nasync function visitAsync_(key, node, visitor, path) {\n    const ctrl = await callVisitor(key, node, visitor, path);\n    if (isNode(ctrl) || isPair(ctrl)) {\n        replaceNode(key, path, ctrl);\n        return visitAsync_(key, ctrl, visitor, path);\n    }\n    if (typeof ctrl !== 'symbol') {\n        if (isCollection(node)) {\n            path = Object.freeze(path.concat(node));\n            for (let i = 0; i < node.items.length; ++i) {\n                const ci = await visitAsync_(i, node.items[i], visitor, path);\n                if (typeof ci === 'number')\n                    i = ci - 1;\n                else if (ci === BREAK)\n                    return BREAK;\n                else if (ci === REMOVE) {\n                    node.items.splice(i, 1);\n                    i -= 1;\n                }\n            }\n        }\n        else if (isPair(node)) {\n            path = Object.freeze(path.concat(node));\n            const ck = await visitAsync_('key', node.key, visitor, path);\n            if (ck === BREAK)\n                return BREAK;\n            else if (ck === REMOVE)\n                node.key = null;\n            const cv = await visitAsync_('value', node.value, visitor, path);\n            if (cv === BREAK)\n                return BREAK;\n            else if (cv === REMOVE)\n                node.value = null;\n        }\n    }\n    return ctrl;\n}\nfunction initVisitor(visitor) {\n    if (typeof visitor === 'object' &&\n        (visitor.Collection || visitor.Node || visitor.Value)) {\n        return Object.assign({\n            Alias: visitor.Node,\n            Map: visitor.Node,\n            Scalar: visitor.Node,\n            Seq: visitor.Node\n        }, visitor.Value && {\n            Map: visitor.Value,\n            Scalar: visitor.Value,\n            Seq: visitor.Value\n        }, visitor.Collection && {\n            Map: visitor.Collection,\n            Seq: visitor.Collection\n        }, visitor);\n    }\n    return visitor;\n}\nfunction callVisitor(key, node, visitor, path) {\n    if (typeof visitor === 'function')\n        return visitor(key, node, path);\n    if (isMap(node))\n        return visitor.Map?.(key, node, path);\n    if (isSeq(node))\n        return visitor.Seq?.(key, node, path);\n    if (isPair(node))\n        return visitor.Pair?.(key, node, path);\n    if (isScalar(node))\n        return visitor.Scalar?.(key, node, path);\n    if (isAlias(node))\n        return visitor.Alias?.(key, node, path);\n    return undefined;\n}\nfunction replaceNode(key, path, node) {\n    const parent = path[path.length - 1];\n    if (isCollection(parent)) {\n        parent.items[key] = node;\n    }\n    else if (isPair(parent)) {\n        if (key === 'key')\n            parent.key = node;\n        else\n            parent.value = node;\n    }\n    else if (isDocument(parent)) {\n        parent.contents = node;\n    }\n    else {\n        const pt = isAlias(parent) ? 'alias' : 'scalar';\n        throw new Error(`Cannot replace node with ${pt} parent`);\n    }\n}\n\nexport { visit, visitAsync };\n","import { isNode } from '../nodes/identity.js';\nimport { visit } from '../visit.js';\n\nconst escapeChars = {\n    '!': '%21',\n    ',': '%2C',\n    '[': '%5B',\n    ']': '%5D',\n    '{': '%7B',\n    '}': '%7D'\n};\nconst escapeTagName = (tn) => tn.replace(/[!,[\\]{}]/g, ch => escapeChars[ch]);\nclass Directives {\n    constructor(yaml, tags) {\n        /**\n         * The directives-end/doc-start marker `---`. If `null`, a marker may still be\n         * included in the document's stringified representation.\n         */\n        this.docStart = null;\n        /** The doc-end marker `...`.  */\n        this.docEnd = false;\n        this.yaml = Object.assign({}, Directives.defaultYaml, yaml);\n        this.tags = Object.assign({}, Directives.defaultTags, tags);\n    }\n    clone() {\n        const copy = new Directives(this.yaml, this.tags);\n        copy.docStart = this.docStart;\n        return copy;\n    }\n    /**\n     * During parsing, get a Directives instance for the current document and\n     * update the stream state according to the current version's spec.\n     */\n    atDocument() {\n        const res = new Directives(this.yaml, this.tags);\n        switch (this.yaml.version) {\n            case '1.1':\n                this.atNextDocument = true;\n                break;\n            case '1.2':\n                this.atNextDocument = false;\n                this.yaml = {\n                    explicit: Directives.defaultYaml.explicit,\n                    version: '1.2'\n                };\n                this.tags = Object.assign({}, Directives.defaultTags);\n                break;\n        }\n        return res;\n    }\n    /**\n     * @param onError - May be called even if the action was successful\n     * @returns `true` on success\n     */\n    add(line, onError) {\n        if (this.atNextDocument) {\n            this.yaml = { explicit: Directives.defaultYaml.explicit, version: '1.1' };\n            this.tags = Object.assign({}, Directives.defaultTags);\n            this.atNextDocument = false;\n        }\n        const parts = line.trim().split(/[ \\t]+/);\n        const name = parts.shift();\n        switch (name) {\n            case '%TAG': {\n                if (parts.length !== 2) {\n                    onError(0, '%TAG directive should contain exactly two parts');\n                    if (parts.length < 2)\n                        return false;\n                }\n                const [handle, prefix] = parts;\n                this.tags[handle] = prefix;\n                return true;\n            }\n            case '%YAML': {\n                this.yaml.explicit = true;\n                if (parts.length !== 1) {\n                    onError(0, '%YAML directive should contain exactly one part');\n                    return false;\n                }\n                const [version] = parts;\n                if (version === '1.1' || version === '1.2') {\n                    this.yaml.version = version;\n                    return true;\n                }\n                else {\n                    const isValid = /^\\d+\\.\\d+$/.test(version);\n                    onError(6, `Unsupported YAML version ${version}`, isValid);\n                    return false;\n                }\n            }\n            default:\n                onError(0, `Unknown directive ${name}`, true);\n                return false;\n        }\n    }\n    /**\n     * Resolves a tag, matching handles to those defined in %TAG directives.\n     *\n     * @returns Resolved tag, which may also be the non-specific tag `'!'` or a\n     *   `'!local'` tag, or `null` if unresolvable.\n     */\n    tagName(source, onError) {\n        if (source === '!')\n            return '!'; // non-specific tag\n        if (source[0] !== '!') {\n            onError(`Not a valid tag: ${source}`);\n            return null;\n        }\n        if (source[1] === '<') {\n            const verbatim = source.slice(2, -1);\n            if (verbatim === '!' || verbatim === '!!') {\n                onError(`Verbatim tags aren't resolved, so ${source} is invalid.`);\n                return null;\n            }\n            if (source[source.length - 1] !== '>')\n                onError('Verbatim tags must end with a >');\n            return verbatim;\n        }\n        const [, handle, suffix] = source.match(/^(.*!)([^!]*)$/s);\n        if (!suffix)\n            onError(`The ${source} tag has no suffix`);\n        const prefix = this.tags[handle];\n        if (prefix) {\n            try {\n                return prefix + decodeURIComponent(suffix);\n            }\n            catch (error) {\n                onError(String(error));\n                return null;\n            }\n        }\n        if (handle === '!')\n            return source; // local tag\n        onError(`Could not resolve tag: ${source}`);\n        return null;\n    }\n    /**\n     * Given a fully resolved tag, returns its printable string form,\n     * taking into account current tag prefixes and defaults.\n     */\n    tagString(tag) {\n        for (const [handle, prefix] of Object.entries(this.tags)) {\n            if (tag.startsWith(prefix))\n                return handle + escapeTagName(tag.substring(prefix.length));\n        }\n        return tag[0] === '!' ? tag : `!<${tag}>`;\n    }\n    toString(doc) {\n        const lines = this.yaml.explicit\n            ? [`%YAML ${this.yaml.version || '1.2'}`]\n            : [];\n        const tagEntries = Object.entries(this.tags);\n        let tagNames;\n        if (doc && tagEntries.length > 0 && isNode(doc.contents)) {\n            const tags = {};\n            visit(doc.contents, (_key, node) => {\n                if (isNode(node) && node.tag)\n                    tags[node.tag] = true;\n            });\n            tagNames = Object.keys(tags);\n        }\n        else\n            tagNames = [];\n        for (const [handle, prefix] of tagEntries) {\n            if (handle === '!!' && prefix === 'tag:yaml.org,2002:')\n                continue;\n            if (!doc || tagNames.some(tn => tn.startsWith(prefix)))\n                lines.push(`%TAG ${handle} ${prefix}`);\n        }\n        return lines.join('\\n');\n    }\n}\nDirectives.defaultYaml = { explicit: false, version: '1.2' };\nDirectives.defaultTags = { '!!': 'tag:yaml.org,2002:' };\n\nexport { Directives };\n","import { isScalar, isCollection } from '../nodes/identity.js';\nimport { visit } from '../visit.js';\n\n/**\n * Verify that the input string is a valid anchor.\n *\n * Will throw on errors.\n */\nfunction anchorIsValid(anchor) {\n    if (/[\\x00-\\x19\\s,[\\]{}]/.test(anchor)) {\n        const sa = JSON.stringify(anchor);\n        const msg = `Anchor must not contain whitespace or control characters: ${sa}`;\n        throw new Error(msg);\n    }\n    return true;\n}\nfunction anchorNames(root) {\n    const anchors = new Set();\n    visit(root, {\n        Value(_key, node) {\n            if (node.anchor)\n                anchors.add(node.anchor);\n        }\n    });\n    return anchors;\n}\n/** Find a new anchor name with the given `prefix` and a one-indexed suffix. */\nfunction findNewAnchor(prefix, exclude) {\n    for (let i = 1; true; ++i) {\n        const name = `${prefix}${i}`;\n        if (!exclude.has(name))\n            return name;\n    }\n}\nfunction createNodeAnchors(doc, prefix) {\n    const aliasObjects = [];\n    const sourceObjects = new Map();\n    let prevAnchors = null;\n    return {\n        onAnchor: (source) => {\n            aliasObjects.push(source);\n            prevAnchors ?? (prevAnchors = anchorNames(doc));\n            const anchor = findNewAnchor(prefix, prevAnchors);\n            prevAnchors.add(anchor);\n            return anchor;\n        },\n        /**\n         * With circular references, the source node is only resolved after all\n         * of its child nodes are. This is why anchors are set only after all of\n         * the nodes have been created.\n         */\n        setAnchors: () => {\n            for (const source of aliasObjects) {\n                const ref = sourceObjects.get(source);\n                if (typeof ref === 'object' &&\n                    ref.anchor &&\n                    (isScalar(ref.node) || isCollection(ref.node))) {\n                    ref.node.anchor = ref.anchor;\n                }\n                else {\n                    const error = new Error('Failed to resolve repeated object (this should not happen)');\n                    error.source = source;\n                    throw error;\n                }\n            }\n        },\n        sourceObjects\n    };\n}\n\nexport { anchorIsValid, anchorNames, createNodeAnchors, findNewAnchor };\n","/**\n * Applies the JSON.parse reviver algorithm as defined in the ECMA-262 spec,\n * in section 24.5.1.1 \"Runtime Semantics: InternalizeJSONProperty\" of the\n * 2021 edition: https://tc39.es/ecma262/#sec-json.parse\n *\n * Includes extensions for handling Map and Set objects.\n */\nfunction applyReviver(reviver, obj, key, val) {\n    if (val && typeof val === 'object') {\n        if (Array.isArray(val)) {\n            for (let i = 0, len = val.length; i < len; ++i) {\n                const v0 = val[i];\n                const v1 = applyReviver(reviver, val, String(i), v0);\n                // eslint-disable-next-line @typescript-eslint/no-array-delete\n                if (v1 === undefined)\n                    delete val[i];\n                else if (v1 !== v0)\n                    val[i] = v1;\n            }\n        }\n        else if (val instanceof Map) {\n            for (const k of Array.from(val.keys())) {\n                const v0 = val.get(k);\n                const v1 = applyReviver(reviver, val, k, v0);\n                if (v1 === undefined)\n                    val.delete(k);\n                else if (v1 !== v0)\n                    val.set(k, v1);\n            }\n        }\n        else if (val instanceof Set) {\n            for (const v0 of Array.from(val)) {\n                const v1 = applyReviver(reviver, val, v0, v0);\n                if (v1 === undefined)\n                    val.delete(v0);\n                else if (v1 !== v0) {\n                    val.delete(v0);\n                    val.add(v1);\n                }\n            }\n        }\n        else {\n            for (const [k, v0] of Object.entries(val)) {\n                const v1 = applyReviver(reviver, val, k, v0);\n                if (v1 === undefined)\n                    delete val[k];\n                else if (v1 !== v0)\n                    val[k] = v1;\n            }\n        }\n    }\n    return reviver.call(obj, key, val);\n}\n\nexport { applyReviver };\n","import { hasAnchor } from './identity.js';\n\n/**\n * Recursively convert any node or its contents to native JavaScript\n *\n * @param value - The input value\n * @param arg - If `value` defines a `toJSON()` method, use this\n *   as its first argument\n * @param ctx - Conversion context, originally set in Document#toJS(). If\n *   `{ keep: true }` is not set, output should be suitable for JSON\n *   stringification.\n */\nfunction toJS(value, arg, ctx) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n    if (Array.isArray(value))\n        return value.map((v, i) => toJS(v, String(i), ctx));\n    if (value && typeof value.toJSON === 'function') {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n        if (!ctx || !hasAnchor(value))\n            return value.toJSON(arg, ctx);\n        const data = { aliasCount: 0, count: 1, res: undefined };\n        ctx.anchors.set(value, data);\n        ctx.onCreate = res => {\n            data.res = res;\n            delete ctx.onCreate;\n        };\n        const res = value.toJSON(arg, ctx);\n        if (ctx.onCreate)\n            ctx.onCreate(res);\n        return res;\n    }\n    if (typeof value === 'bigint' && !ctx?.keep)\n        return Number(value);\n    return value;\n}\n\nexport { toJS };\n","import { applyReviver } from '../doc/applyReviver.js';\nimport { NODE_TYPE, isDocument } from './identity.js';\nimport { toJS } from './toJS.js';\n\nclass NodeBase {\n    constructor(type) {\n        Object.defineProperty(this, NODE_TYPE, { value: type });\n    }\n    /** Create a copy of this node.  */\n    clone() {\n        const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n        if (this.range)\n            copy.range = this.range.slice();\n        return copy;\n    }\n    /** A plain JavaScript representation of this node. */\n    toJS(doc, { mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n        if (!isDocument(doc))\n            throw new TypeError('A document argument is required');\n        const ctx = {\n            anchors: new Map(),\n            doc,\n            keep: true,\n            mapAsMap: mapAsMap === true,\n            mapKeyWarned: false,\n            maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n        };\n        const res = toJS(this, '', ctx);\n        if (typeof onAnchor === 'function')\n            for (const { count, res } of ctx.anchors.values())\n                onAnchor(res, count);\n        return typeof reviver === 'function'\n            ? applyReviver(reviver, { '': res }, '', res)\n            : res;\n    }\n}\n\nexport { NodeBase };\n","import { anchorIsValid } from '../doc/anchors.js';\nimport { visit } from '../visit.js';\nimport { ALIAS, isAlias, isCollection, isPair, hasAnchor } from './identity.js';\nimport { NodeBase } from './Node.js';\nimport { toJS } from './toJS.js';\n\nclass Alias extends NodeBase {\n    constructor(source) {\n        super(ALIAS);\n        this.source = source;\n        Object.defineProperty(this, 'tag', {\n            set() {\n                throw new Error('Alias nodes cannot have tags');\n            }\n        });\n    }\n    /**\n     * Resolve the value of this alias within `doc`, finding the last\n     * instance of the `source` anchor before this node.\n     */\n    resolve(doc, ctx) {\n        let nodes;\n        if (ctx?.aliasResolveCache) {\n            nodes = ctx.aliasResolveCache;\n        }\n        else {\n            nodes = [];\n            visit(doc, {\n                Node: (_key, node) => {\n                    if (isAlias(node) || hasAnchor(node))\n                        nodes.push(node);\n                }\n            });\n            if (ctx)\n                ctx.aliasResolveCache = nodes;\n        }\n        let found = undefined;\n        for (const node of nodes) {\n            if (node === this)\n                break;\n            if (node.anchor === this.source)\n                found = node;\n        }\n        return found;\n    }\n    toJSON(_arg, ctx) {\n        if (!ctx)\n            return { source: this.source };\n        const { anchors, doc, maxAliasCount } = ctx;\n        const source = this.resolve(doc, ctx);\n        if (!source) {\n            const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n            throw new ReferenceError(msg);\n        }\n        let data = anchors.get(source);\n        if (!data) {\n            // Resolve anchors for Node.prototype.toJS()\n            toJS(source, null, ctx);\n            data = anchors.get(source);\n        }\n        /* istanbul ignore if */\n        if (!data || data.res === undefined) {\n            const msg = 'This should not happen: Alias anchor was not resolved?';\n            throw new ReferenceError(msg);\n        }\n        if (maxAliasCount >= 0) {\n            data.count += 1;\n            if (data.aliasCount === 0)\n                data.aliasCount = getAliasCount(doc, source, anchors);\n            if (data.count * data.aliasCount > maxAliasCount) {\n                const msg = 'Excessive alias count indicates a resource exhaustion attack';\n                throw new ReferenceError(msg);\n            }\n        }\n        return data.res;\n    }\n    toString(ctx, _onComment, _onChompKeep) {\n        const src = `*${this.source}`;\n        if (ctx) {\n            anchorIsValid(this.source);\n            if (ctx.options.verifyAliasOrder && !ctx.anchors.has(this.source)) {\n                const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n                throw new Error(msg);\n            }\n            if (ctx.implicitKey)\n                return `${src} `;\n        }\n        return src;\n    }\n}\nfunction getAliasCount(doc, node, anchors) {\n    if (isAlias(node)) {\n        const source = node.resolve(doc);\n        const anchor = anchors && source && anchors.get(source);\n        return anchor ? anchor.count * anchor.aliasCount : 0;\n    }\n    else if (isCollection(node)) {\n        let count = 0;\n        for (const item of node.items) {\n            const c = getAliasCount(doc, item, anchors);\n            if (c > count)\n                count = c;\n        }\n        return count;\n    }\n    else if (isPair(node)) {\n        const kc = getAliasCount(doc, node.key, anchors);\n        const vc = getAliasCount(doc, node.value, anchors);\n        return Math.max(kc, vc);\n    }\n    return 1;\n}\n\nexport { Alias };\n","import { SCALAR } from './identity.js';\nimport { NodeBase } from './Node.js';\nimport { toJS } from './toJS.js';\n\nconst isScalarValue = (value) => !value || (typeof value !== 'function' && typeof value !== 'object');\nclass Scalar extends NodeBase {\n    constructor(value) {\n        super(SCALAR);\n        this.value = value;\n    }\n    toJSON(arg, ctx) {\n        return ctx?.keep ? this.value : toJS(this.value, arg, ctx);\n    }\n    toString() {\n        return String(this.value);\n    }\n}\nScalar.BLOCK_FOLDED = 'BLOCK_FOLDED';\nScalar.BLOCK_LITERAL = 'BLOCK_LITERAL';\nScalar.PLAIN = 'PLAIN';\nScalar.QUOTE_DOUBLE = 'QUOTE_DOUBLE';\nScalar.QUOTE_SINGLE = 'QUOTE_SINGLE';\n\nexport { Scalar, isScalarValue };\n","import { Alias } from '../nodes/Alias.js';\nimport { isNode, isPair, MAP, SEQ, isDocument } from '../nodes/identity.js';\nimport { Scalar } from '../nodes/Scalar.js';\n\nconst defaultTagPrefix = 'tag:yaml.org,2002:';\nfunction findTagObject(value, tagName, tags) {\n    if (tagName) {\n        const match = tags.filter(t => t.tag === tagName);\n        const tagObj = match.find(t => !t.format) ?? match[0];\n        if (!tagObj)\n            throw new Error(`Tag ${tagName} not found`);\n        return tagObj;\n    }\n    return tags.find(t => t.identify?.(value) && !t.format);\n}\nfunction createNode(value, tagName, ctx) {\n    if (isDocument(value))\n        value = value.contents;\n    if (isNode(value))\n        return value;\n    if (isPair(value)) {\n        const map = ctx.schema[MAP].createNode?.(ctx.schema, null, ctx);\n        map.items.push(value);\n        return map;\n    }\n    if (value instanceof String ||\n        value instanceof Number ||\n        value instanceof Boolean ||\n        (typeof BigInt !== 'undefined' && value instanceof BigInt) // not supported everywhere\n    ) {\n        // https://tc39.es/ecma262/#sec-serializejsonproperty\n        value = value.valueOf();\n    }\n    const { aliasDuplicateObjects, onAnchor, onTagObj, schema, sourceObjects } = ctx;\n    // Detect duplicate references to the same object & use Alias nodes for all\n    // after first. The `ref` wrapper allows for circular references to resolve.\n    let ref = undefined;\n    if (aliasDuplicateObjects && value && typeof value === 'object') {\n        ref = sourceObjects.get(value);\n        if (ref) {\n            ref.anchor ?? (ref.anchor = onAnchor(value));\n            return new Alias(ref.anchor);\n        }\n        else {\n            ref = { anchor: null, node: null };\n            sourceObjects.set(value, ref);\n        }\n    }\n    if (tagName?.startsWith('!!'))\n        tagName = defaultTagPrefix + tagName.slice(2);\n    let tagObj = findTagObject(value, tagName, schema.tags);\n    if (!tagObj) {\n        if (value && typeof value.toJSON === 'function') {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n            value = value.toJSON();\n        }\n        if (!value || typeof value !== 'object') {\n            const node = new Scalar(value);\n            if (ref)\n                ref.node = node;\n            return node;\n        }\n        tagObj =\n            value instanceof Map\n                ? schema[MAP]\n                : Symbol.iterator in Object(value)\n                    ? schema[SEQ]\n                    : schema[MAP];\n    }\n    if (onTagObj) {\n        onTagObj(tagObj);\n        delete ctx.onTagObj;\n    }\n    const node = tagObj?.createNode\n        ? tagObj.createNode(ctx.schema, value, ctx)\n        : typeof tagObj?.nodeClass?.from === 'function'\n            ? tagObj.nodeClass.from(ctx.schema, value, ctx)\n            : new Scalar(value);\n    if (tagName)\n        node.tag = tagName;\n    else if (!tagObj.default)\n        node.tag = tagObj.tag;\n    if (ref)\n        ref.node = node;\n    return node;\n}\n\nexport { createNode };\n","import { createNode } from '../doc/createNode.js';\nimport { isNode, isPair, isCollection, isScalar } from './identity.js';\nimport { NodeBase } from './Node.js';\n\nfunction collectionFromPath(schema, path, value) {\n    let v = value;\n    for (let i = path.length - 1; i >= 0; --i) {\n        const k = path[i];\n        if (typeof k === 'number' && Number.isInteger(k) && k >= 0) {\n            const a = [];\n            a[k] = v;\n            v = a;\n        }\n        else {\n            v = new Map([[k, v]]);\n        }\n    }\n    return createNode(v, undefined, {\n        aliasDuplicateObjects: false,\n        keepUndefined: false,\n        onAnchor: () => {\n            throw new Error('This should not happen, please report a bug.');\n        },\n        schema,\n        sourceObjects: new Map()\n    });\n}\n// Type guard is intentionally a little wrong so as to be more useful,\n// as it does not cover untypable empty non-string iterables (e.g. []).\nconst isEmptyPath = (path) => path == null ||\n    (typeof path === 'object' && !!path[Symbol.iterator]().next().done);\nclass Collection extends NodeBase {\n    constructor(type, schema) {\n        super(type);\n        Object.defineProperty(this, 'schema', {\n            value: schema,\n            configurable: true,\n            enumerable: false,\n            writable: true\n        });\n    }\n    /**\n     * Create a copy of this collection.\n     *\n     * @param schema - If defined, overwrites the original's schema\n     */\n    clone(schema) {\n        const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n        if (schema)\n            copy.schema = schema;\n        copy.items = copy.items.map(it => isNode(it) || isPair(it) ? it.clone(schema) : it);\n        if (this.range)\n            copy.range = this.range.slice();\n        return copy;\n    }\n    /**\n     * Adds a value to the collection. For `!!map` and `!!omap` the value must\n     * be a Pair instance or a `{ key, value }` object, which may not have a key\n     * that already exists in the map.\n     */\n    addIn(path, value) {\n        if (isEmptyPath(path))\n            this.add(value);\n        else {\n            const [key, ...rest] = path;\n            const node = this.get(key, true);\n            if (isCollection(node))\n                node.addIn(rest, value);\n            else if (node === undefined && this.schema)\n                this.set(key, collectionFromPath(this.schema, rest, value));\n            else\n                throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n        }\n    }\n    /**\n     * Removes a value from the collection.\n     * @returns `true` if the item was found and removed.\n     */\n    deleteIn(path) {\n        const [key, ...rest] = path;\n        if (rest.length === 0)\n            return this.delete(key);\n        const node = this.get(key, true);\n        if (isCollection(node))\n            return node.deleteIn(rest);\n        else\n            throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n    }\n    /**\n     * Returns item at `key`, or `undefined` if not found. By default unwraps\n     * scalar values from their surrounding node; to disable set `keepScalar` to\n     * `true` (collections are always returned intact).\n     */\n    getIn(path, keepScalar) {\n        const [key, ...rest] = path;\n        const node = this.get(key, true);\n        if (rest.length === 0)\n            return !keepScalar && isScalar(node) ? node.value : node;\n        else\n            return isCollection(node) ? node.getIn(rest, keepScalar) : undefined;\n    }\n    hasAllNullValues(allowScalar) {\n        return this.items.every(node => {\n            if (!isPair(node))\n                return false;\n            const n = node.value;\n            return (n == null ||\n                (allowScalar &&\n                    isScalar(n) &&\n                    n.value == null &&\n                    !n.commentBefore &&\n                    !n.comment &&\n                    !n.tag));\n        });\n    }\n    /**\n     * Checks if the collection includes a value with the key `key`.\n     */\n    hasIn(path) {\n        const [key, ...rest] = path;\n        if (rest.length === 0)\n            return this.has(key);\n        const node = this.get(key, true);\n        return isCollection(node) ? node.hasIn(rest) : false;\n    }\n    /**\n     * Sets a value in this collection. For `!!set`, `value` needs to be a\n     * boolean to add/remove the item from the set.\n     */\n    setIn(path, value) {\n        const [key, ...rest] = path;\n        if (rest.length === 0) {\n            this.set(key, value);\n        }\n        else {\n            const node = this.get(key, true);\n            if (isCollection(node))\n                node.setIn(rest, value);\n            else if (node === undefined && this.schema)\n                this.set(key, collectionFromPath(this.schema, rest, value));\n            else\n                throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n        }\n    }\n}\n\nexport { Collection, collectionFromPath, isEmptyPath };\n","/**\n * Stringifies a comment.\n *\n * Empty comment lines are left empty,\n * lines consisting of a single space are replaced by `#`,\n * and all other lines are prefixed with a `#`.\n */\nconst stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, '#');\nfunction indentComment(comment, indent) {\n    if (/^\\n+$/.test(comment))\n        return comment.substring(1);\n    return indent ? comment.replace(/^(?! *$)/gm, indent) : comment;\n}\nconst lineComment = (str, indent, comment) => str.endsWith('\\n')\n    ? indentComment(comment, indent)\n    : comment.includes('\\n')\n        ? '\\n' + indentComment(comment, indent)\n        : (str.endsWith(' ') ? '' : ' ') + comment;\n\nexport { indentComment, lineComment, stringifyComment };\n","const FOLD_FLOW = 'flow';\nconst FOLD_BLOCK = 'block';\nconst FOLD_QUOTED = 'quoted';\n/**\n * Tries to keep input at up to `lineWidth` characters, splitting only on spaces\n * not followed by newlines or spaces unless `mode` is `'quoted'`. Lines are\n * terminated with `\\n` and started with `indent`.\n */\nfunction foldFlowLines(text, indent, mode = 'flow', { indentAtStart, lineWidth = 80, minContentWidth = 20, onFold, onOverflow } = {}) {\n    if (!lineWidth || lineWidth < 0)\n        return text;\n    if (lineWidth < minContentWidth)\n        minContentWidth = 0;\n    const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length);\n    if (text.length <= endStep)\n        return text;\n    const folds = [];\n    const escapedFolds = {};\n    let end = lineWidth - indent.length;\n    if (typeof indentAtStart === 'number') {\n        if (indentAtStart > lineWidth - Math.max(2, minContentWidth))\n            folds.push(0);\n        else\n            end = lineWidth - indentAtStart;\n    }\n    let split = undefined;\n    let prev = undefined;\n    let overflow = false;\n    let i = -1;\n    let escStart = -1;\n    let escEnd = -1;\n    if (mode === FOLD_BLOCK) {\n        i = consumeMoreIndentedLines(text, i, indent.length);\n        if (i !== -1)\n            end = i + endStep;\n    }\n    for (let ch; (ch = text[(i += 1)]);) {\n        if (mode === FOLD_QUOTED && ch === '\\\\') {\n            escStart = i;\n            switch (text[i + 1]) {\n                case 'x':\n                    i += 3;\n                    break;\n                case 'u':\n                    i += 5;\n                    break;\n                case 'U':\n                    i += 9;\n                    break;\n                default:\n                    i += 1;\n            }\n            escEnd = i;\n        }\n        if (ch === '\\n') {\n            if (mode === FOLD_BLOCK)\n                i = consumeMoreIndentedLines(text, i, indent.length);\n            end = i + indent.length + endStep;\n            split = undefined;\n        }\n        else {\n            if (ch === ' ' &&\n                prev &&\n                prev !== ' ' &&\n                prev !== '\\n' &&\n                prev !== '\\t') {\n                // space surrounded by non-space can be replaced with newline + indent\n                const next = text[i + 1];\n                if (next && next !== ' ' && next !== '\\n' && next !== '\\t')\n                    split = i;\n            }\n            if (i >= end) {\n                if (split) {\n                    folds.push(split);\n                    end = split + endStep;\n                    split = undefined;\n                }\n                else if (mode === FOLD_QUOTED) {\n                    // white-space collected at end may stretch past lineWidth\n                    while (prev === ' ' || prev === '\\t') {\n                        prev = ch;\n                        ch = text[(i += 1)];\n                        overflow = true;\n                    }\n                    // Account for newline escape, but don't break preceding escape\n                    const j = i > escEnd + 1 ? i - 2 : escStart - 1;\n                    // Bail out if lineWidth & minContentWidth are shorter than an escape string\n                    if (escapedFolds[j])\n                        return text;\n                    folds.push(j);\n                    escapedFolds[j] = true;\n                    end = j + endStep;\n                    split = undefined;\n                }\n                else {\n                    overflow = true;\n                }\n            }\n        }\n        prev = ch;\n    }\n    if (overflow && onOverflow)\n        onOverflow();\n    if (folds.length === 0)\n        return text;\n    if (onFold)\n        onFold();\n    let res = text.slice(0, folds[0]);\n    for (let i = 0; i < folds.length; ++i) {\n        const fold = folds[i];\n        const end = folds[i + 1] || text.length;\n        if (fold === 0)\n            res = `\\n${indent}${text.slice(0, end)}`;\n        else {\n            if (mode === FOLD_QUOTED && escapedFolds[fold])\n                res += `${text[fold]}\\\\`;\n            res += `\\n${indent}${text.slice(fold + 1, end)}`;\n        }\n    }\n    return res;\n}\n/**\n * Presumes `i + 1` is at the start of a line\n * @returns index of last newline in more-indented block\n */\nfunction consumeMoreIndentedLines(text, i, indent) {\n    let end = i;\n    let start = i + 1;\n    let ch = text[start];\n    while (ch === ' ' || ch === '\\t') {\n        if (i < start + indent) {\n            ch = text[++i];\n        }\n        else {\n            do {\n                ch = text[++i];\n            } while (ch && ch !== '\\n');\n            end = i;\n            start = i + 1;\n            ch = text[start];\n        }\n    }\n    return end;\n}\n\nexport { FOLD_BLOCK, FOLD_FLOW, FOLD_QUOTED, foldFlowLines };\n","import { Scalar } from '../nodes/Scalar.js';\nimport { foldFlowLines, FOLD_FLOW, FOLD_QUOTED, FOLD_BLOCK } from './foldFlowLines.js';\n\nconst getFoldOptions = (ctx, isBlock) => ({\n    indentAtStart: isBlock ? ctx.indent.length : ctx.indentAtStart,\n    lineWidth: ctx.options.lineWidth,\n    minContentWidth: ctx.options.minContentWidth\n});\n// Also checks for lines starting with %, as parsing the output as YAML 1.1 will\n// presume that's starting a new document.\nconst containsDocumentMarker = (str) => /^(%|---|\\.\\.\\.)/m.test(str);\nfunction lineLengthOverLimit(str, lineWidth, indentLength) {\n    if (!lineWidth || lineWidth < 0)\n        return false;\n    const limit = lineWidth - indentLength;\n    const strLen = str.length;\n    if (strLen <= limit)\n        return false;\n    for (let i = 0, start = 0; i < strLen; ++i) {\n        if (str[i] === '\\n') {\n            if (i - start > limit)\n                return true;\n            start = i + 1;\n            if (strLen - start <= limit)\n                return false;\n        }\n    }\n    return true;\n}\nfunction doubleQuotedString(value, ctx) {\n    const json = JSON.stringify(value);\n    if (ctx.options.doubleQuotedAsJSON)\n        return json;\n    const { implicitKey } = ctx;\n    const minMultiLineLength = ctx.options.doubleQuotedMinMultiLineLength;\n    const indent = ctx.indent || (containsDocumentMarker(value) ? '  ' : '');\n    let str = '';\n    let start = 0;\n    for (let i = 0, ch = json[i]; ch; ch = json[++i]) {\n        if (ch === ' ' && json[i + 1] === '\\\\' && json[i + 2] === 'n') {\n            // space before newline needs to be escaped to not be folded\n            str += json.slice(start, i) + '\\\\ ';\n            i += 1;\n            start = i;\n            ch = '\\\\';\n        }\n        if (ch === '\\\\')\n            switch (json[i + 1]) {\n                case 'u':\n                    {\n                        str += json.slice(start, i);\n                        const code = json.substr(i + 2, 4);\n                        switch (code) {\n                            case '0000':\n                                str += '\\\\0';\n                                break;\n                            case '0007':\n                                str += '\\\\a';\n                                break;\n                            case '000b':\n                                str += '\\\\v';\n                                break;\n                            case '001b':\n                                str += '\\\\e';\n                                break;\n                            case '0085':\n                                str += '\\\\N';\n                                break;\n                            case '00a0':\n                                str += '\\\\_';\n                                break;\n                            case '2028':\n                                str += '\\\\L';\n                                break;\n                            case '2029':\n                                str += '\\\\P';\n                                break;\n                            default:\n                                if (code.substr(0, 2) === '00')\n                                    str += '\\\\x' + code.substr(2);\n                                else\n                                    str += json.substr(i, 6);\n                        }\n                        i += 5;\n                        start = i + 1;\n                    }\n                    break;\n                case 'n':\n                    if (implicitKey ||\n                        json[i + 2] === '\"' ||\n                        json.length < minMultiLineLength) {\n                        i += 1;\n                    }\n                    else {\n                        // folding will eat first newline\n                        str += json.slice(start, i) + '\\n\\n';\n                        while (json[i + 2] === '\\\\' &&\n                            json[i + 3] === 'n' &&\n                            json[i + 4] !== '\"') {\n                            str += '\\n';\n                            i += 2;\n                        }\n                        str += indent;\n                        // space after newline needs to be escaped to not be folded\n                        if (json[i + 2] === ' ')\n                            str += '\\\\';\n                        i += 1;\n                        start = i + 1;\n                    }\n                    break;\n                default:\n                    i += 1;\n            }\n    }\n    str = start ? str + json.slice(start) : json;\n    return implicitKey\n        ? str\n        : foldFlowLines(str, indent, FOLD_QUOTED, getFoldOptions(ctx, false));\n}\nfunction singleQuotedString(value, ctx) {\n    if (ctx.options.singleQuote === false ||\n        (ctx.implicitKey && value.includes('\\n')) ||\n        /[ \\t]\\n|\\n[ \\t]/.test(value) // single quoted string can't have leading or trailing whitespace around newline\n    )\n        return doubleQuotedString(value, ctx);\n    const indent = ctx.indent || (containsDocumentMarker(value) ? '  ' : '');\n    const res = \"'\" + value.replace(/'/g, \"''\").replace(/\\n+/g, `$&\\n${indent}`) + \"'\";\n    return ctx.implicitKey\n        ? res\n        : foldFlowLines(res, indent, FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction quotedString(value, ctx) {\n    const { singleQuote } = ctx.options;\n    let qs;\n    if (singleQuote === false)\n        qs = doubleQuotedString;\n    else {\n        const hasDouble = value.includes('\"');\n        const hasSingle = value.includes(\"'\");\n        if (hasDouble && !hasSingle)\n            qs = singleQuotedString;\n        else if (hasSingle && !hasDouble)\n            qs = doubleQuotedString;\n        else\n            qs = singleQuote ? singleQuotedString : doubleQuotedString;\n    }\n    return qs(value, ctx);\n}\n// The negative lookbehind avoids a polynomial search,\n// but isn't supported yet on Safari: https://caniuse.com/js-regexp-lookbehind\nlet blockEndNewlines;\ntry {\n    blockEndNewlines = new RegExp('(^|(?<!\\n))\\n+(?!\\n|$)', 'g');\n}\ncatch {\n    blockEndNewlines = /\\n+(?!\\n|$)/g;\n}\nfunction blockString({ comment, type, value }, ctx, onComment, onChompKeep) {\n    const { blockQuote, commentString, lineWidth } = ctx.options;\n    // 1. Block can't end in whitespace unless the last line is non-empty.\n    // 2. Strings consisting of only whitespace are best rendered explicitly.\n    if (!blockQuote || /\\n[\\t ]+$/.test(value)) {\n        return quotedString(value, ctx);\n    }\n    const indent = ctx.indent ||\n        (ctx.forceBlockIndent || containsDocumentMarker(value) ? '  ' : '');\n    const literal = blockQuote === 'literal'\n        ? true\n        : blockQuote === 'folded' || type === Scalar.BLOCK_FOLDED\n            ? false\n            : type === Scalar.BLOCK_LITERAL\n                ? true\n                : !lineLengthOverLimit(value, lineWidth, indent.length);\n    if (!value)\n        return literal ? '|\\n' : '>\\n';\n    // determine chomping from whitespace at value end\n    let chomp;\n    let endStart;\n    for (endStart = value.length; endStart > 0; --endStart) {\n        const ch = value[endStart - 1];\n        if (ch !== '\\n' && ch !== '\\t' && ch !== ' ')\n            break;\n    }\n    let end = value.substring(endStart);\n    const endNlPos = end.indexOf('\\n');\n    if (endNlPos === -1) {\n        chomp = '-'; // strip\n    }\n    else if (value === end || endNlPos !== end.length - 1) {\n        chomp = '+'; // keep\n        if (onChompKeep)\n            onChompKeep();\n    }\n    else {\n        chomp = ''; // clip\n    }\n    if (end) {\n        value = value.slice(0, -end.length);\n        if (end[end.length - 1] === '\\n')\n            end = end.slice(0, -1);\n        end = end.replace(blockEndNewlines, `$&${indent}`);\n    }\n    // determine indent indicator from whitespace at value start\n    let startWithSpace = false;\n    let startEnd;\n    let startNlPos = -1;\n    for (startEnd = 0; startEnd < value.length; ++startEnd) {\n        const ch = value[startEnd];\n        if (ch === ' ')\n            startWithSpace = true;\n        else if (ch === '\\n')\n            startNlPos = startEnd;\n        else\n            break;\n    }\n    let start = value.substring(0, startNlPos < startEnd ? startNlPos + 1 : startEnd);\n    if (start) {\n        value = value.substring(start.length);\n        start = start.replace(/\\n+/g, `$&${indent}`);\n    }\n    const indentSize = indent ? '2' : '1'; // root is at -1\n    // Leading | or > is added later\n    let header = (startWithSpace ? indentSize : '') + chomp;\n    if (comment) {\n        header += ' ' + commentString(comment.replace(/ ?[\\r\\n]+/g, ' '));\n        if (onComment)\n            onComment();\n    }\n    if (!literal) {\n        const foldedValue = value\n            .replace(/\\n+/g, '\\n$&')\n            .replace(/(?:^|\\n)([\\t ].*)(?:([\\n\\t ]*)\\n(?![\\n\\t ]))?/g, '$1$2') // more-indented lines aren't folded\n            //                ^ more-ind. ^ empty     ^ capture next empty lines only at end of indent\n            .replace(/\\n+/g, `$&${indent}`);\n        let literalFallback = false;\n        const foldOptions = getFoldOptions(ctx, true);\n        if (blockQuote !== 'folded' && type !== Scalar.BLOCK_FOLDED) {\n            foldOptions.onOverflow = () => {\n                literalFallback = true;\n            };\n        }\n        const body = foldFlowLines(`${start}${foldedValue}${end}`, indent, FOLD_BLOCK, foldOptions);\n        if (!literalFallback)\n            return `>${header}\\n${indent}${body}`;\n    }\n    value = value.replace(/\\n+/g, `$&${indent}`);\n    return `|${header}\\n${indent}${start}${value}${end}`;\n}\nfunction plainString(item, ctx, onComment, onChompKeep) {\n    const { type, value } = item;\n    const { actualString, implicitKey, indent, indentStep, inFlow } = ctx;\n    if ((implicitKey && value.includes('\\n')) ||\n        (inFlow && /[[\\]{},]/.test(value))) {\n        return quotedString(value, ctx);\n    }\n    if (/^[\\n\\t ,[\\]{}#&*!|>'\"%@`]|^[?-]$|^[?-][ \\t]|[\\n:][ \\t]|[ \\t]\\n|[\\n\\t ]#|[\\n\\t :]$/.test(value)) {\n        // not allowed:\n        // - '-' or '?'\n        // - start with an indicator character (except [?:-]) or /[?-] /\n        // - '\\n ', ': ' or ' \\n' anywhere\n        // - '#' not preceded by a non-space char\n        // - end with ' ' or ':'\n        return implicitKey || inFlow || !value.includes('\\n')\n            ? quotedString(value, ctx)\n            : blockString(item, ctx, onComment, onChompKeep);\n    }\n    if (!implicitKey &&\n        !inFlow &&\n        type !== Scalar.PLAIN &&\n        value.includes('\\n')) {\n        // Where allowed & type not set explicitly, prefer block style for multiline strings\n        return blockString(item, ctx, onComment, onChompKeep);\n    }\n    if (containsDocumentMarker(value)) {\n        if (indent === '') {\n            ctx.forceBlockIndent = true;\n            return blockString(item, ctx, onComment, onChompKeep);\n        }\n        else if (implicitKey && indent === indentStep) {\n            return quotedString(value, ctx);\n        }\n    }\n    const str = value.replace(/\\n+/g, `$&\\n${indent}`);\n    // Verify that output will be parsed as a string, as e.g. plain numbers and\n    // booleans get parsed with those types in v1.2 (e.g. '42', 'true' & '0.9e-3'),\n    // and others in v1.1.\n    if (actualString) {\n        const test = (tag) => tag.default && tag.tag !== 'tag:yaml.org,2002:str' && tag.test?.test(str);\n        const { compat, tags } = ctx.doc.schema;\n        if (tags.some(test) || compat?.some(test))\n            return quotedString(value, ctx);\n    }\n    return implicitKey\n        ? str\n        : foldFlowLines(str, indent, FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction stringifyString(item, ctx, onComment, onChompKeep) {\n    const { implicitKey, inFlow } = ctx;\n    const ss = typeof item.value === 'string'\n        ? item\n        : Object.assign({}, item, { value: String(item.value) });\n    let { type } = item;\n    if (type !== Scalar.QUOTE_DOUBLE) {\n        // force double quotes on control characters & unpaired surrogates\n        if (/[\\x00-\\x08\\x0b-\\x1f\\x7f-\\x9f\\u{D800}-\\u{DFFF}]/u.test(ss.value))\n            type = Scalar.QUOTE_DOUBLE;\n    }\n    const _stringify = (_type) => {\n        switch (_type) {\n            case Scalar.BLOCK_FOLDED:\n            case Scalar.BLOCK_LITERAL:\n                return implicitKey || inFlow\n                    ? quotedString(ss.value, ctx) // blocks are not valid inside flow containers\n                    : blockString(ss, ctx, onComment, onChompKeep);\n            case Scalar.QUOTE_DOUBLE:\n                return doubleQuotedString(ss.value, ctx);\n            case Scalar.QUOTE_SINGLE:\n                return singleQuotedString(ss.value, ctx);\n            case Scalar.PLAIN:\n                return plainString(ss, ctx, onComment, onChompKeep);\n            default:\n                return null;\n        }\n    };\n    let res = _stringify(type);\n    if (res === null) {\n        const { defaultKeyType, defaultStringType } = ctx.options;\n        const t = (implicitKey && defaultKeyType) || defaultStringType;\n        res = _stringify(t);\n        if (res === null)\n            throw new Error(`Unsupported default string type ${t}`);\n    }\n    return res;\n}\n\nexport { stringifyString };\n","import { anchorIsValid } from '../doc/anchors.js';\nimport { isPair, isAlias, isNode, isScalar, isCollection } from '../nodes/identity.js';\nimport { stringifyComment } from './stringifyComment.js';\nimport { stringifyString } from './stringifyString.js';\n\nfunction createStringifyContext(doc, options) {\n    const opt = Object.assign({\n        blockQuote: true,\n        commentString: stringifyComment,\n        defaultKeyType: null,\n        defaultStringType: 'PLAIN',\n        directives: null,\n        doubleQuotedAsJSON: false,\n        doubleQuotedMinMultiLineLength: 40,\n        falseStr: 'false',\n        flowCollectionPadding: true,\n        indentSeq: true,\n        lineWidth: 80,\n        minContentWidth: 20,\n        nullStr: 'null',\n        simpleKeys: false,\n        singleQuote: null,\n        trueStr: 'true',\n        verifyAliasOrder: true\n    }, doc.schema.toStringOptions, options);\n    let inFlow;\n    switch (opt.collectionStyle) {\n        case 'block':\n            inFlow = false;\n            break;\n        case 'flow':\n            inFlow = true;\n            break;\n        default:\n            inFlow = null;\n    }\n    return {\n        anchors: new Set(),\n        doc,\n        flowCollectionPadding: opt.flowCollectionPadding ? ' ' : '',\n        indent: '',\n        indentStep: typeof opt.indent === 'number' ? ' '.repeat(opt.indent) : '  ',\n        inFlow,\n        options: opt\n    };\n}\nfunction getTagObject(tags, item) {\n    if (item.tag) {\n        const match = tags.filter(t => t.tag === item.tag);\n        if (match.length > 0)\n            return match.find(t => t.format === item.format) ?? match[0];\n    }\n    let tagObj = undefined;\n    let obj;\n    if (isScalar(item)) {\n        obj = item.value;\n        let match = tags.filter(t => t.identify?.(obj));\n        if (match.length > 1) {\n            const testMatch = match.filter(t => t.test);\n            if (testMatch.length > 0)\n                match = testMatch;\n        }\n        tagObj =\n            match.find(t => t.format === item.format) ?? match.find(t => !t.format);\n    }\n    else {\n        obj = item;\n        tagObj = tags.find(t => t.nodeClass && obj instanceof t.nodeClass);\n    }\n    if (!tagObj) {\n        const name = obj?.constructor?.name ?? (obj === null ? 'null' : typeof obj);\n        throw new Error(`Tag not resolved for ${name} value`);\n    }\n    return tagObj;\n}\n// needs to be called before value stringifier to allow for circular anchor refs\nfunction stringifyProps(node, tagObj, { anchors, doc }) {\n    if (!doc.directives)\n        return '';\n    const props = [];\n    const anchor = (isScalar(node) || isCollection(node)) && node.anchor;\n    if (anchor && anchorIsValid(anchor)) {\n        anchors.add(anchor);\n        props.push(`&${anchor}`);\n    }\n    const tag = node.tag ?? (tagObj.default ? null : tagObj.tag);\n    if (tag)\n        props.push(doc.directives.tagString(tag));\n    return props.join(' ');\n}\nfunction stringify(item, ctx, onComment, onChompKeep) {\n    if (isPair(item))\n        return item.toString(ctx, onComment, onChompKeep);\n    if (isAlias(item)) {\n        if (ctx.doc.directives)\n            return item.toString(ctx);\n        if (ctx.resolvedAliases?.has(item)) {\n            throw new TypeError(`Cannot stringify circular structure without alias nodes`);\n        }\n        else {\n            if (ctx.resolvedAliases)\n                ctx.resolvedAliases.add(item);\n            else\n                ctx.resolvedAliases = new Set([item]);\n            item = item.resolve(ctx.doc);\n        }\n    }\n    let tagObj = undefined;\n    const node = isNode(item)\n        ? item\n        : ctx.doc.createNode(item, { onTagObj: o => (tagObj = o) });\n    tagObj ?? (tagObj = getTagObject(ctx.doc.schema.tags, node));\n    const props = stringifyProps(node, tagObj, ctx);\n    if (props.length > 0)\n        ctx.indentAtStart = (ctx.indentAtStart ?? 0) + props.length + 1;\n    const str = typeof tagObj.stringify === 'function'\n        ? tagObj.stringify(node, ctx, onComment, onChompKeep)\n        : isScalar(node)\n            ? stringifyString(node, ctx, onComment, onChompKeep)\n            : node.toString(ctx, onComment, onChompKeep);\n    if (!props)\n        return str;\n    return isScalar(node) || str[0] === '{' || str[0] === '['\n        ? `${props} ${str}`\n        : `${props}\\n${ctx.indent}${str}`;\n}\n\nexport { createStringifyContext, stringify };\n","import { isCollection, isNode, isScalar, isSeq } from '../nodes/identity.js';\nimport { Scalar } from '../nodes/Scalar.js';\nimport { stringify } from './stringify.js';\nimport { lineComment, indentComment } from './stringifyComment.js';\n\nfunction stringifyPair({ key, value }, ctx, onComment, onChompKeep) {\n    const { allNullValues, doc, indent, indentStep, options: { commentString, indentSeq, simpleKeys } } = ctx;\n    let keyComment = (isNode(key) && key.comment) || null;\n    if (simpleKeys) {\n        if (keyComment) {\n            throw new Error('With simple keys, key nodes cannot have comments');\n        }\n        if (isCollection(key) || (!isNode(key) && typeof key === 'object')) {\n            const msg = 'With simple keys, collection cannot be used as a key value';\n            throw new Error(msg);\n        }\n    }\n    let explicitKey = !simpleKeys &&\n        (!key ||\n            (keyComment && value == null && !ctx.inFlow) ||\n            isCollection(key) ||\n            (isScalar(key)\n                ? key.type === Scalar.BLOCK_FOLDED || key.type === Scalar.BLOCK_LITERAL\n                : typeof key === 'object'));\n    ctx = Object.assign({}, ctx, {\n        allNullValues: false,\n        implicitKey: !explicitKey && (simpleKeys || !allNullValues),\n        indent: indent + indentStep\n    });\n    let keyCommentDone = false;\n    let chompKeep = false;\n    let str = stringify(key, ctx, () => (keyCommentDone = true), () => (chompKeep = true));\n    if (!explicitKey && !ctx.inFlow && str.length > 1024) {\n        if (simpleKeys)\n            throw new Error('With simple keys, single line scalar must not span more than 1024 characters');\n        explicitKey = true;\n    }\n    if (ctx.inFlow) {\n        if (allNullValues || value == null) {\n            if (keyCommentDone && onComment)\n                onComment();\n            return str === '' ? '?' : explicitKey ? `? ${str}` : str;\n        }\n    }\n    else if ((allNullValues && !simpleKeys) || (value == null && explicitKey)) {\n        str = `? ${str}`;\n        if (keyComment && !keyCommentDone) {\n            str += lineComment(str, ctx.indent, commentString(keyComment));\n        }\n        else if (chompKeep && onChompKeep)\n            onChompKeep();\n        return str;\n    }\n    if (keyCommentDone)\n        keyComment = null;\n    if (explicitKey) {\n        if (keyComment)\n            str += lineComment(str, ctx.indent, commentString(keyComment));\n        str = `? ${str}\\n${indent}:`;\n    }\n    else {\n        str = `${str}:`;\n        if (keyComment)\n            str += lineComment(str, ctx.indent, commentString(keyComment));\n    }\n    let vsb, vcb, valueComment;\n    if (isNode(value)) {\n        vsb = !!value.spaceBefore;\n        vcb = value.commentBefore;\n        valueComment = value.comment;\n    }\n    else {\n        vsb = false;\n        vcb = null;\n        valueComment = null;\n        if (value && typeof value === 'object')\n            value = doc.createNode(value);\n    }\n    ctx.implicitKey = false;\n    if (!explicitKey && !keyComment && isScalar(value))\n        ctx.indentAtStart = str.length + 1;\n    chompKeep = false;\n    if (!indentSeq &&\n        indentStep.length >= 2 &&\n        !ctx.inFlow &&\n        !explicitKey &&\n        isSeq(value) &&\n        !value.flow &&\n        !value.tag &&\n        !value.anchor) {\n        // If indentSeq === false, consider '- ' as part of indentation where possible\n        ctx.indent = ctx.indent.substring(2);\n    }\n    let valueCommentDone = false;\n    const valueStr = stringify(value, ctx, () => (valueCommentDone = true), () => (chompKeep = true));\n    let ws = ' ';\n    if (keyComment || vsb || vcb) {\n        ws = vsb ? '\\n' : '';\n        if (vcb) {\n            const cs = commentString(vcb);\n            ws += `\\n${indentComment(cs, ctx.indent)}`;\n        }\n        if (valueStr === '' && !ctx.inFlow) {\n            if (ws === '\\n')\n                ws = '\\n\\n';\n        }\n        else {\n            ws += `\\n${ctx.indent}`;\n        }\n    }\n    else if (!explicitKey && isCollection(value)) {\n        const vs0 = valueStr[0];\n        const nl0 = valueStr.indexOf('\\n');\n        const hasNewline = nl0 !== -1;\n        const flow = ctx.inFlow ?? value.flow ?? value.items.length === 0;\n        if (hasNewline || !flow) {\n            let hasPropsLine = false;\n            if (hasNewline && (vs0 === '&' || vs0 === '!')) {\n                let sp0 = valueStr.indexOf(' ');\n                if (vs0 === '&' &&\n                    sp0 !== -1 &&\n                    sp0 < nl0 &&\n                    valueStr[sp0 + 1] === '!') {\n                    sp0 = valueStr.indexOf(' ', sp0 + 1);\n                }\n                if (sp0 === -1 || nl0 < sp0)\n                    hasPropsLine = true;\n            }\n            if (!hasPropsLine)\n                ws = `\\n${ctx.indent}`;\n        }\n    }\n    else if (valueStr === '' || valueStr[0] === '\\n') {\n        ws = '';\n    }\n    str += ws + valueStr;\n    if (ctx.inFlow) {\n        if (valueCommentDone && onComment)\n            onComment();\n    }\n    else if (valueComment && !valueCommentDone) {\n        str += lineComment(str, ctx.indent, commentString(valueComment));\n    }\n    else if (chompKeep && onChompKeep) {\n        onChompKeep();\n    }\n    return str;\n}\n\nexport { stringifyPair };\n","function debug(logLevel, ...messages) {\n    if (logLevel === 'debug')\n        console.log(...messages);\n}\nfunction warn(logLevel, warning) {\n    if (logLevel === 'debug' || logLevel === 'warn') {\n        console.warn(warning);\n    }\n}\n\nexport { debug, warn };\n","import { isScalar, isAlias, isSeq, isMap } from '../../nodes/identity.js';\nimport { Scalar } from '../../nodes/Scalar.js';\n\n// If the value associated with a merge key is a single mapping node, each of\n// its key/value pairs is inserted into the current mapping, unless the key\n// already exists in it. If the value associated with the merge key is a\n// sequence, then this sequence is expected to contain mapping nodes and each\n// of these nodes is merged in turn according to its order in the sequence.\n// Keys in mapping nodes earlier in the sequence override keys specified in\n// later mapping nodes. -- http://yaml.org/type/merge.html\nconst MERGE_KEY = '<<';\nconst merge = {\n    identify: value => value === MERGE_KEY ||\n        (typeof value === 'symbol' && value.description === MERGE_KEY),\n    default: 'key',\n    tag: 'tag:yaml.org,2002:merge',\n    test: /^<<$/,\n    resolve: () => Object.assign(new Scalar(Symbol(MERGE_KEY)), {\n        addToJSMap: addMergeToJSMap\n    }),\n    stringify: () => MERGE_KEY\n};\nconst isMergeKey = (ctx, key) => (merge.identify(key) ||\n    (isScalar(key) &&\n        (!key.type || key.type === Scalar.PLAIN) &&\n        merge.identify(key.value))) &&\n    ctx?.doc.schema.tags.some(tag => tag.tag === merge.tag && tag.default);\nfunction addMergeToJSMap(ctx, map, value) {\n    value = ctx && isAlias(value) ? value.resolve(ctx.doc) : value;\n    if (isSeq(value))\n        for (const it of value.items)\n            mergeValue(ctx, map, it);\n    else if (Array.isArray(value))\n        for (const it of value)\n            mergeValue(ctx, map, it);\n    else\n        mergeValue(ctx, map, value);\n}\nfunction mergeValue(ctx, map, value) {\n    const source = ctx && isAlias(value) ? value.resolve(ctx.doc) : value;\n    if (!isMap(source))\n        throw new Error('Merge sources must be maps or map aliases');\n    const srcMap = source.toJSON(null, ctx, Map);\n    for (const [key, value] of srcMap) {\n        if (map instanceof Map) {\n            if (!map.has(key))\n                map.set(key, value);\n        }\n        else if (map instanceof Set) {\n            map.add(key);\n        }\n        else if (!Object.prototype.hasOwnProperty.call(map, key)) {\n            Object.defineProperty(map, key, {\n                value,\n                writable: true,\n                enumerable: true,\n                configurable: true\n            });\n        }\n    }\n    return map;\n}\n\nexport { addMergeToJSMap, isMergeKey, merge };\n","import { warn } from '../log.js';\nimport { isMergeKey, addMergeToJSMap } from '../schema/yaml-1.1/merge.js';\nimport { createStringifyContext } from '../stringify/stringify.js';\nimport { isNode } from './identity.js';\nimport { toJS } from './toJS.js';\n\nfunction addPairToJSMap(ctx, map, { key, value }) {\n    if (isNode(key) && key.addToJSMap)\n        key.addToJSMap(ctx, map, value);\n    // TODO: Should drop this special case for bare << handling\n    else if (isMergeKey(ctx, key))\n        addMergeToJSMap(ctx, map, value);\n    else {\n        const jsKey = toJS(key, '', ctx);\n        if (map instanceof Map) {\n            map.set(jsKey, toJS(value, jsKey, ctx));\n        }\n        else if (map instanceof Set) {\n            map.add(jsKey);\n        }\n        else {\n            const stringKey = stringifyKey(key, jsKey, ctx);\n            const jsValue = toJS(value, stringKey, ctx);\n            if (stringKey in map)\n                Object.defineProperty(map, stringKey, {\n                    value: jsValue,\n                    writable: true,\n                    enumerable: true,\n                    configurable: true\n                });\n            else\n                map[stringKey] = jsValue;\n        }\n    }\n    return map;\n}\nfunction stringifyKey(key, jsKey, ctx) {\n    if (jsKey === null)\n        return '';\n    // eslint-disable-next-line @typescript-eslint/no-base-to-string\n    if (typeof jsKey !== 'object')\n        return String(jsKey);\n    if (isNode(key) && ctx?.doc) {\n        const strCtx = createStringifyContext(ctx.doc, {});\n        strCtx.anchors = new Set();\n        for (const node of ctx.anchors.keys())\n            strCtx.anchors.add(node.anchor);\n        strCtx.inFlow = true;\n        strCtx.inStringifyKey = true;\n        const strKey = key.toString(strCtx);\n        if (!ctx.mapKeyWarned) {\n            let jsonStr = JSON.stringify(strKey);\n            if (jsonStr.length > 40)\n                jsonStr = jsonStr.substring(0, 36) + '...\"';\n            warn(ctx.doc.options.logLevel, `Keys with collection values will be stringified due to JS Object restrictions: ${jsonStr}. Set mapAsMap: true to use object keys.`);\n            ctx.mapKeyWarned = true;\n        }\n        return strKey;\n    }\n    return JSON.stringify(jsKey);\n}\n\nexport { addPairToJSMap };\n","import { createNode } from '../doc/createNode.js';\nimport { stringifyPair } from '../stringify/stringifyPair.js';\nimport { addPairToJSMap } from './addPairToJSMap.js';\nimport { NODE_TYPE, PAIR, isNode } from './identity.js';\n\nfunction createPair(key, value, ctx) {\n    const k = createNode(key, undefined, ctx);\n    const v = createNode(value, undefined, ctx);\n    return new Pair(k, v);\n}\nclass Pair {\n    constructor(key, value = null) {\n        Object.defineProperty(this, NODE_TYPE, { value: PAIR });\n        this.key = key;\n        this.value = value;\n    }\n    clone(schema) {\n        let { key, value } = this;\n        if (isNode(key))\n            key = key.clone(schema);\n        if (isNode(value))\n            value = value.clone(schema);\n        return new Pair(key, value);\n    }\n    toJSON(_, ctx) {\n        const pair = ctx?.mapAsMap ? new Map() : {};\n        return addPairToJSMap(ctx, pair, this);\n    }\n    toString(ctx, onComment, onChompKeep) {\n        return ctx?.doc\n            ? stringifyPair(this, ctx, onComment, onChompKeep)\n            : JSON.stringify(this);\n    }\n}\n\nexport { Pair, createPair };\n","import { isNode, isPair } from '../nodes/identity.js';\nimport { stringify } from './stringify.js';\nimport { lineComment, indentComment } from './stringifyComment.js';\n\nfunction stringifyCollection(collection, ctx, options) {\n    const flow = ctx.inFlow ?? collection.flow;\n    const stringify = flow ? stringifyFlowCollection : stringifyBlockCollection;\n    return stringify(collection, ctx, options);\n}\nfunction stringifyBlockCollection({ comment, items }, ctx, { blockItemPrefix, flowChars, itemIndent, onChompKeep, onComment }) {\n    const { indent, options: { commentString } } = ctx;\n    const itemCtx = Object.assign({}, ctx, { indent: itemIndent, type: null });\n    let chompKeep = false; // flag for the preceding node's status\n    const lines = [];\n    for (let i = 0; i < items.length; ++i) {\n        const item = items[i];\n        let comment = null;\n        if (isNode(item)) {\n            if (!chompKeep && item.spaceBefore)\n                lines.push('');\n            addCommentBefore(ctx, lines, item.commentBefore, chompKeep);\n            if (item.comment)\n                comment = item.comment;\n        }\n        else if (isPair(item)) {\n            const ik = isNode(item.key) ? item.key : null;\n            if (ik) {\n                if (!chompKeep && ik.spaceBefore)\n                    lines.push('');\n                addCommentBefore(ctx, lines, ik.commentBefore, chompKeep);\n            }\n        }\n        chompKeep = false;\n        let str = stringify(item, itemCtx, () => (comment = null), () => (chompKeep = true));\n        if (comment)\n            str += lineComment(str, itemIndent, commentString(comment));\n        if (chompKeep && comment)\n            chompKeep = false;\n        lines.push(blockItemPrefix + str);\n    }\n    let str;\n    if (lines.length === 0) {\n        str = flowChars.start + flowChars.end;\n    }\n    else {\n        str = lines[0];\n        for (let i = 1; i < lines.length; ++i) {\n            const line = lines[i];\n            str += line ? `\\n${indent}${line}` : '\\n';\n        }\n    }\n    if (comment) {\n        str += '\\n' + indentComment(commentString(comment), indent);\n        if (onComment)\n            onComment();\n    }\n    else if (chompKeep && onChompKeep)\n        onChompKeep();\n    return str;\n}\nfunction stringifyFlowCollection({ items }, ctx, { flowChars, itemIndent }) {\n    const { indent, indentStep, flowCollectionPadding: fcPadding, options: { commentString } } = ctx;\n    itemIndent += indentStep;\n    const itemCtx = Object.assign({}, ctx, {\n        indent: itemIndent,\n        inFlow: true,\n        type: null\n    });\n    let reqNewline = false;\n    let linesAtValue = 0;\n    const lines = [];\n    for (let i = 0; i < items.length; ++i) {\n        const item = items[i];\n        let comment = null;\n        if (isNode(item)) {\n            if (item.spaceBefore)\n                lines.push('');\n            addCommentBefore(ctx, lines, item.commentBefore, false);\n            if (item.comment)\n                comment = item.comment;\n        }\n        else if (isPair(item)) {\n            const ik = isNode(item.key) ? item.key : null;\n            if (ik) {\n                if (ik.spaceBefore)\n                    lines.push('');\n                addCommentBefore(ctx, lines, ik.commentBefore, false);\n                if (ik.comment)\n                    reqNewline = true;\n            }\n            const iv = isNode(item.value) ? item.value : null;\n            if (iv) {\n                if (iv.comment)\n                    comment = iv.comment;\n                if (iv.commentBefore)\n                    reqNewline = true;\n            }\n            else if (item.value == null && ik?.comment) {\n                comment = ik.comment;\n            }\n        }\n        if (comment)\n            reqNewline = true;\n        let str = stringify(item, itemCtx, () => (comment = null));\n        if (i < items.length - 1)\n            str += ',';\n        if (comment)\n            str += lineComment(str, itemIndent, commentString(comment));\n        if (!reqNewline && (lines.length > linesAtValue || str.includes('\\n')))\n            reqNewline = true;\n        lines.push(str);\n        linesAtValue = lines.length;\n    }\n    const { start, end } = flowChars;\n    if (lines.length === 0) {\n        return start + end;\n    }\n    else {\n        if (!reqNewline) {\n            const len = lines.reduce((sum, line) => sum + line.length + 2, 2);\n            reqNewline = ctx.options.lineWidth > 0 && len > ctx.options.lineWidth;\n        }\n        if (reqNewline) {\n            let str = start;\n            for (const line of lines)\n                str += line ? `\\n${indentStep}${indent}${line}` : '\\n';\n            return `${str}\\n${indent}${end}`;\n        }\n        else {\n            return `${start}${fcPadding}${lines.join(' ')}${fcPadding}${end}`;\n        }\n    }\n}\nfunction addCommentBefore({ indent, options: { commentString } }, lines, comment, chompKeep) {\n    if (comment && chompKeep)\n        comment = comment.replace(/^\\n+/, '');\n    if (comment) {\n        const ic = indentComment(commentString(comment), indent);\n        lines.push(ic.trimStart()); // Avoid double indent on first line\n    }\n}\n\nexport { stringifyCollection };\n","import { stringifyCollection } from '../stringify/stringifyCollection.js';\nimport { addPairToJSMap } from './addPairToJSMap.js';\nimport { Collection } from './Collection.js';\nimport { MAP, isPair, isScalar } from './identity.js';\nimport { Pair, createPair } from './Pair.js';\nimport { isScalarValue } from './Scalar.js';\n\nfunction findPair(items, key) {\n    const k = isScalar(key) ? key.value : key;\n    for (const it of items) {\n        if (isPair(it)) {\n            if (it.key === key || it.key === k)\n                return it;\n            if (isScalar(it.key) && it.key.value === k)\n                return it;\n        }\n    }\n    return undefined;\n}\nclass YAMLMap extends Collection {\n    static get tagName() {\n        return 'tag:yaml.org,2002:map';\n    }\n    constructor(schema) {\n        super(MAP, schema);\n        this.items = [];\n    }\n    /**\n     * A generic collection parsing method that can be extended\n     * to other node classes that inherit from YAMLMap\n     */\n    static from(schema, obj, ctx) {\n        const { keepUndefined, replacer } = ctx;\n        const map = new this(schema);\n        const add = (key, value) => {\n            if (typeof replacer === 'function')\n                value = replacer.call(obj, key, value);\n            else if (Array.isArray(replacer) && !replacer.includes(key))\n                return;\n            if (value !== undefined || keepUndefined)\n                map.items.push(createPair(key, value, ctx));\n        };\n        if (obj instanceof Map) {\n            for (const [key, value] of obj)\n                add(key, value);\n        }\n        else if (obj && typeof obj === 'object') {\n            for (const key of Object.keys(obj))\n                add(key, obj[key]);\n        }\n        if (typeof schema.sortMapEntries === 'function') {\n            map.items.sort(schema.sortMapEntries);\n        }\n        return map;\n    }\n    /**\n     * Adds a value to the collection.\n     *\n     * @param overwrite - If not set `true`, using a key that is already in the\n     *   collection will throw. Otherwise, overwrites the previous value.\n     */\n    add(pair, overwrite) {\n        let _pair;\n        if (isPair(pair))\n            _pair = pair;\n        else if (!pair || typeof pair !== 'object' || !('key' in pair)) {\n            // In TypeScript, this never happens.\n            _pair = new Pair(pair, pair?.value);\n        }\n        else\n            _pair = new Pair(pair.key, pair.value);\n        const prev = findPair(this.items, _pair.key);\n        const sortEntries = this.schema?.sortMapEntries;\n        if (prev) {\n            if (!overwrite)\n                throw new Error(`Key ${_pair.key} already set`);\n            // For scalars, keep the old node & its comments and anchors\n            if (isScalar(prev.value) && isScalarValue(_pair.value))\n                prev.value.value = _pair.value;\n            else\n                prev.value = _pair.value;\n        }\n        else if (sortEntries) {\n            const i = this.items.findIndex(item => sortEntries(_pair, item) < 0);\n            if (i === -1)\n                this.items.push(_pair);\n            else\n                this.items.splice(i, 0, _pair);\n        }\n        else {\n            this.items.push(_pair);\n        }\n    }\n    delete(key) {\n        const it = findPair(this.items, key);\n        if (!it)\n            return false;\n        const del = this.items.splice(this.items.indexOf(it), 1);\n        return del.length > 0;\n    }\n    get(key, keepScalar) {\n        const it = findPair(this.items, key);\n        const node = it?.value;\n        return (!keepScalar && isScalar(node) ? node.value : node) ?? undefined;\n    }\n    has(key) {\n        return !!findPair(this.items, key);\n    }\n    set(key, value) {\n        this.add(new Pair(key, value), true);\n    }\n    /**\n     * @param ctx - Conversion context, originally set in Document#toJS()\n     * @param {Class} Type - If set, forces the returned collection type\n     * @returns Instance of Type, Map, or Object\n     */\n    toJSON(_, ctx, Type) {\n        const map = Type ? new Type() : ctx?.mapAsMap ? new Map() : {};\n        if (ctx?.onCreate)\n            ctx.onCreate(map);\n        for (const item of this.items)\n            addPairToJSMap(ctx, map, item);\n        return map;\n    }\n    toString(ctx, onComment, onChompKeep) {\n        if (!ctx)\n            return JSON.stringify(this);\n        for (const item of this.items) {\n            if (!isPair(item))\n                throw new Error(`Map items must all be pairs; found ${JSON.stringify(item)} instead`);\n        }\n        if (!ctx.allNullValues && this.hasAllNullValues(false))\n            ctx = Object.assign({}, ctx, { allNullValues: true });\n        return stringifyCollection(this, ctx, {\n            blockItemPrefix: '',\n            flowChars: { start: '{', end: '}' },\n            itemIndent: ctx.indent || '',\n            onChompKeep,\n            onComment\n        });\n    }\n}\n\nexport { YAMLMap, findPair };\n","import { isMap } from '../../nodes/identity.js';\nimport { YAMLMap } from '../../nodes/YAMLMap.js';\n\nconst map = {\n    collection: 'map',\n    default: true,\n    nodeClass: YAMLMap,\n    tag: 'tag:yaml.org,2002:map',\n    resolve(map, onError) {\n        if (!isMap(map))\n            onError('Expected a mapping for this tag');\n        return map;\n    },\n    createNode: (schema, obj, ctx) => YAMLMap.from(schema, obj, ctx)\n};\n\nexport { map };\n","import { createNode } from '../doc/createNode.js';\nimport { stringifyCollection } from '../stringify/stringifyCollection.js';\nimport { Collection } from './Collection.js';\nimport { SEQ, isScalar } from './identity.js';\nimport { isScalarValue } from './Scalar.js';\nimport { toJS } from './toJS.js';\n\nclass YAMLSeq extends Collection {\n    static get tagName() {\n        return 'tag:yaml.org,2002:seq';\n    }\n    constructor(schema) {\n        super(SEQ, schema);\n        this.items = [];\n    }\n    add(value) {\n        this.items.push(value);\n    }\n    /**\n     * Removes a value from the collection.\n     *\n     * `key` must contain a representation of an integer for this to succeed.\n     * It may be wrapped in a `Scalar`.\n     *\n     * @returns `true` if the item was found and removed.\n     */\n    delete(key) {\n        const idx = asItemIndex(key);\n        if (typeof idx !== 'number')\n            return false;\n        const del = this.items.splice(idx, 1);\n        return del.length > 0;\n    }\n    get(key, keepScalar) {\n        const idx = asItemIndex(key);\n        if (typeof idx !== 'number')\n            return undefined;\n        const it = this.items[idx];\n        return !keepScalar && isScalar(it) ? it.value : it;\n    }\n    /**\n     * Checks if the collection includes a value with the key `key`.\n     *\n     * `key` must contain a representation of an integer for this to succeed.\n     * It may be wrapped in a `Scalar`.\n     */\n    has(key) {\n        const idx = asItemIndex(key);\n        return typeof idx === 'number' && idx < this.items.length;\n    }\n    /**\n     * Sets a value in this collection. For `!!set`, `value` needs to be a\n     * boolean to add/remove the item from the set.\n     *\n     * If `key` does not contain a representation of an integer, this will throw.\n     * It may be wrapped in a `Scalar`.\n     */\n    set(key, value) {\n        const idx = asItemIndex(key);\n        if (typeof idx !== 'number')\n            throw new Error(`Expected a valid index, not ${key}.`);\n        const prev = this.items[idx];\n        if (isScalar(prev) && isScalarValue(value))\n            prev.value = value;\n        else\n            this.items[idx] = value;\n    }\n    toJSON(_, ctx) {\n        const seq = [];\n        if (ctx?.onCreate)\n            ctx.onCreate(seq);\n        let i = 0;\n        for (const item of this.items)\n            seq.push(toJS(item, String(i++), ctx));\n        return seq;\n    }\n    toString(ctx, onComment, onChompKeep) {\n        if (!ctx)\n            return JSON.stringify(this);\n        return stringifyCollection(this, ctx, {\n            blockItemPrefix: '- ',\n            flowChars: { start: '[', end: ']' },\n            itemIndent: (ctx.indent || '') + '  ',\n            onChompKeep,\n            onComment\n        });\n    }\n    static from(schema, obj, ctx) {\n        const { replacer } = ctx;\n        const seq = new this(schema);\n        if (obj && Symbol.iterator in Object(obj)) {\n            let i = 0;\n            for (let it of obj) {\n                if (typeof replacer === 'function') {\n                    const key = obj instanceof Set ? it : String(i++);\n                    it = replacer.call(obj, key, it);\n                }\n                seq.items.push(createNode(it, undefined, ctx));\n            }\n        }\n        return seq;\n    }\n}\nfunction asItemIndex(key) {\n    let idx = isScalar(key) ? key.value : key;\n    if (idx && typeof idx === 'string')\n        idx = Number(idx);\n    return typeof idx === 'number' && Number.isInteger(idx) && idx >= 0\n        ? idx\n        : null;\n}\n\nexport { YAMLSeq };\n","import { isSeq } from '../../nodes/identity.js';\nimport { YAMLSeq } from '../../nodes/YAMLSeq.js';\n\nconst seq = {\n    collection: 'seq',\n    default: true,\n    nodeClass: YAMLSeq,\n    tag: 'tag:yaml.org,2002:seq',\n    resolve(seq, onError) {\n        if (!isSeq(seq))\n            onError('Expected a sequence for this tag');\n        return seq;\n    },\n    createNode: (schema, obj, ctx) => YAMLSeq.from(schema, obj, ctx)\n};\n\nexport { seq };\n","import { stringifyString } from '../../stringify/stringifyString.js';\n\nconst string = {\n    identify: value => typeof value === 'string',\n    default: true,\n    tag: 'tag:yaml.org,2002:str',\n    resolve: str => str,\n    stringify(item, ctx, onComment, onChompKeep) {\n        ctx = Object.assign({ actualString: true }, ctx);\n        return stringifyString(item, ctx, onComment, onChompKeep);\n    }\n};\n\nexport { string };\n","import { Scalar } from '../../nodes/Scalar.js';\n\nconst nullTag = {\n    identify: value => value == null,\n    createNode: () => new Scalar(null),\n    default: true,\n    tag: 'tag:yaml.org,2002:null',\n    test: /^(?:~|[Nn]ull|NULL)?$/,\n    resolve: () => new Scalar(null),\n    stringify: ({ source }, ctx) => typeof source === 'string' && nullTag.test.test(source)\n        ? source\n        : ctx.options.nullStr\n};\n\nexport { nullTag };\n","import { Scalar } from '../../nodes/Scalar.js';\n\nconst boolTag = {\n    identify: value => typeof value === 'boolean',\n    default: true,\n    tag: 'tag:yaml.org,2002:bool',\n    test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,\n    resolve: str => new Scalar(str[0] === 't' || str[0] === 'T'),\n    stringify({ source, value }, ctx) {\n        if (source && boolTag.test.test(source)) {\n            const sv = source[0] === 't' || source[0] === 'T';\n            if (value === sv)\n                return source;\n        }\n        return value ? ctx.options.trueStr : ctx.options.falseStr;\n    }\n};\n\nexport { boolTag };\n","function stringifyNumber({ format, minFractionDigits, tag, value }) {\n    if (typeof value === 'bigint')\n        return String(value);\n    const num = typeof value === 'number' ? value : Number(value);\n    if (!isFinite(num))\n        return isNaN(num) ? '.nan' : num < 0 ? '-.inf' : '.inf';\n    let n = JSON.stringify(value);\n    if (!format &&\n        minFractionDigits &&\n        (!tag || tag === 'tag:yaml.org,2002:float') &&\n        /^\\d/.test(n)) {\n        let i = n.indexOf('.');\n        if (i < 0) {\n            i = n.length;\n            n += '.';\n        }\n        let d = minFractionDigits - (n.length - i - 1);\n        while (d-- > 0)\n            n += '0';\n    }\n    return n;\n}\n\nexport { stringifyNumber };\n","import { Scalar } from '../../nodes/Scalar.js';\nimport { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\nconst floatNaN = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n    resolve: str => str.slice(-3).toLowerCase() === 'nan'\n        ? NaN\n        : str[0] === '-'\n            ? Number.NEGATIVE_INFINITY\n            : Number.POSITIVE_INFINITY,\n    stringify: stringifyNumber\n};\nconst floatExp = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    format: 'EXP',\n    test: /^[-+]?(?:\\.[0-9]+|[0-9]+(?:\\.[0-9]*)?)[eE][-+]?[0-9]+$/,\n    resolve: str => parseFloat(str),\n    stringify(node) {\n        const num = Number(node.value);\n        return isFinite(num) ? num.toExponential() : stringifyNumber(node);\n    }\n};\nconst float = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    test: /^[-+]?(?:\\.[0-9]+|[0-9]+\\.[0-9]*)$/,\n    resolve(str) {\n        const node = new Scalar(parseFloat(str));\n        const dot = str.indexOf('.');\n        if (dot !== -1 && str[str.length - 1] === '0')\n            node.minFractionDigits = str.length - dot - 1;\n        return node;\n    },\n    stringify: stringifyNumber\n};\n\nexport { float, floatExp, floatNaN };\n","import { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nconst intResolve = (str, offset, radix, { intAsBigInt }) => (intAsBigInt ? BigInt(str) : parseInt(str.substring(offset), radix));\nfunction intStringify(node, radix, prefix) {\n    const { value } = node;\n    if (intIdentify(value) && value >= 0)\n        return prefix + value.toString(radix);\n    return stringifyNumber(node);\n}\nconst intOct = {\n    identify: value => intIdentify(value) && value >= 0,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'OCT',\n    test: /^0o[0-7]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 2, 8, opt),\n    stringify: node => intStringify(node, 8, '0o')\n};\nconst int = {\n    identify: intIdentify,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    test: /^[-+]?[0-9]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n    stringify: stringifyNumber\n};\nconst intHex = {\n    identify: value => intIdentify(value) && value >= 0,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'HEX',\n    test: /^0x[0-9a-fA-F]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n    stringify: node => intStringify(node, 16, '0x')\n};\n\nexport { int, intHex, intOct };\n","import { map } from '../common/map.js';\nimport { nullTag } from '../common/null.js';\nimport { seq } from '../common/seq.js';\nimport { string } from '../common/string.js';\nimport { boolTag } from './bool.js';\nimport { floatNaN, floatExp, float } from './float.js';\nimport { intOct, int, intHex } from './int.js';\n\nconst schema = [\n    map,\n    seq,\n    string,\n    nullTag,\n    boolTag,\n    intOct,\n    int,\n    intHex,\n    floatNaN,\n    floatExp,\n    float\n];\n\nexport { schema };\n","import { Scalar } from '../../nodes/Scalar.js';\nimport { map } from '../common/map.js';\nimport { seq } from '../common/seq.js';\n\nfunction intIdentify(value) {\n    return typeof value === 'bigint' || Number.isInteger(value);\n}\nconst stringifyJSON = ({ value }) => JSON.stringify(value);\nconst jsonScalars = [\n    {\n        identify: value => typeof value === 'string',\n        default: true,\n        tag: 'tag:yaml.org,2002:str',\n        resolve: str => str,\n        stringify: stringifyJSON\n    },\n    {\n        identify: value => value == null,\n        createNode: () => new Scalar(null),\n        default: true,\n        tag: 'tag:yaml.org,2002:null',\n        test: /^null$/,\n        resolve: () => null,\n        stringify: stringifyJSON\n    },\n    {\n        identify: value => typeof value === 'boolean',\n        default: true,\n        tag: 'tag:yaml.org,2002:bool',\n        test: /^true$|^false$/,\n        resolve: str => str === 'true',\n        stringify: stringifyJSON\n    },\n    {\n        identify: intIdentify,\n        default: true,\n        tag: 'tag:yaml.org,2002:int',\n        test: /^-?(?:0|[1-9][0-9]*)$/,\n        resolve: (str, _onError, { intAsBigInt }) => intAsBigInt ? BigInt(str) : parseInt(str, 10),\n        stringify: ({ value }) => intIdentify(value) ? value.toString() : JSON.stringify(value)\n    },\n    {\n        identify: value => typeof value === 'number',\n        default: true,\n        tag: 'tag:yaml.org,2002:float',\n        test: /^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,\n        resolve: str => parseFloat(str),\n        stringify: stringifyJSON\n    }\n];\nconst jsonError = {\n    default: true,\n    tag: '',\n    test: /^/,\n    resolve(str, onError) {\n        onError(`Unresolved plain scalar ${JSON.stringify(str)}`);\n        return str;\n    }\n};\nconst schema = [map, seq].concat(jsonScalars, jsonError);\n\nexport { schema };\n","import { Scalar } from '../../nodes/Scalar.js';\nimport { stringifyString } from '../../stringify/stringifyString.js';\n\nconst binary = {\n    identify: value => value instanceof Uint8Array, // Buffer inherits from Uint8Array\n    default: false,\n    tag: 'tag:yaml.org,2002:binary',\n    /**\n     * Returns a Buffer in node and an Uint8Array in browsers\n     *\n     * To use the resulting buffer as an image, you'll want to do something like:\n     *\n     *   const blob = new Blob([buffer], { type: 'image/jpeg' })\n     *   document.querySelector('#photo').src = URL.createObjectURL(blob)\n     */\n    resolve(src, onError) {\n        if (typeof atob === 'function') {\n            // On IE 11, atob() can't handle newlines\n            const str = atob(src.replace(/[\\n\\r]/g, ''));\n            const buffer = new Uint8Array(str.length);\n            for (let i = 0; i < str.length; ++i)\n                buffer[i] = str.charCodeAt(i);\n            return buffer;\n        }\n        else {\n            onError('This environment does not support reading binary tags; either Buffer or atob is required');\n            return src;\n        }\n    },\n    stringify({ comment, type, value }, ctx, onComment, onChompKeep) {\n        if (!value)\n            return '';\n        const buf = value; // checked earlier by binary.identify()\n        let str;\n        if (typeof btoa === 'function') {\n            let s = '';\n            for (let i = 0; i < buf.length; ++i)\n                s += String.fromCharCode(buf[i]);\n            str = btoa(s);\n        }\n        else {\n            throw new Error('This environment does not support writing binary tags; either Buffer or btoa is required');\n        }\n        type ?? (type = Scalar.BLOCK_LITERAL);\n        if (type !== Scalar.QUOTE_DOUBLE) {\n            const lineWidth = Math.max(ctx.options.lineWidth - ctx.indent.length, ctx.options.minContentWidth);\n            const n = Math.ceil(str.length / lineWidth);\n            const lines = new Array(n);\n            for (let i = 0, o = 0; i < n; ++i, o += lineWidth) {\n                lines[i] = str.substr(o, lineWidth);\n            }\n            str = lines.join(type === Scalar.BLOCK_LITERAL ? '\\n' : ' ');\n        }\n        return stringifyString({ comment, type, value: str }, ctx, onComment, onChompKeep);\n    }\n};\n\nexport { binary };\n","import { isSeq, isPair, isMap } from '../../nodes/identity.js';\nimport { createPair, Pair } from '../../nodes/Pair.js';\nimport { Scalar } from '../../nodes/Scalar.js';\nimport { YAMLSeq } from '../../nodes/YAMLSeq.js';\n\nfunction resolvePairs(seq, onError) {\n    if (isSeq(seq)) {\n        for (let i = 0; i < seq.items.length; ++i) {\n            let item = seq.items[i];\n            if (isPair(item))\n                continue;\n            else if (isMap(item)) {\n                if (item.items.length > 1)\n                    onError('Each pair must have its own sequence indicator');\n                const pair = item.items[0] || new Pair(new Scalar(null));\n                if (item.commentBefore)\n                    pair.key.commentBefore = pair.key.commentBefore\n                        ? `${item.commentBefore}\\n${pair.key.commentBefore}`\n                        : item.commentBefore;\n                if (item.comment) {\n                    const cn = pair.value ?? pair.key;\n                    cn.comment = cn.comment\n                        ? `${item.comment}\\n${cn.comment}`\n                        : item.comment;\n                }\n                item = pair;\n            }\n            seq.items[i] = isPair(item) ? item : new Pair(item);\n        }\n    }\n    else\n        onError('Expected a sequence for this tag');\n    return seq;\n}\nfunction createPairs(schema, iterable, ctx) {\n    const { replacer } = ctx;\n    const pairs = new YAMLSeq(schema);\n    pairs.tag = 'tag:yaml.org,2002:pairs';\n    let i = 0;\n    if (iterable && Symbol.iterator in Object(iterable))\n        for (let it of iterable) {\n            if (typeof replacer === 'function')\n                it = replacer.call(iterable, String(i++), it);\n            let key, value;\n            if (Array.isArray(it)) {\n                if (it.length === 2) {\n                    key = it[0];\n                    value = it[1];\n                }\n                else\n                    throw new TypeError(`Expected [key, value] tuple: ${it}`);\n            }\n            else if (it && it instanceof Object) {\n                const keys = Object.keys(it);\n                if (keys.length === 1) {\n                    key = keys[0];\n                    value = it[key];\n                }\n                else {\n                    throw new TypeError(`Expected tuple with one key, not ${keys.length} keys`);\n                }\n            }\n            else {\n                key = it;\n            }\n            pairs.items.push(createPair(key, value, ctx));\n        }\n    return pairs;\n}\nconst pairs = {\n    collection: 'seq',\n    default: false,\n    tag: 'tag:yaml.org,2002:pairs',\n    resolve: resolvePairs,\n    createNode: createPairs\n};\n\nexport { createPairs, pairs, resolvePairs };\n","import { isScalar, isPair } from '../../nodes/identity.js';\nimport { toJS } from '../../nodes/toJS.js';\nimport { YAMLMap } from '../../nodes/YAMLMap.js';\nimport { YAMLSeq } from '../../nodes/YAMLSeq.js';\nimport { resolvePairs, createPairs } from './pairs.js';\n\nclass YAMLOMap extends YAMLSeq {\n    constructor() {\n        super();\n        this.add = YAMLMap.prototype.add.bind(this);\n        this.delete = YAMLMap.prototype.delete.bind(this);\n        this.get = YAMLMap.prototype.get.bind(this);\n        this.has = YAMLMap.prototype.has.bind(this);\n        this.set = YAMLMap.prototype.set.bind(this);\n        this.tag = YAMLOMap.tag;\n    }\n    /**\n     * If `ctx` is given, the return type is actually `Map<unknown, unknown>`,\n     * but TypeScript won't allow widening the signature of a child method.\n     */\n    toJSON(_, ctx) {\n        if (!ctx)\n            return super.toJSON(_);\n        const map = new Map();\n        if (ctx?.onCreate)\n            ctx.onCreate(map);\n        for (const pair of this.items) {\n            let key, value;\n            if (isPair(pair)) {\n                key = toJS(pair.key, '', ctx);\n                value = toJS(pair.value, key, ctx);\n            }\n            else {\n                key = toJS(pair, '', ctx);\n            }\n            if (map.has(key))\n                throw new Error('Ordered maps must not include duplicate keys');\n            map.set(key, value);\n        }\n        return map;\n    }\n    static from(schema, iterable, ctx) {\n        const pairs = createPairs(schema, iterable, ctx);\n        const omap = new this();\n        omap.items = pairs.items;\n        return omap;\n    }\n}\nYAMLOMap.tag = 'tag:yaml.org,2002:omap';\nconst omap = {\n    collection: 'seq',\n    identify: value => value instanceof Map,\n    nodeClass: YAMLOMap,\n    default: false,\n    tag: 'tag:yaml.org,2002:omap',\n    resolve(seq, onError) {\n        const pairs = resolvePairs(seq, onError);\n        const seenKeys = [];\n        for (const { key } of pairs.items) {\n            if (isScalar(key)) {\n                if (seenKeys.includes(key.value)) {\n                    onError(`Ordered maps must not include duplicate keys: ${key.value}`);\n                }\n                else {\n                    seenKeys.push(key.value);\n                }\n            }\n        }\n        return Object.assign(new YAMLOMap(), pairs);\n    },\n    createNode: (schema, iterable, ctx) => YAMLOMap.from(schema, iterable, ctx)\n};\n\nexport { YAMLOMap, omap };\n","import { Scalar } from '../../nodes/Scalar.js';\n\nfunction boolStringify({ value, source }, ctx) {\n    const boolObj = value ? trueTag : falseTag;\n    if (source && boolObj.test.test(source))\n        return source;\n    return value ? ctx.options.trueStr : ctx.options.falseStr;\n}\nconst trueTag = {\n    identify: value => value === true,\n    default: true,\n    tag: 'tag:yaml.org,2002:bool',\n    test: /^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,\n    resolve: () => new Scalar(true),\n    stringify: boolStringify\n};\nconst falseTag = {\n    identify: value => value === false,\n    default: true,\n    tag: 'tag:yaml.org,2002:bool',\n    test: /^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,\n    resolve: () => new Scalar(false),\n    stringify: boolStringify\n};\n\nexport { falseTag, trueTag };\n","import { Scalar } from '../../nodes/Scalar.js';\nimport { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\nconst floatNaN = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n    resolve: (str) => str.slice(-3).toLowerCase() === 'nan'\n        ? NaN\n        : str[0] === '-'\n            ? Number.NEGATIVE_INFINITY\n            : Number.POSITIVE_INFINITY,\n    stringify: stringifyNumber\n};\nconst floatExp = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    format: 'EXP',\n    test: /^[-+]?(?:[0-9][0-9_]*)?(?:\\.[0-9_]*)?[eE][-+]?[0-9]+$/,\n    resolve: (str) => parseFloat(str.replace(/_/g, '')),\n    stringify(node) {\n        const num = Number(node.value);\n        return isFinite(num) ? num.toExponential() : stringifyNumber(node);\n    }\n};\nconst float = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    test: /^[-+]?(?:[0-9][0-9_]*)?\\.[0-9_]*$/,\n    resolve(str) {\n        const node = new Scalar(parseFloat(str.replace(/_/g, '')));\n        const dot = str.indexOf('.');\n        if (dot !== -1) {\n            const f = str.substring(dot + 1).replace(/_/g, '');\n            if (f[f.length - 1] === '0')\n                node.minFractionDigits = f.length;\n        }\n        return node;\n    },\n    stringify: stringifyNumber\n};\n\nexport { float, floatExp, floatNaN };\n","import { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nfunction intResolve(str, offset, radix, { intAsBigInt }) {\n    const sign = str[0];\n    if (sign === '-' || sign === '+')\n        offset += 1;\n    str = str.substring(offset).replace(/_/g, '');\n    if (intAsBigInt) {\n        switch (radix) {\n            case 2:\n                str = `0b${str}`;\n                break;\n            case 8:\n                str = `0o${str}`;\n                break;\n            case 16:\n                str = `0x${str}`;\n                break;\n        }\n        const n = BigInt(str);\n        return sign === '-' ? BigInt(-1) * n : n;\n    }\n    const n = parseInt(str, radix);\n    return sign === '-' ? -1 * n : n;\n}\nfunction intStringify(node, radix, prefix) {\n    const { value } = node;\n    if (intIdentify(value)) {\n        const str = value.toString(radix);\n        return value < 0 ? '-' + prefix + str.substr(1) : prefix + str;\n    }\n    return stringifyNumber(node);\n}\nconst intBin = {\n    identify: intIdentify,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'BIN',\n    test: /^[-+]?0b[0-1_]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 2, 2, opt),\n    stringify: node => intStringify(node, 2, '0b')\n};\nconst intOct = {\n    identify: intIdentify,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'OCT',\n    test: /^[-+]?0[0-7_]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 1, 8, opt),\n    stringify: node => intStringify(node, 8, '0')\n};\nconst int = {\n    identify: intIdentify,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    test: /^[-+]?[0-9][0-9_]*$/,\n    resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n    stringify: stringifyNumber\n};\nconst intHex = {\n    identify: intIdentify,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'HEX',\n    test: /^[-+]?0x[0-9a-fA-F_]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n    stringify: node => intStringify(node, 16, '0x')\n};\n\nexport { int, intBin, intHex, intOct };\n","import { isMap, isPair, isScalar } from '../../nodes/identity.js';\nimport { Pair, createPair } from '../../nodes/Pair.js';\nimport { YAMLMap, findPair } from '../../nodes/YAMLMap.js';\n\nclass YAMLSet extends YAMLMap {\n    constructor(schema) {\n        super(schema);\n        this.tag = YAMLSet.tag;\n    }\n    add(key) {\n        let pair;\n        if (isPair(key))\n            pair = key;\n        else if (key &&\n            typeof key === 'object' &&\n            'key' in key &&\n            'value' in key &&\n            key.value === null)\n            pair = new Pair(key.key, null);\n        else\n            pair = new Pair(key, null);\n        const prev = findPair(this.items, pair.key);\n        if (!prev)\n            this.items.push(pair);\n    }\n    /**\n     * If `keepPair` is `true`, returns the Pair matching `key`.\n     * Otherwise, returns the value of that Pair's key.\n     */\n    get(key, keepPair) {\n        const pair = findPair(this.items, key);\n        return !keepPair && isPair(pair)\n            ? isScalar(pair.key)\n                ? pair.key.value\n                : pair.key\n            : pair;\n    }\n    set(key, value) {\n        if (typeof value !== 'boolean')\n            throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`);\n        const prev = findPair(this.items, key);\n        if (prev && !value) {\n            this.items.splice(this.items.indexOf(prev), 1);\n        }\n        else if (!prev && value) {\n            this.items.push(new Pair(key));\n        }\n    }\n    toJSON(_, ctx) {\n        return super.toJSON(_, ctx, Set);\n    }\n    toString(ctx, onComment, onChompKeep) {\n        if (!ctx)\n            return JSON.stringify(this);\n        if (this.hasAllNullValues(true))\n            return super.toString(Object.assign({}, ctx, { allNullValues: true }), onComment, onChompKeep);\n        else\n            throw new Error('Set items must all have null values');\n    }\n    static from(schema, iterable, ctx) {\n        const { replacer } = ctx;\n        const set = new this(schema);\n        if (iterable && Symbol.iterator in Object(iterable))\n            for (let value of iterable) {\n                if (typeof replacer === 'function')\n                    value = replacer.call(iterable, value, value);\n                set.items.push(createPair(value, null, ctx));\n            }\n        return set;\n    }\n}\nYAMLSet.tag = 'tag:yaml.org,2002:set';\nconst set = {\n    collection: 'map',\n    identify: value => value instanceof Set,\n    nodeClass: YAMLSet,\n    default: false,\n    tag: 'tag:yaml.org,2002:set',\n    createNode: (schema, iterable, ctx) => YAMLSet.from(schema, iterable, ctx),\n    resolve(map, onError) {\n        if (isMap(map)) {\n            if (map.hasAllNullValues(true))\n                return Object.assign(new YAMLSet(), map);\n            else\n                onError('Set items must all have null values');\n        }\n        else\n            onError('Expected a mapping for this tag');\n        return map;\n    }\n};\n\nexport { YAMLSet, set };\n","import { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\n/** Internal types handle bigint as number, because TS can't figure it out. */\nfunction parseSexagesimal(str, asBigInt) {\n    const sign = str[0];\n    const parts = sign === '-' || sign === '+' ? str.substring(1) : str;\n    const num = (n) => asBigInt ? BigInt(n) : Number(n);\n    const res = parts\n        .replace(/_/g, '')\n        .split(':')\n        .reduce((res, p) => res * num(60) + num(p), num(0));\n    return (sign === '-' ? num(-1) * res : res);\n}\n/**\n * hhhh:mm:ss.sss\n *\n * Internal types handle bigint as number, because TS can't figure it out.\n */\nfunction stringifySexagesimal(node) {\n    let { value } = node;\n    let num = (n) => n;\n    if (typeof value === 'bigint')\n        num = n => BigInt(n);\n    else if (isNaN(value) || !isFinite(value))\n        return stringifyNumber(node);\n    let sign = '';\n    if (value < 0) {\n        sign = '-';\n        value *= num(-1);\n    }\n    const _60 = num(60);\n    const parts = [value % _60]; // seconds, including ms\n    if (value < 60) {\n        parts.unshift(0); // at least one : is required\n    }\n    else {\n        value = (value - parts[0]) / _60;\n        parts.unshift(value % _60); // minutes\n        if (value >= 60) {\n            value = (value - parts[0]) / _60;\n            parts.unshift(value); // hours\n        }\n    }\n    return (sign +\n        parts\n            .map(n => String(n).padStart(2, '0'))\n            .join(':')\n            .replace(/000000\\d*$/, '') // % 60 may introduce error\n    );\n}\nconst intTime = {\n    identify: value => typeof value === 'bigint' || Number.isInteger(value),\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'TIME',\n    test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,\n    resolve: (str, _onError, { intAsBigInt }) => parseSexagesimal(str, intAsBigInt),\n    stringify: stringifySexagesimal\n};\nconst floatTime = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    format: 'TIME',\n    test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*$/,\n    resolve: str => parseSexagesimal(str, false),\n    stringify: stringifySexagesimal\n};\nconst timestamp = {\n    identify: value => value instanceof Date,\n    default: true,\n    tag: 'tag:yaml.org,2002:timestamp',\n    // If the time zone is omitted, the timestamp is assumed to be specified in UTC. The time part\n    // may be omitted altogether, resulting in a date format. In such a case, the time part is\n    // assumed to be 00:00:00Z (start of day, UTC).\n    test: RegExp('^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})' + // YYYY-Mm-Dd\n        '(?:' + // time is optional\n        '(?:t|T|[ \\\\t]+)' + // t | T | whitespace\n        '([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\\\.[0-9]+)?)' + // Hh:Mm:Ss(.ss)?\n        '(?:[ \\\\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?' + // Z | +5 | -03:30\n        ')?$'),\n    resolve(str) {\n        const match = str.match(timestamp.test);\n        if (!match)\n            throw new Error('!!timestamp expects a date, starting with yyyy-mm-dd');\n        const [, year, month, day, hour, minute, second] = match.map(Number);\n        const millisec = match[7] ? Number((match[7] + '00').substr(1, 3)) : 0;\n        let date = Date.UTC(year, month - 1, day, hour || 0, minute || 0, second || 0, millisec);\n        const tz = match[8];\n        if (tz && tz !== 'Z') {\n            let d = parseSexagesimal(tz, false);\n            if (Math.abs(d) < 30)\n                d *= 60;\n            date -= 60000 * d;\n        }\n        return new Date(date);\n    },\n    stringify: ({ value }) => value?.toISOString().replace(/(T00:00:00)?\\.000Z$/, '') ?? ''\n};\n\nexport { floatTime, intTime, timestamp };\n","import { map } from '../common/map.js';\nimport { nullTag } from '../common/null.js';\nimport { seq } from '../common/seq.js';\nimport { string } from '../common/string.js';\nimport { binary } from './binary.js';\nimport { trueTag, falseTag } from './bool.js';\nimport { floatNaN, floatExp, float } from './float.js';\nimport { intBin, intOct, int, intHex } from './int.js';\nimport { merge } from './merge.js';\nimport { omap } from './omap.js';\nimport { pairs } from './pairs.js';\nimport { set } from './set.js';\nimport { intTime, floatTime, timestamp } from './timestamp.js';\n\nconst schema = [\n    map,\n    seq,\n    string,\n    nullTag,\n    trueTag,\n    falseTag,\n    intBin,\n    intOct,\n    int,\n    intHex,\n    floatNaN,\n    floatExp,\n    float,\n    binary,\n    merge,\n    omap,\n    pairs,\n    set,\n    intTime,\n    floatTime,\n    timestamp\n];\n\nexport { schema };\n","import { map } from './common/map.js';\nimport { nullTag } from './common/null.js';\nimport { seq } from './common/seq.js';\nimport { string } from './common/string.js';\nimport { boolTag } from './core/bool.js';\nimport { floatNaN, floatExp, float } from './core/float.js';\nimport { intOct, intHex, int } from './core/int.js';\nimport { schema } from './core/schema.js';\nimport { schema as schema$1 } from './json/schema.js';\nimport { binary } from './yaml-1.1/binary.js';\nimport { merge } from './yaml-1.1/merge.js';\nimport { omap } from './yaml-1.1/omap.js';\nimport { pairs } from './yaml-1.1/pairs.js';\nimport { schema as schema$2 } from './yaml-1.1/schema.js';\nimport { set } from './yaml-1.1/set.js';\nimport { timestamp, intTime, floatTime } from './yaml-1.1/timestamp.js';\n\nconst schemas = new Map([\n    ['core', schema],\n    ['failsafe', [map, seq, string]],\n    ['json', schema$1],\n    ['yaml11', schema$2],\n    ['yaml-1.1', schema$2]\n]);\nconst tagsByName = {\n    binary,\n    bool: boolTag,\n    float,\n    floatExp,\n    floatNaN,\n    floatTime,\n    int,\n    intHex,\n    intOct,\n    intTime,\n    map,\n    merge,\n    null: nullTag,\n    omap,\n    pairs,\n    seq,\n    set,\n    timestamp\n};\nconst coreKnownTags = {\n    'tag:yaml.org,2002:binary': binary,\n    'tag:yaml.org,2002:merge': merge,\n    'tag:yaml.org,2002:omap': omap,\n    'tag:yaml.org,2002:pairs': pairs,\n    'tag:yaml.org,2002:set': set,\n    'tag:yaml.org,2002:timestamp': timestamp\n};\nfunction getTags(customTags, schemaName, addMergeTag) {\n    const schemaTags = schemas.get(schemaName);\n    if (schemaTags && !customTags) {\n        return addMergeTag && !schemaTags.includes(merge)\n            ? schemaTags.concat(merge)\n            : schemaTags.slice();\n    }\n    let tags = schemaTags;\n    if (!tags) {\n        if (Array.isArray(customTags))\n            tags = [];\n        else {\n            const keys = Array.from(schemas.keys())\n                .filter(key => key !== 'yaml11')\n                .map(key => JSON.stringify(key))\n                .join(', ');\n            throw new Error(`Unknown schema \"${schemaName}\"; use one of ${keys} or define customTags array`);\n        }\n    }\n    if (Array.isArray(customTags)) {\n        for (const tag of customTags)\n            tags = tags.concat(tag);\n    }\n    else if (typeof customTags === 'function') {\n        tags = customTags(tags.slice());\n    }\n    if (addMergeTag)\n        tags = tags.concat(merge);\n    return tags.reduce((tags, tag) => {\n        const tagObj = typeof tag === 'string' ? tagsByName[tag] : tag;\n        if (!tagObj) {\n            const tagName = JSON.stringify(tag);\n            const keys = Object.keys(tagsByName)\n                .map(key => JSON.stringify(key))\n                .join(', ');\n            throw new Error(`Unknown custom tag ${tagName}; use one of ${keys}`);\n        }\n        if (!tags.includes(tagObj))\n            tags.push(tagObj);\n        return tags;\n    }, []);\n}\n\nexport { coreKnownTags, getTags };\n","import { MAP, SCALAR, SEQ } from '../nodes/identity.js';\nimport { map } from './common/map.js';\nimport { seq } from './common/seq.js';\nimport { string } from './common/string.js';\nimport { getTags, coreKnownTags } from './tags.js';\n\nconst sortMapEntriesByKey = (a, b) => a.key < b.key ? -1 : a.key > b.key ? 1 : 0;\nclass Schema {\n    constructor({ compat, customTags, merge, resolveKnownTags, schema, sortMapEntries, toStringDefaults }) {\n        this.compat = Array.isArray(compat)\n            ? getTags(compat, 'compat')\n            : compat\n                ? getTags(null, compat)\n                : null;\n        this.name = (typeof schema === 'string' && schema) || 'core';\n        this.knownTags = resolveKnownTags ? coreKnownTags : {};\n        this.tags = getTags(customTags, this.name, merge);\n        this.toStringOptions = toStringDefaults ?? null;\n        Object.defineProperty(this, MAP, { value: map });\n        Object.defineProperty(this, SCALAR, { value: string });\n        Object.defineProperty(this, SEQ, { value: seq });\n        // Used by createMap()\n        this.sortMapEntries =\n            typeof sortMapEntries === 'function'\n                ? sortMapEntries\n                : sortMapEntries === true\n                    ? sortMapEntriesByKey\n                    : null;\n    }\n    clone() {\n        const copy = Object.create(Schema.prototype, Object.getOwnPropertyDescriptors(this));\n        copy.tags = this.tags.slice();\n        return copy;\n    }\n}\n\nexport { Schema };\n","import { isNode } from '../nodes/identity.js';\nimport { createStringifyContext, stringify } from './stringify.js';\nimport { indentComment, lineComment } from './stringifyComment.js';\n\nfunction stringifyDocument(doc, options) {\n    const lines = [];\n    let hasDirectives = options.directives === true;\n    if (options.directives !== false && doc.directives) {\n        const dir = doc.directives.toString(doc);\n        if (dir) {\n            lines.push(dir);\n            hasDirectives = true;\n        }\n        else if (doc.directives.docStart)\n            hasDirectives = true;\n    }\n    if (hasDirectives)\n        lines.push('---');\n    const ctx = createStringifyContext(doc, options);\n    const { commentString } = ctx.options;\n    if (doc.commentBefore) {\n        if (lines.length !== 1)\n            lines.unshift('');\n        const cs = commentString(doc.commentBefore);\n        lines.unshift(indentComment(cs, ''));\n    }\n    let chompKeep = false;\n    let contentComment = null;\n    if (doc.contents) {\n        if (isNode(doc.contents)) {\n            if (doc.contents.spaceBefore && hasDirectives)\n                lines.push('');\n            if (doc.contents.commentBefore) {\n                const cs = commentString(doc.contents.commentBefore);\n                lines.push(indentComment(cs, ''));\n            }\n            // top-level block scalars need to be indented if followed by a comment\n            ctx.forceBlockIndent = !!doc.comment;\n            contentComment = doc.contents.comment;\n        }\n        const onChompKeep = contentComment ? undefined : () => (chompKeep = true);\n        let body = stringify(doc.contents, ctx, () => (contentComment = null), onChompKeep);\n        if (contentComment)\n            body += lineComment(body, '', commentString(contentComment));\n        if ((body[0] === '|' || body[0] === '>') &&\n            lines[lines.length - 1] === '---') {\n            // Top-level block scalars with a preceding doc marker ought to use the\n            // same line for their header.\n            lines[lines.length - 1] = `--- ${body}`;\n        }\n        else\n            lines.push(body);\n    }\n    else {\n        lines.push(stringify(doc.contents, ctx));\n    }\n    if (doc.directives?.docEnd) {\n        if (doc.comment) {\n            const cs = commentString(doc.comment);\n            if (cs.includes('\\n')) {\n                lines.push('...');\n                lines.push(indentComment(cs, ''));\n            }\n            else {\n                lines.push(`... ${cs}`);\n            }\n        }\n        else {\n            lines.push('...');\n        }\n    }\n    else {\n        let dc = doc.comment;\n        if (dc && chompKeep)\n            dc = dc.replace(/^\\n+/, '');\n        if (dc) {\n            if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '')\n                lines.push('');\n            lines.push(indentComment(commentString(dc), ''));\n        }\n    }\n    return lines.join('\\n') + '\\n';\n}\n\nexport { stringifyDocument };\n","import { Alias } from '../nodes/Alias.js';\nimport { isEmptyPath, collectionFromPath } from '../nodes/Collection.js';\nimport { NODE_TYPE, DOC, isNode, isCollection, isScalar } from '../nodes/identity.js';\nimport { Pair } from '../nodes/Pair.js';\nimport { toJS } from '../nodes/toJS.js';\nimport { Schema } from '../schema/Schema.js';\nimport { stringifyDocument } from '../stringify/stringifyDocument.js';\nimport { anchorNames, findNewAnchor, createNodeAnchors } from './anchors.js';\nimport { applyReviver } from './applyReviver.js';\nimport { createNode } from './createNode.js';\nimport { Directives } from './directives.js';\n\nclass Document {\n    constructor(value, replacer, options) {\n        /** A comment before this Document */\n        this.commentBefore = null;\n        /** A comment immediately after this Document */\n        this.comment = null;\n        /** Errors encountered during parsing. */\n        this.errors = [];\n        /** Warnings encountered during parsing. */\n        this.warnings = [];\n        Object.defineProperty(this, NODE_TYPE, { value: DOC });\n        let _replacer = null;\n        if (typeof replacer === 'function' || Array.isArray(replacer)) {\n            _replacer = replacer;\n        }\n        else if (options === undefined && replacer) {\n            options = replacer;\n            replacer = undefined;\n        }\n        const opt = Object.assign({\n            intAsBigInt: false,\n            keepSourceTokens: false,\n            logLevel: 'warn',\n            prettyErrors: true,\n            strict: true,\n            stringKeys: false,\n            uniqueKeys: true,\n            version: '1.2'\n        }, options);\n        this.options = opt;\n        let { version } = opt;\n        if (options?._directives) {\n            this.directives = options._directives.atDocument();\n            if (this.directives.yaml.explicit)\n                version = this.directives.yaml.version;\n        }\n        else\n            this.directives = new Directives({ version });\n        this.setSchema(version, options);\n        // @ts-expect-error We can't really know that this matches Contents.\n        this.contents =\n            value === undefined ? null : this.createNode(value, _replacer, options);\n    }\n    /**\n     * Create a deep copy of this Document and its contents.\n     *\n     * Custom Node values that inherit from `Object` still refer to their original instances.\n     */\n    clone() {\n        const copy = Object.create(Document.prototype, {\n            [NODE_TYPE]: { value: DOC }\n        });\n        copy.commentBefore = this.commentBefore;\n        copy.comment = this.comment;\n        copy.errors = this.errors.slice();\n        copy.warnings = this.warnings.slice();\n        copy.options = Object.assign({}, this.options);\n        if (this.directives)\n            copy.directives = this.directives.clone();\n        copy.schema = this.schema.clone();\n        // @ts-expect-error We can't really know that this matches Contents.\n        copy.contents = isNode(this.contents)\n            ? this.contents.clone(copy.schema)\n            : this.contents;\n        if (this.range)\n            copy.range = this.range.slice();\n        return copy;\n    }\n    /** Adds a value to the document. */\n    add(value) {\n        if (assertCollection(this.contents))\n            this.contents.add(value);\n    }\n    /** Adds a value to the document. */\n    addIn(path, value) {\n        if (assertCollection(this.contents))\n            this.contents.addIn(path, value);\n    }\n    /**\n     * Create a new `Alias` node, ensuring that the target `node` has the required anchor.\n     *\n     * If `node` already has an anchor, `name` is ignored.\n     * Otherwise, the `node.anchor` value will be set to `name`,\n     * or if an anchor with that name is already present in the document,\n     * `name` will be used as a prefix for a new unique anchor.\n     * If `name` is undefined, the generated anchor will use 'a' as a prefix.\n     */\n    createAlias(node, name) {\n        if (!node.anchor) {\n            const prev = anchorNames(this);\n            node.anchor =\n                // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n                !name || prev.has(name) ? findNewAnchor(name || 'a', prev) : name;\n        }\n        return new Alias(node.anchor);\n    }\n    createNode(value, replacer, options) {\n        let _replacer = undefined;\n        if (typeof replacer === 'function') {\n            value = replacer.call({ '': value }, '', value);\n            _replacer = replacer;\n        }\n        else if (Array.isArray(replacer)) {\n            const keyToStr = (v) => typeof v === 'number' || v instanceof String || v instanceof Number;\n            const asStr = replacer.filter(keyToStr).map(String);\n            if (asStr.length > 0)\n                replacer = replacer.concat(asStr);\n            _replacer = replacer;\n        }\n        else if (options === undefined && replacer) {\n            options = replacer;\n            replacer = undefined;\n        }\n        const { aliasDuplicateObjects, anchorPrefix, flow, keepUndefined, onTagObj, tag } = options ?? {};\n        const { onAnchor, setAnchors, sourceObjects } = createNodeAnchors(this, \n        // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n        anchorPrefix || 'a');\n        const ctx = {\n            aliasDuplicateObjects: aliasDuplicateObjects ?? true,\n            keepUndefined: keepUndefined ?? false,\n            onAnchor,\n            onTagObj,\n            replacer: _replacer,\n            schema: this.schema,\n            sourceObjects\n        };\n        const node = createNode(value, tag, ctx);\n        if (flow && isCollection(node))\n            node.flow = true;\n        setAnchors();\n        return node;\n    }\n    /**\n     * Convert a key and a value into a `Pair` using the current schema,\n     * recursively wrapping all values as `Scalar` or `Collection` nodes.\n     */\n    createPair(key, value, options = {}) {\n        const k = this.createNode(key, null, options);\n        const v = this.createNode(value, null, options);\n        return new Pair(k, v);\n    }\n    /**\n     * Removes a value from the document.\n     * @returns `true` if the item was found and removed.\n     */\n    delete(key) {\n        return assertCollection(this.contents) ? this.contents.delete(key) : false;\n    }\n    /**\n     * Removes a value from the document.\n     * @returns `true` if the item was found and removed.\n     */\n    deleteIn(path) {\n        if (isEmptyPath(path)) {\n            if (this.contents == null)\n                return false;\n            // @ts-expect-error Presumed impossible if Strict extends false\n            this.contents = null;\n            return true;\n        }\n        return assertCollection(this.contents)\n            ? this.contents.deleteIn(path)\n            : false;\n    }\n    /**\n     * Returns item at `key`, or `undefined` if not found. By default unwraps\n     * scalar values from their surrounding node; to disable set `keepScalar` to\n     * `true` (collections are always returned intact).\n     */\n    get(key, keepScalar) {\n        return isCollection(this.contents)\n            ? this.contents.get(key, keepScalar)\n            : undefined;\n    }\n    /**\n     * Returns item at `path`, or `undefined` if not found. By default unwraps\n     * scalar values from their surrounding node; to disable set `keepScalar` to\n     * `true` (collections are always returned intact).\n     */\n    getIn(path, keepScalar) {\n        if (isEmptyPath(path))\n            return !keepScalar && isScalar(this.contents)\n                ? this.contents.value\n                : this.contents;\n        return isCollection(this.contents)\n            ? this.contents.getIn(path, keepScalar)\n            : undefined;\n    }\n    /**\n     * Checks if the document includes a value with the key `key`.\n     */\n    has(key) {\n        return isCollection(this.contents) ? this.contents.has(key) : false;\n    }\n    /**\n     * Checks if the document includes a value at `path`.\n     */\n    hasIn(path) {\n        if (isEmptyPath(path))\n            return this.contents !== undefined;\n        return isCollection(this.contents) ? this.contents.hasIn(path) : false;\n    }\n    /**\n     * Sets a value in this document. For `!!set`, `value` needs to be a\n     * boolean to add/remove the item from the set.\n     */\n    set(key, value) {\n        if (this.contents == null) {\n            // @ts-expect-error We can't really know that this matches Contents.\n            this.contents = collectionFromPath(this.schema, [key], value);\n        }\n        else if (assertCollection(this.contents)) {\n            this.contents.set(key, value);\n        }\n    }\n    /**\n     * Sets a value in this document. For `!!set`, `value` needs to be a\n     * boolean to add/remove the item from the set.\n     */\n    setIn(path, value) {\n        if (isEmptyPath(path)) {\n            // @ts-expect-error We can't really know that this matches Contents.\n            this.contents = value;\n        }\n        else if (this.contents == null) {\n            // @ts-expect-error We can't really know that this matches Contents.\n            this.contents = collectionFromPath(this.schema, Array.from(path), value);\n        }\n        else if (assertCollection(this.contents)) {\n            this.contents.setIn(path, value);\n        }\n    }\n    /**\n     * Change the YAML version and schema used by the document.\n     * A `null` version disables support for directives, explicit tags, anchors, and aliases.\n     * It also requires the `schema` option to be given as a `Schema` instance value.\n     *\n     * Overrides all previously set schema options.\n     */\n    setSchema(version, options = {}) {\n        if (typeof version === 'number')\n            version = String(version);\n        let opt;\n        switch (version) {\n            case '1.1':\n                if (this.directives)\n                    this.directives.yaml.version = '1.1';\n                else\n                    this.directives = new Directives({ version: '1.1' });\n                opt = { resolveKnownTags: false, schema: 'yaml-1.1' };\n                break;\n            case '1.2':\n            case 'next':\n                if (this.directives)\n                    this.directives.yaml.version = version;\n                else\n                    this.directives = new Directives({ version });\n                opt = { resolveKnownTags: true, schema: 'core' };\n                break;\n            case null:\n                if (this.directives)\n                    delete this.directives;\n                opt = null;\n                break;\n            default: {\n                const sv = JSON.stringify(version);\n                throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${sv}`);\n            }\n        }\n        // Not using `instanceof Schema` to allow for duck typing\n        if (options.schema instanceof Object)\n            this.schema = options.schema;\n        else if (opt)\n            this.schema = new Schema(Object.assign(opt, options));\n        else\n            throw new Error(`With a null YAML version, the { schema: Schema } option is required`);\n    }\n    // json & jsonArg are only used from toJSON()\n    toJS({ json, jsonArg, mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n        const ctx = {\n            anchors: new Map(),\n            doc: this,\n            keep: !json,\n            mapAsMap: mapAsMap === true,\n            mapKeyWarned: false,\n            maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n        };\n        const res = toJS(this.contents, jsonArg ?? '', ctx);\n        if (typeof onAnchor === 'function')\n            for (const { count, res } of ctx.anchors.values())\n                onAnchor(res, count);\n        return typeof reviver === 'function'\n            ? applyReviver(reviver, { '': res }, '', res)\n            : res;\n    }\n    /**\n     * A JSON representation of the document `contents`.\n     *\n     * @param jsonArg Used by `JSON.stringify` to indicate the array index or\n     *   property name.\n     */\n    toJSON(jsonArg, onAnchor) {\n        return this.toJS({ json: true, jsonArg, mapAsMap: false, onAnchor });\n    }\n    /** A YAML representation of the document. */\n    toString(options = {}) {\n        if (this.errors.length > 0)\n            throw new Error('Document with errors cannot be stringified');\n        if ('indent' in options &&\n            (!Number.isInteger(options.indent) || Number(options.indent) <= 0)) {\n            const s = JSON.stringify(options.indent);\n            throw new Error(`\"indent\" option must be a positive integer, not ${s}`);\n        }\n        return stringifyDocument(this, options);\n    }\n}\nfunction assertCollection(contents) {\n    if (isCollection(contents))\n        return true;\n    throw new Error('Expected a YAML collection as document contents');\n}\n\nexport { Document };\n","import { BOM, DOCUMENT, FLOW_END, SCALAR } from './cst.js';\n\n/*\nSTART -> stream\n\nstream\n  directive -> line-end -> stream\n  indent + line-end -> stream\n  [else] -> line-start\n\nline-end\n  comment -> line-end\n  newline -> .\n  input-end -> END\n\nline-start\n  doc-start -> doc\n  doc-end -> stream\n  [else] -> indent -> block-start\n\nblock-start\n  seq-item-start -> block-start\n  explicit-key-start -> block-start\n  map-value-start -> block-start\n  [else] -> doc\n\ndoc\n  line-end -> line-start\n  spaces -> doc\n  anchor -> doc\n  tag -> doc\n  flow-start -> flow -> doc\n  flow-end -> error -> doc\n  seq-item-start -> error -> doc\n  explicit-key-start -> error -> doc\n  map-value-start -> doc\n  alias -> doc\n  quote-start -> quoted-scalar -> doc\n  block-scalar-header -> line-end -> block-scalar(min) -> line-start\n  [else] -> plain-scalar(false, min) -> doc\n\nflow\n  line-end -> flow\n  spaces -> flow\n  anchor -> flow\n  tag -> flow\n  flow-start -> flow -> flow\n  flow-end -> .\n  seq-item-start -> error -> flow\n  explicit-key-start -> flow\n  map-value-start -> flow\n  alias -> flow\n  quote-start -> quoted-scalar -> flow\n  comma -> flow\n  [else] -> plain-scalar(true, 0) -> flow\n\nquoted-scalar\n  quote-end -> .\n  [else] -> quoted-scalar\n\nblock-scalar(min)\n  newline + peek(indent < min) -> .\n  [else] -> block-scalar(min)\n\nplain-scalar(is-flow, min)\n  scalar-end(is-flow) -> .\n  peek(newline + (indent < min)) -> .\n  [else] -> plain-scalar(min)\n*/\nfunction isEmpty(ch) {\n    switch (ch) {\n        case undefined:\n        case ' ':\n        case '\\n':\n        case '\\r':\n        case '\\t':\n            return true;\n        default:\n            return false;\n    }\n}\nconst hexDigits = new Set('0123456789ABCDEFabcdef');\nconst tagChars = new Set(\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()\");\nconst flowIndicatorChars = new Set(',[]{}');\nconst invalidAnchorChars = new Set(' ,[]{}\\n\\r\\t');\nconst isNotAnchorChar = (ch) => !ch || invalidAnchorChars.has(ch);\n/**\n * Splits an input string into lexical tokens, i.e. smaller strings that are\n * easily identifiable by `tokens.tokenType()`.\n *\n * Lexing starts always in a \"stream\" context. Incomplete input may be buffered\n * until a complete token can be emitted.\n *\n * In addition to slices of the original input, the following control characters\n * may also be emitted:\n *\n * - `\\x02` (Start of Text): A document starts with the next token\n * - `\\x18` (Cancel): Unexpected end of flow-mode (indicates an error)\n * - `\\x1f` (Unit Separator): Next token is a scalar value\n * - `\\u{FEFF}` (Byte order mark): Emitted separately outside documents\n */\nclass Lexer {\n    constructor() {\n        /**\n         * Flag indicating whether the end of the current buffer marks the end of\n         * all input\n         */\n        this.atEnd = false;\n        /**\n         * Explicit indent set in block scalar header, as an offset from the current\n         * minimum indent, so e.g. set to 1 from a header `|2+`. Set to -1 if not\n         * explicitly set.\n         */\n        this.blockScalarIndent = -1;\n        /**\n         * Block scalars that include a + (keep) chomping indicator in their header\n         * include trailing empty lines, which are otherwise excluded from the\n         * scalar's contents.\n         */\n        this.blockScalarKeep = false;\n        /** Current input */\n        this.buffer = '';\n        /**\n         * Flag noting whether the map value indicator : can immediately follow this\n         * node within a flow context.\n         */\n        this.flowKey = false;\n        /** Count of surrounding flow collection levels. */\n        this.flowLevel = 0;\n        /**\n         * Minimum level of indentation required for next lines to be parsed as a\n         * part of the current scalar value.\n         */\n        this.indentNext = 0;\n        /** Indentation level of the current line. */\n        this.indentValue = 0;\n        /** Position of the next \\n character. */\n        this.lineEndPos = null;\n        /** Stores the state of the lexer if reaching the end of incpomplete input */\n        this.next = null;\n        /** A pointer to `buffer`; the current position of the lexer. */\n        this.pos = 0;\n    }\n    /**\n     * Generate YAML tokens from the `source` string. If `incomplete`,\n     * a part of the last line may be left as a buffer for the next call.\n     *\n     * @returns A generator of lexical tokens\n     */\n    *lex(source, incomplete = false) {\n        if (source) {\n            if (typeof source !== 'string')\n                throw TypeError('source is not a string');\n            this.buffer = this.buffer ? this.buffer + source : source;\n            this.lineEndPos = null;\n        }\n        this.atEnd = !incomplete;\n        let next = this.next ?? 'stream';\n        while (next && (incomplete || this.hasChars(1)))\n            next = yield* this.parseNext(next);\n    }\n    atLineEnd() {\n        let i = this.pos;\n        let ch = this.buffer[i];\n        while (ch === ' ' || ch === '\\t')\n            ch = this.buffer[++i];\n        if (!ch || ch === '#' || ch === '\\n')\n            return true;\n        if (ch === '\\r')\n            return this.buffer[i + 1] === '\\n';\n        return false;\n    }\n    charAt(n) {\n        return this.buffer[this.pos + n];\n    }\n    continueScalar(offset) {\n        let ch = this.buffer[offset];\n        if (this.indentNext > 0) {\n            let indent = 0;\n            while (ch === ' ')\n                ch = this.buffer[++indent + offset];\n            if (ch === '\\r') {\n                const next = this.buffer[indent + offset + 1];\n                if (next === '\\n' || (!next && !this.atEnd))\n                    return offset + indent + 1;\n            }\n            return ch === '\\n' || indent >= this.indentNext || (!ch && !this.atEnd)\n                ? offset + indent\n                : -1;\n        }\n        if (ch === '-' || ch === '.') {\n            const dt = this.buffer.substr(offset, 3);\n            if ((dt === '---' || dt === '...') && isEmpty(this.buffer[offset + 3]))\n                return -1;\n        }\n        return offset;\n    }\n    getLine() {\n        let end = this.lineEndPos;\n        if (typeof end !== 'number' || (end !== -1 && end < this.pos)) {\n            end = this.buffer.indexOf('\\n', this.pos);\n            this.lineEndPos = end;\n        }\n        if (end === -1)\n            return this.atEnd ? this.buffer.substring(this.pos) : null;\n        if (this.buffer[end - 1] === '\\r')\n            end -= 1;\n        return this.buffer.substring(this.pos, end);\n    }\n    hasChars(n) {\n        return this.pos + n <= this.buffer.length;\n    }\n    setNext(state) {\n        this.buffer = this.buffer.substring(this.pos);\n        this.pos = 0;\n        this.lineEndPos = null;\n        this.next = state;\n        return null;\n    }\n    peek(n) {\n        return this.buffer.substr(this.pos, n);\n    }\n    *parseNext(next) {\n        switch (next) {\n            case 'stream':\n                return yield* this.parseStream();\n            case 'line-start':\n                return yield* this.parseLineStart();\n            case 'block-start':\n                return yield* this.parseBlockStart();\n            case 'doc':\n                return yield* this.parseDocument();\n            case 'flow':\n                return yield* this.parseFlowCollection();\n            case 'quoted-scalar':\n                return yield* this.parseQuotedScalar();\n            case 'block-scalar':\n                return yield* this.parseBlockScalar();\n            case 'plain-scalar':\n                return yield* this.parsePlainScalar();\n        }\n    }\n    *parseStream() {\n        let line = this.getLine();\n        if (line === null)\n            return this.setNext('stream');\n        if (line[0] === BOM) {\n            yield* this.pushCount(1);\n            line = line.substring(1);\n        }\n        if (line[0] === '%') {\n            let dirEnd = line.length;\n            let cs = line.indexOf('#');\n            while (cs !== -1) {\n                const ch = line[cs - 1];\n                if (ch === ' ' || ch === '\\t') {\n                    dirEnd = cs - 1;\n                    break;\n                }\n                else {\n                    cs = line.indexOf('#', cs + 1);\n                }\n            }\n            while (true) {\n                const ch = line[dirEnd - 1];\n                if (ch === ' ' || ch === '\\t')\n                    dirEnd -= 1;\n                else\n                    break;\n            }\n            const n = (yield* this.pushCount(dirEnd)) + (yield* this.pushSpaces(true));\n            yield* this.pushCount(line.length - n); // possible comment\n            this.pushNewline();\n            return 'stream';\n        }\n        if (this.atLineEnd()) {\n            const sp = yield* this.pushSpaces(true);\n            yield* this.pushCount(line.length - sp);\n            yield* this.pushNewline();\n            return 'stream';\n        }\n        yield DOCUMENT;\n        return yield* this.parseLineStart();\n    }\n    *parseLineStart() {\n        const ch = this.charAt(0);\n        if (!ch && !this.atEnd)\n            return this.setNext('line-start');\n        if (ch === '-' || ch === '.') {\n            if (!this.atEnd && !this.hasChars(4))\n                return this.setNext('line-start');\n            const s = this.peek(3);\n            if ((s === '---' || s === '...') && isEmpty(this.charAt(3))) {\n                yield* this.pushCount(3);\n                this.indentValue = 0;\n                this.indentNext = 0;\n                return s === '---' ? 'doc' : 'stream';\n            }\n        }\n        this.indentValue = yield* this.pushSpaces(false);\n        if (this.indentNext > this.indentValue && !isEmpty(this.charAt(1)))\n            this.indentNext = this.indentValue;\n        return yield* this.parseBlockStart();\n    }\n    *parseBlockStart() {\n        const [ch0, ch1] = this.peek(2);\n        if (!ch1 && !this.atEnd)\n            return this.setNext('block-start');\n        if ((ch0 === '-' || ch0 === '?' || ch0 === ':') && isEmpty(ch1)) {\n            const n = (yield* this.pushCount(1)) + (yield* this.pushSpaces(true));\n            this.indentNext = this.indentValue + 1;\n            this.indentValue += n;\n            return yield* this.parseBlockStart();\n        }\n        return 'doc';\n    }\n    *parseDocument() {\n        yield* this.pushSpaces(true);\n        const line = this.getLine();\n        if (line === null)\n            return this.setNext('doc');\n        let n = yield* this.pushIndicators();\n        switch (line[n]) {\n            case '#':\n                yield* this.pushCount(line.length - n);\n            // fallthrough\n            case undefined:\n                yield* this.pushNewline();\n                return yield* this.parseLineStart();\n            case '{':\n            case '[':\n                yield* this.pushCount(1);\n                this.flowKey = false;\n                this.flowLevel = 1;\n                return 'flow';\n            case '}':\n            case ']':\n                // this is an error\n                yield* this.pushCount(1);\n                return 'doc';\n            case '*':\n                yield* this.pushUntil(isNotAnchorChar);\n                return 'doc';\n            case '\"':\n            case \"'\":\n                return yield* this.parseQuotedScalar();\n            case '|':\n            case '>':\n                n += yield* this.parseBlockScalarHeader();\n                n += yield* this.pushSpaces(true);\n                yield* this.pushCount(line.length - n);\n                yield* this.pushNewline();\n                return yield* this.parseBlockScalar();\n            default:\n                return yield* this.parsePlainScalar();\n        }\n    }\n    *parseFlowCollection() {\n        let nl, sp;\n        let indent = -1;\n        do {\n            nl = yield* this.pushNewline();\n            if (nl > 0) {\n                sp = yield* this.pushSpaces(false);\n                this.indentValue = indent = sp;\n            }\n            else {\n                sp = 0;\n            }\n            sp += yield* this.pushSpaces(true);\n        } while (nl + sp > 0);\n        const line = this.getLine();\n        if (line === null)\n            return this.setNext('flow');\n        if ((indent !== -1 && indent < this.indentNext && line[0] !== '#') ||\n            (indent === 0 &&\n                (line.startsWith('---') || line.startsWith('...')) &&\n                isEmpty(line[3]))) {\n            // Allowing for the terminal ] or } at the same (rather than greater)\n            // indent level as the initial [ or { is technically invalid, but\n            // failing here would be surprising to users.\n            const atFlowEndMarker = indent === this.indentNext - 1 &&\n                this.flowLevel === 1 &&\n                (line[0] === ']' || line[0] === '}');\n            if (!atFlowEndMarker) {\n                // this is an error\n                this.flowLevel = 0;\n                yield FLOW_END;\n                return yield* this.parseLineStart();\n            }\n        }\n        let n = 0;\n        while (line[n] === ',') {\n            n += yield* this.pushCount(1);\n            n += yield* this.pushSpaces(true);\n            this.flowKey = false;\n        }\n        n += yield* this.pushIndicators();\n        switch (line[n]) {\n            case undefined:\n                return 'flow';\n            case '#':\n                yield* this.pushCount(line.length - n);\n                return 'flow';\n            case '{':\n            case '[':\n                yield* this.pushCount(1);\n                this.flowKey = false;\n                this.flowLevel += 1;\n                return 'flow';\n            case '}':\n            case ']':\n                yield* this.pushCount(1);\n                this.flowKey = true;\n                this.flowLevel -= 1;\n                return this.flowLevel ? 'flow' : 'doc';\n            case '*':\n                yield* this.pushUntil(isNotAnchorChar);\n                return 'flow';\n            case '\"':\n            case \"'\":\n                this.flowKey = true;\n                return yield* this.parseQuotedScalar();\n            case ':': {\n                const next = this.charAt(1);\n                if (this.flowKey || isEmpty(next) || next === ',') {\n                    this.flowKey = false;\n                    yield* this.pushCount(1);\n                    yield* this.pushSpaces(true);\n                    return 'flow';\n                }\n            }\n            // fallthrough\n            default:\n                this.flowKey = false;\n                return yield* this.parsePlainScalar();\n        }\n    }\n    *parseQuotedScalar() {\n        const quote = this.charAt(0);\n        let end = this.buffer.indexOf(quote, this.pos + 1);\n        if (quote === \"'\") {\n            while (end !== -1 && this.buffer[end + 1] === \"'\")\n                end = this.buffer.indexOf(\"'\", end + 2);\n        }\n        else {\n            // double-quote\n            while (end !== -1) {\n                let n = 0;\n                while (this.buffer[end - 1 - n] === '\\\\')\n                    n += 1;\n                if (n % 2 === 0)\n                    break;\n                end = this.buffer.indexOf('\"', end + 1);\n            }\n        }\n        // Only looking for newlines within the quotes\n        const qb = this.buffer.substring(0, end);\n        let nl = qb.indexOf('\\n', this.pos);\n        if (nl !== -1) {\n            while (nl !== -1) {\n                const cs = this.continueScalar(nl + 1);\n                if (cs === -1)\n                    break;\n                nl = qb.indexOf('\\n', cs);\n            }\n            if (nl !== -1) {\n                // this is an error caused by an unexpected unindent\n                end = nl - (qb[nl - 1] === '\\r' ? 2 : 1);\n            }\n        }\n        if (end === -1) {\n            if (!this.atEnd)\n                return this.setNext('quoted-scalar');\n            end = this.buffer.length;\n        }\n        yield* this.pushToIndex(end + 1, false);\n        return this.flowLevel ? 'flow' : 'doc';\n    }\n    *parseBlockScalarHeader() {\n        this.blockScalarIndent = -1;\n        this.blockScalarKeep = false;\n        let i = this.pos;\n        while (true) {\n            const ch = this.buffer[++i];\n            if (ch === '+')\n                this.blockScalarKeep = true;\n            else if (ch > '0' && ch <= '9')\n                this.blockScalarIndent = Number(ch) - 1;\n            else if (ch !== '-')\n                break;\n        }\n        return yield* this.pushUntil(ch => isEmpty(ch) || ch === '#');\n    }\n    *parseBlockScalar() {\n        let nl = this.pos - 1; // may be -1 if this.pos === 0\n        let indent = 0;\n        let ch;\n        loop: for (let i = this.pos; (ch = this.buffer[i]); ++i) {\n            switch (ch) {\n                case ' ':\n                    indent += 1;\n                    break;\n                case '\\n':\n                    nl = i;\n                    indent = 0;\n                    break;\n                case '\\r': {\n                    const next = this.buffer[i + 1];\n                    if (!next && !this.atEnd)\n                        return this.setNext('block-scalar');\n                    if (next === '\\n')\n                        break;\n                } // fallthrough\n                default:\n                    break loop;\n            }\n        }\n        if (!ch && !this.atEnd)\n            return this.setNext('block-scalar');\n        if (indent >= this.indentNext) {\n            if (this.blockScalarIndent === -1)\n                this.indentNext = indent;\n            else {\n                this.indentNext =\n                    this.blockScalarIndent + (this.indentNext === 0 ? 1 : this.indentNext);\n            }\n            do {\n                const cs = this.continueScalar(nl + 1);\n                if (cs === -1)\n                    break;\n                nl = this.buffer.indexOf('\\n', cs);\n            } while (nl !== -1);\n            if (nl === -1) {\n                if (!this.atEnd)\n                    return this.setNext('block-scalar');\n                nl = this.buffer.length;\n            }\n        }\n        // Trailing insufficiently indented tabs are invalid.\n        // To catch that during parsing, we include them in the block scalar value.\n        let i = nl + 1;\n        ch = this.buffer[i];\n        while (ch === ' ')\n            ch = this.buffer[++i];\n        if (ch === '\\t') {\n            while (ch === '\\t' || ch === ' ' || ch === '\\r' || ch === '\\n')\n                ch = this.buffer[++i];\n            nl = i - 1;\n        }\n        else if (!this.blockScalarKeep) {\n            do {\n                let i = nl - 1;\n                let ch = this.buffer[i];\n                if (ch === '\\r')\n                    ch = this.buffer[--i];\n                const lastChar = i; // Drop the line if last char not more indented\n                while (ch === ' ')\n                    ch = this.buffer[--i];\n                if (ch === '\\n' && i >= this.pos && i + 1 + indent > lastChar)\n                    nl = i;\n                else\n                    break;\n            } while (true);\n        }\n        yield SCALAR;\n        yield* this.pushToIndex(nl + 1, true);\n        return yield* this.parseLineStart();\n    }\n    *parsePlainScalar() {\n        const inFlow = this.flowLevel > 0;\n        let end = this.pos - 1;\n        let i = this.pos - 1;\n        let ch;\n        while ((ch = this.buffer[++i])) {\n            if (ch === ':') {\n                const next = this.buffer[i + 1];\n                if (isEmpty(next) || (inFlow && flowIndicatorChars.has(next)))\n                    break;\n                end = i;\n            }\n            else if (isEmpty(ch)) {\n                let next = this.buffer[i + 1];\n                if (ch === '\\r') {\n                    if (next === '\\n') {\n                        i += 1;\n                        ch = '\\n';\n                        next = this.buffer[i + 1];\n                    }\n                    else\n                        end = i;\n                }\n                if (next === '#' || (inFlow && flowIndicatorChars.has(next)))\n                    break;\n                if (ch === '\\n') {\n                    const cs = this.continueScalar(i + 1);\n                    if (cs === -1)\n                        break;\n                    i = Math.max(i, cs - 2); // to advance, but still account for ' #'\n                }\n            }\n            else {\n                if (inFlow && flowIndicatorChars.has(ch))\n                    break;\n                end = i;\n            }\n        }\n        if (!ch && !this.atEnd)\n            return this.setNext('plain-scalar');\n        yield SCALAR;\n        yield* this.pushToIndex(end + 1, true);\n        return inFlow ? 'flow' : 'doc';\n    }\n    *pushCount(n) {\n        if (n > 0) {\n            yield this.buffer.substr(this.pos, n);\n            this.pos += n;\n            return n;\n        }\n        return 0;\n    }\n    *pushToIndex(i, allowEmpty) {\n        const s = this.buffer.slice(this.pos, i);\n        if (s) {\n            yield s;\n            this.pos += s.length;\n            return s.length;\n        }\n        else if (allowEmpty)\n            yield '';\n        return 0;\n    }\n    *pushIndicators() {\n        switch (this.charAt(0)) {\n            case '!':\n                return ((yield* this.pushTag()) +\n                    (yield* this.pushSpaces(true)) +\n                    (yield* this.pushIndicators()));\n            case '&':\n                return ((yield* this.pushUntil(isNotAnchorChar)) +\n                    (yield* this.pushSpaces(true)) +\n                    (yield* this.pushIndicators()));\n            case '-': // this is an error\n            case '?': // this is an error outside flow collections\n            case ':': {\n                const inFlow = this.flowLevel > 0;\n                const ch1 = this.charAt(1);\n                if (isEmpty(ch1) || (inFlow && flowIndicatorChars.has(ch1))) {\n                    if (!inFlow)\n                        this.indentNext = this.indentValue + 1;\n                    else if (this.flowKey)\n                        this.flowKey = false;\n                    return ((yield* this.pushCount(1)) +\n                        (yield* this.pushSpaces(true)) +\n                        (yield* this.pushIndicators()));\n                }\n            }\n        }\n        return 0;\n    }\n    *pushTag() {\n        if (this.charAt(1) === '<') {\n            let i = this.pos + 2;\n            let ch = this.buffer[i];\n            while (!isEmpty(ch) && ch !== '>')\n                ch = this.buffer[++i];\n            return yield* this.pushToIndex(ch === '>' ? i + 1 : i, false);\n        }\n        else {\n            let i = this.pos + 1;\n            let ch = this.buffer[i];\n            while (ch) {\n                if (tagChars.has(ch))\n                    ch = this.buffer[++i];\n                else if (ch === '%' &&\n                    hexDigits.has(this.buffer[i + 1]) &&\n                    hexDigits.has(this.buffer[i + 2])) {\n                    ch = this.buffer[(i += 3)];\n                }\n                else\n                    break;\n            }\n            return yield* this.pushToIndex(i, false);\n        }\n    }\n    *pushNewline() {\n        const ch = this.buffer[this.pos];\n        if (ch === '\\n')\n            return yield* this.pushCount(1);\n        else if (ch === '\\r' && this.charAt(1) === '\\n')\n            return yield* this.pushCount(2);\n        else\n            return 0;\n    }\n    *pushSpaces(allowTabs) {\n        let i = this.pos - 1;\n        let ch;\n        do {\n            ch = this.buffer[++i];\n        } while (ch === ' ' || (allowTabs && ch === '\\t'));\n        const n = i - this.pos;\n        if (n > 0) {\n            yield this.buffer.substr(this.pos, n);\n            this.pos = i;\n        }\n        return n;\n    }\n    *pushUntil(test) {\n        let i = this.pos;\n        let ch = this.buffer[i];\n        while (!test(ch))\n            ch = this.buffer[++i];\n        return yield* this.pushToIndex(i, false);\n    }\n}\n\nexport { Lexer };\n","import { Composer } from './compose/composer.js';\nimport { Document } from './doc/Document.js';\nimport { prettifyError, YAMLParseError } from './errors.js';\nimport { warn } from './log.js';\nimport { isDocument } from './nodes/identity.js';\nimport { LineCounter } from './parse/line-counter.js';\nimport { Parser } from './parse/parser.js';\n\nfunction parseOptions(options) {\n    const prettyErrors = options.prettyErrors !== false;\n    const lineCounter = options.lineCounter || (prettyErrors && new LineCounter()) || null;\n    return { lineCounter, prettyErrors };\n}\n/**\n * Parse the input as a stream of YAML documents.\n *\n * Documents should be separated from each other by `...` or `---` marker lines.\n *\n * @returns If an empty `docs` array is returned, it will be of type\n *   EmptyStream and contain additional stream information. In\n *   TypeScript, you should use `'empty' in docs` as a type guard for it.\n */\nfunction parseAllDocuments(source, options = {}) {\n    const { lineCounter, prettyErrors } = parseOptions(options);\n    const parser = new Parser(lineCounter?.addNewLine);\n    const composer = new Composer(options);\n    const docs = Array.from(composer.compose(parser.parse(source)));\n    if (prettyErrors && lineCounter)\n        for (const doc of docs) {\n            doc.errors.forEach(prettifyError(source, lineCounter));\n            doc.warnings.forEach(prettifyError(source, lineCounter));\n        }\n    if (docs.length > 0)\n        return docs;\n    return Object.assign([], { empty: true }, composer.streamInfo());\n}\n/** Parse an input string into a single YAML.Document */\nfunction parseDocument(source, options = {}) {\n    const { lineCounter, prettyErrors } = parseOptions(options);\n    const parser = new Parser(lineCounter?.addNewLine);\n    const composer = new Composer(options);\n    // `doc` is always set by compose.end(true) at the very latest\n    let doc = null;\n    for (const _doc of composer.compose(parser.parse(source), true, source.length)) {\n        if (!doc)\n            doc = _doc;\n        else if (doc.options.logLevel !== 'silent') {\n            doc.errors.push(new YAMLParseError(_doc.range.slice(0, 2), 'MULTIPLE_DOCS', 'Source contains multiple documents; please use YAML.parseAllDocuments()'));\n            break;\n        }\n    }\n    if (prettyErrors && lineCounter) {\n        doc.errors.forEach(prettifyError(source, lineCounter));\n        doc.warnings.forEach(prettifyError(source, lineCounter));\n    }\n    return doc;\n}\nfunction parse(src, reviver, options) {\n    let _reviver = undefined;\n    if (typeof reviver === 'function') {\n        _reviver = reviver;\n    }\n    else if (options === undefined && reviver && typeof reviver === 'object') {\n        options = reviver;\n    }\n    const doc = parseDocument(src, options);\n    if (!doc)\n        return null;\n    doc.warnings.forEach(warning => warn(doc.options.logLevel, warning));\n    if (doc.errors.length > 0) {\n        if (doc.options.logLevel !== 'silent')\n            throw doc.errors[0];\n        else\n            doc.errors = [];\n    }\n    return doc.toJS(Object.assign({ reviver: _reviver }, options));\n}\nfunction stringify(value, replacer, options) {\n    let _replacer = null;\n    if (typeof replacer === 'function' || Array.isArray(replacer)) {\n        _replacer = replacer;\n    }\n    else if (options === undefined && replacer) {\n        options = replacer;\n    }\n    if (typeof options === 'string')\n        options = options.length;\n    if (typeof options === 'number') {\n        const indent = Math.round(options);\n        options = indent < 1 ? undefined : indent > 8 ? { indent: 8 } : { indent };\n    }\n    if (value === undefined) {\n        const { keepUndefined } = options ?? replacer ?? {};\n        if (!keepUndefined)\n            return undefined;\n    }\n    if (isDocument(value) && !_replacer)\n        return value.toString(options);\n    return new Document(value, _replacer, options).toString(options);\n}\n\nexport { parse, parseAllDocuments, parseDocument, stringify };\n","import * as r from \"yaml\";\nimport { b as n, S as c, a as i, c as h, g as a } from \"./server-0nRY9GCE.mjs\";\nclass e {\n  static create(o) {\n    return new e(o);\n  }\n  constructor(o) {\n    this.rootDoc = o || {\n      openapi: \"3.1.0\",\n      info: {\n        title: \"app\",\n        version: \"version\"\n      },\n      paths: {},\n      components: {\n        schemas: {},\n        responses: {},\n        parameters: {},\n        examples: {},\n        requestBodies: {},\n        headers: {},\n        securitySchemes: {},\n        links: {},\n        callbacks: {}\n      },\n      tags: [],\n      servers: []\n    };\n  }\n  getSpec() {\n    return this.rootDoc;\n  }\n  getSpecAsJson(o, t) {\n    return JSON.stringify(this.rootDoc, o, t);\n  }\n  getSpecAsYaml(o, t) {\n    return r.stringify(this.rootDoc, o, t);\n  }\n  static isValidOpenApiVersion(o) {\n    o = o || \"\";\n    const t = /(\\d+)\\.(\\d+).(\\d+)/.exec(o);\n    return !!(t && parseInt(t[1], 10) >= 3);\n  }\n  addOpenApiVersion(o) {\n    if (!e.isValidOpenApiVersion(o))\n      throw new Error(\n        \"Invalid OpenApi version: \" + o + \". Follow convention: 3.x.y\"\n      );\n    return this.rootDoc.openapi = o, this;\n  }\n  addInfo(o) {\n    return this.rootDoc.info = o, this;\n  }\n  addContact(o) {\n    return this.rootDoc.info.contact = o, this;\n  }\n  addLicense(o) {\n    return this.rootDoc.info.license = o, this;\n  }\n  addTitle(o) {\n    return this.rootDoc.info.title = o, this;\n  }\n  addDescription(o) {\n    return this.rootDoc.info.description = o, this;\n  }\n  addTermsOfService(o) {\n    return this.rootDoc.info.termsOfService = o, this;\n  }\n  addVersion(o) {\n    return this.rootDoc.info.version = o, this;\n  }\n  addPath(o, t) {\n    return this.rootDoc.paths = this.rootDoc.paths || {}, this.rootDoc.paths[o] = { ...this.rootDoc.paths[o] || {}, ...t }, this;\n  }\n  addSchema(o, t) {\n    return this.rootDoc.components = this.rootDoc.components || {}, this.rootDoc.components.schemas = this.rootDoc.components.schemas || {}, this.rootDoc.components.schemas[o] = t, this;\n  }\n  addResponse(o, t) {\n    return this.rootDoc.components = this.rootDoc.components || {}, this.rootDoc.components.responses = this.rootDoc.components.responses || {}, this.rootDoc.components.responses[o] = t, this;\n  }\n  addParameter(o, t) {\n    return this.rootDoc.components = this.rootDoc.components || {}, this.rootDoc.components.parameters = this.rootDoc.components.parameters || {}, this.rootDoc.components.parameters[o] = t, this;\n  }\n  addExample(o, t) {\n    return this.rootDoc.components = this.rootDoc.components || {}, this.rootDoc.components.examples = this.rootDoc.components.examples || {}, this.rootDoc.components.examples[o] = t, this;\n  }\n  addRequestBody(o, t) {\n    return this.rootDoc.components = this.rootDoc.components || {}, this.rootDoc.components.requestBodies = this.rootDoc.components.requestBodies || {}, this.rootDoc.components.requestBodies[o] = t, this;\n  }\n  addHeader(o, t) {\n    return this.rootDoc.components = this.rootDoc.components || {}, this.rootDoc.components.headers = this.rootDoc.components.headers || {}, this.rootDoc.components.headers[o] = t, this;\n  }\n  addSecurityScheme(o, t) {\n    return this.rootDoc.components = this.rootDoc.components || {}, this.rootDoc.components.securitySchemes = this.rootDoc.components.securitySchemes || {}, this.rootDoc.components.securitySchemes[o] = t, this;\n  }\n  addLink(o, t) {\n    return this.rootDoc.components = this.rootDoc.components || {}, this.rootDoc.components.links = this.rootDoc.components.links || {}, this.rootDoc.components.links[o] = t, this;\n  }\n  addCallback(o, t) {\n    return this.rootDoc.components = this.rootDoc.components || {}, this.rootDoc.components.callbacks = this.rootDoc.components.callbacks || {}, this.rootDoc.components.callbacks[o] = t, this;\n  }\n  addServer(o) {\n    return this.rootDoc.servers = this.rootDoc.servers || [], this.rootDoc.servers.push(o), this;\n  }\n  addTag(o) {\n    return this.rootDoc.tags = this.rootDoc.tags || [], this.rootDoc.tags.push(o), this;\n  }\n  addExternalDocs(o) {\n    return this.rootDoc.externalDocs = o, this;\n  }\n  addWebhook(o, t) {\n    return this.rootDoc.webhooks ??= {}, this.rootDoc.webhooks[o] = t, this;\n  }\n}\nfunction p(s, o) {\n  if (!n.isValidExtension(o))\n    return s ? s[o] : void 0;\n}\nfunction m(s) {\n  return Object.prototype.hasOwnProperty.call(s, \"$ref\");\n}\nfunction D(s) {\n  return !Object.prototype.hasOwnProperty.call(s, \"$ref\");\n}\nconst l = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n  __proto__: null,\n  OpenApiBuilder: e,\n  Server: c,\n  ServerVariable: i,\n  addExtension: h,\n  getExtension: a,\n  getPath: p,\n  isReferenceObject: m,\n  isSchemaObject: D\n}, Symbol.toStringTag, { value: \"Module\" }));\nexport {\n  e as O,\n  D as a,\n  p as g,\n  m as i,\n  l as o\n};\n//# sourceMappingURL=oas31-BgS8RJBM.mjs.map\n","import * as R from \"ramda\";\nimport { combinations, isObject } from \"./common-helpers\";\n\ntype LogicalOr<T> = { or: T[] };\ntype LogicalAnd<T> = { and: T[] };\n\nexport type LogicalContainer<T> =\n  | LogicalOr<T | LogicalAnd<T>>\n  | LogicalAnd<T | LogicalOr<T>>\n  | T;\n\nconst isLogicalOr = <T>(subject: LogicalContainer<T>) =>\n  isObject(subject) && \"or\" in subject;\n\nconst isLogicalAnd = <T>(subject: LogicalContainer<T>) =>\n  isObject(subject) && \"and\" in subject;\n\nconst isSimple = <T>(entry: LogicalContainer<T>): entry is T =>\n  !isLogicalAnd(entry) && !isLogicalOr(entry);\n\ntype Combination<T> = T[];\n/** @desc OR[ AND[a,b] , AND[b,c] ] */\nexport type Alternatives<T> = Array<Combination<T>>;\n\nexport const processContainers = <T>(\n  containers: LogicalContainer<T>[],\n): Alternatives<T> => {\n  const simples = R.filter(isSimple, containers);\n  const ands = R.chain(R.prop(\"and\"), R.filter(isLogicalAnd, containers));\n  const [simpleAnds, orsInAnds] = R.partition(isSimple, ands);\n  const persistent: Combination<T> = R.concat(simples, simpleAnds);\n  const ors = R.filter(isLogicalOr, containers);\n  const alternators = R.map(R.prop(\"or\"), R.concat(ors, orsInAnds)); // no chain!\n  return alternators.reduce(\n    (acc, entry) =>\n      combinations(\n        acc,\n        R.map((opt) => (isSimple(opt) ? [opt] : opt.and), entry),\n        ([a, b]) => R.concat(a, b),\n      ),\n    R.reject(R.isEmpty, [persistent]),\n  );\n};\n","import {\n  ExamplesObject,\n  isReferenceObject,\n  isSchemaObject,\n  MediaTypeObject,\n  OAuthFlowObject,\n  ParameterObject,\n  ReferenceObject,\n  RequestBodyObject,\n  ResponseObject,\n  SchemaObject,\n  SchemaObjectType,\n  SecurityRequirementObject,\n  SecuritySchemeObject,\n  TagObject,\n} from \"openapi3-ts/oas31\";\nimport * as R from \"ramda\";\nimport { z } from \"zod\";\nimport { NormalizedResponse, ResponseVariant } from \"./api-response\";\nimport { ezBufferBrand } from \"./buffer-schema\";\nimport {\n  shouldHaveContent,\n  FlatObject,\n  getRoutePathParams,\n  getTransformedType,\n  isObject,\n  isSchema,\n  makeCleanId,\n  routePathParamsRegex,\n  Tag,\n  ucFirst,\n} from \"./common-helpers\";\nimport { InputSource } from \"./config-type\";\nimport { contentTypes } from \"./content-type\";\nimport { ezDateInBrand } from \"./date-in-schema\";\nimport { ezDateOutBrand } from \"./date-out-schema\";\nimport { DocumentationError } from \"./errors\";\nimport { IOSchema } from \"./io-schema\";\nimport { flattenIO } from \"./json-schema-helpers\";\nimport { Alternatives } from \"./logical-container\";\nimport { getBrand } from \"@express-zod-api/zod-plugin\";\nimport { ClientMethod } from \"./method\";\nimport { ProprietaryBrand } from \"./proprietary-schemas\";\nimport { ezRawBrand } from \"./raw-schema\";\nimport { FirstPartyKind } from \"./schema-walker\";\nimport { Security } from \"./security\";\nimport { ezUploadBrand } from \"./upload-schema\";\nimport wellKnownHeaders from \"./well-known-headers.json\";\n\ninterface ReqResCommons {\n  makeRef: (\n    key: object | string,\n    subject: SchemaObject | ReferenceObject,\n    name?: string,\n  ) => ReferenceObject;\n  path: string;\n  method: ClientMethod;\n}\n\nexport interface OpenAPIContext extends ReqResCommons {\n  isResponse: boolean;\n}\n\nexport type Depicter = (\n  zodCtx: {\n    zodSchema: z.core.$ZodType;\n    jsonSchema: z.core.JSONSchema.BaseSchema;\n  },\n  oasCtx: OpenAPIContext,\n) => z.core.JSONSchema.BaseSchema | SchemaObject;\n\n/** @desc Using defaultIsHeader when returns null or undefined */\nexport type IsHeader = (\n  name: string,\n  method: ClientMethod,\n  path: string,\n) => boolean | null | undefined;\n\nexport type BrandHandling = Record<string | symbol, Depicter>;\n\nconst shortDescriptionLimit = 50;\nconst isoDateDocumentationUrl =\n  \"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString\";\n\nconst samples = {\n  integer: 0,\n  number: 0,\n  string: \"\",\n  boolean: false,\n  object: {},\n  null: null,\n  array: [],\n} satisfies Record<SchemaObjectType, unknown>;\n\nexport const reformatParamsInPath = (path: string) =>\n  path.replace(routePathParamsRegex, (param) => `{${param.slice(1)}}`);\n\nexport const depictUpload: Depicter = ({}, ctx) => {\n  if (ctx.isResponse)\n    throw new DocumentationError(\"Please use ez.upload() only for input.\", ctx);\n  return { type: \"string\", format: \"binary\" };\n};\n\nexport const depictBuffer: Depicter = ({ jsonSchema }) => ({\n  ...jsonSchema,\n  externalDocs: {\n    description: \"raw binary data\",\n    url: \"https://swagger.io/specification/#working-with-binary-data\",\n  },\n});\n\nexport const depictUnion: Depicter = ({ zodSchema, jsonSchema }) => {\n  if (\n    !isSchema<z.core.$ZodUnion | z.core.$ZodDiscriminatedUnion>(\n      zodSchema,\n      \"union\",\n    )\n  )\n    return jsonSchema;\n  if (!(\"discriminator\" in zodSchema._zod.def)) return jsonSchema;\n  const propertyName: string = zodSchema._zod.def.discriminator;\n  return {\n    ...jsonSchema,\n    discriminator: jsonSchema.discriminator ?? { propertyName },\n  };\n};\n\nexport const depictIntersection = R.tryCatch<Depicter>(\n  ({ jsonSchema }) => {\n    if (!jsonSchema.allOf) throw \"no allOf\";\n    return flattenIO(jsonSchema, \"throw\");\n  },\n  (_err, { jsonSchema }) => jsonSchema,\n);\n\n/** @since OAS 3.1 nullable replaced with type array having null */\nexport const depictNullable: Depicter = ({ jsonSchema }) => {\n  if (!jsonSchema.anyOf) return jsonSchema;\n  const original = jsonSchema.anyOf[0];\n  return Object.assign(original, { type: makeNullableType(original.type) });\n};\n\n/** @since v24.3.1 schema compliance is fully delegated to Zod */\nconst asOAS = (subject: z.core.JSONSchema.BaseSchema) =>\n  subject as SchemaObject | ReferenceObject;\n\nexport const depictDateIn: Depicter = (\n  { jsonSchema: { examples, description } },\n  ctx,\n) => {\n  if (ctx.isResponse)\n    throw new DocumentationError(\"Please use ez.dateOut() for output.\", ctx);\n  const jsonSchema: z.core.JSONSchema.StringSchema = {\n    description: description || \"YYYY-MM-DDTHH:mm:ss.sssZ\",\n    type: \"string\",\n    format: \"date-time\",\n    pattern: /^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?)?Z?$/.source,\n    externalDocs: { url: isoDateDocumentationUrl },\n  };\n  if (examples?.length) jsonSchema.examples = examples;\n  return jsonSchema;\n};\n\nexport const depictDateOut: Depicter = (\n  { jsonSchema: { examples, description } },\n  ctx,\n) => {\n  if (!ctx.isResponse)\n    throw new DocumentationError(\"Please use ez.dateIn() for input.\", ctx);\n  const jsonSchema: z.core.JSONSchema.StringSchema = {\n    description: description || \"YYYY-MM-DDTHH:mm:ss.sssZ\",\n    type: \"string\",\n    format: \"date-time\",\n    externalDocs: { url: isoDateDocumentationUrl },\n  };\n  if (examples?.length) jsonSchema.examples = examples;\n  return jsonSchema;\n};\n\nexport const depictBigInt: Depicter = () => ({\n  type: \"string\",\n  format: \"bigint\",\n  pattern: /^-?\\d+$/.source,\n});\n\n/**\n * @since OAS 3.1 using prefixItems for depicting tuples\n * @since 17.5.0 added rest handling, fixed tuple type\n */\nexport const depictTuple: Depicter = ({ zodSchema, jsonSchema }) => {\n  if ((zodSchema as z.core.$ZodTuple)._zod.def.rest !== null) return jsonSchema;\n  // does not appear to support items:false, so not:{} is a recommended alias\n  return { ...jsonSchema, items: { not: {} } };\n};\n\nconst makeSample = (depicted: SchemaObject) => {\n  const firstType = (\n    Array.isArray(depicted.type) ? depicted.type[0] : depicted.type\n  ) as keyof typeof samples;\n  return samples?.[firstType];\n};\n\n/** @since v24.0.0 does not return null for undefined */\nconst makeNullableType = (\n  current:\n    | z.core.JSONSchema.BaseSchema[\"type\"]\n    | Array<NonNullable<z.core.JSONSchema.BaseSchema[\"type\"]>>,\n): typeof current => {\n  if (current === (\"null\" satisfies SchemaObjectType)) return current;\n  if (typeof current === \"string\")\n    return [current, \"null\" satisfies SchemaObjectType];\n  return (\n    current && [...new Set(current).add(\"null\" satisfies SchemaObjectType)]\n  );\n};\n\nexport const depictPipeline: Depicter = ({ zodSchema, jsonSchema }, ctx) => {\n  const target = (zodSchema as z.core.$ZodPipe)._zod.def[\n    ctx.isResponse ? \"out\" : \"in\"\n  ];\n  const opposite = (zodSchema as z.core.$ZodPipe)._zod.def[\n    ctx.isResponse ? \"in\" : \"out\"\n  ];\n  if (!isSchema<z.core.$ZodTransform>(target, \"transform\")) return jsonSchema;\n  const opposingDepiction = asOAS(depict(opposite, { ctx }));\n  if (isSchemaObject(opposingDepiction)) {\n    if (!ctx.isResponse) {\n      const { type: opposingType, ...rest } = opposingDepiction;\n      return {\n        ...rest,\n        format: `${rest.format || opposingType} (preprocessed)`,\n      };\n    } else {\n      const targetType = getTransformedType(\n        target,\n        makeSample(opposingDepiction),\n      );\n      if (targetType && [\"number\", \"string\", \"boolean\"].includes(targetType)) {\n        return {\n          ...jsonSchema,\n          type: targetType as \"number\" | \"string\" | \"boolean\",\n        };\n      }\n    }\n  }\n  return jsonSchema;\n};\n\nexport const depictRaw: Depicter = ({ jsonSchema }) => {\n  if (jsonSchema.type !== \"object\") return jsonSchema;\n  const objSchema = jsonSchema as z.core.JSONSchema.ObjectSchema;\n  if (!objSchema.properties) return jsonSchema;\n  if (!(\"raw\" in objSchema.properties)) return jsonSchema;\n  if (!isObject(objSchema.properties.raw)) return jsonSchema;\n  return objSchema.properties.raw;\n};\n\nconst enumerateExamples = (examples: unknown[]): ExamplesObject | undefined =>\n  examples.length\n    ? R.fromPairs(\n        R.zip(\n          R.times((idx) => `example${idx + 1}`, examples.length),\n          R.map(R.objOf(\"value\"), examples),\n        ),\n      )\n    : undefined;\n\nexport const defaultIsHeader = (\n  name: string,\n  familiar?: string[],\n): name is `x-${string}` =>\n  familiar?.includes(name) ||\n  name.startsWith(\"x-\") ||\n  wellKnownHeaders.includes(name);\n\nexport const depictRequestParams = ({\n  path,\n  method,\n  request,\n  inputSources,\n  makeRef,\n  composition,\n  isHeader,\n  security,\n  description = `${method.toUpperCase()} ${path} Parameter`,\n}: ReqResCommons & {\n  composition: \"inline\" | \"components\";\n  description?: string;\n  request: z.core.JSONSchema.BaseSchema;\n  inputSources: InputSource[];\n  isHeader?: IsHeader;\n  security?: Alternatives<Security>;\n}) => {\n  const flat = flattenIO(request);\n  const pathParams = getRoutePathParams(path);\n  const isQueryEnabled = inputSources.includes(\"query\");\n  const areParamsEnabled = inputSources.includes(\"params\");\n  const areHeadersEnabled = inputSources.includes(\"headers\");\n  const isPathParam = (name: string) =>\n    areParamsEnabled && pathParams.includes(name);\n  const securityHeaders = R.chain(\n    R.filter((entry: Security) => entry.type === \"header\"),\n    security ?? [],\n  ).map(({ name }) => name);\n  const isHeaderParam = (name: string) =>\n    areHeadersEnabled &&\n    (isHeader?.(name, method, path) ?? defaultIsHeader(name, securityHeaders));\n\n  return Object.entries(flat.properties).reduce<ParameterObject[]>(\n    (acc, [name, jsonSchema]) => {\n      if (!isObject(jsonSchema)) return acc;\n      const location = isPathParam(name)\n        ? \"path\"\n        : isHeaderParam(name)\n          ? \"header\"\n          : isQueryEnabled\n            ? \"query\"\n            : undefined;\n      if (!location) return acc;\n      const depicted = asOAS(jsonSchema);\n      const result =\n        composition === \"components\"\n          ? makeRef(\n              jsonSchema.id || JSON.stringify(jsonSchema),\n              depicted,\n              makeCleanId(description, name),\n            )\n          : depicted;\n      return acc.concat({\n        name,\n        in: location,\n        deprecated: jsonSchema.deprecated,\n        required: flat.required?.includes(name) || false,\n        description: depicted.description || description,\n        schema: result,\n        examples: enumerateExamples(\n          isSchemaObject(depicted) && depicted.examples?.length\n            ? depicted.examples // own examples or from the flat:\n            : R.pluck(\n                name,\n                flat.examples?.filter(R.both(isObject, R.has(name))) || [],\n              ),\n        ),\n      });\n    },\n    [],\n  );\n};\n\nconst depicters: Partial<Record<FirstPartyKind | ProprietaryBrand, Depicter>> =\n  {\n    nullable: depictNullable,\n    union: depictUnion,\n    bigint: depictBigInt,\n    intersection: depictIntersection,\n    tuple: depictTuple,\n    pipe: depictPipeline,\n    [ezDateInBrand]: depictDateIn,\n    [ezDateOutBrand]: depictDateOut,\n    [ezUploadBrand]: depictUpload,\n    [ezRawBrand]: depictRaw,\n    [ezBufferBrand]: depictBuffer,\n  };\n\n/**\n * @todo simplify if fixed (unable to customize references):\n * @link https://github.com/colinhacks/zod/issues/4281\n * */\nconst fixReferences = (\n  subject: z.core.JSONSchema.BaseSchema,\n  defs: Record<string, z.core.JSONSchema.BaseSchema>,\n  ctx: OpenAPIContext,\n) => {\n  const stack: unknown[] = [subject, defs];\n  while (stack.length) {\n    const entry = stack.shift()!;\n    if (R.is(Object, entry)) {\n      if (isReferenceObject(entry) && !entry.$ref.startsWith(\"#/components\")) {\n        const actualName = entry.$ref.split(\"/\").pop()!;\n        const depiction = defs[actualName];\n        if (depiction) {\n          entry.$ref = ctx.makeRef(\n            depiction.id || depiction, // avoiding serialization, because changing $ref\n            asOAS(depiction),\n          ).$ref;\n        }\n        continue;\n      }\n      stack.push(...R.values(entry));\n    }\n    if (R.is(Array, entry)) stack.push(...R.values(entry));\n  }\n  return subject;\n};\n\nconst depict = (\n  subject: z.core.$ZodType,\n  { ctx, rules = depicters }: { ctx: OpenAPIContext; rules?: BrandHandling },\n) => {\n  const { $defs = {}, properties = {} } = z.toJSONSchema(\n    z.object({ subject }), // avoiding \"document root\" references\n    {\n      unrepresentable: \"any\",\n      io: ctx.isResponse ? \"output\" : \"input\",\n      override: (zodCtx) => {\n        const brand = getBrand(zodCtx.zodSchema);\n        const depicter =\n          rules[\n            brand && brand in rules ? brand : zodCtx.zodSchema._zod.def.type\n          ];\n        if (depicter) {\n          const overrides = { ...depicter(zodCtx, ctx) };\n          for (const key in zodCtx.jsonSchema) delete zodCtx.jsonSchema[key];\n          Object.assign(zodCtx.jsonSchema, overrides);\n        }\n      },\n    },\n  ) as z.core.JSONSchema.ObjectSchema;\n  return fixReferences(\n    isObject(properties[\"subject\"]) ? properties[\"subject\"] : {},\n    $defs,\n    ctx,\n  );\n};\n\nexport const excludeParamsFromDepiction = (\n  subject: SchemaObject | ReferenceObject,\n  names: string[],\n): [SchemaObject | ReferenceObject, boolean] => {\n  if (isReferenceObject(subject)) return [subject, false];\n  let hasRequired = false;\n  const subTransformer = R.map((entry: SchemaObject | ReferenceObject) => {\n    const [sub, subRequired] = excludeParamsFromDepiction(entry, names);\n    hasRequired = hasRequired || subRequired;\n    return sub;\n  });\n  const remover = R.omit(names) as <T>(obj: T) => Partial<T>;\n  const transformers = {\n    properties: remover,\n    examples: R.map(remover),\n    required: R.without(names),\n    allOf: subTransformer,\n    oneOf: subTransformer,\n    anyOf: subTransformer,\n  };\n  const result: SchemaObject = R.evolve(transformers, subject);\n  return [result, hasRequired || Boolean(result.required?.length)];\n};\n\nexport const depictResponse = ({\n  method,\n  path,\n  schema,\n  mimeTypes,\n  variant,\n  makeRef,\n  composition,\n  hasMultipleStatusCodes,\n  statusCode,\n  brandHandling,\n  description = `${method.toUpperCase()} ${path} ${ucFirst(variant)} response ${\n    hasMultipleStatusCodes ? statusCode : \"\"\n  }`.trim(),\n}: ReqResCommons & {\n  schema: z.core.$ZodType;\n  composition: \"inline\" | \"components\";\n  description?: string;\n  brandHandling?: BrandHandling;\n  mimeTypes: NormalizedResponse[\"mimeTypes\"];\n  variant: ResponseVariant;\n  statusCode: number;\n  hasMultipleStatusCodes: boolean;\n}): ResponseObject => {\n  if (!shouldHaveContent(method, mimeTypes)) return { description };\n  const response = asOAS(\n    depict(schema, {\n      rules: { ...brandHandling, ...depicters },\n      ctx: { isResponse: true, makeRef, path, method },\n    }),\n  );\n  const examples = [];\n  if (isSchemaObject(response) && response.examples) {\n    examples.push(...response.examples);\n    delete response.examples; // moving them up\n  }\n  const media: MediaTypeObject = {\n    schema:\n      composition === \"components\"\n        ? makeRef(schema, response, makeCleanId(description))\n        : response,\n    examples: enumerateExamples(examples),\n  };\n  return { description, content: R.fromPairs(R.xprod(mimeTypes, [media])) };\n};\n\nconst depictBearerSecurity = ({\n  format: bearerFormat,\n}: Extract<Security, { type: \"bearer\" }>) => {\n  const result: SecuritySchemeObject = {\n    type: \"http\",\n    scheme: \"bearer\",\n  };\n  if (bearerFormat) result.bearerFormat = bearerFormat;\n  return result;\n};\nconst depictInputSecurity = (\n  { name }: Extract<Security, { type: \"input\" }>,\n  inputSources: InputSource[],\n) => {\n  const result: SecuritySchemeObject = {\n    type: \"apiKey\",\n    in: \"query\",\n    name,\n  };\n  if (inputSources?.includes(\"body\")) {\n    if (inputSources?.includes(\"query\")) {\n      result[\"x-in-alternative\"] = \"body\";\n      result.description = `${name} CAN also be supplied within the request body`;\n    } else {\n      result[\"x-in-actual\"] = \"body\";\n      result.description = `${name} MUST be supplied within the request body instead of query`;\n    }\n  }\n  return result;\n};\nconst depictHeaderSecurity = ({\n  name,\n}: Extract<Security, { type: \"header\" }>) => ({\n  type: \"apiKey\" as const,\n  in: \"header\",\n  name,\n});\nconst depictCookieSecurity = ({\n  name,\n}: Extract<Security, { type: \"cookie\" }>) => ({\n  type: \"apiKey\" as const,\n  in: \"cookie\",\n  name,\n});\nconst depictOpenIdSecurity = ({\n  url: openIdConnectUrl,\n}: Extract<Security, { type: \"openid\" }>) => ({\n  type: \"openIdConnect\" as const,\n  openIdConnectUrl,\n});\nconst depictOAuth2Security = ({\n  flows = {},\n}: Extract<Security, { type: \"oauth2\" }>) => ({\n  type: \"oauth2\" as const,\n  flows: R.map(\n    (flow): OAuthFlowObject => ({ ...flow, scopes: flow.scopes || {} }),\n    R.reject(R.isNil, flows) as Required<typeof flows>,\n  ),\n});\n\nexport const depictSecurity = (\n  alternatives: Alternatives<Security>,\n  inputSources: InputSource[] = [],\n): Alternatives<SecuritySchemeObject> => {\n  const mapper = (subj: Security): SecuritySchemeObject => {\n    if (subj.type === \"basic\") return { type: \"http\", scheme: \"basic\" };\n    else if (subj.type === \"bearer\") return depictBearerSecurity(subj);\n    else if (subj.type === \"input\")\n      return depictInputSecurity(subj, inputSources);\n    else if (subj.type === \"header\") return depictHeaderSecurity(subj);\n    else if (subj.type === \"cookie\") return depictCookieSecurity(subj);\n    else if (subj.type === \"openid\") return depictOpenIdSecurity(subj);\n    else return depictOAuth2Security(subj);\n  };\n  return alternatives.map((entries) => entries.map(mapper));\n};\n\nexport const depictSecurityRefs = (\n  alternatives: Alternatives<SecuritySchemeObject>,\n  scopes: string[] | ReadonlyArray<string>,\n  entitle: (subject: SecuritySchemeObject) => string,\n): SecurityRequirementObject[] =>\n  alternatives.map((alternative) =>\n    alternative.reduce<SecurityRequirementObject>((refs, securitySchema) => {\n      const name = entitle(securitySchema);\n      const hasScopes = [\"oauth2\", \"openIdConnect\"].includes(\n        securitySchema.type,\n      );\n      return Object.assign(refs, { [name]: hasScopes ? scopes : [] });\n    }, {}),\n  );\n\nexport const depictRequest = ({\n  schema,\n  brandHandling,\n  makeRef,\n  path,\n  method,\n}: ReqResCommons & {\n  schema: IOSchema;\n  brandHandling?: BrandHandling;\n}) =>\n  depict(schema, {\n    rules: { ...brandHandling, ...depicters },\n    ctx: { isResponse: false, makeRef, path, method },\n  });\n\nexport const depictBody = ({\n  method,\n  path,\n  schema,\n  request,\n  mimeType,\n  makeRef,\n  composition,\n  paramNames,\n  description = `${method.toUpperCase()} ${path} Request body`,\n}: ReqResCommons & {\n  schema: IOSchema;\n  composition: \"inline\" | \"components\";\n  description?: string;\n  request: z.core.JSONSchema.BaseSchema;\n  mimeType: string;\n  paramNames: string[];\n}) => {\n  const [withoutParams, hasRequired] = excludeParamsFromDepiction(\n    asOAS(request),\n    paramNames,\n  );\n  const examples = [];\n  if (isSchemaObject(withoutParams) && withoutParams.examples) {\n    examples.push(...withoutParams.examples);\n    delete withoutParams.examples; // pull up\n  }\n  const media: MediaTypeObject = {\n    schema:\n      composition === \"components\"\n        ? makeRef(schema, withoutParams, makeCleanId(description))\n        : withoutParams,\n    examples: enumerateExamples(\n      examples.length\n        ? examples\n        : flattenIO(request)\n            .examples?.filter(\n              (one): one is FlatObject => isObject(one) && !Array.isArray(one),\n            )\n            .map(R.omit(paramNames)) || [],\n    ),\n  };\n  const body: RequestBodyObject = {\n    description,\n    content: { [mimeType]: media },\n  };\n  if (hasRequired || mimeType === contentTypes.raw) body.required = true;\n  return body;\n};\n\nexport const depictTags = (\n  tags: Partial<Record<Tag, string | { description: string; url?: string }>>,\n) =>\n  Object.entries(tags).reduce<TagObject[]>((agg, [tag, def]) => {\n    if (!def) return agg;\n    const entry: TagObject = {\n      name: tag,\n      description: typeof def === \"string\" ? def : def.description,\n    };\n    if (typeof def === \"object\" && def.url)\n      entry.externalDocs = { url: def.url };\n    return agg.concat(entry);\n  }, []);\n\nexport const ensureShortDescription = (description: string) =>\n  description.length <= shortDescriptionLimit\n    ? description\n    : description.slice(0, shortDescriptionLimit - 1) + \"…\";\n\nexport const nonEmpty = <T>(subject: T[] | ReadonlyArray<T>) =>\n  subject.length ? subject.slice() : undefined;\n","import {\n  OpenApiBuilder,\n  OperationObject,\n  ReferenceObject,\n  ResponsesObject,\n  SchemaObject,\n  SecuritySchemeObject,\n  SecuritySchemeType,\n} from \"openapi3-ts/oas31\";\nimport * as R from \"ramda\";\nimport { responseVariants } from \"./api-response\";\nimport { contentTypes } from \"./content-type\";\nimport { DocumentationError } from \"./errors\";\nimport { getInputSources, makeCleanId } from \"./common-helpers\";\nimport { CommonConfig } from \"./config-type\";\nimport { processContainers } from \"./logical-container\";\nimport { ClientMethod } from \"./method\";\nimport {\n  depictBody,\n  depictRequestParams,\n  depictResponse,\n  depictSecurity,\n  depictSecurityRefs,\n  depictTags,\n  ensureShortDescription,\n  reformatParamsInPath,\n  IsHeader,\n  nonEmpty,\n  BrandHandling,\n  depictRequest,\n} from \"./documentation-helpers\";\nimport { Routing } from \"./routing\";\nimport { OnEndpoint, walkRouting, withHead } from \"./routing-walker\";\n\ntype Component =\n  | \"positiveResponse\"\n  | \"negativeResponse\"\n  | \"requestParameter\"\n  | \"requestBody\";\n\n/** @desc user defined function that creates a component description from its properties */\ntype Descriptor = (\n  props: Record<\"method\" | \"path\" | \"operationId\", string> & {\n    statusCode?: number; // for response only\n  },\n) => string;\n\ninterface DocumentationParams {\n  title: string;\n  version: string;\n  serverUrl: string | [string, ...string[]];\n  routing: Routing;\n  config: CommonConfig;\n  /**\n   * @desc Descriptions of various components based on their properties (method, path, operationId).\n   * @desc When composition set to \"components\", component name is generated from this description\n   * @default () => `${method} ${path} ${component}`\n   * */\n  descriptions?: Partial<Record<Component, Descriptor>>;\n  /** @default true */\n  hasSummaryFromDescription?: boolean;\n  /**\n   * @desc Depict the HEAD method for each Endpoint supporting the GET method (feature of Express)\n   * @default true\n   * */\n  hasHeadMethod?: boolean;\n  /** @default inline */\n  composition?: \"inline\" | \"components\";\n  /**\n   * @desc Handling rules for your own branded schemas.\n   * @desc Keys: brands (recommended to use unique symbols).\n   * @desc Values: functions having Zod context as first argument, second one is the framework context.\n   * @example { MyBrand: ( { zodSchema, jsonSchema } ) => ({ type: \"object\" })\n   */\n  brandHandling?: BrandHandling;\n  /**\n   * @desc Ability to configure recognition of headers among other input data\n   * @desc Only applicable when \"headers\" is present within inputSources config option\n   * @see defaultIsHeader\n   * @link https://www.iana.org/assignments/http-fields/http-fields.xhtml\n   * */\n  isHeader?: IsHeader;\n  /**\n   * @desc Extended description of tags used in endpoints. For enforcing constraints:\n   * @see TagOverrides\n   * @example { users: \"About users\", files: { description: \"About files\", url: \"https://example.com\" } }\n   * */\n  tags?: Parameters<typeof depictTags>[0];\n}\n\nexport class Documentation extends OpenApiBuilder {\n  readonly #lastSecuritySchemaIds = new Map<SecuritySchemeType, number>();\n  readonly #lastOperationIdSuffixes = new Map<string, number>();\n  readonly #references = new Map<object | string, string>();\n\n  #makeRef(\n    key: object | string,\n    subject: SchemaObject | ReferenceObject,\n    name = this.#references.get(key),\n  ): ReferenceObject {\n    if (!name) {\n      name = `Schema${this.#references.size + 1}`;\n      this.#references.set(key, name);\n    }\n    this.addSchema(name, subject);\n    return { $ref: `#/components/schemas/${name}` };\n  }\n\n  #ensureUniqOperationId(\n    path: string,\n    method: ClientMethod,\n    userDefined?: string,\n  ) {\n    const operationId = userDefined || makeCleanId(method, path);\n    let lastSuffix = this.#lastOperationIdSuffixes.get(operationId);\n    if (lastSuffix === undefined) {\n      this.#lastOperationIdSuffixes.set(operationId, 1);\n      return operationId;\n    }\n    if (userDefined) {\n      throw new DocumentationError(`Duplicated operationId: \"${userDefined}\"`, {\n        method,\n        isResponse: false,\n        path,\n      });\n    }\n    lastSuffix++;\n    this.#lastOperationIdSuffixes.set(operationId, lastSuffix);\n    return `${operationId}${lastSuffix}`;\n  }\n\n  #ensureUniqSecuritySchemaName(subject: SecuritySchemeObject) {\n    const serializedSubject = JSON.stringify(subject);\n    for (const name in this.rootDoc.components?.securitySchemes || {}) {\n      if (\n        serializedSubject ===\n        JSON.stringify(this.rootDoc.components?.securitySchemes?.[name])\n      )\n        return name;\n    }\n    const nextId = (this.#lastSecuritySchemaIds.get(subject.type) || 0) + 1;\n    this.#lastSecuritySchemaIds.set(subject.type, nextId);\n    return `${subject.type.toUpperCase()}_${nextId}`;\n  }\n\n  public constructor({\n    routing,\n    config,\n    title,\n    version,\n    serverUrl,\n    descriptions,\n    brandHandling,\n    tags,\n    isHeader,\n    hasSummaryFromDescription = true,\n    hasHeadMethod = true,\n    composition = \"inline\",\n  }: DocumentationParams) {\n    super();\n    this.addInfo({ title, version });\n    for (const url of typeof serverUrl === \"string\" ? [serverUrl] : serverUrl)\n      this.addServer({ url });\n    const onEndpoint: OnEndpoint<ClientMethod> = (method, path, endpoint) => {\n      const commons = {\n        path,\n        method,\n        endpoint,\n        composition,\n        brandHandling,\n        makeRef: this.#makeRef.bind(this),\n      };\n      const { description, shortDescription, scopes, inputSchema } = endpoint;\n      const summary = shortDescription\n        ? ensureShortDescription(shortDescription)\n        : hasSummaryFromDescription && description\n          ? ensureShortDescription(description)\n          : undefined;\n      const inputSources = getInputSources(method, config.inputSources);\n      const operationId = this.#ensureUniqOperationId(\n        path,\n        method,\n        endpoint.getOperationId(method),\n      );\n\n      const request = depictRequest({ ...commons, schema: inputSchema });\n      const security = processContainers(endpoint.security);\n      const depictedParams = depictRequestParams({\n        ...commons,\n        inputSources,\n        isHeader,\n        security,\n        request,\n        description: descriptions?.requestParameter?.call(null, {\n          method,\n          path,\n          operationId,\n        }),\n      });\n\n      const responses: ResponsesObject = {};\n      for (const variant of responseVariants) {\n        const apiResponses = endpoint.getResponses(variant);\n        for (const { mimeTypes, schema, statusCodes } of apiResponses) {\n          for (const statusCode of statusCodes) {\n            responses[statusCode] = depictResponse({\n              ...commons,\n              variant,\n              schema,\n              mimeTypes,\n              statusCode,\n              hasMultipleStatusCodes:\n                apiResponses.length > 1 || statusCodes.length > 1,\n              description: descriptions?.[`${variant}Response`]?.call(null, {\n                method,\n                path,\n                operationId,\n                statusCode,\n              }),\n            });\n          }\n        }\n      }\n\n      const requestBody = inputSources.includes(\"body\")\n        ? depictBody({\n            ...commons,\n            request,\n            paramNames: R.pluck(\"name\", depictedParams),\n            schema: inputSchema,\n            mimeType: contentTypes[endpoint.requestType],\n            description: descriptions?.requestBody?.call(null, {\n              method,\n              path,\n              operationId,\n            }),\n          })\n        : undefined;\n\n      const securityRefs = depictSecurityRefs(\n        depictSecurity(security, inputSources),\n        scopes,\n        (securitySchema) => {\n          const name = this.#ensureUniqSecuritySchemaName(securitySchema);\n          this.addSecurityScheme(name, securitySchema);\n          return name;\n        },\n      );\n\n      const operation: OperationObject = {\n        operationId,\n        summary,\n        description,\n        deprecated: endpoint.isDeprecated || undefined,\n        tags: nonEmpty(endpoint.tags),\n        parameters: nonEmpty(depictedParams),\n        requestBody,\n        security: nonEmpty(securityRefs),\n        responses,\n      };\n      this.addPath(reformatParamsInPath(path), { [method]: operation });\n    };\n    walkRouting({\n      routing,\n      onEndpoint: hasHeadMethod ? withHead(onEndpoint) : onEndpoint,\n    });\n    if (tags) this.rootDoc.tags = depictTags(tags);\n  }\n}\n","import { Request, Response } from \"express\";\nimport { ensureError, FlatObject, getInput } from \"./common-helpers\";\nimport { CommonConfig } from \"./config-type\";\nimport { AbstractEndpoint } from \"./endpoint\";\nimport {\n  AbstractLogger,\n  ActualLogger,\n  isSeverity,\n  Severity,\n} from \"./logger-helpers\";\nimport { contentTypes } from \"./content-type\";\nimport {\n  createRequest,\n  RequestOptions,\n  createResponse,\n  ResponseOptions,\n} from \"node-mocks-http\";\nimport { AbstractMiddleware } from \"./middleware\";\nimport { defaultResultHandler } from \"./result-handler\";\n\nexport const makeRequestMock = <REQ extends RequestOptions>(props?: REQ) =>\n  createRequest<Request & REQ>({\n    ...props,\n    headers: { \"content-type\": contentTypes.json, ...props?.headers },\n  });\n\nexport const makeResponseMock = (opt?: ResponseOptions) =>\n  createResponse<Response>(opt);\n\nexport const makeLoggerMock = <LOG extends FlatObject>(loggerProps?: LOG) => {\n  const logs: Record<Severity, unknown[]> = {\n    warn: [],\n    error: [],\n    info: [],\n    debug: [],\n  };\n  return new Proxy(\n    (loggerProps || {}) as AbstractLogger &\n      LOG & { _getLogs: () => typeof logs },\n    {\n      get(target, prop, recv) {\n        if (prop === \"_getLogs\") return () => logs;\n        if (isSeverity(prop))\n          return (...args: unknown[]) => logs[prop].push(args);\n        return Reflect.get(target, prop, recv);\n      },\n    },\n  );\n};\n\nconst makeTestingMocks = <LOG extends FlatObject, REQ extends RequestOptions>({\n  requestProps,\n  responseOptions,\n  configProps,\n  loggerProps,\n}: TestingProps<REQ, LOG>) => {\n  const requestMock = makeRequestMock(requestProps);\n  const responseMock = makeResponseMock({\n    req: requestMock, // this works only for res.format()\n    ...responseOptions,\n  });\n  /** @link https://github.com/expressjs/express/blob/2a980ad16052e53b398c9953fea50e3daa0b495c/lib/middleware/init.js#L31-L32 */\n  responseMock.req = responseOptions?.req || requestMock;\n  requestMock.res = responseMock;\n  const loggerMock = makeLoggerMock(loggerProps);\n  const configMock = {\n    cors: false,\n    logger: loggerMock,\n    ...configProps,\n  };\n  return { requestMock, responseMock, loggerMock, configMock };\n};\n\ninterface TestingProps<REQ, LOG> {\n  /**\n   * @desc Additional properties to set on Request mock\n   * @default { method: \"GET\", headers: { \"content-type\": \"application/json\" } }\n   * */\n  requestProps?: REQ;\n  /**\n   * @link https://www.npmjs.com/package/node-mocks-http\n   * @default { req: requestMock }\n   * */\n  responseOptions?: ResponseOptions;\n  /**\n   * @desc Additional properties to set on config mock\n   * @default { cors: false, logger }\n   * */\n  configProps?: Partial<CommonConfig>;\n  /**\n   * @desc Additional properties to set on logger mock\n   * @default { info, warn, error, debug }\n   * */\n  loggerProps?: LOG;\n}\n\nexport const testEndpoint = async <\n  LOG extends FlatObject,\n  REQ extends RequestOptions,\n>({\n  endpoint,\n  ...rest\n}: TestingProps<REQ, LOG> & {\n  /** @desc The endpoint to test */\n  endpoint: AbstractEndpoint;\n}) => {\n  const { requestMock, responseMock, loggerMock, configMock } =\n    makeTestingMocks(rest);\n  await endpoint.execute({\n    request: requestMock,\n    response: responseMock,\n    config: configMock as CommonConfig,\n    logger: loggerMock as ActualLogger,\n  });\n  return { requestMock, responseMock, loggerMock };\n};\n\nexport const testMiddleware = async <\n  LOG extends FlatObject,\n  REQ extends RequestOptions,\n>({\n  middleware,\n  options = {},\n  ...rest\n}: TestingProps<REQ, LOG> & {\n  /** @desc The middleware to test */\n  middleware: AbstractMiddleware;\n  /** @desc The aggregated output from previously executed middlewares */\n  options?: FlatObject;\n}) => {\n  const {\n    requestMock,\n    responseMock,\n    loggerMock,\n    configMock: { inputSources, errorHandler = defaultResultHandler },\n  } = makeTestingMocks(rest);\n  const input = getInput(requestMock, inputSources);\n  const commons = {\n    request: requestMock,\n    response: responseMock,\n    logger: loggerMock,\n    input,\n    options,\n  };\n  try {\n    const output = await middleware.execute(commons);\n    return { requestMock, responseMock, loggerMock, output };\n  } catch (e) {\n    await errorHandler.execute({\n      ...commons,\n      error: ensureError(e),\n      output: null,\n    });\n    return { requestMock, responseMock, loggerMock, output: {} };\n  }\n};\n","import * as R from \"ramda\";\nimport ts from \"typescript\";\n\nexport type Typeable =\n  | ts.TypeNode\n  | ts.Identifier\n  | string\n  | ts.KeywordTypeSyntaxKind;\n\ntype TypeParams =\n  | string[]\n  | Partial<Record<string, Typeable | { type?: ts.TypeNode; init: Typeable }>>;\n\nexport const f = ts.factory;\n\nconst exportModifier = [f.createModifier(ts.SyntaxKind.ExportKeyword)];\n\nconst asyncModifier = [f.createModifier(ts.SyntaxKind.AsyncKeyword)];\n\nexport const accessModifiers = {\n  public: [f.createModifier(ts.SyntaxKind.PublicKeyword)],\n  protectedReadonly: [\n    f.createModifier(ts.SyntaxKind.ProtectedKeyword),\n    f.createModifier(ts.SyntaxKind.ReadonlyKeyword),\n  ],\n};\n\nexport const addJsDoc = <T extends ts.Node>(node: T, text: string) =>\n  ts.addSyntheticLeadingComment(\n    node,\n    ts.SyntaxKind.MultiLineCommentTrivia,\n    `* ${text} `,\n    true,\n  );\n\nexport const printNode = (\n  node: ts.Node,\n  printerOptions?: ts.PrinterOptions,\n) => {\n  const sourceFile = ts.createSourceFile(\n    \"print.ts\",\n    \"\",\n    ts.ScriptTarget.Latest,\n    false,\n    ts.ScriptKind.TS,\n  );\n  const printer = ts.createPrinter(printerOptions);\n  return printer.printNode(ts.EmitHint.Unspecified, node, sourceFile);\n};\n\nconst safePropRegex = /^[A-Za-z_$][A-Za-z0-9_$]*$/;\nexport const makePropertyIdentifier = (name: string | number) =>\n  typeof name === \"string\" && safePropRegex.test(name)\n    ? f.createIdentifier(name)\n    : literally(name);\n\nexport const makeTemplate = (\n  head: string,\n  ...rest: ([ts.Expression] | [ts.Expression, string])[]\n) =>\n  f.createTemplateExpression(\n    f.createTemplateHead(head),\n    rest.map(([id, str = \"\"], idx) =>\n      f.createTemplateSpan(\n        id,\n        idx === rest.length - 1\n          ? f.createTemplateTail(str)\n          : f.createTemplateMiddle(str),\n      ),\n    ),\n  );\n\nexport const makeParam = (\n  name: string | ts.Identifier,\n  {\n    type,\n    mod,\n    init,\n    optional,\n  }: {\n    type?: Typeable;\n    mod?: ts.Modifier[];\n    init?: ts.Expression;\n    optional?: boolean;\n  } = {},\n) =>\n  f.createParameterDeclaration(\n    mod,\n    undefined,\n    name,\n    optional ? f.createToken(ts.SyntaxKind.QuestionToken) : undefined,\n    type ? ensureTypeNode(type) : undefined,\n    init,\n  );\n\nexport const makeParams = (\n  params: Partial<Record<string, Typeable | Parameters<typeof makeParam>[1]>>,\n) =>\n  Object.entries(params).map(([name, value]) =>\n    makeParam(\n      name,\n      typeof value === \"string\" ||\n        typeof value === \"number\" ||\n        (typeof value === \"object\" && \"kind\" in value)\n        ? { type: value }\n        : value,\n    ),\n  );\n\nexport const makePublicConstructor = (\n  params: ts.ParameterDeclaration[],\n  statements: ts.Statement[] = [],\n) =>\n  f.createConstructorDeclaration(\n    accessModifiers.public,\n    params,\n    f.createBlock(statements),\n  );\n\nexport const ensureTypeNode = (\n  subject: Typeable,\n  args?: Typeable[], // only for string and id\n): ts.TypeNode =>\n  typeof subject === \"number\"\n    ? f.createKeywordTypeNode(subject)\n    : typeof subject === \"string\" || ts.isIdentifier(subject)\n      ? f.createTypeReferenceNode(subject, args && R.map(ensureTypeNode, args))\n      : subject;\n\n// Record<string, any>\nexport const recordStringAny = ensureTypeNode(\"Record\", [\n  ts.SyntaxKind.StringKeyword,\n  ts.SyntaxKind.AnyKeyword,\n]);\n\n/** ensures distinct union (unique primitives) */\nexport const makeUnion = (entries: ts.TypeNode[]) => {\n  const nodes = new Map<ts.TypeNode | ts.KeywordTypeSyntaxKind, ts.TypeNode>();\n  for (const entry of entries)\n    nodes.set(isPrimitive(entry) ? entry.kind : entry, entry);\n  return f.createUnionTypeNode(Array.from(nodes.values()));\n};\n\nexport const makeInterfaceProp = (\n  name: string | number,\n  value: Typeable,\n  {\n    isOptional,\n    isDeprecated,\n    comment,\n  }: { isOptional?: boolean; isDeprecated?: boolean; comment?: string } = {},\n) => {\n  const propType = ensureTypeNode(value);\n  const node = f.createPropertySignature(\n    undefined,\n    makePropertyIdentifier(name),\n    isOptional ? f.createToken(ts.SyntaxKind.QuestionToken) : undefined,\n    isOptional\n      ? makeUnion([propType, ensureTypeNode(ts.SyntaxKind.UndefinedKeyword)])\n      : propType,\n  );\n  const jsdoc = R.reject(R.isNil, [\n    isDeprecated ? \"@deprecated\" : undefined,\n    comment,\n  ]);\n  return jsdoc.length ? addJsDoc(node, jsdoc.join(\" \")) : node;\n};\n\nexport const makeOneLine = (subject: ts.TypeNode) =>\n  ts.setEmitFlags(subject, ts.EmitFlags.SingleLine);\n\nexport const makeDeconstruction = (\n  ...names: ts.Identifier[]\n): ts.ArrayBindingPattern =>\n  f.createArrayBindingPattern(\n    names.map(\n      (name) => f.createBindingElement(undefined, undefined, name), // can also add default value at last\n    ),\n  );\n\nexport const makeConst = (\n  name: string | ts.Identifier | ts.ArrayBindingPattern,\n  value: ts.Expression,\n  { type, expose }: { type?: Typeable; expose?: true } = {},\n) =>\n  f.createVariableStatement(\n    expose && exportModifier,\n    f.createVariableDeclarationList(\n      [\n        f.createVariableDeclaration(\n          name,\n          undefined,\n          type ? ensureTypeNode(type) : undefined,\n          value,\n        ),\n      ],\n      ts.NodeFlags.Const,\n    ),\n  );\n\nexport const makePublicLiteralType = (\n  name: ts.Identifier | string,\n  literals: string[],\n) =>\n  makeType(name, makeUnion(R.map(makeLiteralType, literals)), { expose: true });\n\nexport const makeType = (\n  name: ts.Identifier | string,\n  value: ts.TypeNode,\n  {\n    expose,\n    comment,\n    params,\n  }: { expose?: boolean; comment?: string; params?: TypeParams } = {},\n) => {\n  const node = f.createTypeAliasDeclaration(\n    expose ? exportModifier : undefined,\n    name,\n    params && makeTypeParams(params),\n    value,\n  );\n  return comment ? addJsDoc(node, comment) : node;\n};\n\nexport const makePublicProperty = (\n  name: string | ts.PropertyName,\n  type: Typeable,\n) =>\n  f.createPropertyDeclaration(\n    accessModifiers.public,\n    name,\n    undefined,\n    ensureTypeNode(type),\n    undefined,\n  );\n\nexport const makePublicMethod = (\n  name: ts.Identifier,\n  params: ts.ParameterDeclaration[],\n  statements: ts.Statement[],\n  {\n    typeParams,\n    returns,\n  }: { typeParams?: TypeParams; returns?: ts.TypeNode } = {},\n) =>\n  f.createMethodDeclaration(\n    accessModifiers.public,\n    undefined,\n    name,\n    undefined,\n    typeParams && makeTypeParams(typeParams),\n    params,\n    returns,\n    f.createBlock(statements),\n  );\n\nexport const makePublicClass = (\n  name: string,\n  statements: ts.ClassElement[],\n  { typeParams }: { typeParams?: TypeParams } = {},\n) =>\n  f.createClassDeclaration(\n    exportModifier,\n    name,\n    typeParams && makeTypeParams(typeParams),\n    undefined,\n    statements,\n  );\n\nexport const makeKeyOf = (subj: Typeable) =>\n  f.createTypeOperatorNode(ts.SyntaxKind.KeyOfKeyword, ensureTypeNode(subj));\n\nexport const makePromise = (subject: Typeable) =>\n  ensureTypeNode(Promise.name, [subject]);\n\nexport const makeInterface = (\n  name: ts.Identifier | string,\n  props: ts.PropertySignature[],\n  { expose, comment }: { expose?: boolean; comment?: string } = {},\n) => {\n  const node = f.createInterfaceDeclaration(\n    expose ? exportModifier : undefined,\n    name,\n    undefined,\n    undefined,\n    props,\n  );\n  return comment ? addJsDoc(node, comment) : node;\n};\n\nexport const makeTypeParams = (\n  params:\n    | string[]\n    | Partial<\n        Record<string, Typeable | { type?: ts.TypeNode; init: Typeable }>\n      >,\n) =>\n  (Array.isArray(params)\n    ? params.map((name) => R.pair(name, undefined))\n    : Object.entries(params)\n  ).map(([name, val]) => {\n    const { type, init } =\n      typeof val === \"object\" && \"init\" in val ? val : { type: val };\n    return f.createTypeParameterDeclaration(\n      [],\n      name,\n      type ? ensureTypeNode(type) : undefined,\n      init ? ensureTypeNode(init) : undefined,\n    );\n  });\n\nexport const makeArrowFn = (\n  params:\n    | Array<Parameters<typeof makeParam>[0]>\n    | Parameters<typeof makeParams>[0],\n  body: ts.ConciseBody,\n  { isAsync }: { isAsync?: boolean } = {},\n) =>\n  f.createArrowFunction(\n    isAsync ? asyncModifier : undefined,\n    undefined,\n    Array.isArray(params) ? R.map(makeParam, params) : makeParams(params),\n    undefined,\n    undefined,\n    body,\n  );\n\nexport const propOf = <T>(name: keyof NoInfer<T>) => name as string;\n\nexport const makeTernary = (\n  condition: ts.Expression,\n  positive: ts.Expression,\n  negative: ts.Expression,\n) =>\n  f.createConditionalExpression(\n    condition,\n    f.createToken(ts.SyntaxKind.QuestionToken),\n    positive,\n    f.createToken(ts.SyntaxKind.ColonToken),\n    negative,\n  );\n\nexport const makeCall =\n  (\n    first: ts.Expression | string,\n    ...rest: Array<ts.Identifier | ts.ConditionalExpression | string>\n  ) =>\n  (...args: ts.Expression[]) =>\n    f.createCallExpression(\n      rest.reduce(\n        (acc, entry) =>\n          typeof entry === \"string\" || ts.isIdentifier(entry)\n            ? f.createPropertyAccessExpression(acc, entry)\n            : f.createElementAccessExpression(acc, entry),\n        typeof first === \"string\" ? f.createIdentifier(first) : first,\n      ),\n      undefined,\n      args,\n    );\n\nexport const makeNew = (cls: string, ...args: ts.Expression[]) =>\n  f.createNewExpression(f.createIdentifier(cls), undefined, args);\n\nexport const makeExtract = (base: Typeable, narrow: ts.TypeNode) =>\n  ensureTypeNode(\"Extract\", [base, narrow]);\n\nexport const makeAssignment = (left: ts.Expression, right: ts.Expression) =>\n  f.createExpressionStatement(\n    f.createBinaryExpression(\n      left,\n      f.createToken(ts.SyntaxKind.EqualsToken),\n      right,\n    ),\n  );\n\nexport const makeIndexed = (subject: Typeable, index: Typeable) =>\n  f.createIndexedAccessTypeNode(ensureTypeNode(subject), ensureTypeNode(index));\n\nexport const makeMaybeAsync = (subj: Typeable) =>\n  makeUnion([ensureTypeNode(subj), makePromise(subj)]);\n\nexport const makeFnType = (\n  params: Parameters<typeof makeParams>[0],\n  returns: Typeable,\n) =>\n  f.createFunctionTypeNode(\n    undefined,\n    makeParams(params),\n    ensureTypeNode(returns),\n  );\n\n/* eslint-disable prettier/prettier -- shorter and works better this way than overrides */\nexport const literally = <T extends string | null | boolean | number | bigint>(subj: T) => (\n  typeof subj === \"number\" ? f.createNumericLiteral(subj)\n    : typeof subj === \"bigint\" ? f.createBigIntLiteral(subj.toString())\n    : typeof subj === \"boolean\" ? subj ? f.createTrue() : f.createFalse()\n    : subj === null ? f.createNull() : f.createStringLiteral(subj)\n  ) as T extends string ? ts.StringLiteral : T extends number ? ts.NumericLiteral\n    : T extends boolean ? ts.BooleanLiteral : ts.NullLiteral;\n/* eslint-enable prettier/prettier */\n\nexport const makeLiteralType = (subj: Parameters<typeof literally>[0]) =>\n  f.createLiteralTypeNode(literally(subj));\n\nconst primitives: ts.KeywordTypeSyntaxKind[] = [\n  ts.SyntaxKind.AnyKeyword,\n  ts.SyntaxKind.BigIntKeyword,\n  ts.SyntaxKind.BooleanKeyword,\n  ts.SyntaxKind.NeverKeyword,\n  ts.SyntaxKind.NumberKeyword,\n  ts.SyntaxKind.ObjectKeyword,\n  ts.SyntaxKind.StringKeyword,\n  ts.SyntaxKind.SymbolKeyword,\n  ts.SyntaxKind.UndefinedKeyword,\n  ts.SyntaxKind.UnknownKeyword,\n  ts.SyntaxKind.VoidKeyword,\n];\n\nconst isPrimitive = (node: ts.TypeNode): node is ts.KeywordTypeNode =>\n  (primitives as ts.SyntaxKind[]).includes(node.kind);\n","import * as R from \"ramda\";\nimport ts from \"typescript\";\nimport { ResponseVariant } from \"./api-response\";\nimport { contentTypes } from \"./content-type\";\nimport { ClientMethod, clientMethods } from \"./method\";\nimport type { makeEventSchema } from \"./sse\";\nimport {\n  accessModifiers,\n  ensureTypeNode,\n  f,\n  makeArrowFn,\n  makeConst,\n  makeDeconstruction,\n  makeExtract,\n  makeInterface,\n  makeInterfaceProp,\n  makeKeyOf,\n  makeNew,\n  makeOneLine,\n  makeParam,\n  makeParams,\n  makePromise,\n  makeCall,\n  makePropertyIdentifier,\n  makePublicConstructor,\n  makePublicClass,\n  makePublicLiteralType,\n  makePublicMethod,\n  makeTemplate,\n  makeTernary,\n  makeType,\n  propOf,\n  recordStringAny,\n  makeAssignment,\n  makePublicProperty,\n  makeIndexed,\n  makeMaybeAsync,\n  Typeable,\n  makeFnType,\n  makeLiteralType,\n  literally,\n} from \"./typescript-api\";\n\ntype IOKind = \"input\" | \"response\" | ResponseVariant | \"encoded\";\ntype SSEShape = ReturnType<typeof makeEventSchema>[\"shape\"];\ntype Store = Record<IOKind, ts.TypeNode>;\n\nexport abstract class IntegrationBase {\n  /** @internal */\n  protected paths = new Set<string>();\n  /** @internal */\n  protected tags = new Map<string, ReadonlyArray<string>>();\n  /** @internal */\n  protected registry = new Map<\n    string,\n    { store: Store; isDeprecated: boolean }\n  >();\n\n  readonly #ids = {\n    pathType: f.createIdentifier(\"Path\"),\n    implementationType: f.createIdentifier(\"Implementation\"),\n    keyParameter: f.createIdentifier(\"key\"),\n    pathParameter: f.createIdentifier(\"path\"),\n    paramsArgument: f.createIdentifier(\"params\"),\n    ctxArgument: f.createIdentifier(\"ctx\"),\n    methodParameter: f.createIdentifier(\"method\"),\n    requestParameter: f.createIdentifier(\"request\"),\n    eventParameter: f.createIdentifier(\"event\"),\n    dataParameter: f.createIdentifier(\"data\"),\n    handlerParameter: f.createIdentifier(\"handler\"),\n    msgParameter: f.createIdentifier(\"msg\"),\n    parseRequestFn: f.createIdentifier(\"parseRequest\"),\n    substituteFn: f.createIdentifier(\"substitute\"),\n    provideMethod: f.createIdentifier(\"provide\"),\n    onMethod: f.createIdentifier(\"on\"),\n    implementationArgument: f.createIdentifier(\"implementation\"),\n    hasBodyConst: f.createIdentifier(\"hasBody\"),\n    undefinedValue: f.createIdentifier(\"undefined\"),\n    responseConst: f.createIdentifier(\"response\"),\n    restConst: f.createIdentifier(\"rest\"),\n    searchParamsConst: f.createIdentifier(\"searchParams\"),\n    defaultImplementationConst: f.createIdentifier(\"defaultImplementation\"),\n    clientConst: f.createIdentifier(\"client\"),\n    contentTypeConst: f.createIdentifier(\"contentType\"),\n    isJsonConst: f.createIdentifier(\"isJSON\"),\n    sourceProp: f.createIdentifier(\"source\"),\n  } satisfies Record<string, ts.Identifier>;\n\n  /** @internal */\n  protected interfaces: Record<IOKind, ts.Identifier> = {\n    input: f.createIdentifier(\"Input\"),\n    positive: f.createIdentifier(\"PositiveResponse\"),\n    negative: f.createIdentifier(\"NegativeResponse\"),\n    encoded: f.createIdentifier(\"EncodedResponse\"),\n    response: f.createIdentifier(\"Response\"),\n  };\n\n  /**\n   * @example export type Method = \"get\" | \"post\" | \"put\" | \"delete\" | \"patch\" | \"head\";\n   * @internal\n   * */\n  protected methodType = makePublicLiteralType(\"Method\", clientMethods);\n\n  /**\n   * @example type SomeOf<T> = T[keyof T];\n   * @internal\n   * */\n  protected someOfType = makeType(\"SomeOf\", makeIndexed(\"T\", makeKeyOf(\"T\")), {\n    params: [\"T\"],\n  });\n\n  /**\n   * @example export type Request = keyof Input;\n   * @internal\n   * */\n  protected requestType = makeType(\n    \"Request\",\n    makeKeyOf(this.interfaces.input),\n    { expose: true },\n  );\n\n  protected constructor(private readonly serverUrl: string) {}\n\n  /**\n   * @example SomeOf<_>\n   * @internal\n   **/\n  protected someOf = ({ name }: ts.TypeAliasDeclaration) =>\n    ensureTypeNode(this.someOfType.name, [name]);\n\n  /**\n   * @example export type Path = \"/v1/user/retrieve\" | ___;\n   * @internal\n   * */\n  protected makePathType = () =>\n    makePublicLiteralType(this.#ids.pathType, Array.from(this.paths));\n\n  /**\n   * @example export interface Input { \"get /v1/user/retrieve\": GetV1UserRetrieveInput; }\n   * @internal\n   * */\n  protected makePublicInterfaces = () =>\n    (Object.keys(this.interfaces) as IOKind[]).map((kind) =>\n      makeInterface(\n        this.interfaces[kind],\n        Array.from(this.registry).map(([request, { store, isDeprecated }]) =>\n          makeInterfaceProp(request, store[kind], { isDeprecated }),\n        ),\n        { expose: true },\n      ),\n    );\n\n  /**\n   * @example export const endpointTags = { \"get /v1/user/retrieve\": [\"users\"] }\n   * @internal\n   * */\n  protected makeEndpointTags = () =>\n    makeConst(\n      \"endpointTags\",\n      f.createObjectLiteralExpression(\n        Array.from(this.tags).map(([request, tags]) =>\n          f.createPropertyAssignment(\n            makePropertyIdentifier(request),\n            f.createArrayLiteralExpression(R.map(literally, tags)),\n          ),\n        ),\n      ),\n      { expose: true },\n    );\n\n  /**\n   * @example export type Implementation = (method: Method, path: string, params: Record<string, any>) => Promise<any>;\n   * @internal\n   * */\n  protected makeImplementationType = () =>\n    makeType(\n      this.#ids.implementationType,\n      makeFnType(\n        {\n          [this.#ids.methodParameter.text]: this.methodType.name,\n          [this.#ids.pathParameter.text]: ts.SyntaxKind.StringKeyword,\n          [this.#ids.paramsArgument.text]: recordStringAny,\n          [this.#ids.ctxArgument.text]: { optional: true, type: \"T\" },\n        },\n        makePromise(ts.SyntaxKind.AnyKeyword),\n      ),\n      {\n        expose: true,\n        params: { T: { init: ts.SyntaxKind.UnknownKeyword } },\n      },\n    );\n\n  /**\n   * @example const parseRequest = (request: string) => request.split(/ (.+)/, 2) as [Method, Path];\n   * @internal\n   * */\n  protected makeParseRequestFn = () =>\n    makeConst(\n      this.#ids.parseRequestFn,\n      makeArrowFn(\n        { [this.#ids.requestParameter.text]: ts.SyntaxKind.StringKeyword },\n        f.createAsExpression(\n          makeCall(this.#ids.requestParameter, propOf<string>(\"split\"))(\n            f.createRegularExpressionLiteral(\"/ (.+)/\"), // split once\n            literally(2), // excludes third empty element\n          ),\n          f.createTupleTypeNode([\n            ensureTypeNode(this.methodType.name),\n            ensureTypeNode(this.#ids.pathType),\n          ]),\n        ),\n      ),\n    );\n\n  /**\n   * @example const substitute = (path: string, params: Record<string, any>) => { ___ return [path, rest] as const; }\n   * @internal\n   * */\n  protected makeSubstituteFn = () =>\n    makeConst(\n      this.#ids.substituteFn,\n      makeArrowFn(\n        {\n          [this.#ids.pathParameter.text]: ts.SyntaxKind.StringKeyword,\n          [this.#ids.paramsArgument.text]: recordStringAny,\n        },\n        f.createBlock([\n          makeConst(\n            this.#ids.restConst,\n            f.createObjectLiteralExpression([\n              f.createSpreadAssignment(this.#ids.paramsArgument),\n            ]),\n          ),\n          f.createForInStatement(\n            f.createVariableDeclarationList(\n              [f.createVariableDeclaration(this.#ids.keyParameter)],\n              ts.NodeFlags.Const,\n            ),\n            this.#ids.paramsArgument,\n            f.createBlock([\n              makeAssignment(\n                this.#ids.pathParameter,\n                makeCall(this.#ids.pathParameter, propOf<string>(\"replace\"))(\n                  makeTemplate(\":\", [this.#ids.keyParameter]), // `:${key}`\n                  makeArrowFn(\n                    [],\n                    f.createBlock([\n                      f.createExpressionStatement(\n                        f.createDeleteExpression(\n                          f.createElementAccessExpression(\n                            this.#ids.restConst,\n                            this.#ids.keyParameter,\n                          ),\n                        ),\n                      ),\n                      f.createReturnStatement(\n                        f.createElementAccessExpression(\n                          this.#ids.paramsArgument,\n                          this.#ids.keyParameter,\n                        ),\n                      ),\n                    ]),\n                  ),\n                ),\n              ),\n            ]),\n          ),\n          f.createReturnStatement(\n            f.createAsExpression(\n              f.createArrayLiteralExpression([\n                this.#ids.pathParameter,\n                this.#ids.restConst,\n              ]),\n              ensureTypeNode(\"const\"),\n            ),\n          ),\n        ]),\n      ),\n    );\n\n  // public provide<K extends MethodPath>(request: K, params: Input[K]): Promise<Response[K]> {}\n  #makeProvider = () =>\n    makePublicMethod(\n      this.#ids.provideMethod,\n      makeParams({\n        [this.#ids.requestParameter.text]: \"K\",\n        [this.#ids.paramsArgument.text]: makeIndexed(\n          this.interfaces.input,\n          \"K\",\n        ),\n        [this.#ids.ctxArgument.text]: { optional: true, type: \"T\" },\n      }),\n      [\n        makeConst(\n          // const [method, path] = this.parseRequest(request);\n          makeDeconstruction(\n            this.#ids.methodParameter,\n            this.#ids.pathParameter,\n          ),\n          makeCall(this.#ids.parseRequestFn)(this.#ids.requestParameter),\n        ),\n        // return this.implementation(___)\n        f.createReturnStatement(\n          makeCall(f.createThis(), this.#ids.implementationArgument)(\n            this.#ids.methodParameter,\n            f.createSpreadElement(\n              makeCall(this.#ids.substituteFn)(\n                this.#ids.pathParameter,\n                this.#ids.paramsArgument,\n              ),\n            ),\n            this.#ids.ctxArgument,\n          ),\n        ),\n      ],\n      {\n        typeParams: { K: this.requestType.name },\n        returns: makePromise(makeIndexed(this.interfaces.response, \"K\")),\n      },\n    );\n\n  /**\n   * @example export class Client { ___ }\n   * @internal\n   * */\n  protected makeClientClass = (name: string) =>\n    makePublicClass(\n      name,\n      [\n        // public constructor(protected readonly implementation: Implementation = defaultImplementation) {}\n        makePublicConstructor([\n          makeParam(this.#ids.implementationArgument, {\n            type: ensureTypeNode(this.#ids.implementationType, [\"T\"]),\n            mod: accessModifiers.protectedReadonly,\n            init: this.#ids.defaultImplementationConst,\n          }),\n        ]),\n        this.#makeProvider(),\n      ],\n      { typeParams: [\"T\"] },\n    );\n\n  // `?${new URLSearchParams(____)}`\n  #makeSearchParams = (from: ts.Expression) =>\n    makeTemplate(\"?\", [makeNew(URLSearchParams.name, from)]);\n\n  // new URL(`${path}${searchParams}`, \"http:____\")\n  #makeFetchURL = () =>\n    makeNew(\n      URL.name,\n      makeTemplate(\n        \"\",\n        [this.#ids.pathParameter],\n        [this.#ids.searchParamsConst],\n      ),\n      literally(this.serverUrl),\n    );\n\n  /**\n   * @example export const defaultImplementation: Implementation = async (method,path,params) => { ___ };\n   * @internal\n   * */\n  protected makeDefaultImplementation = () => {\n    // method: method.toUpperCase()\n    const methodProperty = f.createPropertyAssignment(\n      propOf<RequestInit>(\"method\"),\n      makeCall(this.#ids.methodParameter, propOf<string>(\"toUpperCase\"))(),\n    );\n\n    // headers: hasBody ? { \"Content-Type\": \"application/json\" } : undefined\n    const headersProperty = f.createPropertyAssignment(\n      propOf<RequestInit>(\"headers\"),\n      makeTernary(\n        this.#ids.hasBodyConst,\n        f.createObjectLiteralExpression([\n          f.createPropertyAssignment(\n            literally(\"Content-Type\"),\n            literally(contentTypes.json),\n          ),\n        ]),\n        this.#ids.undefinedValue,\n      ),\n    );\n\n    // body: hasBody ? JSON.stringify(params) : undefined\n    const bodyProperty = f.createPropertyAssignment(\n      propOf<RequestInit>(\"body\"),\n      makeTernary(\n        this.#ids.hasBodyConst,\n        makeCall(\n          JSON[Symbol.toStringTag],\n          propOf<JSON>(\"stringify\"),\n        )(this.#ids.paramsArgument),\n        this.#ids.undefinedValue,\n      ),\n    );\n\n    // const response = await fetch(new URL(`${path}${searchParams}`, \"https://example.com\"), { ___ });\n    const responseStatement = makeConst(\n      this.#ids.responseConst,\n      f.createAwaitExpression(\n        makeCall(fetch.name)(\n          this.#makeFetchURL(),\n          f.createObjectLiteralExpression([\n            methodProperty,\n            headersProperty,\n            bodyProperty,\n          ]),\n        ),\n      ),\n    );\n\n    // const hasBody = ![\"get\", \"delete\"].includes(method);\n    const hasBodyStatement = makeConst(\n      this.#ids.hasBodyConst,\n      f.createLogicalNot(\n        makeCall(\n          f.createArrayLiteralExpression([\n            literally(\"get\" satisfies ClientMethod),\n            literally(\"head\" satisfies ClientMethod),\n            literally(\"delete\" satisfies ClientMethod),\n          ]),\n          propOf<string[]>(\"includes\"),\n        )(this.#ids.methodParameter),\n      ),\n    );\n\n    // const searchParams = hasBody ? \"\" : ___;\n    const searchParamsStatement = makeConst(\n      this.#ids.searchParamsConst,\n      makeTernary(\n        this.#ids.hasBodyConst,\n        literally(\"\"),\n        this.#makeSearchParams(this.#ids.paramsArgument),\n      ),\n    );\n\n    // const contentType = response.headers.get(\"content-type\");\n    const contentTypeStatement = makeConst(\n      this.#ids.contentTypeConst,\n      makeCall(\n        this.#ids.responseConst,\n        propOf<Response>(\"headers\"),\n        propOf<Headers>(\"get\"),\n      )(literally(\"content-type\")),\n    );\n\n    // if (!contentType) return;\n    const noBodyStatement = f.createIfStatement(\n      f.createPrefixUnaryExpression(\n        ts.SyntaxKind.ExclamationToken,\n        this.#ids.contentTypeConst,\n      ),\n      f.createReturnStatement(),\n    );\n\n    // const isJSON = contentType.startsWith(\"application/json\");\n    const isJsonConst = makeConst(\n      this.#ids.isJsonConst,\n      makeCall(\n        this.#ids.contentTypeConst,\n        propOf<string>(\"startsWith\"),\n      )(literally(contentTypes.json)),\n    );\n\n    // return response[isJSON ? \"json\" : \"text\"]();\n    const returnStatement = f.createReturnStatement(\n      makeCall(\n        this.#ids.responseConst,\n        makeTernary(\n          this.#ids.isJsonConst,\n          literally(propOf<Response>(\"json\")),\n          literally(propOf<Response>(\"text\")),\n        ),\n      )(),\n    );\n\n    return makeConst(\n      this.#ids.defaultImplementationConst,\n      makeArrowFn(\n        [\n          this.#ids.methodParameter,\n          this.#ids.pathParameter,\n          this.#ids.paramsArgument,\n        ],\n        f.createBlock([\n          hasBodyStatement,\n          searchParamsStatement,\n          responseStatement,\n          contentTypeStatement,\n          noBodyStatement,\n          isJsonConst,\n          returnStatement,\n        ]),\n        { isAsync: true },\n      ),\n      { type: this.#ids.implementationType },\n    );\n  };\n\n  #makeSubscriptionConstructor = () =>\n    makePublicConstructor(\n      makeParams({\n        request: \"K\",\n        params: makeIndexed(this.interfaces.input, \"K\"),\n      }),\n      [\n        makeConst(\n          makeDeconstruction(this.#ids.pathParameter, this.#ids.restConst),\n          makeCall(this.#ids.substituteFn)(\n            f.createElementAccessExpression(\n              makeCall(this.#ids.parseRequestFn)(this.#ids.requestParameter),\n              literally(1),\n            ),\n            this.#ids.paramsArgument,\n          ),\n        ),\n        makeConst(\n          this.#ids.searchParamsConst,\n          this.#makeSearchParams(this.#ids.restConst),\n        ),\n        makeAssignment(\n          f.createPropertyAccessExpression(\n            f.createThis(),\n            this.#ids.sourceProp,\n          ),\n          makeNew(\"EventSource\", this.#makeFetchURL()),\n        ),\n      ],\n    );\n\n  #makeEventNarrow = (value: Typeable) =>\n    f.createTypeLiteralNode([\n      makeInterfaceProp(propOf<SSEShape>(\"event\"), value),\n    ]);\n\n  #makeOnMethod = () =>\n    makePublicMethod(\n      this.#ids.onMethod,\n      makeParams({\n        [this.#ids.eventParameter.text]: \"E\",\n        [this.#ids.handlerParameter.text]: makeFnType(\n          {\n            [this.#ids.dataParameter.text]: makeIndexed(\n              makeExtract(\"R\", makeOneLine(this.#makeEventNarrow(\"E\"))),\n              makeLiteralType(propOf<SSEShape>(\"data\")),\n            ),\n          },\n          makeMaybeAsync(ts.SyntaxKind.VoidKeyword),\n        ),\n      }),\n      [\n        f.createExpressionStatement(\n          makeCall(\n            f.createThis(),\n            this.#ids.sourceProp,\n            propOf<EventSource>(\"addEventListener\"),\n          )(\n            this.#ids.eventParameter,\n            makeArrowFn(\n              [this.#ids.msgParameter],\n              makeCall(this.#ids.handlerParameter)(\n                makeCall(\n                  JSON[Symbol.toStringTag],\n                  propOf<JSON>(\"parse\"),\n                )(\n                  f.createPropertyAccessExpression(\n                    f.createParenthesizedExpression(\n                      f.createAsExpression(\n                        this.#ids.msgParameter,\n                        ensureTypeNode(MessageEvent.name),\n                      ),\n                    ),\n                    propOf<SSEShape>(\"data\"),\n                  ),\n                ),\n              ),\n            ),\n          ),\n        ),\n        f.createReturnStatement(f.createThis()),\n      ],\n      {\n        typeParams: {\n          E: makeIndexed(\"R\", makeLiteralType(propOf<SSEShape>(\"event\"))),\n        },\n      },\n    );\n\n  /**\n   * @example export class Subscription<K extends Extract<___>, R extends Extract<___>> { ___ }\n   * @internal\n   * */\n  protected makeSubscriptionClass = (name: string) =>\n    makePublicClass(\n      name,\n      [\n        makePublicProperty(this.#ids.sourceProp, \"EventSource\"),\n        this.#makeSubscriptionConstructor(),\n        this.#makeOnMethod(),\n      ],\n      {\n        typeParams: {\n          K: makeExtract(\n            this.requestType.name,\n            f.createTemplateLiteralType(f.createTemplateHead(\"get \"), [\n              f.createTemplateLiteralTypeSpan(\n                ensureTypeNode(ts.SyntaxKind.StringKeyword),\n                f.createTemplateTail(\"\"),\n              ),\n            ]),\n          ),\n          R: makeExtract(\n            makeIndexed(this.interfaces.positive, \"K\"),\n            makeOneLine(this.#makeEventNarrow(ts.SyntaxKind.StringKeyword)),\n          ),\n        },\n      },\n    );\n\n  /** @internal */\n  protected makeUsageStatements = (\n    clientClassName: string,\n    subscriptionClassName: string,\n  ): ts.Node[] => [\n    makeConst(this.#ids.clientConst, makeNew(clientClassName)), // const client = new Client();\n    // client.provide(\"get /v1/user/retrieve\", { id: \"10\" });\n    makeCall(this.#ids.clientConst, this.#ids.provideMethod)(\n      literally(`${\"get\" satisfies ClientMethod} /v1/user/retrieve`),\n      f.createObjectLiteralExpression([\n        f.createPropertyAssignment(\"id\", literally(\"10\")),\n      ]),\n    ),\n    // new Subscription(\"get /v1/events/stream\", {}).on(\"time\", (time) => {});\n    makeCall(\n      makeNew(\n        subscriptionClassName,\n        literally(`${\"get\" satisfies ClientMethod} /v1/events/stream`),\n        f.createObjectLiteralExpression(),\n      ),\n      this.#ids.onMethod,\n    )(literally(\"time\"), makeArrowFn([\"time\"], f.createBlock([]))),\n  ];\n}\n","import type { EmptyObject, FlatObject } from \"./common-helpers\";\nimport { getBrand } from \"@express-zod-api/zod-plugin\";\nimport type { z } from \"zod\";\n\nexport type FirstPartyKind = z.core.$ZodTypeDef[\"type\"];\n\nexport interface NextHandlerInc<U> {\n  next: (schema: z.core.$ZodType) => U;\n}\n\ninterface PrevInc<U> {\n  prev: U;\n}\n\nexport type SchemaHandler<\n  U,\n  Context extends FlatObject = EmptyObject,\n  Variant extends \"regular\" | \"each\" | \"last\" = \"regular\",\n> = (\n  schema: any, // eslint-disable-line @typescript-eslint/no-explicit-any -- for assignment compatibility\n  ctx: Context &\n    (Variant extends \"regular\"\n      ? NextHandlerInc<U>\n      : Variant extends \"each\"\n        ? PrevInc<U>\n        : Context),\n) => U;\n\nexport type HandlingRules<\n  U,\n  Context extends FlatObject = EmptyObject,\n  K extends string | symbol = string | symbol,\n> = Partial<Record<K, SchemaHandler<U, Context>>>;\n\n/** @since 10.1.1 calling onEach _after_ handler and giving it the previously achieved result */\nexport const walkSchema = <\n  U extends object,\n  Context extends FlatObject = EmptyObject,\n>(\n  schema: z.core.$ZodType,\n  {\n    onEach,\n    rules,\n    onMissing,\n    ctx = {} as Context,\n  }: {\n    ctx?: Context;\n    onEach?: SchemaHandler<U, Context, \"each\">;\n    rules: HandlingRules<U, Context>;\n    onMissing: SchemaHandler<U, Context, \"last\">;\n  },\n): U => {\n  const brand = getBrand(schema);\n  const handler =\n    brand && brand in rules\n      ? rules[brand as keyof typeof rules]\n      : rules[schema._zod.def.type];\n  const next = (subject: z.core.$ZodType) =>\n    walkSchema(subject, { ctx, onEach, rules, onMissing });\n  const result = handler\n    ? handler(schema, { ...ctx, next })\n    : onMissing(schema, ctx);\n  const overrides = onEach && onEach(schema, { prev: result, ...ctx });\n  return overrides ? { ...result, ...overrides } : result;\n};\n","import * as R from \"ramda\";\nimport ts from \"typescript\";\nimport { globalRegistry, z } from \"zod\";\nimport { ezBufferBrand } from \"./buffer-schema\";\nimport { getTransformedType, isSchema } from \"./common-helpers\";\nimport { ezDateInBrand } from \"./date-in-schema\";\nimport { ezDateOutBrand } from \"./date-out-schema\";\nimport { hasCycle } from \"./deep-checks\";\nimport { ProprietaryBrand } from \"./proprietary-schemas\";\nimport { ezRawBrand, RawSchema } from \"./raw-schema\";\nimport { FirstPartyKind, HandlingRules, walkSchema } from \"./schema-walker\";\nimport {\n  ensureTypeNode,\n  makeInterfaceProp,\n  makeLiteralType,\n  makeUnion,\n} from \"./typescript-api\";\nimport { Producer, ZTSContext } from \"./zts-helpers\";\n\nconst { factory: f } = ts;\n\nconst samples = {\n  [ts.SyntaxKind.AnyKeyword]: \"\",\n  [ts.SyntaxKind.BigIntKeyword]: BigInt(0),\n  [ts.SyntaxKind.BooleanKeyword]: false,\n  [ts.SyntaxKind.NumberKeyword]: 0,\n  [ts.SyntaxKind.ObjectKeyword]: {},\n  [ts.SyntaxKind.StringKeyword]: \"\",\n  [ts.SyntaxKind.UndefinedKeyword]: undefined,\n} satisfies Partial<Record<ts.KeywordTypeSyntaxKind, unknown>>;\n\nconst nodePath = {\n  name: R.path([\n    \"name\" satisfies keyof ts.TypeElement,\n    \"text\" satisfies keyof Exclude<\n      NonNullable<ts.TypeElement[\"name\"]>,\n      ts.ComputedPropertyName\n    >,\n  ]),\n  type: R.path([\"type\" satisfies keyof ts.PropertySignature]),\n  optional: R.path([\"questionToken\" satisfies keyof ts.TypeElement]),\n};\n\nconst onLiteral: Producer = ({ _zod: { def } }: z.core.$ZodLiteral) => {\n  const values = def.values.map((entry) =>\n    entry === undefined\n      ? ensureTypeNode(ts.SyntaxKind.UndefinedKeyword)\n      : makeLiteralType(entry),\n  );\n  return values.length === 1 ? values[0] : makeUnion(values);\n};\n\nconst onTemplateLiteral: Producer = (\n  { _zod: { def } }: z.core.$ZodTemplateLiteral,\n  { next },\n) => {\n  const parts = [...def.parts];\n  const shiftText = () => {\n    let text = \"\";\n    while (parts.length) {\n      const part = parts.shift();\n      if (isSchema(part)) {\n        parts.unshift(part);\n        break;\n      }\n      text += part ?? \"\"; // Handle potential undefined values\n    }\n    return text;\n  };\n  const head = f.createTemplateHead(shiftText());\n  const spans: ts.TemplateLiteralTypeSpan[] = [];\n  while (parts.length) {\n    const schema = next(parts.shift() as z.core.$ZodType);\n    const text = shiftText();\n    const textWrapper = parts.length\n      ? f.createTemplateMiddle\n      : f.createTemplateTail;\n    spans.push(f.createTemplateLiteralTypeSpan(schema, textWrapper(text)));\n  }\n  if (!spans.length) return makeLiteralType(head.text);\n  return f.createTemplateLiteralType(head, spans);\n};\n\nconst onObject: Producer = (\n  obj: z.core.$ZodObject,\n  { isResponse, next, makeAlias },\n) => {\n  const produce = () => {\n    const members = Object.entries(obj._zod.def.shape).map<ts.TypeElement>(\n      ([key, value]) => {\n        const { description: comment, deprecated: isDeprecated } =\n          globalRegistry.get(value) || {};\n        return makeInterfaceProp(key, next(value), {\n          comment,\n          isDeprecated,\n          isOptional:\n            (isResponse ? value._zod.optout : value._zod.optin) === \"optional\",\n        });\n      },\n    );\n    return f.createTypeLiteralNode(members);\n  };\n  return hasCycle(obj, { io: isResponse ? \"output\" : \"input\" })\n    ? makeAlias(obj, produce)\n    : produce();\n};\n\nconst onArray: Producer = ({ _zod: { def } }: z.core.$ZodArray, { next }) =>\n  f.createArrayTypeNode(next(def.element));\n\nconst onEnum: Producer = ({ _zod: { def } }: z.core.$ZodEnum) =>\n  makeUnion(Object.values(def.entries).map(makeLiteralType));\n\nconst onSomeUnion: Producer = (\n  { _zod: { def } }: z.core.$ZodUnion | z.core.$ZodDiscriminatedUnion,\n  { next },\n) => makeUnion(def.options.map(next));\n\nconst makeSample = (produced: ts.TypeNode) =>\n  samples?.[produced.kind as keyof typeof samples];\n\nconst onNullable: Producer = (\n  { _zod: { def } }: z.core.$ZodNullable,\n  { next },\n) => makeUnion([next(def.innerType), makeLiteralType(null)]);\n\nconst onTuple: Producer = ({ _zod: { def } }: z.core.$ZodTuple, { next }) =>\n  f.createTupleTypeNode(\n    def.items\n      .map(next)\n      .concat(def.rest === null ? [] : f.createRestTypeNode(next(def.rest))),\n  );\n\nconst onRecord: Producer = ({ _zod: { def } }: z.core.$ZodRecord, { next }) =>\n  ensureTypeNode(\"Record\", [def.keyType, def.valueType].map(next));\n\nconst intersect = R.tryCatch(\n  (nodes: ts.TypeNode[]) => {\n    if (!nodes.every(ts.isTypeLiteralNode)) throw new Error(\"Not objects\");\n    const members = R.chain(R.prop(\"members\"), nodes);\n    const uniqs = R.uniqWith((...props) => {\n      if (!R.eqBy(nodePath.name, ...props)) return false;\n      if (R.both(R.eqBy(nodePath.type), R.eqBy(nodePath.optional))(...props))\n        return true;\n      throw new Error(\"Has conflicting prop\");\n    }, members);\n    return f.createTypeLiteralNode(uniqs);\n  },\n  (_err, nodes) => f.createIntersectionTypeNode(nodes),\n);\n\nconst onIntersection: Producer = (\n  { _zod: { def } }: z.core.$ZodIntersection,\n  { next },\n) => intersect([def.left, def.right].map(next));\n\nconst onPrimitive =\n  (syntaxKind: ts.KeywordTypeSyntaxKind): Producer =>\n  () =>\n    ensureTypeNode(syntaxKind);\n\nconst onWrapped: Producer = (\n  {\n    _zod: { def },\n  }:\n    | z.core.$ZodReadonly\n    | z.core.$ZodCatch\n    | z.core.$ZodDefault\n    | z.core.$ZodOptional\n    | z.core.$ZodNonOptional,\n  { next },\n) => next(def.innerType);\n\nconst getFallback = (isResponse: boolean) =>\n  ensureTypeNode(\n    isResponse ? ts.SyntaxKind.UnknownKeyword : ts.SyntaxKind.AnyKeyword,\n  );\n\nconst onPipeline: Producer = (\n  { _zod: { def } }: z.core.$ZodPipe,\n  { next, isResponse },\n) => {\n  const target = def[isResponse ? \"out\" : \"in\"];\n  const opposite = def[isResponse ? \"in\" : \"out\"];\n  if (!isSchema<z.core.$ZodTransform>(target, \"transform\")) return next(target);\n  const opposingType = next(opposite);\n  const targetType = getTransformedType(target, makeSample(opposingType));\n  const resolutions: Partial<\n    Record<NonNullable<typeof targetType>, ts.KeywordTypeSyntaxKind>\n  > = {\n    number: ts.SyntaxKind.NumberKeyword,\n    bigint: ts.SyntaxKind.BigIntKeyword,\n    boolean: ts.SyntaxKind.BooleanKeyword,\n    string: ts.SyntaxKind.StringKeyword,\n    undefined: ts.SyntaxKind.UndefinedKeyword,\n    object: ts.SyntaxKind.ObjectKeyword,\n  };\n  return ensureTypeNode(\n    (targetType && resolutions[targetType]) || getFallback(isResponse),\n  );\n};\n\nconst onNull: Producer = () => makeLiteralType(null);\n\nconst onLazy: Producer = (\n  { _zod: { def } }: z.core.$ZodLazy,\n  { makeAlias, next },\n) => makeAlias(def.getter, () => next(def.getter()));\n\nconst onBuffer: Producer = () => ensureTypeNode(\"Buffer\");\n\nconst onRaw: Producer = (schema: RawSchema, { next }) =>\n  next(schema._zod.def.shape.raw);\n\nconst producers: HandlingRules<\n  ts.TypeNode,\n  ZTSContext,\n  FirstPartyKind | ProprietaryBrand\n> = {\n  string: onPrimitive(ts.SyntaxKind.StringKeyword),\n  number: onPrimitive(ts.SyntaxKind.NumberKeyword),\n  bigint: onPrimitive(ts.SyntaxKind.BigIntKeyword),\n  boolean: onPrimitive(ts.SyntaxKind.BooleanKeyword),\n  any: onPrimitive(ts.SyntaxKind.AnyKeyword),\n  undefined: onPrimitive(ts.SyntaxKind.UndefinedKeyword),\n  [ezDateInBrand]: onPrimitive(ts.SyntaxKind.StringKeyword),\n  [ezDateOutBrand]: onPrimitive(ts.SyntaxKind.StringKeyword),\n  never: onPrimitive(ts.SyntaxKind.NeverKeyword),\n  void: onPrimitive(ts.SyntaxKind.UndefinedKeyword),\n  unknown: onPrimitive(ts.SyntaxKind.UnknownKeyword),\n  null: onNull,\n  array: onArray,\n  tuple: onTuple,\n  record: onRecord,\n  object: onObject,\n  literal: onLiteral,\n  template_literal: onTemplateLiteral,\n  intersection: onIntersection,\n  union: onSomeUnion,\n  default: onWrapped,\n  enum: onEnum,\n  optional: onWrapped,\n  nonoptional: onWrapped,\n  nullable: onNullable,\n  catch: onWrapped,\n  pipe: onPipeline,\n  lazy: onLazy,\n  readonly: onWrapped,\n  [ezBufferBrand]: onBuffer,\n  [ezRawBrand]: onRaw,\n};\n\nexport const zodToTs = (\n  schema: z.ZodType,\n  {\n    brandHandling,\n    ctx,\n  }: {\n    brandHandling?: HandlingRules<ts.TypeNode, ZTSContext>;\n    ctx: ZTSContext;\n  },\n) =>\n  walkSchema(schema, {\n    rules: { ...brandHandling, ...producers },\n    onMissing: ({}, { isResponse }) => getFallback(isResponse),\n    ctx,\n  });\n","import * as R from \"ramda\";\nimport ts from \"typescript\";\nimport { z } from \"zod\";\nimport { ResponseVariant, responseVariants } from \"./api-response\";\nimport { IntegrationBase } from \"./integration-base\";\nimport {\n  f,\n  makeInterfaceProp,\n  makeInterface,\n  makeType,\n  printNode,\n  ensureTypeNode,\n  makeIndexed,\n  makeLiteralType,\n  makeUnion,\n} from \"./typescript-api\";\nimport { shouldHaveContent, makeCleanId } from \"./common-helpers\";\nimport { loadPeer } from \"./peer-helpers\";\nimport { Routing } from \"./routing\";\nimport { OnEndpoint, walkRouting, withHead } from \"./routing-walker\";\nimport { HandlingRules } from \"./schema-walker\";\nimport { zodToTs } from \"./zts\";\nimport { ZTSContext } from \"./zts-helpers\";\nimport type Prettier from \"prettier\";\nimport { ClientMethod } from \"./method\";\n\ninterface IntegrationParams {\n  routing: Routing;\n  /**\n   * @desc What should be generated\n   * @example \"types\" — types of your endpoint requests and responses (for a DIY solution)\n   * @example \"client\" — an entity for performing typed requests and receiving typed responses\n   * @default \"client\"\n   * */\n  variant?: \"types\" | \"client\";\n  /** @default Client */\n  clientClassName?: string;\n  /** @default Subscription */\n  subscriptionClassName?: string;\n  /**\n   * @desc The API URL to use in the generated code\n   * @default https://example.com\n   * */\n  serverUrl?: string;\n  /**\n   * @desc The schema to use for responses without body such as 204\n   * @default z.undefined()\n   * */\n  noContent?: z.ZodType;\n  /**\n   * @desc Depict the HEAD method for each Endpoint supporting the GET method (feature of Express)\n   * @default true\n   * */\n  hasHeadMethod?: boolean;\n  /**\n   * @desc Handling rules for your own branded schemas.\n   * @desc Keys: brands (recommended to use unique symbols).\n   * @desc Values: functions having schema as first argument that you should assign type to, second one is a context.\n   * @example { MyBrand: ( schema: typeof myBrandSchema, { next } ) => createKeywordTypeNode(SyntaxKind.AnyKeyword)\n   */\n  brandHandling?: HandlingRules<ts.TypeNode, ZTSContext>;\n}\n\ninterface FormattedPrintingOptions {\n  /** @desc Typescript printer options */\n  printerOptions?: ts.PrinterOptions;\n  /**\n   * @desc Typescript code formatter\n   * @default prettier.format\n   * */\n  format?: (program: string) => Promise<string>;\n}\n\nexport class Integration extends IntegrationBase {\n  readonly #program: ts.Node[] = [this.someOfType];\n  readonly #aliases = new Map<object, ts.TypeAliasDeclaration>();\n  #usage: Array<ts.Node | string> = [];\n\n  #makeAlias(key: object, produce: () => ts.TypeNode): ts.TypeNode {\n    let name = this.#aliases.get(key)?.name?.text;\n    if (!name) {\n      name = `Type${this.#aliases.size + 1}`;\n      const temp = makeLiteralType(null);\n      this.#aliases.set(key, makeType(name, temp));\n      this.#aliases.set(key, makeType(name, produce()));\n    }\n    return ensureTypeNode(name);\n  }\n\n  public constructor({\n    routing,\n    brandHandling,\n    variant = \"client\",\n    clientClassName = \"Client\",\n    subscriptionClassName = \"Subscription\",\n    serverUrl = \"https://example.com\",\n    noContent = z.undefined(),\n    hasHeadMethod = true,\n  }: IntegrationParams) {\n    super(serverUrl);\n    const commons = { makeAlias: this.#makeAlias.bind(this) };\n    const ctxIn = { brandHandling, ctx: { ...commons, isResponse: false } };\n    const ctxOut = { brandHandling, ctx: { ...commons, isResponse: true } };\n    const onEndpoint: OnEndpoint<ClientMethod> = (method, path, endpoint) => {\n      const entitle = makeCleanId.bind(null, method, path); // clean id with method+path prefix\n      const { isDeprecated, inputSchema, tags } = endpoint;\n      const request = `${method} ${path}`;\n      const input = makeType(entitle(\"input\"), zodToTs(inputSchema, ctxIn), {\n        comment: request,\n      });\n      this.#program.push(input);\n      const dictionaries = responseVariants.reduce(\n        (agg, responseVariant) => {\n          const responses = endpoint.getResponses(responseVariant);\n          const props = R.chain(([idx, { schema, mimeTypes, statusCodes }]) => {\n            const hasContent = shouldHaveContent(method, mimeTypes);\n            const variantType = makeType(\n              entitle(responseVariant, \"variant\", `${idx + 1}`),\n              zodToTs(hasContent ? schema : noContent, ctxOut),\n              { comment: request },\n            );\n            this.#program.push(variantType);\n            return statusCodes.map((code) =>\n              makeInterfaceProp(code, variantType.name),\n            );\n          }, Array.from(responses.entries()));\n          const dict = makeInterface(\n            entitle(responseVariant, \"response\", \"variants\"),\n            props,\n            { comment: request },\n          );\n          this.#program.push(dict);\n          return Object.assign(agg, { [responseVariant]: dict });\n        },\n        {} as Record<ResponseVariant, ts.TypeAliasDeclaration>,\n      );\n      this.paths.add(path);\n      const literalIdx = makeLiteralType(request);\n      const store = {\n        input: ensureTypeNode(input.name),\n        positive: this.someOf(dictionaries.positive),\n        negative: this.someOf(dictionaries.negative),\n        response: makeUnion([\n          makeIndexed(this.interfaces.positive, literalIdx),\n          makeIndexed(this.interfaces.negative, literalIdx),\n        ]),\n        encoded: f.createIntersectionTypeNode([\n          ensureTypeNode(dictionaries.positive.name),\n          ensureTypeNode(dictionaries.negative.name),\n        ]),\n      };\n      this.registry.set(request, { isDeprecated, store });\n      this.tags.set(request, tags);\n    };\n    walkRouting({\n      routing,\n      onEndpoint: hasHeadMethod ? withHead(onEndpoint) : onEndpoint,\n    });\n    this.#program.unshift(...this.#aliases.values());\n    this.#program.push(\n      this.makePathType(),\n      this.methodType,\n      ...this.makePublicInterfaces(),\n      this.requestType,\n    );\n\n    if (variant === \"types\") return;\n\n    this.#program.push(\n      this.makeEndpointTags(),\n      this.makeParseRequestFn(),\n      this.makeSubstituteFn(),\n      this.makeImplementationType(),\n      this.makeDefaultImplementation(),\n      this.makeClientClass(clientClassName),\n      this.makeSubscriptionClass(subscriptionClassName),\n    );\n\n    this.#usage.push(\n      ...this.makeUsageStatements(clientClassName, subscriptionClassName),\n    );\n  }\n\n  #printUsage(printerOptions?: ts.PrinterOptions) {\n    return this.#usage.length\n      ? this.#usage\n          .map((entry) =>\n            typeof entry === \"string\"\n              ? entry\n              : printNode(entry, printerOptions),\n          )\n          .join(\"\\n\")\n      : undefined;\n  }\n\n  public print(printerOptions?: ts.PrinterOptions) {\n    const usageExampleText = this.#printUsage(printerOptions);\n    const commentNode =\n      usageExampleText &&\n      ts.addSyntheticLeadingComment(\n        ts.addSyntheticLeadingComment(\n          f.createEmptyStatement(),\n          ts.SyntaxKind.SingleLineCommentTrivia,\n          \" Usage example:\",\n        ),\n        ts.SyntaxKind.MultiLineCommentTrivia,\n        `\\n${usageExampleText}`,\n      );\n    return this.#program\n      .concat(commentNode || [])\n      .map((node, index) =>\n        printNode(\n          node,\n          index < this.#program.length\n            ? printerOptions\n            : { ...printerOptions, omitTrailingSemicolon: true },\n        ),\n      )\n      .join(\"\\n\\n\");\n  }\n\n  public async printFormatted({\n    printerOptions,\n    format: userDefined,\n  }: FormattedPrintingOptions = {}) {\n    let format = userDefined;\n    if (!format) {\n      try {\n        const prettierFormat = (await loadPeer<typeof Prettier>(\"prettier\"))\n          .format;\n        format = (text) => prettierFormat(text, { filepath: \"client.ts\" });\n      } catch {}\n    }\n\n    const usageExample = this.#printUsage(printerOptions);\n    this.#usage =\n      usageExample && format ? [await format(usageExample)] : this.#usage;\n\n    const output = this.print(printerOptions);\n    return format ? format(output) : output;\n  }\n}\n","import { Response } from \"express\";\nimport { z } from \"zod\";\nimport { FlatObject } from \"./common-helpers\";\nimport { contentTypes } from \"./content-type\";\nimport { EndpointsFactory } from \"./endpoints-factory\";\nimport { Middleware } from \"./middleware\";\nimport { ResultHandler } from \"./result-handler\";\nimport {\n  ensureHttpError,\n  getPublicErrorMessage,\n  logServerError,\n} from \"./result-helpers\";\n\ntype EventsMap = Record<string, z.ZodType>;\n\nexport interface Emitter<E extends EventsMap> extends FlatObject {\n  /** @desc Returns true when the connection was closed or terminated */\n  isClosed: () => boolean;\n  /** @desc Sends an event to the stream according to the declared schema */\n  emit: <K extends keyof E>(event: K, data: z.input<E[K]>) => void;\n}\n\nexport const makeEventSchema = (event: string, data: z.ZodType) =>\n  z.object({\n    data,\n    event: z.literal(event),\n    id: z.string().optional(),\n    retry: z.int().positive().optional(),\n  });\n\nexport const formatEvent = <E extends EventsMap>(\n  events: E,\n  event: keyof E,\n  data: unknown,\n) =>\n  makeEventSchema(String(event), events[event])\n    .transform((props) =>\n      [\n        `event: ${props.event}`,\n        `data: ${JSON.stringify(props.data)}`,\n        \"\",\n        \"\", // empty line: events separator\n      ].join(\"\\n\"),\n    )\n    .parse({ event, data });\n\nconst headersTimeout = 1e4; // 10s to respond with a status code other than 200\nexport const ensureStream = (response: Response) =>\n  response.headersSent ||\n  response.writeHead(200, {\n    connection: \"keep-alive\",\n    \"content-type\": contentTypes.sse,\n    \"cache-control\": \"no-cache\",\n  });\n\nexport const makeMiddleware = <E extends EventsMap>(events: E) =>\n  new Middleware({\n    handler: async ({ response }): Promise<Emitter<E>> =>\n      setTimeout(() => ensureStream(response), headersTimeout) && {\n        isClosed: () => response.writableEnded || response.closed,\n        emit: (event, data) => {\n          ensureStream(response);\n          response.write(formatEvent(events, event, data), \"utf-8\");\n          /**\n           * Issue 2347: flush is the method of compression, it must be called only when compression is enabled\n           * @link https://github.com/RobinTail/express-zod-api/issues/2347\n           * */\n          response.flush?.();\n        },\n      },\n  });\n\nexport const makeResultHandler = <E extends EventsMap>(events: E) =>\n  new ResultHandler({\n    positive: () => {\n      const [first, ...rest] = Object.entries(events).map(([event, schema]) =>\n        makeEventSchema(event, schema),\n      );\n      return {\n        mimeType: contentTypes.sse,\n        schema: rest.length\n          ? z.discriminatedUnion(\"event\", [first, ...rest])\n          : first,\n      };\n    },\n    negative: { mimeType: \"text/plain\", schema: z.string() },\n    handler: async ({ response, error, logger, request, input }) => {\n      if (error) {\n        const httpError = ensureHttpError(error);\n        logServerError(httpError, logger, request, input);\n        if (!response.headersSent) {\n          response\n            .status(httpError.statusCode)\n            .type(\"text/plain\")\n            .write(getPublicErrorMessage(httpError), \"utf-8\");\n        }\n      }\n      response.end();\n    },\n  });\n\nexport class EventStreamFactory<E extends EventsMap> extends EndpointsFactory<\n  undefined,\n  Emitter<E>\n> {\n  constructor(events: E) {\n    super(makeResultHandler(events));\n    this.middlewares = [makeMiddleware(events)];\n  }\n}\n","import { buffer, type ezBufferBrand } from \"./buffer-schema\";\nimport { dateIn, type ezDateInBrand } from \"./date-in-schema\";\nimport { dateOut, type ezDateOutBrand } from \"./date-out-schema\";\nimport { form, type ezFormBrand } from \"./form-schema\";\nimport { raw, type ezRawBrand } from \"./raw-schema\";\nimport { upload, type ezUploadBrand } from \"./upload-schema\";\n\nexport const ez: {\n  dateIn: typeof dateIn;\n  dateOut: typeof dateOut;\n  form: typeof form;\n  upload: typeof upload;\n  raw: typeof raw;\n  buffer: typeof buffer;\n} = { dateIn, dateOut, form, upload, raw, buffer };\n\nexport type ProprietaryBrand =\n  | typeof ezFormBrand\n  | typeof ezDateInBrand\n  | typeof ezDateOutBrand\n  | typeof ezUploadBrand\n  | typeof ezRawBrand\n  | typeof ezBufferBrand;\n"],"names":["z","R","getBrand","isHttpError","globalRegistry","_a","blue","green","hex","red","cyanBright","inspect","performance","setInterval","self","italic","whiteBright","gray","stringify","floatNaN","floatExp","float","intIdentify","intResolve","intStringify","intOct","int","intHex","schema","schema$2","r.stringify","samples","makeSample","isSchemaObject","isReferenceObject","OpenApiBuilder","createRequest","createResponse","f"],"mappings":"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","x_google_ignoreList":[35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83]}