{"version":3,"sources":["../../../src/validations/index.ts","../../../src/validations/valleyed.ts","../../../src/instance/index.ts","../../../src/errors/equippedError.ts","../../../src/errors/requestError.ts","../../../src/server/types.ts","../../../src/errors/types/validationError.ts","../../../src/instance/hooks.ts","../../../src/instance/settings.ts"],"sourcesContent":["export * from 'valleyed'\nexport * as ve from './valleyed'\nimport { type Pipe, PipeError, type PipeOutput, v } from 'valleyed'\n\nimport { ValidationError } from '../errors'\n\nexport function pipeErrorToValidationError(error: PipeError) {\n\tconst errorsObject = error.messages.reduce<Record<string, { field: string; messages: string[] }>>((acc, { path = '', message }) => {\n\t\tif (acc[path]) acc[path].messages.push(message)\n\t\telse acc[path] = { field: path, messages: [message] }\n\t\treturn acc\n\t}, {})\n\n\treturn new ValidationError(Object.values(errorsObject))\n}\n\nexport function validate<T extends Pipe<unknown, unknown>>(pipe: T, value: unknown): PipeOutput<T> {\n\tconst validity = v.validate(pipe, value)\n\tif (validity.valid) return validity.value\n\tthrow pipeErrorToValidationError(validity.error)\n}\n","import { AsyncLocalStorage } from 'node:async_hooks'\n\nimport { type Pipe, PipeError, type PipeInput, type PipeOutput, v } from 'valleyed'\n\nimport { Instance } from '../instance'\nimport type { IncomingFile, Request, Response, RouteDef, RouteDefToReqRes } from '../server'\n\nconst filePipe = (err?: string) =>\n\tv.array(\n\t\tv.file<IncomingFile>(err).pipe((input) => {\n\t\t\tconst err = `is larger than allowed limit of ${Instance.get().settings.utils.maxFileUploadSizeInMb}mb`\n\t\t\tconst valid = input ? !input.isTruncated : true\n\t\t\tif (valid) return input\n\t\t\tthrow PipeError.root(err, input)\n\t\t}),\n\t)\n\nexport const incomingFile = (err?: string) =>\n\tv.define<unknown, IncomingFile>(\n\t\tv.compile(\n\t\t\tfilePipe(err)\n\t\t\t\t.pipe(v.min(1, 'no file provided'))\n\t\t\t\t.pipe((files) => files[0]),\n\t\t),\n\t\t{ schema: () => ({ type: 'string', format: 'binary' }) },\n\t)\n\nexport const incomingFiles = (err?: string) =>\n\tv.define<unknown, IncomingFile[]>(v.compile(filePipe(err)), {\n\t\tschema: () => ({ type: 'string', format: 'binary' }),\n\t})\n\nexport const requestLocalStorage = new AsyncLocalStorage<Request<RouteDefToReqRes<RouteDef>>>()\nexport const responseLocalStorage = new AsyncLocalStorage<Response<RouteDefToReqRes<RouteDef>>>()\n\nexport const withRequest = <T extends Pipe<any, any>>(fn: (req: Request<RouteDefToReqRes<RouteDef>>) => T) =>\n\tv.define<PipeInput<T>, PipeOutput<T>>((input) => {\n\t\tconst req = requestLocalStorage.getStore()\n\t\tif (!req) throw new Error('Request not found in context')\n\t\tconst validated = v.validate(fn(req), input)\n\t\treturn validated.valid ? validated.value : validated.error\n\t})\n\nexport const withResponse = <T extends Pipe<any, any>>(fn: (req: Response<RouteDefToReqRes<RouteDef>>) => T) =>\n\tv.define<PipeInput<T>, PipeOutput<T>>((input) => {\n\t\tconst res = responseLocalStorage.getStore()\n\t\tif (!res) throw new Error('Response not found in context')\n\t\tconst validated = v.validate(fn(res), input)\n\t\treturn validated.valid ? validated.value : validated.error\n\t})\n","import pino, { type Logger } from 'pino'\nimport { ulid } from 'ulid'\nimport { type Pipe, v } from 'valleyed'\n\nimport { EquippedError } from '../errors'\nimport { type ClassRef, type HookCb, type HookEvent, type HookOptions, type HookRecord, registerHook, runHooks } from './hooks'\nimport { instanceSettingsPipe, type Settings, type SettingsInput } from './settings'\n\nexport type { ClassRef, HookCb, HookEvent, HookOptions }\n\nexport class Instance {\n\tstatic #id: string | undefined\n\tstatic #instance: Instance | undefined\n\tstatic #hooks: Partial<Record<HookEvent, HookRecord[]>> = {}\n\treadonly settings: Readonly<Settings>\n\treadonly log: Logger<never>\n\n\tprivate constructor(settings: Settings) {\n\t\tInstance.#instance = this\n\t\tthis.settings = Object.freeze(settings)\n\t\tthis.log = pino<never>({\n\t\t\tlevel: this.settings.log.level,\n\t\t\tserializers: {\n\t\t\t\terr: pino.stdSerializers.err,\n\t\t\t\terror: pino.stdSerializers.err,\n\t\t\t\treq: pino.stdSerializers.req,\n\t\t\t\tres: pino.stdSerializers.res,\n\t\t\t},\n\t\t\tmixin: () => ({\n\t\t\t\tinstanceId: Instance.#id,\n\t\t\t}),\n\t\t})\n\t\tInstance.#registerOnExitHandler()\n\t}\n\n\talias(id: string) {\n\t\tif (Instance.#id !== undefined) return Instance.crash(new EquippedError('Instance already has an alias', {}))\n\t\tInstance.#id = id\n\t}\n\n\tget id() {\n\t\tif (Instance.#id === undefined) return Instance.crash(new EquippedError('Instance doesnt have an alias yet', {}))\n\t\treturn Instance.#id\n\t}\n\n\tgetScopedName(name: string, key = '.') {\n\t\treturn [this.settings.app.name, name].join(key)\n\t}\n\n\tasync start() {\n\t\ttry {\n\t\t\tawait runHooks(Instance.#hooks['setup'] ?? [])\n\t\t\tawait runHooks(Instance.#hooks['start'] ?? [])\n\t\t} catch (error) {\n\t\t\tInstance.crash(new EquippedError(`Error starting instance`, {}, error))\n\t\t}\n\t}\n\n\tstatic envs<E extends object>(envsPipe: Pipe<unknown, E>): E {\n\t\tconst envValidity = v.validate(envsPipe, process.env)\n\t\tif (!envValidity.valid) {\n\t\t\tInstance.crash(\n\t\t\t\tnew EquippedError(`Environment variables are not valid\\n${envValidity.error.toString()}`, {\n\t\t\t\t\tmessages: envValidity.error.messages,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t\treturn envValidity.value\n\t}\n\n\tstatic create(settings: SettingsInput) {\n\t\tif (Instance.#instance) return Instance.crash(new EquippedError('Instance has been initialized already', {}))\n\t\tconst settingsValidity = v.validate(instanceSettingsPipe(), settings)\n\t\tif (!settingsValidity.valid) {\n\t\t\tInstance.crash(\n\t\t\t\tnew EquippedError(`Settings are not valid\\n${settingsValidity.error.toString()}`, {\n\t\t\t\t\tmessages: settingsValidity.error.messages,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t\treturn new Instance(settingsValidity.value)\n\t}\n\n\tstatic get() {\n\t\tif (!Instance.#instance)\n\t\t\treturn Instance.crash(\n\t\t\t\tnew EquippedError('Has not been initialized. Make sure an instance has been created before you get an instance', {}),\n\t\t\t)\n\t\treturn Instance.#instance\n\t}\n\n\tstatic maybeGet() {\n\t\treturn Instance.#instance\n\t}\n\n\tstatic on(event: HookEvent, cb: HookCb, options?: HookOptions) {\n\t\tInstance.#hooks[event] ??= []\n\t\tconst record: HookRecord = { cb, class: options?.class, after: options?.after ?? [] }\n\t\tregisterHook(Instance.#hooks[event], record)\n\t}\n\n\tstatic #registerOnExitHandler() {\n\t\tconst signals = {\n\t\t\tSIGHUP: 1,\n\t\t\tSIGINT: 2,\n\t\t\tSIGTERM: 15,\n\t\t}\n\n\t\tObject.entries(signals).forEach(([signal, code]) => {\n\t\t\tprocess.on(signal, async () => {\n\t\t\t\tawait runHooks(Instance.#hooks['close'] ?? [], () => {}, true)\n\t\t\t\tprocess.exit(128 + code)\n\t\t\t})\n\t\t})\n\t}\n\n\tstatic resolveBeforeCrash<T>(cb: () => Promise<T>) {\n\t\tconst value = cb()\n\t\tInstance.on('close', async () => await value)\n\t\treturn value\n\t}\n\n\tstatic crash(error: EquippedError): never {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error(error)\n\t\tprocess.exit(1)\n\t}\n\n\tstatic createId(opts?: { prefix?: string; time?: Date }) {\n\t\treturn `${opts?.prefix ?? ''}${ulid(opts?.time?.getTime())}`\n\t}\n}\n","export class EquippedError extends Error {\n\tconstructor(\n\t\tpublic readonly message: string,\n\t\tpublic readonly context: Record<string, unknown>,\n\t\tpublic readonly cause?: unknown,\n\t) {\n\t\tsuper(message, { cause })\n\t}\n}\n","import type { StatusCodesEnum } from '../server'\nimport { EquippedError } from './equippedError'\n\nexport abstract class RequestError extends EquippedError {\n\tabstract readonly statusCode: StatusCodesEnum\n\n\tprotected constructor(\n\t\tpublic readonly message: string,\n\t\tpublic readonly serializedErrors: { message: string; field?: string }[],\n\t\tcause?: unknown,\n\t) {\n\t\tsuper(message, { serializedErrors }, cause)\n\t}\n}\n","import type { IsInTypeList, Pipe, PipeInput, PipeOutput, Prettify } from 'valleyed'\n\nimport type { RequestError } from '../errors'\nimport type { Enum } from '../types'\nimport type { Request, Response } from './requests'\n\nexport const Methods = {\n\thead: 'head',\n\tget: 'get',\n\tpost: 'post',\n\tput: 'put',\n\tpatch: 'patch',\n\tdelete: 'delete',\n\toptions: 'options',\n} as const\n\nexport const StatusCodes = {\n\tOk: 200,\n\tFound: 302,\n\tBadRequest: 400,\n\tNotAuthenticated: 401,\n\tNotAuthorized: 403,\n\tNotFound: 404,\n\tValidationError: 422,\n\tPreconditionRequired: 428,\n\tTooManyRequests: 429,\n\tTokenExpired: 461,\n} as const\n\nexport type MethodsEnum = Enum<typeof Methods>\nexport type StatusCodesEnum = Enum<typeof StatusCodes>\n\nexport type DefaultHeaders = Record<string, ArrayOrValue<string>>\nexport type DefaultCookies = Record<string, string | undefined>\n\ntype ArrayOrValue<T> = T | T[] | undefined\n\nexport type IncomingFile = {\n\tname: string\n\ttype: string\n\tsize: number\n\tisTruncated: boolean\n\tdata: Buffer\n\tduration: number\n}\n\nexport type RouteDef = {\n\tparams?: Pipe<Record<string, ArrayOrValue<string>>, Record<string, ArrayOrValue<string>>>\n\tquery?: Pipe<Record<string, ArrayOrValue<unknown>>, Record<string, ArrayOrValue<unknown>>>\n\theaders?: Pipe<DefaultHeaders, DefaultHeaders>\n\tcookies?: Pipe<DefaultCookies, DefaultCookies>\n\tbody?: Pipe<Record<string, unknown>, Record<string, unknown>>\n\tresponse?: Pipe<unknown, unknown>\n\tresponseHeaders?: Pipe<DefaultHeaders, DefaultHeaders>\n\tresponseCookies?: Pipe<DefaultCookies, DefaultCookies>\n\tdefaultStatusCode?: StatusCodesEnum\n\tdefaultContentType?: string\n}\n\ntype RouteGroup = { name: string; description?: string }\ntype HandlerSetup<T extends RouteDef> = (route: Route<T>) => void\n\nexport type RouteConfig<T extends RouteDef> = {\n\tmiddlewares?: ReturnType<typeof makeMiddleware<RouteDef>>[]\n\tresponseMiddlewares?: ReturnType<typeof makeResponseMiddleware<RouteDef>>[]\n\tonError?: ReturnType<typeof makeErrorMiddleware<RouteDef>>\n\tgroups?: (RouteGroup | RouteGroup['name'])[]\n\ttitle?: string\n\tdescriptions?: string[]\n\tsecurity?: Record<string, string[]>[]\n\tschema?: T\n\thide?: boolean\n}\n\nexport type RouterConfig<T extends RouteDef> = RouteConfig<T> & { path: string }\nexport type Route<T extends RouteDef> = RouteConfig<T> & {\n\tpath: string\n\tmethod: MethodsEnum\n\thandler: RouteDefHandler<T>\n}\n\ntype GetApiPart<T extends RouteDef, K extends keyof RouteDef> = NonNullable<IsInTypeList<T[K], [unknown]> extends true ? RouteDef[K] : T[K]>\n\ntype ArePipes<A, B> = A extends Pipe<any, any> ? (B extends Pipe<any, any> ? true : false) : false\ntype Compare<K extends keyof RouteDef, A, B> =\n\tIsInTypeList<B, [unknown]> extends true\n\t\t? A\n\t\t: IsInTypeList<A, [unknown]> extends true\n\t\t\t? B\n\t\t\t: K extends `default${string}` | 'context'\n\t\t\t\t? B\n\t\t\t\t: ArePipes<A, B> extends true\n\t\t\t\t\t? Pipe<PipeInput<A> & PipeInput<B>, PipeOutput<A> & PipeOutput<B>>\n\t\t\t\t\t: B\n\nexport type MergeRouteDefs<A extends RouteDef, B extends RouteDef> = {\n\t[K in keyof RouteDef]: Compare<K, A[K], B[K]>\n}\n\nexport type RouteDefToReqRes<T extends RouteDef> = Prettify<{\n\tbody: PipeOutput<GetApiPart<T, 'body'>>\n\tparams: PipeOutput<GetApiPart<T, 'params'>>\n\trequestHeaders: PipeOutput<GetApiPart<T, 'headers'>>\n\trequestCookies: PipeOutput<GetApiPart<T, 'cookies'>>\n\tquery: PipeOutput<GetApiPart<T, 'query'>>\n\tresponse: PipeOutput<GetApiPart<T, 'response'>>\n\tresponseHeaders: PipeOutput<GetApiPart<T, 'responseHeaders'>>\n\tresponseCookies: PipeOutput<GetApiPart<T, 'responseCookies'>>\n\tstatusCode: GetApiPart<T, 'defaultStatusCode'>\n\tcontentType: GetApiPart<T, 'defaultContentType'>\n}>\n\ntype Awaitable<T> = Promise<T> | T\ntype Res<T extends RouteDefToReqRes<any>> = Awaitable<\n\tIsInTypeList<T['statusCode'], [StatusCodesEnum, 200]> extends true\n\t\t? IsInTypeList<T['responseHeaders'], [DefaultHeaders]> extends true\n\t\t\t? IsInTypeList<T['responseCookies'], [DefaultCookies]> extends true\n\t\t\t\t? Response<T> | T['response']\n\t\t\t\t: Response<T>\n\t\t\t: Response<T>\n\t\t: Response<T>\n>\nexport type RouteDefHandler<Def extends RouteDef> = (req: Request<RouteDefToReqRes<Def>>) => Res<RouteDefToReqRes<Def>>\ntype RouteMiddlewareHandler<_Def extends RouteDef> = (req: Request<RouteDefToReqRes<RouteDef>>) => Awaitable<void>\ntype RouteResponseMiddlewareHandler<_Def extends RouteDef> = (\n\treq: Request<RouteDefToReqRes<RouteDef>>,\n\tres: Response<RouteDefToReqRes<RouteDef>>,\n) => Awaitable<void>\ntype ErrorHandler<Def extends RouteDef> = (\n\treq: Request<RouteDefToReqRes<Def>>,\n\terr: Error,\n) => Res<\n\tOmit<RouteDefToReqRes<Def>, 'response' | 'statusCode' | 'responseHeaders' | 'responseCookies'> & {\n\t\tresponse: RequestError['serializedErrors']\n\t\tstatusCode: RequestError['statusCode']\n\t\tresponseHeaders: DefaultHeaders\n\t\tresponseCookies: DefaultCookies\n\t}\n>\n\nfunction makeMiddlewareHandler<Cb extends Function, T extends RouteDef>(cb: Cb, onSetup?: HandlerSetup<T>) {\n\treturn { cb, onSetup }\n}\n\nexport const makeMiddleware = <Def extends RouteDef>(...args: Parameters<typeof makeMiddlewareHandler<RouteMiddlewareHandler<Def>, Def>>) =>\n\tmakeMiddlewareHandler(...args)\nexport const makeResponseMiddleware = <Def extends RouteDef>(\n\t...args: Parameters<typeof makeMiddlewareHandler<RouteResponseMiddlewareHandler<Def>, Def>>\n) => makeMiddlewareHandler(...args)\nexport const makeErrorMiddleware = <Def extends RouteDef>(...args: Parameters<typeof makeMiddlewareHandler<ErrorHandler<Def>, Def>>) =>\n\tmakeMiddlewareHandler(...args)\n","import { StatusCodes } from '../../server'\nimport { RequestError } from '../requestError'\n\ntype ValidError = {\n\tmessages: string[]\n\tfield: string\n}\n\nexport class ValidationError extends RequestError {\n\tstatusCode = StatusCodes.ValidationError\n\n\tconstructor(errors: ValidError[], cause?: unknown) {\n\t\tsuper(\n\t\t\t'Unprocessable Entity',\n\t\t\terrors.flatMap(({ field, messages }) => messages.map((message) => ({ message, field }))),\n\t\t\tcause,\n\t\t)\n\t}\n}\n","export type HookEvent = 'setup' | 'start' | 'close'\nexport type HookCb = Promise<unknown | void> | (() => void | unknown | Promise<void | unknown>)\n\nexport type ClassRef = Function & { prototype: unknown; name: string }\nexport type HookOptions = {\n\tclass?: ClassRef\n\tafter?: ClassRef[]\n}\nexport type HookRecord = { cb: HookCb; class?: ClassRef; after: ClassRef[] }\n\nexport function registerHook(hooks: HookRecord[], record: HookRecord): void {\n\tfor (const dep of record.after) {\n\t\tif (!hooks.some((h) => h.class === dep)) {\n\t\t\tconst depName = dep.name || 'unknown'\n\t\t\tconst ownerName = record.class?.name || 'anonymous'\n\t\t\tthrow new Error(`Missing dependency: ${ownerName} declares after: [${depName}], but ${depName} is not registered`)\n\t\t}\n\t}\n\n\tif (record.class) {\n\t\tconst tentative = [...hooks, record]\n\t\tdetectCycle(tentative)\n\t}\n\n\thooks.push(record)\n}\n\nfunction detectCycle(hooks: HookRecord[]): void {\n\tconst classToAfter = new Map<ClassRef, ClassRef[]>()\n\tfor (const h of hooks) {\n\t\tif (!h.class) continue\n\t\tconst existing = classToAfter.get(h.class)\n\t\tif (existing) {\n\t\t\tfor (const dep of h.after) {\n\t\t\t\tif (!existing.includes(dep)) existing.push(dep)\n\t\t\t}\n\t\t} else {\n\t\t\tclassToAfter.set(h.class, [...h.after])\n\t\t}\n\t}\n\n\tconst visited = new Set<ClassRef>()\n\tconst stack = new Set<ClassRef>()\n\n\tfunction visit(cls: ClassRef, path: ClassRef[]): void {\n\t\tif (stack.has(cls)) {\n\t\t\tconst cycleStart = path.indexOf(cls)\n\t\t\tconst cycle = [...path.slice(cycleStart), cls]\n\t\t\tconst names = cycle.map((c) => c.name || 'unknown')\n\t\t\tthrow new Error(`Cycle detected: ${names.join(' → ')}`)\n\t\t}\n\t\tif (visited.has(cls)) return\n\t\tstack.add(cls)\n\t\tpath.push(cls)\n\t\tfor (const dep of classToAfter.get(cls) ?? []) {\n\t\t\tvisit(dep, path)\n\t\t}\n\t\tpath.pop()\n\t\tstack.delete(cls)\n\t\tvisited.add(cls)\n\t}\n\n\tfor (const cls of classToAfter.keys()) {\n\t\tvisit(cls, [])\n\t}\n}\n\nexport type HookLayer = HookRecord[]\n\nexport function resolveHookDAG(hooks: HookRecord[], invert: boolean = false): HookLayer[] {\n\tif (hooks.length === 0) return []\n\n\tconst classToHooks = new Map<ClassRef, HookRecord[]>()\n\tconst anonymous: HookRecord[] = []\n\n\tfor (const h of hooks) {\n\t\tif (h.class) {\n\t\t\tconst list = classToHooks.get(h.class)\n\t\t\tif (list) list.push(h)\n\t\t\telse classToHooks.set(h.class, [h])\n\t\t} else {\n\t\t\tanonymous.push(h)\n\t\t}\n\t}\n\n\tconst classes = [...classToHooks.keys()]\n\n\tconst inDegree = new Map<ClassRef, number>()\n\tconst graph = new Map<ClassRef, ClassRef[]>()\n\n\tfor (const cls of classes) {\n\t\tinDegree.set(cls, 0)\n\t\tgraph.set(cls, [])\n\t}\n\n\tfor (const h of hooks) {\n\t\tif (!h.class) continue\n\t\tfor (const dep of h.after) {\n\t\t\tconst [from, to] = invert ? [h.class, dep] : [dep, h.class]\n\t\t\tconst edges = graph.get(from)!\n\t\t\tif (!edges.includes(to)) {\n\t\t\t\tedges.push(to)\n\t\t\t\tinDegree.set(to, inDegree.get(to)! + 1)\n\t\t\t}\n\t\t}\n\t}\n\n\tconst layers: HookLayer[] = []\n\tlet queue = classes.filter((c) => inDegree.get(c) === 0)\n\n\twhile (queue.length > 0) {\n\t\tconst layer: HookRecord[] = []\n\t\tconst next: ClassRef[] = []\n\n\t\tfor (const cls of queue) {\n\t\t\tlayer.push(...(classToHooks.get(cls) ?? []))\n\t\t}\n\t\tlayers.push(layer)\n\n\t\tfor (const cls of queue) {\n\t\t\tfor (const neighbor of graph.get(cls) ?? []) {\n\t\t\t\tconst d = inDegree.get(neighbor)! - 1\n\t\t\t\tinDegree.set(neighbor, d)\n\t\t\t\tif (d === 0) next.push(neighbor)\n\t\t\t}\n\t\t}\n\n\t\tqueue = next\n\t}\n\n\tif (anonymous.length > 0) {\n\t\tconst anonWithDeps = anonymous.filter((h) => h.after.length > 0)\n\t\tconst anonWithoutDeps = anonymous.filter((h) => h.after.length === 0)\n\n\t\tif (anonWithDeps.length > 0) {\n\t\t\tlet maxLayer = -1\n\t\t\tfor (const h of anonWithDeps) {\n\t\t\t\tfor (const dep of h.after) {\n\t\t\t\t\tconst depLayer = layers.findIndex((l) => l.some((r) => r.class === dep))\n\t\t\t\t\tif (depLayer > maxLayer) maxLayer = depLayer\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst insertAt = maxLayer + 1\n\t\t\tif (insertAt < layers.length) {\n\t\t\t\tlayers[insertAt].push(...anonWithDeps)\n\t\t\t} else {\n\t\t\t\tlayers.push(anonWithDeps)\n\t\t\t}\n\t\t}\n\n\t\tif (anonWithoutDeps.length > 0) {\n\t\t\tif (layers.length > 0) {\n\t\t\t\tlayers[layers.length - 1].push(...anonWithoutDeps)\n\t\t\t} else {\n\t\t\t\tlayers.push(anonWithoutDeps)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn layers\n}\n\nexport async function runHooks(\n\thooks: HookRecord[],\n\tonError: (error: Error) => void = (error) => {\n\t\tthrow error\n\t},\n\tinvert: boolean = false,\n) {\n\tconst layers = resolveHookDAG(hooks, invert)\n\tfor (const layer of layers)\n\t\tawait Promise.all(\n\t\t\tlayer.map(async (h) => {\n\t\t\t\ttry {\n\t\t\t\t\tif (typeof h.cb === 'function') return await h.cb()\n\t\t\t\t\treturn await h.cb\n\t\t\t\t} catch (error) {\n\t\t\t\t\treturn onError(error instanceof Error ? error : new Error(`${error}`))\n\t\t\t\t}\n\t\t\t}),\n\t\t)\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\n\tclass A {}\n\tclass B {}\n\tclass C {}\n\tclass D {}\n\n\tconst noop = () => {}\n\n\tdescribe('registerHook', () => {\n\t\ttest('registers a hook with no dependencies', () => {\n\t\t\tconst hooks: HookRecord[] = []\n\t\t\tregisterHook(hooks, { cb: noop, class: A, after: [] })\n\t\t\texpect(hooks).toHaveLength(1)\n\t\t})\n\n\t\ttest('throws on missing dependency', () => {\n\t\t\tconst hooks: HookRecord[] = []\n\t\t\texpect(() => registerHook(hooks, { cb: noop, class: B, after: [A] })).toThrow(/Missing dependency.*B.*A/)\n\t\t})\n\n\t\ttest('throws on cycle: A→B→A', () => {\n\t\t\tconst hooks: HookRecord[] = []\n\t\t\tregisterHook(hooks, { cb: noop, class: A, after: [] })\n\t\t\tregisterHook(hooks, { cb: noop, class: B, after: [A] })\n\t\t\texpect(() => registerHook(hooks, { cb: noop, class: A, after: [B] })).toThrow(/Cycle detected/)\n\t\t})\n\n\t\ttest('throws on transitive cycle: A→B→C→A', () => {\n\t\t\tconst hooks: HookRecord[] = []\n\t\t\tregisterHook(hooks, { cb: noop, class: A, after: [] })\n\t\t\tregisterHook(hooks, { cb: noop, class: B, after: [A] })\n\t\t\tregisterHook(hooks, { cb: noop, class: C, after: [B] })\n\t\t\texpect(() => registerHook(hooks, { cb: noop, class: A, after: [C] })).toThrow(/Cycle detected/)\n\t\t})\n\n\t\ttest('allows anonymous hooks with dependencies', () => {\n\t\t\tconst hooks: HookRecord[] = []\n\t\t\tregisterHook(hooks, { cb: noop, class: A, after: [] })\n\t\t\tregisterHook(hooks, { cb: noop, after: [A] })\n\t\t\texpect(hooks).toHaveLength(2)\n\t\t})\n\n\t\ttest('anonymous hook throws on missing dependency', () => {\n\t\t\tconst hooks: HookRecord[] = []\n\t\t\texpect(() => registerHook(hooks, { cb: noop, after: [A] })).toThrow(/Missing dependency.*anonymous.*A/)\n\t\t})\n\t})\n\n\tdescribe('resolveHookDAG', () => {\n\t\ttest('linear chain: A → B → C', () => {\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{ cb: noop, class: A, after: [] },\n\t\t\t\t{ cb: noop, class: B, after: [A] },\n\t\t\t\t{ cb: noop, class: C, after: [B] },\n\t\t\t]\n\t\t\tconst layers = resolveHookDAG(hooks)\n\t\t\texpect(layers).toHaveLength(3)\n\t\t\texpect(layers[0].every((h) => h.class === A)).toBe(true)\n\t\t\texpect(layers[1].every((h) => h.class === B)).toBe(true)\n\t\t\texpect(layers[2].every((h) => h.class === C)).toBe(true)\n\t\t})\n\n\t\ttest('fan-out: A → B, A → C (B and C are parallel)', () => {\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{ cb: noop, class: A, after: [] },\n\t\t\t\t{ cb: noop, class: B, after: [A] },\n\t\t\t\t{ cb: noop, class: C, after: [A] },\n\t\t\t]\n\t\t\tconst layers = resolveHookDAG(hooks)\n\t\t\texpect(layers).toHaveLength(2)\n\t\t\texpect(layers[0].every((h) => h.class === A)).toBe(true)\n\t\t\tconst secondClasses = layers[1].map((h) => h.class)\n\t\t\texpect(secondClasses).toContain(B)\n\t\t\texpect(secondClasses).toContain(C)\n\t\t})\n\n\t\ttest('fan-in: B → D, C → D', () => {\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{ cb: noop, class: B, after: [] },\n\t\t\t\t{ cb: noop, class: C, after: [] },\n\t\t\t\t{ cb: noop, class: D, after: [B, C] },\n\t\t\t]\n\t\t\tconst layers = resolveHookDAG(hooks)\n\t\t\texpect(layers).toHaveLength(2)\n\t\t\tconst firstClasses = layers[0].map((h) => h.class)\n\t\t\texpect(firstClasses).toContain(B)\n\t\t\texpect(firstClasses).toContain(C)\n\t\t\texpect(layers[1].every((h) => h.class === D)).toBe(true)\n\t\t})\n\n\t\ttest('diamond: A → B, A → C, B → D, C → D', () => {\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{ cb: noop, class: A, after: [] },\n\t\t\t\t{ cb: noop, class: B, after: [A] },\n\t\t\t\t{ cb: noop, class: C, after: [A] },\n\t\t\t\t{ cb: noop, class: D, after: [B, C] },\n\t\t\t]\n\t\t\tconst layers = resolveHookDAG(hooks)\n\t\t\texpect(layers).toHaveLength(3)\n\t\t\texpect(layers[0][0].class).toBe(A)\n\t\t\tconst midClasses = layers[1].map((h) => h.class)\n\t\t\texpect(midClasses).toContain(B)\n\t\t\texpect(midClasses).toContain(C)\n\t\t\texpect(layers[2][0].class).toBe(D)\n\t\t})\n\n\t\ttest('close-event inversion reverses the graph', () => {\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{ cb: noop, class: A, after: [] },\n\t\t\t\t{ cb: noop, class: B, after: [A] },\n\t\t\t\t{ cb: noop, class: C, after: [B] },\n\t\t\t]\n\t\t\tconst layers = resolveHookDAG(hooks, true)\n\t\t\texpect(layers).toHaveLength(3)\n\t\t\texpect(layers[0].every((h) => h.class === C)).toBe(true)\n\t\t\texpect(layers[1].every((h) => h.class === B)).toBe(true)\n\t\t\texpect(layers[2].every((h) => h.class === A)).toBe(true)\n\t\t})\n\n\t\ttest('close inversion: fan-out becomes fan-in', () => {\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{ cb: noop, class: A, after: [] },\n\t\t\t\t{ cb: noop, class: B, after: [A] },\n\t\t\t\t{ cb: noop, class: C, after: [A] },\n\t\t\t]\n\t\t\tconst layers = resolveHookDAG(hooks, true)\n\t\t\texpect(layers).toHaveLength(2)\n\t\t\tconst firstClasses = layers[0].map((h) => h.class)\n\t\t\texpect(firstClasses).toContain(B)\n\t\t\texpect(firstClasses).toContain(C)\n\t\t\texpect(layers[1].every((h) => h.class === A)).toBe(true)\n\t\t})\n\n\t\ttest('multiple hooks per class are all in the same layer', () => {\n\t\t\tconst cb1 = () => {}\n\t\t\tconst cb2 = () => {}\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{ cb: cb1, class: A, after: [] },\n\t\t\t\t{ cb: cb2, class: A, after: [] },\n\t\t\t\t{ cb: noop, class: B, after: [A] },\n\t\t\t]\n\t\t\tconst layers = resolveHookDAG(hooks)\n\t\t\texpect(layers).toHaveLength(2)\n\t\t\texpect(layers[0]).toHaveLength(2)\n\t\t\texpect(layers[0].every((h) => h.class === A)).toBe(true)\n\t\t})\n\n\t\ttest('anonymous hooks without deps run at deepest level', () => {\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{ cb: noop, class: A, after: [] },\n\t\t\t\t{ cb: noop, class: B, after: [A] },\n\t\t\t\t{ cb: noop, after: [] },\n\t\t\t]\n\t\t\tconst layers = resolveHookDAG(hooks)\n\t\t\texpect(layers).toHaveLength(2)\n\t\t\tconst lastLayer = layers[layers.length - 1]\n\t\t\texpect(lastLayer.some((h) => h.class === undefined)).toBe(true)\n\t\t})\n\n\t\ttest('anonymous hooks with deps run after their dependencies', () => {\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{ cb: noop, class: A, after: [] },\n\t\t\t\t{ cb: noop, class: B, after: [A] },\n\t\t\t\t{ cb: noop, class: C, after: [B] },\n\t\t\t\t{ cb: noop, after: [A] },\n\t\t\t]\n\t\t\tconst layers = resolveHookDAG(hooks)\n\t\t\tconst anonLayer = layers.findIndex((l) => l.some((h) => h.class === undefined))\n\t\t\tconst aLayer = layers.findIndex((l) => l.some((h) => h.class === A))\n\t\t\texpect(anonLayer).toBeGreaterThan(aLayer)\n\t\t})\n\n\t\ttest('empty hooks returns empty layers', () => {\n\t\t\texpect(resolveHookDAG([])).toEqual([])\n\t\t})\n\t})\n\n\tdescribe('runHooks', () => {\n\t\ttest('same-depth siblings observably overlap', async () => {\n\t\t\tconst log: string[] = []\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{\n\t\t\t\t\tcb: async () => {\n\t\t\t\t\t\tlog.push('B-start')\n\t\t\t\t\t\tawait new Promise((r) => setTimeout(r, 20))\n\t\t\t\t\t\tlog.push('B-end')\n\t\t\t\t\t},\n\t\t\t\t\tclass: B,\n\t\t\t\t\tafter: [],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcb: async () => {\n\t\t\t\t\t\tlog.push('C-start')\n\t\t\t\t\t\tawait new Promise((r) => setTimeout(r, 20))\n\t\t\t\t\t\tlog.push('C-end')\n\t\t\t\t\t},\n\t\t\t\t\tclass: C,\n\t\t\t\t\tafter: [],\n\t\t\t\t},\n\t\t\t]\n\t\t\tawait runHooks(hooks)\n\t\t\texpect(log[0]).toBe('B-start')\n\t\t\texpect(log[1]).toBe('C-start')\n\t\t})\n\n\t\ttest('different depths run sequentially', async () => {\n\t\t\tconst log: string[] = []\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{\n\t\t\t\t\tcb: async () => {\n\t\t\t\t\t\tlog.push('A')\n\t\t\t\t\t},\n\t\t\t\t\tclass: A,\n\t\t\t\t\tafter: [],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcb: async () => {\n\t\t\t\t\t\tlog.push('B')\n\t\t\t\t\t},\n\t\t\t\t\tclass: B,\n\t\t\t\t\tafter: [A],\n\t\t\t\t},\n\t\t\t]\n\t\t\tawait runHooks(hooks)\n\t\t\texpect(log).toEqual(['A', 'B'])\n\t\t})\n\n\t\ttest('close inversion runs hooks in reverse dependency order', async () => {\n\t\t\tconst log: string[] = []\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{ cb: async () => log.push('A'), class: A, after: [] },\n\t\t\t\t{ cb: async () => log.push('B'), class: B, after: [A] },\n\t\t\t\t{ cb: async () => log.push('C'), class: C, after: [B] },\n\t\t\t]\n\t\t\tawait runHooks(hooks, undefined, true)\n\t\t\texpect(log).toEqual(['C', 'B', 'A'])\n\t\t})\n\n\t\ttest('errors are routed to onError handler', async () => {\n\t\t\tconst errors: Error[] = []\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{\n\t\t\t\t\tcb: () => {\n\t\t\t\t\t\tthrow new Error('boom')\n\t\t\t\t\t},\n\t\t\t\t\tclass: A,\n\t\t\t\t\tafter: [],\n\t\t\t\t},\n\t\t\t]\n\t\t\tawait runHooks(hooks, (e) => {\n\t\t\t\terrors.push(e)\n\t\t\t})\n\t\t\texpect(errors).toHaveLength(1)\n\t\t\texpect(errors[0].message).toBe('boom')\n\t\t})\n\n\t\ttest('raw promise callbacks are awaited', async () => {\n\t\t\tconst log: string[] = []\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{\n\t\t\t\t\tcb: Promise.resolve().then(() => log.push('resolved')),\n\t\t\t\t\tclass: A,\n\t\t\t\t\tafter: [],\n\t\t\t\t},\n\t\t\t]\n\t\t\tawait runHooks(hooks)\n\t\t\texpect(log).toContain('resolved')\n\t\t})\n\t})\n}\n","import { type ConditionalObjectKeys, type PipeInput, type PipeOutput, v } from 'valleyed'\n\nexport const instanceSettingsPipe = () =>\n\tv.object({\n\t\tapp: v.object({\n\t\t\tname: v.string(),\n\t\t}),\n\t\tlog: v.defaults(\n\t\t\tv.object({\n\t\t\t\tlevel: v.defaults(v.in(['fatal', 'error', 'warn', 'info', 'debug', 'trace', 'silent'] as const), 'info'),\n\t\t\t}),\n\t\t\t{},\n\t\t),\n\t\tutils: v.defaults(\n\t\t\tv.object({\n\t\t\t\thashSaltRounds: v.defaults(v.number(), 10),\n\t\t\t\tpaginationDefaultLimit: v.defaults(v.number(), 100),\n\t\t\t\tmaxFileUploadSizeInMb: v.defaults(v.number(), 500),\n\t\t\t}),\n\t\t\t{},\n\t\t),\n\t})\n\nexport type Settings = PipeOutput<ReturnType<typeof instanceSettingsPipe>>\nexport type SettingsInput = ConditionalObjectKeys<PipeInput<ReturnType<typeof instanceSettingsPipe>>>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAAc,qBAAd;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAAkC;AAElC,IAAAA,mBAAyE;;;ACFzE,kBAAkC;AAClC,kBAAqB;AACrB,IAAAC,mBAA6B;;;ACFtB,IAAM,gBAAN,cAA4B,MAAM;AAAA,EACxC,YACiB,SACA,SACA,OACf;AACD,UAAM,SAAS,EAAE,MAAM,CAAC;AAJR;AACA;AACA;AAAA,EAGjB;AACD;;;ACLO,IAAe,eAAf,cAAoC,cAAc;AAAA,EAG9C,YACO,SACA,kBAChB,OACC;AACD,UAAM,SAAS,EAAE,iBAAiB,GAAG,KAAK;AAJ1B;AACA;AAAA,EAIjB;AACD;;;ACGO,IAAM,cAAc;AAAA,EAC1B,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,kBAAkB;AAAA,EAClB,eAAe;AAAA,EACf,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB,sBAAsB;AAAA,EACtB,iBAAiB;AAAA,EACjB,cAAc;AACf;;;ACnBO,IAAM,kBAAN,cAA8B,aAAa;AAAA,EACjD,aAAa,YAAY;AAAA,EAEzB,YAAY,QAAsB,OAAiB;AAClD;AAAA,MACC;AAAA,MACA,OAAO,QAAQ,CAAC,EAAE,OAAO,SAAS,MAAM,SAAS,IAAI,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;AAAA,MACvF;AAAA,IACD;AAAA,EACD;AACD;;;ACRO,SAAS,aAAa,OAAqB,QAA0B;AAC3E,aAAW,OAAO,OAAO,OAAO;AAC/B,QAAI,CAAC,MAAM,KAAK,CAAC,MAAM,EAAE,UAAU,GAAG,GAAG;AACxC,YAAM,UAAU,IAAI,QAAQ;AAC5B,YAAM,YAAY,OAAO,OAAO,QAAQ;AACxC,YAAM,IAAI,MAAM,uBAAuB,SAAS,qBAAqB,OAAO,UAAU,OAAO,oBAAoB;AAAA,IAClH;AAAA,EACD;AAEA,MAAI,OAAO,OAAO;AACjB,UAAM,YAAY,CAAC,GAAG,OAAO,MAAM;AACnC,gBAAY,SAAS;AAAA,EACtB;AAEA,QAAM,KAAK,MAAM;AAClB;AAEA,SAAS,YAAY,OAA2B;AAC/C,QAAM,eAAe,oBAAI,IAA0B;AACnD,aAAW,KAAK,OAAO;AACtB,QAAI,CAAC,EAAE,MAAO;AACd,UAAM,WAAW,aAAa,IAAI,EAAE,KAAK;AACzC,QAAI,UAAU;AACb,iBAAW,OAAO,EAAE,OAAO;AAC1B,YAAI,CAAC,SAAS,SAAS,GAAG,EAAG,UAAS,KAAK,GAAG;AAAA,MAC/C;AAAA,IACD,OAAO;AACN,mBAAa,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC;AAAA,IACvC;AAAA,EACD;AAEA,QAAM,UAAU,oBAAI,IAAc;AAClC,QAAM,QAAQ,oBAAI,IAAc;AAEhC,WAAS,MAAM,KAAe,MAAwB;AACrD,QAAI,MAAM,IAAI,GAAG,GAAG;AACnB,YAAM,aAAa,KAAK,QAAQ,GAAG;AACnC,YAAM,QAAQ,CAAC,GAAG,KAAK,MAAM,UAAU,GAAG,GAAG;AAC7C,YAAM,QAAQ,MAAM,IAAI,CAAC,MAAM,EAAE,QAAQ,SAAS;AAClD,YAAM,IAAI,MAAM,mBAAmB,MAAM,KAAK,UAAK,CAAC,EAAE;AAAA,IACvD;AACA,QAAI,QAAQ,IAAI,GAAG,EAAG;AACtB,UAAM,IAAI,GAAG;AACb,SAAK,KAAK,GAAG;AACb,eAAW,OAAO,aAAa,IAAI,GAAG,KAAK,CAAC,GAAG;AAC9C,YAAM,KAAK,IAAI;AAAA,IAChB;AACA,SAAK,IAAI;AACT,UAAM,OAAO,GAAG;AAChB,YAAQ,IAAI,GAAG;AAAA,EAChB;AAEA,aAAW,OAAO,aAAa,KAAK,GAAG;AACtC,UAAM,KAAK,CAAC,CAAC;AAAA,EACd;AACD;AAIO,SAAS,eAAe,OAAqB,SAAkB,OAAoB;AACzF,MAAI,MAAM,WAAW,EAAG,QAAO,CAAC;AAEhC,QAAM,eAAe,oBAAI,IAA4B;AACrD,QAAM,YAA0B,CAAC;AAEjC,aAAW,KAAK,OAAO;AACtB,QAAI,EAAE,OAAO;AACZ,YAAM,OAAO,aAAa,IAAI,EAAE,KAAK;AACrC,UAAI,KAAM,MAAK,KAAK,CAAC;AAAA,UAChB,cAAa,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AAAA,IACnC,OAAO;AACN,gBAAU,KAAK,CAAC;AAAA,IACjB;AAAA,EACD;AAEA,QAAM,UAAU,CAAC,GAAG,aAAa,KAAK,CAAC;AAEvC,QAAM,WAAW,oBAAI,IAAsB;AAC3C,QAAM,QAAQ,oBAAI,IAA0B;AAE5C,aAAW,OAAO,SAAS;AAC1B,aAAS,IAAI,KAAK,CAAC;AACnB,UAAM,IAAI,KAAK,CAAC,CAAC;AAAA,EAClB;AAEA,aAAW,KAAK,OAAO;AACtB,QAAI,CAAC,EAAE,MAAO;AACd,eAAW,OAAO,EAAE,OAAO;AAC1B,YAAM,CAAC,MAAM,EAAE,IAAI,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK;AAC1D,YAAM,QAAQ,MAAM,IAAI,IAAI;AAC5B,UAAI,CAAC,MAAM,SAAS,EAAE,GAAG;AACxB,cAAM,KAAK,EAAE;AACb,iBAAS,IAAI,IAAI,SAAS,IAAI,EAAE,IAAK,CAAC;AAAA,MACvC;AAAA,IACD;AAAA,EACD;AAEA,QAAM,SAAsB,CAAC;AAC7B,MAAI,QAAQ,QAAQ,OAAO,CAAC,MAAM,SAAS,IAAI,CAAC,MAAM,CAAC;AAEvD,SAAO,MAAM,SAAS,GAAG;AACxB,UAAM,QAAsB,CAAC;AAC7B,UAAM,OAAmB,CAAC;AAE1B,eAAW,OAAO,OAAO;AACxB,YAAM,KAAK,GAAI,aAAa,IAAI,GAAG,KAAK,CAAC,CAAE;AAAA,IAC5C;AACA,WAAO,KAAK,KAAK;AAEjB,eAAW,OAAO,OAAO;AACxB,iBAAW,YAAY,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG;AAC5C,cAAM,IAAI,SAAS,IAAI,QAAQ,IAAK;AACpC,iBAAS,IAAI,UAAU,CAAC;AACxB,YAAI,MAAM,EAAG,MAAK,KAAK,QAAQ;AAAA,MAChC;AAAA,IACD;AAEA,YAAQ;AAAA,EACT;AAEA,MAAI,UAAU,SAAS,GAAG;AACzB,UAAM,eAAe,UAAU,OAAO,CAAC,MAAM,EAAE,MAAM,SAAS,CAAC;AAC/D,UAAM,kBAAkB,UAAU,OAAO,CAAC,MAAM,EAAE,MAAM,WAAW,CAAC;AAEpE,QAAI,aAAa,SAAS,GAAG;AAC5B,UAAI,WAAW;AACf,iBAAW,KAAK,cAAc;AAC7B,mBAAW,OAAO,EAAE,OAAO;AAC1B,gBAAM,WAAW,OAAO,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,GAAG,CAAC;AACvE,cAAI,WAAW,SAAU,YAAW;AAAA,QACrC;AAAA,MACD;AACA,YAAM,WAAW,WAAW;AAC5B,UAAI,WAAW,OAAO,QAAQ;AAC7B,eAAO,QAAQ,EAAE,KAAK,GAAG,YAAY;AAAA,MACtC,OAAO;AACN,eAAO,KAAK,YAAY;AAAA,MACzB;AAAA,IACD;AAEA,QAAI,gBAAgB,SAAS,GAAG;AAC/B,UAAI,OAAO,SAAS,GAAG;AACtB,eAAO,OAAO,SAAS,CAAC,EAAE,KAAK,GAAG,eAAe;AAAA,MAClD,OAAO;AACN,eAAO,KAAK,eAAe;AAAA,MAC5B;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AACR;AAEA,eAAsB,SACrB,OACA,UAAkC,CAAC,UAAU;AAC5C,QAAM;AACP,GACA,SAAkB,OACjB;AACD,QAAM,SAAS,eAAe,OAAO,MAAM;AAC3C,aAAW,SAAS;AACnB,UAAM,QAAQ;AAAA,MACb,MAAM,IAAI,OAAO,MAAM;AACtB,YAAI;AACH,cAAI,OAAO,EAAE,OAAO,WAAY,QAAO,MAAM,EAAE,GAAG;AAClD,iBAAO,MAAM,EAAE;AAAA,QAChB,SAAS,OAAO;AACf,iBAAO,QAAQ,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,GAAG,KAAK,EAAE,CAAC;AAAA,QACtE;AAAA,MACD,CAAC;AAAA,IACF;AACF;AAEA,IAAI,QAAoB;AACvB,QAAM,EAAE,UAAU,MAAM,OAAO,IAAI;AAAA,EAEnC,MAAM,EAAE;AAAA,EAAC;AAAA,EACT,MAAM,EAAE;AAAA,EAAC;AAAA,EACT,MAAM,EAAE;AAAA,EAAC;AAAA,EACT,MAAM,EAAE;AAAA,EAAC;AAET,QAAM,OAAO,MAAM;AAAA,EAAC;AAEpB,WAAS,gBAAgB,MAAM;AAC9B,SAAK,yCAAyC,MAAM;AACnD,YAAM,QAAsB,CAAC;AAC7B,mBAAa,OAAO,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC;AACrD,aAAO,KAAK,EAAE,aAAa,CAAC;AAAA,IAC7B,CAAC;AAED,SAAK,gCAAgC,MAAM;AAC1C,YAAM,QAAsB,CAAC;AAC7B,aAAO,MAAM,aAAa,OAAO,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,0BAA0B;AAAA,IACzG,CAAC;AAED,SAAK,oCAA0B,MAAM;AACpC,YAAM,QAAsB,CAAC;AAC7B,mBAAa,OAAO,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC;AACrD,mBAAa,OAAO,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;AACtD,aAAO,MAAM,aAAa,OAAO,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,gBAAgB;AAAA,IAC/F,CAAC;AAED,SAAK,sDAAuC,MAAM;AACjD,YAAM,QAAsB,CAAC;AAC7B,mBAAa,OAAO,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC;AACrD,mBAAa,OAAO,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;AACtD,mBAAa,OAAO,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;AACtD,aAAO,MAAM,aAAa,OAAO,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,gBAAgB;AAAA,IAC/F,CAAC;AAED,SAAK,4CAA4C,MAAM;AACtD,YAAM,QAAsB,CAAC;AAC7B,mBAAa,OAAO,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC;AACrD,mBAAa,OAAO,EAAE,IAAI,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC;AAC5C,aAAO,KAAK,EAAE,aAAa,CAAC;AAAA,IAC7B,CAAC;AAED,SAAK,+CAA+C,MAAM;AACzD,YAAM,QAAsB,CAAC;AAC7B,aAAO,MAAM,aAAa,OAAO,EAAE,IAAI,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,kCAAkC;AAAA,IACvG,CAAC;AAAA,EACF,CAAC;AAED,WAAS,kBAAkB,MAAM;AAChC,SAAK,qCAA2B,MAAM;AACrC,YAAM,QAAsB;AAAA,QAC3B,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE;AAAA,QAChC,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE;AAAA,QACjC,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE;AAAA,MAClC;AACA,YAAM,SAAS,eAAe,KAAK;AACnC,aAAO,MAAM,EAAE,aAAa,CAAC;AAC7B,aAAO,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,KAAK,IAAI;AACvD,aAAO,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,KAAK,IAAI;AACvD,aAAO,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,KAAK,IAAI;AAAA,IACxD,CAAC;AAED,SAAK,0DAAgD,MAAM;AAC1D,YAAM,QAAsB;AAAA,QAC3B,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE;AAAA,QAChC,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE;AAAA,QACjC,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE;AAAA,MAClC;AACA,YAAM,SAAS,eAAe,KAAK;AACnC,aAAO,MAAM,EAAE,aAAa,CAAC;AAC7B,aAAO,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,KAAK,IAAI;AACvD,YAAM,gBAAgB,OAAO,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK;AAClD,aAAO,aAAa,EAAE,UAAU,CAAC;AACjC,aAAO,aAAa,EAAE,UAAU,CAAC;AAAA,IAClC,CAAC;AAED,SAAK,kCAAwB,MAAM;AAClC,YAAM,QAAsB;AAAA,QAC3B,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE;AAAA,QAChC,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE;AAAA,QAChC,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE;AAAA,MACrC;AACA,YAAM,SAAS,eAAe,KAAK;AACnC,aAAO,MAAM,EAAE,aAAa,CAAC;AAC7B,YAAM,eAAe,OAAO,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK;AACjD,aAAO,YAAY,EAAE,UAAU,CAAC;AAChC,aAAO,YAAY,EAAE,UAAU,CAAC;AAChC,aAAO,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,KAAK,IAAI;AAAA,IACxD,CAAC;AAED,SAAK,2DAAuC,MAAM;AACjD,YAAM,QAAsB;AAAA,QAC3B,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE;AAAA,QAChC,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE;AAAA,QACjC,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE;AAAA,QACjC,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE;AAAA,MACrC;AACA,YAAM,SAAS,eAAe,KAAK;AACnC,aAAO,MAAM,EAAE,aAAa,CAAC;AAC7B,aAAO,OAAO,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC;AACjC,YAAM,aAAa,OAAO,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK;AAC/C,aAAO,UAAU,EAAE,UAAU,CAAC;AAC9B,aAAO,UAAU,EAAE,UAAU,CAAC;AAC9B,aAAO,OAAO,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC;AAAA,IAClC,CAAC;AAED,SAAK,4CAA4C,MAAM;AACtD,YAAM,QAAsB;AAAA,QAC3B,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE;AAAA,QAChC,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE;AAAA,QACjC,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE;AAAA,MAClC;AACA,YAAM,SAAS,eAAe,OAAO,IAAI;AACzC,aAAO,MAAM,EAAE,aAAa,CAAC;AAC7B,aAAO,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,KAAK,IAAI;AACvD,aAAO,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,KAAK,IAAI;AACvD,aAAO,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,KAAK,IAAI;AAAA,IACxD,CAAC;AAED,SAAK,2CAA2C,MAAM;AACrD,YAAM,QAAsB;AAAA,QAC3B,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE;AAAA,QAChC,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE;AAAA,QACjC,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE;AAAA,MAClC;AACA,YAAM,SAAS,eAAe,OAAO,IAAI;AACzC,aAAO,MAAM,EAAE,aAAa,CAAC;AAC7B,YAAM,eAAe,OAAO,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK;AACjD,aAAO,YAAY,EAAE,UAAU,CAAC;AAChC,aAAO,YAAY,EAAE,UAAU,CAAC;AAChC,aAAO,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,KAAK,IAAI;AAAA,IACxD,CAAC;AAED,SAAK,sDAAsD,MAAM;AAChE,YAAM,MAAM,MAAM;AAAA,MAAC;AACnB,YAAM,MAAM,MAAM;AAAA,MAAC;AACnB,YAAM,QAAsB;AAAA,QAC3B,EAAE,IAAI,KAAK,OAAO,GAAG,OAAO,CAAC,EAAE;AAAA,QAC/B,EAAE,IAAI,KAAK,OAAO,GAAG,OAAO,CAAC,EAAE;AAAA,QAC/B,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE;AAAA,MAClC;AACA,YAAM,SAAS,eAAe,KAAK;AACnC,aAAO,MAAM,EAAE,aAAa,CAAC;AAC7B,aAAO,OAAO,CAAC,CAAC,EAAE,aAAa,CAAC;AAChC,aAAO,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,KAAK,IAAI;AAAA,IACxD,CAAC;AAED,SAAK,qDAAqD,MAAM;AAC/D,YAAM,QAAsB;AAAA,QAC3B,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE;AAAA,QAChC,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE;AAAA,QACjC,EAAE,IAAI,MAAM,OAAO,CAAC,EAAE;AAAA,MACvB;AACA,YAAM,SAAS,eAAe,KAAK;AACnC,aAAO,MAAM,EAAE,aAAa,CAAC;AAC7B,YAAM,YAAY,OAAO,OAAO,SAAS,CAAC;AAC1C,aAAO,UAAU,KAAK,CAAC,MAAM,EAAE,UAAU,MAAS,CAAC,EAAE,KAAK,IAAI;AAAA,IAC/D,CAAC;AAED,SAAK,0DAA0D,MAAM;AACpE,YAAM,QAAsB;AAAA,QAC3B,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE;AAAA,QAChC,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE;AAAA,QACjC,EAAE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE;AAAA,QACjC,EAAE,IAAI,MAAM,OAAO,CAAC,CAAC,EAAE;AAAA,MACxB;AACA,YAAM,SAAS,eAAe,KAAK;AACnC,YAAM,YAAY,OAAO,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,MAAS,CAAC;AAC9E,YAAM,SAAS,OAAO,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AACnE,aAAO,SAAS,EAAE,gBAAgB,MAAM;AAAA,IACzC,CAAC;AAED,SAAK,oCAAoC,MAAM;AAC9C,aAAO,eAAe,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,IACtC,CAAC;AAAA,EACF,CAAC;AAED,WAAS,YAAY,MAAM;AAC1B,SAAK,0CAA0C,YAAY;AAC1D,YAAM,MAAgB,CAAC;AACvB,YAAM,QAAsB;AAAA,QAC3B;AAAA,UACC,IAAI,YAAY;AACf,gBAAI,KAAK,SAAS;AAClB,kBAAM,IAAI,QAAQ,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAC1C,gBAAI,KAAK,OAAO;AAAA,UACjB;AAAA,UACA,OAAO;AAAA,UACP,OAAO,CAAC;AAAA,QACT;AAAA,QACA;AAAA,UACC,IAAI,YAAY;AACf,gBAAI,KAAK,SAAS;AAClB,kBAAM,IAAI,QAAQ,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAC1C,gBAAI,KAAK,OAAO;AAAA,UACjB;AAAA,UACA,OAAO;AAAA,UACP,OAAO,CAAC;AAAA,QACT;AAAA,MACD;AACA,YAAM,SAAS,KAAK;AACpB,aAAO,IAAI,CAAC,CAAC,EAAE,KAAK,SAAS;AAC7B,aAAO,IAAI,CAAC,CAAC,EAAE,KAAK,SAAS;AAAA,IAC9B,CAAC;AAED,SAAK,qCAAqC,YAAY;AACrD,YAAM,MAAgB,CAAC;AACvB,YAAM,QAAsB;AAAA,QAC3B;AAAA,UACC,IAAI,YAAY;AACf,gBAAI,KAAK,GAAG;AAAA,UACb;AAAA,UACA,OAAO;AAAA,UACP,OAAO,CAAC;AAAA,QACT;AAAA,QACA;AAAA,UACC,IAAI,YAAY;AACf,gBAAI,KAAK,GAAG;AAAA,UACb;AAAA,UACA,OAAO;AAAA,UACP,OAAO,CAAC,CAAC;AAAA,QACV;AAAA,MACD;AACA,YAAM,SAAS,KAAK;AACpB,aAAO,GAAG,EAAE,QAAQ,CAAC,KAAK,GAAG,CAAC;AAAA,IAC/B,CAAC;AAED,SAAK,0DAA0D,YAAY;AAC1E,YAAM,MAAgB,CAAC;AACvB,YAAM,QAAsB;AAAA,QAC3B,EAAE,IAAI,YAAY,IAAI,KAAK,GAAG,GAAG,OAAO,GAAG,OAAO,CAAC,EAAE;AAAA,QACrD,EAAE,IAAI,YAAY,IAAI,KAAK,GAAG,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE;AAAA,QACtD,EAAE,IAAI,YAAY,IAAI,KAAK,GAAG,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE;AAAA,MACvD;AACA,YAAM,SAAS,OAAO,QAAW,IAAI;AACrC,aAAO,GAAG,EAAE,QAAQ,CAAC,KAAK,KAAK,GAAG,CAAC;AAAA,IACpC,CAAC;AAED,SAAK,wCAAwC,YAAY;AACxD,YAAM,SAAkB,CAAC;AACzB,YAAM,QAAsB;AAAA,QAC3B;AAAA,UACC,IAAI,MAAM;AACT,kBAAM,IAAI,MAAM,MAAM;AAAA,UACvB;AAAA,UACA,OAAO;AAAA,UACP,OAAO,CAAC;AAAA,QACT;AAAA,MACD;AACA,YAAM,SAAS,OAAO,CAAC,MAAM;AAC5B,eAAO,KAAK,CAAC;AAAA,MACd,CAAC;AACD,aAAO,MAAM,EAAE,aAAa,CAAC;AAC7B,aAAO,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,MAAM;AAAA,IACtC,CAAC;AAED,SAAK,qCAAqC,YAAY;AACrD,YAAM,MAAgB,CAAC;AACvB,YAAM,QAAsB;AAAA,QAC3B;AAAA,UACC,IAAI,QAAQ,QAAQ,EAAE,KAAK,MAAM,IAAI,KAAK,UAAU,CAAC;AAAA,UACrD,OAAO;AAAA,UACP,OAAO,CAAC;AAAA,QACT;AAAA,MACD;AACA,YAAM,SAAS,KAAK;AACpB,aAAO,GAAG,EAAE,UAAU,UAAU;AAAA,IACjC,CAAC;AAAA,EACF,CAAC;AACF;;;ACtcA,sBAA+E;AAExE,IAAM,uBAAuB,MACnC,kBAAE,OAAO;AAAA,EACR,KAAK,kBAAE,OAAO;AAAA,IACb,MAAM,kBAAE,OAAO;AAAA,EAChB,CAAC;AAAA,EACD,KAAK,kBAAE;AAAA,IACN,kBAAE,OAAO;AAAA,MACR,OAAO,kBAAE,SAAS,kBAAE,GAAG,CAAC,SAAS,SAAS,QAAQ,QAAQ,SAAS,SAAS,QAAQ,CAAU,GAAG,MAAM;AAAA,IACxG,CAAC;AAAA,IACD,CAAC;AAAA,EACF;AAAA,EACA,OAAO,kBAAE;AAAA,IACR,kBAAE,OAAO;AAAA,MACR,gBAAgB,kBAAE,SAAS,kBAAE,OAAO,GAAG,EAAE;AAAA,MACzC,wBAAwB,kBAAE,SAAS,kBAAE,OAAO,GAAG,GAAG;AAAA,MAClD,uBAAuB,kBAAE,SAAS,kBAAE,OAAO,GAAG,GAAG;AAAA,IAClD,CAAC;AAAA,IACD,CAAC;AAAA,EACF;AACD,CAAC;;;ANXK,IAAM,WAAN,MAAM,UAAS;AAAA,EACrB,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO,SAAmD,CAAC;AAAA,EAClD;AAAA,EACA;AAAA,EAED,YAAY,UAAoB;AACvC,cAAS,YAAY;AACrB,SAAK,WAAW,OAAO,OAAO,QAAQ;AACtC,SAAK,UAAM,YAAAC,SAAY;AAAA,MACtB,OAAO,KAAK,SAAS,IAAI;AAAA,MACzB,aAAa;AAAA,QACZ,KAAK,YAAAA,QAAK,eAAe;AAAA,QACzB,OAAO,YAAAA,QAAK,eAAe;AAAA,QAC3B,KAAK,YAAAA,QAAK,eAAe;AAAA,QACzB,KAAK,YAAAA,QAAK,eAAe;AAAA,MAC1B;AAAA,MACA,OAAO,OAAO;AAAA,QACb,YAAY,UAAS;AAAA,MACtB;AAAA,IACD,CAAC;AACD,cAAS,uBAAuB;AAAA,EACjC;AAAA,EAEA,MAAM,IAAY;AACjB,QAAI,UAAS,QAAQ,OAAW,QAAO,UAAS,MAAM,IAAI,cAAc,iCAAiC,CAAC,CAAC,CAAC;AAC5G,cAAS,MAAM;AAAA,EAChB;AAAA,EAEA,IAAI,KAAK;AACR,QAAI,UAAS,QAAQ,OAAW,QAAO,UAAS,MAAM,IAAI,cAAc,qCAAqC,CAAC,CAAC,CAAC;AAChH,WAAO,UAAS;AAAA,EACjB;AAAA,EAEA,cAAc,MAAc,MAAM,KAAK;AACtC,WAAO,CAAC,KAAK,SAAS,IAAI,MAAM,IAAI,EAAE,KAAK,GAAG;AAAA,EAC/C;AAAA,EAEA,MAAM,QAAQ;AACb,QAAI;AACH,YAAM,SAAS,UAAS,OAAO,OAAO,KAAK,CAAC,CAAC;AAC7C,YAAM,SAAS,UAAS,OAAO,OAAO,KAAK,CAAC,CAAC;AAAA,IAC9C,SAAS,OAAO;AACf,gBAAS,MAAM,IAAI,cAAc,2BAA2B,CAAC,GAAG,KAAK,CAAC;AAAA,IACvE;AAAA,EACD;AAAA,EAEA,OAAO,KAAuB,UAA+B;AAC5D,UAAM,cAAc,mBAAE,SAAS,UAAU,QAAQ,GAAG;AACpD,QAAI,CAAC,YAAY,OAAO;AACvB,gBAAS;AAAA,QACR,IAAI,cAAc;AAAA,EAAwC,YAAY,MAAM,SAAS,CAAC,IAAI;AAAA,UACzF,UAAU,YAAY,MAAM;AAAA,QAC7B,CAAC;AAAA,MACF;AAAA,IACD;AACA,WAAO,YAAY;AAAA,EACpB;AAAA,EAEA,OAAO,OAAO,UAAyB;AACtC,QAAI,UAAS,UAAW,QAAO,UAAS,MAAM,IAAI,cAAc,yCAAyC,CAAC,CAAC,CAAC;AAC5G,UAAM,mBAAmB,mBAAE,SAAS,qBAAqB,GAAG,QAAQ;AACpE,QAAI,CAAC,iBAAiB,OAAO;AAC5B,gBAAS;AAAA,QACR,IAAI,cAAc;AAAA,EAA2B,iBAAiB,MAAM,SAAS,CAAC,IAAI;AAAA,UACjF,UAAU,iBAAiB,MAAM;AAAA,QAClC,CAAC;AAAA,MACF;AAAA,IACD;AACA,WAAO,IAAI,UAAS,iBAAiB,KAAK;AAAA,EAC3C;AAAA,EAEA,OAAO,MAAM;AACZ,QAAI,CAAC,UAAS;AACb,aAAO,UAAS;AAAA,QACf,IAAI,cAAc,+FAA+F,CAAC,CAAC;AAAA,MACpH;AACD,WAAO,UAAS;AAAA,EACjB;AAAA,EAEA,OAAO,WAAW;AACjB,WAAO,UAAS;AAAA,EACjB;AAAA,EAEA,OAAO,GAAG,OAAkB,IAAY,SAAuB;AAC9D,cAAS,OAAO,KAAK,MAAM,CAAC;AAC5B,UAAM,SAAqB,EAAE,IAAI,OAAO,SAAS,OAAO,OAAO,SAAS,SAAS,CAAC,EAAE;AACpF,iBAAa,UAAS,OAAO,KAAK,GAAG,MAAM;AAAA,EAC5C;AAAA,EAEA,OAAO,yBAAyB;AAC/B,UAAM,UAAU;AAAA,MACf,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,SAAS;AAAA,IACV;AAEA,WAAO,QAAQ,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,IAAI,MAAM;AACnD,cAAQ,GAAG,QAAQ,YAAY;AAC9B,cAAM,SAAS,UAAS,OAAO,OAAO,KAAK,CAAC,GAAG,MAAM;AAAA,QAAC,GAAG,IAAI;AAC7D,gBAAQ,KAAK,MAAM,IAAI;AAAA,MACxB,CAAC;AAAA,IACF,CAAC;AAAA,EACF;AAAA,EAEA,OAAO,mBAAsB,IAAsB;AAClD,UAAM,QAAQ,GAAG;AACjB,cAAS,GAAG,SAAS,YAAY,MAAM,KAAK;AAC5C,WAAO;AAAA,EACR;AAAA,EAEA,OAAO,MAAM,OAA6B;AAEzC,YAAQ,MAAM,KAAK;AACnB,YAAQ,KAAK,CAAC;AAAA,EACf;AAAA,EAEA,OAAO,SAAS,MAAyC;AACxD,WAAO,GAAG,MAAM,UAAU,EAAE,OAAG,kBAAK,MAAM,MAAM,QAAQ,CAAC,CAAC;AAAA,EAC3D;AACD;;;AD5HA,IAAM,WAAW,CAAC,QACjB,mBAAE;AAAA,EACD,mBAAE,KAAmB,GAAG,EAAE,KAAK,CAAC,UAAU;AACzC,UAAMC,OAAM,mCAAmC,SAAS,IAAI,EAAE,SAAS,MAAM,qBAAqB;AAClG,UAAM,QAAQ,QAAQ,CAAC,MAAM,cAAc;AAC3C,QAAI,MAAO,QAAO;AAClB,UAAM,2BAAU,KAAKA,MAAK,KAAK;AAAA,EAChC,CAAC;AACF;AAEM,IAAM,eAAe,CAAC,QAC5B,mBAAE;AAAA,EACD,mBAAE;AAAA,IACD,SAAS,GAAG,EACV,KAAK,mBAAE,IAAI,GAAG,kBAAkB,CAAC,EACjC,KAAK,CAAC,UAAU,MAAM,CAAC,CAAC;AAAA,EAC3B;AAAA,EACA,EAAE,QAAQ,OAAO,EAAE,MAAM,UAAU,QAAQ,SAAS,GAAG;AACxD;AAEM,IAAM,gBAAgB,CAAC,QAC7B,mBAAE,OAAgC,mBAAE,QAAQ,SAAS,GAAG,CAAC,GAAG;AAAA,EAC3D,QAAQ,OAAO,EAAE,MAAM,UAAU,QAAQ,SAAS;AACnD,CAAC;AAEK,IAAM,sBAAsB,IAAI,0CAAuD;AACvF,IAAM,uBAAuB,IAAI,0CAAwD;AAEzF,IAAM,cAAc,CAA2B,OACrD,mBAAE,OAAoC,CAAC,UAAU;AAChD,QAAM,MAAM,oBAAoB,SAAS;AACzC,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,8BAA8B;AACxD,QAAM,YAAY,mBAAE,SAAS,GAAG,GAAG,GAAG,KAAK;AAC3C,SAAO,UAAU,QAAQ,UAAU,QAAQ,UAAU;AACtD,CAAC;AAEK,IAAM,eAAe,CAA2B,OACtD,mBAAE,OAAoC,CAAC,UAAU;AAChD,QAAM,MAAM,qBAAqB,SAAS;AAC1C,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,+BAA+B;AACzD,QAAM,YAAY,mBAAE,SAAS,GAAG,GAAG,GAAG,KAAK;AAC3C,SAAO,UAAU,QAAQ,UAAU,QAAQ,UAAU;AACtD,CAAC;;;AD/CF,IAAAC,mBAAyD;AAIlD,SAAS,2BAA2B,OAAkB;AAC5D,QAAM,eAAe,MAAM,SAAS,OAA8D,CAAC,KAAK,EAAE,OAAO,IAAI,QAAQ,MAAM;AAClI,QAAI,IAAI,IAAI,EAAG,KAAI,IAAI,EAAE,SAAS,KAAK,OAAO;AAAA,QACzC,KAAI,IAAI,IAAI,EAAE,OAAO,MAAM,UAAU,CAAC,OAAO,EAAE;AACpD,WAAO;AAAA,EACR,GAAG,CAAC,CAAC;AAEL,SAAO,IAAI,gBAAgB,OAAO,OAAO,YAAY,CAAC;AACvD;AAEO,SAAS,SAA2C,MAAS,OAA+B;AAClG,QAAM,WAAW,mBAAE,SAAS,MAAM,KAAK;AACvC,MAAI,SAAS,MAAO,QAAO,SAAS;AACpC,QAAM,2BAA2B,SAAS,KAAK;AAChD;","names":["import_valleyed","import_valleyed","pino","err","import_valleyed"]}