@xylex-group/athena 2.9.0 → 2.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/browser.cjs +828 -74
- package/dist/browser.cjs.map +1 -1
- package/dist/browser.d.cts +3 -3
- package/dist/browser.d.ts +3 -3
- package/dist/browser.js +825 -75
- package/dist/browser.js.map +1 -1
- package/dist/cli/index.cjs +748 -40
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.js +748 -40
- package/dist/cli/index.js.map +1 -1
- package/dist/{client-CfAE_QOj.d.cts → client-B7EQ_hPV.d.cts} +506 -22
- package/dist/{client-D6EIJdQS.d.ts → client-BYii6dU9.d.ts} +506 -22
- package/dist/index.cjs +828 -74
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +825 -75
- package/dist/index.js.map +1 -1
- package/dist/{react-email-BvJ3fj_F.d.cts → module-DC96HJa3.d.cts} +97 -2
- package/dist/{react-email-PLAJuZuO.d.ts → module-DbHlxpeR.d.ts} +97 -2
- package/dist/next/client.cjs +756 -40
- package/dist/next/client.cjs.map +1 -1
- package/dist/next/client.d.cts +3 -4
- package/dist/next/client.d.ts +3 -4
- package/dist/next/client.js +756 -40
- package/dist/next/client.js.map +1 -1
- package/dist/next/server.cjs +756 -40
- package/dist/next/server.cjs.map +1 -1
- package/dist/next/server.d.cts +2 -2
- package/dist/next/server.d.ts +2 -2
- package/dist/next/server.js +756 -40
- package/dist/next/server.js.map +1 -1
- package/dist/react.cjs +1 -1
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +2 -3
- package/dist/react.d.ts +2 -3
- package/dist/react.js +1 -1
- package/dist/react.js.map +1 -1
- package/dist/{shared-BW6hoLBY.d.cts → shared-BMVGMnti.d.cts} +3 -1
- package/dist/{shared-BiJvoURI.d.ts → shared-DRptGBWP.d.ts} +3 -1
- package/package.json +1 -1
package/dist/browser.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/gateway/errors.ts","../src/gateway/url.ts","../src/cookies/base64.ts","../src/cookies/cookie-utils.ts","../src/cookies/crypto.ts","../src/cookies/session-store.ts","../src/cookies/index.ts","../package.json","../src/sdk-version.ts","../src/gateway/client.ts","../src/sql-identifiers.ts","../src/auth/limits.ts","../src/auth/react-email.ts","../src/auth/client.ts","../src/utils/parse-boolean-flag.ts","../src/auxiliaries.ts","../src/db/module.ts","../src/storage/file.ts","../src/storage/module.ts","../src/client-builder.ts","../src/query-ast.ts","../src/gateway/structured-select.ts","../src/query-transport.ts","../src/query-debug-ast.ts","../src/query-tracing.ts","../src/schema/model-target.ts","../src/client.ts","../src/gateway/types.ts","../src/schema/definitions.ts","../src/schema/model-form.ts","../src/schema/table-columns.ts","../src/schema/table-schemas.ts","../src/schema/table-builder.ts","../src/schema/typed-client.ts","../src/generator/schema-selection.ts","../src/generator/table-selection.ts","../src/generator/env.ts","../src/generator/postgres-type-mapping.ts","../src/auth/server.ts","../src/browser.ts"],"names":["identifier","aliasIdentifier","baseIdentifier","isRecord","SDK_NAME","SDK_HEADER_VALUE","NO_CACHE_HEADER_VALUE","normalizeHeaderValue","isCacheControlHeaderName","parseResponseBody","resolveRequestId","resolveErrorMessage","buildHeaders","token","sessions","parseBooleanFlag","message","table","kind","resolveErrorHint","callAthena","firstNonEmptyString","resolveStructuredErrorPayload","stringifyFilterValue","filterMethods","z","createTableBuilder","normalizeOptionalString","readHeaderBagValue","resolveSessionContextOptions","isDynamicBaseURLConfig"],"mappings":"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","file":"browser.cjs","sourcesContent":["import type {\n AthenaGatewayEndpointPath,\n AthenaGatewayErrorCode,\n AthenaGatewayErrorDetails,\n AthenaGatewayMethod,\n AthenaGatewayResponse,\n} from './types.js'\n\nexport interface AthenaGatewayErrorInput {\n code: AthenaGatewayErrorCode\n message: string\n status?: number\n endpoint?: AthenaGatewayEndpointPath\n method?: AthenaGatewayMethod\n requestId?: string\n hint?: string\n cause?: string\n}\n\n/**\n * Canonical error for gateway failures.\n * Holds request context and machine-readable classification.\n */\nexport class AthenaGatewayError extends Error {\n readonly code: AthenaGatewayErrorCode\n readonly status: number\n readonly endpoint?: AthenaGatewayEndpointPath\n readonly method?: AthenaGatewayMethod\n readonly requestId?: string\n readonly hint?: string\n readonly causeDetail?: string\n\n constructor(input: AthenaGatewayErrorInput) {\n super(input.message)\n this.name = 'AthenaGatewayError'\n this.code = input.code\n this.status = input.status ?? 0\n this.endpoint = input.endpoint\n this.method = input.method\n this.requestId = input.requestId\n this.hint = input.hint\n this.causeDetail = input.cause\n }\n\n toDetails(): AthenaGatewayErrorDetails {\n return {\n code: this.code,\n message: this.message,\n status: this.status,\n endpoint: this.endpoint,\n method: this.method,\n requestId: this.requestId,\n hint: this.hint,\n cause: this.causeDetail,\n }\n }\n\n static fromResponse<T>(\n response: AthenaGatewayResponse<T>,\n fallback: Omit<AthenaGatewayErrorInput, 'code' | 'message' | 'status'>,\n ) {\n const details = response.errorDetails\n if (details) {\n return new AthenaGatewayError({\n code: details.code,\n message: details.message,\n status: details.status,\n endpoint: details.endpoint ?? fallback.endpoint,\n method: details.method ?? fallback.method,\n requestId: details.requestId ?? fallback.requestId,\n hint: details.hint,\n cause: details.cause,\n })\n }\n\n return new AthenaGatewayError({\n code: 'HTTP_ERROR',\n message: response.error ?? 'Gateway request failed',\n status: response.status,\n endpoint: fallback.endpoint,\n method: fallback.method,\n requestId: fallback.requestId,\n })\n }\n}\n\nexport function isAthenaGatewayError(error: unknown): error is AthenaGatewayError {\n return error instanceof AthenaGatewayError\n}\n","import { AthenaGatewayError } from './errors.ts'\n\nexport const ATHENA_DEFAULT_BASE_URL = 'https://athena-db.com'\n\nfunction describeReceivedValue(value: unknown): string {\n if (value === undefined) return 'undefined'\n if (value === null) return 'null'\n if (typeof value === 'string') {\n return value.trim().length > 0 ? JSON.stringify(value) : 'an empty string'\n }\n return `${typeof value} ${JSON.stringify(value)}`\n}\n\nfunction invalidBaseUrlError(message: string, hint: string): AthenaGatewayError {\n return new AthenaGatewayError({\n code: 'INVALID_URL',\n message,\n status: 0,\n hint,\n })\n}\n\nexport interface NormalizeAthenaGatewayBaseUrlOptions {\n defaultBaseUrl?: string\n label?: string\n}\n\nexport function normalizeAthenaGatewayBaseUrl(\n input: string | null | undefined,\n options: NormalizeAthenaGatewayBaseUrlOptions = {},\n): string {\n const label = options.label ?? 'Athena gateway base URL'\n const candidate = input ?? options.defaultBaseUrl\n\n if (candidate === undefined || candidate === null) {\n throw invalidBaseUrlError(\n `${label} must be a non-empty absolute http(s) URL. Received ${describeReceivedValue(input)}.`,\n 'Set ATHENA_URL (or pass createClient(url, ...)) to a full URL such as \"https://mirror3.athena-db.com\".',\n )\n }\n\n const trimmed = candidate.trim()\n if (!trimmed) {\n throw invalidBaseUrlError(\n `${label} must be a non-empty absolute http(s) URL. Received ${describeReceivedValue(candidate)}.`,\n 'Set ATHENA_URL (or pass createClient(url, ...)) to a full URL such as \"https://mirror3.athena-db.com\".',\n )\n }\n\n let parsed: URL\n try {\n parsed = new URL(trimmed)\n } catch {\n throw invalidBaseUrlError(\n `${label} must be a valid absolute http(s) URL. Received ${describeReceivedValue(candidate)}.`,\n 'Use a full URL including the protocol, for example \"https://mirror3.athena-db.com\".',\n )\n }\n\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n throw invalidBaseUrlError(\n `${label} must use http or https. Received ${JSON.stringify(trimmed)}.`,\n 'Use an Athena gateway URL such as \"https://mirror3.athena-db.com\".',\n )\n }\n\n if (parsed.search || parsed.hash) {\n throw invalidBaseUrlError(\n `${label} must not include query parameters or hash fragments. Received ${JSON.stringify(trimmed)}.`,\n 'Pass only the base URL. Endpoint paths such as \"/gateway/fetch\" are appended by the SDK.',\n )\n }\n\n return parsed.toString().replace(/\\/+$/, '')\n}\n\nexport function buildAthenaGatewayUrl(baseUrl: string, path: string): string {\n if (!path.startsWith('/')) {\n throw invalidBaseUrlError(\n `Athena gateway path must start with \"/\". Received ${JSON.stringify(path)}.`,\n 'Use a leading slash such as \"/gateway/fetch\" or \"/\".',\n )\n }\n\n return `${baseUrl}${path}`\n}\n","function getAtob(): ((input: string) => string) | undefined {\n const candidate = (globalThis as { atob?: unknown }).atob\n return typeof candidate === 'function' ? (candidate as (input: string) => string) : undefined\n}\n\nfunction getBtoa(): ((input: string) => string) | undefined {\n const candidate = (globalThis as { btoa?: unknown }).btoa\n return typeof candidate === 'function' ? (candidate as (input: string) => string) : undefined\n}\n\nfunction bytesToBinaryString(bytes: Uint8Array): string {\n let result = ''\n for (const byte of bytes) {\n result += String.fromCharCode(byte)\n }\n return result\n}\n\nfunction binaryStringToBytes(binary: string): Uint8Array {\n const bytes = new Uint8Array(binary.length)\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i)\n }\n return bytes\n}\n\nfunction encodeBase64(bytes: Uint8Array): string {\n const btoaFn = getBtoa()\n if (btoaFn) {\n return btoaFn(bytesToBinaryString(bytes))\n }\n return Buffer.from(bytes).toString('base64')\n}\n\nfunction decodeBase64(base64: string): Uint8Array {\n const atobFn = getAtob()\n if (atobFn) {\n return binaryStringToBytes(atobFn(base64))\n }\n return new Uint8Array(Buffer.from(base64, 'base64'))\n}\n\nexport function encodeBytesToBase64Url(bytes: Uint8Array): string {\n return encodeBase64(bytes).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/g, '')\n}\n\nexport function encodeStringToBase64Url(value: string): string {\n const bytes = new TextEncoder().encode(value)\n return encodeBytesToBase64Url(bytes)\n}\n\nexport function decodeBase64UrlToBytes(value: string): Uint8Array {\n const normalized = value.replace(/-/g, '+').replace(/_/g, '/')\n const paddingLength = normalized.length % 4\n const padded = paddingLength === 0 ? normalized : `${normalized}${'='.repeat(4 - paddingLength)}`\n return decodeBase64(padded)\n}\n\nexport function decodeBase64UrlToString(value: string): string {\n return new TextDecoder().decode(decodeBase64UrlToBytes(value))\n}\n","import type { AthenaCookieOptions } from './types.ts'\n\nfunction tryDecode(str: string): string {\n if (str.indexOf('%') === -1) {\n return str\n }\n try {\n return decodeURIComponent(str)\n } catch {\n return str\n }\n}\n\nexport interface CookieAttributes {\n value: string\n 'max-age'?: number\n expires?: Date\n domain?: string\n path?: string\n secure?: boolean\n httponly?: boolean\n partitioned?: boolean\n samesite?: 'strict' | 'lax' | 'none'\n [key: string]: unknown\n}\n\nexport const SECURE_COOKIE_PREFIX = '__Secure-'\nexport const HOST_COOKIE_PREFIX = '__Host-'\n\n/**\n * Remove __Secure- or __Host- prefix from cookie name.\n */\nexport function stripSecureCookiePrefix(cookieName: string): string {\n if (cookieName.startsWith(SECURE_COOKIE_PREFIX)) {\n return cookieName.slice(SECURE_COOKIE_PREFIX.length)\n }\n if (cookieName.startsWith(HOST_COOKIE_PREFIX)) {\n return cookieName.slice(HOST_COOKIE_PREFIX.length)\n }\n return cookieName\n}\n\n/**\n * Split a comma-joined `Set-Cookie` header string into individual cookies.\n */\nexport function splitSetCookieHeader(setCookie: string): string[] {\n if (!setCookie) {\n return []\n }\n\n const result: string[] = []\n let start = 0\n let i = 0\n\n while (i < setCookie.length) {\n if (setCookie[i] === ',') {\n let j = i + 1\n while (j < setCookie.length && setCookie[j] === ' ') {\n j++\n }\n while (j < setCookie.length && setCookie[j] !== '=' && setCookie[j] !== ';' && setCookie[j] !== ',') {\n j++\n }\n\n if (j < setCookie.length && setCookie[j] === '=') {\n const part = setCookie.slice(start, i).trim()\n if (part) {\n result.push(part)\n }\n start = i + 1\n while (start < setCookie.length && setCookie[start] === ' ') {\n start++\n }\n i = start\n continue\n }\n }\n i++\n }\n\n const last = setCookie.slice(start).trim()\n if (last) {\n result.push(last)\n }\n\n return result\n}\n\nexport function parseSetCookieHeader(setCookie: string): Map<string, CookieAttributes> {\n const cookies = new Map<string, CookieAttributes>()\n const cookieArray = splitSetCookieHeader(setCookie)\n\n for (const cookieString of cookieArray) {\n const parts = cookieString.split(';').map((part) => part.trim())\n const [nameValue, ...attributes] = parts\n const [name, ...valueParts] = (nameValue || '').split('=')\n if (!name) {\n continue\n }\n\n const value = unquoteCookieValue(valueParts.join('='))\n const decodedValue = tryDecode(value)\n const attrObj: CookieAttributes = { value: decodedValue }\n\n for (const attribute of attributes) {\n const [attrName, ...attrValueParts] = attribute.split('=')\n const attrValue = attrValueParts.join('=')\n const normalizedAttrName = attrName.trim().toLowerCase()\n switch (normalizedAttrName) {\n case 'max-age':\n attrObj['max-age'] = attrValue ? parseInt(attrValue.trim(), 10) : undefined\n break\n case 'expires':\n attrObj.expires = attrValue ? new Date(attrValue.trim()) : undefined\n break\n case 'domain':\n attrObj.domain = attrValue ? attrValue.trim() : undefined\n break\n case 'path':\n attrObj.path = attrValue ? attrValue.trim() : undefined\n break\n case 'secure':\n attrObj.secure = true\n break\n case 'httponly':\n attrObj.httponly = true\n break\n case 'samesite':\n attrObj.samesite = attrValue ? (attrValue.trim().toLowerCase() as 'strict' | 'lax' | 'none') : undefined\n break\n case 'partitioned':\n attrObj.partitioned = true\n break\n default:\n attrObj[normalizedAttrName] = attrValue ? attrValue.trim() : true\n break\n }\n }\n\n cookies.set(name, attrObj)\n }\n\n return cookies\n}\n\nexport function toCookieOptions(attributes: CookieAttributes): AthenaCookieOptions {\n return {\n maxAge: attributes['max-age'],\n expires: attributes.expires,\n domain: attributes.domain,\n path: attributes.path,\n secure: attributes.secure,\n httpOnly: attributes.httponly,\n sameSite: attributes.samesite,\n partitioned: attributes.partitioned,\n }\n}\n\n/**\n * Cookie-name token char set per RFC 7230 §3.2.6.\n */\nexport const cookieNameRegex = /^[\\w!#$%&'*.^`|~+-]+$/\n\nfunction unquoteCookieValue(value: string): string {\n if (value.length < 2 || !value.startsWith('\"') || !value.endsWith('\"')) {\n return value\n }\n return value.slice(1, -1)\n}\n\n/**\n * Parse a `Cookie` header into a key/value map.\n */\nexport function parseCookies(cookieHeader: string): Map<string, string> {\n const cookies = cookieHeader.split('; ')\n const cookieMap = new Map<string, string>()\n cookies.forEach((cookie) => {\n const [name, value] = cookie.split(/=(.*)/s)\n cookieMap.set(name as string, value as string)\n })\n return cookieMap\n}\n\n/**\n * Add or replace a cookie in the request `Cookie` header.\n */\nexport function setRequestCookie(headers: Headers, name: string, value: string): void {\n const cookieMap = parseCookies(headers.get('cookie') || '')\n if (cookieNameRegex.test(name)) {\n cookieMap.set(name, value)\n }\n headers.set(\n 'cookie',\n Array.from(cookieMap, ([key, currentValue]) => `${key}=${encodeURIComponent(currentValue)}`).join('; '),\n )\n}\n\n/**\n * Merge `Set-Cookie` values into a `Cookie` header.\n */\nexport function applySetCookies(target: Headers, setCookieValues: Iterable<string>): void {\n const cookieMap = parseCookies(target.get('cookie') || '')\n for (const setCookie of setCookieValues) {\n for (const [name, attr] of parseSetCookieHeader(setCookie)) {\n if (cookieNameRegex.test(name)) {\n cookieMap.set(name, attr.value)\n }\n }\n }\n target.set(\n 'cookie',\n Array.from(cookieMap, ([key, currentValue]) => `${key}=${encodeURIComponent(currentValue)}`).join('; '),\n )\n}\n\nexport function setCookieToHeader(headers: Headers) {\n return (context: { response: Response }) => {\n const setCookieHeader = context.response.headers.get('set-cookie')\n if (!setCookieHeader) {\n return\n }\n applySetCookies(headers, [setCookieHeader])\n }\n}\n","import { decodeBase64UrlToString, encodeBytesToBase64Url, encodeStringToBase64Url } from './base64.ts'\n\ntype JwtPayload = Record<string, unknown>\n\nconst HS256_ALG = 'HS256'\n\ninterface SubtleCryptoLike {\n importKey: (\n format: 'raw',\n keyData: Uint8Array,\n algorithm: { name: 'HMAC'; hash: 'SHA-256' },\n extractable: boolean,\n keyUsages: Array<'sign' | 'verify'>,\n ) => Promise<unknown>\n sign: (algorithm: 'HMAC', key: unknown, data: Uint8Array) => Promise<ArrayBuffer>\n}\n\ninterface WebCryptoLike {\n subtle?: SubtleCryptoLike\n}\n\nasync function getSubtleCrypto(): Promise<SubtleCryptoLike> {\n const globalCrypto = (globalThis as { crypto?: WebCryptoLike }).crypto\n if (globalCrypto?.subtle) {\n return globalCrypto.subtle\n }\n const { webcrypto } = await import('node:crypto')\n const subtle = (webcrypto as unknown as WebCryptoLike).subtle\n if (!subtle) {\n throw new Error('Web Crypto subtle API is unavailable.')\n }\n return subtle\n}\n\nasync function importHmacKey(secret: string, usage: 'sign' | 'verify'): Promise<unknown> {\n const subtle = await getSubtleCrypto()\n return subtle.importKey(\n 'raw',\n new TextEncoder().encode(secret),\n {\n name: 'HMAC',\n hash: 'SHA-256',\n },\n false,\n [usage] as Array<'sign' | 'verify'>,\n )\n}\n\nfunction bufferToBytes(buffer: ArrayBuffer): Uint8Array {\n return new Uint8Array(buffer)\n}\n\nfunction parseJwtPayload(payloadSegment: string): JwtPayload | null {\n try {\n const decoded = decodeBase64UrlToString(payloadSegment)\n const payload = JSON.parse(decoded) as unknown\n if (!payload || typeof payload !== 'object') {\n return null\n }\n return payload as JwtPayload\n } catch {\n return null\n }\n}\n\nfunction isJwtExpired(payload: JwtPayload): boolean {\n const exp = payload.exp\n if (typeof exp !== 'number') {\n return false\n }\n return exp < Math.floor(Date.now() / 1000)\n}\n\nexport async function signHmacBase64Url(secret: string, value: string): Promise<string> {\n const subtle = await getSubtleCrypto()\n const key = await importHmacKey(secret, 'sign')\n const signature = await subtle.sign('HMAC', key, new TextEncoder().encode(value))\n return encodeBytesToBase64Url(bufferToBytes(signature))\n}\n\nexport async function signJwtHS256(\n payload: JwtPayload,\n secret: string,\n expiresIn = 60 * 5,\n): Promise<string> {\n const now = Math.floor(Date.now() / 1000)\n const header = { alg: HS256_ALG, typ: 'JWT' }\n const fullPayload = {\n ...payload,\n iat: now,\n exp: now + expiresIn,\n }\n const headerPart = encodeStringToBase64Url(JSON.stringify(header))\n const payloadPart = encodeStringToBase64Url(JSON.stringify(fullPayload))\n const message = `${headerPart}.${payloadPart}`\n const signature = await signHmacBase64Url(secret, message)\n return `${message}.${signature}`\n}\n\nexport async function verifyJwtHS256<TPayload extends JwtPayload = JwtPayload>(\n token: string,\n secret: string,\n): Promise<TPayload | null> {\n const parts = token.split('.')\n if (parts.length !== 3) {\n return null\n }\n\n const [headerPart, payloadPart, signaturePart] = parts\n if (!headerPart || !payloadPart || !signaturePart) {\n return null\n }\n\n let header: { alg?: string } | null = null\n try {\n header = JSON.parse(decodeBase64UrlToString(headerPart)) as { alg?: string }\n } catch {\n return null\n }\n\n if (!header || header.alg !== HS256_ALG) {\n return null\n }\n\n const payload = parseJwtPayload(payloadPart)\n if (!payload) {\n return null\n }\n\n const expectedSignature = await signHmacBase64Url(secret, `${headerPart}.${payloadPart}`)\n if (expectedSignature !== signaturePart) {\n return null\n }\n\n if (isJwtExpired(payload)) {\n return null\n }\n\n return payload as TPayload\n}\n","import { decodeBase64UrlToString } from './base64.ts'\nimport { parseCookies } from './cookie-utils.ts'\nimport type { AthenaCookieContextRuntime, AthenaCookieOptions } from './types.ts'\n\nconst ALLOWED_COOKIE_SIZE = 4096\nconst ESTIMATED_EMPTY_COOKIE_SIZE = 200\nconst CHUNK_SIZE = ALLOWED_COOKIE_SIZE - ESTIMATED_EMPTY_COOKIE_SIZE\n\ninterface StoreCookie {\n name: string\n value: string\n attributes: AthenaCookieOptions\n}\n\ntype Chunks = Record<string, string>\n\nfunction getChunkIndex(cookieName: string): number {\n const parts = cookieName.split('.')\n const lastPart = parts[parts.length - 1]\n const index = parseInt(lastPart || '0', 10)\n return Number.isNaN(index) ? 0 : index\n}\n\nfunction readExistingChunks(cookieName: string, ctx: AthenaCookieContextRuntime): Chunks {\n const chunks: Chunks = {}\n const cookies = parseCookies(ctx.headers?.get('cookie') || '')\n for (const [name, value] of cookies) {\n if (name.startsWith(cookieName)) {\n chunks[name] = value\n }\n }\n return chunks\n}\n\nfunction joinChunks(chunks: Chunks): string {\n const sortedKeys = Object.keys(chunks).sort((left, right) => getChunkIndex(left) - getChunkIndex(right))\n return sortedKeys.map((key) => chunks[key]).join('')\n}\n\nfunction chunkCookie(storeName: string, cookie: StoreCookie, chunks: Chunks, ctx: AthenaCookieContextRuntime): StoreCookie[] {\n const chunkCount = Math.ceil(cookie.value.length / CHUNK_SIZE)\n if (chunkCount === 1) {\n chunks[cookie.name] = cookie.value\n return [cookie]\n }\n\n const cookies: StoreCookie[] = []\n for (let index = 0; index < chunkCount; index++) {\n const name = `${cookie.name}.${index}`\n const start = index * CHUNK_SIZE\n const value = cookie.value.substring(start, start + CHUNK_SIZE)\n cookies.push({\n ...cookie,\n name,\n value,\n })\n chunks[name] = value\n }\n\n ctx.logger?.debug?.(`CHUNKING_${storeName.toUpperCase()}_COOKIE`, {\n message: `${storeName} cookie exceeds allowed ${ALLOWED_COOKIE_SIZE} bytes.`,\n emptyCookieSize: ESTIMATED_EMPTY_COOKIE_SIZE,\n valueSize: cookie.value.length,\n chunkCount,\n chunks: cookies.map((entry) => entry.value.length + ESTIMATED_EMPTY_COOKIE_SIZE),\n })\n\n return cookies\n}\n\nfunction getCleanCookies(chunks: Chunks, cookieOptions: AthenaCookieOptions): Record<string, StoreCookie> {\n const cleanedChunks: Record<string, StoreCookie> = {}\n for (const name in chunks) {\n cleanedChunks[name] = {\n name,\n value: '',\n attributes: {\n ...cookieOptions,\n maxAge: 0,\n },\n }\n }\n return cleanedChunks\n}\n\nconst storeFactory =\n (storeName: string) =>\n (cookieName: string, cookieOptions: AthenaCookieOptions, ctx: AthenaCookieContextRuntime) => {\n const chunks = readExistingChunks(cookieName, ctx)\n\n return {\n getValue(): string {\n return joinChunks(chunks)\n },\n hasChunks(): boolean {\n return Object.keys(chunks).length > 0\n },\n chunk(value: string, options?: Partial<AthenaCookieOptions>): StoreCookie[] {\n const cleanedChunks = getCleanCookies(chunks, cookieOptions)\n for (const name in chunks) {\n delete chunks[name]\n }\n\n const cookies: Record<string, StoreCookie> = cleanedChunks\n const chunked = chunkCookie(\n storeName,\n {\n name: cookieName,\n value,\n attributes: {\n ...cookieOptions,\n ...options,\n },\n },\n chunks,\n ctx,\n )\n for (const chunk of chunked) {\n cookies[chunk.name] = chunk\n }\n return Object.values(cookies)\n },\n clean(): StoreCookie[] {\n const cleanedChunks = getCleanCookies(chunks, cookieOptions)\n for (const name in chunks) {\n delete chunks[name]\n }\n return Object.values(cleanedChunks)\n },\n setCookies(cookies: StoreCookie[]): void {\n for (const cookie of cookies) {\n ctx.setCookie(cookie.name, cookie.value, cookie.attributes)\n }\n },\n }\n }\n\nexport const createSessionStore = storeFactory('Session')\nexport const createAccountStore = storeFactory('Account')\n\nexport function getChunkedCookie(ctx: AthenaCookieContextRuntime, cookieName: string): string | null {\n const value = ctx.getCookie?.(cookieName)\n if (value) {\n return value\n }\n\n const chunks: Array<{ index: number; value: string }> = []\n const cookieHeader = ctx.headers?.get('cookie')\n if (!cookieHeader) {\n return null\n }\n\n for (const [name, parsedValue] of parseCookies(cookieHeader)) {\n if (!name.startsWith(`${cookieName}.`)) {\n continue\n }\n const parts = name.split('.')\n const indexStr = parts.at(-1)\n const index = parseInt(indexStr || '0', 10)\n if (!Number.isNaN(index)) {\n chunks.push({ index, value: parsedValue })\n }\n }\n\n if (chunks.length === 0) {\n return null\n }\n\n chunks.sort((left, right) => left.index - right.index)\n return chunks.map((entry) => entry.value).join('')\n}\n\n/**\n * SDK helper to read an account cookie value.\n * - If plain JSON: returns parsed value.\n * - If base64url-encoded JSON: returns parsed value.\n * - Otherwise: returns the raw cookie string.\n */\nexport async function getAccountCookie(\n ctx: AthenaCookieContextRuntime,\n cookieName = ctx.context.authCookies.accountData.name,\n): Promise<unknown | null> {\n const value = getChunkedCookie(ctx, cookieName)\n if (!value) {\n return null\n }\n\n try {\n return JSON.parse(value) as unknown\n } catch {\n // Fall through and try base64url payload parsing.\n }\n\n try {\n return JSON.parse(decodeBase64UrlToString(value)) as unknown\n } catch {\n return value\n }\n}\n","import { decodeBase64UrlToString, encodeStringToBase64Url } from './base64.ts'\r\nimport {\r\n HOST_COOKIE_PREFIX,\r\n SECURE_COOKIE_PREFIX,\r\n parseCookies,\r\n parseSetCookieHeader,\r\n setCookieToHeader,\r\n setRequestCookie,\r\n splitSetCookieHeader,\r\n stripSecureCookiePrefix,\r\n toCookieOptions,\r\n} from './cookie-utils.ts'\r\nimport { signHmacBase64Url, signJwtHS256, verifyJwtHS256 } from './crypto.ts'\r\nimport { createAccountStore, createSessionStore, getAccountCookie, getChunkedCookie } from './session-store.ts'\r\nimport type {\r\n AthenaAuthCookie,\r\n AthenaAuthCookies,\r\n AthenaCookieContextRuntime,\r\n AthenaCookieOptions,\r\n AthenaCookiesOptions,\r\n AthenaCookieVersionResolver,\r\n AthenaGetCookieCacheConfig,\r\n AthenaSessionPair,\r\n} from './types.ts'\r\n\r\nconst DEFAULT_COOKIE_PREFIX = 'athena-auth'\r\nconst LEGACY_COOKIE_PREFIX = 'better-auth'\r\nconst DEFAULT_SESSION_MAX_AGE = 7 * 24 * 60 * 60\r\nconst DEFAULT_CACHE_MAX_AGE = 60 * 5\r\n\r\nfunction isProductionRuntime(): boolean {\r\n return typeof process !== 'undefined' && process.env?.NODE_ENV === 'production'\r\n}\r\n\r\nfunction getEnvironmentSecret(): string | undefined {\r\n if (typeof process === 'undefined') {\r\n return undefined\r\n }\r\n return process.env?.ATHENA_AUTH_SECRET || process.env?.BETTER_AUTH_SECRET || process.env?.AUTH_SECRET\r\n}\r\n\r\nfunction isDynamicBaseURLConfig(baseURL: AthenaCookiesOptions['baseURL']): boolean {\r\n return (\r\n typeof baseURL === 'object' &&\r\n baseURL !== null &&\r\n 'allowedHosts' in baseURL &&\r\n Array.isArray((baseURL as { allowedHosts?: unknown }).allowedHosts)\r\n )\r\n}\r\n\r\nfunction resolveCookiePrefixes(primaryPrefix: string): string[] {\r\n const prefixes = [primaryPrefix]\r\n if (!prefixes.includes(DEFAULT_COOKIE_PREFIX)) {\r\n prefixes.push(DEFAULT_COOKIE_PREFIX)\r\n }\r\n if (!prefixes.includes(LEGACY_COOKIE_PREFIX)) {\r\n prefixes.push(LEGACY_COOKIE_PREFIX)\r\n }\r\n return prefixes\r\n}\r\n\r\nfunction createError(message: string): Error {\r\n return new Error(`@xylex-group/athena/cookies: ${message}`)\r\n}\r\n\r\nfunction getSecretOrThrow(secret?: string): string {\r\n const resolved = secret || getEnvironmentSecret()\r\n if (!resolved) {\r\n throw createError(\r\n 'getCookieCache requires a secret. Pass `secret` or set ATHENA_AUTH_SECRET/BETTER_AUTH_SECRET/AUTH_SECRET.',\r\n )\r\n }\r\n return resolved\r\n}\r\n\r\nfunction asObject(value: unknown): Record<string, unknown> | null {\r\n if (!value || typeof value !== 'object') {\r\n return null\r\n }\r\n return value as Record<string, unknown>\r\n}\r\n\r\nfunction getSessionTokenFromPair(session: AthenaSessionPair): string {\r\n const token = session.session?.token\r\n if (typeof token !== 'string' || token.length === 0) {\r\n throw createError('setSessionCookie requires `session.session.token` to be a non-empty string.')\r\n }\r\n return token\r\n}\r\n\r\nasync function resolveCookieVersion(\r\n versionConfig: AthenaCookieVersionResolver | undefined,\r\n session: Record<string, unknown>,\r\n user: Record<string, unknown>,\r\n): Promise<string> {\r\n if (!versionConfig) {\r\n return '1'\r\n }\r\n if (typeof versionConfig === 'string') {\r\n return versionConfig\r\n }\r\n return versionConfig(session, user)\r\n}\r\n\r\nfunction getSessionCookieCacheName(cookiePrefix: string, cookieName: string, isSecure: boolean): string {\r\n return isSecure ? `${SECURE_COOKIE_PREFIX}${cookiePrefix}.${cookieName}` : `${cookiePrefix}.${cookieName}`\r\n}\r\n\r\nasync function setCookieValue(\r\n ctx: AthenaCookieContextRuntime,\r\n name: string,\r\n value: string,\r\n attributes: AthenaCookieOptions,\r\n): Promise<void> {\r\n const secret = ctx.context.secret\r\n if (secret && typeof ctx.setSignedCookie === 'function') {\r\n await ctx.setSignedCookie(name, value, secret, attributes)\r\n return\r\n }\r\n ctx.setCookie(name, value, attributes)\r\n}\r\n\r\nfunction parseJsonSafely<T>(value: string): T | null {\r\n try {\r\n return JSON.parse(value) as T\r\n } catch {\r\n return null\r\n }\r\n}\r\n\r\nfunction getIsSecureCookie(config: { isSecure?: boolean } | undefined): boolean {\r\n if (config?.isSecure !== undefined) {\r\n return config.isSecure\r\n }\r\n return isProductionRuntime()\r\n}\r\n\r\nexport function createCookieGetter(options: AthenaCookiesOptions) {\r\n const baseURLString = typeof options.baseURL === 'string' ? options.baseURL : undefined\r\n const dynamicProtocol =\r\n typeof options.baseURL === 'object' && options.baseURL !== null ? options.baseURL.protocol : undefined\r\n\r\n const secure =\r\n options.advanced?.useSecureCookies !== undefined\r\n ? options.advanced.useSecureCookies\r\n : dynamicProtocol === 'https'\r\n ? true\r\n : dynamicProtocol === 'http'\r\n ? false\r\n : baseURLString\r\n ? baseURLString.startsWith('https://')\r\n : isProductionRuntime()\r\n\r\n const secureCookiePrefix = secure ? SECURE_COOKIE_PREFIX : ''\r\n const crossSubdomainEnabled = !!options.advanced?.crossSubDomainCookies?.enabled\r\n const domain = crossSubdomainEnabled\r\n ? options.advanced?.crossSubDomainCookies?.domain || (baseURLString ? new URL(baseURLString).hostname : undefined)\r\n : undefined\r\n\r\n if (crossSubdomainEnabled && !domain && !isDynamicBaseURLConfig(options.baseURL)) {\r\n throw createError('baseURL is required when `crossSubDomainCookies.enabled` is true.')\r\n }\r\n\r\n function createCookie(cookieName: string, overrideAttributes: Partial<AthenaCookieOptions> = {}): AthenaAuthCookie {\r\n const prefix = options.advanced?.cookiePrefix || DEFAULT_COOKIE_PREFIX\r\n const name = options.advanced?.cookies?.[cookieName]?.name || `${prefix}.${cookieName}`\r\n const attributes = options.advanced?.cookies?.[cookieName]?.attributes || {}\r\n\r\n return {\r\n name: `${secureCookiePrefix}${name}`,\r\n attributes: {\r\n secure: !!secureCookiePrefix,\r\n sameSite: 'lax',\r\n path: '/',\r\n httpOnly: true,\r\n ...(crossSubdomainEnabled ? { domain } : {}),\r\n ...options.advanced?.defaultCookieAttributes,\r\n ...overrideAttributes,\r\n ...attributes,\r\n },\r\n }\r\n }\r\n\r\n return createCookie\r\n}\r\n\r\nexport function getCookies(options: AthenaCookiesOptions): AthenaAuthCookies {\r\n const createCookie = createCookieGetter(options)\r\n const sessionToken = createCookie('session_token', { maxAge: options.session?.expiresIn || DEFAULT_SESSION_MAX_AGE })\r\n const sessionData = createCookie('session_data', { maxAge: options.session?.cookieCache?.maxAge || DEFAULT_CACHE_MAX_AGE })\r\n const accountData = createCookie('account_data', { maxAge: options.session?.cookieCache?.maxAge || DEFAULT_CACHE_MAX_AGE })\r\n const dontRememberToken = createCookie('dont_remember')\r\n\r\n return {\r\n sessionToken: {\r\n name: sessionToken.name,\r\n attributes: sessionToken.attributes,\r\n },\r\n sessionData: {\r\n name: sessionData.name,\r\n attributes: sessionData.attributes,\r\n },\r\n dontRememberToken: {\r\n name: dontRememberToken.name,\r\n attributes: dontRememberToken.attributes,\r\n },\r\n accountData: {\r\n name: accountData.name,\r\n attributes: accountData.attributes,\r\n },\r\n }\r\n}\r\n\r\nexport async function setCookieCache(\r\n ctx: AthenaCookieContextRuntime,\r\n session: AthenaSessionPair,\r\n dontRememberMe: boolean,\r\n): Promise<void> {\r\n const cookieCacheConfig = ctx.context.options?.session?.cookieCache\r\n if (!cookieCacheConfig?.enabled) {\r\n return\r\n }\r\n\r\n const version = await resolveCookieVersion(\r\n cookieCacheConfig.version,\r\n session.session as Record<string, unknown>,\r\n session.user as Record<string, unknown>,\r\n )\r\n\r\n const sessionData = {\r\n session: session.session,\r\n user: session.user,\r\n updatedAt: Date.now(),\r\n version,\r\n }\r\n\r\n const baseAttributes = ctx.context.authCookies.sessionData.attributes\r\n const maxAge = dontRememberMe ? undefined : baseAttributes.maxAge\r\n const options: AthenaCookieOptions = {\r\n ...baseAttributes,\r\n maxAge,\r\n }\r\n const expiresAt = Date.now() + ((options.maxAge || 60) * 1000)\r\n const strategy = cookieCacheConfig.strategy || 'compact'\r\n const secret = getSecretOrThrow(ctx.context.secret)\r\n\r\n let encoded: string\r\n if (strategy === 'jwt') {\r\n encoded = await signJwtHS256(sessionData, secret, options.maxAge || DEFAULT_CACHE_MAX_AGE)\r\n } else if (strategy === 'jwe') {\r\n throw createError('`jwe` strategy is not supported by the SDK cookie helper.')\r\n } else {\r\n const signature = await signHmacBase64Url(\r\n secret,\r\n JSON.stringify({\r\n ...sessionData,\r\n expiresAt,\r\n }),\r\n )\r\n encoded = encodeStringToBase64Url(\r\n JSON.stringify({\r\n session: sessionData,\r\n expiresAt,\r\n signature,\r\n }),\r\n )\r\n }\r\n\r\n if (encoded.length > 4093) {\r\n const store = createSessionStore(ctx.context.authCookies.sessionData.name, options, ctx)\r\n const cookies = store.chunk(encoded, options)\r\n store.setCookies(cookies)\r\n } else {\r\n const store = createSessionStore(ctx.context.authCookies.sessionData.name, options, ctx)\r\n if (store.hasChunks()) {\r\n store.setCookies(store.clean())\r\n }\r\n ctx.setCookie(ctx.context.authCookies.sessionData.name, encoded, options)\r\n }\r\n}\r\n\r\nexport async function setSessionCookie(\r\n ctx: AthenaCookieContextRuntime,\r\n session: AthenaSessionPair,\r\n dontRememberMe?: boolean,\r\n overrides?: Partial<AthenaCookieOptions>,\r\n): Promise<void> {\r\n if (dontRememberMe === undefined && typeof ctx.getSignedCookie === 'function' && ctx.context.secret) {\r\n const existingFlag = await ctx.getSignedCookie(ctx.context.authCookies.dontRememberToken.name, ctx.context.secret)\r\n dontRememberMe = !!existingFlag\r\n }\r\n\r\n const resolvedDontRememberMe = dontRememberMe ?? false\r\n const token = getSessionTokenFromPair(session)\r\n const options = ctx.context.authCookies.sessionToken.attributes\r\n const maxAge = resolvedDontRememberMe ? undefined : ctx.context.sessionConfig?.expiresIn\r\n await setCookieValue(ctx, ctx.context.authCookies.sessionToken.name, token, {\r\n ...options,\r\n maxAge,\r\n ...overrides,\r\n })\r\n\r\n if (resolvedDontRememberMe) {\r\n await setCookieValue(\r\n ctx,\r\n ctx.context.authCookies.dontRememberToken.name,\r\n 'true',\r\n ctx.context.authCookies.dontRememberToken.attributes,\r\n )\r\n }\r\n\r\n await setCookieCache(ctx, session, resolvedDontRememberMe)\r\n ctx.context.setNewSession?.(session)\r\n}\r\n\r\n/**\r\n * Expires a cookie by setting `maxAge: 0` while preserving attributes.\r\n */\r\nexport function expireCookie(ctx: AthenaCookieContextRuntime, cookie: AthenaAuthCookie): void {\r\n ctx.setCookie(cookie.name, '', {\r\n ...cookie.attributes,\r\n maxAge: 0,\r\n })\r\n}\r\n\r\nexport function deleteSessionCookie(ctx: AthenaCookieContextRuntime, skipDontRememberMe?: boolean): void {\r\n expireCookie(ctx, ctx.context.authCookies.sessionToken)\r\n expireCookie(ctx, ctx.context.authCookies.sessionData)\r\n\r\n if (ctx.context.options?.account?.storeAccountCookie) {\r\n expireCookie(ctx, ctx.context.authCookies.accountData)\r\n const accountStore = createAccountStore(\r\n ctx.context.authCookies.accountData.name,\r\n ctx.context.authCookies.accountData.attributes,\r\n ctx,\r\n )\r\n accountStore.setCookies(accountStore.clean())\r\n }\r\n\r\n const sessionStore = createSessionStore(\r\n ctx.context.authCookies.sessionData.name,\r\n ctx.context.authCookies.sessionData.attributes,\r\n ctx,\r\n )\r\n sessionStore.setCookies(sessionStore.clean())\r\n\r\n if (!skipDontRememberMe) {\r\n expireCookie(ctx, ctx.context.authCookies.dontRememberToken)\r\n }\r\n}\r\n\r\nexport const getSessionCookie = (\r\n request: Request | Headers,\r\n config?:\r\n | {\r\n cookiePrefix?: string\r\n cookieName?: string\r\n path?: string\r\n }\r\n | undefined,\r\n): string | null => {\r\n const cookies = (request instanceof Headers || !('headers' in request) ? request : request.headers).get('cookie')\r\n if (!cookies) {\r\n return null\r\n }\r\n\r\n const { cookieName = 'session_token', cookiePrefix = 'athena-auth' } = config || {}\r\n const parsedCookie = parseCookies(cookies)\r\n const getCookie = (name: string): string | undefined =>\r\n parsedCookie.get(name) || parsedCookie.get(`${SECURE_COOKIE_PREFIX}${name}`)\r\n const candidateCookieNames = Array.from(new Set([\r\n cookieName,\r\n cookieName.replace(/_/g, '-'),\r\n cookieName.replace(/-/g, '_'),\r\n ])).filter(Boolean)\r\n for (const candidateName of candidateCookieNames) {\r\n const sessionToken =\r\n getCookie(`${cookiePrefix}.${candidateName}`) || getCookie(`${cookiePrefix}-${candidateName}`)\r\n if (sessionToken) {\r\n return sessionToken\r\n }\r\n }\r\n return null\r\n}\r\n\r\nexport const getCookieCache = async <\r\n SessionShape extends Record<string, unknown> = Record<string, unknown>,\r\n UserShape extends Record<string, unknown> = Record<string, unknown>,\r\n>(\r\n request: Request | Headers,\r\n config?: AthenaGetCookieCacheConfig<SessionShape, UserShape>,\r\n): Promise<{\r\n session: SessionShape\r\n user: UserShape\r\n updatedAt: number\r\n version?: string\r\n} | null> => {\r\n const headers = request instanceof Headers || !('headers' in request) ? request : request.headers\r\n const cookieHeader = headers.get('cookie')\r\n if (!cookieHeader) {\r\n return null\r\n }\r\n\r\n const parsedCookie = parseCookies(cookieHeader)\r\n const cookieName = config?.cookieName || 'session_data'\r\n const requestedPrefix = config?.cookiePrefix || DEFAULT_COOKIE_PREFIX\r\n const strategy = config?.strategy || 'compact'\r\n const cookiePrefixes = resolveCookiePrefixes(requestedPrefix)\r\n const isSecure = getIsSecureCookie(config)\r\n const secret = getSecretOrThrow(config?.secret)\r\n\r\n let sessionData: string | undefined\r\n\r\n for (const prefix of cookiePrefixes) {\r\n const candidate = getSessionCookieCacheName(prefix, cookieName, isSecure)\r\n const cookieValue = parsedCookie.get(candidate)\r\n if (cookieValue) {\r\n sessionData = cookieValue\r\n break\r\n }\r\n }\r\n\r\n if (!sessionData) {\r\n const reconstructedChunks: Array<{ index: number; value: string }> = []\r\n for (const prefix of cookiePrefixes) {\r\n const candidate = getSessionCookieCacheName(prefix, cookieName, isSecure)\r\n for (const [name, value] of parsedCookie.entries()) {\r\n if (!name.startsWith(`${candidate}.`)) {\r\n continue\r\n }\r\n const parts = name.split('.')\r\n const indexStr = parts[parts.length - 1]\r\n const index = parseInt(indexStr || '0', 10)\r\n if (!Number.isNaN(index)) {\r\n reconstructedChunks.push({ index, value })\r\n }\r\n }\r\n if (reconstructedChunks.length > 0) {\r\n break\r\n }\r\n }\r\n\r\n if (reconstructedChunks.length > 0) {\r\n reconstructedChunks.sort((left, right) => left.index - right.index)\r\n sessionData = reconstructedChunks.map((chunk) => chunk.value).join('')\r\n }\r\n }\r\n\r\n if (!sessionData) {\r\n return null\r\n }\r\n\r\n if (strategy === 'jwe') {\r\n throw createError(\r\n '`jwe` strategy is not supported by the SDK cookie helper. Use compact/jwt or pass cookie data through the auth server.',\r\n )\r\n }\r\n\r\n if (strategy === 'jwt') {\r\n const payload = await verifyJwtHS256<Record<string, unknown>>(sessionData, secret)\r\n if (!payload) {\r\n return null\r\n }\r\n const sessionRecord = asObject(payload.session)\r\n const userRecord = asObject(payload.user)\r\n const updatedAt = payload.updatedAt\r\n if (!sessionRecord || !userRecord || typeof updatedAt !== 'number') {\r\n return null\r\n }\r\n\r\n if (config?.version) {\r\n const cookieVersion = typeof payload.version === 'string' ? payload.version : '1'\r\n const expectedVersion =\r\n typeof config.version === 'string'\r\n ? config.version\r\n : await config.version(sessionRecord as SessionShape, userRecord as UserShape)\r\n if (cookieVersion !== expectedVersion) {\r\n return null\r\n }\r\n }\r\n\r\n return {\r\n session: sessionRecord as SessionShape,\r\n user: userRecord as UserShape,\r\n updatedAt,\r\n version: typeof payload.version === 'string' ? payload.version : undefined,\r\n }\r\n }\r\n\r\n const compactPayload = parseJsonSafely<{\r\n session: {\r\n session: SessionShape\r\n user: UserShape\r\n updatedAt: number\r\n version?: string\r\n }\r\n expiresAt: number\r\n signature: string\r\n }>(decodeBase64UrlToString(sessionData))\r\n\r\n if (!compactPayload) {\r\n return null\r\n }\r\n\r\n const expectedSignature = await signHmacBase64Url(\r\n secret,\r\n JSON.stringify({\r\n ...compactPayload.session,\r\n expiresAt: compactPayload.expiresAt,\r\n }),\r\n )\r\n\r\n if (expectedSignature !== compactPayload.signature) {\r\n return null\r\n }\r\n\r\n if (compactPayload.expiresAt <= Date.now()) {\r\n return null\r\n }\r\n\r\n const resolvedSession = compactPayload.session\r\n if (config?.version) {\r\n const cookieVersion = resolvedSession.version || '1'\r\n const expectedVersion =\r\n typeof config.version === 'string'\r\n ? config.version\r\n : await config.version(resolvedSession.session, resolvedSession.user)\r\n if (cookieVersion !== expectedVersion) {\r\n return null\r\n }\r\n }\r\n\r\n const sessionObject = asObject(resolvedSession.session)\r\n const userObject = asObject(resolvedSession.user)\r\n if (!sessionObject || !userObject) {\r\n return null\r\n }\r\n\r\n return {\r\n session: sessionObject as SessionShape,\r\n user: userObject as UserShape,\r\n updatedAt: resolvedSession.updatedAt,\r\n version: resolvedSession.version,\r\n }\r\n}\r\n\r\nexport {\r\n HOST_COOKIE_PREFIX,\r\n SECURE_COOKIE_PREFIX,\r\n createSessionStore,\r\n getAccountCookie,\r\n getChunkedCookie,\r\n parseCookies,\r\n parseSetCookieHeader,\r\n setCookieToHeader,\r\n setRequestCookie,\r\n splitSetCookieHeader,\r\n stripSecureCookiePrefix,\r\n toCookieOptions,\r\n}\r\n\r\nexport type {\r\n AthenaAuthCookie,\r\n AthenaAuthCookies,\r\n AthenaCookieContextRuntime,\r\n AthenaCookieOptions,\r\n AthenaCookiesOptions,\r\n AthenaGetCookieCacheConfig,\r\n}\r\n","{\n \"author\": \"floris@xylex.group\",\n \"bin\": {\n \"athena-js\": \"./bin/athena-js.js\"\n },\n \"dependencies\": {\n \"blessed\": \"^0.1.81\",\n \"chalk\": \"^4.1.2\",\n \"cron-parser\": \"^4.9.0\",\n \"pg\": \"^8.16.0\",\n \"use-sync-external-store\": \"^1.5.0\",\n \"uuid\": \"^9.0.1\",\n \"zod\": \"^4.0.1\"\n },\n \"description\": \"Athena JS SDK\",\n \"devDependencies\": {\n \"@react-email/components\": \"^1.0.12\",\n \"@react-email/render\": \"^2.0.8\",\n \"@types/blessed\": \"^0.1.25\",\n \"@types/node\": \"^20.10.5\",\n \"@types/pg\": \"^8.15.1\",\n \"@types/react\": \"^18.3.12\",\n \"@types/react-test-renderer\": \"^18.3.1\",\n \"@types/uuid\": \"^9.0.7\",\n \"@typescript-eslint/eslint-plugin\": \"^8.57.0\",\n \"@typescript-eslint/parser\": \"^8.57.0\",\n \"eslint\": \"^8.57.1\",\n \"express\": \"^4.22.2\",\n \"react\": \"^18.3.1\",\n \"react-dom\": \"^18.3.1\",\n \"react-test-renderer\": \"^18.3.1\",\n \"tsup\": \"^8.5.1\",\n \"tsx\": \"^4.7.0\",\n \"typescript\": \"^5.3.3\"\n },\n \"engines\": {\n \"node\": \">=18.0.0\"\n },\n \"exports\": {\n \".\": {\n \"browser\": {\n \"default\": \"./dist/browser.js\",\n \"import\": \"./dist/browser.js\",\n \"require\": \"./dist/browser.cjs\",\n \"types\": \"./dist/browser.d.ts\"\n },\n \"default\": \"./dist/index.js\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\",\n \"types\": \"./dist/index.d.ts\"\n },\n \"./browser\": {\n \"default\": \"./dist/browser.js\",\n \"import\": \"./dist/browser.js\",\n \"require\": \"./dist/browser.cjs\",\n \"types\": \"./dist/browser.d.ts\"\n },\n \"./cookies\": {\n \"default\": \"./dist/cookies.js\",\n \"import\": \"./dist/cookies.js\",\n \"require\": \"./dist/cookies.cjs\",\n \"types\": \"./dist/cookies.d.ts\"\n },\n \"./next/client\": {\n \"default\": \"./dist/next/client.js\",\n \"import\": \"./dist/next/client.js\",\n \"require\": \"./dist/next/client.cjs\",\n \"types\": \"./dist/next/client.d.ts\"\n },\n \"./next/server\": {\n \"default\": \"./dist/next/server.js\",\n \"import\": \"./dist/next/server.js\",\n \"require\": \"./dist/next/server.cjs\",\n \"types\": \"./dist/next/server.d.ts\"\n },\n \"./package.json\": \"./package.json\",\n \"./react\": {\n \"default\": \"./dist/react.js\",\n \"import\": \"./dist/react.js\",\n \"require\": \"./dist/react.cjs\",\n \"types\": \"./dist/react.d.ts\"\n },\n \"./utils\": {\n \"default\": \"./dist/utils.js\",\n \"import\": \"./dist/utils.js\",\n \"require\": \"./dist/utils.cjs\",\n \"types\": \"./dist/utils.d.ts\"\n }\n },\n \"files\": [\n \"dist\",\n \"bin\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"keywords\": [\n \"database\",\n \"driver\",\n \"api-gateway\",\n \"sdk\",\n \"react\",\n \"hooks\",\n \"http\",\n \"postgres\",\n \"query-builder\"\n ],\n \"license\": \"MIT\",\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"name\": \"@xylex-group/athena\",\n \"peerDependencies\": {\n \"@react-email/components\": \">=1.0.0\",\n \"@react-email/render\": \">=2.0.0\",\n \"react\": \">=17.0.0\"\n },\n \"peerDependenciesMeta\": {\n \"@react-email/components\": {\n \"optional\": true\n },\n \"@react-email/render\": {\n \"optional\": true\n },\n \"react\": {\n \"optional\": true\n }\n },\n \"publisher\": \"XYLEX Group\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/xylex-group/athena-js.git\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"check:all\": \"pnpm lint && pnpm typecheck && pnpm test && pnpm build\",\n \"dev\": \"tsup --watch\",\n \"docs:methods\": \"node scripts/generate-sdk-method-reference.mjs\",\n \"example:api-call\": \"cd examples/api-call && bun run start\",\n \"example:email-resend\": \"cd examples/email-resend && bun run start\",\n \"example:express-api\": \"cd examples/express-api && bun run start\",\n \"example:order-saga\": \"cd examples/order-saga && bun run start\",\n \"example:postgres-connection\": \"cd examples/postgres-connection && bun run start\",\n \"example:recurring-invoice\": \"cd examples/recurring-invoice && bun run start\",\n \"example:retry-patterns\": \"cd examples/retry-patterns && bun run start\",\n \"lint\": \"eslint \\\"src/**/*.ts\\\" \\\"test/**/*.ts\\\"\",\n \"lint:fix\": \"pnpm lint -- --fix\",\n \"prepublishOnly\": \"pnpm typecheck && pnpm build\",\n \"publish:token\": \"node scripts/publish.js\",\n \"test\": \"node --import tsx --test --test-force-exit test/*.test.ts\",\n \"test:integration:postgres\": \"node scripts/run-postgres-introspection-test.mjs\",\n \"test:watch\": \"node --import tsx --test --watch test/*.test.ts\",\n \"typecheck\": \"tsc -p tsconfig.typecheck.json\"\n },\n \"sideEffects\": false,\n \"type\": \"module\",\n \"types\": \"./dist/index.d.ts\",\n \"typesVersions\": {\n \"*\": {\n \"*\": [\n \"dist/index.d.ts\"\n ],\n \"browser\": [\n \"dist/browser.d.ts\"\n ],\n \"cookies\": [\n \"dist/cookies.d.ts\"\n ],\n \"next/client\": [\n \"dist/next/client.d.ts\"\n ],\n \"next/server\": [\n \"dist/next/server.d.ts\"\n ],\n \"react\": [\n \"dist/react.d.ts\"\n ],\n \"utils\": [\n \"dist/utils.d.ts\"\n ]\n }\n },\n \"version\": \"2.9.0\"\n}","import packageJson from '../package.json' with { type: 'json' }\n\nexport const PACKAGE_VERSION = packageJson.version\n\nexport function buildSdkHeaderValue(sdkName: string): string {\n return `${sdkName} ${PACKAGE_VERSION}`\n}\n","import type {\r\n AthenaGatewayBaseOptions,\r\n AthenaGatewayCallOptions,\r\n AthenaGatewayConnectionOptions,\r\n AthenaGatewayConnectionResult,\r\n AthenaGatewayEndpointPath,\r\n AthenaGatewayErrorDetails,\r\n AthenaGatewayMethod,\r\n AthenaRpcCallOptions,\r\n AthenaRpcPayload,\r\n AthenaGatewayResponse,\r\n} from \"./types.js\";\r\nimport type {\r\n AthenaDeletePayload,\r\n AthenaFetchPayload,\r\n AthenaInsertPayload,\r\n AthenaRpcFilter,\r\n AthenaUpdatePayload,\r\n AthenaQueryPayload,\r\n} from \"./types.js\";\r\nimport { AthenaGatewayError } from \"./errors.ts\";\r\nimport {\r\n ATHENA_DEFAULT_BASE_URL,\r\n buildAthenaGatewayUrl,\r\n normalizeAthenaGatewayBaseUrl,\r\n} from \"./url.ts\";\r\nimport { getSessionCookie } from \"../cookies/index.ts\";\r\nimport { buildSdkHeaderValue } from \"../sdk-version.ts\";\r\n\r\nconst DEFAULT_CLIENT = \"railway_direct\";\nconst SDK_NAME = \"xylex-group/athena\";\nconst SDK_HEADER_VALUE = buildSdkHeaderValue(SDK_NAME);\nconst NO_CACHE_HEADER_VALUE = 'no-cache'\n\r\nfunction parseResponseBody(rawText: string, contentType: string | null) {\r\n if (!rawText) {\r\n return { parsed: null as unknown, parseFailed: false };\r\n }\r\n\r\n const contentTypeSuggestsJson =\r\n contentType?.toLowerCase().includes(\"application/json\") ?? false;\r\n const looksJson =\r\n contentTypeSuggestsJson || rawText.startsWith(\"{\") || rawText.startsWith(\"[\");\r\n\r\n if (!looksJson) {\r\n return { parsed: rawText as unknown, parseFailed: false };\r\n }\r\n\r\n try {\r\n return { parsed: JSON.parse(rawText) as unknown, parseFailed: false };\r\n } catch {\r\n return { parsed: rawText as unknown, parseFailed: true };\r\n }\r\n}\r\n\r\nfunction normalizeHeaderValue(value?: string | null) {\n return value ? value : undefined;\n}\n\nfunction isCacheControlHeaderName(name: string) {\n return name.toLowerCase() === 'cache-control'\n}\n\r\nfunction resolveHeaderValue(\r\n headers: Record<string, string>,\r\n candidates: string[],\r\n): string | undefined {\r\n for (const candidate of candidates) {\r\n const direct = normalizeHeaderValue(headers[candidate]);\r\n if (direct) return direct;\r\n }\r\n\r\n const loweredCandidates = new Set(candidates.map(candidate => candidate.toLowerCase()));\r\n for (const [key, value] of Object.entries(headers)) {\r\n if (!loweredCandidates.has(key.toLowerCase())) {\r\n continue;\r\n }\r\n const normalized = normalizeHeaderValue(value);\r\n if (normalized) return normalized;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nfunction resolveBearerTokenFromAuthorizationHeader(\r\n headers: Record<string, string>,\r\n): string | undefined {\r\n const authorization = resolveHeaderValue(headers, [\"Authorization\"]);\r\n if (!authorization) {\r\n return undefined;\r\n }\r\n\r\n const match = authorization.match(/^Bearer\\s+(.+)$/i);\r\n const token = match?.[1]?.trim();\r\n return token ? token : undefined;\r\n}\r\n\r\nfunction resolveSessionTokenFromCookieHeader(\r\n headers: Record<string, string>,\r\n): string | undefined {\r\n const cookie = resolveHeaderValue(headers, [\"Cookie\"]);\r\n if (!cookie) {\r\n return undefined;\r\n }\r\n\r\n return getSessionCookie(new Headers({ cookie })) ?? undefined;\r\n}\r\n\r\nfunction isRecord(value: unknown): value is Record<string, unknown> {\r\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\r\n}\r\n\r\nfunction nonEmptyString(value: unknown): string | undefined {\r\n return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : undefined;\r\n}\r\n\r\nfunction resolveStructuredErrorPayload(payload: unknown): Record<string, unknown> | null {\r\n if (!isRecord(payload)) return null;\r\n return isRecord(payload.error) ? payload.error : payload;\r\n}\r\n\r\nfunction resolveRequestId(headers: Headers): string | undefined {\r\n return (\r\n headers.get(\"x-request-id\") ??\r\n headers.get(\"x-correlation-id\") ??\r\n headers.get(\"x-athena-request-id\") ??\r\n undefined\r\n );\r\n}\r\n\r\nfunction resolveErrorMessage(payload: unknown, fallback: string) {\r\n const structuredPayload = resolveStructuredErrorPayload(payload);\r\n if (structuredPayload) {\r\n const messageCandidates = [structuredPayload.message, structuredPayload.error, structuredPayload.details];\r\n for (const candidate of messageCandidates) {\r\n const resolved = nonEmptyString(candidate);\r\n if (resolved) return resolved;\r\n }\r\n }\r\n\r\n const rawMessage = nonEmptyString(payload);\r\n if (rawMessage) return rawMessage;\r\n\r\n return fallback;\r\n}\r\n\r\nfunction resolveErrorHint(payload: unknown): string | undefined {\r\n const structuredPayload = resolveStructuredErrorPayload(payload);\r\n return structuredPayload ? nonEmptyString(structuredPayload.hint) : undefined;\r\n}\r\n\r\nfunction resolveStatusText(response: Response, payload: unknown): string | null {\r\n const rawStatusText = nonEmptyString(response.statusText);\r\n if (rawStatusText) return rawStatusText;\r\n const payloadRecord = isRecord(payload) ? payload : null;\r\n return payloadRecord ? nonEmptyString(payloadRecord.statusText) ?? null : null;\r\n}\r\n\r\nfunction detailsFromError(error: AthenaGatewayError): AthenaGatewayErrorDetails {\r\n return error.toDetails();\r\n}\r\n\r\ninterface AthenaFindManyAstPayload {\r\n table_name: string;\r\n select: Record<string, unknown>;\r\n where?: Record<string, unknown>;\r\n orderBy?: Record<string, unknown>;\r\n limit?: number;\r\n}\r\n\r\nfunction toQueryScalar(value: unknown): string {\r\n if (value === null || value === undefined) return \"null\";\r\n if (typeof value === \"boolean\") return value ? \"true\" : \"false\";\r\n if (typeof value === \"number\") return Number.isFinite(value) ? String(value) : \"null\";\r\n return String(value);\r\n}\r\n\r\nfunction toQueryArray(values: unknown[]): string {\r\n return `{${values.map(toQueryScalar).join(\",\")}}`;\r\n}\r\n\r\nfunction toRpcArgumentQueryValue(value: unknown): string {\r\n if (Array.isArray(value)) return toQueryArray(value);\r\n if (value && typeof value === \"object\") return JSON.stringify(value);\r\n return toQueryScalar(value);\r\n}\r\n\r\nfunction toRpcFilterQueryValue(filter: AthenaRpcFilter): string {\r\n const value = filter.value;\r\n switch (filter.operator) {\r\n case \"in\": {\r\n if (!Array.isArray(value)) {\r\n throw new AthenaGatewayError({\r\n code: \"UNKNOWN_ERROR\",\r\n message: `RPC filter \"${filter.column}\" with operator \"in\" requires an array value`,\r\n status: 0,\r\n });\r\n }\r\n return `in.${toQueryArray(value)}`;\r\n }\r\n case \"is\":\r\n return `is.${toQueryScalar(value)}`;\r\n case \"eq\":\r\n case \"neq\":\r\n case \"gt\":\r\n case \"gte\":\r\n case \"lt\":\r\n case \"lte\":\r\n case \"like\":\r\n case \"ilike\":\r\n return `${filter.operator}.${toQueryScalar(value)}`;\r\n }\r\n}\r\n\r\nfunction buildRpcGetEndpoint(payload: AthenaRpcPayload): AthenaGatewayEndpointPath {\r\n const functionName = (payload.function_name ?? payload.function).trim();\r\n if (!functionName) {\r\n throw new AthenaGatewayError({\r\n code: \"UNKNOWN_ERROR\",\r\n message: \"rpc requires a function name\",\r\n status: 0,\r\n endpoint: \"/gateway/rpc\",\r\n method: \"GET\",\r\n });\r\n }\r\n\r\n const query = new URLSearchParams();\r\n if (payload.schema) query.set(\"schema\", payload.schema);\r\n if (payload.select) query.set(\"select\", payload.select);\r\n if (payload.count) query.set(\"count\", payload.count);\r\n if (payload.head) query.set(\"head\", \"true\");\r\n if (typeof payload.limit === \"number\") query.set(\"limit\", String(payload.limit));\r\n if (typeof payload.offset === \"number\") query.set(\"offset\", String(payload.offset));\r\n if (payload.order?.column) {\r\n query.set(\r\n \"order\",\r\n payload.order.ascending === false\r\n ? `${payload.order.column}.desc`\r\n : payload.order.column,\r\n );\r\n }\r\n\r\n if (payload.args) {\r\n for (const [key, value] of Object.entries(payload.args)) {\r\n query.set(key, toRpcArgumentQueryValue(value));\r\n }\r\n }\r\n\r\n if (payload.filters?.length) {\r\n for (const filter of payload.filters) {\r\n if (payload.args && Object.prototype.hasOwnProperty.call(payload.args, filter.column)) {\r\n throw new AthenaGatewayError({\r\n code: \"UNKNOWN_ERROR\",\r\n message: `RPC filter \"${filter.column}\" conflicts with RPC argument \"${filter.column}\" in GET mode`,\r\n status: 0,\r\n });\r\n }\r\n query.append(filter.column, toRpcFilterQueryValue(filter));\r\n }\r\n }\r\n\r\n const endpoint = `/rpc/${encodeURIComponent(functionName)}`;\r\n const queryText = query.toString();\r\n const withQuery = queryText ? `${endpoint}?${queryText}` : endpoint;\r\n return withQuery as AthenaGatewayEndpointPath;\r\n}\r\n\r\nfunction buildHeaders(\n config: AthenaGatewayBaseOptions,\n options?: AthenaGatewayCallOptions,\n): Record<string, string> {\n const mergedStripNulls = options?.stripNulls ?? true;\n const forceNoCache = Boolean(config.forceNoCache || options?.forceNoCache)\n const extraHeaders = {\n ...(config.headers ?? {}),\n ...(options?.headers ?? {}),\n };\n const headerClient =\r\n extraHeaders[\"x-athena-client\"] ?? extraHeaders[\"X-Athena-Client\"];\r\n const finalClient =\r\n options?.client ??\r\n config.client ??\r\n (typeof headerClient === \"string\" ? headerClient : undefined) ??\r\n DEFAULT_CLIENT;\r\n const finalApiKey = options?.apiKey ?? config.apiKey;\r\n const finalPublishEvent = options?.publishEvent ?? config.publishEvent;\r\n\r\n const headers: Record<string, string> = {\r\n \"Content-Type\": \"application/json\",\r\n \"X-Athena-Sdk\": SDK_HEADER_VALUE,\r\n };\r\n\r\n if (options?.userId ?? config.userId) {\r\n headers[\"X-User-Id\"] = options?.userId ?? config.userId ?? \"\";\r\n }\r\n\r\n if (options?.organizationId ?? config.organizationId) {\r\n headers[\"X-Organization-Id\"] =\r\n options?.organizationId ?? config.organizationId ?? \"\";\r\n }\r\n\r\n if (finalClient) {\r\n headers[\"X-Athena-Client\"] = finalClient;\r\n }\r\n\r\n const finalBackend = options?.backend ?? config.backend;\r\n if (finalBackend) {\r\n const type =\r\n typeof finalBackend === \"string\" ? finalBackend : finalBackend.type;\r\n if (type) headers[\"X-Backend-Type\"] = type;\r\n }\r\n\r\n if (typeof mergedStripNulls === \"boolean\") {\r\n headers[\"X-Strip-Nulls\"] = mergedStripNulls ? \"true\" : \"false\";\r\n }\r\n\r\n if (finalPublishEvent) {\r\n headers[\"X-Publish-Event\"] = finalPublishEvent;\r\n }\r\n\r\n if (finalApiKey) {\r\n headers[\"apikey\"] = finalApiKey;\r\n headers[\"x-api-key\"] = headers[\"x-api-key\"] ?? finalApiKey;\r\n }\r\n\r\n const explicitSessionToken = resolveHeaderValue(extraHeaders, [\r\n \"X-Athena-Auth-Session-Token\",\r\n ]);\r\n const derivedSessionToken =\r\n explicitSessionToken ?? resolveSessionTokenFromCookieHeader(extraHeaders);\r\n if (derivedSessionToken) {\r\n headers[\"X-Athena-Auth-Session-Token\"] = derivedSessionToken;\r\n }\r\n\r\n const explicitBearerToken = resolveHeaderValue(extraHeaders, [\r\n \"X-Athena-Auth-Bearer-Token\",\r\n ]);\r\n const derivedBearerToken =\r\n explicitBearerToken ?? resolveBearerTokenFromAuthorizationHeader(extraHeaders);\r\n if (derivedBearerToken) {\r\n headers[\"X-Athena-Auth-Bearer-Token\"] = derivedBearerToken;\r\n }\r\n\r\n const athenaClientKeys = [\"x-athena-client\", \"X-Athena-Client\"];\n Object.entries(extraHeaders).forEach(([key, value]) => {\n if (athenaClientKeys.includes(key)) return;\n if (forceNoCache && isCacheControlHeaderName(key)) return;\n const normalized = normalizeHeaderValue(value);\n if (normalized) {\n headers[key] = normalized;\n }\n });\n\n if (forceNoCache) {\n headers['Cache-Control'] = NO_CACHE_HEADER_VALUE\n }\n\n return headers;\n}\n\r\nfunction toInvalidUrlResponse<T>(\r\n error: unknown,\r\n endpoint: AthenaGatewayEndpointPath,\r\n method: AthenaGatewayMethod,\r\n): AthenaGatewayResponse<T> {\r\n const message = error instanceof Error ? error.message : String(error);\r\n const gatewayError =\r\n error instanceof AthenaGatewayError\r\n ? error\r\n : new AthenaGatewayError({\r\n code: \"INVALID_URL\",\r\n message,\r\n status: 0,\r\n endpoint,\r\n method,\r\n cause: message,\r\n hint: \"Set ATHENA_URL to a full http(s) URL before running queries.\",\r\n });\r\n\r\n return {\r\n ok: false,\r\n status: 0,\r\n statusText: null,\r\n data: null,\r\n error: gatewayError.message,\r\n errorDetails: detailsFromError(\r\n new AthenaGatewayError({\r\n code: gatewayError.code,\r\n message: gatewayError.message,\r\n status: gatewayError.status,\r\n endpoint,\r\n method,\r\n requestId: gatewayError.requestId,\r\n hint: gatewayError.hint,\r\n cause: gatewayError.causeDetail,\r\n }),\r\n ),\r\n raw: null,\r\n };\r\n}\r\n\r\nfunction resolveGatewayBaseUrl(input?: string | null) {\r\n return normalizeAthenaGatewayBaseUrl(input, {\r\n defaultBaseUrl: ATHENA_DEFAULT_BASE_URL,\r\n });\r\n}\r\n\r\nfunction resolveProbePath(path?: string) {\r\n if (!path) return \"/\";\r\n if (!path.startsWith(\"/\")) {\r\n throw new AthenaGatewayError({\r\n code: \"INVALID_URL\",\r\n message: `Athena gateway probe path must start with \"/\". Received ${JSON.stringify(path)}.`,\r\n status: 0,\r\n hint: 'Use a leading slash such as \"/\" or \"/health\".',\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nfunction mergeConnectionHeaders(\r\n baseHeaders: Record<string, string>,\r\n headers?: Record<string, string>,\r\n): Record<string, string> {\r\n const merged = {\r\n ...baseHeaders,\r\n ...(headers ?? {}),\r\n };\r\n\r\n if (!merged[\"X-Athena-Sdk\"] && !merged[\"x-athena-sdk\"]) {\r\n merged[\"X-Athena-Sdk\"] = SDK_HEADER_VALUE;\r\n }\r\n\r\n return merged;\r\n}\r\n\r\nasync function performConnectionCheck(\r\n baseUrl: string,\r\n requestHeaders: Record<string, string>,\r\n options?: AthenaGatewayConnectionOptions,\r\n): Promise<AthenaGatewayConnectionResult> {\r\n const path = resolveProbePath(options?.path);\r\n const url = buildAthenaGatewayUrl(baseUrl, path);\r\n\r\n try {\r\n const response = await fetch(url, {\r\n method: \"GET\",\r\n headers: mergeConnectionHeaders(requestHeaders, options?.headers),\r\n signal: options?.signal,\r\n });\r\n const rawText = await response.text();\r\n const requestId = resolveRequestId(response.headers);\r\n const parsedBody = parseResponseBody(\r\n rawText ?? \"\",\r\n response.headers.get(\"content-type\"),\r\n );\r\n\r\n if (parsedBody.parseFailed) {\r\n const invalidJsonError = new AthenaGatewayError({\r\n code: \"INVALID_JSON\",\r\n message: \"Gateway probe returned malformed JSON\",\r\n status: response.status,\r\n method: \"GET\",\r\n requestId,\r\n hint: \"Verify the gateway response body is valid JSON.\",\r\n cause: rawText.slice(0, 300),\r\n });\r\n return {\r\n ok: false,\r\n reachable: true,\r\n status: response.status,\r\n statusText: resolveStatusText(response, parsedBody.parsed),\r\n baseUrl,\r\n url,\r\n error: invalidJsonError.message,\r\n errorDetails: detailsFromError(invalidJsonError),\r\n raw: parsedBody.parsed,\r\n };\r\n }\r\n\r\n const parsed = parsedBody.parsed;\r\n if (!response.ok) {\r\n const httpError = new AthenaGatewayError({\r\n code: \"HTTP_ERROR\",\r\n message: resolveErrorMessage(\r\n parsed,\r\n `Athena gateway GET ${path} failed with status ${response.status}`,\r\n ),\r\n status: response.status,\r\n method: \"GET\",\r\n requestId,\r\n hint: resolveErrorHint(parsed),\r\n });\r\n\r\n return {\r\n ok: false,\r\n reachable: true,\r\n status: response.status,\r\n statusText: resolveStatusText(response, parsed),\r\n baseUrl,\r\n url,\r\n error: httpError.message,\r\n errorDetails: detailsFromError(httpError),\r\n raw: parsed,\r\n };\r\n }\r\n\r\n return {\r\n ok: true,\r\n reachable: true,\r\n status: response.status,\r\n statusText: resolveStatusText(response, parsed),\r\n baseUrl,\r\n url,\r\n error: undefined,\r\n errorDetails: null,\r\n raw: parsed,\r\n };\r\n } catch (callError) {\r\n const message = callError instanceof Error ? callError.message : String(callError);\r\n const networkError = new AthenaGatewayError({\r\n code: \"NETWORK_ERROR\",\r\n message: `Network error while probing Athena gateway ${url}: ${message}`,\r\n method: \"GET\",\r\n cause: message,\r\n hint: \"Check gateway URL, DNS, and network reachability.\",\r\n });\r\n return {\r\n ok: false,\r\n reachable: false,\r\n status: 0,\r\n statusText: null,\r\n baseUrl,\r\n url,\r\n error: networkError.message,\r\n errorDetails: detailsFromError(networkError),\r\n raw: null,\r\n };\r\n }\r\n}\r\n\r\nexport async function verifyAthenaGatewayUrl(\r\n baseUrl: string,\r\n options?: AthenaGatewayConnectionOptions,\r\n): Promise<AthenaGatewayConnectionResult> {\r\n const normalizedBaseUrl = normalizeAthenaGatewayBaseUrl(baseUrl);\r\n return performConnectionCheck(normalizedBaseUrl, { \"X-Athena-Sdk\": SDK_HEADER_VALUE }, options);\r\n}\r\n\r\nasync function callAthena<T>(\r\n config: AthenaGatewayBaseOptions,\r\n endpoint: AthenaGatewayEndpointPath,\r\n method: AthenaGatewayMethod,\r\n payload: unknown,\r\n options?: AthenaGatewayCallOptions,\r\n): Promise<AthenaGatewayResponse<T>> {\r\n let baseUrl: string;\r\n try {\r\n baseUrl = resolveGatewayBaseUrl(options?.baseUrl ?? config.baseUrl);\r\n } catch (error) {\r\n return toInvalidUrlResponse<T>(error, endpoint, method);\r\n }\r\n\r\n const url = buildAthenaGatewayUrl(baseUrl, endpoint);\r\n const headers = buildHeaders(config, options);\r\n\r\n try {\r\n const requestInit: RequestInit = {\r\n method,\r\n headers,\r\n };\r\n if (method !== \"GET\") {\r\n requestInit.body = JSON.stringify(payload);\r\n }\r\n\r\n const response = await fetch(url, requestInit);\r\n\r\n const rawText = await response.text();\r\n const requestId = resolveRequestId(response.headers);\r\n const parsedBody = parseResponseBody(\r\n rawText ?? \"\",\r\n response.headers.get(\"content-type\"),\r\n );\r\n\r\n if (parsedBody.parseFailed) {\r\n const invalidJsonError = new AthenaGatewayError({\r\n code: \"INVALID_JSON\",\r\n message: \"Gateway returned malformed JSON\",\r\n status: response.status,\r\n endpoint,\r\n method,\r\n requestId,\r\n hint: \"Verify the gateway response body is valid JSON.\",\r\n cause: rawText.slice(0, 300),\r\n });\r\n return {\r\n ok: false,\r\n status: response.status,\r\n statusText: resolveStatusText(response, parsedBody.parsed),\r\n data: null,\r\n error: invalidJsonError.message,\r\n errorDetails: detailsFromError(invalidJsonError),\r\n raw: parsedBody.parsed,\r\n };\r\n }\r\n\r\n const parsed = parsedBody.parsed;\r\n const parsedPayload = isRecord(parsed) ? parsed : null;\r\n\r\n if (!response.ok) {\r\n const httpError = new AthenaGatewayError({\r\n code: \"HTTP_ERROR\",\r\n message: resolveErrorMessage(\r\n parsed,\r\n `Athena gateway ${method} ${endpoint} failed with status ${response.status}`,\r\n ),\r\n status: response.status,\r\n endpoint,\r\n method,\r\n requestId,\r\n hint: resolveErrorHint(parsed),\r\n });\r\n\r\n return {\r\n ok: false,\r\n status: response.status,\r\n statusText: resolveStatusText(response, parsed),\r\n data: null,\r\n error: httpError.message,\r\n errorDetails: detailsFromError(httpError),\r\n raw: parsed,\r\n };\r\n }\r\n\r\n // Unwrap envelope: API may return { data: [...], error: null } (e.g. when cached)\r\n // vs raw array when uncached. Use inner data when present to avoid double nesting.\r\n const payloadData =\r\n parsedPayload && \"data\" in parsedPayload\r\n ? (parsedPayload.data as T)\r\n : (parsed as T);\r\n const payloadCount =\r\n parsedPayload && \"count\" in parsedPayload\r\n ? typeof parsedPayload.count === \"number\" || parsedPayload.count === null\r\n ? (parsedPayload.count as number | null)\r\n : undefined\r\n : undefined;\r\n\r\n return {\r\n ok: true,\r\n status: response.status,\r\n statusText: resolveStatusText(response, parsed),\r\n data: payloadData ?? null,\r\n count: payloadCount,\r\n error: undefined,\r\n errorDetails: null,\r\n raw: parsed,\r\n };\r\n } catch (callError) {\r\n const message = callError instanceof Error ? callError.message : String(callError);\r\n const networkError = new AthenaGatewayError({\r\n code: \"NETWORK_ERROR\",\r\n message: `Network error while calling ${method} ${endpoint}: ${message}`,\r\n endpoint,\r\n method,\r\n cause: message,\r\n hint: \"Check gateway URL, DNS, and network reachability.\",\r\n });\r\n return {\r\n ok: false,\r\n status: 0,\r\n statusText: null,\r\n data: null,\r\n error: networkError.message,\r\n errorDetails: detailsFromError(networkError),\r\n raw: null,\r\n };\r\n }\r\n}\r\n\r\nexport interface AthenaGatewayClient {\r\n baseUrl: string;\r\n buildHeaders(options?: AthenaGatewayCallOptions): Record<string, string>;\r\n verifyConnection(\r\n options?: AthenaGatewayConnectionOptions,\r\n ): Promise<AthenaGatewayConnectionResult>;\r\n fetchGateway<T>(\r\n payload: AthenaFetchPayload | AthenaFindManyAstPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n insertGateway<T>(\r\n payload: AthenaInsertPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n updateGateway<T>(\r\n payload: AthenaUpdatePayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n deleteGateway<T>(\r\n payload: AthenaDeletePayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n rpcGateway<T>(\r\n payload: AthenaRpcPayload,\r\n options?: AthenaRpcCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n queryGateway<T>(\r\n payload: AthenaQueryPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n}\r\n\r\nexport function createAthenaGatewayClient(\r\n config: AthenaGatewayBaseOptions = {},\r\n): AthenaGatewayClient {\r\n const normalizedBaseUrl = resolveGatewayBaseUrl(config.baseUrl);\r\n const normalizedConfig: AthenaGatewayBaseOptions = {\r\n ...config,\r\n baseUrl: normalizedBaseUrl,\r\n };\r\n\r\n return {\r\n baseUrl: normalizedBaseUrl,\r\n buildHeaders(options) {\r\n return buildHeaders(normalizedConfig, options);\r\n },\r\n verifyConnection(options) {\r\n return performConnectionCheck(\r\n normalizedBaseUrl,\r\n buildHeaders(normalizedConfig),\r\n options,\r\n );\r\n },\r\n fetchGateway(payload, options) {\r\n return callAthena(normalizedConfig, \"/gateway/fetch\", \"POST\", payload, options);\r\n },\r\n insertGateway(payload, options) {\r\n return callAthena(normalizedConfig, \"/gateway/insert\", \"PUT\", payload, options);\r\n },\r\n updateGateway(payload, options) {\r\n return callAthena(normalizedConfig, \"/gateway/update\", \"POST\", payload, options);\r\n },\r\n deleteGateway(payload, options) {\r\n return callAthena(normalizedConfig, \"/gateway/delete\", \"DELETE\", payload, options);\r\n },\r\n rpcGateway(payload, options) {\r\n if (options?.get) {\r\n const endpoint = buildRpcGetEndpoint(payload);\r\n return callAthena(normalizedConfig, endpoint, \"GET\", null, options);\r\n }\r\n return callAthena(normalizedConfig, \"/gateway/rpc\", \"POST\", payload, options);\r\n },\r\n queryGateway(payload, options) {\r\n return callAthena(normalizedConfig, \"/gateway/query\", \"POST\", payload, options);\r\n },\r\n };\r\n}\r\n","const SIMPLE_IDENTIFIER_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/\nconst COMPOSITE_IDENTIFIER_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$/\nconst SQL_ALIAS_PATTERN = /^([A-Za-z_][A-Za-z0-9_.]*)\\s+(?:as\\s+)?([A-Za-z_][A-Za-z0-9_]*)$/i\nconst RESPONSE_ALIAS_PATTERN = /^([A-Za-z_][A-Za-z0-9_]*)\\s*:\\s*([A-Za-z_][A-Za-z0-9_.]*)$/i\n\r\nfunction quoteIdentifierSegment(identifier: string): string {\n return `\"${identifier.replace(/\"/g, '\"\"')}\"`\n}\n\nfunction parseAliasedIdentifierToken(\n token: string,\n): { baseIdentifier: string; aliasIdentifier: string } | null {\n const responseAliasMatch = RESPONSE_ALIAS_PATTERN.exec(token)\n if (responseAliasMatch) {\n const [, aliasIdentifier, baseIdentifier] = responseAliasMatch\n if (COMPOSITE_IDENTIFIER_PATTERN.test(baseIdentifier) && SIMPLE_IDENTIFIER_PATTERN.test(aliasIdentifier)) {\n return { baseIdentifier, aliasIdentifier }\n }\n }\n\n const sqlAliasMatch = SQL_ALIAS_PATTERN.exec(token)\n if (!sqlAliasMatch) {\n return null\n }\n\n const [, baseIdentifier, aliasIdentifier] = sqlAliasMatch\n if (!COMPOSITE_IDENTIFIER_PATTERN.test(baseIdentifier) || !SIMPLE_IDENTIFIER_PATTERN.test(aliasIdentifier)) {\n return null\n }\n\n return { baseIdentifier, aliasIdentifier }\n}\n\r\n/**\r\n * Quotes a `schema.table.column`-style identifier path safely for SQL.\r\n */\r\nexport function quoteQualifiedIdentifier(identifier: string): string {\r\n return identifier\r\n .split('.')\r\n .map(segment => quoteIdentifierSegment(segment))\r\n .join('.')\r\n}\r\n\r\nfunction quoteSelectToken(token: string): string {\n if (token === '*') return token\n if (COMPOSITE_IDENTIFIER_PATTERN.test(token)) {\n return quoteQualifiedIdentifier(token)\n }\n\n const aliasedIdentifier = parseAliasedIdentifierToken(token)\n if (!aliasedIdentifier) {\n return token\n }\n const { baseIdentifier, aliasIdentifier } = aliasedIdentifier\n return `${quoteQualifiedIdentifier(baseIdentifier)} AS ${quoteIdentifierSegment(aliasIdentifier)}`\n}\n\nexport function quoteSelectColumnToken(token: string): string {\n const trimmed = token.trim()\n if (!trimmed || trimmed === '*') return trimmed || '*'\n\n const responseAliasMatch = RESPONSE_ALIAS_PATTERN.exec(trimmed)\n if (responseAliasMatch) {\n const [, aliasIdentifier, baseIdentifier] = responseAliasMatch\n return `${quoteQualifiedIdentifier(baseIdentifier)} AS ${quoteIdentifierSegment(aliasIdentifier)}`\n }\n\n return quoteQualifiedIdentifier(trimmed)\n}\n\nfunction canAutoQuoteToken(token: string): boolean {\n if (token === '*') return true\n if (COMPOSITE_IDENTIFIER_PATTERN.test(token)) return true\n return parseAliasedIdentifierToken(token) != null\n}\n\r\nfunction splitTopLevelCommaSeparated(input: string): string[] | null {\r\n const parts: string[] = []\r\n let buffer = ''\r\n let singleQuoted = false\r\n let doubleQuoted = false\r\n let depth = 0\r\n\r\n for (let index = 0; index < input.length; index += 1) {\r\n const char = input[index]\r\n const next = index + 1 < input.length ? input[index + 1] : ''\r\n\r\n if (singleQuoted) {\r\n buffer += char\r\n if (char === \"'\" && next === \"'\") {\r\n buffer += next\r\n index += 1\r\n continue\r\n }\r\n if (char === \"'\") {\r\n singleQuoted = false\r\n }\r\n continue\r\n }\r\n\r\n if (doubleQuoted) {\r\n buffer += char\r\n if (char === '\"' && next === '\"') {\r\n buffer += next\r\n index += 1\r\n continue\r\n }\r\n if (char === '\"') {\r\n doubleQuoted = false\r\n }\r\n continue\r\n }\r\n\r\n if (char === \"'\") {\r\n singleQuoted = true\r\n buffer += char\r\n continue\r\n }\r\n if (char === '\"') {\r\n doubleQuoted = true\r\n buffer += char\r\n continue\r\n }\r\n\r\n if (char === '(') {\r\n depth += 1\r\n buffer += char\r\n continue\r\n }\r\n if (char === ')') {\r\n depth -= 1\r\n if (depth < 0) return null\r\n buffer += char\r\n continue\r\n }\r\n\r\n if (char === ',' && depth === 0) {\r\n parts.push(buffer.trim())\r\n buffer = ''\r\n continue\r\n }\r\n\r\n buffer += char\r\n }\r\n\r\n if (singleQuoted || doubleQuoted || depth !== 0) {\r\n return null\r\n }\r\n\r\n if (buffer.trim().length > 0) {\r\n parts.push(buffer.trim())\r\n }\r\n\r\n return parts\r\n}\r\n\r\n/**\r\n * Quotes identifier lists while preserving raw SQL expressions.\r\n *\r\n * Examples:\r\n * - `\"table, user\"` -> `\"\\\"table\\\", \\\"user\\\"\"`\r\n * - `concat(name, ',') as label, id` -> unchanged\r\n */\r\nexport function quoteSelectColumnsExpression(columns: string): string {\r\n const trimmed = columns.trim()\r\n if (!trimmed || trimmed === '*') return trimmed || '*'\r\n\r\n const tokens = splitTopLevelCommaSeparated(trimmed)\r\n if (!tokens || tokens.length === 0) {\r\n return trimmed\r\n }\r\n\r\n if (!tokens.every(canAutoQuoteToken)) {\r\n return trimmed\r\n }\r\n\r\n return tokens.map(quoteSelectToken).join(', ')\r\n}\r\n\r\n/**\r\n * Immutable identifier object with consistent SQL rendering.\r\n */\r\nexport interface SqlIdentifier {\r\n readonly segments: string[]\r\n toSql(): string\r\n toString(): string\r\n}\r\n\r\nclass SqlIdentifierPath implements SqlIdentifier {\r\n readonly segments: string[]\r\n\r\n constructor(segments: string[]) {\r\n this.segments = segments\r\n }\r\n\r\n toSql(): string {\r\n return this.segments.map(quoteIdentifierSegment).join('.')\r\n }\r\n\r\n toString(): string {\r\n return this.toSql()\r\n }\r\n}\r\n\r\n/**\r\n * Creates a quoted identifier object from segment or dotted inputs.\r\n */\r\nexport function identifier(...segments: string[]): SqlIdentifier {\r\n const expandedSegments = segments\r\n .flatMap(segment => segment.split('.'))\r\n .map(segment => segment.trim())\r\n .filter(segment => segment.length > 0)\r\n\r\n return new SqlIdentifierPath(expandedSegments)\r\n}\r\n\r\n","export interface AthenaAuthAdminLimits {\n maxAdminJsonBytes: number\n maxAdminJsonDepth: number\n maxTemplateVariables: number\n maxTemplateVariableLength: number\n}\n\nexport const ATHENA_AUTH_MAX_ADMIN_JSON_BYTES = 32 * 1024\nexport const ATHENA_AUTH_MAX_ADMIN_JSON_DEPTH = 8\nexport const ATHENA_AUTH_MAX_TEMPLATE_VARIABLES = 64\nexport const ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH = 128\n\nexport const ATHENA_AUTH_ADMIN_LIMITS = {\n maxAdminJsonBytes: ATHENA_AUTH_MAX_ADMIN_JSON_BYTES,\n maxAdminJsonDepth: ATHENA_AUTH_MAX_ADMIN_JSON_DEPTH,\n maxTemplateVariables: ATHENA_AUTH_MAX_TEMPLATE_VARIABLES,\n maxTemplateVariableLength: ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH,\n} as const satisfies AthenaAuthAdminLimits\n\nfunction describeTemplateVariableTarget(target?: string) {\n const normalized = target?.trim()\n return normalized && normalized.length > 0\n ? normalized\n : 'Athena auth admin email template variables'\n}\n\nexport function assertAthenaAuthTemplateVariables(\n variables: unknown,\n target?: string,\n): asserts variables is string[] {\n const label = describeTemplateVariableTarget(target)\n if (!Array.isArray(variables)) {\n throw new Error(`${label} must be an array of strings.`)\n }\n\n if (variables.length > ATHENA_AUTH_MAX_TEMPLATE_VARIABLES) {\n throw new Error(\n `${label} cannot contain more than ${ATHENA_AUTH_MAX_TEMPLATE_VARIABLES} entries.`,\n )\n }\n\n variables.forEach((variable, index) => {\n if (typeof variable !== 'string') {\n throw new Error(\n `${label} must contain only strings. Received ${typeof variable} at index ${index}.`,\n )\n }\n\n if (variable.length > ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH) {\n throw new Error(\n `${label} cannot contain entries longer than ${ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH} characters. Received ${variable.length} characters at index ${index}.`,\n )\n }\n })\n}\n","import type {\r\n AthenaAuthEmailTemplateBuilder,\r\n AthenaAuthEmailTemplateCreateFromDefinitionInput,\r\n AthenaAuthEmailTemplateDefinition,\r\n AthenaAuthEmailTemplateUpdateFromDefinitionInput,\r\n AthenaAuthLooseRecord,\r\n AthenaAuthReactEmailComponent,\r\n AthenaAuthReactEmailConfig,\r\n AthenaAuthReactEmailEventPhase,\r\n AthenaAuthReactEmailProps,\r\n AthenaAuthReactEmailRenderEvent,\r\n AthenaAuthReactEmailRenderInput,\r\n AthenaAuthReactEmailRenderOptions,\r\n} from './types.ts'\r\n\r\ntype ReactEmailRenderModule = {\r\n render: (element: unknown) => string | Promise<string>\r\n toPlainText?: (html: string) => string | Promise<string>\r\n pretty?: (html: string) => string | Promise<string>\r\n}\r\n\r\nexport interface AthenaAuthRenderedReactEmail {\r\n html: string\r\n text?: string\r\n}\r\n\r\nexport interface AthenaAuthReactEmailPayload {\r\n react?: AthenaAuthReactEmailRenderInput\r\n}\r\n\r\nexport interface AthenaAuthReactEmailRuntimeOptions {\r\n route?: string\r\n defaults?: AthenaAuthReactEmailRenderOptions\r\n observe?: (event: AthenaAuthReactEmailRenderEvent) => void\r\n}\r\n\r\ninterface ResolvePayloadFieldsInput {\r\n htmlField: string\r\n textField: string\r\n variablesField?: string\r\n}\r\n\r\nlet reactEmailRenderModulePromise: Promise<ReactEmailRenderModule> | undefined\r\n\r\nfunction isRecord(value: unknown): value is AthenaAuthLooseRecord {\r\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\r\n}\r\n\r\nfunction isFunction(value: unknown): value is (...args: unknown[]) => unknown {\r\n return typeof value === 'function'\r\n}\r\n\r\nfunction toStringOrUndefined(value: unknown): string | undefined {\r\n if (typeof value !== 'string') return undefined\r\n return value\r\n}\r\n\r\nfunction nowIsoString() {\r\n return new Date().toISOString()\r\n}\r\n\r\nfunction emitReactEmailEvent(\r\n observe: ((event: AthenaAuthReactEmailRenderEvent) => void) | undefined,\r\n phase: AthenaAuthReactEmailEventPhase,\r\n input: Omit<AthenaAuthReactEmailRenderEvent, 'phase' | 'timestamp'> = {},\r\n) {\r\n if (!observe) return\r\n try {\r\n observe({\r\n phase,\r\n timestamp: nowIsoString(),\r\n ...input,\r\n })\r\n } catch {\r\n // Observability hooks are non-blocking.\r\n }\r\n}\r\n\r\nfunction mergeRenderDefaults(\r\n input: AthenaAuthReactEmailRenderInput,\r\n defaults?: AthenaAuthReactEmailRenderOptions,\r\n): AthenaAuthReactEmailRenderInput {\r\n return {\r\n ...input,\r\n pretty: input.pretty ?? defaults?.pretty,\r\n includePlainText: input.includePlainText ?? defaults?.includePlainText,\r\n }\r\n}\r\n\r\nfunction mergeRuntimeOptions(\r\n options?: AthenaAuthReactEmailRuntimeOptions | AthenaAuthReactEmailConfig,\r\n): AthenaAuthReactEmailRuntimeOptions | undefined {\r\n if (!options) return undefined\r\n return {\r\n defaults: options.defaults,\r\n observe: options.observe,\r\n route: 'route' in options ? options.route : undefined,\r\n }\r\n}\r\n\r\nasync function resolveReactEmailRenderModule(): Promise<ReactEmailRenderModule> {\r\n if (!reactEmailRenderModulePromise) {\r\n reactEmailRenderModulePromise = (async () => {\r\n try {\r\n const loaded = await import('@react-email/render')\r\n if (!isFunction(loaded.render)) {\r\n throw new Error('missing render(...) export')\r\n }\r\n return {\r\n render: loaded.render as ReactEmailRenderModule['render'],\r\n toPlainText: isFunction(loaded.toPlainText)\r\n ? (loaded.toPlainText as ReactEmailRenderModule['toPlainText'])\r\n : undefined,\r\n pretty: isFunction(loaded.pretty)\r\n ? (loaded.pretty as ReactEmailRenderModule['pretty'])\r\n : undefined,\r\n }\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : String(error)\r\n throw new Error(\r\n `React Email rendering requires @react-email/render. Install it in your project (for example: pnpm add @react-email/render). Loader error: ${message}`,\r\n )\r\n }\r\n })()\r\n }\r\n\r\n if (!reactEmailRenderModulePromise) {\r\n throw new Error('React Email renderer module failed to initialize')\r\n }\r\n\r\n return reactEmailRenderModulePromise\r\n}\r\n\r\nasync function resolveReactEmailElement(input: AthenaAuthReactEmailRenderInput): Promise<unknown> {\r\n if (input.element != null) {\r\n return input.element\r\n }\r\n if (!input.component) {\r\n throw new Error('react email payload requires either `element` or `component`')\r\n }\r\n\r\n try {\r\n const reactModule = await import('react')\r\n if (typeof reactModule.createElement !== 'function') {\r\n throw new Error('react createElement(...) export is unavailable')\r\n }\r\n return reactModule.createElement(\r\n input.component as Parameters<typeof reactModule.createElement>[0],\r\n input.props ?? {},\r\n )\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : String(error)\r\n throw new Error(\r\n `React Email component rendering requires react runtime support. Install react in your project. Loader error: ${message}`,\r\n )\r\n }\r\n}\r\n\r\nexport function createAuthReactEmailInput<\r\n TProps extends AthenaAuthReactEmailProps = AthenaAuthReactEmailProps,\r\n>(\r\n component: AthenaAuthReactEmailComponent<TProps>,\r\n props: TProps,\r\n overrides: Omit<AthenaAuthReactEmailRenderInput, 'component' | 'props' | 'element'> = {},\r\n): AthenaAuthReactEmailRenderInput {\r\n return {\r\n ...overrides,\r\n component: component as AthenaAuthReactEmailComponent,\r\n props,\r\n }\r\n}\r\n\r\nexport function defineAuthEmailTemplate<\r\n TProps extends AthenaAuthReactEmailProps = AthenaAuthReactEmailProps,\r\n>(\r\n definition: AthenaAuthEmailTemplateDefinition<TProps>,\r\n): AthenaAuthEmailTemplateBuilder<TProps> {\r\n const react: AthenaAuthEmailTemplateBuilder<TProps>['react'] = (props, overrides) =>\r\n createAuthReactEmailInput(definition.component, props, {\r\n ...definition.defaults,\r\n ...overrides,\r\n })\r\n\r\n return {\r\n component: definition.component,\r\n react,\r\n toTemplateCreate: (input: AthenaAuthEmailTemplateCreateFromDefinitionInput<TProps>) => {\r\n const templateKey = input.templateKey ?? definition.templateKey\r\n const subjectTemplate = input.subjectTemplate ?? definition.subjectTemplate\r\n if (!templateKey) {\r\n throw new Error('defineAuthEmailTemplate.toTemplateCreate requires templateKey')\r\n }\r\n if (!subjectTemplate) {\r\n throw new Error('defineAuthEmailTemplate.toTemplateCreate requires subjectTemplate')\r\n }\r\n\r\n const { props, react: reactOverrides, ...rest } = input\r\n return {\r\n ...rest,\r\n templateKey,\r\n subjectTemplate,\r\n react: react(props, reactOverrides),\r\n }\r\n },\r\n toTemplateUpdate: (input: AthenaAuthEmailTemplateUpdateFromDefinitionInput<TProps>) => {\r\n const { props, react: reactOverrides, ...rest } = input\r\n return {\r\n ...rest,\r\n react: react(props, reactOverrides),\r\n }\r\n },\r\n }\r\n}\r\n\r\nexport async function renderAthenaReactEmail(\r\n input: AthenaAuthReactEmailRenderInput,\r\n options?: AthenaAuthReactEmailRuntimeOptions | AthenaAuthReactEmailConfig,\r\n): Promise<AthenaAuthRenderedReactEmail> {\r\n if (!isRecord(input)) {\r\n throw new Error('react email payload must be an object')\r\n }\r\n\r\n const runtimeOptions = mergeRuntimeOptions(options)\r\n const start = Date.now()\r\n emitReactEmailEvent(runtimeOptions?.observe, 'render:start', {\r\n route: runtimeOptions?.route,\r\n message: 'Rendering react email payload',\r\n })\r\n\r\n try {\r\n const normalizedInput = mergeRenderDefaults(input, runtimeOptions?.defaults)\r\n const element = await resolveReactEmailElement(normalizedInput)\r\n const renderModule = await resolveReactEmailRenderModule()\r\n const htmlValue = await renderModule.render(element)\r\n const renderedHtml = typeof htmlValue === 'string' ? htmlValue : String(htmlValue ?? '')\r\n if (!renderedHtml.trim()) {\r\n throw new Error('react email renderer returned an empty HTML string')\r\n }\r\n\r\n let html = renderedHtml\r\n if (normalizedInput.pretty && renderModule.pretty) {\r\n const prettyValue = await renderModule.pretty(renderedHtml)\r\n if (typeof prettyValue === 'string' && prettyValue.trim().length > 0) {\r\n html = prettyValue\r\n }\r\n }\r\n\r\n const explicitText = toStringOrUndefined(normalizedInput.text)\r\n if (explicitText !== undefined) {\r\n emitReactEmailEvent(runtimeOptions?.observe, 'render:success', {\r\n route: runtimeOptions?.route,\r\n durationMs: Date.now() - start,\r\n message: 'Rendered react email with explicit text',\r\n })\r\n return {\r\n html,\r\n text: explicitText,\r\n }\r\n }\r\n\r\n if (normalizedInput.includePlainText === false || !renderModule.toPlainText) {\r\n emitReactEmailEvent(runtimeOptions?.observe, 'render:success', {\r\n route: runtimeOptions?.route,\r\n durationMs: Date.now() - start,\r\n message: 'Rendered react email without plain-text derivation',\r\n })\r\n return { html }\r\n }\r\n\r\n const plainTextValue = await renderModule.toPlainText(html)\r\n const plainText = toStringOrUndefined(plainTextValue)\r\n emitReactEmailEvent(runtimeOptions?.observe, 'render:success', {\r\n route: runtimeOptions?.route,\r\n durationMs: Date.now() - start,\r\n message: plainText ? 'Rendered react email with derived plain text' : 'Rendered react email HTML only',\r\n })\r\n if (plainText === undefined) {\r\n return { html }\r\n }\r\n\r\n return {\r\n html,\r\n text: plainText,\r\n }\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : String(error)\r\n emitReactEmailEvent(runtimeOptions?.observe, 'render:error', {\r\n route: runtimeOptions?.route,\r\n durationMs: Date.now() - start,\r\n error: message,\r\n message: 'Failed to render react email payload',\r\n })\r\n throw error\r\n }\r\n}\r\n\r\nexport async function resolveReactEmailPayloadFields<\r\n TInput extends AthenaAuthReactEmailPayload,\r\n>(\r\n input: TInput,\r\n fields: ResolvePayloadFieldsInput,\r\n options?: AthenaAuthReactEmailRuntimeOptions | AthenaAuthReactEmailConfig,\r\n): Promise<Omit<TInput, 'react'>> {\r\n const { react, ...payloadWithoutReact } = input\r\n if (!react) {\r\n return payloadWithoutReact as Omit<TInput, 'react'>\r\n }\r\n\r\n const rendered = await renderAthenaReactEmail(react, options)\r\n const payload: AthenaAuthLooseRecord = {\r\n ...(payloadWithoutReact as AthenaAuthLooseRecord),\r\n }\r\n\r\n payload[fields.htmlField] = rendered.html\r\n\r\n const currentTextValue = payload[fields.textField]\r\n if (\r\n rendered.text !== undefined &&\r\n (currentTextValue === undefined || currentTextValue === null || currentTextValue === '')\r\n ) {\r\n payload[fields.textField] = rendered.text\r\n }\r\n\r\n if (\r\n fields.variablesField &&\r\n (payload[fields.variablesField] === undefined || payload[fields.variablesField] === null) &&\r\n isRecord(react.props)\r\n ) {\r\n const derivedVariables = Object.keys(react.props)\r\n if (derivedVariables.length > 0) {\r\n payload[fields.variablesField] = derivedVariables\r\n }\r\n }\r\n\r\n return payload as Omit<TInput, 'react'>\r\n}\r\n","import type {\n AthenaAdminHasPermissionRequest,\n AthenaAdminRevokeUserSessionRequest,\n AthenaAdminRevokeUserSessionsRequest,\n AthenaAdminSuccessResponse,\n AthenaAdminHasPermissionResponse,\n AthenaApiKeyDeleteAllExpiredResponse,\n AthenaAuthCallOptions,\r\n AthenaAuthClientConfig,\r\n AthenaAuthEndpointPath,\r\n AthenaAuthErrorCode,\r\n AthenaAuthErrorDetails,\r\n AthenaAuthFetchCompatibleInput,\n AthenaAuthGetUserResponse,\n AthenaAuthGenericInput,\n AthenaAuthGenericQueryInput,\n AthenaAuthBindings,\n AthenaAuthEmailListQuery,\n AthenaAuthEmailListResponse,\n AthenaAuthGuardResult,\n AthenaAuthHealthResponse,\n AthenaAuthOkResponse,\n AthenaAuthLinkedAccount,\r\n AthenaAuthOrganizationBindings,\r\n AthenaAuthOrganization,\r\n AthenaAuthOrganizationCheckSlugRequest,\r\n AthenaAuthOrganizationCreateRequest,\r\n AthenaAuthOrganizationDeleteRequest,\r\n AthenaAuthOrganizationGetFullQuery,\r\n AthenaAuthOrganizationGetInvitationQuery,\r\n AthenaAuthOrganizationInvitation,\r\n AthenaAuthOrganizationInvitationActionRequest,\r\n AthenaAuthOrganizationInviteMemberRequest,\r\n AthenaAuthOrganizationLeaveRequest,\r\n AthenaAuthOrganizationListInvitationsQuery,\r\n AthenaAuthOrganizationListMembersQuery,\r\n AthenaAuthOrganizationListUserInvitationsQuery,\r\n AthenaAuthOrganizationMember,\r\n AthenaAuthOrganizationRemoveMemberRequest,\r\n AthenaAuthOrganizationSetActiveRequest,\r\n AthenaAuthOrganizationUpdateMemberRoleRequest,\r\n AthenaAuthOrganizationUpdateRequest,\r\n AthenaAuthMethod,\r\n AthenaAuthQueryValue,\r\n AthenaAuthRequestInput,\r\n AthenaAuthReactEmailRenderInput,\r\n AthenaAuthResult,\r\n AthenaAuthSdkClient,\r\n AthenaAuthSession,\r\n AthenaAuthSessionResponse,\r\n AthenaAuthSignInResponse,\r\n AthenaAuthSignOutResponse,\r\n AthenaAuthSocialRedirectResponse,\r\n AthenaAuthStatusResponse,\r\n AthenaAuthUser,\r\n AthenaChangeEmailRequest,\r\n AthenaChangePasswordRequest,\r\n AthenaDeleteUserCallbackRequest,\r\n AthenaDeleteUserRequest,\r\n AthenaDeleteUserResponse,\r\n AthenaEmailSignInRequest,\r\n AthenaEmailSignUpRequest,\r\n AthenaForgetPasswordRequest,\r\n AthenaLinkSocialRequest,\r\n AthenaOAuthAccountTokenRequest,\r\n AthenaOAuthTokenBundle,\r\n AthenaResetPasswordRequest,\r\n AthenaSendVerificationEmailRequest,\r\n AthenaSocialSignInRequest,\r\n AthenaTwoFactorGenerateBackupCodesRequest,\r\n AthenaTwoFactorGenerateBackupCodesResponse,\r\n AthenaUnlinkAccountRequest,\r\n AthenaUpdateUserRequest,\r\n AthenaVerifyEmailRequest,\r\n AthenaUsernameSignInRequest,\r\n} from './types.ts'\nimport { assertAthenaAuthTemplateVariables } from './limits.ts'\nimport { resolveReactEmailPayloadFields } from './react-email.ts'\nimport { buildSdkHeaderValue } from '../sdk-version.ts'\n\nconst DEFAULT_AUTH_BASE_URL = 'http://localhost:3001/api/auth'\nconst SDK_NAME = 'xylex-group/athena-auth'\nconst SDK_HEADER_VALUE = buildSdkHeaderValue(SDK_NAME)\nconst NO_CACHE_HEADER_VALUE = 'no-cache'\n\r\ntype AuthRequestContext = {\r\n endpoint: AthenaAuthEndpointPath\r\n method: AthenaAuthMethod\r\n}\r\n\r\ntype InternalErrorInput = AuthRequestContext & {\n code: AthenaAuthErrorCode\n status: number\n message: string\n requestId?: string\r\n hint?: string\r\n cause?: string\r\n}\r\n\r\nfunction normalizeBaseUrl(baseUrl?: string): string {\r\n return (baseUrl ?? DEFAULT_AUTH_BASE_URL).replace(/\\/$/, '')\r\n}\r\n\r\nfunction isRecord(value: unknown): value is Record<string, unknown> {\r\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\r\n}\r\n\r\nfunction normalizeHeaderValue(value?: string | null): string | undefined {\n return value ? value : undefined\n}\n\nfunction isCacheControlHeaderName(name: string): boolean {\n return name.toLowerCase() === 'cache-control'\n}\n\r\nfunction parseResponseBody(rawText: string, contentType: string | null) {\r\n if (!rawText) {\r\n return { parsed: null as unknown, parseFailed: false }\r\n }\r\n\r\n const contentTypeSuggestsJson =\r\n contentType?.toLowerCase().includes('application/json') ?? false\r\n const looksJson =\r\n contentTypeSuggestsJson || rawText.startsWith('{') || rawText.startsWith('[')\r\n\r\n if (!looksJson) {\r\n return { parsed: rawText as unknown, parseFailed: false }\r\n }\r\n\r\n try {\r\n return { parsed: JSON.parse(rawText) as unknown, parseFailed: false }\r\n } catch {\r\n return { parsed: rawText as unknown, parseFailed: true }\r\n }\r\n}\r\n\r\nfunction resolveRequestId(headers: Headers): string | undefined {\r\n return (\r\n headers.get('x-request-id') ??\r\n headers.get('x-correlation-id') ??\r\n headers.get('x-athena-request-id') ??\r\n undefined\r\n )\r\n}\r\n\r\nfunction resolveErrorMessage(payload: unknown, fallback: string) {\r\n if (isRecord(payload)) {\r\n const messageCandidates = [payload.error, payload.message, payload.details]\r\n for (const candidate of messageCandidates) {\r\n if (typeof candidate === 'string' && candidate.trim().length > 0) {\r\n return candidate.trim()\r\n }\r\n }\r\n }\r\n\r\n if (typeof payload === 'string' && payload.trim().length > 0) {\r\n return payload.trim()\r\n }\r\n\r\n return fallback\r\n}\r\n\r\nfunction toErrorDetails(input: InternalErrorInput): AthenaAuthErrorDetails {\r\n return {\r\n code: input.code,\r\n message: input.message,\r\n status: input.status,\r\n endpoint: input.endpoint,\r\n method: input.method,\r\n requestId: input.requestId,\r\n hint: input.hint,\r\n cause: input.cause,\r\n }\r\n}\r\n\r\nfunction mergeCallOptions(\n base?: AthenaAuthCallOptions,\n override?: AthenaAuthCallOptions,\n): AthenaAuthCallOptions | undefined {\n if (!base && !override) return undefined\r\n return {\r\n ...base,\r\n ...override,\r\n headers: {\r\n ...(base?.headers ?? {}),\r\n ...(override?.headers ?? {}),\r\n },\r\n }\n}\n\nfunction toSessionGuardFailure(\n sessionResult: AthenaAuthResult<AthenaAuthSessionResponse>,\n): AthenaAuthGuardResult {\n if (sessionResult.status === 401 || sessionResult.data == null) {\n return {\n ok: false,\n reason: 'unauthorized',\n status: 401,\n error: sessionResult.error ?? 'Unauthorized',\n sessionResult,\n }\n }\n\n return {\n ok: false,\n reason: 'upstream_error',\n status: sessionResult.status,\n error: sessionResult.error ?? 'Failed to resolve current session',\n sessionResult,\n }\n}\n\nfunction toPermissionGuardFailure(\n permissionResult: AthenaAuthResult<AthenaAdminHasPermissionResponse>,\n sessionResult: AthenaAuthResult<AthenaAuthSessionResponse>,\n): AthenaAuthGuardResult {\n if (permissionResult.status === 401) {\n return {\n ok: false,\n reason: 'unauthorized',\n status: 401,\n error: permissionResult.error ?? 'Unauthorized',\n sessionResult,\n permissionResult,\n }\n }\n\n if (permissionResult.status === 403) {\n return {\n ok: false,\n reason: 'forbidden',\n status: 403,\n error: permissionResult.error ?? 'Forbidden',\n sessionResult,\n permissionResult,\n }\n }\n\n return {\n ok: false,\n reason: 'upstream_error',\n status: permissionResult.status,\n error: permissionResult.error ?? 'Failed to resolve permission check',\n sessionResult,\n permissionResult,\n }\n}\n\r\nfunction extractFetchOptions<T extends AthenaAuthFetchCompatibleInput | undefined>(input: T) {\r\n if (!input) {\r\n return {\r\n payload: undefined,\r\n fetchOptions: undefined,\r\n }\r\n }\r\n\r\n const { fetchOptions, ...rest } = input\r\n const hasPayloadKeys = Object.keys(rest).length > 0\r\n return {\r\n payload: hasPayloadKeys ? rest : undefined,\r\n fetchOptions,\r\n }\r\n}\r\n\r\nfunction buildHeaders(\n config: AthenaAuthClientConfig,\n options?: AthenaAuthCallOptions,\n): Record<string, string> {\n const forceNoCache = Boolean(config.forceNoCache || options?.forceNoCache)\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'X-Athena-Sdk': SDK_HEADER_VALUE,\n }\n\r\n const apiKey = options?.apiKey ?? config.apiKey\r\n if (apiKey) {\r\n headers.apikey = apiKey\r\n headers['x-api-key'] = apiKey\r\n }\r\n\r\n const bearerToken = options?.bearerToken ?? config.bearerToken\n if (bearerToken) {\n headers.Authorization = `Bearer ${bearerToken}`\n }\n\n const cookie = options?.cookie ?? config.cookie\n if (cookie) {\n headers.Cookie = cookie\n }\n\n const sessionToken = options?.sessionToken ?? config.sessionToken\n if (sessionToken) {\n headers['X-Athena-Auth-Session-Token'] = sessionToken\n }\n\n const mergedExtraHeaders = {\n ...(config.headers ?? {}),\n ...(options?.headers ?? {}),\n }\n\n Object.entries(mergedExtraHeaders).forEach(([key, value]) => {\n if (forceNoCache && isCacheControlHeaderName(key)) {\n return\n }\n const normalized = normalizeHeaderValue(value)\n if (normalized) {\n headers[key] = normalized\n }\n })\n\n if (forceNoCache) {\n headers['Cache-Control'] = NO_CACHE_HEADER_VALUE\n }\n\n return headers\n}\n\r\nfunction appendQueryParam(searchParams: URLSearchParams, key: string, value: AthenaAuthQueryValue) {\r\n if (value === undefined || value === null) return\r\n if (Array.isArray(value)) {\r\n value.forEach(item => {\r\n searchParams.append(key, String(item))\r\n })\r\n return\r\n }\r\n searchParams.append(key, String(value))\r\n}\r\n\r\nfunction buildRequestUrl(\r\n baseUrl: string,\r\n endpoint: AthenaAuthEndpointPath,\r\n query?: Record<string, AthenaAuthQueryValue>,\r\n) {\r\n const url = `${baseUrl}${endpoint}`\r\n if (!query || Object.keys(query).length === 0) return url\r\n const searchParams = new URLSearchParams()\r\n Object.entries(query).forEach(([key, value]) => appendQueryParam(searchParams, key, value))\r\n const queryText = searchParams.toString()\r\n return queryText ? `${url}?${queryText}` : url\r\n}\r\n\r\nfunction inferDefaultMethod(endpoint: AthenaAuthEndpointPath): AthenaAuthMethod {\r\n if (endpoint.startsWith('/reset-password/')) {\r\n return 'GET'\r\n }\r\n\r\n switch (endpoint) {\r\n case '/get-session':\r\n case '/list-sessions':\r\n case '/verify-email':\r\n case '/change-email/verify':\r\n case '/delete-user/verify':\r\n case '/email-list':\r\n case '/email/list':\r\n case '/delete-user/callback':\r\n case '/list-accounts':\r\n case '/passkey/generate-register-options':\r\n case '/passkey/list-user-passkeys':\r\n case '/.well-known/webauthn':\r\n case '/admin/list-users':\r\n case '/admin/athena-client/list':\r\n case '/admin/audit-log/list':\r\n case '/admin/email/get':\r\n case '/admin/email-failure/list':\r\n case '/admin/email-failure/get':\r\n case '/admin/email-template/get':\r\n case '/admin/email-template/list':\r\n case '/admin/email/list':\r\n case '/api-key/get':\r\n case '/api-key/list':\r\n case '/organization/get-full-organization':\r\n case '/organization/list':\r\n case '/organization/get-invitation':\r\n case '/organization/list-invitations':\r\n case '/organization/list-user-invitations':\r\n case '/organization/list-members':\r\n case '/organization/get-active-member':\r\n case '/health':\r\n case '/ok':\r\n case '/error':\r\n return 'GET'\r\n default:\r\n return 'POST'\r\n }\r\n}\r\n\r\nasync function callAuthEndpoint<T>(\r\n config: AthenaAuthClientConfig,\r\n context: AuthRequestContext,\r\n body?: unknown,\r\n query?: Record<string, AthenaAuthQueryValue>,\r\n options?: AthenaAuthCallOptions,\r\n): Promise<AthenaAuthResult<T>> {\r\n const baseUrl = normalizeBaseUrl(options?.baseUrl ?? config.baseUrl)\r\n const url = buildRequestUrl(baseUrl, context.endpoint, query)\r\n const headers = buildHeaders(config, options)\r\n const credentials = options?.credentials ?? config.credentials ?? 'include'\r\n const requestInit: RequestInit = {\r\n method: context.method,\r\n headers,\r\n credentials,\r\n signal: options?.signal,\r\n }\r\n\r\n if (context.method !== 'GET') {\r\n requestInit.body = JSON.stringify(body ?? {})\r\n }\r\n\r\n const fetcher = config.fetch ?? globalThis.fetch\r\n if (!fetcher) {\r\n const details = toErrorDetails({\r\n code: 'UNKNOWN_ERROR',\r\n message: 'No fetch implementation available for auth client',\r\n status: 0,\r\n endpoint: context.endpoint,\r\n method: context.method,\r\n hint: 'Use Node 18+ or provide `fetch` via createClient(..., { auth: { fetch } }) or createAuthClient({ fetch })',\r\n })\r\n return {\r\n ok: false,\r\n status: 0,\r\n data: null,\r\n error: details.message,\r\n errorDetails: details,\r\n raw: null,\r\n }\r\n }\r\n\r\n try {\r\n const response = await fetcher(url, requestInit)\r\n const rawText = await response.text()\r\n const requestId = resolveRequestId(response.headers)\r\n const parsedBody = parseResponseBody(rawText ?? '', response.headers.get('content-type'))\r\n\r\n if (parsedBody.parseFailed) {\r\n const details = toErrorDetails({\r\n code: 'INVALID_JSON',\r\n message: 'Auth server returned malformed JSON',\r\n status: response.status,\r\n endpoint: context.endpoint,\r\n method: context.method,\r\n requestId,\r\n hint: 'Verify the auth endpoint response body is valid JSON.',\r\n cause: rawText.slice(0, 300),\r\n })\r\n return {\r\n ok: false,\r\n status: response.status,\r\n data: null,\r\n error: details.message,\r\n errorDetails: details,\r\n raw: parsedBody.parsed,\r\n }\r\n }\r\n\r\n const parsed = parsedBody.parsed\r\n\r\n if (!response.ok) {\r\n const details = toErrorDetails({\r\n code: 'HTTP_ERROR',\r\n message: resolveErrorMessage(\r\n parsed,\r\n `Auth endpoint ${context.method} ${context.endpoint} failed with status ${response.status}`,\r\n ),\r\n status: response.status,\r\n endpoint: context.endpoint,\r\n method: context.method,\r\n requestId,\r\n })\r\n return {\r\n ok: false,\r\n status: response.status,\r\n data: null,\r\n error: details.message,\r\n errorDetails: details,\r\n raw: parsed,\r\n }\r\n }\r\n\r\n return {\r\n ok: true,\r\n status: response.status,\r\n data: (parsed as T) ?? null,\r\n error: null,\r\n errorDetails: null,\r\n raw: parsed,\r\n }\r\n } catch (callError) {\r\n const message = callError instanceof Error ? callError.message : String(callError)\r\n const details = toErrorDetails({\r\n code: 'NETWORK_ERROR',\r\n message: `Network error while calling ${context.method} ${context.endpoint}: ${message}`,\r\n status: 0,\r\n endpoint: context.endpoint,\r\n method: context.method,\r\n cause: message,\r\n hint: 'Check auth server URL, DNS, and network reachability.',\r\n })\r\n return {\r\n ok: false,\r\n status: 0,\r\n data: null,\r\n error: details.message,\r\n errorDetails: details,\r\n raw: null,\r\n }\r\n }\r\n}\r\n\r\nfunction executePostWithCompatibleInput<TPayload extends AthenaAuthFetchCompatibleInput, TResult>(\r\n config: AthenaAuthClientConfig,\r\n context: AuthRequestContext,\r\n input: TPayload,\r\n options?: AthenaAuthCallOptions,\r\n) {\r\n const { payload, fetchOptions } = extractFetchOptions(input)\r\n const mergedOptions = mergeCallOptions(fetchOptions, options)\r\n return callAuthEndpoint<TResult>(config, context, payload ?? {}, undefined, mergedOptions)\r\n}\r\n\r\nfunction executePostWithOptionalInput<TResult>(\r\n config: AthenaAuthClientConfig,\r\n context: AuthRequestContext,\r\n input?: AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n) {\r\n const { fetchOptions } = extractFetchOptions(input)\r\n const mergedOptions = mergeCallOptions(fetchOptions, options)\r\n return callAuthEndpoint<TResult>(config, context, {}, undefined, mergedOptions)\r\n}\r\n\r\nfunction executeGetWithCompatibleInput<TResult>(\r\n config: AthenaAuthClientConfig,\r\n context: AuthRequestContext,\r\n input?: AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n) {\r\n const { fetchOptions } = extractFetchOptions(input)\r\n const mergedOptions = mergeCallOptions(fetchOptions, options)\r\n return callAuthEndpoint<TResult>(config, context, undefined, undefined, mergedOptions)\r\n}\r\n\r\nfunction executeGetWithQueryCompatibleInput<\r\n TQuery extends object,\r\n TResult,\r\n>(\r\n config: AthenaAuthClientConfig,\r\n context: AuthRequestContext,\r\n input?: { query?: TQuery } & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n) {\r\n const { payload, fetchOptions } = extractFetchOptions(input)\r\n const mergedOptions = mergeCallOptions(fetchOptions, options)\r\n const query = (payload as { query?: Record<string, AthenaAuthQueryValue> } | undefined)?.query\r\n return callAuthEndpoint<TResult>(\r\n config,\r\n context,\r\n undefined,\r\n query,\r\n mergedOptions,\r\n )\r\n}\r\n\r\n/**\r\n * @deprecated Prefer `createClient(...).auth` from `@xylex-group/athena`.\r\n */\r\nexport function createAuthClient(config: AthenaAuthClientConfig = {}): AthenaAuthSdkClient {\r\n const normalizedBaseUrl = normalizeBaseUrl(config.baseUrl)\r\n const resolvedConfig: AthenaAuthClientConfig = {\r\n ...config,\r\n baseUrl: normalizedBaseUrl,\r\n }\r\n\r\n const request = <T = unknown>(\r\n input: AthenaAuthRequestInput,\r\n options?: AthenaAuthCallOptions,\r\n ): Promise<AthenaAuthResult<T>> => {\r\n const method = input.method ?? (input.body !== undefined ? 'POST' : inferDefaultMethod(input.endpoint))\r\n const mergedOptions = mergeCallOptions(input.fetchOptions, options)\r\n return callAuthEndpoint<T>(\r\n resolvedConfig,\r\n { endpoint: input.endpoint, method },\r\n input.body,\r\n input.query,\r\n mergedOptions,\r\n )\r\n }\r\n\r\n const postGeneric = <T = unknown>(\r\n endpoint: AthenaAuthEndpointPath,\r\n input?: (AthenaAuthFetchCompatibleInput & object),\r\n options?: AthenaAuthCallOptions,\r\n ) => {\r\n const { payload, fetchOptions } = extractFetchOptions(input)\r\n return request<T>(\r\n {\r\n endpoint,\r\n method: 'POST',\r\n body: payload ?? {},\r\n fetchOptions,\r\n },\r\n options,\r\n )\r\n }\r\n\r\n const getGeneric = <T = unknown>(\r\n endpoint: AthenaAuthEndpointPath,\r\n input?: AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) => {\r\n const { fetchOptions } = extractFetchOptions(input)\r\n return request<T>(\r\n {\r\n endpoint,\r\n method: 'GET',\r\n fetchOptions,\r\n },\r\n options,\r\n )\r\n }\r\n\r\n const getWithQuery = <\r\n T = unknown,\r\n TQuery extends object = Record<string, AthenaAuthQueryValue>,\r\n >(\r\n endpoint: AthenaAuthEndpointPath,\r\n input?: AthenaAuthFetchCompatibleInput & {\r\n query?: TQuery\r\n },\r\n options?: AthenaAuthCallOptions,\r\n ) => {\r\n const { payload, fetchOptions } = extractFetchOptions(input)\r\n const query = (payload as { query?: TQuery } | undefined)?.query as\r\n | Record<string, AthenaAuthQueryValue>\r\n | undefined\r\n return request<T>(\r\n {\r\n endpoint,\r\n method: 'GET',\r\n query,\r\n fetchOptions,\r\n },\r\n options,\r\n )\r\n }\r\n\r\n const withReactEmailRoute = (route: AthenaAuthEndpointPath) => ({\r\n ...resolvedConfig.reactEmail,\r\n route,\r\n })\r\n\r\n const resolveAdminEmailPayload = <TInput extends AthenaAuthFetchCompatibleInput & {\r\n react?: AthenaAuthReactEmailRenderInput\r\n }>(\r\n route: '/admin/email/create' | '/admin/email/update',\r\n input: TInput,\r\n ) =>\r\n resolveReactEmailPayloadFields(input, {\r\n htmlField: 'htmlBody',\r\n textField: 'textBody',\r\n }, withReactEmailRoute(route))\r\n\r\n const resolveAdminEmailTemplatePayload = <TInput extends AthenaAuthFetchCompatibleInput & {\n react?: AthenaAuthReactEmailRenderInput\n }>(\n route: '/admin/email-template/create' | '/admin/email-template/update',\n input: TInput,\n ) =>\n resolveReactEmailPayloadFields(input, {\n htmlField: 'htmlTemplate',\n textField: 'textTemplate',\n variablesField: 'variables',\n }, withReactEmailRoute(route)).then(payload => {\n if ('variables' in payload && payload.variables !== undefined && payload.variables !== null) {\n assertAthenaAuthTemplateVariables(\n payload.variables,\n `${route} variables`,\n )\n }\n return payload\n })\n\n const requireSession: AthenaAuthBindings['requireSession'] = async (input, options) => {\n const sessionInput = input?.fetchOptions\n ? { fetchOptions: input.fetchOptions }\n : undefined\n const sessionResult = await getGeneric<AthenaAuthSessionResponse>(\n '/get-session',\n sessionInput,\n options,\n )\n\n if (!sessionResult.ok || sessionResult.data == null) {\n return toSessionGuardFailure(sessionResult)\n }\n\n return {\n ok: true,\n session: sessionResult.data,\n }\n }\n\n const getUser: AthenaAuthBindings['getUser'] = async (input, options) => {\n const sessionResult = await getGeneric<AthenaAuthSessionResponse>(\n '/get-session',\n input,\n options,\n )\n\n if (!sessionResult.ok) {\n return {\n ...sessionResult,\n data: null,\n }\n }\n\n return {\n ...sessionResult,\n data: {\n user: sessionResult.data?.user ?? null,\n } satisfies AthenaAuthGetUserResponse,\n }\n }\n\n const requirePermission = async (\n endpoint: '/admin/has-permission' | '/organization/has-permission',\n input: AthenaAdminHasPermissionRequest & AthenaAuthFetchCompatibleInput,\n options?: AthenaAuthCallOptions,\n ): Promise<AthenaAuthGuardResult> => {\n const sessionGuard = await requireSession(\n input?.fetchOptions ? { fetchOptions: input.fetchOptions } : undefined,\n options,\n )\n\n if (!sessionGuard.ok) {\n return sessionGuard\n }\n\n const permissionResult = await postGeneric<AthenaAdminHasPermissionResponse>(\n endpoint,\n input,\n options,\n )\n\n if (!permissionResult.ok) {\n return toPermissionGuardFailure(permissionResult, {\n ok: true,\n status: 200,\n data: sessionGuard.session,\n error: null,\n errorDetails: null,\n raw: sessionGuard.session,\n })\n }\n\n if (!permissionResult.data?.success) {\n return {\n ok: false,\n reason: 'forbidden',\n status: 403,\n error: permissionResult.data?.error ?? 'Forbidden',\n sessionResult: {\n ok: true,\n status: 200,\n data: sessionGuard.session,\n error: null,\n errorDetails: null,\n raw: sessionGuard.session,\n },\n permissionResult,\n }\n }\n\n return sessionGuard\n }\n\n const listUserEmailsWithFallback: AthenaAuthBindings['user']['email']['list'] = async (input, options) => {\n const primary = await getWithQuery<AthenaAuthEmailListResponse, AthenaAuthEmailListQuery>(\r\n '/email/list',\r\n input,\r\n options,\r\n )\r\n if (primary.ok || primary.status !== 404 || primary.errorDetails?.code !== 'HTTP_ERROR') {\r\n return primary\r\n }\r\n return getWithQuery<AthenaAuthEmailListResponse, AthenaAuthEmailListQuery>(\r\n '/email-list',\r\n input,\r\n options,\r\n )\r\n }\r\n\r\n const healthWithFallback: AthenaAuthBindings['health'] = async (input, options) => {\r\n const primary = await getGeneric<AthenaAuthHealthResponse>('/health', input, options)\r\n if (primary.ok || primary.status !== 404 || primary.errorDetails?.code !== 'HTTP_ERROR') {\r\n return primary\r\n }\r\n\r\n const fallback = await getGeneric<AthenaAuthOkResponse>('/ok', input, options)\r\n if (!fallback.ok) {\r\n return {\r\n ...fallback,\r\n data: null,\r\n }\r\n }\r\n\r\n const fallbackStatus =\r\n isRecord(fallback.data) && typeof fallback.data.ok === 'boolean'\r\n ? (fallback.data.ok ? 'ok' : 'error')\r\n : 'ok'\r\n\r\n return {\r\n ...fallback,\r\n data: {\r\n status: fallbackStatus,\r\n },\r\n }\r\n }\r\n\r\n const signOut = (\r\n input?: AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithOptionalInput<AthenaAuthSignOutResponse>(\r\n resolvedConfig,\r\n { endpoint: '/sign-out', method: 'POST' },\r\n input,\r\n options,\r\n )\r\n\r\n const revokeSessions = (\r\n input?: AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithOptionalInput<AthenaAuthStatusResponse>(\r\n resolvedConfig,\r\n { endpoint: '/revoke-sessions', method: 'POST' },\r\n input,\r\n options,\r\n )\r\n\r\n const revokeOtherSessions = (\r\n input?: AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithOptionalInput<AthenaAuthStatusResponse>(\r\n resolvedConfig,\r\n { endpoint: '/revoke-other-sessions', method: 'POST' },\r\n input,\r\n options,\r\n )\r\n\r\n const revokeSession = (\r\n input: { token: string } & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<typeof input, AthenaAuthStatusResponse>(\r\n resolvedConfig,\r\n { endpoint: '/revoke-session', method: 'POST' },\r\n input,\r\n options,\r\n )\r\n\r\n const deleteUser = (\r\n input?: AthenaDeleteUserRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) => {\r\n const { payload, fetchOptions } = extractFetchOptions(input)\r\n const mergedOptions = mergeCallOptions(fetchOptions, options)\r\n return callAuthEndpoint<AthenaDeleteUserResponse>(\r\n resolvedConfig,\r\n { endpoint: '/delete-user', method: 'POST' },\r\n payload ?? {},\r\n undefined,\r\n mergedOptions,\r\n )\r\n }\r\n\r\n const deleteUserCallback = (\r\n input?: AthenaDeleteUserCallbackRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) => {\r\n const { payload, fetchOptions } = extractFetchOptions(input)\r\n const mergedOptions = mergeCallOptions(fetchOptions, options)\r\n const query = (payload ?? {}) as AthenaDeleteUserCallbackRequest\r\n return callAuthEndpoint<AthenaDeleteUserResponse>(\r\n resolvedConfig,\r\n { endpoint: '/delete-user/callback', method: 'GET' },\r\n undefined,\r\n {\r\n token: query.token,\r\n callbackURL: query.callbackURL,\r\n },\r\n mergedOptions,\r\n )\r\n }\r\n\r\n const resolveResetPasswordToken = (\r\n input: { token: string; callbackURL?: string } & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) => {\r\n const { payload, fetchOptions } = extractFetchOptions(input)\r\n const mergedOptions = mergeCallOptions(fetchOptions, options)\r\n const query = payload as { token?: string; callbackURL?: string } | undefined\r\n const token = query?.token?.trim()\r\n if (!token) {\r\n throw new Error('resolveResetPasswordToken requires a non-empty token')\r\n }\r\n const endpoint = `/reset-password/${encodeURIComponent(token)}` as AthenaAuthEndpointPath\r\n return callAuthEndpoint<{ token?: string }>(\r\n resolvedConfig,\r\n { endpoint, method: 'GET' },\r\n undefined,\r\n query?.callbackURL ? { callbackURL: query.callbackURL } : undefined,\r\n mergedOptions,\r\n )\r\n }\r\n\r\n const organization: AthenaAuthOrganizationBindings = {\r\n create: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationCreateRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthOrganization\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/create', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n update: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationUpdateRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthOrganization\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/update', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n delete: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationDeleteRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/delete', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n setActive: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationSetActiveRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/set-active', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n list: (input, options) =>\r\n getGeneric<AthenaAuthOrganization[]>(\r\n '/organization/list',\r\n input,\r\n options,\r\n ),\r\n getFull: (input, options) =>\r\n executeGetWithQueryCompatibleInput<AthenaAuthOrganizationGetFullQuery, {\r\n organization: AthenaAuthOrganization\r\n members?: AthenaAuthOrganizationMember[]\r\n invitations?: AthenaAuthOrganizationInvitation[]\r\n }>(\r\n resolvedConfig,\r\n { endpoint: '/organization/get-full-organization', method: 'GET' },\r\n input,\r\n options,\r\n ),\r\n checkSlug: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationCheckSlugRequest & AthenaAuthFetchCompatibleInput,\r\n { available: boolean }\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/check-slug', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n leave: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationLeaveRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/leave', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n listUserInvitations: (input, options) =>\r\n executeGetWithQueryCompatibleInput<\r\n AthenaAuthOrganizationListUserInvitationsQuery,\r\n AthenaAuthOrganizationInvitation[]\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/list-user-invitations', method: 'GET' },\r\n input,\r\n options,\r\n ),\r\n hasPermission: (input, options) =>\n postGeneric<AthenaAdminHasPermissionResponse>(\n '/organization/has-permission',\n input,\n options,\n ),\n requirePermission: (input, options) =>\n requirePermission('/organization/has-permission', input, options),\n invitation: {\n cancel: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationInvitationActionRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/cancel-invitation', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n accept: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationInvitationActionRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/accept-invitation', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n get: (input, options) =>\r\n executeGetWithQueryCompatibleInput<\r\n AthenaAuthOrganizationGetInvitationQuery,\r\n AthenaAuthOrganizationInvitation\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/get-invitation', method: 'GET' },\r\n input,\r\n options,\r\n ),\r\n reject: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationInvitationActionRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/reject-invitation', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n list: (input, options) =>\r\n executeGetWithQueryCompatibleInput<\r\n AthenaAuthOrganizationListInvitationsQuery,\r\n AthenaAuthOrganizationInvitation[]\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/list-invitations', method: 'GET' },\r\n input,\r\n options,\r\n ),\r\n },\r\n member: {\r\n remove: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationRemoveMemberRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/remove-member', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n updateRole: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationUpdateMemberRoleRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/update-member-role', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n invite: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationInviteMemberRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthOrganizationInvitation\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/invite-member', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n getActive: (input, options) =>\r\n executeGetWithCompatibleInput<AthenaAuthOrganizationMember>(\r\n resolvedConfig,\r\n { endpoint: '/organization/get-active-member', method: 'GET' },\r\n input,\r\n options,\r\n ),\r\n list: (input, options) =>\r\n executeGetWithQueryCompatibleInput<\r\n AthenaAuthOrganizationListMembersQuery,\r\n AthenaAuthOrganizationMember[]\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/list-members', method: 'GET' },\r\n input,\r\n options,\r\n ),\r\n },\r\n }\r\n\r\n const authResetPassword = Object.assign(\r\n (\r\n input: AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/reset-password', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n {\r\n token: resolveResetPasswordToken,\r\n },\r\n )\r\n\r\n const sessionRevokeBinding: AthenaAuthBindings['session']['revoke'] = (\r\n input,\r\n options,\r\n ) => {\r\n if (Array.isArray(input)) {\r\n if (input.length === 0) {\r\n throw new Error('session.revoke requires at least one session token')\r\n }\r\n if (input.length === 1) {\r\n return revokeSession(input[0], options)\r\n }\r\n return revokeSessions(undefined, options)\r\n }\r\n\r\n const parsed = input as AthenaAuthGenericInput & {\r\n token?: string\r\n tokens?: string[]\r\n }\r\n const tokens = Array.isArray(parsed.tokens)\r\n ? parsed.tokens.filter(token => token.trim().length > 0)\r\n : undefined\r\n\r\n if (tokens && tokens.length > 1) {\r\n return revokeSessions(\r\n parsed.fetchOptions ? { fetchOptions: parsed.fetchOptions } : undefined,\r\n options,\r\n )\r\n }\r\n\r\n if (tokens && tokens.length === 1) {\r\n return revokeSession(\r\n { token: tokens[0], fetchOptions: parsed.fetchOptions },\r\n options,\r\n )\r\n }\r\n\r\n const token = parsed.token?.trim()\r\n if (!token) {\r\n throw new Error('session.revoke requires a non-empty token or a non-empty token list')\r\n }\r\n\r\n return revokeSession(\r\n {\r\n token,\r\n fetchOptions: parsed.fetchOptions,\r\n },\r\n options,\r\n )\r\n }\r\n\r\n const adminUserSessionRevokeBinding: AthenaAuthBindings['admin']['user']['session']['revoke'] = (\r\n input,\r\n options,\r\n ) => {\r\n const requireUserId = (userId: string | undefined): string => {\r\n const trimmed = String(userId ?? '').trim()\r\n if (!trimmed) {\r\n throw new Error('admin.user.session.revoke requires a non-empty userId')\r\n }\r\n return trimmed\r\n }\r\n\r\n const requireSinglePluralUserId = (\r\n sessions: AthenaAdminRevokeUserSessionRequest[],\r\n ): AthenaAdminRevokeUserSessionsRequest => {\r\n const uniqueUserIds = [...new Set(sessions.map(session => requireUserId(session.userId)))]\r\n if (uniqueUserIds.length !== 1) {\r\n throw new Error('admin.user.session.revoke requires the same userId across plural payloads')\r\n }\r\n return { userId: uniqueUserIds[0] }\r\n }\r\n\r\n if (Array.isArray(input)) {\r\n if (input.length === 0) {\r\n throw new Error('admin.user.session.revoke requires at least one payload item')\r\n }\r\n if (input.length === 1) {\r\n return postGeneric<AthenaAdminSuccessResponse>(\r\n '/admin/revoke-user-session',\r\n {\r\n ...input[0],\r\n userId: requireUserId(input[0].userId),\r\n } as AthenaAuthGenericInput,\r\n options,\r\n )\r\n }\r\n return postGeneric<AthenaAdminSuccessResponse>(\r\n '/admin/revoke-user-sessions',\r\n requireSinglePluralUserId(input),\r\n options,\r\n )\r\n }\r\n\r\n const parsed = input as AthenaAuthGenericInput & {\r\n sessions?: AthenaAdminRevokeUserSessionRequest[]\r\n sessionToken?: string\r\n userId?: string\r\n }\r\n const sessions = parsed.sessions\r\n\r\n if (sessions && sessions.length === 0) {\r\n throw new Error('admin.user.session.revoke requires at least one payload item')\r\n }\r\n\r\n if (sessions && sessions.length === 1) {\r\n return postGeneric<AthenaAdminSuccessResponse>(\r\n '/admin/revoke-user-session',\r\n {\r\n ...sessions[0],\r\n userId: requireUserId(sessions[0].userId),\r\n fetchOptions: parsed.fetchOptions,\r\n } as AthenaAuthGenericInput,\r\n options,\r\n )\r\n }\r\n\r\n if (sessions && sessions.length > 1) {\r\n return postGeneric<AthenaAdminSuccessResponse>(\r\n '/admin/revoke-user-sessions',\r\n {\r\n ...requireSinglePluralUserId(sessions),\r\n fetchOptions: parsed.fetchOptions,\r\n } as AthenaAuthGenericInput,\r\n options,\r\n )\r\n }\r\n\r\n const normalizedUserId = requireUserId(parsed.userId)\r\n\r\n if (!parsed.sessionToken) {\r\n return postGeneric<AthenaAdminSuccessResponse>(\r\n '/admin/revoke-user-sessions',\r\n {\r\n userId: normalizedUserId,\r\n fetchOptions: parsed.fetchOptions,\r\n } as AthenaAuthGenericInput,\r\n options,\r\n )\r\n }\r\n return postGeneric<AthenaAdminSuccessResponse>(\r\n '/admin/revoke-user-session',\r\n {\r\n ...parsed,\r\n userId: normalizedUserId,\r\n } as AthenaAuthGenericInput,\r\n options,\r\n )\r\n }\r\n\r\n const auth: AthenaAuthBindings = {\n getSession: (input, options) => getGeneric('/get-session', input, options),\n getUser,\n requireSession,\n signOut,\n forgetPassword: (input, options) => postGeneric('/forget-password', input, options),\r\n resetPassword: authResetPassword,\r\n setPassword: (input, options) => postGeneric('/set-password', input, options),\r\n verifyEmail: (input, options) => {\r\n const queryInput: AthenaAuthGenericQueryInput = {\r\n query: {\r\n token: input.token,\r\n callbackURL: input.callbackURL,\r\n },\r\n fetchOptions: input.fetchOptions,\r\n }\r\n return getWithQuery<{ user: AthenaAuthUser; status: boolean }>(\r\n '/verify-email',\r\n queryInput,\r\n options,\r\n )\r\n },\r\n sendVerificationEmail: (input, options) => postGeneric('/send-verification-email', input, options),\r\n changeEmail: (input, options) => postGeneric('/change-email', input, options),\r\n changeEmailVerify: (input, options) => getWithQuery('/change-email/verify', input, options),\r\n deleteUserVerify: (input, options) => getWithQuery('/delete-user/verify', input, options),\r\n changePassword: (input, options) => postGeneric('/change-password', input, options),\r\n user: {\r\n update: (input, options) => postGeneric('/update-user', input, options),\r\n delete: (input, options) => postGeneric('/delete-user', input, options),\r\n email: {\r\n list: listUserEmailsWithFallback,\r\n },\r\n },\r\n session: {\r\n list: (input, options) => getGeneric('/list-sessions', input, options),\r\n revoke: sessionRevokeBinding,\r\n revokeOther: revokeOtherSessions,\r\n },\r\n social: {\r\n link: (input, options) => postGeneric('/link-social', input, options),\r\n },\r\n account: {\r\n list: (input, options) => getGeneric('/list-accounts', input, options),\r\n unlink: (input, options) => postGeneric('/unlink-account', input, options),\r\n },\r\n deleteUser: {\r\n callback: deleteUserCallback,\r\n },\r\n refreshToken: (input, options) => postGeneric('/refresh-token', input, options),\r\n getAccessToken: (input, options) => postGeneric('/get-access-token', input, options),\r\n health: healthWithFallback,\r\n ok: (input, options) => getGeneric('/ok', input, options),\r\n error: (input, options) => getGeneric('/error', input, options),\r\n twoFactor: {\r\n getTotpUri: (input, options) => postGeneric('/two-factor/get-totp-uri', input, options),\r\n verifyTotp: (input, options) => postGeneric('/two-factor/verify-totp', input, options),\r\n sendOtp: (input, options) => postGeneric('/two-factor/send-otp', input, options),\r\n verifyOtp: (input, options) => postGeneric('/two-factor/verify-otp', input, options),\r\n verifyBackupCode: (input, options) => postGeneric('/two-factor/verify-backup-code', input, options),\r\n generateBackupCodes: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaTwoFactorGenerateBackupCodesRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaTwoFactorGenerateBackupCodesResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/two-factor/generate-backup-codes', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n enable: (input, options) => postGeneric('/two-factor/enable', input, options),\r\n disable: (input, options) => postGeneric('/two-factor/disable', input, options),\r\n },\r\n passkey: {\r\n generateRegisterOptions: (input, options) =>\r\n getGeneric('/passkey/generate-register-options', input, options),\r\n generateAuthenticateOptions: (input, options) =>\r\n postGeneric('/passkey/generate-authenticate-options', input, options),\r\n verifyRegistration: (input, options) =>\r\n postGeneric('/passkey/verify-registration', input, options),\r\n verifyAuthentication: (input, options) =>\r\n postGeneric('/passkey/verify-authentication', input, options),\r\n listUserPasskeys: (input, options) => getGeneric('/passkey/list-user-passkeys', input, options),\r\n deletePasskey: (input, options) => postGeneric('/passkey/delete-passkey', input, options),\r\n updatePasskey: (input, options) => postGeneric('/passkey/update-passkey', input, options),\r\n getRelatedOrigins: (input, options) => getGeneric('/.well-known/webauthn', input, options),\r\n },\r\n admin: {\n role: {\r\n set: (input, options) => postGeneric('/admin/set-role', input, options),\r\n },\r\n user: {\r\n list: (input, options) => getWithQuery('/admin/list-users', input, options),\r\n create: (input, options) => postGeneric('/admin/create-user', input, options),\r\n unban: (input, options) => postGeneric('/admin/unban-user', input, options),\r\n ban: (input, options) => postGeneric('/admin/ban-user', input, options),\r\n impersonate: (input, options) => postGeneric('/admin/impersonate-user', input, options),\r\n stopImpersonating: (input, options) => postGeneric('/admin/stop-impersonating', input, options),\r\n remove: (input, options) => postGeneric('/admin/remove-user', input, options),\r\n setPassword: (input, options) => postGeneric('/admin/set-user-password', input, options),\r\n session: {\r\n list: (input, options) => postGeneric('/admin/list-user-sessions', input, options),\r\n revoke: adminUserSessionRevokeBinding,\r\n },\r\n },\r\n hasPermission: (input, options) =>\n postGeneric<AthenaAdminHasPermissionResponse>('/admin/has-permission', input, options),\n requirePermission: (input, options) =>\n requirePermission('/admin/has-permission', input, options),\n apiKey: {\n create: (input, options) => postGeneric('/admin/api-key/create', input, options),\r\n },\r\n athenaClient: {\r\n create: (input, options) => postGeneric('/admin/athena-client/create', input, options),\r\n list: (input, options) => getWithQuery('/admin/athena-client/list', input, options),\r\n },\r\n auditLog: {\r\n list: (input, options) => getWithQuery('/admin/audit-log/list', input, options),\r\n },\r\n email: {\r\n list: (input, options) => getWithQuery('/admin/email/list', input, options),\r\n get: (input, options) => getWithQuery('/admin/email/get', input, options),\r\n create: async (input, options) =>\r\n postGeneric(\r\n '/admin/email/create',\r\n await resolveAdminEmailPayload('/admin/email/create', input),\r\n options,\r\n ),\r\n update: async (input, options) =>\r\n postGeneric(\r\n '/admin/email/update',\r\n await resolveAdminEmailPayload('/admin/email/update', input),\r\n options,\r\n ),\r\n delete: (input, options) => postGeneric('/admin/email/delete', input, options),\r\n failure: {\r\n list: (input, options) => getWithQuery('/admin/email-failure/list', input, options),\r\n get: (input, options) => getWithQuery('/admin/email-failure/get', input, options),\r\n create: (input, options) => postGeneric('/admin/email-failure/create', input, options),\r\n update: (input, options) => postGeneric('/admin/email-failure/update', input, options),\r\n delete: (input, options) => postGeneric('/admin/email-failure/delete', input, options),\r\n },\r\n template: {\r\n list: (input, options) => getWithQuery('/admin/email-template/list', input, options),\r\n get: (input, options) => getWithQuery('/admin/email-template/get', input, options),\r\n create: async (input, options) =>\r\n postGeneric(\r\n '/admin/email-template/create',\r\n await resolveAdminEmailTemplatePayload('/admin/email-template/create', input),\r\n options,\r\n ),\r\n update: async (input, options) =>\r\n postGeneric(\r\n '/admin/email-template/update',\r\n await resolveAdminEmailTemplatePayload('/admin/email-template/update', input),\r\n options,\r\n ),\r\n delete: (input, options) => postGeneric('/admin/email-template/delete', input, options),\r\n },\r\n },\r\n emailTemplate: {\r\n get: (input, options) => getWithQuery('/admin/email-template/get', input, options),\r\n create: async (input, options) =>\r\n postGeneric(\r\n '/admin/email-template/create',\r\n await resolveAdminEmailTemplatePayload('/admin/email-template/create', input),\r\n options,\r\n ),\r\n delete: (input, options) => postGeneric('/admin/email-template/delete', input, options),\r\n list: (input, options) => getWithQuery('/admin/email-template/list', input, options),\r\n update: async (input, options) =>\r\n postGeneric(\r\n '/admin/email-template/update',\r\n await resolveAdminEmailTemplatePayload('/admin/email-template/update', input),\r\n options,\r\n ),\r\n },\r\n },\r\n apiKey: {\r\n create: (input, options) => postGeneric('/api-key/create', input, options),\r\n get: (input, options) => getWithQuery('/api-key/get', input, options),\r\n update: (input, options) => postGeneric('/api-key/update', input, options),\r\n delete: (input, options) => postGeneric('/api-key/delete', input, options),\r\n list: (input, options) => getWithQuery('/api-key/list', input, options),\r\n verify: (input, options) => postGeneric('/api-key/verify', input, options),\r\n deleteAllExpired: (input, options) =>\r\n executePostWithOptionalInput<AthenaApiKeyDeleteAllExpiredResponse>(\r\n resolvedConfig,\r\n { endpoint: '/api-key/delete-all-expired-api-keys', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n },\r\n signIn: {\r\n email: (input, options) => postGeneric('/sign-in/email', input, options),\r\n username: (input, options) => postGeneric('/sign-in/username', input, options),\r\n social: (input, options) => postGeneric('/sign-in/social', input, options),\r\n },\r\n signUp: {\r\n email: (input, options) => postGeneric('/sign-up/email', input, options),\r\n },\n organization,\n callback: {\r\n provider: (input, options) => {\r\n const { payload, fetchOptions } = extractFetchOptions(input)\r\n const parsed = payload as {\r\n provider?: string\r\n code?: string\r\n state?: string\r\n } | undefined\r\n const provider = String(parsed?.provider ?? '').trim()\r\n if (!provider) {\r\n throw new Error('callback.provider requires a non-empty provider value')\r\n }\r\n const code = String(parsed?.code ?? '').trim()\r\n const state = String(parsed?.state ?? '').trim()\r\n if (!code || !state) {\r\n throw new Error('callback.provider requires non-empty code and state values')\r\n }\r\n const endpoint = `/callback/${encodeURIComponent(provider)}` as AthenaAuthEndpointPath\r\n return request({\r\n endpoint,\r\n method: 'GET',\r\n query: {\r\n code,\r\n state,\r\n },\r\n fetchOptions,\r\n }, options)\r\n },\r\n },\r\n }\r\n\r\n return {\n baseUrl: normalizedBaseUrl,\n request,\n signIn: {\r\n email: (\r\n input: AthenaEmailSignInRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaEmailSignInRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthSignInResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/sign-in/email', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n username: (\r\n input: AthenaUsernameSignInRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaUsernameSignInRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthSignInResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/sign-in/username', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n social: (\r\n input: AthenaSocialSignInRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaSocialSignInRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthSocialRedirectResponse | AthenaAuthSignInResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/sign-in/social', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n },\r\n signUp: {\r\n email: (\r\n input: AthenaEmailSignUpRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaEmailSignUpRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthSignInResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/sign-up/email', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n },\r\n signOut,\r\n logout: signOut,\r\n getSession: (input?: AthenaAuthFetchCompatibleInput, options?: AthenaAuthCallOptions) =>\n executeGetWithCompatibleInput<AthenaAuthSessionResponse>(\n resolvedConfig,\n { endpoint: '/get-session', method: 'GET' },\n input,\n options,\n ),\n getUser,\n requireSession,\n listSessions: (input?: AthenaAuthFetchCompatibleInput, options?: AthenaAuthCallOptions) =>\n executeGetWithCompatibleInput<AthenaAuthSession[]>(\n resolvedConfig,\r\n { endpoint: '/list-sessions', method: 'GET' },\r\n input,\r\n options,\r\n ),\r\n revokeSession,\r\n clearSession: revokeSession,\r\n revokeSessions,\r\n clearSessions: revokeSessions,\r\n revokeOtherSessions,\r\n clearOtherSessions: revokeOtherSessions,\r\n forgetPassword: (\r\n input: AthenaForgetPasswordRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaForgetPasswordRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/forget-password', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n resetPassword: (\r\n input: AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/reset-password', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n resolveResetPasswordToken,\r\n verifyEmail: (\r\n input: AthenaVerifyEmailRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) => {\r\n const { payload, fetchOptions } = extractFetchOptions(input)\r\n const mergedOptions = mergeCallOptions(fetchOptions, options)\r\n const query = payload as AthenaVerifyEmailRequest | undefined\r\n return callAuthEndpoint<{ user: AthenaAuthUser; status: boolean }>(\r\n resolvedConfig,\r\n { endpoint: '/verify-email', method: 'GET' },\r\n undefined,\r\n query\r\n ? {\r\n token: query.token,\r\n callbackURL: query.callbackURL,\r\n }\r\n : undefined,\r\n mergedOptions,\r\n )\r\n },\r\n sendVerificationEmail: (\r\n input: AthenaSendVerificationEmailRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaSendVerificationEmailRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/send-verification-email', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n changeEmail: (\r\n input: AthenaChangeEmailRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaChangeEmailRequest & AthenaAuthFetchCompatibleInput,\r\n { status: boolean; message?: string | null }\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/change-email', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n changePassword: (\r\n input: AthenaChangePasswordRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaChangePasswordRequest & AthenaAuthFetchCompatibleInput,\r\n { token?: string | null; user: AthenaAuthUser }\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/change-password', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n updateUser: (\r\n input: AthenaUpdateUserRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaUpdateUserRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/update-user', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n deleteUser,\r\n deleteUserCallback,\r\n linkSocial: (\r\n input: AthenaLinkSocialRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaLinkSocialRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthSocialRedirectResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/link-social', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n listAccounts: (input?: AthenaAuthFetchCompatibleInput, options?: AthenaAuthCallOptions) =>\r\n executeGetWithCompatibleInput<AthenaAuthLinkedAccount[]>(\r\n resolvedConfig,\r\n { endpoint: '/list-accounts', method: 'GET' },\r\n input,\r\n options,\r\n ),\r\n unlinkAccount: (\r\n input: AthenaUnlinkAccountRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaUnlinkAccountRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/unlink-account', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n refreshToken: (\r\n input: AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaOAuthTokenBundle\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/refresh-token', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n getAccessToken: (\r\n input: AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaOAuthTokenBundle\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/get-access-token', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n organization,\r\n auth,\r\n }\r\n}\r\n","export function parseBooleanFlag(\n rawValue: string | undefined,\n fallback: boolean,\n): boolean {\n if (!rawValue) return fallback\n\n const normalized = rawValue.trim().toLowerCase()\n\n if (\n normalized === '1' ||\n normalized === 'true' ||\n normalized === 'yes' ||\n normalized === 'on'\n ) {\n return true\n }\n\n if (\n normalized === '0' ||\n normalized === 'false' ||\n normalized === 'no' ||\n normalized === 'off'\n ) {\n return false\n }\n\n return fallback\n}\n","import type { AthenaResult } from './client.ts'\r\nimport { AthenaGatewayError, isAthenaGatewayError } from './gateway/errors.ts'\r\nimport type { AthenaGatewayErrorCode, AthenaGatewayErrorDetails } from './gateway/types.ts'\r\nimport { parseBooleanFlag as parseBooleanFlagUtil } from './utils/parse-boolean-flag.ts'\r\n\r\nexport type AthenaErrorKind =\r\n | 'unique_violation'\r\n | 'not_found'\r\n | 'validation'\r\n | 'auth'\r\n | 'rate_limit'\r\n | 'transient'\r\n | 'unknown'\r\n\r\nexport const AthenaErrorKind = {\r\n UniqueViolation: 'unique_violation',\r\n NotFound: 'not_found',\r\n Validation: 'validation',\r\n Auth: 'auth',\r\n RateLimit: 'rate_limit',\r\n Transient: 'transient',\r\n Unknown: 'unknown',\r\n} as const\r\n\r\nexport type AthenaErrorCode =\r\n | 'UNIQUE_VIOLATION'\r\n | 'NOT_FOUND'\r\n | 'VALIDATION_FAILED'\r\n | 'AUTH_UNAUTHORIZED'\r\n | 'AUTH_FORBIDDEN'\r\n | 'RATE_LIMITED'\r\n | 'NETWORK_UNAVAILABLE'\r\n | 'TRANSIENT_FAILURE'\r\n | 'HTTP_FAILURE'\r\n | 'UNKNOWN'\r\n\r\nexport const AthenaErrorCode = {\r\n UniqueViolation: 'UNIQUE_VIOLATION',\r\n NotFound: 'NOT_FOUND',\r\n ValidationFailed: 'VALIDATION_FAILED',\r\n AuthUnauthorized: 'AUTH_UNAUTHORIZED',\r\n AuthForbidden: 'AUTH_FORBIDDEN',\r\n RateLimited: 'RATE_LIMITED',\r\n NetworkUnavailable: 'NETWORK_UNAVAILABLE',\r\n TransientFailure: 'TRANSIENT_FAILURE',\r\n HttpFailure: 'HTTP_FAILURE',\r\n Unknown: 'UNKNOWN',\r\n} as const satisfies Record<string, AthenaErrorCode>\r\n\r\nexport type AthenaErrorCategory = 'transport' | 'client' | 'server' | 'database' | 'unknown'\r\n\r\nexport const AthenaErrorCategory = {\r\n Transport: 'transport',\r\n Client: 'client',\r\n Server: 'server',\r\n Database: 'database',\r\n Unknown: 'unknown',\r\n} as const satisfies Record<string, AthenaErrorCategory>\r\n\r\nexport interface AthenaOperationContext {\r\n table?: string\r\n operation?: string\r\n identity?: string | Record<string, unknown>\r\n}\r\n\r\nexport interface NormalizedAthenaError {\r\n kind: AthenaErrorKind\r\n code: AthenaErrorCode\r\n category: AthenaErrorCategory\r\n retryable: boolean\r\n status?: number\r\n constraint?: string\r\n table?: string\r\n operation?: string\r\n message: string\r\n raw: unknown\r\n}\r\n\r\nexport interface AthenaErrorInput {\r\n code: AthenaErrorCode\r\n kind: AthenaErrorKind\r\n category: AthenaErrorCategory\r\n message: string\r\n status?: number\r\n retryable?: boolean\r\n requestId?: string\r\n context?: AthenaOperationContext\r\n raw?: unknown\r\n}\r\n\r\nexport interface UnwrapOptions {\r\n allowNull?: boolean\r\n context?: AthenaOperationContext\r\n}\r\n\r\nexport interface UnwrapOneOptions extends UnwrapOptions {\r\n requireExactlyOne?: boolean\r\n}\r\n\r\nexport interface IntCoercionOptions {\r\n strictBigInt?: boolean\r\n min?: number\r\n max?: number\r\n}\r\n\r\nexport type RetryBackoffStrategy =\r\n | 'linear'\r\n | 'exponential'\r\n | ((attempt: number, error: unknown) => number)\r\n\r\nexport interface RetryConfig {\r\n retries: number\r\n baseDelayMs?: number\r\n maxDelayMs?: number\r\n backoff?: RetryBackoffStrategy\r\n jitter?: boolean | number\r\n shouldRetry?: (error: unknown, attempt: number) => boolean | Promise<boolean>\r\n}\r\n\r\nexport interface RequireAffectedOptions {\r\n min?: number\r\n}\r\n\r\n/**\r\n * Parses a string-based boolean flag with a deterministic fallback.\r\n *\r\n * Accepts common truthy/falsey token variants used by env vars and CLI flags.\r\n */\r\nexport function parseBooleanFlag(\r\n rawValue: string | undefined,\r\n fallback: boolean,\r\n): boolean {\r\n return parseBooleanFlagUtil(rawValue, fallback)\r\n}\r\n\r\nexport class AthenaError extends Error {\r\n readonly code: AthenaErrorCode\r\n readonly kind: AthenaErrorKind\r\n readonly category: AthenaErrorCategory\r\n readonly status?: number\r\n readonly retryable: boolean\r\n readonly requestId?: string\r\n readonly context?: AthenaOperationContext\r\n readonly raw?: unknown\r\n\r\n constructor(input: AthenaErrorInput) {\r\n super(input.message)\r\n this.name = 'AthenaError'\r\n this.code = input.code\r\n this.kind = input.kind\r\n this.category = input.category\r\n this.status = input.status\r\n this.retryable = input.retryable ?? false\r\n this.requestId = input.requestId\r\n this.context = input.context\r\n this.raw = input.raw\r\n }\r\n}\r\n\r\nfunction isRecord(value: unknown): value is Record<string, unknown> {\r\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\r\n}\r\n\r\nfunction firstNonEmptyString(...values: unknown[]): string | undefined {\r\n for (const value of values) {\r\n if (typeof value === 'string' && value.trim().length > 0) {\r\n return value.trim()\r\n }\r\n }\r\n return undefined\r\n}\r\n\r\nfunction messageFromUnknownError(error: unknown): string | undefined {\r\n if (typeof error === 'string' && error.trim().length > 0) {\r\n return error.trim()\r\n }\r\n if (error instanceof Error && error.message.trim().length > 0) {\r\n return error.message.trim()\r\n }\r\n if (!isRecord(error)) {\r\n return undefined\r\n }\r\n return firstNonEmptyString(error.message, error.error, error.details)\r\n}\r\n\r\nfunction gatewayCodeFromUnknownError(error: unknown): AthenaGatewayErrorCode | undefined {\r\n if (!isRecord(error) || typeof error.gatewayCode !== 'string') {\r\n return undefined\r\n }\r\n return error.gatewayCode as AthenaGatewayErrorCode\r\n}\r\n\r\nfunction isAthenaResultErrorLike(\r\n value: unknown,\r\n): value is {\r\n message: string\r\n athenaCode?: AthenaErrorCode\r\n kind?: AthenaErrorKind\r\n category?: AthenaErrorCategory\r\n retryable?: boolean\r\n status?: number\r\n constraint?: string\r\n table?: string\r\n operation?: string\r\n raw?: unknown\r\n} {\r\n return (\r\n isRecord(value) &&\r\n typeof value.message === 'string' &&\r\n (value.athenaCode === undefined || isAthenaErrorCode(value.athenaCode)) &&\r\n (value.kind === undefined || isAthenaErrorKind(value.kind)) &&\r\n (value.category === undefined || isAthenaErrorCategory(value.category)) &&\r\n (value.retryable === undefined || typeof value.retryable === 'boolean') &&\r\n (value.status === undefined || typeof value.status === 'number')\r\n )\r\n}\r\n\r\nfunction isAthenaErrorKind(value: unknown): value is AthenaErrorKind {\r\n return (\r\n value === 'unique_violation' ||\r\n value === 'not_found' ||\r\n value === 'validation' ||\r\n value === 'auth' ||\r\n value === 'rate_limit' ||\r\n value === 'transient' ||\r\n value === 'unknown'\r\n )\r\n}\r\n\r\nfunction isAthenaErrorCode(value: unknown): value is AthenaErrorCode {\r\n return (\r\n value === 'UNIQUE_VIOLATION' ||\r\n value === 'NOT_FOUND' ||\r\n value === 'VALIDATION_FAILED' ||\r\n value === 'AUTH_UNAUTHORIZED' ||\r\n value === 'AUTH_FORBIDDEN' ||\r\n value === 'RATE_LIMITED' ||\r\n value === 'NETWORK_UNAVAILABLE' ||\r\n value === 'TRANSIENT_FAILURE' ||\r\n value === 'HTTP_FAILURE' ||\r\n value === 'UNKNOWN'\r\n )\r\n}\r\n\r\nfunction isAthenaErrorCategory(value: unknown): value is AthenaErrorCategory {\r\n return (\r\n value === 'transport' ||\r\n value === 'client' ||\r\n value === 'server' ||\r\n value === 'database' ||\r\n value === 'unknown'\r\n )\r\n}\r\n\r\nfunction isNormalizedAthenaError(value: unknown): value is NormalizedAthenaError {\r\n return (\r\n isRecord(value) &&\r\n isAthenaErrorKind(value.kind) &&\r\n isAthenaErrorCode(value.code) &&\r\n isAthenaErrorCategory(value.category) &&\r\n typeof value.retryable === 'boolean' &&\r\n typeof value.message === 'string' &&\r\n 'raw' in value\r\n )\r\n}\r\n\r\nfunction withContextOverrides(\r\n normalized: NormalizedAthenaError,\r\n context?: AthenaOperationContext,\r\n): NormalizedAthenaError {\r\n if (!context?.table && !context?.operation) {\r\n return normalized\r\n }\r\n\r\n return {\r\n ...normalized,\r\n table: context.table ?? normalized.table,\r\n operation: context.operation ?? normalized.operation,\r\n }\r\n}\r\n\r\nfunction resolveAttachedNormalizedError(resultOrError: unknown): NormalizedAthenaError | undefined {\r\n if (!isRecord(resultOrError)) return undefined\r\n if (!('__athenaNormalizedError' in resultOrError)) return undefined\r\n const candidate = resultOrError.__athenaNormalizedError\r\n return isNormalizedAthenaError(candidate) ? candidate : undefined\r\n}\r\n\r\nfunction safeStringify(value: unknown): string {\r\n try {\r\n const serialized = JSON.stringify(value)\r\n return serialized ?? String(value)\r\n } catch {\r\n return '[unserializable]'\r\n }\r\n}\r\n\r\nfunction contextHint(context?: AthenaOperationContext): string | undefined {\r\n if (!context?.identity) return undefined\r\n const identity =\r\n typeof context.identity === 'string' ? context.identity : safeStringify(context.identity)\r\n return `Identity: ${identity}`\r\n}\r\n\r\nfunction isAthenaResultLike(value: unknown): value is AthenaResult<unknown> {\r\n return (\r\n isRecord(value) &&\r\n 'status' in value &&\r\n 'error' in value &&\r\n 'data' in value &&\r\n typeof value.status === 'number'\r\n )\r\n}\r\n\r\nfunction operationFromDetails(details?: AthenaGatewayErrorDetails | null): string | undefined {\r\n if (!details?.endpoint) return undefined\r\n if (details.endpoint === '/gateway/fetch' || details.endpoint === '/gateway/query') return 'select'\r\n if (details.endpoint === '/gateway/insert') return 'insert'\r\n if (details.endpoint === '/gateway/update') return 'update'\r\n if (details.endpoint === '/gateway/delete') return 'delete'\r\n if (details.endpoint === '/gateway/rpc' || details.endpoint.startsWith('/rpc/')) return 'rpc'\r\n return undefined\r\n}\r\n\r\nfunction matchRegex(input: string, patterns: RegExp[]): string | undefined {\r\n for (const pattern of patterns) {\r\n const match = pattern.exec(input)\r\n if (match?.[1]) return match[1]\r\n }\r\n return undefined\r\n}\r\n\r\nfunction extractConstraint(message: string): string | undefined {\r\n return matchRegex(message, [\r\n /unique constraint\\s+[\"'`]([^\"'`]+)[\"'`]/i,\r\n /constraint\\s+[\"'`]([^\"'`]+)[\"'`]/i,\r\n ])\r\n}\r\n\r\nfunction extractTable(message: string): string | undefined {\r\n return matchRegex(message, [\r\n /(?:table|relation)\\s+[\"'`]([^\"'`]+)[\"'`]/i,\r\n /on\\s+table\\s+([a-zA-Z0-9_.]+)/i,\r\n ])\r\n}\r\n\r\nfunction classifyKind(status: number | undefined, code: AthenaGatewayErrorCode | undefined, message: string): AthenaErrorKind {\r\n const lower = message.toLowerCase()\r\n const hasUniquePattern =\r\n lower.includes('unique constraint') ||\r\n lower.includes('duplicate key') ||\r\n lower.includes('already exists') ||\r\n lower.includes('duplicate')\r\n const hasNotFoundPattern = lower.includes('not found') || lower.includes('no rows')\r\n const hasValidationPattern =\r\n lower.includes('validation') || lower.includes('invalid') || lower.includes('malformed')\r\n const hasAuthPattern =\r\n lower.includes('unauthorized') || lower.includes('forbidden') || lower.includes('auth')\r\n const hasRateLimitPattern = lower.includes('rate limit') || lower.includes('too many requests')\r\n const hasTransientPattern =\r\n lower.includes('timeout') ||\r\n lower.includes('temporar') ||\r\n lower.includes('connection reset') ||\r\n lower.includes('socket') ||\r\n lower.includes('deadlock')\r\n\r\n if (status === 409 || hasUniquePattern) return 'unique_violation'\r\n if (status === 404 || hasNotFoundPattern) return 'not_found'\r\n if (status === 401 || status === 403 || hasAuthPattern) return 'auth'\r\n if (status === 429 || hasRateLimitPattern) return 'rate_limit'\r\n if (code === 'INVALID_URL') return 'validation'\r\n if (status === 400 || status === 422 || hasValidationPattern) return 'validation'\r\n if (code === 'NETWORK_ERROR' || status === 0 || (status !== undefined && status >= 500) || hasTransientPattern) {\r\n return 'transient'\r\n }\r\n return 'unknown'\r\n}\r\n\r\nfunction toAthenaErrorCode(\r\n kind: AthenaErrorKind,\r\n status: number | undefined,\r\n gatewayCode?: AthenaGatewayErrorCode,\r\n): AthenaErrorCode {\r\n if (gatewayCode === 'INVALID_URL') {\r\n return AthenaErrorCode.ValidationFailed\r\n }\r\n\r\n if (gatewayCode === 'NETWORK_ERROR' || (kind === 'transient' && status === 0)) {\r\n return AthenaErrorCode.NetworkUnavailable\r\n }\r\n\r\n switch (kind) {\r\n case 'unique_violation':\r\n return AthenaErrorCode.UniqueViolation\r\n case 'not_found':\r\n return AthenaErrorCode.NotFound\r\n case 'validation':\r\n return AthenaErrorCode.ValidationFailed\r\n case 'rate_limit':\r\n return AthenaErrorCode.RateLimited\r\n case 'auth':\r\n if (status === 403) {\r\n return AthenaErrorCode.AuthForbidden\r\n }\r\n return AthenaErrorCode.AuthUnauthorized\r\n case 'transient':\r\n return status !== undefined && status >= 500\r\n ? AthenaErrorCode.HttpFailure\r\n : AthenaErrorCode.TransientFailure\r\n case 'unknown':\r\n default:\r\n return status !== undefined && status >= 400\r\n ? AthenaErrorCode.HttpFailure\r\n : AthenaErrorCode.Unknown\r\n }\r\n}\r\n\r\nfunction toAthenaErrorCategory(kind: AthenaErrorKind, status: number | undefined): AthenaErrorCategory {\r\n if (kind === 'transient' && (status === 0 || status === undefined)) {\r\n return AthenaErrorCategory.Transport\r\n }\r\n if (kind === 'unique_violation') return AthenaErrorCategory.Database\r\n if (kind === 'validation' || kind === 'auth' || kind === 'not_found') return AthenaErrorCategory.Client\r\n if (kind === 'rate_limit' || kind === 'transient') return AthenaErrorCategory.Server\r\n return AthenaErrorCategory.Unknown\r\n}\r\n\r\nfunction isRetryable(kind: AthenaErrorKind, status: number | undefined): boolean {\r\n if (kind === 'rate_limit' || kind === 'transient') return true\r\n return status !== undefined && status >= 500\r\n}\r\n\r\nfunction toGatewayCode(kind: AthenaErrorKind, status?: number): AthenaGatewayErrorCode {\r\n if (kind === 'transient' && (status === 0 || status === undefined)) return 'NETWORK_ERROR'\r\n if (kind === 'validation') return 'INVALID_JSON'\r\n if (status !== undefined && status >= 400) return 'HTTP_ERROR'\r\n return 'UNKNOWN_ERROR'\r\n}\r\n\r\nfunction toAthenaGatewayError(\r\n source: unknown,\r\n fallbackMessage: string,\r\n context?: AthenaOperationContext,\r\n): AthenaGatewayError {\r\n if (isAthenaGatewayError(source)) {\r\n return source\r\n }\r\n\r\n if (isAthenaResultLike(source) && source.errorDetails) {\r\n const message =\r\n messageFromUnknownError(source.error) ??\r\n source.errorDetails.message ??\r\n fallbackMessage\r\n return new AthenaGatewayError({\r\n code: source.errorDetails.code,\r\n message,\r\n status: source.status,\r\n endpoint: source.errorDetails.endpoint,\r\n method: source.errorDetails.method,\r\n requestId: source.errorDetails.requestId,\r\n hint:\r\n (isRecord(source.error) ? firstNonEmptyString(source.error.hint) : undefined) ??\r\n source.errorDetails.hint,\r\n cause:\r\n (isRecord(source.error) ? firstNonEmptyString(source.error.cause) : undefined) ??\r\n source.errorDetails.cause,\r\n })\r\n }\r\n\r\n const normalized = normalizeAthenaError(source, context)\r\n const message =\r\n isAthenaResultLike(source) && source.error == null && source.errorDetails == null\r\n ? fallbackMessage\r\n : normalized.message || fallbackMessage\r\n\r\n return new AthenaGatewayError({\r\n code: toGatewayCode(normalized.kind, normalized.status),\r\n message,\r\n status: normalized.status ?? 0,\r\n hint:\r\n normalized.constraint != null\r\n ? `Constraint: ${normalized.constraint}`\r\n : contextHint(context),\r\n cause: typeof normalized.raw === 'string' ? normalized.raw : safeStringify(normalized.raw),\r\n })\r\n}\r\n\r\n/**\r\n * Returns `true` when a result is successful (`2xx` status and no `error`).\r\n */\r\nexport function isOk<T>(result: AthenaResult<T>): boolean {\r\n return result.error == null && result.status >= 200 && result.status < 300\r\n}\r\n\r\n/**\r\n * @deprecated Prefer `result.error` on failed `AthenaResult` values and the\r\n * structured fields already attached to thrown SDK errors. This helper is\r\n * retained for compatibility with mixed unknown inputs.\r\n *\r\n * Normalizes any Athena failure shape into a stable, typed error envelope.\r\n *\r\n * Accepts `AthenaResult`, `AthenaGatewayError`, native `Error`, or unknown values.\r\n * Optional `context` can override inferred table/operation metadata for clearer diagnostics.\r\n */\r\nexport function normalizeAthenaError(\r\n resultOrError: unknown,\r\n context?: AthenaOperationContext,\r\n): NormalizedAthenaError {\r\n const attached = resolveAttachedNormalizedError(resultOrError)\r\n if (attached) {\r\n return withContextOverrides(attached, context)\r\n }\r\n\r\n if (isAthenaResultLike(resultOrError)) {\r\n if (isAthenaResultErrorLike(resultOrError.error)) {\r\n return {\r\n kind: resultOrError.error.kind ?? classifyKind(resultOrError.status, gatewayCodeFromUnknownError(resultOrError.error), resultOrError.error.message),\r\n code:\r\n resultOrError.error.athenaCode ??\r\n toAthenaErrorCode(\r\n resultOrError.error.kind ??\r\n classifyKind(\r\n resultOrError.status,\r\n gatewayCodeFromUnknownError(resultOrError.error),\r\n resultOrError.error.message,\r\n ),\r\n resultOrError.error.status ?? resultOrError.status,\r\n gatewayCodeFromUnknownError(resultOrError.error),\r\n ),\r\n category:\r\n resultOrError.error.category ??\r\n toAthenaErrorCategory(\r\n resultOrError.error.kind ??\r\n classifyKind(\r\n resultOrError.status,\r\n gatewayCodeFromUnknownError(resultOrError.error),\r\n resultOrError.error.message,\r\n ),\r\n resultOrError.error.status ?? resultOrError.status,\r\n ),\r\n retryable:\r\n resultOrError.error.retryable ??\r\n isRetryable(\r\n resultOrError.error.kind ??\r\n classifyKind(\r\n resultOrError.status,\r\n gatewayCodeFromUnknownError(resultOrError.error),\r\n resultOrError.error.message,\r\n ),\r\n resultOrError.error.status ?? resultOrError.status,\r\n ),\r\n status: resultOrError.error.status ?? resultOrError.status,\r\n constraint: resultOrError.error.constraint,\r\n table: context?.table ?? resultOrError.error.table,\r\n operation: context?.operation ?? resultOrError.error.operation,\r\n message: resultOrError.error.message,\r\n raw: resultOrError.error.raw ?? resultOrError.raw,\r\n }\r\n }\r\n\r\n const details = resultOrError.errorDetails\r\n const message =\r\n messageFromUnknownError(resultOrError.error) ??\r\n details?.message ??\r\n `Athena ${context?.operation ?? operationFromDetails(details) ?? 'request'} failed`\r\n const operation = context?.operation ?? operationFromDetails(details)\r\n const table = context?.table ?? extractTable(message)\r\n const constraint = extractConstraint(message)\r\n const gatewayCode = details?.code ?? gatewayCodeFromUnknownError(resultOrError.error)\r\n const kind = classifyKind(resultOrError.status, gatewayCode, message)\r\n const code = toAthenaErrorCode(kind, resultOrError.status, gatewayCode)\r\n const category = toAthenaErrorCategory(kind, resultOrError.status)\r\n return {\r\n kind,\r\n code,\r\n category,\r\n retryable: isRetryable(kind, resultOrError.status),\r\n status: resultOrError.status,\r\n constraint,\r\n table,\r\n operation,\r\n message,\r\n raw: resultOrError.raw,\r\n }\r\n }\r\n\r\n if (isAthenaGatewayError(resultOrError)) {\r\n const details = resultOrError.toDetails()\r\n const operation = context?.operation ?? operationFromDetails(details)\r\n const table = context?.table ?? extractTable(resultOrError.message)\r\n const constraint = extractConstraint(resultOrError.message)\r\n const kind = classifyKind(resultOrError.status, resultOrError.code, resultOrError.message)\r\n const code = toAthenaErrorCode(kind, resultOrError.status, resultOrError.code)\r\n const category = toAthenaErrorCategory(kind, resultOrError.status)\r\n return {\r\n kind,\r\n code,\r\n category,\r\n retryable: isRetryable(kind, resultOrError.status),\r\n status: resultOrError.status,\r\n constraint,\r\n table,\r\n operation,\r\n message: resultOrError.message,\r\n raw: resultOrError,\r\n }\r\n }\r\n\r\n if (resultOrError instanceof Error) {\r\n const maybeStatus =\r\n isRecord(resultOrError) && typeof resultOrError.status === 'number'\r\n ? resultOrError.status\r\n : undefined\r\n const kind = classifyKind(maybeStatus, undefined, resultOrError.message)\r\n return {\r\n kind,\r\n code: toAthenaErrorCode(kind, maybeStatus),\r\n category: toAthenaErrorCategory(kind, maybeStatus),\r\n retryable: isRetryable(kind, maybeStatus),\r\n status: maybeStatus,\r\n constraint: extractConstraint(resultOrError.message),\r\n table: context?.table ?? extractTable(resultOrError.message),\r\n operation: context?.operation,\r\n message: resultOrError.message,\r\n raw: resultOrError,\r\n }\r\n }\r\n\r\n const message = typeof resultOrError === 'string' ? resultOrError : 'Unknown Athena error'\r\n const kind = classifyKind(undefined, undefined, message)\r\n return {\r\n kind,\r\n code: toAthenaErrorCode(kind, undefined),\r\n category: toAthenaErrorCategory(kind, undefined),\r\n retryable: isRetryable(kind, undefined),\r\n status: undefined,\r\n constraint: extractConstraint(message),\r\n table: context?.table ?? extractTable(message),\r\n operation: context?.operation,\r\n message,\r\n raw: resultOrError,\r\n }\r\n}\r\n\r\n/**\r\n * Unwraps a successful result into a row array.\r\n *\r\n * - Throws on failed results.\r\n * - Converts `null` data to an empty array.\r\n * - Wraps scalar data in a single-element array.\r\n */\r\nexport function unwrapRows<T>(\r\n result: AthenaResult<T[] | T | null>,\r\n options?: UnwrapOptions,\r\n): T[] {\r\n if (!isOk(result)) {\r\n throw toAthenaGatewayError(result, 'Athena request failed', options?.context)\r\n }\r\n if (result.data == null) return []\r\n return Array.isArray(result.data) ? result.data : [result.data]\r\n}\r\n\r\n/**\r\n * Unwraps successful result data from `AthenaResult<T | null>`.\r\n *\r\n * By default, `null` data throws. Pass `{ allowNull: true }` to permit nullable payloads.\r\n */\r\nexport function unwrap<T>(\r\n result: AthenaResult<T | null>,\r\n options: UnwrapOptions & { allowNull: true },\r\n): T | null\r\nexport function unwrap<T>(result: AthenaResult<T | null>, options?: UnwrapOptions): T\r\nexport function unwrap<T>(\r\n result: AthenaResult<T | null>,\r\n options?: UnwrapOptions,\r\n): T | null {\r\n if (!isOk(result)) {\r\n throw toAthenaGatewayError(result, 'Athena request failed', options?.context)\r\n }\r\n if (result.data == null && !options?.allowNull) {\r\n throw toAthenaGatewayError(result, 'Expected data but received null', options?.context)\r\n }\r\n return result.data\r\n}\r\n\r\n/**\r\n * Unwraps the first row from a successful result that may contain arrays/scalars/null.\r\n *\r\n * - Throws on failed results.\r\n * - Throws when no row exists unless `allowNull: true` is provided.\r\n * - Optionally enforces exact cardinality via `requireExactlyOne`.\r\n */\r\nexport function unwrapOne<T>(\r\n result: AthenaResult<T[] | T | null>,\r\n options: UnwrapOneOptions & { allowNull: true },\r\n): T | null\r\nexport function unwrapOne<T>(result: AthenaResult<T[] | T | null>, options?: UnwrapOneOptions): T\r\nexport function unwrapOne<T>(\r\n result: AthenaResult<T[] | T | null>,\r\n options?: UnwrapOneOptions,\r\n): T | null {\r\n const rows = unwrapRows(result, options)\r\n if (!rows.length) {\r\n if (options?.allowNull) return null\r\n throw toAthenaGatewayError(result, 'Expected one row but received none', options?.context)\r\n }\r\n if (options?.requireExactlyOne && rows.length !== 1) {\r\n throw toAthenaGatewayError(\r\n result,\r\n `Expected exactly one row but received ${rows.length}`,\r\n options.context,\r\n )\r\n }\r\n return rows[0]\r\n}\r\n\r\n/**\r\n * Asserts that an Athena result is successful.\r\n *\r\n * Returns the original result for fluent composition and throws `AthenaGatewayError` on failure.\r\n */\r\nexport function requireSuccess<T>(\r\n result: AthenaResult<T>,\r\n context?: AthenaOperationContext,\r\n): AthenaResult<T> {\r\n if (!isOk(result)) {\r\n throw toAthenaGatewayError(\r\n result,\r\n `Athena ${context?.operation ?? 'request'} failed`,\r\n context,\r\n )\r\n }\r\n return result\r\n}\r\n\r\n/**\r\n * Enforces mutation postconditions based on `result.count`.\r\n *\r\n * - Validates success first.\r\n * - Requires a non-null count in the response.\r\n * - Validates `count >= min` (default: `1`).\r\n *\r\n * Useful for guaranteeing that critical writes actually affected rows.\r\n */\r\nexport function requireAffected<T>(\r\n result: AthenaResult<T>,\r\n options?: RequireAffectedOptions,\r\n context?: AthenaOperationContext,\r\n): number {\r\n requireSuccess(result, context)\r\n\r\n const minimum = options?.min ?? 1\r\n const count = result.count\r\n if (count == null) {\r\n throw new AthenaGatewayError({\r\n code: 'UNKNOWN_ERROR',\r\n status: result.status,\r\n message: 'Expected affected row count but response.count is missing',\r\n hint: 'Set call option { count: \"exact\" } for mutation postcondition checks.',\r\n cause: safeStringify(result.raw),\r\n })\r\n }\r\n\r\n if (count < minimum) {\r\n throw new AthenaGatewayError({\r\n code: 'UNKNOWN_ERROR',\r\n status: result.status,\r\n message: `Expected at least ${minimum} affected rows but received ${count}`,\r\n hint: contextHint(context),\r\n cause: safeStringify(result.raw),\r\n })\r\n }\r\n\r\n return count\r\n}\r\n\r\nfunction applyBounds(value: number, options?: IntCoercionOptions): number | null {\r\n if (options?.min !== undefined && value < options.min) return null\r\n if (options?.max !== undefined && value > options.max) return null\r\n return value\r\n}\r\n\r\nfunction parseIntegerString(value: string): number | null {\r\n const normalized = value.trim()\r\n if (!/^[-+]?\\d+$/.test(normalized)) return null\r\n const parsed = Number(normalized)\r\n if (!Number.isFinite(parsed) || !Number.isInteger(parsed)) return null\r\n return parsed\r\n}\r\n\r\n/**\r\n * Safely coerces `unknown` values into finite integers.\r\n *\r\n * Returns `null` when coercion fails or bounds/strict bigint checks are violated.\r\n */\r\nexport function coerceInt(value: unknown, options?: IntCoercionOptions): number | null {\r\n if (value == null) return null\r\n\r\n if (typeof value === 'number') {\r\n if (!Number.isFinite(value) || !Number.isInteger(value)) return null\r\n return applyBounds(value, options)\r\n }\r\n\r\n if (typeof value === 'string') {\r\n const parsed = parseIntegerString(value)\r\n if (parsed == null) return null\r\n return applyBounds(parsed, options)\r\n }\r\n\r\n if (typeof value === 'bigint') {\r\n if (options?.strictBigInt) {\r\n if (value > BigInt(Number.MAX_SAFE_INTEGER) || value < BigInt(Number.MIN_SAFE_INTEGER)) {\r\n return null\r\n }\r\n }\r\n const parsed = Number(value)\r\n if (!Number.isFinite(parsed) || !Number.isInteger(parsed)) return null\r\n return applyBounds(parsed, options)\r\n }\r\n\r\n return null\r\n}\r\n\r\n/**\r\n * Strict integer assertion wrapper around `coerceInt`.\r\n *\r\n * Throws a `TypeError` with the provided label when coercion fails.\r\n */\r\nexport function assertInt(value: unknown, label = 'value', options?: IntCoercionOptions): number {\r\n const parsed = coerceInt(value, options)\r\n if (parsed == null) {\r\n throw new TypeError(`${label} must be a finite integer`)\r\n }\r\n return parsed\r\n}\r\n\r\nfunction defaultShouldRetry(error: unknown): boolean {\r\n const normalized = normalizeAthenaError(error)\r\n return normalized.kind === 'transient' || normalized.kind === 'rate_limit'\r\n}\r\n\r\nfunction computeDelayMs(\r\n attempt: number,\r\n error: unknown,\r\n config: Required<Pick<RetryConfig, 'baseDelayMs' | 'backoff' | 'maxDelayMs' | 'jitter'>>,\r\n): number {\r\n const baseDelay = config.baseDelayMs\r\n const rawDelay =\r\n typeof config.backoff === 'function'\r\n ? config.backoff(attempt, error)\r\n : config.backoff === 'linear'\r\n ? baseDelay * attempt\r\n : baseDelay * Math.pow(2, attempt - 1)\r\n\r\n const safeDelay = Number.isFinite(rawDelay) ? Math.max(0, rawDelay) : 0\r\n const clamped = Math.min(config.maxDelayMs, safeDelay)\r\n const jitterFactor =\r\n typeof config.jitter === 'number'\r\n ? Math.max(0, Math.min(1, config.jitter))\r\n : config.jitter\r\n ? 0.2\r\n : 0\r\n\r\n if (!jitterFactor) return clamped\r\n const deviation = clamped * jitterFactor\r\n const offset = (Math.random() * 2 - 1) * deviation\r\n return Math.max(0, clamped + offset)\r\n}\r\n\r\nfunction sleep(ms: number): Promise<void> {\r\n if (ms <= 0) return Promise.resolve()\r\n return new Promise(resolve => {\r\n setTimeout(resolve, ms)\r\n })\r\n}\r\n\r\n/**\n * @deprecated Prefer `experimental.retryReads` for standard SDK-managed read\n * retries, or a call-site retry policy when you need custom write/replay\n * behavior. This helper is retained for compatibility.\n *\n * Retries an async operation with configurable backoff and retry policy.\n *\n * `retries` represents additional attempts after the first failure.\n * By default, transient and rate-limit errors are retried.\n */\nexport async function withRetry<T>(config: RetryConfig, fn: () => Promise<T>): Promise<T> {\n const retries = Math.max(0, Math.trunc(config.retries))\r\n const shouldRetry = config.shouldRetry ?? defaultShouldRetry\r\n const resolvedConfig = {\r\n baseDelayMs: config.baseDelayMs ?? 100,\r\n maxDelayMs: config.maxDelayMs ?? 10_000,\r\n backoff: config.backoff ?? 'exponential',\r\n jitter: config.jitter ?? false,\r\n } satisfies Required<Pick<RetryConfig, 'baseDelayMs' | 'backoff' | 'maxDelayMs' | 'jitter'>>\r\n\r\n for (let attempts = 0; attempts <= retries; attempts += 1) {\r\n try {\r\n return await fn()\r\n } catch (error) {\r\n if (attempts >= retries) {\r\n throw error\r\n }\r\n\r\n const currentAttempt = attempts + 1\r\n const retry = await shouldRetry(error, currentAttempt)\r\n if (!retry) {\r\n throw error\r\n }\r\n\r\n const delay = computeDelayMs(currentAttempt, error, resolvedConfig)\r\n await sleep(delay)\r\n }\r\n }\r\n\r\n throw new Error('withRetry reached an unexpected state')\r\n}\r\n","import type {\r\n AthenaGatewayCallOptions,\r\n AthenaJsonObject,\r\n AthenaJsonValue,\r\n AthenaRpcCallOptions,\r\n} from '../gateway/types.ts'\r\nimport type {\r\n AthenaFromOptions,\r\n AthenaResult,\r\n AthenaSdkClient,\r\n MutationQuery,\r\n RpcQueryBuilder,\r\n SelectChain,\r\n TableQueryBuilder,\r\n UpdateChain,\r\n} from '../client.ts'\r\nimport type {\r\n AthenaModelTarget,\r\n InsertOf,\r\n RowOf,\r\n UpdateOf,\r\n} from '../schema/types.ts'\r\nimport type {\r\n AthenaSelectInput,\r\n} from '../select-column-types.ts'\r\n\r\ntype AthenaRowShape = Record<string, AthenaJsonValue | undefined>\r\n\r\ntype AthenaUpsertOptions<Update> = AthenaGatewayCallOptions & {\r\n updateBody?: Update\r\n onConflict?: string | string[]\r\n}\r\n\r\nexport interface AthenaDbModule<TStrict extends boolean = false> {\r\n from<TModel extends AthenaModelTarget>(\r\n model: TModel,\r\n ): TableQueryBuilder<RowOf<TModel>, InsertOf<TModel>, UpdateOf<TModel>, unknown, TStrict>\r\n from<\r\n Row = AthenaRowShape,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n >(table: string, options?: AthenaFromOptions): TableQueryBuilder<Row, Insert, Update, unknown, TStrict>\r\n\r\n select<\r\n Row = AthenaRowShape,\r\n >(\r\n table: string,\r\n options?: AthenaGatewayCallOptions,\r\n ): SelectChain<Row, Row, TStrict>\r\n select(\r\n table: string,\r\n columns: AthenaSelectInput,\r\n options?: AthenaGatewayCallOptions,\r\n ): SelectChain<AthenaRowShape, AthenaRowShape, TStrict>\r\n\r\n insert<\r\n Row = AthenaRowShape,\r\n Insert = Partial<Row>,\r\n >(table: string, values: Insert, options?: AthenaGatewayCallOptions): MutationQuery<Row, Row, TStrict>\r\n insert<\r\n Row = AthenaRowShape,\r\n Insert = Partial<Row>,\r\n >(table: string, values: Insert[], options?: AthenaGatewayCallOptions): MutationQuery<Row[], Row, TStrict>\r\n\r\n upsert<\r\n Row = AthenaRowShape,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n >(\r\n table: string,\r\n values: Insert,\r\n options?: AthenaUpsertOptions<Update>,\r\n ): MutationQuery<Row, Row, TStrict>\r\n upsert<\r\n Row = AthenaRowShape,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n >(\r\n table: string,\r\n values: Insert[],\r\n options?: AthenaUpsertOptions<Update>,\r\n ): MutationQuery<Row[], Row, TStrict>\r\n\r\n update<\r\n Row = AthenaRowShape,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n >(table: string, values: Update, options?: AthenaGatewayCallOptions): UpdateChain<Row, TStrict>\r\n\r\n delete<Row = AthenaRowShape>(\r\n table: string,\r\n options?: AthenaGatewayCallOptions & { resourceId?: string },\r\n ): MutationQuery<Row | null, Row, TStrict>\r\n\r\n rpc<Row = unknown, Args extends AthenaJsonObject = AthenaJsonObject>(\r\n fn: string,\r\n args?: Args,\r\n options?: AthenaRpcCallOptions,\r\n ): RpcQueryBuilder<Row, TStrict>\r\n\r\n query<Row = unknown>(\r\n query: string,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<Row[]>>\r\n}\r\n\r\ninterface AthenaDbModuleFactoryInput<TStrict extends boolean = false> {\r\n from: AthenaSdkClient<TStrict>['from']\r\n rpc: AthenaSdkClient<TStrict>['rpc']\r\n query: AthenaSdkClient<TStrict>['query']\r\n}\r\n\r\nexport function createDbModule<TStrict extends boolean = false>(\r\n input: AthenaDbModuleFactoryInput<TStrict>,\r\n): AthenaDbModule<TStrict> {\r\n const db: AthenaDbModule<TStrict> = {\r\n from: input.from,\r\n select<Row = AthenaRowShape>(\r\n table: string,\r\n first?: AthenaGatewayCallOptions | AthenaSelectInput,\r\n second?: AthenaGatewayCallOptions,\r\n ) {\r\n if (first && typeof first === 'object' && !Array.isArray(first)) {\r\n return input.from<Row>(table).select(undefined, first as AthenaGatewayCallOptions)\r\n }\r\n return input.from<Row>(table).select(first, second)\r\n },\r\n insert<Row = AthenaRowShape, Insert = Partial<Row>>(\r\n table: string,\r\n values: Insert | Insert[],\r\n options?: AthenaGatewayCallOptions,\r\n ): MutationQuery<Row> | MutationQuery<Row[]> {\r\n return Array.isArray(values)\r\n ? input.from<Row, Insert, Partial<Insert>>(table).insert(values, options)\r\n : input.from<Row, Insert, Partial<Insert>>(table).insert(values, options)\r\n },\r\n upsert<Row = AthenaRowShape, Insert = Partial<Row>, Update = Partial<Insert>>(\r\n table: string,\r\n values: Insert | Insert[],\r\n options?: AthenaUpsertOptions<Update>,\r\n ): MutationQuery<Row> | MutationQuery<Row[]> {\r\n return Array.isArray(values)\r\n ? input.from<Row, Insert, Update>(table).upsert(values, options)\r\n : input.from<Row, Insert, Update>(table).upsert(values, options)\r\n },\r\n update<Row = AthenaRowShape, Insert = Partial<Row>, Update = Partial<Insert>>(\r\n table: string,\r\n values: Update,\r\n options?: AthenaGatewayCallOptions,\r\n ) {\r\n return input.from<Row, Insert, Update>(table).update(values, options)\r\n },\r\n delete<Row = AthenaRowShape>(\r\n table: string,\r\n options?: AthenaGatewayCallOptions & { resourceId?: string },\r\n ) {\r\n return input.from<Row>(table).delete(options)\r\n },\r\n rpc<Row = unknown, Args extends AthenaJsonObject = AthenaJsonObject>(\r\n fn: string,\r\n args?: Args,\r\n options?: AthenaRpcCallOptions,\r\n ) {\r\n return input.rpc<Row, Args>(fn, args, options)\r\n },\r\n query<Row = unknown>(query: string, options?: AthenaGatewayCallOptions) {\r\n return input.query<Row>(query, options)\r\n },\r\n }\r\n\r\n return db\r\n}\r\n","import type {\n AthenaStorageBinaryCallOptions,\n AthenaStorageCallOptions,\n CreateStorageUploadUrlRequest,\n GetStorageFileUrlQuery,\n ListStorageFilesRequest,\n ManagedFileRecord,\n StorageBatchUploadUrlResponse,\n StorageFileMutationResponse,\n StorageListFilesResponse,\n StorageServerSideEncryptionOptions,\n StorageUploadUrlResponse,\n} from './module.ts'\n\nexport type AthenaStorageTemplateValue = string | number | boolean | null | undefined\nexport type AthenaStorageTemplateVars = Record<string, AthenaStorageTemplateValue>\nexport type AthenaStorageEnv = Record<string, string | undefined>\nexport type AthenaStorageUploadHeaders = ConstructorParameters<typeof Headers>[0]\nexport type AthenaStoragePrefixPath =\n | string\n | ((context: AthenaStoragePathContext) => string | null | undefined)\n\nexport interface AthenaStoragePathContext {\n vars: AthenaStorageTemplateVars\n env: AthenaStorageEnv\n organizationId?: string\n organization_id?: string\n userId?: string\n user_id?: string\n resourceId?: string\n resource_id?: string\n}\n\nexport interface AthenaStorageFileConfig {\n /**\n * Prefix applied by high-level file helpers before storage keys are sent to Athena.\n * Supports tokens such as `{organization_id}`, `{organizationId}`, `{env.NODE_ENV}`,\n * and `${ATHENA_STORAGE_PREFIX}`.\n */\n prefixPath?: AthenaStoragePrefixPath\n vars?: AthenaStorageTemplateVars\n env?: AthenaStorageEnv\n}\n\nexport type AthenaStorageUploadSource = Blob | ArrayBuffer | Uint8Array\n\nexport interface AthenaStorageUploadConstraints {\n maxFiles?: number\n allowedExtensions?: readonly string[]\n extensions?: readonly string[]\n maxFileSizeMb?: number\n maxFileSizeBytes?: number\n}\n\nexport interface AthenaStorageUploadProgress {\n phase: 'preparing' | 'uploading' | 'complete'\n fileIndex: number\n fileCount: number\n fileName: string\n loaded: number\n total: number\n percent: number\n aggregateLoaded: number\n aggregateTotal: number\n aggregatePercent: number\n}\n\nexport type AthenaStorageUploadProgressHandler = (progress: AthenaStorageUploadProgress) => void\n\nexport interface AthenaStorageFileUploadInput extends AthenaStorageUploadConstraints, StorageServerSideEncryptionOptions {\n s3_id: string\n bucket?: string\n files: AthenaStorageUploadSource | ArrayLike<AthenaStorageUploadSource> | readonly AthenaStorageUploadSource[]\n storage_key?: string\n storageKey?: string\n storageKeyTemplate?: string\n prefixPath?: AthenaStoragePrefixPath\n fileName?: string\n name?: string\n original_name?: string\n resource_id?: string\n resourceId?: string\n organization_id?: string\n organizationId?: string\n user_id?: string\n userId?: string\n mime_type?: string\n content_type?: string\n public?: boolean\n metadata?: Record<string, unknown>\n vars?: AthenaStorageTemplateVars\n env?: AthenaStorageEnv\n uploadHeaders?: AthenaStorageUploadHeaders\n onProgress?: AthenaStorageUploadProgressHandler\n}\n\nexport interface AthenaStorageUploadedFile {\n file: ManagedFileRecord\n upload: StorageUploadUrlResponse['upload']\n source: AthenaStorageUploadSource\n fileName: string\n storage_key: string\n response: Response\n}\n\nexport interface AthenaStorageFileUploadResult {\n files: AthenaStorageUploadedFile[]\n count: number\n}\n\nexport interface AthenaStorageFileListInput extends Omit<ListStorageFilesRequest, 'prefix'> {\n prefix?: string\n prefixPath?: AthenaStoragePrefixPath\n vars?: AthenaStorageTemplateVars\n env?: AthenaStorageEnv\n organization_id?: string\n organizationId?: string\n user_id?: string\n userId?: string\n resource_id?: string\n resourceId?: string\n}\n\nexport interface AthenaStorageFileDownloadInput extends GetStorageFileUrlQuery {\n fileId?: string\n fileIds?: readonly string[]\n}\n\nexport type AthenaStorageFileDeleteInput = string | readonly string[]\n\nexport interface AthenaStorageFileModule {\n upload(\n input: AthenaStorageFileUploadInput,\n options?: AthenaStorageCallOptions,\n ): Promise<AthenaStorageFileUploadResult>\n download(\n fileId: string,\n query?: GetStorageFileUrlQuery,\n options?: AthenaStorageBinaryCallOptions,\n ): Promise<Response>\n download(\n fileIds: readonly string[],\n query?: GetStorageFileUrlQuery,\n options?: AthenaStorageBinaryCallOptions,\n ): Promise<Response[]>\n download(\n input: AthenaStorageFileDownloadInput,\n options?: AthenaStorageBinaryCallOptions,\n ): Promise<Response | Response[]>\n list(\n input: AthenaStorageFileListInput,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageListFilesResponse>\n delete(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\n delete(fileIds: readonly string[], options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse[]>\n}\n\nexport interface AthenaStorageFileBaseModule {\n createStorageUploadUrl(\n input: CreateStorageUploadUrlRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageUploadUrlResponse>\n createStorageUploadUrls(\n input: { files: CreateStorageUploadUrlRequest[] },\n options?: AthenaStorageCallOptions,\n ): Promise<StorageBatchUploadUrlResponse>\n listStorageFiles(input: ListStorageFilesRequest, options?: AthenaStorageCallOptions): Promise<StorageListFilesResponse>\n getStorageFileProxy(\n fileId: string,\n query?: GetStorageFileUrlQuery,\n options?: AthenaStorageBinaryCallOptions,\n ): Promise<Response>\n deleteStorageFile(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\n}\n\ninterface NormalizedUploadSource {\n source: AthenaStorageUploadSource\n fileName: string\n sizeBytes: number\n contentType?: string\n}\n\ninterface ResolvedUploadRequest {\n uploadRequest: CreateStorageUploadUrlRequest\n source: NormalizedUploadSource\n}\n\ninterface AthenaStorageXhrProgressEvent {\n loaded: number\n}\n\ninterface AthenaStorageXhr {\n readonly upload: {\n onprogress: ((event: AthenaStorageXhrProgressEvent) => void) | null\n }\n readonly status: number\n readonly statusText: string\n readonly response: unknown\n onload: (() => void) | null\n onerror: (() => void) | null\n onabort: (() => void) | null\n open(method: string, url: string): void\n setRequestHeader(key: string, value: string): void\n getAllResponseHeaders(): string\n send(body: unknown): void\n abort(): void\n}\n\ndeclare const XMLHttpRequest: (new () => AthenaStorageXhr) | undefined\n\nexport function createStorageFileModule(\n base: AthenaStorageFileBaseModule,\n config: AthenaStorageFileConfig = {},\n): AthenaStorageFileModule {\n const upload: AthenaStorageFileModule['upload'] = async (input, options) => {\n const sources = normalizeUploadSources(input)\n validateUploadConstraints(sources, input)\n\n const uploadRequests = sources.map((source, index): ResolvedUploadRequest => {\n const storageKey = resolveUploadStorageKey(input, source, index, options, config)\n return {\n source,\n uploadRequest: {\n s3_id: input.s3_id,\n bucket: input.bucket,\n storage_key: storageKey,\n name: input.name ?? source.fileName,\n original_name: input.original_name ?? source.fileName,\n resource_id: input.resource_id ?? input.resourceId,\n mime_type: input.mime_type ?? source.contentType,\n content_type: input.content_type ?? source.contentType,\n size_bytes: source.sizeBytes,\n public: input.public,\n metadata: input.metadata,\n server_side_encryption: input.server_side_encryption,\n sse: input.sse,\n ssekms_key_id: input.ssekms_key_id,\n kms_key_id: input.kms_key_id,\n bucket_key_enabled: input.bucket_key_enabled,\n },\n }\n })\n\n input.onProgress?.(createProgressSnapshot('preparing', sources, 0, 0, 0))\n\n const uploadUrls =\n uploadRequests.length === 1\n ? [await base.createStorageUploadUrl(uploadRequests[0].uploadRequest, options)]\n : (await base.createStorageUploadUrls({ files: uploadRequests.map(request => request.uploadRequest) }, options)).files\n\n const aggregateLoaded = new Array(uploadRequests.length).fill(0) as number[]\n const uploaded: AthenaStorageUploadedFile[] = []\n\n for (let index = 0; index < uploadRequests.length; index += 1) {\n const request = uploadRequests[index]\n const uploadUrl = uploadUrls[index]\n const response = await putUploadBody(\n uploadUrl.upload.url,\n uploadUrl.upload.headers ?? {},\n request.source,\n input,\n options,\n progress => {\n aggregateLoaded[index] = progress.loaded\n input.onProgress?.(createProgressSnapshot('uploading', sources, index, progress.loaded, sum(aggregateLoaded)))\n },\n )\n uploaded.push({\n file: uploadUrl.file,\n upload: uploadUrl.upload,\n source: request.source.source,\n fileName: request.source.fileName,\n storage_key: request.uploadRequest.storage_key,\n response,\n })\n aggregateLoaded[index] = request.source.sizeBytes\n input.onProgress?.(createProgressSnapshot('complete', sources, index, request.source.sizeBytes, sum(aggregateLoaded)))\n }\n\n return {\n files: uploaded,\n count: uploaded.length,\n }\n }\n\n const download = ((\n input: string | readonly string[] | AthenaStorageFileDownloadInput,\n queryOrOptions?: GetStorageFileUrlQuery | AthenaStorageBinaryCallOptions,\n maybeOptions?: AthenaStorageBinaryCallOptions,\n ): Promise<Response | Response[]> => {\n const { fileIds, query, options } = normalizeDownloadArgs(input, queryOrOptions, maybeOptions)\n const downloads = fileIds.map(fileId => base.getStorageFileProxy(fileId, query, options))\n return Array.isArray(input) || (isRecord(input) && Array.isArray(input.fileIds))\n ? Promise.all(downloads)\n : downloads[0]\n }) as AthenaStorageFileModule['download']\n\n const deleteFile = ((\n input: string | readonly string[],\n options?: AthenaStorageCallOptions,\n ): Promise<StorageFileMutationResponse | StorageFileMutationResponse[]> => {\n if (Array.isArray(input)) {\n return Promise.all(input.map(fileId => base.deleteStorageFile(fileId, options)))\n }\n return base.deleteStorageFile(input as string, options)\n }) as AthenaStorageFileModule['delete']\n\n return {\n upload,\n download,\n\n list(input, options) {\n const prefix = resolveStoragePath(input.prefix ?? '', input, options, config)\n return base.listStorageFiles(\n {\n s3_id: input.s3_id,\n prefix,\n },\n options,\n )\n },\n\n delete: deleteFile,\n }\n}\n\nexport function resolveStoragePath(\n path: string,\n input: {\n prefixPath?: AthenaStoragePrefixPath\n vars?: AthenaStorageTemplateVars\n env?: AthenaStorageEnv\n organization_id?: string\n organizationId?: string\n user_id?: string\n userId?: string\n resource_id?: string\n resourceId?: string\n },\n options: AthenaStorageCallOptions | undefined,\n config: AthenaStorageFileConfig = {},\n): string {\n const context = createPathContext(input, options, config)\n const prefixPath = input.prefixPath ?? config.prefixPath\n const prefix = typeof prefixPath === 'function'\n ? prefixPath(context)\n : prefixPath\n return joinStoragePath(renderStorageTemplate(prefix ?? '', context), renderStorageTemplate(path, context))\n}\n\nfunction resolveUploadStorageKey(\n input: AthenaStorageFileUploadInput,\n source: NormalizedUploadSource,\n index: number,\n options: AthenaStorageCallOptions | undefined,\n config: AthenaStorageFileConfig,\n): string {\n const explicitKey = input.storage_key ?? input.storageKey\n const keyTemplate = input.storageKeyTemplate\n const fallbackName = source.fileName\n const context = createPathContext(input, options, config)\n const key = keyTemplate\n ? renderStorageTemplate(keyTemplate, {\n ...context,\n vars: {\n ...context.vars,\n index,\n fileName: source.fileName,\n name: source.fileName,\n },\n })\n : explicitKey ?? fallbackName\n return resolveStoragePath(key, input, options, config)\n}\n\nfunction normalizeUploadSources(input: AthenaStorageFileUploadInput): NormalizedUploadSource[] {\n const files = toArray(input.files)\n if (files.length === 0) {\n throw new Error('athena.storage.file.upload requires at least one file')\n }\n return files.map((source, index) => {\n const fileName = input.fileName ?? sourceName(source) ?? `file-${index + 1}`\n const sizeBytes = sourceSize(source)\n const contentType = input.content_type ?? input.mime_type ?? sourceContentType(source)\n return {\n source,\n fileName,\n sizeBytes,\n contentType,\n }\n })\n}\n\nfunction validateUploadConstraints(sources: readonly NormalizedUploadSource[], input: AthenaStorageFileUploadInput): void {\n const maxFiles = input.maxFiles ?? 1\n if (sources.length > maxFiles) {\n throw new Error(`athena.storage.file.upload accepts at most ${maxFiles} file${maxFiles === 1 ? '' : 's'} for this call`)\n }\n\n const maxFileSizeBytes = input.maxFileSizeBytes ?? (\n input.maxFileSizeMb === undefined ? undefined : Math.floor(input.maxFileSizeMb * 1024 * 1024)\n )\n if (maxFileSizeBytes !== undefined) {\n const tooLarge = sources.find(source => source.sizeBytes > maxFileSizeBytes)\n if (tooLarge) {\n throw new Error(`athena.storage.file.upload rejected ${tooLarge.fileName}: file exceeds ${maxFileSizeBytes} bytes`)\n }\n }\n\n const allowedExtensions = normalizeExtensions(input.allowedExtensions ?? input.extensions)\n if (allowedExtensions.size > 0) {\n const invalid = sources.find(source => !allowedExtensions.has(fileExtension(source.fileName)))\n if (invalid) {\n throw new Error(`athena.storage.file.upload rejected ${invalid.fileName}: extension is not allowed`)\n }\n }\n}\n\nasync function putUploadBody(\n url: string,\n uploadHeaders: Record<string, string>,\n source: NormalizedUploadSource,\n input: AthenaStorageFileUploadInput,\n options: AthenaStorageCallOptions | undefined,\n onProgress: (progress: { loaded: number }) => void,\n): Promise<Response> {\n const headers = new Headers(uploadHeaders)\n new Headers(input.uploadHeaders).forEach((value, key) => headers.set(key, value))\n if (source.contentType && !headers.has('Content-Type')) {\n headers.set('Content-Type', source.contentType)\n }\n if (typeof XMLHttpRequest !== 'undefined') {\n return putUploadBodyWithXhr(url, source, headers, options, onProgress)\n }\n onProgress({ loaded: 0 })\n const response = await fetch(url, {\n method: 'PUT',\n headers,\n body: source.source as RequestInit['body'],\n signal: options?.signal,\n })\n if (!response.ok) {\n throw new Error(`athena.storage.file.upload failed with status ${response.status}`)\n }\n onProgress({ loaded: source.sizeBytes })\n return response\n}\n\nfunction putUploadBodyWithXhr(\n url: string,\n source: NormalizedUploadSource,\n headers: Headers,\n options: AthenaStorageCallOptions | undefined,\n onProgress: (progress: { loaded: number }) => void,\n): Promise<Response> {\n const Xhr = XMLHttpRequest\n if (Xhr === undefined) {\n return Promise.reject(new Error('athena.storage.file.upload requires XMLHttpRequest in this runtime'))\n }\n return new Promise((resolve, reject) => {\n const xhr = new Xhr()\n const abort = () => xhr.abort()\n xhr.open('PUT', url)\n headers.forEach((value, key) => xhr.setRequestHeader(key, value))\n xhr.upload.onprogress = (event: AthenaStorageXhrProgressEvent) => {\n onProgress({ loaded: event.loaded })\n }\n xhr.onload = () => {\n if (options?.signal) {\n options.signal.removeEventListener('abort', abort)\n }\n if (xhr.status < 200 || xhr.status >= 300) {\n reject(new Error(`athena.storage.file.upload failed with status ${xhr.status}`))\n return\n }\n onProgress({ loaded: source.sizeBytes })\n resolve(new Response(xhr.response as ConstructorParameters<typeof Response>[0], {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseXhrHeaders(xhr.getAllResponseHeaders()),\n }))\n }\n xhr.onerror = () => {\n if (options?.signal) {\n options.signal.removeEventListener('abort', abort)\n }\n reject(new Error('athena.storage.file.upload failed with a network error'))\n }\n xhr.onabort = () => {\n if (options?.signal) {\n options.signal.removeEventListener('abort', abort)\n }\n reject(new DOMException('Upload aborted', 'AbortError'))\n }\n if (options?.signal) {\n if (options.signal.aborted) {\n abort()\n return\n }\n options.signal.addEventListener('abort', abort, { once: true })\n }\n xhr.send(source.source)\n })\n}\n\nfunction normalizeDownloadArgs(\n input: string | readonly string[] | AthenaStorageFileDownloadInput,\n queryOrOptions?: GetStorageFileUrlQuery | AthenaStorageBinaryCallOptions,\n maybeOptions?: AthenaStorageBinaryCallOptions,\n): {\n fileIds: string[]\n query?: GetStorageFileUrlQuery\n options?: AthenaStorageBinaryCallOptions\n} {\n if (typeof input === 'string') {\n return { fileIds: [input], query: queryOrOptions as GetStorageFileUrlQuery | undefined, options: maybeOptions }\n }\n if (Array.isArray(input)) {\n return { fileIds: [...input], query: queryOrOptions as GetStorageFileUrlQuery | undefined, options: maybeOptions }\n }\n const downloadInput = input as AthenaStorageFileDownloadInput\n const { fileId, fileIds, ...query } = downloadInput\n return {\n fileIds: fileIds ? [...fileIds] : fileId ? [fileId] : [],\n query,\n options: queryOrOptions as AthenaStorageBinaryCallOptions | undefined,\n }\n}\n\nfunction createPathContext(\n input: {\n vars?: AthenaStorageTemplateVars\n env?: AthenaStorageEnv\n organization_id?: string\n organizationId?: string\n user_id?: string\n userId?: string\n resource_id?: string\n resourceId?: string\n },\n options: AthenaStorageCallOptions | undefined,\n config: AthenaStorageFileConfig,\n): AthenaStoragePathContext {\n const organizationId = input.organizationId ?? input.organization_id ?? options?.organizationId ?? undefined\n const userId = input.userId ?? input.user_id ?? options?.userId ?? undefined\n const resourceId = input.resourceId ?? input.resource_id ?? undefined\n const vars = {\n ...(config.vars ?? {}),\n ...(input.vars ?? {}),\n }\n if (organizationId !== undefined) {\n vars.organizationId = organizationId\n vars.organization_id = organizationId\n }\n if (userId !== undefined) {\n vars.userId = userId\n vars.user_id = userId\n }\n if (resourceId !== undefined) {\n vars.resourceId = resourceId\n vars.resource_id = resourceId\n }\n return {\n vars,\n env: {\n ...readProcessEnv(),\n ...(config.env ?? {}),\n ...(input.env ?? {}),\n },\n organizationId,\n organization_id: organizationId,\n userId,\n user_id: userId,\n resourceId,\n resource_id: resourceId,\n }\n}\n\nfunction renderStorageTemplate(template: string, context: AthenaStoragePathContext): string {\n return template.replace(/\\$\\{([^}]+)\\}|\\{([^}]+)\\}/g, (_match, shellToken: string | undefined, braceToken: string | undefined) => {\n const token = (shellToken ?? braceToken ?? '').trim()\n if (!token) return ''\n const value = resolveTemplateToken(token, context)\n return value === undefined || value === null ? '' : String(value)\n })\n}\n\nfunction resolveTemplateToken(token: string, context: AthenaStoragePathContext): AthenaStorageTemplateValue {\n if (token.startsWith('env.')) {\n return context.env[token.slice(4)]\n }\n if (token in context.vars) {\n return context.vars[token]\n }\n return context.env[token]\n}\n\nfunction joinStoragePath(...parts: readonly string[]): string {\n return parts\n .map(part => part.trim().replace(/^\\/+|\\/+$/g, ''))\n .filter(Boolean)\n .join('/')\n}\n\nfunction toArray(files: AthenaStorageFileUploadInput['files']): AthenaStorageUploadSource[] {\n if (isUploadSource(files)) return [files]\n return Array.from(files)\n}\n\nfunction isUploadSource(value: unknown): value is AthenaStorageUploadSource {\n return value instanceof Blob || value instanceof ArrayBuffer || value instanceof Uint8Array\n}\n\nfunction sourceName(source: AthenaStorageUploadSource): string | undefined {\n return isRecord(source) && typeof source.name === 'string' && source.name.trim()\n ? source.name.trim()\n : undefined\n}\n\nfunction sourceSize(source: AthenaStorageUploadSource): number {\n if (source instanceof Blob) return source.size\n return source.byteLength\n}\n\nfunction sourceContentType(source: AthenaStorageUploadSource): string | undefined {\n return source instanceof Blob && source.type.trim() ? source.type.trim() : undefined\n}\n\nfunction normalizeExtensions(extensions: readonly string[] | undefined): Set<string> {\n return new Set((extensions ?? []).map(extension => extension.replace(/^\\./, '').toLowerCase()).filter(Boolean))\n}\n\nfunction fileExtension(fileName: string): string {\n const lastDot = fileName.lastIndexOf('.')\n return lastDot === -1 ? '' : fileName.slice(lastDot + 1).toLowerCase()\n}\n\nfunction createProgressSnapshot(\n phase: AthenaStorageUploadProgress['phase'],\n sources: readonly NormalizedUploadSource[],\n fileIndex: number,\n loaded: number,\n aggregateLoaded: number,\n): AthenaStorageUploadProgress {\n const total = sources[fileIndex]?.sizeBytes ?? 0\n const aggregateTotal = sources.reduce((totalBytes, source) => totalBytes + source.sizeBytes, 0)\n return {\n phase,\n fileIndex,\n fileCount: sources.length,\n fileName: sources[fileIndex]?.fileName ?? '',\n loaded,\n total,\n percent: total > 0 ? Math.round((loaded / total) * 100) : 100,\n aggregateLoaded,\n aggregateTotal,\n aggregatePercent: aggregateTotal > 0 ? Math.round((aggregateLoaded / aggregateTotal) * 100) : 100,\n }\n}\n\nfunction sum(values: readonly number[]): number {\n return values.reduce((total, value) => total + value, 0)\n}\n\nfunction parseXhrHeaders(raw: string): Headers {\n const headers = new Headers()\n for (const line of raw.trim().split(/[\\r\\n]+/)) {\n const index = line.indexOf(':')\n if (index === -1) continue\n headers.set(line.slice(0, index).trim(), line.slice(index + 1).trim())\n }\n return headers\n}\n\nfunction readProcessEnv(): AthenaStorageEnv {\n const processLike = (globalThis as { process?: { env?: AthenaStorageEnv } }).process\n return processLike?.env ?? {}\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object'\n}\n","import type { AthenaGatewayClient } from '../gateway/client.ts'\r\nimport type {\r\n AthenaGatewayCallOptions,\r\n AthenaGatewayEndpointPath,\r\n AthenaGatewayErrorCode,\r\n AthenaGatewayMethod,\r\n} from '../gateway/types.ts'\r\nimport type {\r\n AthenaErrorCategory,\r\n AthenaErrorCode,\r\n AthenaErrorKind,\r\n NormalizedAthenaError,\r\n} from '../auxiliaries.ts'\r\nimport { normalizeAthenaError } from '../auxiliaries.ts'\r\nimport { isAthenaGatewayError } from '../gateway/errors.ts'\r\nimport { buildAthenaGatewayUrl, normalizeAthenaGatewayBaseUrl } from '../gateway/url.ts'\r\nimport { createStorageFileModule } from './file.ts'\r\nimport type { AthenaStorageFileConfig, AthenaStorageFileModule } from './file.ts'\r\n\r\nexport const storageSdkManifest = {\r\n namespace: 'storage',\r\n basePath: '/storage',\r\n envelopeKinds: {\r\n raw: 'response body is the payload',\r\n athena: 'response body is { status, message, data }',\r\n },\r\n methods: [\r\n {\r\n name: 'listStorageCatalogs',\r\n method: 'GET',\r\n path: '/storage/catalogs',\r\n responseEnvelope: 'raw',\r\n responseType: '{ data: S3CatalogItem[] }',\r\n },\r\n {\r\n name: 'createStorageCatalog',\r\n method: 'POST',\r\n path: '/storage/catalogs',\r\n requestType: 'CreateStorageCatalogRequest',\r\n responseEnvelope: 'raw',\r\n responseType: 'S3CatalogItem',\r\n },\r\n {\r\n name: 'updateStorageCatalog',\r\n method: 'PATCH',\r\n path: '/storage/catalogs/{id}',\r\n pathParams: ['id'],\r\n requestType: 'UpdateStorageCatalogRequest',\r\n responseEnvelope: 'raw',\r\n responseType: 'S3CatalogItem',\r\n },\r\n {\r\n name: 'deleteStorageCatalog',\r\n method: 'DELETE',\r\n path: '/storage/catalogs/{id}',\r\n pathParams: ['id'],\r\n responseEnvelope: 'raw',\r\n responseType: '{ id: string; deleted: boolean }',\r\n },\r\n {\r\n name: 'listStorageCredentials',\r\n method: 'GET',\r\n path: '/storage/credentials',\r\n responseEnvelope: 'raw',\r\n responseType: '{ data: S3CredentialListItem[] }',\r\n },\r\n {\r\n name: 'createStorageUploadUrl',\r\n method: 'POST',\r\n path: '/storage/files/upload-url',\r\n requestType: 'CreateStorageUploadUrlRequest',\r\n responseEnvelope: 'athena',\r\n responseType: 'StorageUploadUrlResponse',\r\n },\r\n {\r\n name: 'createStorageUploadUrls',\r\n method: 'POST',\r\n path: '/storage/files/upload-urls',\r\n requestType: 'CreateStorageUploadUrlsRequest',\r\n responseEnvelope: 'athena',\r\n responseType: 'StorageBatchUploadUrlResponse',\r\n },\r\n {\r\n name: 'listStorageFiles',\r\n method: 'POST',\r\n path: '/storage/files/list',\r\n requestType: 'ListStorageFilesRequest',\r\n responseEnvelope: 'athena',\r\n responseType: 'StorageListFilesResponse',\r\n },\r\n {\r\n name: 'getStorageFile',\r\n method: 'GET',\r\n path: '/storage/files/{file_id}',\r\n pathParams: ['file_id'],\r\n responseEnvelope: 'athena',\r\n responseType: 'StorageFileMutationResponse',\r\n },\r\n {\r\n name: 'getStorageFileUrl',\r\n method: 'GET',\r\n path: '/storage/files/{file_id}/url',\r\n pathParams: ['file_id'],\r\n queryParams: ['purpose'],\r\n responseEnvelope: 'athena',\r\n responseType: 'PresignedFileUrlResponse',\r\n },\r\n {\r\n name: 'getStorageFileProxy',\r\n method: 'GET',\r\n path: '/storage/files/{file_id}/proxy',\r\n pathParams: ['file_id'],\r\n queryParams: ['purpose'],\r\n responseEnvelope: 'raw',\r\n responseType: 'Response',\r\n binary: true,\r\n },\r\n {\r\n name: 'updateStorageFile',\r\n method: 'PATCH',\r\n path: '/storage/files/{file_id}',\r\n pathParams: ['file_id'],\r\n requestType: 'UpdateStorageFileRequest',\r\n responseEnvelope: 'athena',\r\n responseType: 'StorageFileMutationResponse',\r\n },\r\n {\r\n name: 'deleteStorageFile',\r\n method: 'DELETE',\r\n path: '/storage/files/{file_id}',\r\n pathParams: ['file_id'],\r\n responseEnvelope: 'athena',\r\n responseType: 'StorageFileMutationResponse',\r\n },\r\n {\n name: 'setStorageFileVisibility',\n method: 'PATCH',\n path: '/storage/files/{file_id}/visibility',\n pathParams: ['file_id'],\n requestType: 'SetStorageFileVisibilityRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationResponse',\n },\n {\n name: 'postStorageFileVisibility',\n method: 'POST',\n path: '/storage/files/{file_id}/visibility',\n pathParams: ['file_id'],\n requestType: 'SetStorageFileVisibilityRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationResponse',\n },\n {\n name: 'setManyStorageFileVisibility',\n method: 'POST',\n path: '/storage/files/visibility-many',\n requestType: 'SetManyStorageFileVisibilityRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationManyResponse',\n },\n {\n name: 'deleteStorageFolder',\n method: 'POST',\n path: '/storage/folders/delete',\n requestType: 'DeleteStorageFolderRequest',\n responseEnvelope: 'athena',\r\n responseType: 'StorageFolderMutationResponse',\r\n },\r\n {\n name: 'moveStorageFolder',\n method: 'POST',\n path: '/storage/folders/move',\n requestType: 'MoveStorageFolderRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageFolderMutationResponse',\n },\n {\n name: 'searchStorageFiles',\n method: 'POST',\n path: '/storage/files/search',\n requestType: 'SearchStorageFilesRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageListFilesResponse',\n },\n {\n name: 'confirmStorageUpload',\n method: 'POST',\n path: '/storage/files/{file_id}/confirm-upload',\n pathParams: ['file_id'],\n requestType: 'ConfirmStorageUploadRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationResponse',\n },\n {\n name: 'uploadStorageFileBinary',\n method: 'PUT',\n path: '/storage/files/{file_id}/upload',\n pathParams: ['file_id'],\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationResponse',\n binary: true,\n },\n {\n name: 'copyStorageFile',\n method: 'POST',\n path: '/storage/files/{file_id}/copy',\n pathParams: ['file_id'],\n requestType: 'CopyStorageFileRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationResponse',\n },\n {\n name: 'deleteManyStorageFiles',\n method: 'POST',\n path: '/storage/files/delete-many',\n requestType: 'DeleteManyStorageFilesRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationManyResponse',\n },\n {\n name: 'updateManyStorageFiles',\n method: 'POST',\n path: '/storage/files/update-many',\n requestType: 'UpdateManyStorageFilesRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationManyResponse',\n },\n {\n name: 'restoreStorageFile',\n method: 'POST',\n path: '/storage/files/{file_id}/restore',\n pathParams: ['file_id'],\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationResponse',\n },\n {\n name: 'purgeStorageFile',\n method: 'DELETE',\n path: '/storage/files/{file_id}/purge',\n pathParams: ['file_id'],\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationResponse',\n },\n {\n name: 'getStorageFilePublicUrl',\n method: 'GET',\n path: '/storage/files/{file_id}/public-url',\n pathParams: ['file_id'],\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'getStorageFileProxyUrl',\n method: 'GET',\n path: '/storage/files/{file_id}/proxy-url',\n pathParams: ['file_id'],\n queryParams: ['purpose'],\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'listStorageFileVersions',\n method: 'GET',\n path: '/storage/files/{file_id}/versions',\n pathParams: ['file_id'],\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'restoreStorageFileVersion',\n method: 'POST',\n path: '/storage/files/{file_id}/versions/{version_id}/restore',\n pathParams: ['file_id', 'version_id'],\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'deleteStorageFileVersion',\n method: 'DELETE',\n path: '/storage/files/{file_id}/versions/{version_id}',\n pathParams: ['file_id', 'version_id'],\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'getStorageFileRetention',\n method: 'GET',\n path: '/storage/files/{file_id}/retention',\n pathParams: ['file_id'],\n queryParams: ['version_id'],\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'setStorageFileRetention',\n method: 'POST',\n path: '/storage/files/{file_id}/retention',\n pathParams: ['file_id'],\n requestType: 'StorageFileRetentionRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'listStorageFolders',\n method: 'POST',\n path: '/storage/folders/list',\n requestType: 'ListStorageFoldersRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'treeStorageFolders',\n method: 'POST',\n path: '/storage/folders/tree',\n requestType: 'TreeStorageFoldersRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'listStoragePermissions',\n method: 'POST',\n path: '/storage/permissions/list',\n requestType: 'StoragePermissionListRequest',\n responseEnvelope: 'athena',\n responseType: 'StoragePermissionListResponse',\n },\n {\n name: 'grantStoragePermission',\n method: 'POST',\n path: '/storage/permissions/grant',\n requestType: 'StoragePermissionGrantRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'revokeStoragePermission',\n method: 'POST',\n path: '/storage/permissions/revoke',\n requestType: 'StoragePermissionRevokeRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'checkStoragePermission',\n method: 'POST',\n path: '/storage/permissions/check',\n requestType: 'StoragePermissionCheckRequest',\n responseEnvelope: 'athena',\n responseType: 'StoragePermissionCheckResponse',\n },\n {\n name: 'listStorageObjects',\n method: 'POST',\n path: '/storage/objects',\n requestType: 'StorageListObjectsRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'headStorageObject',\n method: 'POST',\n path: '/storage/objects/head',\n requestType: 'StorageObjectRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'existsStorageObject',\n method: 'POST',\n path: '/storage/objects/exists',\n requestType: 'StorageObjectRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'validateStorageObject',\n method: 'POST',\n path: '/storage/objects/validate',\n requestType: 'StorageObjectValidateRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'updateStorageObject',\n method: 'POST',\n path: '/storage/objects/update',\n requestType: 'StorageUpdateObjectRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'copyStorageObject',\n method: 'POST',\n path: '/storage/objects/copy',\n requestType: 'StorageObjectCopyRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'getStorageObjectUrl',\n method: 'POST',\n path: '/storage/objects/url',\n requestType: 'StorageObjectRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'getStorageObjectPublicUrl',\n method: 'POST',\n path: '/storage/objects/public-url',\n requestType: 'StorageObjectPublicUrlRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'deleteStorageObject',\n method: 'POST',\n path: '/storage/objects/delete',\n requestType: 'StorageObjectRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'createStorageObjectUploadUrl',\n method: 'POST',\n path: '/storage/objects/upload-url',\n requestType: 'StoragePresignUploadRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'createStorageObjectPostPolicy',\n method: 'POST',\n path: '/storage/objects/post-policy',\n requestType: 'StorageSignedPostPolicyRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'listStorageObjectVersions',\n method: 'POST',\n path: '/storage/objects/versions',\n requestType: 'StorageObjectVersionListRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'restoreStorageObjectVersion',\n method: 'POST',\n path: '/storage/objects/versions/restore',\n requestType: 'StorageObjectVersionMutationRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'deleteStorageObjectVersion',\n method: 'POST',\n path: '/storage/objects/versions/delete',\n requestType: 'StorageObjectVersionMutationRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'createStorageObjectFolder',\n method: 'POST',\n path: '/storage/objects/folder',\n requestType: 'StorageObjectFolderCreateRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'deleteStorageObjectFolder',\n method: 'POST',\n path: '/storage/objects/folder/delete',\n requestType: 'StorageObjectFolderDeleteRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'renameStorageObjectFolder',\n method: 'POST',\n path: '/storage/objects/folder/rename',\n requestType: 'StorageObjectFolderRenameRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'listStorageBuckets',\n method: 'POST',\n path: '/storage/buckets/list',\n requestType: \"Omit<StorageObjectBaseRequest, 'bucket'>\",\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'createStorageBucket',\n method: 'POST',\n path: '/storage/buckets/create',\n requestType: 'StorageObjectBaseRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'deleteStorageBucket',\n method: 'POST',\n path: '/storage/buckets/delete',\n requestType: 'StorageObjectBaseRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'getStorageBucketLifecycle',\n method: 'POST',\n path: '/storage/buckets/lifecycle',\n requestType: 'StorageBucketLifecycleRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'setStorageBucketLifecycle',\n method: 'POST',\n path: '/storage/buckets/lifecycle/set',\n requestType: 'StorageSetBucketLifecycleRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'deleteStorageBucketLifecycle',\n method: 'POST',\n path: '/storage/buckets/lifecycle/delete',\n requestType: 'StorageBucketLifecycleRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'getStorageBucketPolicy',\n method: 'POST',\n path: '/storage/buckets/policy',\n requestType: 'StorageBucketPolicyRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'setStorageBucketPolicy',\n method: 'POST',\n path: '/storage/buckets/policy/set',\n requestType: 'StorageSetBucketPolicyRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'deleteStorageBucketPolicy',\n method: 'POST',\n path: '/storage/buckets/policy/delete',\n requestType: 'StorageBucketPolicyRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'getStorageBucketPublicAccess',\n method: 'POST',\n path: '/storage/buckets/public-access',\n requestType: 'StoragePublicAccessBlockRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'setStorageBucketPublicAccess',\n method: 'POST',\n path: '/storage/buckets/public-access/set',\n requestType: 'StorageSetPublicAccessBlockRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'deleteStorageBucketPublicAccess',\n method: 'POST',\n path: '/storage/buckets/public-access/delete',\n requestType: 'StoragePublicAccessBlockRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'getStorageBucketCors',\n method: 'POST',\n path: '/storage/buckets/cors',\n requestType: 'StorageBucketCorsRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'setStorageBucketCors',\n method: 'POST',\n path: '/storage/buckets/cors/set',\n requestType: 'StorageSetBucketCorsRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'deleteStorageBucketCors',\n method: 'POST',\n path: '/storage/buckets/cors/delete',\n requestType: 'StorageBucketCorsRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'createStorageMultipartUpload',\n method: 'POST',\n path: '/storage/multipart/create',\n requestType: 'StorageMultipartCreateRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'signStorageMultipartPart',\n method: 'POST',\n path: '/storage/multipart/sign-part',\n requestType: 'StorageMultipartSignPartRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'completeStorageMultipartUpload',\n method: 'POST',\n path: '/storage/multipart/complete',\n requestType: 'StorageMultipartCompleteRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationResponse',\n },\n {\n name: 'abortStorageMultipartUpload',\n method: 'POST',\n path: '/storage/multipart/abort',\n requestType: 'StorageMultipartAbortRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'listStorageMultipartParts',\n method: 'POST',\n path: '/storage/multipart/list-parts',\n requestType: 'StorageMultipartListPartsRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'listStorageAuditEvents',\n method: 'POST',\n path: '/storage/audit/list',\n requestType: 'StorageAuditQueryRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageAuditListResponse',\n },\n ],\n} as const\n\r\nexport interface S3CatalogItem {\r\n id: string\r\n name: string\r\n endpoint?: string | null\r\n region?: string | null\r\n bucket: string\r\n provider: string\r\n force_path_style: boolean\r\n default_prefix?: string | null\r\n public_base_url?: string | null\r\n is_active: boolean\r\n metadata: Record<string, unknown>\r\n created_at: string\r\n updated_at: string\r\n}\r\n\r\nexport interface S3CredentialListItem {\r\n id: string\r\n s3_id: string\r\n name: string\r\n endpoint?: string | null\r\n region?: string | null\r\n bucket: string\r\n provider: string\r\n access_key: string\r\n is_active: boolean\r\n created_at: string\r\n rotated_at?: string | null\r\n}\r\n\r\nexport interface ManagedFileRecord {\r\n id: string\r\n name: string\r\n original_name?: string | null\r\n file_name?: string | null\r\n url?: string | null\r\n bucket: string\r\n s3_id?: string | null\r\n prefix_path?: string | null\r\n size_bytes?: number | null\r\n mime_type?: string | null\r\n content_type?: string | null\r\n resource_id?: string | null\r\n organization_id?: string | null\r\n created_by_user_id?: string | null\r\n uploaded_by_user_id?: string | null\r\n checksum_sha256?: string | null\r\n metadata: Record<string, unknown>\r\n created_at: string\r\n updated_at: string\r\n storage_key: string\r\n extension?: string | null\r\n visibility?: 'private' | 'organization' | 'public'\r\n is_public: boolean\r\n status: string\r\n deleted_at?: string | null\r\n}\r\n\r\nexport interface PresignedFileUrlResponse {\n file_id: string\n bucket: string\n storage_key: string\n purpose: string\n url: string\n headers?: Record<string, string>\n expires_at: string\n expires_at_epoch_seconds: number\n expires_in: number\n cache_hit: boolean\n cache_layer: string\n}\n\nexport interface StorageServerSideEncryptionOptions {\n server_side_encryption?: 'AES256' | 'aws:kms' | 'aws:kms:dsse' | (string & {})\n sse?: 'AES256' | 'aws:kms' | 'aws:kms:dsse' | (string & {})\n ssekms_key_id?: string\n kms_key_id?: string\n bucket_key_enabled?: boolean\n}\n\nexport interface CreateStorageCatalogRequest {\n name: string\r\n endpoint: string\r\n region: string\r\n bucket: string\r\n provider?: string\r\n force_path_style?: boolean\r\n default_prefix?: string\r\n public_base_url?: string\r\n access_key_id: string\r\n secret_key: string\r\n session_token?: string\r\n metadata?: Record<string, unknown>\r\n}\r\n\r\nexport interface UpdateStorageCatalogRequest {\r\n name?: string\r\n endpoint?: string\r\n region?: string\r\n bucket?: string\r\n provider?: string\r\n force_path_style?: boolean\r\n default_prefix?: string | null\r\n public_base_url?: string | null\r\n access_key_id?: string\r\n secret_key?: string\r\n session_token?: string\r\n is_active?: boolean\r\n metadata?: Record<string, unknown>\r\n}\r\n\r\nexport interface CreateStorageUploadUrlRequest extends StorageServerSideEncryptionOptions {\n s3_id: string\n bucket?: string\n storage_key: string\n name?: string\r\n original_name?: string\r\n resource_id?: string\r\n mime_type?: string\r\n content_type?: string\r\n size_bytes?: number\r\n file_id?: string\r\n public?: boolean\r\n visibility?: 'private' | 'organization' | 'public'\r\n metadata?: Record<string, unknown>\r\n}\r\n\r\nexport interface CreateStorageUploadUrlsRequest {\r\n files: CreateStorageUploadUrlRequest[]\r\n}\r\n\r\nexport interface StorageUploadUrlResponse {\r\n file: ManagedFileRecord\r\n upload: PresignedFileUrlResponse\r\n}\r\n\r\nexport interface StorageBatchUploadUrlResponse {\r\n files: StorageUploadUrlResponse[]\r\n}\r\n\r\nexport interface ListStorageFilesRequest {\n s3_id: string\n prefix?: string\n limit?: number\n offset?: number\n metadata?: Record<string, unknown>\n name?: string\n resource_id?: string\n mime_type?: string\n content_type?: string\n status?: string\n visibility?: 'private' | 'organization' | 'public' | (string & {})\n bucket?: string\n key_prefix?: string\n}\n\nexport interface StorageListFilesResponse {\n files: ManagedFileRecord[]\n count: number\n total?: number\n limit?: number\n offset?: number\n next_offset?: number | null\n has_more?: boolean\n}\n\nexport interface UpdateStorageFileRequest {\n storage_key?: string\n bucket?: string\n name?: string\n file_name?: string\n original_name?: string\n resource_id?: string\n mime_type?: string\n content_type?: string\n size_bytes?: number\n checksum_sha256?: string\n visibility?: 'private' | 'organization' | 'public' | (string & {})\n status?: string\n metadata?: Record<string, unknown>\n}\n\r\nexport interface SetStorageFileVisibilityRequest {\r\n public?: boolean\r\n visibility?: 'private' | 'organization' | 'public'\r\n}\r\n\r\nexport interface DeleteStorageFolderRequest {\r\n s3_id: string\r\n prefix: string\r\n}\r\n\r\nexport interface MoveStorageFolderRequest {\r\n s3_id: string\r\n from_prefix: string\r\n to_prefix: string\r\n}\r\n\r\nexport interface StorageFileMutationResponse {\r\n file: ManagedFileRecord\r\n}\r\n\r\nexport interface StorageFolderMutationResponse {\r\n s3_id: string\r\n prefix: string\r\n processed_files: number\r\n}\r\n\r\nexport interface StorageFileMutationManyResponse {\r\n files: ManagedFileRecord[]\r\n count: number\r\n}\r\n\r\nexport interface StorageFilePermissionRecord {\r\n id: string\r\n file_id: string\r\n principal_type: 'user' | 'organization' | 'team' | 'role'\r\n principal_id: string\r\n permission: 'read' | 'write' | 'delete' | 'share' | 'owner'\r\n granted_by_user_id?: string | null\r\n created_at: string\r\n expires_at?: string | null\r\n revoked_at?: string | null\r\n metadata: Record<string, unknown>\r\n}\r\n\r\nexport interface StoragePermissionListResponse {\r\n permissions: StorageFilePermissionRecord[]\r\n count: number\r\n}\r\n\r\nexport interface StoragePermissionCheckResponse {\r\n allowed: boolean\r\n permission: string\r\n}\r\n\r\nexport interface StorageAuditEventRecord {\r\n id: string\r\n operation: string\r\n file_id?: string | null\r\n s3_id?: string | null\r\n bucket?: string | null\r\n storage_key?: string | null\r\n actor_user_id?: string | null\r\n organization_id?: string | null\r\n status: 'success' | 'error'\r\n error?: string | null\r\n metadata: Record<string, unknown>\r\n created_at: string\r\n}\r\n\r\nexport interface StorageAuditListResponse {\r\n events: StorageAuditEventRecord[]\r\n count: number\r\n}\r\n\r\nexport interface ConfirmStorageUploadRequest {\r\n size_bytes?: number\r\n content_type?: string\r\n checksum_sha256?: string\r\n metadata?: Record<string, unknown>\r\n}\r\n\r\nexport interface SearchStorageFilesRequest {\n query?: string\n limit?: number\n offset?: number\n s3_id?: string\n prefix?: string\n metadata?: Record<string, unknown>\n name?: string\n resource_id?: string\n mime_type?: string\n content_type?: string\n status?: string\n visibility?: 'private' | 'organization' | 'public' | (string & {})\n bucket?: string\n key_prefix?: string\n}\n\r\nexport interface DeleteManyStorageFilesRequest {\r\n file_ids: string[]\r\n}\r\n\r\nexport interface UpdateManyStorageFilesRequest {\n file_ids: string[]\n storage_key?: string\n bucket?: string\n name?: string\n file_name?: string\n original_name?: string\n resource_id?: string\n mime_type?: string\n content_type?: string\n size_bytes?: number\n checksum_sha256?: string\n visibility?: 'private' | 'organization' | 'public' | (string & {})\n status?: string\n metadata?: Record<string, unknown>\n}\n\r\nexport interface SetManyStorageFileVisibilityRequest {\r\n file_ids: string[]\r\n public?: boolean\r\n visibility?: 'private' | 'organization' | 'public'\r\n}\r\n\r\nexport interface CopyStorageFileRequest extends StorageServerSideEncryptionOptions {\n storage_key: string\n bucket?: string\n file_name?: string\r\n visibility?: 'private' | 'organization' | 'public'\r\n metadata?: Record<string, unknown>\r\n}\r\n\r\nexport interface ListStorageFoldersRequest {\r\n s3_id: string\r\n prefix: string\r\n}\r\n\r\nexport interface TreeStorageFoldersRequest {\r\n s3_id: string\r\n prefix: string\r\n}\r\n\r\nexport interface StoragePermissionListRequest {\r\n file_id: string\r\n}\r\n\r\nexport interface StoragePermissionGrantRequest {\r\n file_id: string\r\n principal_type: 'user' | 'organization' | 'team' | 'role'\r\n principal_id: string\r\n permission: 'read' | 'write' | 'delete' | 'share' | 'owner'\r\n expires_at?: string\r\n metadata?: Record<string, unknown>\r\n}\r\n\r\nexport interface StoragePermissionRevokeRequest {\r\n file_id: string\r\n principal_type: 'user' | 'organization' | 'team' | 'role'\r\n principal_id: string\r\n permission: 'read' | 'write' | 'delete' | 'share' | 'owner'\r\n}\r\n\r\nexport interface StoragePermissionCheckRequest {\r\n file_id: string\r\n permission: 'read' | 'write' | 'delete' | 'share' | 'owner'\r\n}\r\n\r\nexport interface StorageMultipartCreateRequest extends StorageServerSideEncryptionOptions {\n file_id: string\n content_type?: string\n}\n\r\nexport interface StorageMultipartSignPartRequest {\r\n file_id: string\r\n upload_id: string\r\n part_number: number\r\n}\r\n\r\nexport interface StorageMultipartCompletePartInput {\r\n part_number: number\r\n etag: string\r\n}\r\n\r\nexport interface StorageMultipartCompleteRequest {\r\n file_id: string\r\n upload_id: string\r\n parts: StorageMultipartCompletePartInput[]\r\n}\r\n\r\nexport interface StorageMultipartAbortRequest {\r\n file_id: string\r\n upload_id: string\r\n}\r\n\r\nexport interface StorageMultipartListPartsRequest {\r\n file_id: string\r\n upload_id: string\r\n}\r\n\r\nexport interface StorageObjectFolderCreateRequest {\r\n endpoint: string\r\n region: string\r\n access_key_id: string\r\n secret_key: string\r\n bucket: string\r\n prefix: string\r\n}\r\n\r\nexport type StorageObjectFolderDeleteRequest = StorageObjectFolderCreateRequest\r\n\r\nexport interface StorageObjectFolderRenameRequest extends Omit<StorageObjectFolderCreateRequest, 'prefix'> {\r\n from_prefix: string\r\n to_prefix: string\r\n}\r\n\r\nexport interface StorageObjectBaseRequest {\r\n endpoint: string\r\n region: string\r\n access_key_id: string\r\n secret_key: string\r\n bucket: string\r\n}\r\n\r\nexport interface StorageObjectRequest extends StorageObjectBaseRequest {\n key: string\n}\n\nexport interface StorageObjectValidateRequest extends StorageObjectRequest {\n checksum_sha256?: string\n etag?: string\n}\n\nexport interface StorageObjectCopyRequest extends StorageObjectBaseRequest, StorageServerSideEncryptionOptions {\n source_key: string\n destination_key: string\n destination_bucket?: string\n}\n\r\nexport interface StorageObjectPublicUrlRequest extends StorageObjectRequest {\r\n public_base_url?: string\r\n force_path_style?: boolean\r\n}\r\n\r\nexport interface StorageListObjectsRequest extends StorageObjectBaseRequest {\r\n prefix?: string\r\n delimiter?: string\r\n continuation_token?: string\r\n max_keys?: number\r\n}\r\n\r\nexport interface StorageUpdateObjectRequest extends StorageObjectRequest {\r\n acl?: string\r\n content_type?: string\r\n cache_control?: string\r\n content_disposition?: string\r\n content_encoding?: string\r\n content_language?: string\r\n metadata?: Record<string, string>\r\n}\r\n\r\nexport interface StorageObjectVersionListRequest extends StorageObjectBaseRequest {\n key?: string\n max_keys?: number\n key_marker?: string\n version_id_marker?: string\n delimiter?: string\n}\n\nexport interface StorageObjectVersionMutationRequest extends StorageObjectRequest {\n version_id: string\n}\n\nexport interface StorageSignedPostPolicyRequest extends StorageObjectRequest, StorageServerSideEncryptionOptions {\n content_type?: string\n min_size?: number\n max_size?: number\n expires_in?: number\n public_base_url?: string\n force_path_style?: boolean\n success_action_status?: string\n}\n\nexport interface StoragePresignUploadRequest extends StorageObjectRequest, StorageServerSideEncryptionOptions {\n content_type?: string\n}\n\r\nexport type StorageBucketCorsRequest = StorageObjectBaseRequest\r\n\r\nexport interface StorageBucketCorsRuleInput {\r\n allowed_origins: string[]\r\n allowed_methods: string[]\r\n allowed_headers?: string[]\r\n expose_headers?: string[]\r\n max_age_seconds?: number\r\n}\r\n\r\nexport interface StorageSetBucketCorsRequest extends StorageBucketCorsRequest {\n rules: StorageBucketCorsRuleInput[]\n}\n\nexport type StorageBucketLifecycleRequest = StorageObjectBaseRequest\n\nexport interface StorageBucketLifecycleRuleInput {\n id?: string\n prefix?: string\n status?: 'Enabled' | 'Disabled' | 'enabled' | 'disabled' | (string & {})\n expiration_days?: number\n expired_object_delete_marker?: boolean\n noncurrent_version_expiration_days?: number\n abort_incomplete_multipart_upload_days?: number\n}\n\nexport interface StorageSetBucketLifecycleRequest extends StorageBucketLifecycleRequest {\n rules: StorageBucketLifecycleRuleInput[]\n}\n\nexport type StorageBucketPolicyRequest = StorageObjectBaseRequest\n\nexport interface StorageSetBucketPolicyRequest extends StorageBucketPolicyRequest {\n policy: Record<string, unknown> | string\n}\n\nexport type StoragePublicAccessBlockRequest = StorageObjectBaseRequest\n\nexport interface StorageSetPublicAccessBlockRequest extends StoragePublicAccessBlockRequest {\n block_public_acls?: boolean\n ignore_public_acls?: boolean\n block_public_policy?: boolean\n restrict_public_buckets?: boolean\n}\n\nexport interface StorageFileVersionPathRequest {\n file_id: string\n version_id: string\n}\n\nexport interface StorageFileRetentionRequest {\n mode?: 'GOVERNANCE' | 'COMPLIANCE' | (string & {})\n retain_until?: string\n retain_until_date?: string\n version_id?: string\n bypass_governance?: boolean\n}\n\nexport interface StorageAuditQueryRequest {\n file_id?: string\n limit?: number\n offset?: number\r\n}\r\n\r\nexport interface AthenaEnvelope<T> {\r\n status: string\r\n message: string\r\n data: T\r\n}\r\n\r\nexport type StorageFileAccessPurpose = 'read' | 'download' | 'stream'\r\n\r\nexport interface GetStorageFileUrlQuery {\r\n purpose?: StorageFileAccessPurpose | (string & {})\r\n}\r\n\r\nexport type AthenaStorageErrorHandler = (error: AthenaStorageError) => void | Promise<void>\r\n\r\nexport interface AthenaStorageClientConfig extends AthenaStorageFileConfig {\r\n onError?: AthenaStorageErrorHandler\r\n}\r\n\r\nexport interface AthenaStorageCallOptions extends AthenaGatewayCallOptions {\r\n signal?: AbortSignal\r\n onError?: AthenaStorageErrorHandler\r\n}\r\n\r\nexport type AthenaStorageBinaryCallOptions = AthenaStorageCallOptions\r\n\r\nexport type AthenaStorageErrorCode =\r\n | 'INVALID_URL'\r\n | 'NETWORK_ERROR'\r\n | 'HTTP_ERROR'\r\n | 'INVALID_JSON'\r\n | 'INVALID_ATHENA_ENVELOPE'\r\n | 'UNKNOWN_ERROR'\r\n\r\nexport const AthenaStorageErrorCode = {\r\n InvalidUrl: 'INVALID_URL',\r\n NetworkError: 'NETWORK_ERROR',\r\n HttpError: 'HTTP_ERROR',\r\n InvalidJson: 'INVALID_JSON',\r\n InvalidAthenaEnvelope: 'INVALID_ATHENA_ENVELOPE',\r\n UnknownError: 'UNKNOWN_ERROR',\r\n} as const satisfies Record<string, AthenaStorageErrorCode>\r\n\r\nexport interface AthenaStorageErrorDetails {\r\n code: AthenaStorageErrorCode\r\n athenaCode: AthenaErrorCode\r\n kind: AthenaErrorKind\r\n category: AthenaErrorCategory\r\n retryable: boolean\r\n message: string\r\n status: number\r\n endpoint: AthenaGatewayEndpointPath\r\n method: AthenaGatewayMethod\r\n requestId?: string\r\n hint?: string\r\n cause?: string\r\n raw: unknown\r\n}\r\n\r\nexport interface AthenaStorageErrorInput {\r\n code: AthenaStorageErrorCode\r\n message: string\r\n status: number\r\n endpoint: AthenaGatewayEndpointPath\r\n method: AthenaGatewayMethod\r\n raw?: unknown\r\n requestId?: string\r\n hint?: string\r\n cause?: unknown\r\n}\r\n\r\nexport class AthenaStorageError extends Error {\r\n readonly code: AthenaStorageErrorCode\r\n readonly athenaCode: AthenaErrorCode\r\n readonly kind: AthenaErrorKind\r\n readonly category: AthenaErrorCategory\r\n readonly retryable: boolean\r\n readonly status: number\r\n readonly endpoint: AthenaGatewayEndpointPath\r\n readonly method: AthenaGatewayMethod\r\n readonly requestId?: string\r\n readonly hint?: string\r\n readonly causeDetail?: string\r\n readonly raw: unknown\r\n readonly normalized: NormalizedAthenaError\r\n readonly __athenaNormalizedError: NormalizedAthenaError\r\n\r\n constructor(input: AthenaStorageErrorInput) {\r\n super(input.message, { cause: input.cause })\r\n this.name = 'AthenaStorageError'\r\n this.code = input.code\r\n this.status = input.status\r\n this.endpoint = input.endpoint\r\n this.method = input.method\r\n this.requestId = input.requestId\r\n this.hint = input.hint\r\n this.causeDetail = causeToString(input.cause)\r\n this.raw = input.raw ?? null\r\n this.normalized = normalizeStorageErrorInput(input)\r\n this.__athenaNormalizedError = this.normalized\r\n this.athenaCode = this.normalized.code\r\n this.kind = this.normalized.kind\r\n this.category = this.normalized.category\r\n this.retryable = this.normalized.retryable\r\n Object.defineProperty(this, '__athenaNormalizedError', {\r\n value: this.normalized,\r\n enumerable: false,\r\n configurable: false,\r\n writable: false,\r\n })\r\n }\r\n\r\n toDetails(): AthenaStorageErrorDetails {\r\n return {\r\n code: this.code,\r\n athenaCode: this.athenaCode,\r\n kind: this.kind,\r\n category: this.category,\r\n retryable: this.retryable,\r\n message: this.message,\r\n status: this.status,\r\n endpoint: this.endpoint,\r\n method: this.method,\r\n requestId: this.requestId,\r\n hint: this.hint,\r\n cause: this.causeDetail,\r\n raw: this.raw,\r\n }\r\n }\r\n}\r\n\r\nexport interface AthenaStorageBaseModule {\r\n listStorageCatalogs(options?: AthenaStorageCallOptions): Promise<{ data: S3CatalogItem[] }>\r\n createStorageCatalog(\r\n input: CreateStorageCatalogRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<S3CatalogItem>\r\n updateStorageCatalog(\r\n id: string,\r\n input: UpdateStorageCatalogRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<S3CatalogItem>\r\n deleteStorageCatalog(\r\n id: string,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<{ id: string; deleted: boolean }>\r\n listStorageCredentials(options?: AthenaStorageCallOptions): Promise<{ data: S3CredentialListItem[] }>\r\n createStorageUploadUrl(\r\n input: CreateStorageUploadUrlRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageUploadUrlResponse>\r\n createStorageUploadUrls(\r\n input: CreateStorageUploadUrlsRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageBatchUploadUrlResponse>\r\n listStorageFiles(\r\n input: ListStorageFilesRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageListFilesResponse>\r\n getStorageFile(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\r\n getStorageFileUrl(\r\n fileId: string,\r\n query?: GetStorageFileUrlQuery,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<PresignedFileUrlResponse>\r\n getStorageFileProxy(\r\n fileId: string,\r\n query?: GetStorageFileUrlQuery,\r\n options?: AthenaStorageBinaryCallOptions,\r\n ): Promise<Response>\r\n updateStorageFile(\r\n fileId: string,\r\n input: UpdateStorageFileRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageFileMutationResponse>\r\n deleteStorageFile(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\r\n setStorageFileVisibility(\r\n fileId: string,\r\n input: SetStorageFileVisibilityRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageFileMutationResponse>\r\n deleteStorageFolder(\r\n input: DeleteStorageFolderRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageFolderMutationResponse>\r\n moveStorageFolder(\r\n input: MoveStorageFolderRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageFolderMutationResponse>\r\n}\r\n\r\nexport type AthenaStoragePutBody =\r\n | Blob\r\n | ArrayBuffer\r\n | Uint8Array\r\n | ReadableStream<Uint8Array>\r\n\r\nexport interface AthenaStoragePutOptions {\r\n headers?: Record<string, string>\r\n signal?: AbortSignal\r\n}\r\n\r\nexport interface AthenaStorageManagedUpload extends PresignedFileUrlResponse {\r\n method: 'PUT'\r\n headers: Record<string, string>\r\n expiresAt: string\r\n put(body: AthenaStoragePutBody, options?: AthenaStoragePutOptions): Promise<Response>\r\n}\r\n\r\nexport interface StorageUploadUrlResponseWithPut extends Omit<StorageUploadUrlResponse, 'upload'> {\r\n upload: AthenaStorageManagedUpload\r\n}\r\n\r\nexport interface StorageBatchUploadUrlResponseWithPut {\r\n files: StorageUploadUrlResponseWithPut[]\r\n}\r\n\r\nexport interface AthenaStorageFileUploadRequest extends StorageServerSideEncryptionOptions {\n s3_id?: string\r\n s3Id?: string\r\n bucket?: string\r\n storage_key?: string\r\n storageKey?: string\r\n name?: string\r\n fileName?: string\r\n original_name?: string\r\n originalName?: string\r\n resource_id?: string\r\n resourceId?: string\r\n mime_type?: string\r\n mimeType?: string\r\n content_type?: string\r\n contentType?: string\r\n size_bytes?: number\r\n sizeBytes?: number\r\n file_id?: string\r\n fileId?: string\r\n public?: boolean\r\n visibility?: 'private' | 'organization' | 'public'\r\n metadata?: Record<string, unknown>\r\n}\r\n\r\nexport interface AthenaStorageFileUploadManyRequest {\r\n files: AthenaStorageFileUploadRequest[]\r\n}\r\n\r\nexport interface AthenaStorageFileNamespace extends AthenaStorageFileModule {\r\n upload(\r\n input: AthenaStorageFileUploadRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageUploadUrlResponseWithPut>\r\n upload(\r\n input: Parameters<AthenaStorageFileModule['upload']>[0],\r\n options?: AthenaStorageCallOptions,\r\n ): ReturnType<AthenaStorageFileModule['upload']>\r\n uploadMany(\r\n input: AthenaStorageFileUploadManyRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageBatchUploadUrlResponseWithPut>\r\n confirmUpload(\r\n fileId: string,\r\n input?: ConfirmStorageUploadRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageFileMutationResponse>\r\n uploadBinary(\r\n fileId: string,\r\n body: AthenaStoragePutBody,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageFileMutationResponse>\r\n search(\r\n input: SearchStorageFilesRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageListFilesResponse>\r\n get(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\r\n update(\r\n fileId: string,\r\n input: UpdateStorageFileRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageFileMutationResponse>\r\n deleteMany(\r\n input: DeleteManyStorageFilesRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageFileMutationManyResponse>\r\n updateMany(\r\n input: UpdateManyStorageFilesRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageFileMutationManyResponse>\r\n restore(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\r\n purge(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\r\n copy(\r\n fileId: string,\r\n input: CopyStorageFileRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageFileMutationResponse>\r\n url(\r\n fileId: string,\r\n query?: GetStorageFileUrlQuery,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<PresignedFileUrlResponse>\r\n publicUrl(fileId: string, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n proxyUrl(\n fileId: string,\n query?: GetStorageFileUrlQuery,\n options?: AthenaStorageCallOptions,\n ): Promise<Record<string, unknown>>\n proxy(\n fileId: string,\n query?: GetStorageFileUrlQuery,\n options?: AthenaStorageBinaryCallOptions,\n ): Promise<Response>\n versions(fileId: string, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n restoreVersion(\n fileId: string,\n versionId: string,\n options?: AthenaStorageCallOptions,\n ): Promise<Record<string, unknown>>\n deleteVersion(\n fileId: string,\n versionId: string,\n options?: AthenaStorageCallOptions,\n ): Promise<Record<string, unknown>>\n retention: {\n get(\n fileId: string,\n query?: Pick<StorageFileRetentionRequest, 'version_id'>,\n options?: AthenaStorageCallOptions,\n ): Promise<Record<string, unknown>>\n set(\n fileId: string,\n input: StorageFileRetentionRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<Record<string, unknown>>\n }\n visibility: {\n update(\n fileId: string,\n input: SetStorageFileVisibilityRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageFileMutationResponse>\n set(\n fileId: string,\n input: SetStorageFileVisibilityRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageFileMutationResponse>\n setMany(\r\n input: SetManyStorageFileVisibilityRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageFileMutationManyResponse>\r\n }\r\n}\r\n\r\nexport interface AthenaStorageCredentialsNamespace {\r\n list(options?: AthenaStorageCallOptions): Promise<{ data: S3CredentialListItem[] }>\r\n}\r\n\r\nexport interface AthenaStorageCatalogNamespace {\r\n list(options?: AthenaStorageCallOptions): Promise<{ data: S3CatalogItem[] }>\r\n create(input: CreateStorageCatalogRequest, options?: AthenaStorageCallOptions): Promise<S3CatalogItem>\r\n update(id: string, input: UpdateStorageCatalogRequest, options?: AthenaStorageCallOptions): Promise<S3CatalogItem>\r\n delete(id: string, options?: AthenaStorageCallOptions): Promise<{ id: string; deleted: boolean }>\r\n}\r\n\r\nexport interface AthenaStorageFolderNamespace {\r\n list(input: ListStorageFoldersRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\r\n tree(input: TreeStorageFoldersRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\r\n delete(input: DeleteStorageFolderRequest, options?: AthenaStorageCallOptions): Promise<StorageFolderMutationResponse>\r\n move(input: MoveStorageFolderRequest, options?: AthenaStorageCallOptions): Promise<StorageFolderMutationResponse>\r\n}\r\n\r\nexport interface AthenaStoragePermissionNamespace {\r\n list(input: StoragePermissionListRequest, options?: AthenaStorageCallOptions): Promise<StoragePermissionListResponse>\r\n grant(input: StoragePermissionGrantRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\r\n revoke(input: StoragePermissionRevokeRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\r\n check(input: StoragePermissionCheckRequest, options?: AthenaStorageCallOptions): Promise<StoragePermissionCheckResponse>\r\n}\r\n\r\nexport interface AthenaStorageObjectFolderNamespace {\r\n create(input: StorageObjectFolderCreateRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\r\n delete(input: StorageObjectFolderDeleteRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\r\n rename(input: StorageObjectFolderRenameRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\r\n}\r\n\r\nexport interface AthenaStorageObjectNamespace {\n list(input: StorageListObjectsRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n head(input: StorageObjectRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n exists(input: StorageObjectRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n validate(input: StorageObjectValidateRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n update(input: StorageUpdateObjectRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n copy(input: StorageObjectCopyRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n url(input: StorageObjectRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n publicUrl(input: StorageObjectPublicUrlRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n delete(input: StorageObjectRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n uploadUrl(input: StoragePresignUploadRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n versions(input: StorageObjectVersionListRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n restoreVersion(\n input: StorageObjectVersionMutationRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<Record<string, unknown>>\n deleteVersion(\n input: StorageObjectVersionMutationRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<Record<string, unknown>>\n postPolicy(input: StorageSignedPostPolicyRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n folder: AthenaStorageObjectFolderNamespace\n}\n\r\nexport interface AthenaStorageBucketCorsNamespace {\r\n get(input: StorageBucketCorsRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\r\n set(input: StorageSetBucketCorsRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\r\n delete(input: StorageBucketCorsRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\r\n}\r\n\r\nexport interface AthenaStorageBucketNamespace {\n list(input: Omit<StorageObjectBaseRequest, 'bucket'>, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n create(input: StorageObjectBaseRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n delete(input: StorageObjectBaseRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n lifecycle: {\n get(input: StorageBucketLifecycleRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n set(input: StorageSetBucketLifecycleRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n delete(input: StorageBucketLifecycleRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n }\n policy: {\n get(input: StorageBucketPolicyRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n set(input: StorageSetBucketPolicyRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n delete(input: StorageBucketPolicyRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n }\n publicAccess: {\n get(input: StoragePublicAccessBlockRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n set(input: StorageSetPublicAccessBlockRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n delete(input: StoragePublicAccessBlockRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n }\n cors: AthenaStorageBucketCorsNamespace\n}\n\r\nexport interface AthenaStorageMultipartNamespace {\r\n create(input: StorageMultipartCreateRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\r\n signPart(input: StorageMultipartSignPartRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\r\n complete(input: StorageMultipartCompleteRequest, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\r\n abort(input: StorageMultipartAbortRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\r\n listParts(input: StorageMultipartListPartsRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\r\n}\r\n\r\nexport interface AthenaStorageAuditNamespace {\r\n list(input: StorageAuditQueryRequest, options?: AthenaStorageCallOptions): Promise<StorageAuditListResponse>\r\n}\r\n\r\nexport interface AthenaStorageModule extends AthenaStorageBaseModule {\r\n credentials: AthenaStorageCredentialsNamespace\r\n catalog: AthenaStorageCatalogNamespace\r\n file: AthenaStorageFileNamespace\r\n folder: AthenaStorageFolderNamespace\r\n permission: AthenaStoragePermissionNamespace\r\n object: AthenaStorageObjectNamespace\r\n bucket: AthenaStorageBucketNamespace\r\n multipart: AthenaStorageMultipartNamespace\r\n audit: AthenaStorageAuditNamespace\r\n delete: AthenaStorageFileModule['delete']\r\n}\r\n\r\ntype StorageEnvelopeKind = 'raw' | 'athena'\r\n\r\ninterface StorageModuleRuntimeOptions {\r\n baseUrl?: string\r\n onError?: AthenaStorageErrorHandler\r\n stripBasePath?: boolean\r\n}\r\n\r\nfunction isRecord(value: unknown): value is Record<string, unknown> {\r\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\r\n}\r\n\r\nfunction causeToString(cause: unknown): string | undefined {\r\n if (cause === undefined || cause === null) return undefined\r\n if (typeof cause === 'string') return cause\r\n if (cause instanceof Error && cause.message.trim()) return cause.message.trim()\r\n try {\r\n return JSON.stringify(cause)\r\n } catch {\r\n return String(cause)\r\n }\r\n}\r\n\r\nfunction storageGatewayCode(code: AthenaStorageErrorCode): AthenaGatewayErrorCode {\r\n if (code === 'INVALID_URL') return 'INVALID_URL'\r\n if (code === 'NETWORK_ERROR') return 'NETWORK_ERROR'\r\n if (code === 'INVALID_JSON' || code === 'INVALID_ATHENA_ENVELOPE') return 'INVALID_JSON'\r\n if (code === 'HTTP_ERROR') return 'HTTP_ERROR'\r\n return 'UNKNOWN_ERROR'\r\n}\r\n\r\nfunction headerValue(headers: Headers, names: readonly string[]): string | undefined {\r\n for (const name of names) {\r\n const value = headers.get(name)\r\n if (value?.trim()) return value.trim()\r\n }\r\n return undefined\r\n}\r\n\r\nfunction storageOperationFromEndpoint(\r\n endpoint: AthenaGatewayEndpointPath,\r\n method: AthenaGatewayMethod,\r\n): string {\r\n const endpointPath = String(endpoint).split('?')[0]\r\n for (const candidate of storageSdkManifest.methods) {\r\n if (candidate.method !== method) continue\r\n const pattern = `^${candidate.path.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&').replace(/\\\\\\{[^/]+\\\\\\}/g, '[^/]+')}$`\r\n if (new RegExp(pattern).test(endpointPath)) {\r\n return candidate.name\r\n }\r\n }\r\n return `storage:${method.toLowerCase()}`\r\n}\r\n\r\nfunction normalizeStorageErrorInput(input: AthenaStorageErrorInput): NormalizedAthenaError {\r\n return normalizeAthenaError(\r\n {\r\n data: null,\r\n error: {\r\n message: input.message,\r\n gatewayCode: storageGatewayCode(input.code),\r\n status: input.status,\r\n raw: input.raw ?? input.cause ?? null,\r\n },\r\n errorDetails: {\r\n code: storageGatewayCode(input.code),\r\n message: input.message,\r\n status: input.status,\r\n endpoint: input.endpoint,\r\n method: input.method,\r\n requestId: input.requestId,\r\n hint: input.hint,\r\n cause: causeToString(input.cause),\r\n },\r\n raw: input.raw ?? input.cause ?? null,\r\n status: input.status,\r\n },\r\n { operation: storageOperationFromEndpoint(input.endpoint, input.method) },\r\n )\r\n}\r\n\r\nexport function createAthenaStorageError(input: AthenaStorageErrorInput): AthenaStorageError {\r\n return new AthenaStorageError(input)\r\n}\r\n\r\nasync function notifyStorageError(\r\n error: AthenaStorageError,\r\n options: AthenaStorageCallOptions | undefined,\r\n runtimeOptions: StorageModuleRuntimeOptions | undefined,\r\n): Promise<void> {\r\n const handlers = [runtimeOptions?.onError, options?.onError].filter(\r\n (handler): handler is AthenaStorageErrorHandler => typeof handler === 'function',\r\n )\r\n for (const handler of handlers) {\r\n try {\r\n await handler(error)\r\n } catch {\r\n // Error observers must not mask the original storage failure.\r\n }\r\n }\r\n}\r\n\r\nasync function rejectStorageError(\r\n input: AthenaStorageErrorInput,\r\n options: AthenaStorageCallOptions | undefined,\r\n runtimeOptions: StorageModuleRuntimeOptions | undefined,\r\n): Promise<never> {\r\n const error = createAthenaStorageError(input)\r\n await notifyStorageError(error, options, runtimeOptions)\r\n throw error\r\n}\r\n\r\nfunction parseResponseBody(rawText: string, contentType: string | null) {\r\n if (!rawText) {\r\n return { parsed: null as unknown, parseFailed: false }\r\n }\r\n\r\n const contentTypeSuggestsJson =\r\n contentType?.toLowerCase().includes('application/json') ?? false\r\n const looksJson =\r\n contentTypeSuggestsJson || rawText.startsWith('{') || rawText.startsWith('[')\r\n\r\n if (!looksJson) {\r\n return { parsed: rawText as unknown, parseFailed: false }\r\n }\r\n\r\n try {\r\n return { parsed: JSON.parse(rawText) as unknown, parseFailed: false }\r\n } catch {\r\n return { parsed: rawText as unknown, parseFailed: true }\r\n }\r\n}\r\n\r\nfunction appendQuery(path: string, query?: object): string {\r\n if (!query) return path\r\n const params = new URLSearchParams()\r\n for (const [key, value] of Object.entries(query)) {\r\n if (value === undefined || value === null) continue\r\n params.set(key, String(value))\r\n }\r\n const queryText = params.toString()\r\n return queryText ? `${path}?${queryText}` : path\r\n}\r\n\r\nfunction storagePath(path: string): AthenaGatewayEndpointPath {\r\n return path as AthenaGatewayEndpointPath\r\n}\r\n\r\nfunction resolveStorageEndpointPath(\r\n endpoint: AthenaGatewayEndpointPath,\r\n runtimeOptions?: StorageModuleRuntimeOptions,\r\n): AthenaGatewayEndpointPath {\r\n if (!runtimeOptions?.stripBasePath) {\r\n return endpoint\r\n }\r\n\r\n const [pathname, queryText] = String(endpoint).split('?', 2)\r\n const trimmedPathname = pathname.startsWith('/storage/')\r\n ? pathname.slice('/storage'.length)\r\n : pathname === '/storage'\r\n ? '/'\r\n : pathname\r\n const resolvedPath = trimmedPathname.startsWith('/') ? trimmedPathname : `/${trimmedPathname}`\r\n return storagePath(queryText ? `${resolvedPath}?${queryText}` : resolvedPath)\r\n}\r\n\r\nfunction withPathParam(path: string, name: string, value: string): string {\r\n return path.replace(`{${name}}`, encodeURIComponent(value))\r\n}\r\n\r\nfunction resolveErrorMessage(payload: unknown, fallback: string): string {\r\n if (isRecord(payload)) {\r\n const message = payload.message ?? payload.error ?? payload.details\r\n if (typeof message === 'string' && message.trim()) {\r\n return message.trim()\r\n }\r\n }\r\n if (typeof payload === 'string' && payload.trim()) {\r\n return payload.trim()\r\n }\r\n return fallback\r\n}\r\n\r\nfunction resolveErrorHint(payload: unknown): string | undefined {\r\n if (!isRecord(payload)) return undefined\r\n const hint = payload.hint ?? payload.suggestion\r\n return typeof hint === 'string' && hint.trim() ? hint.trim() : undefined\r\n}\r\n\r\nfunction resolveErrorCause(payload: unknown): string | undefined {\r\n if (!isRecord(payload)) return undefined\r\n const cause = payload.cause ?? payload.reason\r\n return typeof cause === 'string' && cause.trim() ? cause.trim() : undefined\r\n}\r\n\r\nfunction storageCodeFromUnknown(error: unknown): AthenaStorageErrorCode {\r\n if (isAthenaGatewayError(error)) {\r\n if (error.code === 'INVALID_URL') return 'INVALID_URL'\r\n if (error.code === 'NETWORK_ERROR') return 'NETWORK_ERROR'\r\n if (error.code === 'INVALID_JSON') return 'INVALID_JSON'\r\n if (error.code === 'HTTP_ERROR') return 'HTTP_ERROR'\r\n }\r\n return 'UNKNOWN_ERROR'\r\n}\r\n\r\nasync function callStorageEndpoint<T>(\r\n gateway: AthenaGatewayClient,\r\n endpoint: AthenaGatewayEndpointPath,\r\n method: AthenaGatewayMethod,\r\n envelope: StorageEnvelopeKind,\r\n payload?: unknown,\r\n options?: AthenaStorageCallOptions,\r\n runtimeOptions?: StorageModuleRuntimeOptions,\r\n): Promise<T> {\r\n let url: string\r\n let headers: Record<string, string>\r\n try {\r\n const baseUrl = options?.baseUrl\r\n ? normalizeAthenaGatewayBaseUrl(options.baseUrl)\r\n : runtimeOptions?.baseUrl\r\n ? normalizeAthenaGatewayBaseUrl(runtimeOptions.baseUrl)\r\n : gateway.baseUrl\r\n url = buildAthenaGatewayUrl(baseUrl, resolveStorageEndpointPath(endpoint, runtimeOptions))\r\n headers = gateway.buildHeaders(options)\r\n } catch (error) {\r\n return rejectStorageError(\r\n {\r\n code: storageCodeFromUnknown(error),\r\n message: error instanceof Error\r\n ? error.message\r\n : `Athena storage ${method} ${endpoint} failed before sending the request`,\r\n status: isAthenaGatewayError(error) ? error.status : 0,\r\n endpoint,\r\n method,\r\n raw: error,\r\n requestId: isAthenaGatewayError(error) ? error.requestId : undefined,\r\n hint: isAthenaGatewayError(error) ? error.hint : undefined,\r\n cause: error,\r\n },\r\n options,\r\n runtimeOptions,\r\n )\r\n }\r\n const requestInit: RequestInit = {\r\n method,\r\n headers,\r\n signal: options?.signal,\r\n }\r\n if (payload !== undefined && method !== 'GET') {\r\n requestInit.body = JSON.stringify(payload)\r\n }\r\n\r\n let response: Response\r\n try {\r\n response = await fetch(url, requestInit)\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : String(error)\r\n return rejectStorageError(\r\n {\r\n code: 'NETWORK_ERROR',\r\n message: `Network error while calling Athena storage ${method} ${endpoint}: ${message}`,\r\n status: 0,\r\n endpoint,\r\n method,\r\n cause: error,\r\n },\r\n options,\r\n runtimeOptions,\r\n )\r\n }\r\n\r\n let rawText: string\r\n try {\r\n rawText = await response.text()\r\n } catch (error) {\r\n return rejectStorageError(\r\n {\r\n code: 'NETWORK_ERROR',\r\n message: `Athena storage ${method} ${endpoint} response body could not be read`,\r\n status: response.status,\r\n endpoint,\r\n method,\r\n requestId: headerValue(response.headers, ['x-athena-request-id', 'x-request-id', 'request-id']),\r\n cause: error,\r\n },\r\n options,\r\n runtimeOptions,\r\n )\r\n }\r\n const parsedBody = parseResponseBody(rawText ?? '', response.headers.get('content-type'))\r\n const requestId = headerValue(response.headers, ['x-athena-request-id', 'x-request-id', 'request-id'])\r\n if (parsedBody.parseFailed) {\r\n return rejectStorageError(\r\n {\r\n code: 'INVALID_JSON',\r\n message: `Athena storage ${method} ${endpoint} returned malformed JSON`,\r\n status: response.status,\r\n endpoint,\r\n method,\r\n requestId,\r\n raw: parsedBody.parsed,\r\n },\r\n options,\r\n runtimeOptions,\r\n )\r\n }\r\n\r\n if (!response.ok) {\r\n return rejectStorageError(\r\n {\r\n code: 'HTTP_ERROR',\r\n message: resolveErrorMessage(\r\n parsedBody.parsed,\r\n `Athena storage ${method} ${endpoint} failed with status ${response.status}`,\r\n ),\r\n status: response.status,\r\n endpoint,\r\n method,\r\n requestId,\r\n hint: resolveErrorHint(parsedBody.parsed),\r\n cause: resolveErrorCause(parsedBody.parsed),\r\n raw: parsedBody.parsed,\r\n },\r\n options,\r\n runtimeOptions,\r\n )\r\n }\r\n\r\n if (envelope === 'athena') {\r\n if (!isRecord(parsedBody.parsed) || !('data' in parsedBody.parsed)) {\r\n return rejectStorageError(\r\n {\r\n code: 'INVALID_ATHENA_ENVELOPE',\r\n message: `Athena storage ${method} ${endpoint} returned an invalid Athena envelope`,\r\n status: response.status,\r\n endpoint,\r\n method,\r\n requestId,\r\n raw: parsedBody.parsed,\r\n },\r\n options,\r\n runtimeOptions,\r\n )\r\n }\r\n return parsedBody.parsed.data as T\r\n }\r\n\r\n return parsedBody.parsed as T\r\n}\r\n\r\nasync function callStorageBinaryEndpoint(\r\n gateway: AthenaGatewayClient,\r\n endpoint: AthenaGatewayEndpointPath,\r\n method: AthenaGatewayMethod,\r\n options?: AthenaStorageBinaryCallOptions,\r\n runtimeOptions?: StorageModuleRuntimeOptions,\r\n): Promise<Response> {\r\n let url: string\r\n let headers: Record<string, string>\r\n try {\r\n const baseUrl = options?.baseUrl\r\n ? normalizeAthenaGatewayBaseUrl(options.baseUrl)\r\n : runtimeOptions?.baseUrl\r\n ? normalizeAthenaGatewayBaseUrl(runtimeOptions.baseUrl)\r\n : gateway.baseUrl\r\n url = buildAthenaGatewayUrl(baseUrl, resolveStorageEndpointPath(endpoint, runtimeOptions))\r\n headers = gateway.buildHeaders(options)\r\n } catch (error) {\r\n return rejectStorageError(\r\n {\r\n code: storageCodeFromUnknown(error),\r\n message: error instanceof Error\r\n ? error.message\r\n : `Athena storage ${method} ${endpoint} failed before sending the request`,\r\n status: isAthenaGatewayError(error) ? error.status : 0,\r\n endpoint,\r\n method,\r\n raw: error,\r\n requestId: isAthenaGatewayError(error) ? error.requestId : undefined,\r\n hint: isAthenaGatewayError(error) ? error.hint : undefined,\r\n cause: error,\r\n },\r\n options,\r\n runtimeOptions,\r\n )\r\n }\r\n\r\n let response: Response\r\n try {\r\n response = await fetch(url, {\r\n method,\r\n headers,\r\n signal: options?.signal,\r\n })\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : String(error)\r\n return rejectStorageError(\r\n {\r\n code: 'NETWORK_ERROR',\r\n message: `Network error while calling Athena storage ${method} ${endpoint}: ${message}`,\r\n status: 0,\r\n endpoint,\r\n method,\r\n cause: error,\r\n },\r\n options,\r\n runtimeOptions,\r\n )\r\n }\r\n\r\n if (response.ok) {\r\n return response\r\n }\r\n\r\n const requestId = headerValue(response.headers, ['x-athena-request-id', 'x-request-id', 'request-id'])\r\n let rawErrorBody: unknown = null\r\n try {\r\n const rawText = await response.text()\r\n const parsedBody = parseResponseBody(rawText ?? '', response.headers.get('content-type'))\r\n rawErrorBody = parsedBody.parsed\r\n } catch (error) {\r\n return rejectStorageError(\r\n {\r\n code: 'NETWORK_ERROR',\r\n message: `Athena storage ${method} ${endpoint} error response body could not be read`,\r\n status: response.status,\r\n endpoint,\r\n method,\r\n requestId,\r\n cause: error,\r\n },\r\n options,\r\n runtimeOptions,\r\n )\r\n }\r\n\r\n return rejectStorageError(\r\n {\r\n code: 'HTTP_ERROR',\r\n message: resolveErrorMessage(\r\n rawErrorBody,\r\n `Athena storage ${method} ${endpoint} failed with status ${response.status}`,\r\n ),\r\n status: response.status,\r\n endpoint,\r\n method,\r\n requestId,\r\n hint: resolveErrorHint(rawErrorBody),\r\n cause: resolveErrorCause(rawErrorBody),\r\n raw: rawErrorBody,\r\n },\r\n options,\r\n runtimeOptions,\r\n )\r\n}\r\n\r\nfunction isBlobBody(body: AthenaStoragePutBody): body is Blob {\r\n return typeof Blob !== 'undefined' && body instanceof Blob\r\n}\r\n\r\nfunction isReadableStreamBody(body: AthenaStoragePutBody): body is ReadableStream<Uint8Array> {\r\n return typeof ReadableStream !== 'undefined' && body instanceof ReadableStream\r\n}\r\n\r\nasync function putPresignedUploadBody(\r\n uploadUrl: string,\r\n uploadHeaders: Record<string, string>,\r\n body: AthenaStoragePutBody,\r\n options?: AthenaStoragePutOptions,\r\n): Promise<Response> {\r\n const headers = new Headers(uploadHeaders)\r\n Object.entries(options?.headers ?? {}).forEach(([key, value]) => headers.set(key, value))\r\n if (!headers.has('Content-Type') && isBlobBody(body) && body.type) {\r\n headers.set('Content-Type', body.type)\r\n }\r\n\r\n const init: RequestInit & { duplex?: 'half' } = {\r\n method: 'PUT',\r\n headers,\r\n body: body as RequestInit['body'],\r\n signal: options?.signal,\r\n }\r\n if (isReadableStreamBody(body)) {\r\n init.duplex = 'half'\r\n }\r\n return fetch(uploadUrl, init)\r\n}\r\n\r\nfunction attachManagedUpload(upload: PresignedFileUrlResponse): AthenaStorageManagedUpload {\n const headers: Record<string, string> = { ...(upload.headers ?? {}) }\n return {\r\n ...upload,\r\n method: 'PUT',\r\n headers,\r\n expiresAt: upload.expires_at,\r\n put(body, options) {\r\n return putPresignedUploadBody(upload.url, headers, body, options)\r\n },\r\n }\r\n}\r\n\r\nfunction attachUploadHelper(response: StorageUploadUrlResponse): StorageUploadUrlResponseWithPut {\r\n return {\r\n ...response,\r\n upload: attachManagedUpload(response.upload),\r\n }\r\n}\r\n\r\nfunction attachUploadHelpers(\r\n response: StorageBatchUploadUrlResponse,\r\n): StorageBatchUploadUrlResponseWithPut {\r\n return {\r\n files: response.files.map(attachUploadHelper),\r\n }\r\n}\r\n\r\nfunction normalizeUploadUrlRequest(input: AthenaStorageFileUploadRequest): CreateStorageUploadUrlRequest {\r\n const s3_id = input.s3_id ?? input.s3Id\r\n const storage_key = input.storage_key ?? input.storageKey\r\n if (!s3_id?.trim()) {\r\n throw new Error('athena.storage.file.upload requires s3_id or s3Id')\r\n }\r\n if (!storage_key?.trim()) {\r\n throw new Error('athena.storage.file.upload requires storage_key or storageKey')\r\n }\r\n const fileName = input.fileName?.trim()\r\n const originalName = input.originalName?.trim()\r\n return {\r\n s3_id,\r\n bucket: input.bucket,\r\n storage_key,\r\n name: input.name ?? fileName,\r\n original_name: input.original_name ?? originalName ?? fileName,\r\n resource_id: input.resource_id ?? input.resourceId,\r\n mime_type: input.mime_type ?? input.mimeType,\r\n content_type: input.content_type ?? input.contentType,\r\n size_bytes: input.size_bytes ?? input.sizeBytes,\r\n file_id: input.file_id ?? input.fileId,\r\n public: input.public,\r\n visibility: input.visibility,\n metadata: input.metadata,\n server_side_encryption: input.server_side_encryption,\n sse: input.sse,\n ssekms_key_id: input.ssekms_key_id,\n kms_key_id: input.kms_key_id,\n bucket_key_enabled: input.bucket_key_enabled,\n }\n}\n\r\nasync function callStorageUploadBinaryEndpoint<T>(\r\n gateway: AthenaGatewayClient,\r\n endpoint: AthenaGatewayEndpointPath,\r\n body: AthenaStoragePutBody,\r\n options?: AthenaStorageCallOptions,\r\n runtimeOptions?: StorageModuleRuntimeOptions,\r\n): Promise<T> {\r\n let url: string\r\n let headers: Record<string, string>\r\n try {\r\n const baseUrl = options?.baseUrl\r\n ? normalizeAthenaGatewayBaseUrl(options.baseUrl)\r\n : runtimeOptions?.baseUrl\r\n ? normalizeAthenaGatewayBaseUrl(runtimeOptions.baseUrl)\r\n : gateway.baseUrl\r\n url = buildAthenaGatewayUrl(baseUrl, resolveStorageEndpointPath(endpoint, runtimeOptions))\r\n headers = gateway.buildHeaders(options)\r\n } catch (error) {\r\n return rejectStorageError(\r\n {\r\n code: storageCodeFromUnknown(error),\r\n message: error instanceof Error\r\n ? error.message\r\n : `Athena storage PUT ${endpoint} failed before sending the request`,\r\n status: isAthenaGatewayError(error) ? error.status : 0,\r\n endpoint,\r\n method: 'PUT',\r\n raw: error,\r\n requestId: isAthenaGatewayError(error) ? error.requestId : undefined,\r\n hint: isAthenaGatewayError(error) ? error.hint : undefined,\r\n cause: error,\r\n },\r\n options,\r\n runtimeOptions,\r\n )\r\n }\r\n\r\n delete headers['Content-Type']\r\n delete headers['content-type']\r\n if (isBlobBody(body) && body.type) {\r\n headers['Content-Type'] = body.type\r\n }\r\n\r\n const requestInit: RequestInit & { duplex?: 'half' } = {\r\n method: 'PUT',\r\n headers,\r\n body: body as RequestInit['body'],\r\n signal: options?.signal,\r\n }\r\n if (isReadableStreamBody(body)) {\r\n requestInit.duplex = 'half'\r\n }\r\n\r\n let response: Response\r\n try {\r\n response = await fetch(url, requestInit)\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : String(error)\r\n return rejectStorageError(\r\n {\r\n code: 'NETWORK_ERROR',\r\n message: `Network error while calling Athena storage PUT ${endpoint}: ${message}`,\r\n status: 0,\r\n endpoint,\r\n method: 'PUT',\r\n cause: error,\r\n },\r\n options,\r\n runtimeOptions,\r\n )\r\n }\r\n\r\n let rawText: string\r\n try {\r\n rawText = await response.text()\r\n } catch (error) {\r\n return rejectStorageError(\r\n {\r\n code: 'NETWORK_ERROR',\r\n message: `Athena storage PUT ${endpoint} response body could not be read`,\r\n status: response.status,\r\n endpoint,\r\n method: 'PUT',\r\n requestId: headerValue(response.headers, ['x-athena-request-id', 'x-request-id', 'request-id']),\r\n cause: error,\r\n },\r\n options,\r\n runtimeOptions,\r\n )\r\n }\r\n\r\n const parsedBody = parseResponseBody(rawText ?? '', response.headers.get('content-type'))\r\n const requestId = headerValue(response.headers, ['x-athena-request-id', 'x-request-id', 'request-id'])\r\n if (parsedBody.parseFailed) {\r\n return rejectStorageError(\r\n {\r\n code: 'INVALID_JSON',\r\n message: `Athena storage PUT ${endpoint} returned malformed JSON`,\r\n status: response.status,\r\n endpoint,\r\n method: 'PUT',\r\n requestId,\r\n raw: parsedBody.parsed,\r\n },\r\n options,\r\n runtimeOptions,\r\n )\r\n }\r\n if (!response.ok) {\r\n return rejectStorageError(\r\n {\r\n code: 'HTTP_ERROR',\r\n message: resolveErrorMessage(\r\n parsedBody.parsed,\r\n `Athena storage PUT ${endpoint} failed with status ${response.status}`,\r\n ),\r\n status: response.status,\r\n endpoint,\r\n method: 'PUT',\r\n requestId,\r\n hint: resolveErrorHint(parsedBody.parsed),\r\n cause: resolveErrorCause(parsedBody.parsed),\r\n raw: parsedBody.parsed,\r\n },\r\n options,\r\n runtimeOptions,\r\n )\r\n }\r\n if (!isRecord(parsedBody.parsed) || !('data' in parsedBody.parsed)) {\r\n return rejectStorageError(\r\n {\r\n code: 'INVALID_ATHENA_ENVELOPE',\r\n message: `Athena storage PUT ${endpoint} returned an invalid Athena envelope`,\r\n status: response.status,\r\n endpoint,\r\n method: 'PUT',\r\n requestId,\r\n raw: parsedBody.parsed,\r\n },\r\n options,\r\n runtimeOptions,\r\n )\r\n }\r\n return parsedBody.parsed.data as T\r\n}\r\n\r\nexport function createStorageModule(\r\n gateway: AthenaGatewayClient,\r\n runtimeOptions?: AthenaStorageClientConfig,\r\n): AthenaStorageModule {\r\n const resolvedRuntimeOptions = runtimeOptions as StorageModuleRuntimeOptions | undefined\r\n const callRaw = <T>(\r\n path: string,\r\n method: AthenaGatewayMethod,\r\n payload?: unknown,\r\n options?: AthenaStorageCallOptions,\r\n ) => callStorageEndpoint<T>(\r\n gateway,\r\n storagePath(path),\r\n method,\r\n 'raw',\r\n payload,\r\n options,\r\n resolvedRuntimeOptions,\r\n )\r\n const callAthena = <T>(\n path: string,\n method: AthenaGatewayMethod,\n payload?: unknown,\n options?: AthenaStorageCallOptions,\n ) => callStorageEndpoint<T>(\r\n gateway,\r\n storagePath(path),\r\n method,\r\n 'athena',\r\n payload,\r\n options,\n resolvedRuntimeOptions,\n )\n const callStorageFileVisibility = (\n fileId: string,\n method: Extract<AthenaGatewayMethod, 'PATCH' | 'POST'>,\n input: SetStorageFileVisibilityRequest,\n options?: AthenaStorageCallOptions,\n ) => callAthena<StorageFileMutationResponse>(\n withPathParam('/storage/files/{file_id}/visibility', 'file_id', fileId),\n method,\n input,\n options,\n )\n const base: AthenaStorageBaseModule = {\n listStorageCatalogs(options) {\r\n return callRaw('/storage/catalogs', 'GET', undefined, options)\r\n },\r\n createStorageCatalog(input, options) {\r\n return callRaw('/storage/catalogs', 'POST', input, options)\r\n },\r\n updateStorageCatalog(id, input, options) {\r\n return callRaw(withPathParam('/storage/catalogs/{id}', 'id', id), 'PATCH', input, options)\r\n },\r\n deleteStorageCatalog(id, options) {\r\n return callRaw(withPathParam('/storage/catalogs/{id}', 'id', id), 'DELETE', undefined, options)\r\n },\r\n listStorageCredentials(options) {\r\n return callRaw('/storage/credentials', 'GET', undefined, options)\r\n },\r\n createStorageUploadUrl(input, options) {\r\n return callAthena('/storage/files/upload-url', 'POST', input, options)\r\n },\r\n createStorageUploadUrls(input, options) {\r\n return callAthena('/storage/files/upload-urls', 'POST', input, options)\r\n },\r\n listStorageFiles(input, options) {\r\n return callAthena('/storage/files/list', 'POST', input, options)\r\n },\r\n getStorageFile(fileId, options) {\r\n return callAthena(withPathParam('/storage/files/{file_id}', 'file_id', fileId), 'GET', undefined, options)\r\n },\r\n getStorageFileUrl(fileId, query, options) {\r\n const path = appendQuery(\r\n withPathParam('/storage/files/{file_id}/url', 'file_id', fileId),\r\n query,\r\n )\r\n return callAthena(path, 'GET', undefined, options)\r\n },\r\n getStorageFileProxy(fileId, query, options) {\r\n const path = appendQuery(\r\n withPathParam('/storage/files/{file_id}/proxy', 'file_id', fileId),\r\n query,\r\n )\r\n return callStorageBinaryEndpoint(gateway, storagePath(path), 'GET', options, resolvedRuntimeOptions)\r\n },\r\n updateStorageFile(fileId, input, options) {\r\n return callAthena(withPathParam('/storage/files/{file_id}', 'file_id', fileId), 'PATCH', input, options)\r\n },\r\n deleteStorageFile(fileId, options) {\n return callAthena(withPathParam('/storage/files/{file_id}', 'file_id', fileId), 'DELETE', undefined, options)\n },\n setStorageFileVisibility(fileId, input, options) {\n return callStorageFileVisibility(fileId, 'PATCH', input, options)\n },\n deleteStorageFolder(input, options) {\n return callAthena('/storage/folders/delete', 'POST', input, options)\n },\n moveStorageFolder(input, options) {\r\n return callAthena('/storage/folders/move', 'POST', input, options)\r\n },\r\n }\r\n const fileFacade = createStorageFileModule(base, runtimeOptions)\r\n const fileUpload = ((\r\n input: AthenaStorageFileUploadRequest | Parameters<AthenaStorageFileModule['upload']>[0],\r\n options?: AthenaStorageCallOptions,\r\n ) => {\r\n if (isRecord(input) && 'files' in input) {\r\n return fileFacade.upload(input as unknown as Parameters<AthenaStorageFileModule['upload']>[0], options)\r\n }\r\n return base.createStorageUploadUrl(\r\n normalizeUploadUrlRequest(input as AthenaStorageFileUploadRequest),\r\n options,\r\n ).then(attachUploadHelper)\r\n }) as AthenaStorageFileNamespace['upload']\r\n const fileDelete = ((input: string | readonly string[], options?: AthenaStorageCallOptions) =>\r\n fileFacade.delete(input as unknown as Parameters<AthenaStorageFileModule['delete']>[0], options)\r\n ) as AthenaStorageFileNamespace['delete']\r\n\r\n const file: AthenaStorageFileNamespace = {\r\n ...fileFacade,\r\n upload: fileUpload,\r\n uploadMany(input, options) {\r\n return base.createStorageUploadUrls(\r\n { files: input.files.map(normalizeUploadUrlRequest) },\r\n options,\r\n ).then(attachUploadHelpers)\r\n },\r\n confirmUpload(fileId, input, options) {\r\n return callAthena(withPathParam('/storage/files/{file_id}/confirm-upload', 'file_id', fileId), 'POST', input ?? {}, options)\r\n },\r\n uploadBinary(fileId, body, options) {\r\n return callStorageUploadBinaryEndpoint(\r\n gateway,\r\n storagePath(withPathParam('/storage/files/{file_id}/upload', 'file_id', fileId)),\r\n body,\r\n options,\r\n resolvedRuntimeOptions,\r\n )\r\n },\r\n search(input, options) {\r\n return callAthena('/storage/files/search', 'POST', input, options)\r\n },\r\n get(fileId, options) {\r\n return base.getStorageFile(fileId, options)\r\n },\r\n update(fileId, input, options) {\r\n return base.updateStorageFile(fileId, input, options)\r\n },\r\n delete: fileDelete,\r\n deleteMany(input, options) {\r\n return callAthena('/storage/files/delete-many', 'POST', input, options)\r\n },\r\n updateMany(input, options) {\r\n return callAthena('/storage/files/update-many', 'POST', input, options)\r\n },\r\n restore(fileId, options) {\r\n return callAthena(withPathParam('/storage/files/{file_id}/restore', 'file_id', fileId), 'POST', {}, options)\r\n },\r\n purge(fileId, options) {\r\n return callAthena(withPathParam('/storage/files/{file_id}/purge', 'file_id', fileId), 'DELETE', undefined, options)\r\n },\r\n copy(fileId, input, options) {\r\n return callAthena(withPathParam('/storage/files/{file_id}/copy', 'file_id', fileId), 'POST', input, options)\r\n },\r\n url(fileId, query, options) {\r\n return base.getStorageFileUrl(fileId, query, options)\r\n },\r\n publicUrl(fileId, options) {\n return callAthena(withPathParam('/storage/files/{file_id}/public-url', 'file_id', fileId), 'GET', undefined, options)\n },\n proxyUrl(fileId, query, options) {\n const path = appendQuery(\n withPathParam('/storage/files/{file_id}/proxy-url', 'file_id', fileId),\n query,\n )\n return callAthena(path, 'GET', undefined, options)\n },\n proxy(fileId, query, options) {\n return base.getStorageFileProxy(fileId, query, options)\n },\n versions(fileId, options) {\n return callAthena(withPathParam('/storage/files/{file_id}/versions', 'file_id', fileId), 'GET', undefined, options)\n },\n restoreVersion(fileId, versionId, options) {\n return callAthena(\n withPathParam(\n withPathParam('/storage/files/{file_id}/versions/{version_id}/restore', 'file_id', fileId),\n 'version_id',\n versionId,\n ),\n 'POST',\n {},\n options,\n )\n },\n deleteVersion(fileId, versionId, options) {\n return callAthena(\n withPathParam(\n withPathParam('/storage/files/{file_id}/versions/{version_id}', 'file_id', fileId),\n 'version_id',\n versionId,\n ),\n 'DELETE',\n undefined,\n options,\n )\n },\n retention: {\n get(fileId, query, options) {\n const path = appendQuery(\n withPathParam('/storage/files/{file_id}/retention', 'file_id', fileId),\n query,\n )\n return callAthena(path, 'GET', undefined, options)\n },\n set(fileId, input, options) {\n return callAthena(withPathParam('/storage/files/{file_id}/retention', 'file_id', fileId), 'POST', input, options)\n },\n },\n visibility: {\n update(fileId, input, options) {\n return base.setStorageFileVisibility(fileId, input, options)\n },\n set(fileId, input, options) {\n return callStorageFileVisibility(fileId, 'POST', input, options)\n },\n setMany(input, options) {\n return callAthena('/storage/files/visibility-many', 'POST', input, options)\n },\n },\r\n }\r\n const credentials: AthenaStorageCredentialsNamespace = {\r\n list(options) {\r\n return base.listStorageCredentials(options)\r\n },\r\n }\r\n const catalog: AthenaStorageCatalogNamespace = {\r\n list(options) {\r\n return base.listStorageCatalogs(options)\r\n },\r\n create(input, options) {\r\n return base.createStorageCatalog(input, options)\r\n },\r\n update(id, input, options) {\r\n return base.updateStorageCatalog(id, input, options)\r\n },\r\n delete(id, options) {\r\n return base.deleteStorageCatalog(id, options)\r\n },\r\n }\r\n const folder: AthenaStorageFolderNamespace = {\r\n list(input, options) {\r\n return callAthena('/storage/folders/list', 'POST', input, options)\r\n },\r\n tree(input, options) {\r\n return callAthena('/storage/folders/tree', 'POST', input, options)\r\n },\r\n delete(input, options) {\r\n return base.deleteStorageFolder(input, options)\r\n },\r\n move(input, options) {\r\n return base.moveStorageFolder(input, options)\r\n },\r\n }\r\n const permission: AthenaStoragePermissionNamespace = {\r\n list(input, options) {\r\n return callAthena('/storage/permissions/list', 'POST', input, options)\r\n },\r\n grant(input, options) {\r\n return callAthena('/storage/permissions/grant', 'POST', input, options)\r\n },\r\n revoke(input, options) {\r\n return callAthena('/storage/permissions/revoke', 'POST', input, options)\r\n },\r\n check(input, options) {\r\n return callAthena('/storage/permissions/check', 'POST', input, options)\r\n },\r\n }\r\n const objectFolder: AthenaStorageObjectFolderNamespace = {\r\n create(input, options) {\r\n return callAthena('/storage/objects/folder', 'POST', input, options)\r\n },\r\n delete(input, options) {\r\n return callAthena('/storage/objects/folder/delete', 'POST', input, options)\r\n },\r\n rename(input, options) {\r\n return callAthena('/storage/objects/folder/rename', 'POST', input, options)\r\n },\r\n }\r\n const object: AthenaStorageObjectNamespace = {\r\n list(input, options) {\r\n return callAthena('/storage/objects', 'POST', input, options)\r\n },\r\n head(input, options) {\r\n return callAthena('/storage/objects/head', 'POST', input, options)\r\n },\r\n exists(input, options) {\r\n return callAthena('/storage/objects/exists', 'POST', input, options)\r\n },\r\n validate(input, options) {\r\n return callAthena('/storage/objects/validate', 'POST', input, options)\r\n },\r\n update(input, options) {\r\n return callAthena('/storage/objects/update', 'POST', input, options)\r\n },\r\n copy(input, options) {\r\n return callAthena('/storage/objects/copy', 'POST', input, options)\r\n },\r\n url(input, options) {\r\n return callAthena('/storage/objects/url', 'POST', input, options)\r\n },\r\n publicUrl(input, options) {\r\n return callAthena('/storage/objects/public-url', 'POST', input, options)\r\n },\r\n delete(input, options) {\r\n return callAthena('/storage/objects/delete', 'POST', input, options)\r\n },\r\n uploadUrl(input, options) {\n return callAthena('/storage/objects/upload-url', 'POST', input, options)\n },\n versions(input, options) {\n return callAthena('/storage/objects/versions', 'POST', input, options)\n },\n restoreVersion(input, options) {\n return callAthena('/storage/objects/versions/restore', 'POST', input, options)\n },\n deleteVersion(input, options) {\n return callAthena('/storage/objects/versions/delete', 'POST', input, options)\n },\n postPolicy(input, options) {\n return callAthena('/storage/objects/post-policy', 'POST', input, options)\n },\n folder: objectFolder,\n }\n const bucket: AthenaStorageBucketNamespace = {\r\n list(input, options) {\r\n return callAthena('/storage/buckets/list', 'POST', input, options)\r\n },\r\n create(input, options) {\r\n return callAthena('/storage/buckets/create', 'POST', input, options)\r\n },\r\n delete(input, options) {\n return callAthena('/storage/buckets/delete', 'POST', input, options)\n },\n lifecycle: {\n get(input, options) {\n return callAthena('/storage/buckets/lifecycle', 'POST', input, options)\n },\n set(input, options) {\n return callAthena('/storage/buckets/lifecycle/set', 'POST', input, options)\n },\n delete(input, options) {\n return callAthena('/storage/buckets/lifecycle/delete', 'POST', input, options)\n },\n },\n policy: {\n get(input, options) {\n return callAthena('/storage/buckets/policy', 'POST', input, options)\n },\n set(input, options) {\n return callAthena('/storage/buckets/policy/set', 'POST', input, options)\n },\n delete(input, options) {\n return callAthena('/storage/buckets/policy/delete', 'POST', input, options)\n },\n },\n publicAccess: {\n get(input, options) {\n return callAthena('/storage/buckets/public-access', 'POST', input, options)\n },\n set(input, options) {\n return callAthena('/storage/buckets/public-access/set', 'POST', input, options)\n },\n delete(input, options) {\n return callAthena('/storage/buckets/public-access/delete', 'POST', input, options)\n },\n },\n cors: {\n get(input, options) {\r\n return callAthena('/storage/buckets/cors', 'POST', input, options)\r\n },\r\n set(input, options) {\r\n return callAthena('/storage/buckets/cors/set', 'POST', input, options)\r\n },\r\n delete(input, options) {\r\n return callAthena('/storage/buckets/cors/delete', 'POST', input, options)\r\n },\r\n },\r\n }\r\n const multipart: AthenaStorageMultipartNamespace = {\r\n create(input, options) {\r\n return callAthena('/storage/multipart/create', 'POST', input, options)\r\n },\r\n signPart(input, options) {\r\n return callAthena('/storage/multipart/sign-part', 'POST', input, options)\r\n },\r\n complete(input, options) {\r\n return callAthena('/storage/multipart/complete', 'POST', input, options)\r\n },\r\n abort(input, options) {\r\n return callAthena('/storage/multipart/abort', 'POST', input, options)\r\n },\r\n listParts(input, options) {\r\n return callAthena('/storage/multipart/list-parts', 'POST', input, options)\r\n },\r\n }\r\n const audit: AthenaStorageAuditNamespace = {\r\n list(input, options) {\r\n return callAthena('/storage/audit/list', 'POST', input, options)\r\n },\r\n }\r\n return {\r\n ...base,\r\n credentials,\r\n catalog,\r\n file,\r\n folder,\r\n permission,\r\n object,\r\n bucket,\r\n multipart,\r\n audit,\r\n delete: file.delete,\r\n }\r\n}\r\n","import type { BackendConfig, BackendType } from './gateway/types.ts'\r\nimport type {\r\n AthenaClientBuilder,\r\n AthenaCreateClientAuthOptions,\r\n AthenaCreateClientConfig,\r\n AthenaClientExperimentalOptions,\r\n AthenaCreateClientOptions,\r\n AthenaCreateClientOptionsWithStorage,\r\n AthenaCreateClientOptionsWithStorageAndTypecheckedColumns,\r\n AthenaCreateClientOptionsWithTypecheckedColumns,\r\n AthenaSdkClientWithAuth,\r\n} from './client.ts'\r\n\r\nconst DEFAULT_BACKEND: BackendConfig = { type: 'athena' }\r\n\r\nexport function toBackendConfig(value: BackendConfig | BackendType | undefined): BackendConfig {\r\n if (!value) return DEFAULT_BACKEND\r\n return typeof value === 'string' ? { type: value } : value\r\n}\r\n\r\nfunction mergeHeaders(\r\n current: Record<string, string> | undefined,\r\n next: Record<string, string>,\r\n): Record<string, string> {\r\n return {\r\n ...(current ?? {}),\r\n ...next,\r\n }\r\n}\r\n\r\nfunction mergeAuthClientConfig(\r\n current: AthenaCreateClientAuthOptions | undefined,\r\n next: AthenaCreateClientAuthOptions,\r\n): AthenaCreateClientAuthOptions {\r\n const merged: AthenaCreateClientAuthOptions = {\r\n ...(current ?? {}),\r\n ...next,\r\n }\r\n if (current?.headers || next.headers) {\r\n merged.headers = mergeHeaders(current?.headers, next.headers ?? {})\r\n }\r\n return merged\r\n}\r\n\r\nfunction mergeExperimentalOptions(\r\n current: AthenaClientExperimentalOptions | undefined,\r\n next: AthenaClientExperimentalOptions,\r\n): AthenaClientExperimentalOptions {\r\n const merged: AthenaClientExperimentalOptions = {\r\n ...(current ?? {}),\r\n ...next,\r\n }\r\n if (\r\n current?.traceQueries &&\r\n typeof current.traceQueries === 'object' &&\r\n next.traceQueries &&\r\n typeof next.traceQueries === 'object'\r\n ) {\r\n merged.traceQueries = {\r\n ...current.traceQueries,\r\n ...next.traceQueries,\r\n }\r\n }\r\n if (current?.storage || next.storage) {\r\n merged.storage = {\r\n ...(current?.storage ?? {}),\r\n ...(next.storage ?? {}),\r\n }\r\n }\r\n return merged\r\n}\r\n\r\nfunction resolveBuilderReturn<\r\n TStorageEnabled extends boolean,\r\n TStrict extends boolean,\r\n>(\r\n builder: AthenaClientBuilder<false, false>,\r\n storageEnabled: TStorageEnabled,\r\n strictEnabled: TStrict,\r\n): AthenaClientBuilder<TStorageEnabled, TStrict> {\r\n void storageEnabled\r\n void strictEnabled\r\n return builder as unknown as AthenaClientBuilder<TStorageEnabled, TStrict>\r\n}\r\n\r\nclass AthenaClientBuilderImpl implements AthenaClientBuilder<false, false> {\n private rootUrl?: string | null\n private apiKey?: string | null\n private backendConfig: BackendConfig = DEFAULT_BACKEND\n private clientName?: string | null\n private defaultUserId?: string | null\n private defaultOrganizationId?: string | null\n private forceNoCacheEnabled = false\n private defaultHeaders?: Record<string, string>\n private authConfig?: AthenaCreateClientAuthOptions\n private dbUrlOverride?: string\r\n private gatewayUrlOverride?: string\r\n private authUrlOverride?: string\r\n private storageUrlOverride?: string\r\n private experimentalOptions?: AthenaClientExperimentalOptions\r\n\r\n constructor(\r\n private readonly buildClient: (config: AthenaCreateClientConfig) => AthenaSdkClientWithAuth<false>,\r\n ) {}\r\n\r\n url(url: string | null | undefined): AthenaClientBuilder<false, false> {\n this.rootUrl = url\n return this\n }\n\n key(apiKey: string | null | undefined): AthenaClientBuilder<false, false> {\n this.apiKey = apiKey\n return this\n }\n\r\n backend(backend: BackendConfig | BackendType): AthenaClientBuilder<false, false> {\r\n this.backendConfig = toBackendConfig(backend)\r\n return this\r\n }\r\n\r\n client(clientName: string | null | undefined): AthenaClientBuilder<false, false> {\n this.clientName = clientName\n return this\n }\n\r\n headers(headers: Record<string, string>): AthenaClientBuilder<false, false> {\r\n this.defaultHeaders = headers\r\n return this\r\n }\r\n\r\n auth(config: AthenaCreateClientAuthOptions): AthenaClientBuilder<false, false> {\r\n this.authConfig = mergeAuthClientConfig(this.authConfig, config)\r\n return this\r\n }\r\n\r\n experimental(\r\n options: AthenaClientExperimentalOptions & { athenaStorageBackend: true; typecheckColumns: true },\r\n ): AthenaClientBuilder<true, true>\r\n experimental(options: AthenaClientExperimentalOptions & { athenaStorageBackend: true }): AthenaClientBuilder<true, false>\r\n experimental(options: AthenaClientExperimentalOptions & { typecheckColumns: true }): AthenaClientBuilder<false, true>\r\n experimental(options: AthenaClientExperimentalOptions): AthenaClientBuilder<false, false>\r\n experimental(\r\n options: AthenaClientExperimentalOptions,\r\n ): AthenaClientBuilder<false, false> | AthenaClientBuilder<true, false> | AthenaClientBuilder<true, true> | AthenaClientBuilder<false, true> {\r\n this.experimentalOptions = mergeExperimentalOptions(this.experimentalOptions, options)\r\n if (options.athenaStorageBackend && options.typecheckColumns) {\r\n return resolveBuilderReturn(this, true, true)\r\n }\r\n if (options.athenaStorageBackend) {\r\n return resolveBuilderReturn(this, true, false)\r\n }\r\n if (options.typecheckColumns) {\r\n return resolveBuilderReturn(this, false, true)\r\n }\r\n return this\r\n }\r\n\r\n options(options: AthenaCreateClientOptionsWithStorageAndTypecheckedColumns): AthenaClientBuilder<true, true>\r\n options(options: AthenaCreateClientOptionsWithStorage): AthenaClientBuilder<true, false>\r\n options(options: AthenaCreateClientOptionsWithTypecheckedColumns): AthenaClientBuilder<false, true>\r\n options(options: AthenaCreateClientOptions): AthenaClientBuilder<false, false>\r\n options(\r\n options: AthenaCreateClientOptions,\r\n ): AthenaClientBuilder<false, false> | AthenaClientBuilder<true, false> | AthenaClientBuilder<true, true> | AthenaClientBuilder<false, true> {\r\n if (options.client !== undefined) {\n this.clientName = options.client\n }\n if (options.userId !== undefined) {\n this.defaultUserId = options.userId\n }\n if (options.organizationId !== undefined) {\n this.defaultOrganizationId = options.organizationId\n }\n if (options.forceNoCache !== undefined) {\n this.forceNoCacheEnabled = options.forceNoCache\n }\n if (options.backend !== undefined) {\n this.backendConfig = toBackendConfig(options.backend)\n }\n if (options.headers !== undefined) {\r\n this.defaultHeaders = mergeHeaders(this.defaultHeaders, options.headers)\r\n }\r\n if (options.auth !== undefined) {\r\n this.authConfig = mergeAuthClientConfig(this.authConfig, options.auth)\r\n }\r\n if (options.db?.url !== undefined && options.db.url !== null) {\r\n this.dbUrlOverride = options.db.url\r\n }\r\n if (options.gateway?.url !== undefined && options.gateway.url !== null) {\r\n this.gatewayUrlOverride = options.gateway.url\r\n }\r\n if (options.dbUrl !== undefined && options.dbUrl !== null) {\r\n this.dbUrlOverride = options.dbUrl\r\n }\r\n if (options.gatewayUrl !== undefined && options.gatewayUrl !== null) {\r\n this.gatewayUrlOverride = options.gatewayUrl\r\n }\r\n if (options.authUrl !== undefined && options.authUrl !== null) {\r\n this.authUrlOverride = options.authUrl\r\n }\r\n if (options.storage?.url !== undefined && options.storage.url !== null) {\r\n this.storageUrlOverride = options.storage.url\r\n }\r\n if (options.storageUrl !== undefined && options.storageUrl !== null) {\r\n this.storageUrlOverride = options.storageUrl\r\n }\r\n if (options.experimental !== undefined) {\r\n this.experimentalOptions = mergeExperimentalOptions(this.experimentalOptions, options.experimental)\r\n }\r\n if (options.experimental?.athenaStorageBackend && options.experimental.typecheckColumns) {\r\n return resolveBuilderReturn(this, true, true)\r\n }\r\n if (options.experimental?.athenaStorageBackend) {\r\n return resolveBuilderReturn(this, true, false)\r\n }\r\n if (options.experimental?.typecheckColumns) {\r\n return resolveBuilderReturn(this, false, true)\r\n }\r\n return this\r\n }\r\n\r\n build(): AthenaSdkClientWithAuth<false> {\r\n if ((!this.rootUrl && !this.dbUrlOverride && !this.gatewayUrlOverride) || !this.apiKey) {\r\n throw new Error(\r\n 'AthenaClient requires key plus either .url() or a db/gateway override before .build()',\r\n )\r\n }\r\n\r\n return this.buildClient({\r\n url: this.rootUrl,\n key: this.apiKey,\n client: this.clientName,\n userId: this.defaultUserId,\n organizationId: this.defaultOrganizationId,\n forceNoCache: this.forceNoCacheEnabled,\n backend: this.backendConfig,\n headers: this.defaultHeaders,\n db: this.dbUrlOverride ? { url: this.dbUrlOverride } : undefined,\n gateway: this.gatewayUrlOverride ? { url: this.gatewayUrlOverride } : undefined,\r\n auth: this.authConfig,\r\n authUrl: this.authUrlOverride,\r\n storage: this.storageUrlOverride ? { url: this.storageUrlOverride } : undefined,\r\n storageUrl: this.storageUrlOverride,\r\n experimental: this.experimentalOptions,\r\n })\r\n }\r\n}\r\n\r\nexport function createAthenaClientBuilder(\r\n buildClient: (config: AthenaCreateClientConfig) => AthenaSdkClientWithAuth<false>,\r\n): AthenaClientBuilder<false, false> {\r\n return new AthenaClientBuilderImpl(buildClient)\r\n}\r\n","import type {\n AthenaConditionArrayValue,\n AthenaConditionOperator,\n AthenaConditionValue,\n AthenaGatewayCondition,\n AthenaJsonValue,\n AthenaSortBy,\n} from './gateway/types.ts'\nimport type {\n AnyModelDef,\n DatabaseDef,\n ModelDef,\n ModelRelationMetadata,\n RegistryDef,\n SchemaDef,\n} from './schema/types.ts'\nimport type { RowOf } from './schema/types.ts'\n\ntype AthenaRowShape = Record<string, AthenaJsonValue | undefined>\ntype FilterColumnKey<Row> = Extract<keyof NonNullable<Row>, string>\ntype ResolvedFilterColumnKey<Row> = [FilterColumnKey<Row>] extends [never] ? string : FilterColumnKey<Row>\n\nconst UUID_PATTERN =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i\n\ntype AthenaFilterOperator =\n | 'eq'\n | 'neq'\n | 'gt'\n | 'gte'\n | 'lt'\n | 'lte'\n | 'like'\n | 'ilike'\n | 'is'\n | 'in'\n | 'contains'\n | 'containedBy'\n\ntype AthenaWherePrimitive = AthenaConditionValue\n\nexport type AthenaWhereOperatorInput = {\n eq?: AthenaConditionValue\n neq?: AthenaConditionValue\n gt?: AthenaConditionValue\n gte?: AthenaConditionValue\n lt?: AthenaConditionValue\n lte?: AthenaConditionValue\n like?: AthenaConditionValue\n ilike?: AthenaConditionValue\n is?: AthenaConditionValue\n in?: AthenaConditionArrayValue\n contains?: AthenaConditionArrayValue\n containedBy?: AthenaConditionArrayValue\n}\n\ntype AthenaWhereColumnInput<Row = AthenaRowShape> = Partial<\n Record<ResolvedFilterColumnKey<Row>, AthenaWherePrimitive | AthenaWhereOperatorInput>\n>\n\ntype AthenaBooleanSafeOperator = Exclude<AthenaFilterOperator, 'in' | 'contains' | 'containedBy'>\n\ntype AthenaWhereBooleanSafeOperatorInput = Partial<\n Record<AthenaBooleanSafeOperator, AthenaConditionValue>\n>\n\ntype AthenaWhereBooleanNotOperatorInput = {\n [K in AthenaBooleanSafeOperator]: {\n [P in K]: AthenaConditionValue\n } & Partial<Record<Exclude<AthenaBooleanSafeOperator, K>, never>>\n}[AthenaBooleanSafeOperator]\n\ntype AthenaStrictBooleanOperand<Keys extends string, Value> = {\n [K in Keys]: {\n [P in K]: Value\n } & Partial<Record<Exclude<Keys, K>, never>>\n}[Keys]\n\ntype AthenaNonEmptyArray<T> = [T, ...T[]]\n\nexport type AthenaWhereBooleanOperand<Row = AthenaRowShape> =\n string extends ResolvedFilterColumnKey<Row>\n ? AthenaWhereColumnInput<Row>\n : AthenaStrictBooleanOperand<\n ResolvedFilterColumnKey<Row>,\n AthenaWherePrimitive | AthenaWhereBooleanSafeOperatorInput\n >\n\ntype AthenaWhereNotOperand<Row = AthenaRowShape> =\n string extends ResolvedFilterColumnKey<Row>\n ? AthenaWhereColumnInput<Row>\n : AthenaStrictBooleanOperand<\n ResolvedFilterColumnKey<Row>,\n AthenaWherePrimitive | AthenaWhereBooleanNotOperatorInput\n >\n\nexport type AthenaWhere<Row = AthenaRowShape> = AthenaWhereColumnInput<Row> & {\n or?: string extends ResolvedFilterColumnKey<Row>\n ? Array<AthenaWhereColumnInput<Row>>\n : AthenaNonEmptyArray<AthenaWhereBooleanOperand<Row>>\n not?: AthenaWhereNotOperand<Row>\n}\n\nexport interface AthenaRelationSelectNode<TSelect extends AthenaSelectShape = AthenaSelectShape> {\n select: TSelect\n as?: string\n via?: string\n schema?: string\n}\n\nexport type AthenaSelectShape = Record<string, true | AthenaRelationSelectNode<AthenaSelectShape>>\n\ntype AthenaAllowedRelationSelectNodeKey = 'select' | 'as' | 'via' | 'schema'\n\ntype AthenaValidatedRelationSelectNode<TNode> =\n TNode extends { select: infer TChild }\n ? Exclude<keyof TNode, AthenaAllowedRelationSelectNodeKey> extends never\n ? TNode extends { schema: string; via: string }\n ? never\n : TChild extends Record<string, unknown>\n ? {\n [K in keyof TNode]:\n K extends 'select'\n ? AthenaValidatedSelectShape<TChild>\n : K extends AthenaAllowedRelationSelectNodeKey\n ? TNode[K]\n : never\n }\n : never\n : never\n : never\n\nexport type AthenaValidatedSelectShape<TSelect> = {\n [K in keyof TSelect]:\n TSelect[K] extends true\n ? true\n : AthenaValidatedRelationSelectNode<TSelect[K]>\n}\n\ntype GenericRegistryDef = RegistryDef<\n Record<string, DatabaseDef<Record<string, SchemaDef<Record<string, AnyModelDef>>>>>\n>\n\ntype AthenaOrderByDirectionInput =\n | 'asc'\n | 'desc'\n | 'ascending'\n | 'descending'\n | boolean\n | {\n ascending?: boolean\n }\n\nexport type AthenaOrderBy<Row = AthenaRowShape> =\n | {\n column: ResolvedFilterColumnKey<Row>\n ascending?: boolean\n }\n | Partial<Record<ResolvedFilterColumnKey<Row>, AthenaOrderByDirectionInput>>\n\nexport interface AthenaFindManyOptions<\n Row = AthenaRowShape,\n TSelect extends AthenaSelectShape = AthenaSelectShape,\n> {\n select: TSelect\n where?: AthenaWhere<Row>\n orderBy?: AthenaOrderBy<Row>\n limit?: number\n}\n\ntype AthenaModelContext<\n TRegistry extends GenericRegistryDef = GenericRegistryDef,\n TDatabase extends string = string,\n TSchema extends string = string,\n TModel extends AnyModelDef = AnyModelDef,\n> = {\n registry: TRegistry\n database: TDatabase\n schema: TSchema\n model: TModel\n}\n\ntype Simplify<T> = {\n [K in keyof T]: T[K]\n} & {}\n\ntype ContextRegistry<TContext> = TContext extends AthenaModelContext<infer TRegistry, string, string, AnyModelDef>\n ? TRegistry\n : never\n\ntype ContextDatabase<TContext> = TContext extends AthenaModelContext<GenericRegistryDef, infer TDatabase, string, AnyModelDef>\n ? TDatabase\n : never\n\ntype ContextModel<TContext> = TContext extends AthenaModelContext<GenericRegistryDef, string, string, infer TModel>\n ? TModel\n : never\n\ntype ModelMetaOf<TContext> = ContextModel<TContext> extends ModelDef<unknown, unknown, unknown, infer TMeta>\n ? TMeta\n : never\n\ntype ModelRelationsOf<TContext> = NonNullable<ModelMetaOf<TContext>['relations']>\n\ntype SelectedResultKey<\n TKey extends string,\n TValue,\n> = TValue extends { as: infer TAlias extends string } ? TAlias : TKey\n\ntype ScalarSelectionResult<Row, TSelect extends AthenaSelectShape> = {\n [TKey in Extract<keyof TSelect, string> as TSelect[TKey] extends true ? TKey : never]-?: TKey extends keyof NonNullable<Row>\n ? NonNullable<Row>[TKey]\n : unknown\n}\n\ntype RelationByKey<TContext, TKey extends string> = TKey extends keyof ModelRelationsOf<TContext>\n ? ModelRelationsOf<TContext>[TKey]\n : never\n\ntype RelationByVia<TContext, TVia extends string> = {\n [TKey in keyof ModelRelationsOf<TContext>]: ModelRelationsOf<TContext>[TKey] extends infer TRelation\n ? TRelation extends ModelRelationMetadata\n ? TVia extends TRelation['sourceColumns'][number]\n ? TRelation\n : never\n : never\n : never\n}[keyof ModelRelationsOf<TContext>]\n\ntype ResolvedRelation<TContext, TKey extends string, TValue> = RelationByKey<TContext, TKey> extends never\n ? TValue extends { via: infer TVia extends string }\n ? RelationByVia<TContext, TVia>\n : never\n : RelationByKey<TContext, TKey>\n\ntype TargetDatabaseName<TContext, TRelation extends ModelRelationMetadata> = TRelation['targetDatabase'] extends string\n ? TRelation['targetDatabase']\n : ContextDatabase<TContext>\n\ntype ResolveTargetModel<\n TContext,\n TRelation extends ModelRelationMetadata,\n> = ContextRegistry<TContext> extends infer TRegistry\n ? TRegistry extends GenericRegistryDef\n ? TargetDatabaseName<TContext, TRelation> extends keyof TRegistry & string\n ? TRelation['targetSchema'] extends keyof TRegistry[TargetDatabaseName<TContext, TRelation>]['schemas'] & string\n ? TRelation['targetModel'] extends keyof TRegistry[TargetDatabaseName<TContext, TRelation>]['schemas'][TRelation['targetSchema']]['models'] & string\n ? TRegistry[TargetDatabaseName<TContext, TRelation>]['schemas'][TRelation['targetSchema']]['models'][TRelation['targetModel']]\n : never\n : never\n : never\n : never\n : never\n\ntype RelationResultValue<\n TRelation extends ModelRelationMetadata,\n TValue,\n TContext,\n> = TValue extends AthenaRelationSelectNode<infer TChildSelect>\n ? ResolveTargetModel<TContext, TRelation> extends infer TTargetModel\n ? TTargetModel extends AnyModelDef\n ? TRelation['kind'] extends 'one-to-many' | 'many-to-many'\n ? Array<\n AthenaFindManyResult<\n RowOf<TTargetModel>,\n TChildSelect,\n AthenaModelContext<\n ContextRegistry<TContext>,\n TargetDatabaseName<TContext, TRelation>,\n TRelation['targetSchema'],\n TTargetModel\n >\n >\n >\n : AthenaFindManyResult<\n RowOf<TTargetModel>,\n TChildSelect,\n AthenaModelContext<\n ContextRegistry<TContext>,\n TargetDatabaseName<TContext, TRelation>,\n TRelation['targetSchema'],\n TTargetModel\n >\n > | null\n : unknown\n : unknown\n : never\n\ntype RelationSelectionResult<TContext, TSelect extends AthenaSelectShape> = {\n [TKey in Extract<keyof TSelect, string> as TSelect[TKey] extends AthenaRelationSelectNode<AthenaSelectShape>\n ? SelectedResultKey<TKey, TSelect[TKey]>\n : never]-?: ResolvedRelation<TContext, TKey, TSelect[TKey]> extends infer TRelation\n ? TRelation extends ModelRelationMetadata\n ? RelationResultValue<TRelation, TSelect[TKey], TContext>\n : unknown\n : unknown\n}\n\nexport type AthenaFindManyResult<\n Row,\n TSelect extends AthenaSelectShape,\n TContext = unknown,\n> = Simplify<ScalarSelectionResult<Row, TSelect> & RelationSelectionResult<TContext, TSelect>>\n\nconst FILTER_OPERATORS = new Set<AthenaFilterOperator>([\n 'eq',\n 'neq',\n 'gt',\n 'gte',\n 'lt',\n 'lte',\n 'like',\n 'ilike',\n 'is',\n 'in',\n 'contains',\n 'containedBy',\n])\n\nconst BOOLEAN_SAFE_OPERATORS = new Set<AthenaBooleanSafeOperator>([\n 'eq',\n 'neq',\n 'gt',\n 'gte',\n 'lt',\n 'lte',\n 'like',\n 'ilike',\n 'is',\n])\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction isUuidString(value: string): boolean {\n return UUID_PATTERN.test(value.trim())\n}\n\nfunction isUuidIdentifierColumn(column: string): boolean {\n return column === 'id' || /(?:^|_)uuid(?:_|$)/i.test(column) || /_id$/i.test(column)\n}\n\nexport function shouldUseUuidTextComparison(column: string, value: AthenaConditionValue): boolean {\n return typeof value === 'string' && isUuidString(value) && isUuidIdentifierColumn(column)\n}\n\nfunction isRelationSelectNode(value: unknown): value is AthenaRelationSelectNode {\n return isRecord(value) && isRecord(value.select)\n}\n\nfunction normalizeIdentifier(value: string, label: string): string {\n const normalized = value.trim()\n if (!normalized) {\n throw new Error(`${label} must be a non-empty string`)\n }\n return normalized\n}\n\nfunction stringifyFilterValue(value: AthenaConditionValue | AthenaConditionArrayValue | string): string {\n if (Array.isArray(value)) {\n return value.join(',')\n }\n return String(value)\n}\n\nfunction buildGatewayCondition(\n operator: AthenaConditionOperator,\n column?: string,\n value?: AthenaConditionValue | AthenaConditionArrayValue | string,\n): AthenaGatewayCondition {\n const condition: AthenaGatewayCondition = { operator }\n if (column) {\n condition.column = column\n if (operator === 'eq') {\n condition.eq_column = column\n }\n }\n if (value !== undefined) {\n condition.value = value\n if (operator === 'eq') {\n condition.eq_value = value\n }\n }\n if (operator === 'eq' && column && value !== undefined && shouldUseUuidTextComparison(column, value as AthenaConditionValue)) {\n condition.column_cast = 'text'\n condition.eq_column_cast = 'text'\n }\n return condition\n}\n\nfunction compileRelationToken(\n key: string,\n node: AthenaRelationSelectNode,\n): string {\n const nested = compileSelectShape(node.select)\n const propertyKey = normalizeIdentifier(key, 'select relation key')\n if (node.schema && node.via) {\n throw new Error(\n `findMany relation \"${propertyKey}\" cannot combine schema and via yet; use schema with the relation key, or use via without schema`,\n )\n }\n\n const relationTokenBase = normalizeIdentifier(node.via ?? propertyKey, 'select relation token')\n if (node.schema && relationTokenBase.includes('.')) {\n throw new Error(\n `findMany relation \"${propertyKey}\" already resolves to a qualified relation token; do not also set schema`,\n )\n }\n\n const relationSchema = node.schema?.trim()\n const relationToken = relationSchema\n ? `${normalizeIdentifier(relationSchema, 'select relation schema')}.${relationTokenBase}`\n : relationTokenBase\n const alias = node.as?.trim() || (relationToken !== propertyKey ? propertyKey : '')\n const prefix = alias ? `${alias}:` : ''\n return `${prefix}${relationToken}(${nested})`\n}\n\nexport function compileSelectShape(select: AthenaSelectShape): string {\n if (!isRecord(select)) {\n throw new Error('findMany select must be an object')\n }\n\n const tokens: string[] = []\n for (const [rawKey, rawValue] of Object.entries(select)) {\n if (rawValue === undefined) {\n continue\n }\n\n if (rawValue === true) {\n tokens.push(normalizeIdentifier(rawKey, 'select column'))\n continue\n }\n\n if (isRelationSelectNode(rawValue)) {\n tokens.push(compileRelationToken(rawKey, rawValue))\n continue\n }\n\n throw new Error(`Unsupported select node for \"${rawKey}\"`)\n }\n\n if (tokens.length === 0) {\n throw new Error('findMany select requires at least one field')\n }\n\n return tokens.join(',')\n}\n\nexport function selectShapeUsesRelationSchema(select: AthenaSelectShape): boolean {\n if (!isRecord(select)) {\n return false\n }\n\n for (const rawValue of Object.values(select)) {\n if (!isRelationSelectNode(rawValue)) {\n continue\n }\n if (typeof rawValue.schema === 'string' && rawValue.schema.trim().length > 0) {\n return true\n }\n if (selectShapeUsesRelationSchema(rawValue.select)) {\n return true\n }\n }\n\n return false\n}\n\nfunction compileColumnWhere(\n column: string,\n input: AthenaWherePrimitive | AthenaWhereOperatorInput,\n): AthenaGatewayCondition[] {\n const normalizedColumn = normalizeIdentifier(column, 'where column')\n if (!isRecord(input)) {\n return [buildGatewayCondition('eq', normalizedColumn, input)]\n }\n\n const conditions: AthenaGatewayCondition[] = []\n for (const [rawOperator, rawValue] of Object.entries(input)) {\n if (rawValue === undefined) {\n continue\n }\n if (!FILTER_OPERATORS.has(rawOperator as AthenaFilterOperator)) {\n throw new Error(`Unsupported where operator \"${rawOperator}\" on \"${normalizedColumn}\"`)\n }\n if (\n (rawOperator === 'in' || rawOperator === 'contains' || rawOperator === 'containedBy') &&\n !Array.isArray(rawValue)\n ) {\n throw new Error(`where.${normalizedColumn}.${rawOperator} requires an array value`)\n }\n conditions.push(\n buildGatewayCondition(\n rawOperator as AthenaFilterOperator,\n normalizedColumn,\n rawValue as AthenaConditionValue | AthenaConditionArrayValue,\n ),\n )\n }\n\n if (conditions.length === 0) {\n throw new Error(`where.${normalizedColumn} requires at least one operator`)\n }\n\n return conditions\n}\n\nfunction compileBooleanExpressionTerms(\n clause: AthenaWhereBooleanOperand,\n label: 'or' | 'not',\n): string[] {\n if (!isRecord(clause)) {\n throw new Error(`findMany where.${label} clauses must be objects`)\n }\n\n const entries = Object.entries(clause).filter(([, value]) => value !== undefined)\n if (entries.length !== 1) {\n throw new Error(`findMany where.${label} clauses must target exactly one column`)\n }\n\n const [rawColumn, rawValue] = entries[0]\n const column = normalizeIdentifier(rawColumn, `where.${label} column`)\n\n if (!isRecord(rawValue)) {\n return [`${column}.eq.${stringifyFilterValue(rawValue as AthenaConditionValue)}`]\n }\n\n const operatorEntries = Object.entries(rawValue).filter(([, value]) => value !== undefined)\n if (operatorEntries.length === 0) {\n throw new Error(`findMany where.${label}.${column} requires at least one operator`)\n }\n\n if (label === 'not' && operatorEntries.length > 1) {\n throw new Error('findMany where.not only supports a single lossless operator expression')\n }\n\n return operatorEntries.map(([rawOperator, rawOperand]) => {\n if (!BOOLEAN_SAFE_OPERATORS.has(rawOperator as AthenaBooleanSafeOperator)) {\n throw new Error(`findMany where.${label} only supports lossless scalar operators`)\n }\n if (Array.isArray(rawOperand)) {\n throw new Error(`findMany where.${label} does not support array-valued operators`)\n }\n return `${column}.${rawOperator}.${stringifyFilterValue(rawOperand as AthenaConditionValue)}`\n })\n}\n\nexport function compileWhere(where?: AthenaWhere): AthenaGatewayCondition[] | undefined {\n if (where === undefined) {\n return undefined\n }\n if (!isRecord(where)) {\n throw new Error('findMany where must be an object')\n }\n\n const conditions: AthenaGatewayCondition[] = []\n for (const [rawKey, rawValue] of Object.entries(where)) {\n if (rawValue === undefined) {\n continue\n }\n\n if (rawKey === 'or') {\n if (!Array.isArray(rawValue) || rawValue.length === 0) {\n throw new Error('findMany where.or must be a non-empty array')\n }\n const expressions = rawValue.flatMap(value =>\n compileBooleanExpressionTerms(value as AthenaWhereBooleanOperand, 'or'),\n )\n conditions.push(buildGatewayCondition('or', undefined, expressions.join(',')))\n continue\n }\n\n if (rawKey === 'not') {\n const expressions = compileBooleanExpressionTerms(rawValue as AthenaWhereBooleanOperand, 'not')\n if (expressions.length !== 1) {\n throw new Error('findMany where.not must compile to exactly one lossless expression')\n }\n conditions.push(buildGatewayCondition('not', undefined, expressions[0]))\n continue\n }\n\n conditions.push(...compileColumnWhere(rawKey, rawValue as AthenaWherePrimitive | AthenaWhereOperatorInput))\n }\n\n return conditions.length > 0 ? conditions : undefined\n}\n\nfunction resolveOrderDirection(input: AthenaOrderByDirectionInput): AthenaSortBy['direction'] {\n if (typeof input === 'boolean') {\n return input === false ? 'descending' : 'ascending'\n }\n if (typeof input === 'string') {\n const normalized = input.trim().toLowerCase()\n if (normalized === 'asc' || normalized === 'ascending') {\n return 'ascending'\n }\n if (normalized === 'desc' || normalized === 'descending') {\n return 'descending'\n }\n throw new Error(`Unsupported orderBy direction \"${input}\"`)\n }\n return input.ascending === false ? 'descending' : 'ascending'\n}\n\nexport function compileOrderBy<Row = AthenaRowShape>(orderBy?: AthenaOrderBy<Row>): AthenaSortBy | undefined {\n if (orderBy === undefined) {\n return undefined\n }\n if (!isRecord(orderBy)) {\n throw new Error('findMany orderBy must be an object')\n }\n\n if ('column' in orderBy) {\n return {\n field: normalizeIdentifier(String(orderBy.column), 'orderBy column'),\n direction: orderBy.ascending === false ? 'descending' : 'ascending',\n }\n }\n\n const entries = Object.entries(orderBy).filter(([, value]) => value !== undefined)\n if (entries.length === 0) {\n return undefined\n }\n if (entries.length > 1) {\n throw new Error('findMany orderBy only supports a single column in v1')\n }\n\n const [column, input] = entries[0]\n return {\n field: normalizeIdentifier(column, 'orderBy column'),\n direction: resolveOrderDirection(input as AthenaOrderByDirectionInput),\n }\n}\n","import type {\n AthenaFetchPayload,\n AthenaGatewayCondition,\n AthenaJsonArray,\n AthenaJsonObject,\n AthenaJsonValue,\n AthenaSortBy,\n} from './types.ts'\n\nconst IDENTIFIER_SEGMENT_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/\n\nfunction isIdentifierPath(value: string): boolean {\n const segments = value.split('.').map(segment => segment.trim())\n return segments.length > 1 && segments.every(segment => IDENTIFIER_SEGMENT_PATTERN.test(segment))\n}\n\nfunction extractRelationHead(raw: string): string {\n const trimmed = raw.trim()\n if (!trimmed) return ''\n\n const aliasIndex = trimmed.indexOf(':')\n const withoutAlias = aliasIndex >= 0 ? trimmed.slice(aliasIndex + 1).trim() : trimmed\n const modifierIndex = withoutAlias.indexOf('!')\n return (modifierIndex >= 0 ? withoutAlias.slice(0, modifierIndex) : withoutAlias).trim()\n}\n\nfunction hasSchemaQualifiedRelationToken(select: string): boolean {\n let singleQuoted = false\n let doubleQuoted = false\n let tokenStart = 0\n\n for (let index = 0; index < select.length; index += 1) {\n const char = select[index]\n const next = index + 1 < select.length ? select[index + 1] : ''\n\n if (singleQuoted) {\n if (char === \"'\" && next === \"'\") {\n index += 1\n continue\n }\n if (char === \"'\") {\n singleQuoted = false\n }\n continue\n }\n\n if (doubleQuoted) {\n if (char === '\"' && next === '\"') {\n index += 1\n continue\n }\n if (char === '\"') {\n doubleQuoted = false\n }\n continue\n }\n\n if (char === \"'\") {\n singleQuoted = true\n continue\n }\n\n if (char === '\"') {\n doubleQuoted = true\n continue\n }\n\n if (char === '(') {\n const relationHead = extractRelationHead(select.slice(tokenStart, index))\n if (isIdentifierPath(relationHead)) {\n return true\n }\n tokenStart = index + 1\n continue\n }\n\n if (char === ',' || char === ')') {\n tokenStart = index + 1\n }\n }\n\n return false\n}\n\nfunction toStructuredSelectString(columns: string | string[]): string {\n return Array.isArray(columns) ? columns.join(',') : columns\n}\n\ntype StructuredWhereOperand =\n | AthenaJsonValue\n | AthenaJsonArray\n | AthenaJsonObject\n\nfunction buildStructuredWhere(\n conditions: AthenaGatewayCondition[] | undefined,\n): AthenaJsonObject | null | undefined {\n if (!conditions?.length) return undefined\n\n const where: AthenaJsonObject = {}\n\n for (const condition of conditions) {\n if (!condition.column) {\n return null\n }\n if (condition.value_cast !== undefined) {\n return null\n }\n\n const operand = condition.value as StructuredWhereOperand | undefined\n const operator = condition.operator\n if (operator === 'eq') {\n if (operand === undefined) return null\n } else if (operator === 'neq' || operator === 'gt' || operator === 'lt') {\n if (operand === undefined) return null\n } else if (operator === 'in') {\n if (!Array.isArray(operand)) return null\n } else {\n return null\n }\n\n const existing = where[condition.column]\n if (existing !== undefined && (typeof existing !== 'object' || existing === null || Array.isArray(existing))) {\n return null\n }\n\n const next = (existing as AthenaJsonObject | undefined) ?? {}\n if (Object.prototype.hasOwnProperty.call(next, operator)) {\n return null\n }\n next[operator] = operand as AthenaJsonValue | AthenaJsonArray\n where[condition.column] = next\n }\n\n return where\n}\n\nfunction buildStructuredOrderBy(order: AthenaSortBy | undefined): AthenaJsonObject | undefined {\n if (!order?.field) return undefined\n return {\n [order.field]: order.direction === 'descending' ? 'desc' : 'asc',\n }\n}\n\nexport interface StructuredSelectTransportInput {\n tableName: string\n columns: string | string[]\n conditions?: AthenaGatewayCondition[]\n limit?: number\n offset?: number\n order?: AthenaSortBy\n stripNulls: boolean\n count?: 'exact' | 'planned' | 'estimated'\n head?: boolean\n}\n\nexport interface StructuredSelectTransportResult {\n payload: AthenaFetchPayload\n select: string\n}\n\nexport function buildStructuredSelectTransport(\n input: StructuredSelectTransportInput,\n): StructuredSelectTransportResult | null | { error: string } {\n const select = toStructuredSelectString(input.columns).trim()\n if (!select || select === '*') {\n return null\n }\n\n if (!hasSchemaQualifiedRelationToken(select)) {\n return null\n }\n\n if (input.count !== undefined || input.head !== undefined) {\n return {\n error:\n 'Schema-qualified nested select strings require structured select transport, which does not support count/head options in athena-js yet.',\n }\n }\n\n const where = buildStructuredWhere(input.conditions)\n if (where === null) {\n return {\n error:\n 'Schema-qualified nested select strings only support eq, neq, gt, lt, and in filters in athena-js structured select transport.',\n }\n }\n\n return {\n select,\n payload: {\n table_name: input.tableName,\n select,\n where,\n orderBy: buildStructuredOrderBy(input.order),\n limit: input.limit,\n offset: input.offset,\n strip_nulls: input.stripNulls,\n },\n }\n}\n","import { buildStructuredSelectTransport } from './gateway/structured-select.ts'\nimport type {\n AthenaFetchPayload,\n AthenaGatewayCallOptions,\n AthenaGatewayCondition,\n AthenaJsonObject,\n AthenaSortBy,\n} from './gateway/types.ts'\nimport { shouldUseUuidTextComparison } from './query-ast.ts'\nimport type {\n AthenaOrderBy,\n AthenaSelectShape,\n AthenaWhere,\n AthenaWhereBooleanOperand,\n AthenaWhereOperatorInput,\n} from './query-ast.ts'\n\r\ntype AthenaFindManyAstOrderColumn<Row> =\r\n [Extract<keyof NonNullable<Row>, string>] extends [never] ? string : Extract<keyof NonNullable<Row>, string>\r\n\r\nexport interface AthenaSelectExecutionState {\r\n conditions: AthenaGatewayCondition[]\r\n limit?: number\r\n offset?: number\r\n order?: AthenaSortBy\r\n currentPage?: number\r\n pageSize?: number\r\n totalPages?: number\r\n}\r\n\r\nexport type AthenaFindManyAstPayload<\r\n Row,\r\n TSelect extends AthenaSelectShape,\r\n> = {\r\n table_name: string\r\n select: TSelect\r\n where?: AthenaWhere<Row>\r\n orderBy?: AthenaOrderBy<Row>\r\n limit?: number\r\n}\r\n\r\nexport interface AthenaResolvedPagination {\r\n limit?: number\r\n offset?: number\r\n}\r\n\r\nexport interface AthenaTypedSelectQueryInput {\r\n tableName: string\r\n columns: string | string[]\r\n conditions: AthenaGatewayCondition[]\r\n limit?: number\r\n offset?: number\r\n currentPage?: number\r\n pageSize?: number\r\n order?: AthenaSortBy\r\n}\r\n\r\nexport interface AthenaSelectDebugPlan {\r\n columns: string | string[]\r\n conditions?: AthenaGatewayCondition[]\r\n limit?: number\r\n offset?: number\r\n currentPage?: number\r\n pageSize?: number\r\n order?: AthenaSortBy\r\n}\r\n\r\nexport type AthenaSelectTransportPlan =\n | {\r\n kind: 'query'\r\n query: string\r\n payload: {\r\n query: string\r\n }\r\n }\r\n | {\r\n kind: 'fetch'\r\n payload: AthenaFetchPayload\r\n debug: AthenaSelectDebugPlan\r\n }\n\nexport function canUseFindManyAstTransport(state: AthenaSelectExecutionState): boolean {\n return (\r\n state.conditions.length === 0 &&\r\n state.offset === undefined &&\r\n state.currentPage === undefined &&\r\n state.pageSize === undefined &&\r\n state.totalPages === undefined\r\n )\r\n}\r\n\r\nexport function toFindManyAstOrder<Row>(order?: AthenaSortBy): AthenaOrderBy<Row> | undefined {\r\n if (!order) {\r\n return undefined\r\n }\r\n return {\r\n column: order.field as AthenaFindManyAstOrderColumn<Row>,\r\n ascending: order.direction !== 'descending',\r\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction normalizeFindManyAstColumnPredicate(\n value: unknown,\n): AthenaWhereOperatorInput {\n if (!isRecord(value)) {\n return {\n eq: value as AthenaWhereOperatorInput['eq'],\n }\n }\n\n const normalized: AthenaWhereOperatorInput = {}\n for (const [key, operand] of Object.entries(value)) {\n if (operand !== undefined) {\n normalized[key as keyof AthenaWhereOperatorInput] = operand as never\n }\n }\n return normalized\n}\n\nfunction normalizeFindManyAstBooleanOperand<Row>(\n clause: AthenaWhereBooleanOperand<Row>,\n): AthenaWhereBooleanOperand<Row> {\n const normalized: Record<string, unknown> = {}\n for (const [column, value] of Object.entries(clause as Record<string, unknown>)) {\n if (value === undefined) {\n continue\n }\n normalized[column] = normalizeFindManyAstColumnPredicate(value)\n }\n return normalized as AthenaWhereBooleanOperand<Row>\n}\n\nexport function normalizeFindManyAstWhere<Row>(\n where?: AthenaWhere<Row>,\n): AthenaWhere<Row> | undefined {\n if (!where || !isRecord(where)) {\n return where\n }\n\n const normalized: AthenaJsonObject = {}\n for (const [key, value] of Object.entries(where as Record<string, unknown>)) {\n if (value === undefined) {\n continue\n }\n if (key === 'or' && Array.isArray(value)) {\n normalized.or = value.map(clause =>\n normalizeFindManyAstBooleanOperand(clause as AthenaWhereBooleanOperand<Row>),\n ) as unknown as AthenaJsonObject['or']\n continue\n }\n if (key === 'not' && isRecord(value)) {\n normalized.not = normalizeFindManyAstBooleanOperand(\n value as AthenaWhereBooleanOperand<Row>,\n ) as unknown as AthenaJsonObject['not']\n continue\n }\n normalized[key] = normalizeFindManyAstColumnPredicate(value)\n }\n\n return normalized as AthenaWhere<Row>\n}\n\nfunction predicateRequiresUuidQueryFallback(\n column: string,\n value: unknown,\n): boolean {\n if (!isRecord(value)) {\n return shouldUseUuidTextComparison(column, value as Parameters<typeof shouldUseUuidTextComparison>[1])\n }\n\n const eqValue = value.eq\n return eqValue !== undefined\n && shouldUseUuidTextComparison(column, eqValue as Parameters<typeof shouldUseUuidTextComparison>[1])\n}\n\nfunction booleanOperandRequiresUuidQueryFallback<Row>(\n clause: AthenaWhereBooleanOperand<Row>,\n): boolean {\n for (const [column, value] of Object.entries(clause as Record<string, unknown>)) {\n if (value === undefined) {\n continue\n }\n if (predicateRequiresUuidQueryFallback(column, value)) {\n return true\n }\n }\n return false\n}\n\nexport function findManyAstWhereRequiresLegacyTransport<Row>(\n where?: AthenaWhere<Row>,\n): boolean {\n if (!where || !isRecord(where)) {\n return false\n }\n\n for (const [key, value] of Object.entries(where as Record<string, unknown>)) {\n if (value === undefined) {\n continue\n }\n if (key === 'or' && Array.isArray(value)) {\n if (\n value.some(clause =>\n booleanOperandRequiresUuidQueryFallback(clause as AthenaWhereBooleanOperand<Row>),\n )\n ) {\n return true\n }\n continue\n }\n if (key === 'not' && isRecord(value)) {\n if (booleanOperandRequiresUuidQueryFallback(value as AthenaWhereBooleanOperand<Row>)) {\n return true\n }\n continue\n }\n if (predicateRequiresUuidQueryFallback(key, value)) {\n return true\n }\n }\n\n return false\n}\n\nexport function resolvePagination(input: {\n limit?: number\r\n offset?: number\r\n currentPage?: number\r\n pageSize?: number\r\n}): AthenaResolvedPagination {\r\n let limit = input.limit\r\n let offset = input.offset\r\n\r\n if (limit === undefined && input.pageSize !== undefined) {\r\n limit = Math.max(0, Math.trunc(input.pageSize))\r\n }\r\n if (\r\n offset === undefined &&\r\n input.pageSize !== undefined &&\r\n input.currentPage !== undefined &&\r\n input.currentPage > 0\r\n ) {\r\n offset = (Math.trunc(input.currentPage) - 1) * Math.max(0, Math.trunc(input.pageSize))\r\n }\r\n\r\n return { limit, offset }\r\n}\r\n\r\nfunction hasTypedEqualityComparison(conditions: AthenaGatewayCondition[] | undefined): boolean {\n return (\n conditions?.some(\r\n condition =>\r\n condition.operator === 'eq' &&\r\n (condition.value_cast !== undefined || condition.column_cast !== undefined),\r\n ) ?? false\r\n )\n}\n\nexport function createSelectTransportPlan(input: {\n tableName: string\n columns: string | string[]\n state: AthenaSelectExecutionState\r\n options?: AthenaGatewayCallOptions\r\n buildTypedSelectQuery: (input: AthenaTypedSelectQueryInput) => string | null\r\n}): AthenaSelectTransportPlan {\r\n const conditions = input.state.conditions.length\n ? input.state.conditions.map(condition => ({ ...condition }))\n : undefined\n\n const pagination = resolvePagination({\n limit: input.state.limit,\n offset: input.state.offset,\n currentPage: input.state.currentPage,\r\n pageSize: input.state.pageSize,\r\n })\r\n const stripNulls = input.options?.stripNulls ?? true\r\n const structuredSelectTransport = buildStructuredSelectTransport({\r\n tableName: input.tableName,\r\n columns: input.columns,\r\n conditions,\r\n limit: pagination.limit,\r\n offset: pagination.offset,\r\n order: input.state.order,\r\n stripNulls,\r\n count: input.options?.count,\r\n head: input.options?.head,\r\n })\r\n if (structuredSelectTransport && 'error' in structuredSelectTransport) {\r\n throw new Error(structuredSelectTransport.error)\r\n }\r\n if (structuredSelectTransport) {\n const { payload, select } = structuredSelectTransport\n return {\n kind: 'fetch',\r\n payload,\r\n debug: {\r\n columns: select,\r\n conditions,\r\n limit: pagination.limit,\r\n offset: pagination.offset,\r\n order: input.state.order,\r\n },\n }\n }\n\n if (hasTypedEqualityComparison(conditions) && !input.options?.head && !input.options?.count && conditions) {\n const query = input.buildTypedSelectQuery({\n tableName: input.tableName,\n columns: input.columns,\n conditions,\n limit: input.state.limit,\n offset: input.state.offset,\n currentPage: input.state.currentPage,\n pageSize: input.state.pageSize,\n order: input.state.order,\n })\n if (query) {\n return {\n kind: 'query',\n query,\n payload: { query },\n }\n }\n }\n\n return {\n kind: 'fetch',\r\n payload: {\r\n table_name: input.tableName,\r\n columns: input.columns,\r\n conditions,\r\n limit: input.state.limit,\r\n offset: input.state.offset,\r\n current_page: input.state.currentPage,\r\n page_size: input.state.pageSize,\r\n total_pages: input.state.totalPages,\r\n sort_by: input.state.order,\r\n strip_nulls: stripNulls,\r\n count: input.options?.count,\r\n head: input.options?.head,\r\n },\r\n debug: {\r\n columns: input.columns,\r\n conditions,\r\n limit: input.state.limit,\r\n offset: input.state.offset,\r\n currentPage: input.state.currentPage,\r\n pageSize: input.state.pageSize,\r\n order: input.state.order,\r\n },\r\n }\r\n}\r\n","import type {\r\n AthenaDeletePayload,\r\n AthenaFetchPayload,\r\n AthenaGatewayCondition,\r\n AthenaInsertPayload,\r\n AthenaJsonObject,\r\n AthenaRpcFilter,\r\n AthenaRpcPayload,\r\n AthenaSortBy,\r\n AthenaUpdatePayload,\r\n} from './gateway/types.ts'\r\nimport type {\r\n AthenaFindManyOptions,\r\n AthenaOrderBy,\r\n AthenaSelectShape,\r\n AthenaValidatedSelectShape,\r\n AthenaWhere,\r\n} from './query-ast.ts'\r\nimport type { AthenaFindManyAstPayload, AthenaSelectTransportPlan } from './query-transport.ts'\r\n\r\nconst ATHENA_DEBUG_AST_KEY = '__athenaDebugAst' as const\r\n\r\nexport interface AthenaTableBuilderStateAst {\r\n conditions: AthenaGatewayCondition[]\r\n limit?: number\r\n offset?: number\r\n order?: AthenaSortBy\r\n currentPage?: number\r\n pageSize?: number\r\n totalPages?: number\r\n}\r\n\r\nexport interface AthenaRpcBuilderStateAst {\r\n filters: AthenaRpcFilter[]\r\n limit?: number\r\n offset?: number\r\n order?: {\r\n column: string\r\n ascending?: boolean\r\n }\r\n}\r\n\r\nexport type AthenaDebugQueryEndpoint =\r\n | '/gateway/fetch'\r\n | '/gateway/insert'\r\n | '/gateway/update'\r\n | '/gateway/delete'\r\n | '/gateway/rpc'\r\n | '/gateway/query'\r\n | `/rpc/${string}`\r\n\r\ninterface AthenaDebugAstBase<TKind extends string> {\r\n version: 1\r\n kind: TKind\r\n}\r\n\r\nexport type AthenaSelectDebugTransport =\r\n | {\r\n mode: 'compiled-fetch' | 'structured-fetch'\r\n endpoint: '/gateway/fetch'\r\n payload: AthenaFetchPayload\r\n }\r\n | {\r\n mode: 'typed-query'\r\n endpoint: '/gateway/query'\r\n payload: {\r\n query: string\r\n }\r\n }\r\n\r\nexport interface AthenaSelectDebugAst extends AthenaDebugAstBase<'select'> {\r\n tableName: string\r\n input: {\r\n columns: string | string[]\r\n state: AthenaTableBuilderStateAst\r\n }\r\n transport: AthenaSelectDebugTransport\r\n}\r\n\r\nexport type AthenaFindManyDebugTransport<\r\n Row = Record<string, unknown>,\r\n TSelect extends AthenaSelectShape = AthenaSelectShape,\r\n> =\r\n | {\r\n mode: 'direct-ast-fetch'\r\n endpoint: '/gateway/fetch'\r\n payload: AthenaFindManyAstPayload<Row, TSelect>\r\n }\r\n | {\r\n mode: 'compiled-fetch' | 'structured-fetch'\r\n endpoint: '/gateway/fetch'\r\n payload: AthenaFetchPayload\r\n }\r\n | {\r\n mode: 'compiled-query'\r\n endpoint: '/gateway/query'\r\n payload: {\r\n query: string\r\n }\r\n }\r\n\r\nexport interface AthenaFindManyDebugAst<\r\n Row = Record<string, unknown>,\r\n TSelect extends AthenaSelectShape = AthenaSelectShape,\r\n> extends AthenaDebugAstBase<'findMany'> {\r\n tableName: string\r\n input: {\r\n select: AthenaValidatedSelectShape<TSelect>\r\n where?: AthenaWhere<Row>\r\n orderBy?: AthenaOrderBy<Row>\r\n limit?: number\r\n }\r\n compiled: {\r\n columns: string\r\n baseState: AthenaTableBuilderStateAst\r\n executionState: AthenaTableBuilderStateAst\r\n }\r\n transport: AthenaFindManyDebugTransport<Row, TSelect>\r\n}\r\n\r\nexport interface AthenaInsertDebugAst extends AthenaDebugAstBase<'insert'> {\r\n tableName: string\r\n input: {\r\n values: AthenaInsertPayload['insert_body']\r\n returning?: AthenaInsertPayload['columns']\r\n count?: AthenaInsertPayload['count']\r\n head?: boolean\r\n defaultToNull?: boolean\r\n }\r\n transport: {\r\n mode: 'insert'\r\n endpoint: '/gateway/insert'\r\n payload: AthenaInsertPayload\r\n }\r\n}\r\n\r\nexport interface AthenaUpsertDebugAst extends AthenaDebugAstBase<'upsert'> {\r\n tableName: string\r\n input: {\r\n values: AthenaInsertPayload['insert_body']\r\n updateBody?: AthenaInsertPayload['update_body']\r\n onConflict?: AthenaInsertPayload['on_conflict']\r\n returning?: AthenaInsertPayload['columns']\r\n count?: AthenaInsertPayload['count']\r\n head?: boolean\r\n defaultToNull?: boolean\r\n }\r\n transport: {\r\n mode: 'upsert'\r\n endpoint: '/gateway/insert'\r\n payload: AthenaInsertPayload\r\n }\r\n}\r\n\r\nexport interface AthenaUpdateDebugAst extends AthenaDebugAstBase<'update'> {\r\n tableName: string\r\n input: {\r\n values: AthenaUpdatePayload['set']\r\n state: AthenaTableBuilderStateAst\r\n returning?: AthenaUpdatePayload['columns']\r\n }\r\n transport: {\r\n mode: 'update'\r\n endpoint: '/gateway/update'\r\n payload: AthenaUpdatePayload\r\n }\r\n}\r\n\r\nexport interface AthenaDeleteDebugAst extends AthenaDebugAstBase<'delete'> {\r\n tableName: string\r\n input: {\r\n resourceId?: AthenaDeletePayload['resource_id']\r\n state: AthenaTableBuilderStateAst\r\n returning?: AthenaDeletePayload['columns']\r\n }\r\n transport: {\r\n mode: 'delete'\r\n endpoint: '/gateway/delete'\r\n payload: AthenaDeletePayload\r\n }\r\n}\r\n\r\nexport interface AthenaRpcDebugAst extends AthenaDebugAstBase<'rpc'> {\r\n functionName: string\r\n input: {\r\n args?: AthenaJsonObject\r\n select?: string | string[]\r\n state: AthenaRpcBuilderStateAst\r\n }\r\n transport: {\r\n mode: 'rpc-post' | 'rpc-get'\r\n endpoint: '/gateway/rpc' | `/rpc/${string}`\r\n payload: AthenaRpcPayload\r\n }\r\n}\r\n\r\nexport interface AthenaRawQueryDebugAst extends AthenaDebugAstBase<'query'> {\r\n input: {\r\n query: string\r\n }\r\n transport: {\r\n mode: 'raw-query'\r\n endpoint: '/gateway/query'\r\n payload: {\r\n query: string\r\n }\r\n }\r\n}\r\n\r\nexport type AthenaQueryDebugAst =\r\n | AthenaSelectDebugAst\r\n | AthenaFindManyDebugAst\r\n | AthenaInsertDebugAst\r\n | AthenaUpsertDebugAst\r\n | AthenaUpdateDebugAst\r\n | AthenaDeleteDebugAst\r\n | AthenaRpcDebugAst\r\n | AthenaRawQueryDebugAst\r\n\r\nfunction cloneConditions(conditions: AthenaGatewayCondition[]): AthenaGatewayCondition[] {\r\n return conditions.map(condition => ({ ...condition }))\r\n}\r\n\r\nexport function cloneTableBuilderStateAst(\r\n state: AthenaTableBuilderStateAst,\r\n): AthenaTableBuilderStateAst {\r\n return {\r\n conditions: cloneConditions(state.conditions),\r\n limit: state.limit,\r\n offset: state.offset,\r\n order: state.order ? { ...state.order } : undefined,\r\n currentPage: state.currentPage,\r\n pageSize: state.pageSize,\r\n totalPages: state.totalPages,\r\n }\r\n}\r\n\r\nexport function cloneRpcBuilderStateAst(\r\n state: AthenaRpcBuilderStateAst,\r\n): AthenaRpcBuilderStateAst {\r\n return {\r\n filters: state.filters.map(filter => ({ ...filter })),\r\n limit: state.limit,\r\n offset: state.offset,\r\n order: state.order ? { ...state.order } : undefined,\r\n }\r\n}\r\n\r\nfunction toSelectTransportAst(plan: AthenaSelectTransportPlan): AthenaSelectDebugTransport {\r\n if (plan.kind === 'query') {\r\n return {\r\n mode: 'typed-query',\r\n endpoint: '/gateway/query',\r\n payload: plan.payload,\r\n }\r\n }\r\n\r\n return {\r\n mode: plan.payload.select !== undefined ? 'structured-fetch' : 'compiled-fetch',\r\n endpoint: '/gateway/fetch',\r\n payload: plan.payload,\r\n }\r\n}\r\n\r\nfunction resolveDebugTableName(tableName: string | undefined): string {\r\n return tableName ?? '__unknown_table__'\r\n}\r\n\r\nexport function buildSelectDebugAst(input: {\r\n tableName: string\r\n columns: string | string[]\r\n state: AthenaTableBuilderStateAst\r\n plan: AthenaSelectTransportPlan\r\n}): AthenaSelectDebugAst {\r\n return {\r\n version: 1,\r\n kind: 'select',\r\n tableName: input.tableName,\r\n input: {\r\n columns: input.columns,\r\n state: cloneTableBuilderStateAst(input.state),\r\n },\r\n transport: toSelectTransportAst(input.plan),\r\n }\r\n}\r\n\r\nexport function buildFindManyCompiledDebugAst<\r\n Row,\r\n TSelect extends AthenaSelectShape,\r\n>(input: {\r\n tableName: string\r\n options: AthenaFindManyOptions<Row, TSelect> & {\r\n select: AthenaValidatedSelectShape<TSelect>\r\n }\r\n compiledColumns: string\r\n baseState: AthenaTableBuilderStateAst\r\n executionState: AthenaTableBuilderStateAst\r\n plan: AthenaSelectTransportPlan\r\n}): AthenaFindManyDebugAst<Row, TSelect> {\r\n return {\r\n version: 1,\r\n kind: 'findMany',\r\n tableName: input.tableName,\r\n input: {\r\n select: input.options.select,\r\n where: input.options.where,\r\n orderBy: input.options.orderBy,\r\n limit: input.options.limit,\r\n },\r\n compiled: {\r\n columns: input.compiledColumns,\r\n baseState: cloneTableBuilderStateAst(input.baseState),\r\n executionState: cloneTableBuilderStateAst(input.executionState),\r\n },\r\n transport: planToFindManyTransport<Row, TSelect>(input.plan),\r\n }\r\n}\r\n\r\nexport function buildFindManyDirectDebugAst<\r\n Row,\r\n TSelect extends AthenaSelectShape,\r\n>(input: {\r\n tableName: string\r\n options: AthenaFindManyOptions<Row, TSelect> & {\r\n select: AthenaValidatedSelectShape<TSelect>\r\n }\r\n compiledColumns: string\r\n baseState: AthenaTableBuilderStateAst\r\n executionState: AthenaTableBuilderStateAst\r\n payload: AthenaFindManyAstPayload<Row, TSelect>\r\n}): AthenaFindManyDebugAst<Row, TSelect> {\r\n return {\r\n version: 1,\r\n kind: 'findMany',\r\n tableName: input.tableName,\r\n input: {\r\n select: input.options.select,\r\n where: input.options.where,\r\n orderBy: input.options.orderBy,\r\n limit: input.options.limit,\r\n },\r\n compiled: {\r\n columns: input.compiledColumns,\r\n baseState: cloneTableBuilderStateAst(input.baseState),\r\n executionState: cloneTableBuilderStateAst(input.executionState),\r\n },\r\n transport: {\r\n mode: 'direct-ast-fetch',\r\n endpoint: '/gateway/fetch',\r\n payload: input.payload,\r\n },\r\n }\r\n}\r\n\r\nfunction planToFindManyTransport<\r\n Row,\r\n TSelect extends AthenaSelectShape,\r\n>(\r\n plan: AthenaSelectTransportPlan,\r\n): AthenaFindManyDebugTransport<Row, TSelect> {\r\n if (plan.kind === 'query') {\r\n return {\r\n mode: 'compiled-query',\r\n endpoint: '/gateway/query',\r\n payload: plan.payload,\r\n }\r\n }\r\n\r\n return {\r\n mode: plan.payload.select !== undefined ? 'structured-fetch' : 'compiled-fetch',\r\n endpoint: '/gateway/fetch',\r\n payload: plan.payload,\r\n }\r\n}\r\n\r\nexport function buildInsertDebugAst(payload: AthenaInsertPayload): AthenaInsertDebugAst {\r\n return {\r\n version: 1,\r\n kind: 'insert',\r\n tableName: payload.table_name,\r\n input: {\r\n values: payload.insert_body,\r\n returning: payload.columns,\r\n count: payload.count,\r\n head: payload.head,\r\n defaultToNull: payload.default_to_null,\r\n },\r\n transport: {\r\n mode: 'insert',\r\n endpoint: '/gateway/insert',\r\n payload,\r\n },\r\n }\r\n}\r\n\r\nexport function buildUpsertDebugAst(payload: AthenaInsertPayload): AthenaUpsertDebugAst {\r\n return {\r\n version: 1,\r\n kind: 'upsert',\r\n tableName: payload.table_name,\r\n input: {\r\n values: payload.insert_body,\r\n updateBody: payload.update_body,\r\n onConflict: payload.on_conflict,\r\n returning: payload.columns,\r\n count: payload.count,\r\n head: payload.head,\r\n defaultToNull: payload.default_to_null,\r\n },\r\n transport: {\r\n mode: 'upsert',\r\n endpoint: '/gateway/insert',\r\n payload,\r\n },\r\n }\r\n}\r\n\r\nexport function buildUpdateDebugAst(input: {\r\n state: AthenaTableBuilderStateAst\r\n payload: AthenaUpdatePayload\r\n}): AthenaUpdateDebugAst {\r\n return {\r\n version: 1,\r\n kind: 'update',\r\n tableName: resolveDebugTableName(input.payload.table_name),\r\n input: {\r\n values: input.payload.set,\r\n state: cloneTableBuilderStateAst(input.state),\r\n returning: input.payload.columns,\r\n },\r\n transport: {\r\n mode: 'update',\r\n endpoint: '/gateway/update',\r\n payload: input.payload,\r\n },\r\n }\r\n}\r\n\r\nexport function buildDeleteDebugAst(input: {\r\n state: AthenaTableBuilderStateAst\r\n payload: AthenaDeletePayload\r\n}): AthenaDeleteDebugAst {\r\n return {\r\n version: 1,\r\n kind: 'delete',\r\n tableName: input.payload.table_name,\r\n input: {\r\n resourceId: input.payload.resource_id,\r\n state: cloneTableBuilderStateAst(input.state),\r\n returning: input.payload.columns,\r\n },\r\n transport: {\r\n mode: 'delete',\r\n endpoint: '/gateway/delete',\r\n payload: input.payload,\r\n },\r\n }\r\n}\r\n\r\nexport function buildRpcDebugAst(input: {\r\n functionName: string\r\n args?: AthenaJsonObject\r\n selectedColumns?: string | string[]\r\n state: AthenaRpcBuilderStateAst\r\n payload: AthenaRpcPayload\r\n endpoint: '/gateway/rpc' | `/rpc/${string}`\r\n}): AthenaRpcDebugAst {\r\n return {\r\n version: 1,\r\n kind: 'rpc',\r\n functionName: input.functionName,\r\n input: {\r\n args: input.args,\r\n select: input.selectedColumns,\r\n state: cloneRpcBuilderStateAst(input.state),\r\n },\r\n transport: {\r\n mode: input.endpoint === '/gateway/rpc' ? 'rpc-post' : 'rpc-get',\r\n endpoint: input.endpoint,\r\n payload: input.payload,\r\n },\r\n }\r\n}\r\n\r\nexport function buildRawQueryDebugAst(query: string): AthenaRawQueryDebugAst {\r\n return {\r\n version: 1,\r\n kind: 'query',\r\n input: {\r\n query,\r\n },\r\n transport: {\r\n mode: 'raw-query',\r\n endpoint: '/gateway/query',\r\n payload: {\r\n query,\r\n },\r\n },\r\n }\r\n}\r\n\r\nexport function attachAthenaDebugAst(\r\n target: unknown,\r\n ast: AthenaQueryDebugAst | undefined,\r\n): void {\r\n if (!ast) {\r\n return\r\n }\r\n if (!target || (typeof target !== 'object' && typeof target !== 'function')) {\r\n return\r\n }\r\n Object.defineProperty(target, ATHENA_DEBUG_AST_KEY, {\r\n value: ast,\r\n enumerable: false,\r\n configurable: true,\r\n writable: false,\r\n })\r\n}\r\n\r\nexport function getAthenaDebugAst(\r\n value: unknown,\r\n): AthenaQueryDebugAst | null {\r\n if (!value || (typeof value !== 'object' && typeof value !== 'function')) {\r\n return null\r\n }\r\n return ((value as Record<string, unknown>)[ATHENA_DEBUG_AST_KEY] as AthenaQueryDebugAst | undefined) ?? null\r\n}\r\n","import { attachAthenaDebugAst } from './query-debug-ast.ts'\r\nimport type {\r\n AthenaClientExperimentalOptions,\r\n AthenaQueryTraceCallsite,\r\n AthenaQueryTraceEvent,\r\n AthenaResult,\r\n} from './client.ts'\r\nimport type {\r\n AthenaGatewayCallOptions,\r\n AthenaRpcCallOptions,\r\n} from './gateway/types.ts'\r\nimport type { AthenaQueryDebugAst } from './query-debug-ast.ts'\r\n\r\nconst QUERY_TRACE_STACK_SKIP_PATTERNS = [\r\n 'src\\\\client.ts',\r\n 'src/client.ts',\r\n 'src\\\\query-tracing.ts',\r\n 'src/query-tracing.ts',\r\n 'dist\\\\client.',\r\n 'dist/client.',\r\n 'dist\\\\query-tracing.',\r\n 'dist/query-tracing.',\r\n 'node_modules\\\\@xylex-group\\\\athena',\r\n 'node_modules/@xylex-group/athena',\r\n 'node:internal',\r\n 'internal/process',\r\n] as const\r\n\r\ntype AthenaTraceOperation = AthenaQueryTraceEvent['operation']\r\ntype AthenaTraceEndpoint = AthenaQueryTraceEvent['endpoint']\r\n\r\nexport interface AthenaTraceContext {\r\n operation: AthenaTraceOperation\r\n endpoint: AthenaTraceEndpoint\r\n table?: string\r\n functionName?: string\r\n sql: string\r\n payload: unknown\r\n ast?: AthenaQueryDebugAst\r\n options?: AthenaGatewayCallOptions | AthenaRpcCallOptions\r\n}\r\n\r\nexport type AthenaQueryTracer = {\r\n captureCallsite: () => AthenaQueryTraceCallsite | null\r\n publishSuccess: <T>(\r\n context: AthenaTraceContext,\r\n result: AthenaResult<T>,\r\n durationMs: number,\r\n callsite: AthenaQueryTraceCallsite | null,\r\n ) => void\r\n publishFailure: (\r\n context: AthenaTraceContext,\r\n error: unknown,\r\n durationMs: number,\r\n callsite: AthenaQueryTraceCallsite | null,\r\n ) => void\r\n}\r\n\r\nexport type AthenaTraceCallsiteStore = {\r\n resolve: (callsite?: AthenaQueryTraceCallsite | null) => AthenaQueryTraceCallsite | null\r\n}\r\n\r\nfunction parseQueryTraceCallsiteFrame(frame: string): AthenaQueryTraceCallsite | null {\r\n const trimmed = frame.trim()\r\n if (!trimmed) {\r\n return null\r\n }\r\n\r\n let body = trimmed.replace(/^at\\s+/, '')\r\n if (body.startsWith('async ')) {\r\n body = body.slice(6)\r\n }\r\n\r\n let functionName: string | undefined\r\n let location = body\r\n const wrappedMatch = body.match(/^(.*?)\\s+\\((.*)\\)$/)\r\n if (wrappedMatch) {\r\n functionName = wrappedMatch[1].trim() || undefined\r\n location = wrappedMatch[2].trim()\r\n }\r\n\r\n const locationMatch = location.match(/^(.*):(\\d+):(\\d+)$/)\r\n if (!locationMatch) {\r\n return null\r\n }\r\n\r\n const filePath = locationMatch[1].replace(/^file:\\/\\//, '')\r\n const line = Number(locationMatch[2])\r\n const column = Number(locationMatch[3])\r\n if (!Number.isFinite(line) || !Number.isFinite(column)) {\r\n return null\r\n }\r\n\r\n const normalizedPath = filePath.replace(/\\\\/g, '/')\r\n const fileName = normalizedPath.split('/').at(-1) ?? filePath\r\n return {\r\n filePath,\r\n fileName,\r\n line,\r\n column,\r\n frame: trimmed,\r\n functionName,\r\n }\r\n}\r\n\r\nfunction captureQueryTraceCallsite(): AthenaQueryTraceCallsite | null {\r\n const stack = new Error().stack\r\n if (!stack) return null\r\n const frames = stack\r\n .split('\\n')\r\n .slice(2)\r\n .map(frame => frame.trim())\r\n .filter(Boolean)\r\n\r\n for (const frame of frames) {\r\n if (QUERY_TRACE_STACK_SKIP_PATTERNS.some(pattern => frame.includes(pattern))) {\r\n continue\r\n }\r\n const callsite = parseQueryTraceCallsiteFrame(frame)\r\n if (callsite) return callsite\r\n }\r\n\r\n const fallback = frames.find(frame => !frame.includes('captureQueryTraceCallsite'))\r\n return fallback ? parseQueryTraceCallsiteFrame(fallback) : null\r\n}\r\n\r\nfunction defaultQueryTraceLogger(event: AthenaQueryTraceEvent): void {\r\n const target = event.table ?? event.functionName ?? 'gateway'\r\n const outcomeState = event.outcome?.error ? 'error' : 'ok'\r\n const banner = `[athena-js][trace] ${event.operation.toUpperCase()} ${event.endpoint} ${target} ${event.durationMs}ms ${outcomeState}`\r\n console.info(banner, event)\r\n}\r\n\r\nexport function captureTraceCallsite(tracer?: AthenaQueryTracer): AthenaQueryTraceCallsite | null {\r\n return tracer?.captureCallsite() ?? null\r\n}\r\n\r\nexport function createTraceCallsiteStore(\r\n tracer?: AthenaQueryTracer,\r\n initialCallsite?: AthenaQueryTraceCallsite | null,\r\n): AthenaTraceCallsiteStore {\r\n let storedCallsite = initialCallsite ?? undefined\r\n\r\n return {\r\n resolve(callsite) {\r\n if (callsite) {\r\n storedCallsite = callsite\r\n return callsite\r\n }\r\n if (storedCallsite !== undefined) {\r\n return storedCallsite\r\n }\r\n const capturedCallsite = captureTraceCallsite(tracer)\r\n if (capturedCallsite) {\r\n storedCallsite = capturedCallsite\r\n }\r\n return capturedCallsite\r\n },\r\n }\r\n}\r\n\r\nexport function createQueryTracer(\r\n experimental?: AthenaClientExperimentalOptions,\r\n): AthenaQueryTracer | undefined {\r\n const traceOption = experimental?.traceQueries\r\n if (!traceOption) {\r\n return undefined\r\n }\r\n\r\n const logger =\r\n typeof traceOption === 'object' && traceOption.logger ? traceOption.logger : defaultQueryTraceLogger\r\n\r\n const emit = (event: AthenaQueryTraceEvent) => {\r\n try {\r\n logger(event)\r\n } catch (error) {\r\n console.warn('[athena-js][trace] logger failed', error)\r\n }\r\n }\r\n\r\n return {\r\n captureCallsite: captureQueryTraceCallsite,\r\n publishSuccess<T>(\r\n context: AthenaTraceContext,\r\n result: AthenaResult<T>,\r\n durationMs: number,\r\n callsite: AthenaQueryTraceCallsite | null,\r\n ) {\r\n emit({\r\n timestamp: new Date().toISOString(),\r\n durationMs,\r\n operation: context.operation,\r\n endpoint: context.endpoint,\r\n table: context.table,\r\n functionName: context.functionName,\r\n sql: context.sql,\r\n payload: context.payload,\r\n ast: context.ast,\r\n options: context.options,\r\n callsite,\r\n outcome: {\r\n status: result.status,\r\n error: result.error,\r\n errorDetails: result.errorDetails ?? null,\r\n count: result.count ?? null,\r\n data: result.data,\r\n raw: result.raw,\r\n },\r\n })\r\n },\r\n publishFailure(\r\n context: AthenaTraceContext,\r\n error: unknown,\r\n durationMs: number,\r\n callsite: AthenaQueryTraceCallsite | null,\r\n ) {\r\n emit({\r\n timestamp: new Date().toISOString(),\r\n durationMs,\r\n operation: context.operation,\r\n endpoint: context.endpoint,\r\n table: context.table,\r\n functionName: context.functionName,\r\n sql: context.sql,\r\n payload: context.payload,\r\n ast: context.ast,\r\n options: context.options,\r\n callsite,\r\n thrownError: error,\r\n })\r\n },\r\n }\r\n}\r\n\r\nexport async function executeWithQueryTrace<T>(\r\n tracer: AthenaQueryTracer | undefined,\r\n context: AthenaTraceContext,\r\n runner: () => Promise<AthenaResult<T>>,\r\n callsiteOverride?: AthenaQueryTraceCallsite | null,\r\n): Promise<AthenaResult<T>> {\r\n const callsite = tracer ? (callsiteOverride ?? tracer.captureCallsite()) : null\r\n const startedAt = tracer ? Date.now() : 0\r\n try {\r\n const result = await runner()\r\n attachAthenaDebugAst(result, context.ast)\r\n if (tracer) {\r\n tracer.publishSuccess(context, result, Date.now() - startedAt, callsite)\r\n }\r\n return result\r\n } catch (error) {\r\n attachAthenaDebugAst(error, context.ast)\r\n if (tracer) {\r\n tracer.publishFailure(context, error, Date.now() - startedAt, callsite)\r\n }\r\n throw error\r\n }\r\n}\r\n","import type { AthenaModelTarget } from './types.ts'\r\n\r\ninterface ResolveAthenaModelTargetTableNameOptions {\r\n fallbackSchema?: string\r\n fallbackModel?: string\r\n}\r\n\r\nfunction normalizeOptionalName(value: string | undefined): string | undefined {\r\n const normalized = value?.trim()\r\n return normalized ? normalized : undefined\r\n}\r\n\r\nexport function isAthenaModelTarget(value: unknown): value is AthenaModelTarget {\r\n if (!value || typeof value !== 'object') {\r\n return false\r\n }\r\n\r\n const candidate = value as { meta?: { primaryKey?: unknown } }\r\n return Boolean(candidate.meta && Array.isArray(candidate.meta.primaryKey))\r\n}\r\n\r\nexport function resolveAthenaModelTargetTableName(\r\n target: AthenaModelTarget,\r\n options: ResolveAthenaModelTargetTableNameOptions = {},\r\n): string {\r\n const explicitTableName = normalizeOptionalName(target.meta.tableName)\r\n if (explicitTableName) {\r\n return explicitTableName\r\n }\r\n\r\n const schemaName = normalizeOptionalName(target.meta.schema ?? options.fallbackSchema)\r\n const modelName = normalizeOptionalName(target.meta.model ?? options.fallbackModel)\r\n\r\n if (!modelName) {\r\n throw new Error(\r\n 'Athena model target is missing meta.model or meta.tableName. Provide one of those before calling from(model).',\r\n )\r\n }\r\n\r\n return schemaName ? `${schemaName}.${modelName}` : modelName\r\n}\r\n","import type {\r\n AthenaConditionArrayValue,\r\n AthenaConditionCastType,\r\n AthenaConditionOperator,\r\n AthenaConditionValue,\r\n AthenaDeletePayload,\r\n AthenaGatewayCallOptions,\r\n AthenaGatewayConnectionOptions,\r\n AthenaGatewayConnectionResult,\r\n AthenaGatewayCondition,\r\n AthenaGatewayErrorDetails,\r\n AthenaGatewayResponse,\r\n AthenaInsertPayload,\r\n AthenaJsonObject,\r\n AthenaJsonValue,\r\n AthenaRpcCallOptions,\r\n AthenaRpcFilter,\r\n AthenaRpcFilterOperator,\r\n AthenaRpcPayload,\r\n AthenaSortBy,\r\n AthenaUpdatePayload,\r\n} from './gateway/types.ts'\r\nimport type { BackendConfig, BackendType } from './gateway/types.ts'\r\nimport { createAthenaGatewayClient } from './gateway/client.ts'\r\nimport { normalizeAthenaGatewayBaseUrl } from './gateway/url.ts'\r\nimport { quoteQualifiedIdentifier, quoteSelectColumnToken, quoteSelectColumnsExpression } from './sql-identifiers.ts'\r\nimport { createAuthClient } from './auth/client.ts'\r\nimport type { AthenaAuthBindings, AthenaAuthClientConfig } from './auth/types.ts'\r\nimport { normalizeAthenaError, withRetry } from './auxiliaries.ts'\r\nimport type { AthenaOperationContext, NormalizedAthenaError, RetryConfig } from './auxiliaries.ts'\r\nimport { createDbModule } from './db/module.ts'\r\nimport type { AthenaDbModule } from './db/module.ts'\r\nimport { createStorageModule } from './storage/module.ts'\r\nimport type { AthenaStorageClientConfig, AthenaStorageModule } from './storage/module.ts'\r\nimport { createAthenaClientBuilder, toBackendConfig } from './client-builder.ts'\r\nimport {\r\n compileOrderBy,\r\n compileSelectShape,\r\n compileWhere,\r\n selectShapeUsesRelationSchema,\r\n shouldUseUuidTextComparison,\r\n} from './query-ast.ts'\r\nimport type {\r\n AthenaFindManyOptions,\r\n AthenaFindManyResult,\r\n AthenaSelectShape,\r\n AthenaValidatedSelectShape,\r\n} from './query-ast.ts'\r\nimport {\r\n canUseFindManyAstTransport,\r\n createSelectTransportPlan,\r\n findManyAstWhereRequiresLegacyTransport,\r\n normalizeFindManyAstWhere,\r\n resolvePagination,\r\n toFindManyAstOrder,\r\n} from './query-transport.ts'\r\nimport type { AthenaFindManyAstPayload } from './query-transport.ts'\r\nimport {\r\n buildDeleteDebugAst,\r\n buildFindManyCompiledDebugAst,\r\n buildFindManyDirectDebugAst,\r\n buildInsertDebugAst,\r\n buildRawQueryDebugAst,\r\n buildRpcDebugAst,\r\n buildSelectDebugAst,\r\n buildUpdateDebugAst,\r\n buildUpsertDebugAst,\r\n} from './query-debug-ast.ts'\r\nimport type { AthenaQueryDebugAst } from './query-debug-ast.ts'\r\nimport {\r\n captureTraceCallsite,\r\n createQueryTracer,\r\n createTraceCallsiteStore,\r\n executeWithQueryTrace,\r\n} from './query-tracing.ts'\r\nimport type {\r\n AthenaQueryTracer,\r\n} from './query-tracing.ts'\r\nimport {\r\n isAthenaModelTarget,\r\n resolveAthenaModelTargetTableName,\r\n} from './schema/model-target.ts'\r\nimport type {\r\n AthenaSelectInput,\r\n AthenaTypecheckedColumnKey,\r\n AthenaValidatedSelectInput,\r\n} from './select-column-types.ts'\r\nimport type {\r\n AthenaModelTarget,\r\n InsertOf,\r\n RowOf,\r\n UpdateOf,\r\n} from './schema/types.ts'\r\n\r\nexport interface AthenaResult<T> {\r\n data: T | null\r\n error: AthenaResultError | null\r\n statusText?: string | null\r\n /**\r\n * @deprecated Prefer `error?.gatewayCode`, `error?.hint`, and related fields on `error`.\r\n */\r\n errorDetails?: AthenaGatewayErrorDetails | null\r\n status: number\r\n count?: number | null\r\n raw: unknown\r\n}\r\n\r\nexport interface AthenaResultError {\r\n message: string\r\n code: string | null\r\n athenaCode: NormalizedAthenaError['code']\r\n gatewayCode?: AthenaGatewayErrorDetails['code'] | null\r\n kind: NormalizedAthenaError['kind']\r\n category: NormalizedAthenaError['category']\r\n retryable: boolean\r\n details: unknown | null\r\n hint: string | null\r\n status: number\r\n statusText: string | null\r\n constraint?: string\r\n table?: string\r\n operation?: string\r\n endpoint?: AthenaGatewayErrorDetails['endpoint']\r\n method?: AthenaGatewayErrorDetails['method']\r\n requestId?: string\r\n cause?: string\r\n raw: unknown\r\n}\r\n\r\nexport interface AthenaClientExperimentalOptions {\r\n /**\r\n * @deprecated Failed `AthenaResult` values now include normalized structured `error`\r\n * envelopes by default. This flag is retained as a no-op compatibility switch.\r\n */\r\n enableErrorNormalization?: boolean\r\n /**\r\n * Retry retryable read failures (`select`, `findMany`, `query`) with a fixed internal policy.\r\n *\r\n * Applies two additional attempts with exponential backoff and jitter.\r\n */\r\n retryReads?: boolean\r\n /**\r\n * Emit execution diagnostics for every query/mutation/RPC invocation.\r\n * Includes payload, synthesized SQL, full outcome, and best-effort callsite metadata.\r\n */\r\n traceQueries?: boolean | AthenaQueryTraceOptions\r\n /**\r\n * Build and attach a normalized operation AST for runtime debugging.\r\n *\r\n * When enabled, successful Athena results expose a non-enumerable debug AST\r\n * that can be read with `getAthenaDebugAst(...)`. If tracing is also enabled,\r\n * the same AST is included on emitted trace events.\r\n */\r\n debugAst?: boolean\r\n /**\r\n * Compile-time opt-in for validating simple `select(...)`, `order(...)`, and\r\n * RPC filter column names against known row keys.\r\n *\r\n * This flag is type-only. It does not change runtime request behavior.\r\n */\r\n typecheckColumns?: boolean\r\n /**\r\n * Send the original `findMany(...)` AST body for clean object-select reads.\r\n * This requires gateway support and falls back to legacy compiled transport\r\n * when a chain carries filter/pagination state that the AST payload cannot\r\n * represent losslessly yet.\r\n */\r\n findManyAst?: boolean\r\n /**\r\n * Expose the experimental `client.storage.*` bindings for Athena storage APIs.\r\n */\r\n athenaStorageBackend?: boolean\r\n /**\r\n * Optional storage SDK runtime hooks. Only used when `athenaStorageBackend` is enabled.\r\n */\r\n storage?: AthenaStorageClientConfig\r\n}\r\n\r\nexport interface AthenaQueryTraceOptions {\r\n /**\r\n * Custom sink for trace events. Defaults to console.info.\r\n */\r\n logger?: (event: AthenaQueryTraceEvent) => void\r\n}\r\n\r\nexport interface AthenaQueryTraceCallsite {\r\n filePath: string\r\n fileName: string\r\n line: number\r\n column: number\r\n frame?: string\r\n functionName?: string\r\n}\r\n\r\nexport interface AthenaQueryTraceEvent {\r\n timestamp: string\r\n durationMs: number\r\n operation: 'select' | 'insert' | 'upsert' | 'update' | 'delete' | 'rpc' | 'query'\r\n endpoint: '/gateway/fetch' | '/gateway/insert' | '/gateway/update' | '/gateway/delete' | '/gateway/rpc' | '/gateway/query' | `/rpc/${string}`\r\n table?: string\r\n functionName?: string\r\n sql: string\r\n payload: unknown\r\n ast?: AthenaQueryDebugAst\r\n options?: AthenaGatewayCallOptions | AthenaRpcCallOptions\r\n callsite: AthenaQueryTraceCallsite | null\r\n outcome?: {\r\n status: number\r\n error: AthenaResultError | null\r\n errorDetails?: AthenaGatewayErrorDetails | null\r\n count?: number | null\r\n data: unknown\r\n raw: unknown\r\n }\r\n thrownError?: unknown\r\n}\r\n\r\ntype TableBuilderState = {\r\n conditions: AthenaGatewayCondition[]\r\n limit?: number\r\n offset?: number\r\n order?: AthenaSortBy\r\n currentPage?: number\r\n pageSize?: number\r\n totalPages?: number\r\n}\r\n\r\ntype ConditionCastHints = {\r\n valueCast?: AthenaConditionCastType\r\n columnCast?: AthenaConditionCastType\r\n}\r\n\r\ntype MutationSingleResult<Result> = Result extends Array<infer Item> ? Item | null : Result | null\r\ntype MutationResultRow<Result> = Result extends Array<infer Item> ? Item : Result\r\ntype AthenaRowShape = Record<string, AthenaJsonValue | undefined>\r\ntype FilterColumnKey<Row> = Extract<keyof NonNullable<Row>, string>\r\ntype ResolvedFilterColumnKey<Row> = [FilterColumnKey<Row>] extends [never] ? string : FilterColumnKey<Row>\r\ntype SelectColumnsFor<\r\n Row,\r\n TStrict extends boolean,\r\n TValue extends AthenaSelectInput,\r\n> = TStrict extends true ? AthenaValidatedSelectInput<Row, TValue> : TValue\r\nconst DEFAULT_COLUMNS = '*'\r\nconst SAFE_CAST_PATTERN = /^[a-z_][a-z0-9_]*(?:\\[\\])?$/i\r\nconst ATHENA_NORMALIZED_ERROR_KEY = '__athenaNormalizedError' as const\r\n\r\ntype SelectDebugAstFactory = (input: {\r\n tableName: string\r\n columns: string | string[]\r\n executionState: TableBuilderState\r\n plan: ReturnType<typeof createSelectTransportPlan>\r\n}) => AthenaQueryDebugAst\r\n\r\nexport interface MutationQuery<\r\n Result,\r\n Row = MutationResultRow<Result>,\r\n TStrict extends boolean = false,\r\n> extends PromiseLike<AthenaResult<Result>> {\r\n select<const TColumns extends AthenaSelectInput = string>(\r\n columns?: SelectColumnsFor<Row, TStrict, TColumns>,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<Result>>\r\n returning<const TColumns extends AthenaSelectInput = string>(\r\n columns?: SelectColumnsFor<Row, TStrict, TColumns>,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<Result>>\r\n single<const TColumns extends AthenaSelectInput = string>(\r\n columns?: SelectColumnsFor<Row, TStrict, TColumns>,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<MutationSingleResult<Result>>>\r\n maybeSingle<const TColumns extends AthenaSelectInput = string>(\r\n columns?: SelectColumnsFor<Row, TStrict, TColumns>,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<MutationSingleResult<Result>>>\r\n then<TResult1 = AthenaResult<Result>, TResult2 = never>(\r\n onfulfilled?: ((value: AthenaResult<Result>) => TResult1 | PromiseLike<TResult1>) | undefined | null,\r\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | undefined | null,\r\n ): Promise<TResult1 | TResult2>\r\n catch<TResult = never>(\r\n onrejected?: ((reason: unknown) => TResult | PromiseLike<TResult>) | undefined | null,\r\n ): Promise<AthenaResult<Result> | TResult>\r\n finally(onfinally?: (() => void) | undefined | null): Promise<AthenaResult<Result>>\r\n}\r\n\r\nfunction formatResult<T>(response: AthenaGatewayResponse<T>): AthenaResult<T> {\r\n const result: AthenaResult<T> = {\r\n data: response.data ?? null,\r\n error: null,\r\n errorDetails: response.errorDetails ?? null,\r\n status: response.status,\r\n statusText: response.statusText ?? null,\r\n raw: response.raw,\r\n }\r\n if (response.count !== undefined) {\r\n result.count = response.count\r\n }\r\n return result\r\n}\r\n\r\ntype AthenaResultFormatter = <T>(\r\n response: AthenaGatewayResponse<T>,\r\n context?: AthenaOperationContext,\r\n) => AthenaResult<T>\r\n\r\nconst EXPERIMENTAL_READ_RETRY_CONFIG: RetryConfig = {\r\n retries: 2,\r\n baseDelayMs: 100,\r\n maxDelayMs: 1_000,\r\n backoff: 'exponential',\r\n jitter: true,\r\n}\r\n\r\nfunction attachNormalizedError<T>(\r\n result: AthenaResult<T>,\r\n normalizedError: NormalizedAthenaError,\r\n): void {\r\n Object.defineProperty(result, ATHENA_NORMALIZED_ERROR_KEY, {\r\n value: normalizedError,\r\n enumerable: false,\r\n configurable: true,\r\n writable: false,\r\n })\r\n}\r\n\r\nfunction createResultFormatter(\r\n experimental?: AthenaClientExperimentalOptions,\r\n): AthenaResultFormatter {\r\n void experimental\r\n return <T>(response: AthenaGatewayResponse<T>, context?: AthenaOperationContext): AthenaResult<T> => {\r\n const result = formatResult(response)\r\n if (response.error == null && response.errorDetails == null) {\r\n return result\r\n }\r\n const normalizedError = normalizeAthenaError(\r\n {\r\n ...result,\r\n error: response.error ?? response.errorDetails?.message ?? null,\r\n },\r\n context,\r\n )\r\n result.error = createResultError(response, result, normalizedError)\r\n attachNormalizedError(result, normalizedError)\r\n return result\r\n }\r\n}\r\n\r\nasync function executeExperimentalRead<T>(\r\n experimental: AthenaClientExperimentalOptions | undefined,\r\n runner: () => Promise<AthenaResult<T>>,\r\n): Promise<AthenaResult<T>> {\r\n if (!experimental?.retryReads) {\r\n return runner()\r\n }\r\n\r\n let lastRetryableResult: AthenaResult<T> | undefined\r\n let lastRetrySignal: AthenaResultError | null = null\r\n try {\r\n return await withRetry(\r\n {\r\n ...EXPERIMENTAL_READ_RETRY_CONFIG,\r\n shouldRetry: error =>\r\n error === lastRetrySignal || normalizeAthenaError(error).retryable,\r\n },\r\n async () => {\r\n const result = await runner()\r\n if (result.error?.retryable) {\r\n lastRetryableResult = result\r\n lastRetrySignal = result.error\r\n throw lastRetrySignal\r\n }\r\n return result\r\n },\r\n )\r\n } catch (error) {\r\n if (lastRetryableResult && error === lastRetrySignal) {\r\n return lastRetryableResult\r\n }\r\n throw error\r\n }\r\n}\r\n\r\nfunction isRecord(value: unknown): value is Record<string, unknown> {\r\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\r\n}\r\n\r\nfunction firstNonEmptyString(...values: unknown[]): string | undefined {\r\n for (const value of values) {\r\n if (typeof value === 'string' && value.trim().length > 0) {\r\n return value.trim()\r\n }\r\n }\r\n return undefined\r\n}\r\n\r\nfunction resolveStructuredErrorPayload(raw: unknown): Record<string, unknown> | null {\r\n if (!isRecord(raw)) return null\r\n return isRecord(raw.error) ? raw.error : raw\r\n}\r\n\r\nfunction resolveStructuredErrorDetails(payload: Record<string, unknown> | null, message: string): unknown | null {\r\n if (!payload || !('details' in payload)) {\r\n return null\r\n }\r\n const details = payload.details\r\n if (details == null) {\r\n return null\r\n }\r\n if (typeof details === 'string' && details.trim() === message.trim()) {\r\n return null\r\n }\r\n return details\r\n}\r\n\r\nfunction createResultError<T>(\r\n response: AthenaGatewayResponse<T>,\r\n result: AthenaResult<T>,\r\n normalized: NormalizedAthenaError,\r\n): AthenaResultError {\r\n const rawRecord = isRecord(response.raw) ? response.raw : null\r\n const payload = resolveStructuredErrorPayload(response.raw)\r\n const message =\r\n firstNonEmptyString(\r\n response.error,\r\n payload?.message,\r\n payload?.error,\r\n payload?.details,\r\n response.errorDetails?.message,\r\n normalized.message,\r\n ) ?? normalized.message\r\n const statusText =\r\n firstNonEmptyString(response.statusText, rawRecord?.statusText) ?? null\r\n const hint =\r\n firstNonEmptyString(payload?.hint, response.errorDetails?.hint) ?? null\r\n const code =\r\n firstNonEmptyString(payload?.code) ??\r\n normalized.code\r\n const details =\r\n resolveStructuredErrorDetails(payload, message) ??\r\n response.errorDetails?.cause ??\r\n null\r\n\r\n return {\r\n message,\r\n code,\r\n athenaCode: normalized.code,\r\n gatewayCode: response.errorDetails?.code ?? null,\r\n kind: normalized.kind,\r\n category: normalized.category,\r\n retryable: normalized.retryable,\r\n details,\r\n hint,\r\n status: result.status,\r\n statusText,\r\n constraint: normalized.constraint,\r\n table: normalized.table,\r\n operation: normalized.operation,\r\n endpoint: response.errorDetails?.endpoint,\r\n method: response.errorDetails?.method,\r\n requestId: response.errorDetails?.requestId,\r\n cause: response.errorDetails?.cause,\r\n raw: result.raw,\r\n }\r\n}\r\n\r\n\r\nfunction toSingleResult<Result>(response: AthenaResult<Result>): AthenaResult<MutationSingleResult<Result>> {\r\n const payload = response.data\r\n const singleData =\r\n Array.isArray(payload) ? (payload.length ? payload[0] : null) : payload ?? null\r\n return {\r\n ...response,\r\n data: singleData as MutationSingleResult<Result>,\r\n }\r\n}\r\n\r\nfunction mergeOptions<T extends { headers?: Record<string, string> }>(\r\n ...options: Array<T | undefined>\r\n): T | undefined {\r\n return options.reduce<T | undefined>((acc, next) => {\r\n if (!next) return acc\r\n const merged = { ...(acc ?? {}), ...next } as T\r\n if (acc?.headers || next.headers) {\r\n merged.headers = {\r\n ...(acc?.headers ?? {}),\r\n ...(next.headers ?? {}),\r\n }\r\n }\r\n return merged\r\n }, undefined)\r\n}\r\n\r\nfunction asAthenaJsonObject(value: unknown): AthenaJsonObject {\r\n return value as unknown as AthenaJsonObject\r\n}\r\n\r\nfunction asAthenaJsonObjectArray(values: unknown[]): AthenaJsonObject[] {\r\n return values as unknown as AthenaJsonObject[]\r\n}\r\n\r\nfunction normalizeSelectColumnsInput(columns?: AthenaSelectInput): string | string[] | undefined {\r\n if (columns === undefined) {\r\n return undefined\r\n }\r\n if (typeof columns === 'string') {\r\n return columns\r\n }\r\n return [...columns]\r\n}\r\n\r\nfunction createMutationQuery<\r\n Result,\r\n Row = MutationResultRow<Result>,\r\n TStrict extends boolean = false,\r\n>(\r\n executor: (\r\n columns?: string | string[],\r\n options?: AthenaGatewayCallOptions,\r\n callsite?: AthenaQueryTraceCallsite | null,\r\n ) => Promise<AthenaResult<Result>>,\r\n defaultColumns: AthenaSelectInput | null = DEFAULT_COLUMNS,\r\n tracer?: AthenaQueryTracer,\r\n initialCallsite?: AthenaQueryTraceCallsite | null,\r\n): MutationQuery<Result, Row, TStrict> {\r\n let selectedColumns: AthenaSelectInput | undefined = defaultColumns === null ? undefined : defaultColumns\r\n let selectedOptions: AthenaGatewayCallOptions | undefined\r\n let promise: Promise<AthenaResult<Result>> | null = null\r\n const callsiteStore = createTraceCallsiteStore(tracer, initialCallsite)\r\n\r\n const run = (\r\n columns?: AthenaSelectInput,\r\n options?: AthenaGatewayCallOptions,\r\n callsite?: AthenaQueryTraceCallsite | null,\r\n ) => {\r\n const payloadColumns = columns ?? selectedColumns\r\n const payloadOptions = options ?? selectedOptions\r\n if (!promise) {\r\n promise = executor(\r\n normalizeSelectColumnsInput(payloadColumns),\r\n payloadOptions,\r\n callsiteStore.resolve(callsite),\r\n )\r\n }\r\n return promise\r\n }\r\n\r\n const mutationQuery: MutationQuery<Result, Row, TStrict> = {\r\n select(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\r\n selectedColumns = columns\r\n selectedOptions = options ?? selectedOptions\r\n return run(columns, options, captureTraceCallsite(tracer))\r\n },\r\n returning(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\r\n return mutationQuery.select(columns, options)\r\n },\r\n single(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\r\n selectedColumns = columns\r\n selectedOptions = options ?? selectedOptions\r\n return run(columns, options, captureTraceCallsite(tracer)).then(toSingleResult)\r\n },\r\n maybeSingle(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\r\n return mutationQuery.single(columns, options)\r\n },\r\n then(onfulfilled, onrejected) {\r\n return run(selectedColumns, selectedOptions).then(onfulfilled, onrejected)\r\n },\r\n catch(onrejected) {\r\n return run(selectedColumns, selectedOptions).catch(onrejected)\r\n },\r\n finally(onfinally) {\r\n return run(selectedColumns, selectedOptions).finally(onfinally)\r\n },\r\n }\r\n\r\n return mutationQuery\r\n}\r\n\r\nexport interface OrderOptions {\r\n ascending?: boolean\r\n}\r\n\r\n/** Shared filter chain - supports eq, limit, etc. in any order relative to select/update */\r\ninterface FilterChain<Self, Row> {\r\n eq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n eqCast(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue, cast: AthenaConditionCastType): Self\r\n eqUuid(column: ResolvedFilterColumnKey<Row>, value: string): Self\r\n match(filters: Partial<Record<ResolvedFilterColumnKey<Row>, AthenaConditionValue>>): Self\r\n range(from: number, to: number): Self\r\n limit(count: number): Self\r\n offset(count: number): Self\r\n currentPage(value: number): Self\r\n pageSize(value: number): Self\r\n totalPages(value: number): Self\r\n order(column: ResolvedFilterColumnKey<Row>, options?: OrderOptions): Self\r\n gt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n gte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n lt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n lte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n neq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n like(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n ilike(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n is(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n in(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue): Self\r\n contains(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue): Self\r\n containedBy(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue): Self\r\n not(\r\n columnOrExpression: ResolvedFilterColumnKey<Row> | string,\r\n operator?: AthenaConditionOperator,\r\n value?: AthenaConditionValue,\r\n ): Self\r\n or(expression: string): Self\r\n}\r\n\r\n/** Chain returned by select() - supports filters and single/maybeSingle before execution */\r\nexport interface SelectChain<Row, SelectedRow = Row, TStrict extends boolean = false>\r\n extends FilterChain<SelectChain<Row, SelectedRow, TStrict>, Row>, PromiseLike<AthenaResult<SelectedRow[]>> {\r\n single<\r\n T = SelectedRow,\r\n const TColumns extends AthenaSelectInput = string,\r\n >(\r\n columns?: SelectColumnsFor<Row, TStrict, TColumns>,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<T | null>>\r\n maybeSingle<\r\n T = SelectedRow,\r\n const TColumns extends AthenaSelectInput = string,\r\n >(\r\n columns?: SelectColumnsFor<Row, TStrict, TColumns>,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<T | null>>\r\n}\r\n\r\n/** Chain returned by update() - supports filters before execution, plus select/returning */\r\nexport interface UpdateChain<Row, TStrict extends boolean = false>\r\n extends FilterChain<UpdateChain<Row, TStrict>, Row>, MutationQuery<Row[], Row, TStrict> {}\r\n\r\ninterface RpcFilterChain<Self, Row, TStrict extends boolean = false> {\r\n eq(column: AthenaTypecheckedColumnKey<Row, TStrict>, value: AthenaConditionValue): Self\r\n neq(column: AthenaTypecheckedColumnKey<Row, TStrict>, value: AthenaConditionValue): Self\r\n gt(column: AthenaTypecheckedColumnKey<Row, TStrict>, value: AthenaConditionValue): Self\r\n gte(column: AthenaTypecheckedColumnKey<Row, TStrict>, value: AthenaConditionValue): Self\r\n lt(column: AthenaTypecheckedColumnKey<Row, TStrict>, value: AthenaConditionValue): Self\r\n lte(column: AthenaTypecheckedColumnKey<Row, TStrict>, value: AthenaConditionValue): Self\r\n like(column: AthenaTypecheckedColumnKey<Row, TStrict>, value: AthenaConditionValue): Self\r\n ilike(column: AthenaTypecheckedColumnKey<Row, TStrict>, value: AthenaConditionValue): Self\r\n is(column: AthenaTypecheckedColumnKey<Row, TStrict>, value: AthenaConditionValue): Self\r\n in(column: AthenaTypecheckedColumnKey<Row, TStrict>, values: AthenaConditionArrayValue): Self\r\n}\r\n\r\nexport interface RpcOrderOptions {\r\n ascending?: boolean\r\n}\r\n\r\nexport interface RpcQueryBuilder<Row, TStrict extends boolean = false>\r\n extends RpcFilterChain<RpcQueryBuilder<Row, TStrict>, Row, TStrict>, PromiseLike<AthenaResult<Row[]>> {\r\n select<const TColumns extends AthenaSelectInput = string>(\r\n columns?: SelectColumnsFor<Row, TStrict, TColumns>,\r\n options?: AthenaRpcCallOptions,\r\n ): Promise<AthenaResult<Row[]>>\r\n single<\r\n T = Row,\r\n const TColumns extends AthenaSelectInput = string,\r\n >(\r\n columns?: SelectColumnsFor<Row, TStrict, TColumns>,\r\n options?: AthenaRpcCallOptions,\r\n ): Promise<AthenaResult<T | null>>\r\n maybeSingle<\r\n T = Row,\r\n const TColumns extends AthenaSelectInput = string,\r\n >(\r\n columns?: SelectColumnsFor<Row, TStrict, TColumns>,\r\n options?: AthenaRpcCallOptions,\r\n ): Promise<AthenaResult<T | null>>\r\n order(column: AthenaTypecheckedColumnKey<Row, TStrict>, options?: RpcOrderOptions): RpcQueryBuilder<Row, TStrict>\r\n limit(count: number): RpcQueryBuilder<Row, TStrict>\r\n offset(count: number): RpcQueryBuilder<Row, TStrict>\r\n range(from: number, to: number): RpcQueryBuilder<Row, TStrict>\r\n}\r\n\r\nexport interface AthenaFromOptions {\r\n schema?: string\r\n}\r\n\r\nexport interface TableQueryBuilder<\r\n Row,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n TContext = unknown,\r\n TStrict extends boolean = false,\r\n> extends FilterChain<TableQueryBuilder<Row, Insert, Update, TContext, TStrict>, Row> {\r\n select<\r\n T = Row,\r\n const TColumns extends AthenaSelectInput = string,\r\n >(\r\n columns?: SelectColumnsFor<Row, TStrict, TColumns>,\r\n options?: AthenaGatewayCallOptions,\r\n ): SelectChain<Row, T, TStrict>\r\n findMany<const TSelect extends AthenaSelectShape>(\r\n options: AthenaFindManyOptions<Row, TSelect> & {\r\n select: AthenaValidatedSelectShape<TSelect>\r\n },\r\n ): Promise<AthenaResult<Array<AthenaFindManyResult<Row, TSelect, TContext>>>>\r\n insert(values: Insert, options?: AthenaGatewayCallOptions): MutationQuery<Row, Row, TStrict>\r\n insert(values: Insert[], options?: AthenaGatewayCallOptions): MutationQuery<Row[], Row, TStrict>\r\n upsert(\r\n values: Insert,\r\n options?: AthenaGatewayCallOptions & {\r\n updateBody?: Update\r\n onConflict?: string | string[]\r\n },\r\n ): MutationQuery<Row, Row, TStrict>\r\n upsert(\r\n values: Insert[],\r\n options?: AthenaGatewayCallOptions & {\r\n updateBody?: Update\r\n onConflict?: string | string[]\r\n },\r\n ): MutationQuery<Row[], Row, TStrict>\r\n update(values: Update, options?: AthenaGatewayCallOptions): UpdateChain<Row, TStrict>\r\n delete(options?: AthenaGatewayCallOptions & { resourceId?: string }): MutationQuery<Row | null, Row, TStrict>\r\n single<\r\n T = Row,\r\n const TColumns extends AthenaSelectInput = string,\r\n >(\r\n columns?: SelectColumnsFor<Row, TStrict, TColumns>,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<T | null>>\r\n maybeSingle<\r\n T = Row,\r\n const TColumns extends AthenaSelectInput = string,\r\n >(\r\n columns?: SelectColumnsFor<Row, TStrict, TColumns>,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<T | null>>\r\n reset(): TableQueryBuilder<Row, Insert, Update, TContext, TStrict>\r\n}\r\n\r\nfunction getResourceId(state: TableBuilderState): string | undefined {\r\n const candidate = state.conditions.find(\r\n condition =>\r\n condition.operator === 'eq' &&\r\n (condition.column === 'resource_id' || condition.column === 'id'),\r\n )\r\n return candidate?.value?.toString()\r\n}\r\n\r\nfunction stringifyFilterValue(value: AthenaConditionValue | AthenaConditionArrayValue | string): string {\r\n if (Array.isArray(value)) {\r\n return value.join(',')\r\n }\r\n return String(value)\r\n}\r\n\r\nfunction normalizeCast(cast: AthenaConditionCastType): string {\r\n const normalized = cast.trim().toLowerCase()\r\n if (!SAFE_CAST_PATTERN.test(normalized)) {\r\n throw new Error(`Invalid cast type \"${cast}\"`)\r\n }\r\n return normalized\r\n}\r\n\r\nfunction escapeSqlStringLiteral(value: string): string {\r\n return value.replace(/'/g, \"''\")\r\n}\r\n\r\nfunction toSqlLiteral(value: AthenaConditionValue): string {\r\n if (value === null) return 'NULL'\r\n if (typeof value === 'number') return Number.isFinite(value) ? String(value) : 'NULL'\r\n if (typeof value === 'boolean') return value ? 'TRUE' : 'FALSE'\r\n return `'${escapeSqlStringLiteral(value)}'`\r\n}\r\n\r\nfunction withCast(expression: string, cast?: AthenaConditionCastType): string {\r\n if (!cast) return expression\r\n return `${expression}::${normalizeCast(cast)}`\r\n}\r\n\r\nfunction buildSelectColumnsClause(columns: string | string[]): string {\r\n if (Array.isArray(columns)) {\r\n return columns.map(column => quoteSelectColumnToken(column)).join(', ')\r\n }\r\n return quoteSelectColumnsExpression(columns)\r\n}\r\n\r\ninterface ParsedIdentifierSegment {\r\n normalizedValue: string\r\n}\r\n\r\nfunction parseIdentifierSegment(input: string): ParsedIdentifierSegment | null {\r\n const trimmed = input.trim()\r\n if (!trimmed) return null\r\n\r\n if (!trimmed.startsWith('\"')) {\r\n return {\r\n normalizedValue: trimmed.toLowerCase(),\r\n }\r\n }\r\n\r\n let value = ''\r\n let index = 1\r\n let closed = false\r\n while (index < trimmed.length) {\r\n const char = trimmed[index]\r\n const next = index + 1 < trimmed.length ? trimmed[index + 1] : ''\r\n if (char === '\"' && next === '\"') {\r\n value += '\"'\r\n index += 2\r\n continue\r\n }\r\n if (char === '\"') {\r\n closed = true\r\n index += 1\r\n break\r\n }\r\n value += char\r\n index += 1\r\n }\r\n\r\n if (!closed || trimmed.slice(index).trim().length > 0 || !value.trim()) {\r\n return null\r\n }\r\n\r\n return {\r\n normalizedValue: value,\r\n }\r\n}\r\n\r\nfunction splitQualifiedTableName(tableName: string): { schemaSegment: string } | null {\r\n const trimmed = tableName.trim()\r\n let inQuotes = false\r\n for (let index = 0; index < trimmed.length; index += 1) {\r\n const char = trimmed[index]\r\n const next = index + 1 < trimmed.length ? trimmed[index + 1] : ''\r\n if (char === '\"') {\r\n if (inQuotes && next === '\"') {\r\n index += 1\r\n continue\r\n }\r\n inQuotes = !inQuotes\r\n continue\r\n }\r\n if (char === '.' && !inQuotes) {\r\n const schemaSegment = trimmed.slice(0, index).trim()\r\n const tableSegment = trimmed.slice(index + 1).trim()\r\n if (!schemaSegment || !tableSegment) {\r\n return null\r\n }\r\n return { schemaSegment }\r\n }\r\n }\r\n return null\r\n}\r\n\r\nfunction resolveTableNameForCall(tableName: string, schema: string | undefined): string {\r\n if (!schema) return tableName\r\n const normalizedSchema = schema.trim()\r\n if (!normalizedSchema) {\r\n throw new Error('schema option must be a non-empty string')\r\n }\r\n const normalizedTableName = tableName.trim()\r\n const parsedSchema = parseIdentifierSegment(normalizedSchema)\r\n if (!parsedSchema) {\r\n throw new Error('schema option must be a non-empty string')\r\n }\r\n const qualified = splitQualifiedTableName(normalizedTableName)\r\n if (qualified) {\r\n const parsedTableSchema = parseIdentifierSegment(qualified.schemaSegment)\r\n const sameSchema = parsedTableSchema\r\n ? parsedTableSchema.normalizedValue === parsedSchema.normalizedValue\r\n : normalizedTableName.startsWith(`${normalizedSchema}.`)\r\n if (sameSchema) {\r\n return normalizedTableName\r\n }\r\n throw new Error(\r\n `schema option \"${normalizedSchema}\" conflicts with schema-qualified table \"${normalizedTableName}\"`,\r\n )\r\n }\r\n return `${normalizedSchema}.${normalizedTableName}`\r\n}\r\n\r\nfunction conditionToSqlClause(condition: AthenaGatewayCondition): string | null {\r\n if (!condition.column) return null\r\n const column = withCast(quoteQualifiedIdentifier(condition.column), condition.column_cast)\r\n const value = condition.value\r\n const sqlOperator = {\r\n eq: '=',\r\n neq: '!=',\r\n gt: '>',\r\n gte: '>=',\r\n lt: '<',\r\n lte: '<=',\r\n like: 'LIKE',\r\n ilike: 'ILIKE',\r\n } as const\r\n\r\n switch (condition.operator) {\r\n case 'eq':\r\n case 'neq':\r\n case 'gt':\r\n case 'gte':\r\n case 'lt':\r\n case 'lte':\r\n case 'like':\r\n case 'ilike': {\r\n if (Array.isArray(value) || value === undefined) return null\r\n const rhs = withCast(toSqlLiteral(value), condition.value_cast)\r\n return `${column} ${sqlOperator[condition.operator]} ${rhs}`\r\n }\r\n case 'is': {\r\n if (value === null) return `${column} IS NULL`\r\n if (value === true) return `${column} IS TRUE`\r\n if (value === false) return `${column} IS FALSE`\r\n return null\r\n }\r\n case 'in': {\r\n if (!Array.isArray(value)) return null\r\n if (value.length === 0) return 'FALSE'\r\n const values = value.map(item => withCast(toSqlLiteral(item), condition.value_cast))\r\n return `${column} IN (${values.join(', ')})`\r\n }\r\n default:\r\n return null\r\n }\r\n}\r\n\r\nfunction buildTypedSelectQuery(input: {\r\n tableName: string\r\n columns: string | string[]\r\n conditions: AthenaGatewayCondition[]\r\n limit?: number\r\n offset?: number\r\n currentPage?: number\r\n pageSize?: number\r\n order?: AthenaSortBy\r\n}): string | null {\r\n const whereClauses: string[] = []\r\n for (const condition of input.conditions) {\r\n const clause = conditionToSqlClause(condition)\r\n if (!clause) return null\r\n whereClauses.push(clause)\r\n }\r\n\r\n let limit = input.limit\r\n let offset = input.offset\r\n if (limit === undefined && input.pageSize !== undefined) {\r\n limit = input.pageSize\r\n }\r\n if (\r\n offset === undefined &&\r\n input.pageSize !== undefined &&\r\n input.currentPage !== undefined &&\r\n input.currentPage > 0\r\n ) {\r\n offset = (input.currentPage - 1) * input.pageSize\r\n }\r\n\r\n const sqlParts = [\r\n `SELECT ${buildSelectColumnsClause(input.columns)} FROM ${quoteQualifiedIdentifier(input.tableName)}`,\r\n ]\r\n\r\n if (whereClauses.length > 0) {\r\n sqlParts.push(`WHERE ${whereClauses.join(' AND ')}`)\r\n }\r\n\r\n if (input.order?.field) {\r\n const direction = input.order.direction === 'descending' ? 'DESC' : 'ASC'\r\n sqlParts.push(`ORDER BY ${quoteQualifiedIdentifier(input.order.field)} ${direction}`)\r\n }\r\n\r\n if (limit !== undefined) {\r\n sqlParts.push(`LIMIT ${Math.max(0, Math.trunc(limit))}`)\r\n }\r\n\r\n if (offset !== undefined) {\r\n sqlParts.push(`OFFSET ${Math.max(0, Math.trunc(offset))}`)\r\n }\r\n\r\n return `${sqlParts.join(' ')};`\r\n}\r\n\r\nfunction sanitizeSqlComment(comment: string): string {\r\n return comment.replace(/\\*\\//g, '* /')\r\n}\r\n\r\nfunction toSqlJsonLiteral(value: AthenaJsonValue | undefined): string {\r\n if (value === undefined) return 'DEFAULT'\r\n if (\r\n value === null ||\r\n typeof value === 'string' ||\r\n typeof value === 'number' ||\r\n typeof value === 'boolean'\r\n ) {\r\n return toSqlLiteral(value)\r\n }\r\n return `'${escapeSqlStringLiteral(JSON.stringify(value))}'::jsonb`\r\n}\r\n\r\nfunction conditionToDebugSqlClause(condition: AthenaGatewayCondition): string {\r\n const exact = conditionToSqlClause(condition)\r\n if (exact) return exact\r\n\r\n const rawCondition = sanitizeSqlComment(JSON.stringify(condition))\r\n if (!condition.column) {\r\n return `TRUE /* unsupported condition: ${rawCondition} */`\r\n }\r\n\r\n const column = withCast(quoteQualifiedIdentifier(condition.column), condition.column_cast)\r\n const value = condition.value\r\n const rhs = withCast(toSqlJsonLiteral(value as AthenaJsonValue | undefined), condition.value_cast)\r\n\r\n switch (condition.operator) {\r\n case 'contains':\r\n return `${column} @> ${rhs}`\r\n case 'containedBy':\r\n return `${column} <@ ${rhs}`\r\n case 'not':\r\n return `TRUE /* NOT expression passthrough: ${rawCondition} */`\r\n case 'or':\r\n return `TRUE /* OR expression passthrough: ${rawCondition} */`\r\n default:\r\n return `TRUE /* unsupported condition: ${rawCondition} */`\r\n }\r\n}\r\n\r\nfunction appendOrderLimitOffset(\r\n sqlParts: string[],\r\n order?: AthenaSortBy,\r\n limit?: number,\r\n offset?: number,\r\n) {\r\n if (order?.field) {\r\n const direction = order.direction === 'descending' ? 'DESC' : 'ASC'\r\n sqlParts.push(`ORDER BY ${quoteQualifiedIdentifier(order.field)} ${direction}`)\r\n }\r\n if (limit !== undefined) {\r\n sqlParts.push(`LIMIT ${Math.max(0, Math.trunc(limit))}`)\r\n }\r\n if (offset !== undefined) {\r\n sqlParts.push(`OFFSET ${Math.max(0, Math.trunc(offset))}`)\r\n }\r\n}\r\n\r\nfunction buildDebugSelectQuery(input: {\r\n tableName: string\r\n columns: string | string[]\r\n conditions?: AthenaGatewayCondition[]\r\n limit?: number\r\n offset?: number\r\n currentPage?: number\r\n pageSize?: number\r\n order?: AthenaSortBy\r\n}): string {\r\n const sqlParts = [\r\n `SELECT ${buildSelectColumnsClause(input.columns)} FROM ${quoteQualifiedIdentifier(input.tableName)}`,\r\n ]\r\n if (input.conditions?.length) {\r\n const whereClauses = input.conditions.map(conditionToDebugSqlClause)\r\n sqlParts.push(`WHERE ${whereClauses.join(' AND ')}`)\r\n }\r\n const pagination = resolvePagination(input)\r\n appendOrderLimitOffset(sqlParts, input.order, pagination.limit, pagination.offset)\r\n return `${sqlParts.join(' ')};`\r\n}\r\n\r\nfunction resolveDebugTableIdentifier(tableName: string | undefined): string {\r\n if (!tableName?.trim()) {\r\n return '\"__unknown_table__\"'\r\n }\r\n return quoteQualifiedIdentifier(tableName)\r\n}\r\n\r\nfunction buildInsertDebugSql(payload: AthenaInsertPayload): string {\r\n const rows = Array.isArray(payload.insert_body)\r\n ? payload.insert_body\r\n : [payload.insert_body]\r\n const columns: string[] = []\r\n const seen = new Set<string>()\r\n for (const row of rows) {\r\n for (const column of Object.keys(row)) {\r\n if (seen.has(column)) continue\r\n seen.add(column)\r\n columns.push(column)\r\n }\r\n }\r\n\r\n const sqlParts = [`INSERT INTO ${quoteQualifiedIdentifier(payload.table_name)}`]\r\n\r\n if (!rows.length || !columns.length) {\r\n sqlParts.push('DEFAULT VALUES')\r\n if (rows.length > 1) {\r\n sqlParts.push(`/* trace: ${rows.length} rows collapsed to DEFAULT VALUES */`)\r\n }\r\n } else {\r\n const valuesClause = rows\r\n .map(row => {\r\n const values = columns.map(column => {\r\n const hasColumn = Object.prototype.hasOwnProperty.call(row, column)\r\n if (!hasColumn) {\r\n return payload.default_to_null ? 'NULL' : 'DEFAULT'\r\n }\r\n const rowValue = (row as Record<string, AthenaJsonValue | undefined>)[column]\r\n return toSqlJsonLiteral(rowValue)\r\n })\r\n return `(${values.join(', ')})`\r\n })\r\n .join(', ')\r\n const columnClause = columns.map(column => quoteQualifiedIdentifier(column)).join(', ')\r\n sqlParts.push(`(${columnClause})`)\r\n sqlParts.push(`VALUES ${valuesClause}`)\r\n }\r\n\r\n if (payload.on_conflict) {\r\n const conflictColumns = Array.isArray(payload.on_conflict)\r\n ? payload.on_conflict.map(column => quoteQualifiedIdentifier(column)).join(', ')\r\n : payload.on_conflict\r\n if (payload.update_body && Object.keys(payload.update_body).length > 0) {\r\n const assignments = Object.entries(payload.update_body).map(([column, value]) =>\r\n `${quoteQualifiedIdentifier(column)} = ${toSqlJsonLiteral(value as AthenaJsonValue)}`,\r\n )\r\n sqlParts.push(`ON CONFLICT (${conflictColumns}) DO UPDATE SET ${assignments.join(', ')}`)\r\n } else {\r\n sqlParts.push(`ON CONFLICT (${conflictColumns}) DO NOTHING`)\r\n }\r\n }\r\n\r\n if (payload.columns) {\r\n sqlParts.push(`RETURNING ${buildSelectColumnsClause(payload.columns)}`)\r\n }\r\n\r\n return `${sqlParts.join(' ')};`\r\n}\r\n\r\nfunction buildUpdateDebugSql(payload: AthenaUpdatePayload): string {\r\n const set = payload.set ?? payload.data ?? {}\r\n const assignments = Object.entries(set).map(([column, value]) =>\r\n `${quoteQualifiedIdentifier(column)} = ${toSqlJsonLiteral(value as AthenaJsonValue)}`,\r\n )\r\n const sqlParts = [\r\n `UPDATE ${resolveDebugTableIdentifier(payload.table_name)} SET ${assignments.length ? assignments.join(', ') : '/* empty set */'}`,\r\n ]\r\n if (payload.conditions?.length) {\r\n const whereClauses = payload.conditions.map(conditionToDebugSqlClause)\r\n sqlParts.push(`WHERE ${whereClauses.join(' AND ')}`)\r\n }\r\n const pagination = resolvePagination({\r\n currentPage: payload.current_page,\r\n pageSize: payload.page_size,\r\n })\r\n appendOrderLimitOffset(sqlParts, payload.sort_by, pagination.limit, pagination.offset)\r\n if (payload.columns) {\r\n sqlParts.push(`RETURNING ${buildSelectColumnsClause(payload.columns)}`)\r\n }\r\n return `${sqlParts.join(' ')};`\r\n}\r\n\r\nfunction buildDeleteDebugSql(payload: AthenaDeletePayload): string {\r\n const sqlParts = [`DELETE FROM ${quoteQualifiedIdentifier(payload.table_name)}`]\r\n const whereClauses: string[] = []\r\n if (payload.resource_id) {\r\n whereClauses.push(`\"resource_id\" = ${toSqlLiteral(payload.resource_id)}`)\r\n }\r\n if (payload.conditions?.length) {\r\n whereClauses.push(...payload.conditions.map(conditionToDebugSqlClause))\r\n }\r\n if (whereClauses.length) {\r\n sqlParts.push(`WHERE ${whereClauses.join(' AND ')}`)\r\n }\r\n const pagination = resolvePagination({\r\n currentPage: payload.current_page,\r\n pageSize: payload.page_size,\r\n })\r\n appendOrderLimitOffset(sqlParts, payload.sort_by, pagination.limit, pagination.offset)\r\n if (payload.columns) {\r\n sqlParts.push(`RETURNING ${buildSelectColumnsClause(payload.columns)}`)\r\n }\r\n return `${sqlParts.join(' ')};`\r\n}\r\n\r\nfunction rpcFilterToSqlClause(filter: AthenaRpcFilter): string {\r\n const column = quoteQualifiedIdentifier(filter.column)\r\n const value = filter.value\r\n switch (filter.operator) {\r\n case 'eq':\r\n case 'neq':\r\n case 'gt':\r\n case 'gte':\r\n case 'lt':\r\n case 'lte':\r\n case 'like':\r\n case 'ilike': {\r\n if (value === undefined || Array.isArray(value)) {\r\n return `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`\r\n }\r\n const operatorMap = {\r\n eq: '=',\r\n neq: '!=',\r\n gt: '>',\r\n gte: '>=',\r\n lt: '<',\r\n lte: '<=',\r\n like: 'LIKE',\r\n ilike: 'ILIKE',\r\n } as const\r\n return `${column} ${operatorMap[filter.operator]} ${toSqlLiteral(value)}`\r\n }\r\n case 'is':\r\n if (value === null) return `${column} IS NULL`\r\n if (value === true) return `${column} IS TRUE`\r\n if (value === false) return `${column} IS FALSE`\r\n return `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`\r\n case 'in':\r\n if (!Array.isArray(value)) {\r\n return `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`\r\n }\r\n if (value.length === 0) return 'FALSE'\r\n return `${column} IN (${value.map(item => toSqlLiteral(item)).join(', ')})`\r\n default:\r\n return `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`\r\n }\r\n}\r\n\r\nfunction buildRpcDebugSql(payload: AthenaRpcPayload): string {\r\n const argsEntries = payload.args ? Object.entries(payload.args) : []\r\n const argsClause = argsEntries\r\n .map(([key, value]) => `${quoteQualifiedIdentifier(key)} => ${toSqlJsonLiteral(value as AthenaJsonValue)}`)\r\n .join(', ')\r\n const functionRef = payload.schema\r\n ? `${quoteQualifiedIdentifier(payload.schema)}.${quoteQualifiedIdentifier(payload.function)}`\r\n : quoteQualifiedIdentifier(payload.function)\r\n const sqlParts = [\r\n `SELECT ${payload.select ? quoteSelectColumnsExpression(payload.select) : '*'} FROM ${functionRef}(${argsClause})`,\r\n ]\r\n if (payload.filters?.length) {\r\n sqlParts.push(`WHERE ${payload.filters.map(rpcFilterToSqlClause).join(' AND ')}`)\r\n }\r\n if (payload.order?.column) {\r\n const direction = payload.order.ascending === false ? 'DESC' : 'ASC'\r\n sqlParts.push(`ORDER BY ${quoteQualifiedIdentifier(payload.order.column)} ${direction}`)\r\n }\r\n if (payload.limit !== undefined) {\r\n sqlParts.push(`LIMIT ${Math.max(0, Math.trunc(payload.limit))}`)\r\n }\r\n if (payload.offset !== undefined) {\r\n sqlParts.push(`OFFSET ${Math.max(0, Math.trunc(payload.offset))}`)\r\n }\r\n return `${sqlParts.join(' ')};`\r\n}\r\n\r\nfunction createFilterMethods<Self, Row>(\r\n state: TableBuilderState,\r\n addCondition: (\r\n operator: AthenaConditionOperator,\r\n column?: string,\r\n value?: AthenaConditionValue | AthenaConditionArrayValue | string,\r\n hints?: ConditionCastHints,\r\n ) => void,\r\n self: Self,\r\n): FilterChain<Self, Row> {\r\n return {\r\n eq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n const columnName = String(column)\r\n if (shouldUseUuidTextComparison(columnName, value)) {\r\n addCondition('eq', columnName, value, { columnCast: 'text' })\r\n } else {\r\n addCondition('eq', columnName, value)\r\n }\r\n return self\r\n },\r\n eqCast(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue, cast: AthenaConditionCastType) {\r\n addCondition('eq', String(column), value, { valueCast: cast })\r\n return self\r\n },\r\n eqUuid(column: ResolvedFilterColumnKey<Row>, value: string) {\r\n addCondition('eq', String(column), value, { valueCast: 'uuid' })\r\n return self\r\n },\r\n match(filters: Partial<Record<ResolvedFilterColumnKey<Row>, AthenaConditionValue>>) {\r\n Object.entries(filters as Record<string, AthenaConditionValue | undefined>).forEach(([column, value]) => {\r\n if (value === undefined) {\r\n return\r\n }\r\n if (shouldUseUuidTextComparison(column, value)) {\r\n addCondition('eq', column, value, { columnCast: 'text' })\r\n } else {\r\n addCondition('eq', column, value)\r\n }\r\n })\r\n return self\r\n },\r\n range(from: number, to: number) {\r\n state.offset = from\r\n state.limit = to - from + 1\r\n return self\r\n },\r\n limit(count: number) {\r\n state.limit = count\r\n return self\r\n },\r\n offset(count: number) {\r\n state.offset = count\r\n return self\r\n },\r\n currentPage(value: number) {\r\n state.currentPage = value\r\n return self\r\n },\r\n pageSize(value: number) {\r\n state.pageSize = value\r\n return self\r\n },\r\n totalPages(value: number) {\r\n state.totalPages = value\r\n return self\r\n },\r\n order(column: ResolvedFilterColumnKey<Row>, options?: OrderOptions) {\r\n state.order = {\r\n field: String(column),\r\n direction: options?.ascending === false ? 'descending' : 'ascending',\r\n }\r\n return self\r\n },\r\n gt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n addCondition('gt', String(column), value)\r\n return self\r\n },\r\n gte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n addCondition('gte', String(column), value)\r\n return self\r\n },\r\n lt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n addCondition('lt', String(column), value)\r\n return self\r\n },\r\n lte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n addCondition('lte', String(column), value)\r\n return self\r\n },\r\n neq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n addCondition('neq', String(column), value)\r\n return self\r\n },\r\n like(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n addCondition('like', String(column), value)\r\n return self\r\n },\r\n ilike(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n addCondition('ilike', String(column), value)\r\n return self\r\n },\r\n is(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n addCondition('is', String(column), value)\r\n return self\r\n },\r\n in(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue) {\r\n addCondition('in', String(column), values)\r\n return self\r\n },\r\n contains(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue) {\r\n addCondition('contains', String(column), values)\r\n return self\r\n },\r\n containedBy(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue) {\r\n addCondition('containedBy', String(column), values)\r\n return self\r\n },\r\n not(\r\n columnOrExpression: ResolvedFilterColumnKey<Row> | string,\r\n operator?: AthenaConditionOperator,\r\n value?: AthenaConditionValue,\r\n ) {\r\n const expression = String(columnOrExpression)\r\n if (operator != null && value !== undefined) {\r\n addCondition('not', undefined, `${expression}.${operator}.${stringifyFilterValue(value)}`)\r\n } else {\r\n addCondition('not', undefined, expression)\r\n }\r\n return self\r\n },\r\n or(expression: string) {\r\n addCondition('or', undefined, expression)\r\n return self\r\n },\r\n }\r\n}\r\n\r\nfunction toRpcSelect(columns?: AthenaSelectInput) {\r\n if (!columns) return undefined\r\n if (typeof columns === 'string') {\r\n return columns\r\n }\r\n return columns.join(',')\r\n}\r\n\r\nfunction createRpcFilterMethods<Self>(\r\n filters: AthenaRpcFilter[],\r\n self: Self,\r\n) {\r\n const addFilter = (\r\n operator: AthenaRpcFilterOperator,\r\n column: string,\r\n value: AthenaConditionValue | AthenaConditionArrayValue | string,\r\n ) => {\r\n filters.push({ column, operator, value })\r\n }\r\n\r\n return {\r\n eq(column: string, value: AthenaConditionValue) {\r\n addFilter('eq', column, value)\r\n return self\r\n },\r\n neq(column: string, value: AthenaConditionValue) {\r\n addFilter('neq', column, value)\r\n return self\r\n },\r\n gt(column: string, value: AthenaConditionValue) {\r\n addFilter('gt', column, value)\r\n return self\r\n },\r\n gte(column: string, value: AthenaConditionValue) {\r\n addFilter('gte', column, value)\r\n return self\r\n },\r\n lt(column: string, value: AthenaConditionValue) {\r\n addFilter('lt', column, value)\r\n return self\r\n },\r\n lte(column: string, value: AthenaConditionValue) {\r\n addFilter('lte', column, value)\r\n return self\r\n },\r\n like(column: string, value: AthenaConditionValue) {\r\n addFilter('like', column, value)\r\n return self\r\n },\r\n ilike(column: string, value: AthenaConditionValue) {\r\n addFilter('ilike', column, value)\r\n return self\r\n },\r\n is(column: string, value: AthenaConditionValue) {\r\n addFilter('is', column, value)\r\n return self\r\n },\r\n in(column: string, values: AthenaConditionArrayValue) {\r\n addFilter('in', column, values)\r\n return self\r\n },\r\n }\r\n}\r\n\r\nfunction createRpcBuilder<Row, TStrict extends boolean = false>(\r\n functionName: string,\r\n args: AthenaJsonObject | undefined,\r\n baseOptions: AthenaRpcCallOptions | undefined,\r\n client: ReturnType<typeof createAthenaGatewayClient>,\r\n formatGatewayResult: AthenaResultFormatter,\r\n tracer?: AthenaQueryTracer,\r\n initialCallsite?: AthenaQueryTraceCallsite | null,\r\n debugAstEnabled = false,\r\n): RpcQueryBuilder<Row, TStrict> {\r\n const state: {\r\n filters: AthenaRpcFilter[]\r\n limit?: number\r\n offset?: number\r\n order?: { column: string; ascending?: boolean }\r\n } = {\r\n filters: [],\r\n }\r\n\r\n let selectedColumns: AthenaSelectInput | undefined\r\n let selectedOptions: AthenaRpcCallOptions | undefined\r\n let promise: Promise<AthenaResult<Row[]>> | null = null\r\n const callsiteStore = createTraceCallsiteStore(tracer, initialCallsite)\r\n\r\n const executeRpc = async <SelectedRow = Row>(\r\n columns?: AthenaSelectInput,\r\n options?: AthenaRpcCallOptions,\r\n callsite?: AthenaQueryTraceCallsite | null,\r\n ): Promise<AthenaResult<SelectedRow[]>> => {\r\n const mergedOptions = mergeOptions(baseOptions, options)\r\n const normalizedSelectedColumns = normalizeSelectColumnsInput(columns)\r\n const payload: AthenaRpcPayload = {\r\n function: functionName,\r\n args,\r\n schema: mergedOptions?.schema,\r\n select: toRpcSelect(columns),\r\n filters: state.filters.length ? [...state.filters] : undefined,\r\n count: mergedOptions?.count,\r\n head: mergedOptions?.head,\r\n limit: state.limit,\r\n offset: state.offset,\r\n order: state.order,\r\n }\r\n const endpoint: AthenaQueryTraceEvent['endpoint'] = mergedOptions?.get\r\n ? `/rpc/${functionName}`\r\n : '/gateway/rpc'\r\n const sql = buildRpcDebugSql(payload)\r\n const debugAst = debugAstEnabled\r\n ? buildRpcDebugAst({\r\n functionName,\r\n args,\r\n selectedColumns: normalizedSelectedColumns,\r\n state,\r\n payload,\r\n endpoint,\r\n })\r\n : undefined\r\n return executeWithQueryTrace(\r\n tracer,\r\n {\r\n operation: 'rpc',\r\n endpoint,\r\n functionName,\r\n sql,\r\n payload,\r\n ast: debugAst,\r\n options: mergedOptions,\r\n },\r\n async () => {\r\n const response = await client.rpcGateway<SelectedRow[]>(payload, mergedOptions)\r\n return formatGatewayResult(response, { operation: 'rpc' })\r\n },\r\n callsite,\r\n )\r\n }\r\n\r\n const run = (\r\n columns?: AthenaSelectInput,\r\n options?: AthenaRpcCallOptions,\r\n callsite?: AthenaQueryTraceCallsite | null,\r\n ) => {\r\n const payloadColumns = columns ?? selectedColumns\r\n const payloadOptions = options ?? selectedOptions\r\n if (!promise) {\r\n promise = executeRpc<Row>(payloadColumns, payloadOptions, callsiteStore.resolve(callsite))\r\n }\r\n return promise\r\n }\r\n\r\n const builder = {} as RpcQueryBuilder<Row, TStrict>\r\n const filterMethods = createRpcFilterMethods(state.filters, builder)\r\n\r\n Object.assign(builder, filterMethods, {\r\n select(columns?: AthenaSelectInput, options?: AthenaRpcCallOptions) {\r\n selectedColumns = columns\r\n selectedOptions = options ?? selectedOptions\r\n return run(columns, options, captureTraceCallsite(tracer))\r\n },\r\n async single<T = Row>(columns?: AthenaSelectInput, options?: AthenaRpcCallOptions) {\r\n const result = await run(columns, options, captureTraceCallsite(tracer))\r\n return toSingleResult(result) as AthenaResult<T | null>\r\n },\r\n maybeSingle<T = Row>(columns?: AthenaSelectInput, options?: AthenaRpcCallOptions) {\r\n return builder.single<T, AthenaSelectInput>(columns, options)\r\n },\r\n order(column: string, options?: RpcOrderOptions) {\r\n state.order = { column, ascending: options?.ascending ?? true }\r\n return builder\r\n },\r\n limit(count: number) {\r\n state.limit = count\r\n return builder\r\n },\r\n offset(count: number) {\r\n state.offset = count\r\n return builder\r\n },\r\n range(from: number, to: number) {\r\n state.offset = from\r\n state.limit = to - from + 1\r\n return builder\r\n },\r\n then<T1 = AthenaResult<Row[]>, T2 = never>(\r\n onfulfilled?: (v: AthenaResult<Row[]>) => T1 | PromiseLike<T1>,\r\n onrejected?: (reason: unknown) => T2 | PromiseLike<T2>,\r\n ) {\r\n return run(selectedColumns, selectedOptions).then(onfulfilled, onrejected)\r\n },\r\n catch<T = never>(onrejected?: (reason: unknown) => T | PromiseLike<T>) {\r\n return run(selectedColumns, selectedOptions).catch(onrejected)\r\n },\r\n finally(onfinally?: () => void) {\r\n return run(selectedColumns, selectedOptions).finally(onfinally)\r\n },\r\n })\r\n\r\n return builder\r\n}\r\n\r\nfunction createTableBuilder<\r\n Row,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n TContext = unknown,\r\n TStrict extends boolean = false,\r\n>(\r\n tableName: string,\r\n client: ReturnType<typeof createAthenaGatewayClient>,\r\n formatGatewayResult: AthenaResultFormatter,\r\n tracer?: AthenaQueryTracer,\r\n experimental?: AthenaClientExperimentalOptions,\r\n): TableQueryBuilder<Row, Insert, Update, TContext, TStrict> {\r\n const state: TableBuilderState = {\r\n conditions: [],\r\n }\r\n const debugAstEnabled = Boolean(experimental?.debugAst)\r\n\r\n const addCondition = (\r\n operator: AthenaConditionOperator,\r\n column?: string,\r\n value?: AthenaConditionValue | AthenaConditionArrayValue | string,\r\n hints?: ConditionCastHints,\r\n ) => {\r\n const condition: AthenaGatewayCondition = { operator }\r\n if (column) {\r\n condition.column = column\r\n if (operator === 'eq') {\r\n // include legacy gateway shape for compatibility\r\n condition.eq_column = column\r\n }\r\n }\r\n if (value !== undefined) {\r\n condition.value = value\r\n if (operator === 'eq') {\r\n condition.eq_value = value\r\n }\r\n }\r\n if (hints?.valueCast) {\r\n condition.value_cast = hints.valueCast\r\n if (operator === 'eq') {\r\n condition.eq_value_cast = hints.valueCast\r\n }\r\n }\r\n if (hints?.columnCast) {\r\n condition.column_cast = hints.columnCast\r\n if (operator === 'eq') {\r\n condition.eq_column_cast = hints.columnCast\r\n }\r\n }\r\n state.conditions.push(condition)\r\n }\r\n\r\n const snapshotState = (): TableBuilderState => ({\r\n conditions: state.conditions.map(condition => ({ ...condition })),\r\n limit: state.limit,\r\n offset: state.offset,\r\n order: state.order ? { ...state.order } : undefined,\r\n currentPage: state.currentPage,\r\n pageSize: state.pageSize,\r\n totalPages: state.totalPages,\r\n })\r\n\r\n const builder = {} as TableQueryBuilder<Row, Insert, Update, TContext, TStrict>\r\n\r\n const filterMethods = createFilterMethods<TableQueryBuilder<Row, Insert, Update, TContext, TStrict>, Row>(\r\n state,\r\n addCondition,\r\n builder,\r\n )\r\n\r\n const runSelect = async <T = Row>(\r\n columns: AthenaSelectInput = DEFAULT_COLUMNS,\r\n options?: AthenaGatewayCallOptions,\r\n executionState: TableBuilderState = snapshotState(),\r\n callsite?: AthenaQueryTraceCallsite | null,\r\n debugAstFactory?: SelectDebugAstFactory,\r\n ) => {\r\n const runtimeColumns = normalizeSelectColumnsInput(columns) ?? DEFAULT_COLUMNS\r\n const resolvedTableName = resolveTableNameForCall(tableName, options?.schema)\r\n const plan = createSelectTransportPlan({\r\n tableName: resolvedTableName,\r\n columns: runtimeColumns,\r\n state: executionState,\r\n options,\r\n buildTypedSelectQuery,\r\n })\r\n const debugAst = debugAstEnabled\r\n ? (debugAstFactory?.({\r\n tableName: resolvedTableName,\r\n columns: runtimeColumns,\r\n executionState,\r\n plan,\r\n }) ?? buildSelectDebugAst({\r\n tableName: resolvedTableName,\r\n columns: runtimeColumns,\r\n state: executionState,\r\n plan,\r\n }))\r\n : undefined\r\n\r\n if (plan.kind === 'query') {\r\n return executeExperimentalRead(experimental, () =>\r\n executeWithQueryTrace(\r\n tracer,\r\n {\r\n operation: 'select',\r\n endpoint: '/gateway/query',\r\n table: resolvedTableName,\r\n sql: plan.query,\r\n payload: plan.payload,\r\n ast: debugAst,\r\n options,\r\n },\r\n async () => {\r\n const queryResponse = await client.queryGateway<T>(plan.payload, options)\r\n return formatGatewayResult(queryResponse, { table: resolvedTableName, operation: 'select' })\r\n },\r\n callsite,\r\n ),\r\n )\r\n }\r\n\r\n const sql = buildDebugSelectQuery({\r\n tableName: resolvedTableName,\r\n ...plan.debug,\r\n })\r\n return executeExperimentalRead(experimental, () =>\r\n executeWithQueryTrace(\r\n tracer,\r\n {\r\n operation: 'select',\r\n endpoint: '/gateway/fetch',\r\n table: resolvedTableName,\r\n sql,\r\n payload: plan.payload,\r\n ast: debugAst,\r\n options,\r\n },\r\n async () => {\r\n const response = await client.fetchGateway<T>(plan.payload, options)\r\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'select' })\r\n },\r\n callsite,\r\n ),\r\n )\r\n }\r\n\r\n const createSelectChain = <SelectedRow>(\r\n columns: AthenaSelectInput,\r\n options?: AthenaGatewayCallOptions,\r\n initialCallsite?: AthenaQueryTraceCallsite | null,\r\n ): SelectChain<Row, SelectedRow, TStrict> => {\r\n const chain = {} as SelectChain<Row, SelectedRow, TStrict>\r\n const callsiteStore = createTraceCallsiteStore(tracer, initialCallsite)\r\n const filterMethods = createFilterMethods<SelectChain<Row, SelectedRow, TStrict>, Row>(\r\n state,\r\n addCondition,\r\n chain,\r\n )\r\n Object.assign(chain, filterMethods, {\r\n async single<T = SelectedRow>(cols?: AthenaSelectInput, opts?: AthenaGatewayCallOptions) {\r\n const r = await runSelect<T[]>(\r\n cols ?? columns,\r\n opts ?? options,\r\n snapshotState(),\r\n callsiteStore.resolve(captureTraceCallsite(tracer)),\r\n )\r\n return toSingleResult(r)\r\n },\r\n maybeSingle<T = SelectedRow>(cols?: AthenaSelectInput, opts?: AthenaGatewayCallOptions) {\r\n return chain.single<T, AthenaSelectInput>(cols, opts)\r\n },\r\n then<T1 = AthenaResult<SelectedRow[]>, T2 = never>(\r\n onfulfilled?: (v: AthenaResult<SelectedRow[]>) => T1 | PromiseLike<T1>,\r\n onrejected?: (reason: unknown) => T2 | PromiseLike<T2>,\r\n ) {\r\n return runSelect<SelectedRow[]>(\r\n columns,\r\n options,\r\n snapshotState(),\r\n callsiteStore.resolve(),\r\n ).then(onfulfilled, onrejected)\r\n },\r\n catch<T = never>(onrejected?: (reason: unknown) => T | PromiseLike<T>) {\r\n return runSelect<SelectedRow[]>(columns, options, snapshotState(), callsiteStore.resolve()).catch(\r\n onrejected,\r\n )\r\n },\r\n finally(onfinally?: () => void) {\r\n return runSelect<SelectedRow[]>(columns, options, snapshotState(), callsiteStore.resolve()).finally(\r\n onfinally,\r\n )\r\n },\r\n })\r\n return chain\r\n }\r\n\r\n Object.assign(builder, filterMethods, {\r\n reset() {\r\n state.conditions = []\r\n state.limit = undefined\r\n state.offset = undefined\r\n state.order = undefined\r\n state.currentPage = undefined\r\n state.pageSize = undefined\r\n state.totalPages = undefined\r\n return builder\r\n },\r\n select<T = Row>(columns: AthenaSelectInput = DEFAULT_COLUMNS, options?: AthenaGatewayCallOptions) {\r\n return createSelectChain<T>(columns, options, captureTraceCallsite(tracer))\r\n },\r\n async findMany<const TSelect extends AthenaSelectShape>(\r\n options: AthenaFindManyOptions<Row, TSelect> & {\r\n select: AthenaValidatedSelectShape<TSelect>\r\n },\r\n ) {\r\n const columns = compileSelectShape(options.select)\r\n const baseState = snapshotState()\r\n const executionState = snapshotState()\r\n const callsite = captureTraceCallsite(tracer)\r\n const compiledWhere = compileWhere(options.where)\r\n if (compiledWhere?.length) {\r\n executionState.conditions.push(...compiledWhere)\r\n }\r\n if (options.orderBy !== undefined) {\r\n executionState.order = compileOrderBy<Row>(options.orderBy)\r\n }\r\n if (options.limit !== undefined) {\r\n executionState.limit = options.limit\r\n }\r\n if (\r\n experimental?.findManyAst &&\r\n canUseFindManyAstTransport(baseState) &&\r\n !selectShapeUsesRelationSchema(options.select) &&\r\n !findManyAstWhereRequiresLegacyTransport(options.where)\r\n ) {\r\n const resolvedTableName = resolveTableNameForCall(tableName, undefined)\r\n const payload: AthenaFindManyAstPayload<Row, TSelect> = {\r\n table_name: resolvedTableName,\r\n select: options.select,\r\n }\r\n if (options.where !== undefined) {\r\n payload.where = normalizeFindManyAstWhere(options.where)\r\n }\r\n const astOrder = toFindManyAstOrder<Row>(executionState.order)\r\n if (astOrder !== undefined) {\r\n payload.orderBy = astOrder\r\n }\r\n if (executionState.limit !== undefined) {\r\n payload.limit = executionState.limit\r\n }\r\n const sql = buildDebugSelectQuery({\r\n tableName: resolvedTableName,\r\n columns,\r\n conditions: executionState.conditions,\r\n limit: executionState.limit,\r\n order: executionState.order,\r\n })\r\n const debugAst = debugAstEnabled\r\n ? buildFindManyDirectDebugAst({\r\n tableName: resolvedTableName,\r\n options,\r\n compiledColumns: columns,\r\n baseState,\r\n executionState,\r\n payload,\r\n })\r\n : undefined\r\n return executeExperimentalRead(experimental, () =>\r\n executeWithQueryTrace(\r\n tracer,\r\n {\r\n operation: 'select',\r\n endpoint: '/gateway/fetch',\r\n table: resolvedTableName,\r\n sql,\r\n payload,\r\n ast: debugAst,\r\n },\r\n async () => {\r\n const response = await client.fetchGateway<Array<AthenaFindManyResult<Row, TSelect, TContext>>>(\r\n payload,\r\n )\r\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'select' })\r\n },\r\n callsite,\r\n ),\r\n )\r\n }\r\n return runSelect<Array<AthenaFindManyResult<Row, TSelect, TContext>>>(\r\n columns,\r\n undefined,\r\n executionState,\r\n callsite,\r\n debugAstEnabled\r\n ? ({ tableName: resolvedTableName, executionState: tracedState, plan }) =>\r\n buildFindManyCompiledDebugAst({\r\n tableName: resolvedTableName,\r\n options,\r\n compiledColumns: columns,\r\n baseState,\r\n executionState: tracedState,\r\n plan,\r\n })\r\n : undefined,\r\n )\r\n },\r\n insert(values: Insert | Insert[], options?: AthenaGatewayCallOptions) {\r\n const mutationCallsite = captureTraceCallsite(tracer)\r\n if (Array.isArray(values)) {\r\n const executeInsertMany = async (\r\n columns?: string | string[],\r\n selectOptions?: AthenaGatewayCallOptions,\r\n callsite?: AthenaQueryTraceCallsite | null,\r\n ) => {\r\n const mergedOptions = mergeOptions(options, selectOptions)\r\n const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\r\n const payload: AthenaInsertPayload = {\r\n table_name: resolvedTableName,\r\n insert_body: asAthenaJsonObjectArray(values),\r\n }\r\n if (columns) payload.columns = columns\r\n if (mergedOptions?.count) payload.count = mergedOptions.count\r\n if (mergedOptions?.head) payload.head = mergedOptions.head\r\n if (mergedOptions?.defaultToNull !== undefined) {\r\n payload.default_to_null = mergedOptions.defaultToNull\r\n }\r\n const sql = buildInsertDebugSql(payload)\r\n const debugAst = debugAstEnabled ? buildInsertDebugAst(payload) : undefined\r\n return executeWithQueryTrace(\r\n tracer,\r\n {\r\n operation: 'insert',\r\n endpoint: '/gateway/insert',\r\n table: resolvedTableName,\r\n sql,\r\n payload,\r\n ast: debugAst,\r\n options: mergedOptions,\r\n },\r\n async () => {\r\n const response = await client.insertGateway<Row[]>(payload, mergedOptions)\r\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'insert' })\r\n },\r\n callsite,\r\n )\r\n }\r\n return createMutationQuery<Row[]>(executeInsertMany, DEFAULT_COLUMNS, tracer, mutationCallsite)\r\n }\r\n const executeInsertOne = async (\r\n columns?: string | string[],\r\n selectOptions?: AthenaGatewayCallOptions,\r\n callsite?: AthenaQueryTraceCallsite | null,\r\n ) => {\r\n const mergedOptions = mergeOptions(options, selectOptions)\r\n const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\r\n const payload: AthenaInsertPayload = {\r\n table_name: resolvedTableName,\r\n insert_body: asAthenaJsonObject(values),\r\n }\r\n if (columns) payload.columns = columns\r\n if (mergedOptions?.count) payload.count = mergedOptions.count\r\n if (mergedOptions?.head) payload.head = mergedOptions.head\r\n if (mergedOptions?.defaultToNull !== undefined) {\r\n payload.default_to_null = mergedOptions.defaultToNull\r\n }\r\n const sql = buildInsertDebugSql(payload)\r\n const debugAst = debugAstEnabled ? buildInsertDebugAst(payload) : undefined\r\n return executeWithQueryTrace(\r\n tracer,\r\n {\r\n operation: 'insert',\r\n endpoint: '/gateway/insert',\r\n table: resolvedTableName,\r\n sql,\r\n payload,\r\n ast: debugAst,\r\n options: mergedOptions,\r\n },\r\n async () => {\r\n const response = await client.insertGateway<Row>(payload, mergedOptions)\r\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'insert' })\r\n },\r\n callsite,\r\n )\r\n }\r\n return createMutationQuery<Row>(executeInsertOne, DEFAULT_COLUMNS, tracer, mutationCallsite)\r\n },\r\n upsert(\r\n values: Insert | Insert[],\r\n options?: AthenaGatewayCallOptions & { updateBody?: Update; onConflict?: string | string[] },\r\n ) {\r\n const mutationCallsite = captureTraceCallsite(tracer)\r\n if (Array.isArray(values)) {\r\n const executeUpsertMany = async (\r\n columns?: string | string[],\r\n selectOptions?: AthenaGatewayCallOptions,\r\n callsite?: AthenaQueryTraceCallsite | null,\r\n ) => {\r\n const mergedOptions = mergeOptions(options, selectOptions)\r\n const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\r\n const payload: AthenaInsertPayload = {\r\n table_name: resolvedTableName,\r\n insert_body: asAthenaJsonObjectArray(values),\r\n update_body: options?.updateBody ? asAthenaJsonObject(options.updateBody) : undefined,\r\n }\r\n if (columns) payload.columns = columns\r\n if (options?.onConflict) payload.on_conflict = options.onConflict\r\n if (mergedOptions?.count) payload.count = mergedOptions.count\r\n if (mergedOptions?.head) payload.head = mergedOptions.head\r\n if (mergedOptions?.defaultToNull !== undefined) {\r\n payload.default_to_null = mergedOptions.defaultToNull\r\n }\r\n const sql = buildInsertDebugSql(payload)\r\n const debugAst = debugAstEnabled ? buildUpsertDebugAst(payload) : undefined\r\n return executeWithQueryTrace(\r\n tracer,\r\n {\r\n operation: 'upsert',\r\n endpoint: '/gateway/insert',\r\n table: resolvedTableName,\r\n sql,\r\n payload,\r\n ast: debugAst,\r\n options: mergedOptions,\r\n },\r\n async () => {\r\n const response = await client.insertGateway<Row[]>(payload, mergedOptions)\r\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'insert' })\r\n },\r\n callsite,\r\n )\r\n }\r\n return createMutationQuery<Row[]>(executeUpsertMany, DEFAULT_COLUMNS, tracer, mutationCallsite)\r\n }\r\n const executeUpsertOne = async (\r\n columns?: string | string[],\r\n selectOptions?: AthenaGatewayCallOptions,\r\n callsite?: AthenaQueryTraceCallsite | null,\r\n ) => {\r\n const mergedOptions = mergeOptions(options, selectOptions)\r\n const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\r\n const payload: AthenaInsertPayload = {\r\n table_name: resolvedTableName,\r\n insert_body: asAthenaJsonObject(values),\r\n update_body: options?.updateBody ? asAthenaJsonObject(options.updateBody) : undefined,\r\n }\r\n if (columns) payload.columns = columns\r\n if (options?.onConflict) payload.on_conflict = options.onConflict\r\n if (mergedOptions?.count) payload.count = mergedOptions.count\r\n if (mergedOptions?.head) payload.head = mergedOptions.head\r\n if (mergedOptions?.defaultToNull !== undefined) {\r\n payload.default_to_null = mergedOptions.defaultToNull\r\n }\r\n const sql = buildInsertDebugSql(payload)\r\n const debugAst = debugAstEnabled ? buildUpsertDebugAst(payload) : undefined\r\n return executeWithQueryTrace(\r\n tracer,\r\n {\r\n operation: 'upsert',\r\n endpoint: '/gateway/insert',\r\n table: resolvedTableName,\r\n sql,\r\n payload,\r\n ast: debugAst,\r\n options: mergedOptions,\r\n },\r\n async () => {\r\n const response = await client.insertGateway<Row>(payload, mergedOptions)\r\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'insert' })\r\n },\r\n callsite,\r\n )\r\n }\r\n return createMutationQuery<Row>(executeUpsertOne, DEFAULT_COLUMNS, tracer, mutationCallsite)\r\n },\r\n update(values: Update, options?: AthenaGatewayCallOptions) {\r\n const mutationCallsite = captureTraceCallsite(tracer)\r\n const executeUpdate = async (\r\n columns?: string | string[],\r\n selectOptions?: AthenaGatewayCallOptions,\r\n callsite?: AthenaQueryTraceCallsite | null,\r\n ) => {\r\n const executionState = snapshotState()\r\n const filters = executionState.conditions.length ? [...executionState.conditions] : undefined\r\n const mergedOptions = mergeOptions(options, selectOptions)\r\n const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\r\n const payload: AthenaUpdatePayload = {\r\n table_name: resolvedTableName,\r\n set: asAthenaJsonObject(values),\r\n conditions: filters,\r\n strip_nulls: mergedOptions?.stripNulls ?? true,\r\n }\r\n if (executionState.order) payload.sort_by = executionState.order\r\n if (executionState.currentPage !== undefined) payload.current_page = executionState.currentPage\r\n if (executionState.pageSize !== undefined) payload.page_size = executionState.pageSize\r\n if (executionState.totalPages !== undefined) payload.total_pages = executionState.totalPages\r\n if (columns) payload.columns = columns\r\n const sql = buildUpdateDebugSql(payload)\r\n const debugAst = debugAstEnabled\r\n ? buildUpdateDebugAst({\r\n state: executionState,\r\n payload,\r\n })\r\n : undefined\r\n return executeWithQueryTrace(\r\n tracer,\r\n {\r\n operation: 'update',\r\n endpoint: '/gateway/update',\r\n table: resolvedTableName,\r\n sql,\r\n payload,\r\n ast: debugAst,\r\n options: mergedOptions,\r\n },\r\n async () => {\r\n const response = await client.updateGateway<Row[]>(payload, mergedOptions)\r\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'update' })\r\n },\r\n callsite,\r\n )\r\n }\r\n const mutation = createMutationQuery<Row[]>(executeUpdate, null, tracer, mutationCallsite)\r\n const updateChain = {} as UpdateChain<Row>\r\n const filterMethods = createFilterMethods<UpdateChain<Row>, Row>(state, addCondition, updateChain)\r\n Object.assign(updateChain, filterMethods, mutation)\r\n return updateChain\r\n },\r\n delete(options?: AthenaGatewayCallOptions & { resourceId?: string }) {\r\n const filters = state.conditions.length ? [...state.conditions] : undefined\r\n const resourceId = options?.resourceId ?? getResourceId(state)\r\n if (!resourceId && !filters?.length) {\r\n throw new Error('delete requires a resource_id either via eq(\"resource_id\", ...) or options.resourceId')\r\n }\r\n const mutationCallsite = captureTraceCallsite(tracer)\r\n const executeDelete = async (\r\n columns?: string | string[],\r\n selectOptions?: AthenaGatewayCallOptions,\r\n callsite?: AthenaQueryTraceCallsite | null,\r\n ) => {\r\n const executionState = snapshotState()\r\n const debugState: TableBuilderState = {\r\n ...executionState,\r\n conditions: filters ? filters.map(condition => ({ ...condition })) : [],\r\n }\r\n const mergedOptions = mergeOptions(options, selectOptions)\r\n const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\r\n const payload: AthenaDeletePayload = {\r\n table_name: resolvedTableName,\r\n resource_id: resourceId,\r\n conditions: filters,\r\n }\r\n if (executionState.order) payload.sort_by = executionState.order\r\n if (executionState.currentPage !== undefined) payload.current_page = executionState.currentPage\r\n if (executionState.pageSize !== undefined) payload.page_size = executionState.pageSize\r\n if (executionState.totalPages !== undefined) payload.total_pages = executionState.totalPages\r\n if (columns) payload.columns = columns\r\n const sql = buildDeleteDebugSql(payload)\r\n const debugAst = debugAstEnabled\r\n ? buildDeleteDebugAst({\r\n state: debugState,\r\n payload,\r\n })\r\n : undefined\r\n return executeWithQueryTrace(\r\n tracer,\r\n {\r\n operation: 'delete',\r\n endpoint: '/gateway/delete',\r\n table: resolvedTableName,\r\n sql,\r\n payload,\r\n ast: debugAst,\r\n options: mergedOptions,\r\n },\r\n async () => {\r\n const response = await client.deleteGateway<Row | null>(payload, mergedOptions)\r\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'delete' })\r\n },\r\n callsite,\r\n )\r\n }\r\n return createMutationQuery<Row | null>(executeDelete, null, tracer, mutationCallsite)\r\n },\r\n async single<T = Row>(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\r\n const response = await runSelect<T[]>(\r\n columns ?? DEFAULT_COLUMNS,\r\n options,\r\n snapshotState(),\r\n captureTraceCallsite(tracer),\r\n )\r\n return toSingleResult(response)\r\n },\r\n async maybeSingle<T = Row>(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\r\n return builder.single<T, AthenaSelectInput>(columns, options)\r\n },\r\n })\r\n\r\n return builder\r\n}\r\n\r\nfunction createQueryBuilder(\r\n client: ReturnType<typeof createAthenaGatewayClient>,\r\n formatGatewayResult: AthenaResultFormatter,\r\n experimental?: AthenaClientExperimentalOptions,\r\n tracer?: AthenaQueryTracer,\r\n) {\r\n const debugAstEnabled = Boolean(experimental?.debugAst)\r\n return async function query<Row = unknown>(\r\n query: string,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<Row[]>> {\r\n const normalizedQuery = query.trim()\r\n if (!normalizedQuery) {\r\n throw new Error('query requires a non-empty string')\r\n }\r\n const payload = { query: normalizedQuery }\r\n const callsite = captureTraceCallsite(tracer)\r\n return executeExperimentalRead(experimental, () =>\r\n executeWithQueryTrace(\r\n tracer,\r\n {\r\n operation: 'query',\r\n endpoint: '/gateway/query',\r\n sql: normalizedQuery,\r\n payload,\r\n ast: debugAstEnabled ? buildRawQueryDebugAst(normalizedQuery) : undefined,\r\n options,\r\n },\r\n async () => {\r\n const response = await client.queryGateway<Row[]>(payload, options)\r\n return formatGatewayResult(response, { operation: 'query' })\r\n },\r\n callsite,\r\n ),\r\n )\r\n }\r\n}\r\n\r\nexport interface AthenaSdkClient<TStrict extends boolean = false> {\n from<TModel extends AthenaModelTarget>(\n model: TModel,\n ): TableQueryBuilder<RowOf<TModel>, InsertOf<TModel>, UpdateOf<TModel>, unknown, TStrict>\n from<\r\n Row = AthenaRowShape,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n >(table: string, options?: AthenaFromOptions): TableQueryBuilder<Row, Insert, Update, unknown, TStrict>\r\n db: AthenaDbModule<TStrict>\n rpc<Row = unknown, Args extends AthenaJsonObject = AthenaJsonObject>(\n fn: string,\n args?: Args,\n options?: AthenaRpcCallOptions,\n ): RpcQueryBuilder<Row, TStrict>\n query<Row = unknown>(query: string, options?: AthenaGatewayCallOptions): Promise<AthenaResult<Row[]>>\n verifyConnection(options?: AthenaGatewayConnectionOptions): Promise<AthenaGatewayConnectionResult>\n withContext(context?: AthenaClientContextOptions): AthenaSdkClient<TStrict>\n withSession(\n session?: AthenaClientSessionLike | null,\n options?: AthenaClientSessionOptions,\n ): AthenaSdkClient<TStrict>\n}\n\nexport interface AthenaSdkClientWithAuth<TStrict extends boolean = false> extends AthenaSdkClient<TStrict> {\n auth: AthenaAuthBindings\n withContext(context?: AthenaClientContextOptions): AthenaSdkClientWithAuth<TStrict>\n withSession(\n session?: AthenaClientSessionLike | null,\n options?: AthenaClientSessionOptions,\n ): AthenaSdkClientWithAuth<TStrict>\n withOptions(options?: AthenaClientOverrideOptions): AthenaSdkClientWithAuth<TStrict>\n}\n\nexport interface AthenaSdkClientWithStorage<TStrict extends boolean = false> extends AthenaSdkClientWithAuth<TStrict> {\n storage: AthenaStorageModule\n withContext(context?: AthenaClientContextOptions): AthenaSdkClientWithStorage<TStrict>\n withSession(\n session?: AthenaClientSessionLike | null,\n options?: AthenaClientSessionOptions,\n ): AthenaSdkClientWithStorage<TStrict>\n withOptions(options?: AthenaClientOverrideOptions): AthenaSdkClientWithStorage<TStrict>\n}\n\nexport interface AthenaHeaderBag {\n get(name: string): string | null\n}\n\nexport interface AthenaClientSessionLike {\n user?: {\n id?: string | null | undefined\n } | null | undefined\n session?: {\n token?: string | null | undefined\n activeOrganizationId?: string | null | undefined\n } | null | undefined\n}\n\nexport interface AthenaCreateClientServiceUrlConfig {\n url?: string | null | undefined\n}\n\nexport interface AthenaCreateClientAuthOptions\n extends Omit<AthenaAuthClientConfig, 'baseUrl' | 'apiKey' | 'bearerToken' | 'cookie' | 'sessionToken'> {\n url?: string | null | undefined\n baseUrl?: string | null | undefined\n apiKey?: string | null | undefined\n bearerToken?: string | null | undefined\n cookie?: string | null | undefined\n sessionToken?: string | null | undefined\n}\n\nexport interface AthenaCreateClientOptions {\n client?: string | null | undefined\n userId?: string | null | undefined\n organizationId?: string | null | undefined\n forceNoCache?: boolean\n headers?: Record<string, string>\n backend?: BackendConfig | BackendType\n db?: AthenaCreateClientServiceUrlConfig\n gateway?: AthenaCreateClientServiceUrlConfig\n auth?: AthenaCreateClientAuthOptions\n storage?: AthenaCreateClientServiceUrlConfig\n dbUrl?: string | null | undefined\n gatewayUrl?: string | null | undefined\n authUrl?: string | null | undefined\n storageUrl?: string | null | undefined\n experimental?: AthenaClientExperimentalOptions\n}\n\r\nexport interface AthenaCreateClientOptionsWithStorage extends AthenaCreateClientOptions {\r\n experimental: AthenaClientExperimentalOptions & {\r\n athenaStorageBackend: true\r\n }\r\n}\r\n\r\nexport interface AthenaCreateClientOptionsWithTypecheckedColumns extends AthenaCreateClientOptions {\r\n experimental: AthenaClientExperimentalOptions & {\r\n typecheckColumns: true\r\n }\r\n}\r\n\r\nexport interface AthenaCreateClientOptionsWithStorageAndTypecheckedColumns extends AthenaCreateClientOptions {\r\n experimental: AthenaClientExperimentalOptions & {\r\n athenaStorageBackend: true\r\n typecheckColumns: true\r\n }\r\n}\r\n\r\nexport interface AthenaCreateClientConfig extends AthenaCreateClientOptions {\n url?: string | null | undefined\n key: string | null | undefined\n}\n\nexport interface AthenaCreateClientConfigWithStorage extends AthenaCreateClientOptionsWithStorage {\n url?: string | null | undefined\n key: string | null | undefined\n}\n\nexport interface AthenaCreateClientConfigWithTypecheckedColumns extends AthenaCreateClientOptionsWithTypecheckedColumns {\n url?: string | null | undefined\n key: string | null | undefined\n}\n\nexport interface AthenaCreateClientConfigWithStorageAndTypecheckedColumns extends AthenaCreateClientOptionsWithStorageAndTypecheckedColumns {\n url?: string | null | undefined\n key: string | null | undefined\n}\n\nexport interface AthenaClientOverrideOptions extends Omit<AthenaCreateClientOptions, 'experimental'> {\n url?: string | null | undefined\n key?: string | null | undefined\n}\n\nexport interface AthenaClientContextOptions {\n userId?: string | null | undefined\n organizationId?: string | null | undefined\n forceNoCache?: boolean\n headers?: Record<string, string>\n auth?: Omit<AthenaCreateClientAuthOptions, 'url' | 'baseUrl' | 'apiKey'>\n}\n\nexport interface AthenaClientSessionOptions extends AthenaClientContextOptions {\n requestHeaders?: AthenaHeaderBag | Record<string, string | null | undefined>\n}\n\nexport interface AthenaClientFromEnvironmentOptions extends AthenaCreateClientOptions {\n env?: Record<string, string | undefined>\n url?: string | null | undefined\n key?: string | null | undefined\n}\n\nexport interface AthenaClientFromEnvironmentOptionsWithStorage\n extends AthenaClientFromEnvironmentOptions {\n experimental: AthenaClientExperimentalOptions & {\n athenaStorageBackend: true\n }\n}\n\nexport interface AthenaClientFromEnvironmentOptionsWithTypecheckedColumns\n extends AthenaClientFromEnvironmentOptions {\n experimental: AthenaClientExperimentalOptions & {\n typecheckColumns: true\n }\n}\n\nexport interface AthenaClientFromEnvironmentOptionsWithStorageAndTypecheckedColumns\n extends AthenaClientFromEnvironmentOptions {\n experimental: AthenaClientExperimentalOptions & {\n athenaStorageBackend: true\n typecheckColumns: true\n }\n}\n\n/** Client config for builder */\nexport interface AthenaClientConfig {\n baseUrl: string\n apiKey: string\n client?: string\n userId?: string | null | undefined\n organizationId?: string | null | undefined\n forceNoCache?: boolean\n backend?: BackendConfig\n headers?: Record<string, string>\n auth?: AthenaCreateClientAuthOptions\n authUrl?: string\r\n storageUrl?: string\n experimental?: AthenaClientExperimentalOptions\n}\n\nconst ATHENA_ENV_URL_KEYS = ['ATHENA_URL', 'NEXT_PUBLIC_ATHENA_URL'] as const\nconst ATHENA_ENV_GATEWAY_URL_KEYS = [\n 'ATHENA_DB_URL',\n 'ATHENA_GATEWAY_URL',\n 'NEXT_PUBLIC_ATHENA_DB_API_URL',\n] as const\nconst ATHENA_ENV_AUTH_URL_KEYS = ['ATHENA_AUTH_URL', 'NEXT_PUBLIC_ATHENA_AUTH_URL'] as const\nconst ATHENA_ENV_STORAGE_URL_KEYS = ['ATHENA_STORAGE_URL', 'NEXT_PUBLIC_ATHENA_STORAGE_URL'] as const\nconst ATHENA_ENV_KEY_KEYS = [\n 'ATHENA_API_KEY',\n 'NEXT_PUBLIC_ATHENA_API_KEY',\n 'ATHENA_GATEWAY_API_KEY',\n 'X_API_KEY',\n] as const\nconst ATHENA_ENV_CLIENT_KEYS = ['ATHENA_CLIENT', 'NEXT_PUBLIC_ATHENA_CLIENT'] as const\n\nfunction normalizeOptionalString(value: string | null | undefined): string | undefined {\n if (typeof value !== 'string') {\n return undefined\n }\n\n const normalizedValue = value.trim()\n return normalizedValue ? normalizedValue : undefined\n}\n\nfunction readFirstEnvValue(\n env: Record<string, string | undefined>,\n keys: readonly string[],\n): string | undefined {\n for (const key of keys) {\n const value = normalizeOptionalString(env[key])\n if (value) {\n return value\n }\n }\n\n return undefined\n}\n\nfunction readHeaderBagValue(\n headers: AthenaClientSessionOptions['requestHeaders'],\n targetKey: string,\n): string | undefined {\n if (!headers) {\n return undefined\n }\n\n if (typeof (headers as AthenaHeaderBag).get === 'function') {\n return normalizeOptionalString((headers as AthenaHeaderBag).get(targetKey))\n }\n\n const normalizedTargetKey = targetKey.toLowerCase()\n for (const [key, value] of Object.entries(headers)) {\n if (key.toLowerCase() !== normalizedTargetKey) {\n continue\n }\n\n if (typeof value === 'string') {\n return normalizeOptionalString(value)\n }\n\n return undefined\n }\n\n return undefined\n}\n\nfunction resolveSessionContextOptions(\n session?: AthenaClientSessionLike | null,\n options?: AthenaClientSessionOptions,\n): AthenaClientContextOptions | undefined {\n const sessionToken = normalizeOptionalString(session?.session?.token)\n const requestCookie =\n readHeaderBagValue(options?.requestHeaders, 'cookie') ??\n readHeaderBagValue(options?.headers, 'cookie')\n\n const authInput = options?.auth\n const resolvedUserId =\n options?.userId !== undefined ? options.userId : session?.user?.id\n const resolvedOrganizationId =\n options?.organizationId !== undefined\n ? options.organizationId\n : session?.session?.activeOrganizationId\n const resolvedBearerToken =\n authInput?.bearerToken !== undefined ? authInput.bearerToken : sessionToken\n const resolvedSessionToken =\n authInput?.sessionToken !== undefined ? authInput.sessionToken : sessionToken\n const resolvedCookie =\n authInput?.cookie !== undefined ? authInput.cookie : requestCookie\n\n const auth =\n authInput !== undefined ||\n resolvedBearerToken !== undefined ||\n resolvedSessionToken !== undefined ||\n resolvedCookie !== undefined\n ? {\n ...(authInput ?? {}),\n ...(resolvedBearerToken !== undefined\n ? { bearerToken: resolvedBearerToken }\n : {}),\n ...(resolvedSessionToken !== undefined\n ? { sessionToken: resolvedSessionToken }\n : {}),\n ...(resolvedCookie !== undefined ? { cookie: resolvedCookie } : {}),\n headers: authInput?.headers ? { ...authInput.headers } : undefined,\n }\n : undefined\n\n if (\n resolvedUserId === undefined &&\n resolvedOrganizationId === undefined &&\n options?.forceNoCache === undefined &&\n !options?.headers &&\n !auth\n ) {\n return undefined\n }\n\n return {\n userId: resolvedUserId,\n organizationId: resolvedOrganizationId,\n forceNoCache: options?.forceNoCache,\n headers: options?.headers ? { ...options.headers } : undefined,\n auth,\n }\n}\n\nfunction resolveClientServiceBaseUrl(\n value: string | null | undefined,\n label: string,\n): string | undefined {\r\n if (value === undefined || value === null) {\r\n return undefined\r\n }\r\n return normalizeAthenaGatewayBaseUrl(value, { label })\r\n}\r\n\r\nfunction appendServicePath(baseUrl: string, segment: string): string {\r\n const normalizedBaseUrl = normalizeAthenaGatewayBaseUrl(baseUrl, { label: 'Athena public base URL' })\r\n return `${normalizedBaseUrl}/${segment.replace(/^\\/+/, '')}`\r\n}\r\n\r\nfunction resolveServiceUrlOverride(\r\n value: string | null | undefined,\r\n label: string,\r\n): string | undefined {\r\n return resolveClientServiceBaseUrl(value, label)\r\n}\r\n\r\nfunction resolveServiceUrls(config: AthenaCreateClientConfig) {\n const baseUrl = resolveClientServiceBaseUrl(config.url, 'Athena public base URL')\n\r\n return {\r\n dbUrl:\r\n resolveServiceUrlOverride(config.db?.url, 'Athena DB base URL') ??\r\n resolveServiceUrlOverride(config.gateway?.url, 'Athena gateway base URL') ??\r\n resolveServiceUrlOverride(config.dbUrl, 'Athena DB base URL') ??\r\n resolveServiceUrlOverride(config.gatewayUrl, 'Athena gateway base URL') ??\r\n (baseUrl ? appendServicePath(baseUrl, 'db') : undefined),\r\n authUrl:\r\n resolveServiceUrlOverride(config.auth?.url, 'Athena auth base URL') ??\r\n resolveServiceUrlOverride(config.auth?.baseUrl, 'Athena auth base URL') ??\r\n resolveServiceUrlOverride(config.authUrl, 'Athena auth base URL') ??\r\n (baseUrl ? appendServicePath(baseUrl, 'auth') : undefined),\r\n storageUrl:\r\n resolveServiceUrlOverride(config.storage?.url, 'Athena storage base URL') ??\r\n resolveServiceUrlOverride(config.storageUrl, 'Athena storage base URL') ??\r\n (baseUrl ? appendServicePath(baseUrl, 'storage') : undefined),\r\n }\n}\n\nfunction resolveOptionalClientName(value: string | null | undefined): string | undefined {\n if (value === undefined || value === null) {\n return undefined\n }\n\n const normalizedValue = value.trim()\n return normalizedValue ? normalizedValue : undefined\n}\n\nfunction resolveRequiredClientApiKey(value: string | null | undefined): string {\n if (value === undefined || value === null) {\n throw new Error(\n 'Athena API key is required. Pass createClient(url, key) with a real API key, or set key in the config object.',\n )\n }\n\n const normalizedValue = value.trim()\n if (!normalizedValue) {\n throw new Error(\n 'Athena API key is required. Pass createClient(url, key) with a real API key, or set key in the config object.',\n )\n }\n\n return normalizedValue\n}\n\nfunction hasHeaderIgnoreCase(headers: Record<string, string>, targetKey: string): boolean {\n const normalizedTargetKey = targetKey.toLowerCase()\n return Object.keys(headers).some(key => key.toLowerCase() === normalizedTargetKey)\n}\n\nfunction mergeClientHeaders(\n current: Record<string, string> | undefined,\n next: Record<string, string> | undefined,\n): Record<string, string> | undefined {\n if (!current && !next) {\n return undefined\n }\n return {\n ...(current ?? {}),\n ...(next ?? {}),\n }\n}\n\nfunction mergeDefinedObject<T extends object>(\n current: T | undefined,\n next: Partial<T> | undefined,\n): T | undefined {\n if (!current && !next) {\n return undefined\n }\n\n const merged = {\n ...(current ?? {}),\n } as T\n const mutableMerged = merged as Record<string, unknown>\n for (const [key, value] of Object.entries(next ?? {})) {\n if (value !== undefined) {\n mutableMerged[key] = value\n }\n }\n return merged\n}\n\nfunction mergeAuthClientOptions(\n current: AthenaCreateClientAuthOptions | undefined,\n next: AthenaCreateClientAuthOptions | undefined,\n): AthenaCreateClientAuthOptions | undefined {\n const merged = mergeDefinedObject(current, next)\n if (!merged) {\n return undefined\n }\n\n const mergedHeaders = mergeClientHeaders(current?.headers, next?.headers)\n if (mergedHeaders) {\n merged.headers = mergedHeaders\n }\n return merged\n}\n\nfunction mergeServiceUrlOverrides(\n current: AthenaCreateClientServiceUrlConfig | undefined,\n next: AthenaCreateClientServiceUrlConfig | undefined,\n): AthenaCreateClientServiceUrlConfig | undefined {\n return mergeDefinedObject(current, next)\n}\n\nfunction toClientContextOverrides(\n context?: AthenaClientContextOptions,\n): AthenaClientOverrideOptions | undefined {\n if (!context) {\n return undefined\n }\n\n return {\n userId: context.userId,\n organizationId: context.organizationId,\n forceNoCache: context.forceNoCache,\n headers: context.headers,\n auth: context.auth\n ? {\n ...context.auth,\n headers: context.auth.headers ? { ...context.auth.headers } : undefined,\n }\n : undefined,\n }\n}\n\nfunction mergeClientOverrideOptions(\n base: AthenaCreateClientConfig,\n overrides?: AthenaClientOverrideOptions,\n): AthenaCreateClientConfig {\n if (!overrides) {\n return {\n ...base,\n headers: base.headers ? { ...base.headers } : undefined,\n auth: base.auth\n ? {\n ...base.auth,\n headers: base.auth.headers ? { ...base.auth.headers } : undefined,\n }\n : undefined,\n db: base.db ? { ...base.db } : undefined,\n gateway: base.gateway ? { ...base.gateway } : undefined,\n storage: base.storage ? { ...base.storage } : undefined,\n }\n }\n\n const merged = mergeDefinedObject(base, overrides) ?? { ...base }\n return {\n ...merged,\n headers: mergeClientHeaders(base.headers, overrides.headers),\n auth: mergeAuthClientOptions(base.auth, overrides.auth),\n db: mergeServiceUrlOverrides(base.db, overrides.db),\n gateway: mergeServiceUrlOverrides(base.gateway, overrides.gateway),\n storage: mergeServiceUrlOverrides(base.storage, overrides.storage),\n }\n}\n\nfunction normalizeAuthClientConfig(\n auth: AthenaCreateClientAuthOptions | undefined,\n defaultBaseUrl?: string,\n): AthenaAuthClientConfig | undefined {\n if (!auth && defaultBaseUrl === undefined) {\n return undefined\n }\n\n const {\n url,\n baseUrl,\n apiKey,\n bearerToken,\n cookie,\n sessionToken,\n ...rest\n } = auth ?? {}\n const normalized: AthenaAuthClientConfig = {\n ...rest,\n }\n const resolvedBaseUrl = resolveClientServiceBaseUrl(\n url ?? baseUrl ?? defaultBaseUrl,\n 'Athena auth base URL',\n )\n\n if (resolvedBaseUrl !== undefined) {\n normalized.baseUrl = resolvedBaseUrl\n }\n if (typeof apiKey === 'string') {\n normalized.apiKey = apiKey\n }\n if (typeof bearerToken === 'string') {\n normalized.bearerToken = bearerToken\n }\n if (typeof cookie === 'string') {\n normalized.cookie = cookie\n }\n if (typeof sessionToken === 'string') {\n normalized.sessionToken = sessionToken\n }\n\n return normalized\n}\n\r\nfunction resolveCreateClientConfig(\n config: AthenaCreateClientConfig,\n): AthenaClientConfig {\n const resolvedUrls = resolveServiceUrls(config)\r\n if (!resolvedUrls.dbUrl) {\r\n throw new Error(\r\n 'Athena DB base URL is required. Pass createClient(url, key) for a unified root, or set db.url / gateway.url / gatewayUrl explicitly.',\r\n )\r\n }\r\n\r\n return {\n baseUrl: resolvedUrls.dbUrl,\n apiKey: resolveRequiredClientApiKey(config.key),\n client: resolveOptionalClientName(config.client),\n userId: config.userId,\n organizationId: config.organizationId,\n forceNoCache: config.forceNoCache,\n backend: toBackendConfig(config.backend),\n headers: config.headers,\n auth: config.auth,\n authUrl: resolvedUrls.authUrl,\r\n storageUrl: resolvedUrls.storageUrl,\r\n experimental: config.experimental,\r\n }\n}\n\nfunction createClientFromInput<TStrict extends boolean = false>(\n sourceConfig: AthenaCreateClientConfig,\n): AthenaSdkClientWithAuth<TStrict> {\n return createClientFromConfig(resolveCreateClientConfig(sourceConfig), sourceConfig)\n}\n\nfunction createClientFromConfig<TStrict extends boolean = false>(\n config: AthenaClientConfig,\n sourceConfig: AthenaCreateClientConfig,\n): AthenaSdkClientWithAuth<TStrict> {\n const normalizedAuthConfig = normalizeAuthClientConfig(config.auth, config.authUrl)\n const gatewayHeaders: Record<string, string> = {\n ...(config.headers ?? {}),\n }\n if (\n normalizedAuthConfig?.bearerToken &&\n !hasHeaderIgnoreCase(gatewayHeaders, 'X-Athena-Auth-Bearer-Token')\n ) {\n gatewayHeaders['X-Athena-Auth-Bearer-Token'] = normalizedAuthConfig.bearerToken\n }\n if (\n normalizedAuthConfig?.cookie &&\n !hasHeaderIgnoreCase(gatewayHeaders, 'Cookie')\n ) {\n gatewayHeaders.Cookie = normalizedAuthConfig.cookie\n }\n if (\n normalizedAuthConfig?.sessionToken &&\n !hasHeaderIgnoreCase(gatewayHeaders, 'X-Athena-Auth-Session-Token')\n ) {\n gatewayHeaders['X-Athena-Auth-Session-Token'] = normalizedAuthConfig.sessionToken\n }\n\n const gateway = createAthenaGatewayClient({\n baseUrl: config.baseUrl,\n apiKey: config.apiKey,\n client: config.client,\n userId: config.userId,\n organizationId: config.organizationId,\n forceNoCache: config.forceNoCache,\n backend: config.backend,\n headers: gatewayHeaders,\n })\n const formatGatewayResult = createResultFormatter(config.experimental)\n const queryTracer = createQueryTracer(config.experimental)\n const auth = createAuthClient({\n ...(normalizedAuthConfig ?? {}),\n ...(config.forceNoCache ? { forceNoCache: true } : {}),\n })\n function from<TModel extends AthenaModelTarget>(\r\n model: TModel,\r\n ): TableQueryBuilder<RowOf<TModel>, InsertOf<TModel>, UpdateOf<TModel>, unknown, TStrict>\r\n function from<\r\n Row = AthenaRowShape,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n >(\r\n table: string,\r\n options?: AthenaFromOptions,\r\n ): TableQueryBuilder<Row, Insert, Update, unknown, TStrict>\r\n function from<\r\n Row = AthenaRowShape,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n >(\r\n tableOrModel: string | AthenaModelTarget<Row, Insert, Update>,\r\n options?: AthenaFromOptions,\r\n ): TableQueryBuilder<Row, Insert, Update, unknown, TStrict> {\r\n if (isAthenaModelTarget(tableOrModel)) {\r\n if (options?.schema !== undefined) {\r\n throw new Error(\r\n 'from(model) does not accept a schema override because the model already defines its target.',\r\n )\r\n }\r\n return createTableBuilder<Row, Insert, Update, unknown, TStrict>(\r\n resolveAthenaModelTargetTableName(tableOrModel),\r\n gateway,\r\n formatGatewayResult,\r\n queryTracer,\r\n config.experimental,\r\n )\r\n }\r\n\r\n const resolvedTableName = resolveTableNameForCall(tableOrModel as string, options?.schema)\r\n return createTableBuilder<Row, Insert, Update, unknown, TStrict>(\r\n resolvedTableName,\r\n gateway,\r\n formatGatewayResult,\r\n queryTracer,\r\n config.experimental,\r\n )\r\n }\r\n const rpc: AthenaSdkClient<TStrict>['rpc'] = <Row = unknown, Args extends AthenaJsonObject = AthenaJsonObject>(\r\n fn: string,\r\n args?: Args,\r\n options?: AthenaRpcCallOptions,\r\n ) => {\r\n const normalizedFn = fn.trim()\r\n if (!normalizedFn) {\r\n throw new Error('rpc requires a function name')\r\n }\r\n return createRpcBuilder<Row, TStrict>(\r\n normalizedFn,\r\n args as AthenaJsonObject | undefined,\r\n options,\r\n gateway,\r\n formatGatewayResult,\r\n queryTracer,\r\n captureTraceCallsite(queryTracer),\r\n Boolean(config.experimental?.debugAst),\r\n )\r\n }\r\n const query = createQueryBuilder(\n gateway,\n formatGatewayResult,\n config.experimental,\n queryTracer,\n ) as AthenaSdkClient<TStrict>['query']\n const db = createDbModule({ from, rpc, query })\n const withContext: AthenaSdkClientWithAuth<TStrict>['withContext'] = context =>\n createClientFromInput<TStrict>(\n mergeClientOverrideOptions(sourceConfig, toClientContextOverrides(context)),\n )\n const withSession: AthenaSdkClientWithAuth<TStrict>['withSession'] = (session, options) =>\n createClientFromInput<TStrict>(\n mergeClientOverrideOptions(\n sourceConfig,\n toClientContextOverrides(resolveSessionContextOptions(session, options)),\n ),\n )\n const authWithOptions: AthenaSdkClientWithAuth<TStrict>['withOptions'] = options =>\n createClientFromInput<TStrict>(mergeClientOverrideOptions(sourceConfig, options))\n\n const sdkClient: AthenaSdkClientWithAuth<TStrict> = {\n from,\n db,\n rpc,\n query,\n verifyConnection: gateway.verifyConnection,\n auth: auth.auth,\n withContext,\n withSession,\n withOptions: authWithOptions,\n }\n\n if (config.experimental?.athenaStorageBackend) {\n const storageWithContext: AthenaSdkClientWithStorage<TStrict>['withContext'] = context =>\n createClientFromInput<TStrict>(\n mergeClientOverrideOptions(sourceConfig, toClientContextOverrides(context)),\n ) as AthenaSdkClientWithStorage<TStrict>\n const storageWithSession: AthenaSdkClientWithStorage<TStrict>['withSession'] = (session, options) =>\n createClientFromInput<TStrict>(\n mergeClientOverrideOptions(\n sourceConfig,\n toClientContextOverrides(resolveSessionContextOptions(session, options)),\n ),\n ) as AthenaSdkClientWithStorage<TStrict>\n const storageWithOptions: AthenaSdkClientWithStorage<TStrict>['withOptions'] = options =>\n createClientFromInput<TStrict>(\n mergeClientOverrideOptions(sourceConfig, options),\n ) as AthenaSdkClientWithStorage<TStrict>\n const storageClient: AthenaSdkClientWithStorage<TStrict> = {\n ...sdkClient,\n withContext: storageWithContext,\n withSession: storageWithSession,\n withOptions: storageWithOptions,\n storage: createStorageModule(gateway, {\n ...config.experimental.storage,\n ...(config.storageUrl\n ? {\n baseUrl: config.storageUrl,\r\n stripBasePath: true,\r\n }\r\n : {}),\r\n } as AthenaStorageClientConfig),\r\n }\r\n return storageClient\r\n }\r\n\r\n return sdkClient\r\n}\r\n\r\nexport interface AthenaClientBuilder<\n StorageEnabled extends boolean = false,\n TStrict extends boolean = false,\n> {\n /** Set the public Athena base URL. */\n url(url: string | null | undefined): AthenaClientBuilder<StorageEnabled, TStrict>\n /** Set the API key used for all requests. */\n key(apiKey: string | null | undefined): AthenaClientBuilder<StorageEnabled, TStrict>\n /** Set the default backend routing strategy. */\n backend(backend: BackendConfig | BackendType): AthenaClientBuilder<StorageEnabled, TStrict>\n /** Set the default Athena client routing key. */\n client(clientName: string | null | undefined): AthenaClientBuilder<StorageEnabled, TStrict>\n /** Attach static headers to every request. */\r\n headers(headers: Record<string, string>): AthenaClientBuilder<StorageEnabled, TStrict>\r\n /** Configure Athena Auth client behavior for `client.auth.*` methods. */\r\n auth(config: AthenaCreateClientAuthOptions): AthenaClientBuilder<StorageEnabled, TStrict>\r\n /** Configure experimental client options and narrow the built client when storage or strict column checks are enabled. */\r\n experimental(\r\n options: AthenaClientExperimentalOptions & { athenaStorageBackend: true; typecheckColumns: true },\r\n ): AthenaClientBuilder<true, true>\r\n experimental(\r\n options: AthenaClientExperimentalOptions & { athenaStorageBackend: true },\r\n ): AthenaClientBuilder<true, TStrict>\r\n experimental(\r\n options: AthenaClientExperimentalOptions & { typecheckColumns: true },\r\n ): AthenaClientBuilder<StorageEnabled, true>\r\n experimental(options: AthenaClientExperimentalOptions): AthenaClientBuilder<StorageEnabled, TStrict>\r\n /** Apply createClient options and narrow the built client when storage is enabled. */\r\n options(options: AthenaCreateClientOptionsWithStorageAndTypecheckedColumns): AthenaClientBuilder<true, true>\r\n options(options: AthenaCreateClientOptionsWithStorage): AthenaClientBuilder<true, TStrict>\r\n options(options: AthenaCreateClientOptionsWithTypecheckedColumns): AthenaClientBuilder<StorageEnabled, true>\r\n options(options: AthenaCreateClientOptions): AthenaClientBuilder<StorageEnabled, TStrict>\r\n /** Build the immutable Athena SDK client. */\r\n build(): StorageEnabled extends true ? AthenaSdkClientWithStorage<TStrict> : AthenaSdkClientWithAuth<TStrict>\r\n}\r\n\r\n/** Canonical Athena client factory with builder-based configuration. */\r\nexport class AthenaClient {\n /** Create a fluent builder for a strongly-typed Athena SDK client. */\n static builder(): AthenaClientBuilder<false, false> {\n return createAthenaClientBuilder(config => createClientFromInput(config))\n }\n\n /** Build a client from process environment variables. */\n static fromEnvironment(\n options: AthenaClientFromEnvironmentOptionsWithStorageAndTypecheckedColumns,\n ): AthenaSdkClientWithStorage<true>\n static fromEnvironment(\n options: AthenaClientFromEnvironmentOptionsWithStorage,\n ): AthenaSdkClientWithStorage<false>\n static fromEnvironment(\n options: AthenaClientFromEnvironmentOptionsWithTypecheckedColumns,\n ): AthenaSdkClientWithAuth<true>\n static fromEnvironment(\n options?: AthenaClientFromEnvironmentOptions,\n ): AthenaSdkClientWithAuth<false>\n static fromEnvironment(\n options: AthenaClientFromEnvironmentOptions = {},\n ): AthenaSdkClientWithAuth<false> {\n const env = options.env ?? process.env\n const url = options.url ?? readFirstEnvValue(env, ATHENA_ENV_URL_KEYS)\n const gatewayUrl =\n options.gatewayUrl ?? readFirstEnvValue(env, ATHENA_ENV_GATEWAY_URL_KEYS)\n const authUrl =\n options.authUrl ?? readFirstEnvValue(env, ATHENA_ENV_AUTH_URL_KEYS)\n const storageUrl =\n options.storageUrl ?? readFirstEnvValue(env, ATHENA_ENV_STORAGE_URL_KEYS)\n const key = options.key ?? readFirstEnvValue(env, ATHENA_ENV_KEY_KEYS)\n const client =\n options.client ?? readFirstEnvValue(env, ATHENA_ENV_CLIENT_KEYS)\n\n if ((!url && !gatewayUrl) || !key) {\n throw new Error(\n 'AthenaClient.fromEnvironment() requires an API key plus a public or gateway URL. Supported aliases include ATHENA_API_KEY, NEXT_PUBLIC_ATHENA_API_KEY, ATHENA_GATEWAY_API_KEY, X_API_KEY, ATHENA_URL, NEXT_PUBLIC_ATHENA_URL, ATHENA_GATEWAY_URL, and ATHENA_DB_URL.',\n )\n }\n\n const { env: _env, ...clientOptions } = options\n void _env\n\n return createClient({\n ...clientOptions,\n url,\n gatewayUrl,\n authUrl,\n storageUrl,\n key,\n client,\n })\n }\n}\n\r\n/** Create client (convenience wrapper; use AthenaClient.builder() for full control) */\r\nexport function createClient(\r\n config: AthenaCreateClientConfigWithStorageAndTypecheckedColumns,\r\n): AthenaSdkClientWithStorage<true>\r\nexport function createClient(\r\n config: AthenaCreateClientConfigWithStorage,\r\n): AthenaSdkClientWithStorage<false>\r\nexport function createClient(\r\n config: AthenaCreateClientConfigWithTypecheckedColumns,\r\n): AthenaSdkClientWithAuth<true>\r\nexport function createClient(\r\n config: AthenaCreateClientConfig,\r\n): AthenaSdkClientWithAuth<false>\r\nexport function createClient(\n url: string | null | undefined,\n apiKey: string | null | undefined,\n options: AthenaCreateClientOptionsWithStorageAndTypecheckedColumns,\n): AthenaSdkClientWithStorage<true>\nexport function createClient(\n url: string | null | undefined,\n apiKey: string | null | undefined,\n options: AthenaCreateClientOptionsWithStorage,\n): AthenaSdkClientWithStorage<false>\nexport function createClient(\n url: string | null | undefined,\n apiKey: string | null | undefined,\n options: AthenaCreateClientOptionsWithTypecheckedColumns,\n): AthenaSdkClientWithAuth<true>\nexport function createClient(\n url: string | null | undefined,\n apiKey: string | null | undefined,\n options?: AthenaCreateClientOptions,\n): AthenaSdkClientWithAuth<false>\nexport function createClient(\n configOrUrl: AthenaCreateClientConfig | string | null | undefined,\n apiKey?: string | null,\n options?: AthenaCreateClientOptions,\n): AthenaSdkClientWithAuth<false> {\n if (typeof configOrUrl === 'string' || configOrUrl === null || configOrUrl === undefined) {\n return createClientFromInput({\n url: configOrUrl,\n key: apiKey ?? '',\n ...options,\n })\n }\n\n return createClientFromInput(configOrUrl)\n}\n","/**\r\n * athena gateway types\r\n *\r\n * type definitions for the athena gateway api client and react hook\r\n */\r\n\r\nexport type AthenaGatewayMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE'\r\nexport type AthenaGatewayEndpointPath =\r\n | '/gateway/fetch'\r\n | '/gateway/insert'\r\n | '/gateway/update'\r\n | '/gateway/delete'\r\n | '/gateway/rpc'\r\n | '/gateway/query'\r\n | `/rpc/${string}`\r\n | `/storage/${string}`\r\n\r\nexport type AthenaCountOption = 'exact' | 'planned' | 'estimated'\r\n\r\nexport type AthenaJsonPrimitive = string | number | boolean | null\r\nexport type AthenaJsonValue = AthenaJsonPrimitive | AthenaJsonObject | AthenaJsonArray\r\nexport interface AthenaJsonObject {\r\n [key: string]: AthenaJsonValue\r\n}\r\nexport type AthenaJsonArray = AthenaJsonValue[]\r\n\r\nexport type AthenaConditionValue = AthenaJsonPrimitive\r\nexport type AthenaConditionArrayValue = Array<AthenaConditionValue>\r\nexport type AthenaConditionCastType = string\r\n\r\nexport type AthenaConditionOperator =\r\n | 'eq'\r\n | 'neq'\r\n | 'gt'\r\n | 'gte'\r\n | 'lt'\r\n | 'lte'\r\n | 'like'\r\n | 'ilike'\r\n | 'is'\r\n | 'in'\r\n | 'contains'\r\n | 'containedBy'\r\n | 'not'\r\n | 'or'\r\n\r\nexport interface AthenaGatewayCondition {\r\n column?: string\r\n operator: AthenaConditionOperator\r\n value?: AthenaConditionValue | AthenaConditionArrayValue | string\r\n /**\r\n * Optional explicit cast for `value` (for example `\"uuid\"`).\r\n * Older gateways ignore unknown fields; newer gateways may use this hint.\r\n */\r\n value_cast?: AthenaConditionCastType\r\n /**\r\n * Optional explicit cast for `column` (for example `\"text\"`).\r\n * Used by SDK SQL fallback for typed comparisons.\r\n */\r\n column_cast?: AthenaConditionCastType\r\n /** Back-compat shape expected by older gateway implementations */\r\n eq_column?: string\r\n eq_value?: AthenaConditionValue | AthenaConditionArrayValue | string\r\n /** Optional cast hint aligned with legacy eq_* fields */\r\n eq_value_cast?: AthenaConditionCastType\r\n /** Optional cast hint aligned with legacy eq_* fields */\r\n eq_column_cast?: AthenaConditionCastType\r\n}\r\n\r\nexport type AthenaSortDirection = 'ascending' | 'descending'\r\n\r\nexport interface AthenaSortBy {\r\n field: string\r\n direction: AthenaSortDirection\r\n}\r\n\r\nexport interface AthenaFetchPayload {\r\n select?: string | AthenaJsonObject\r\n view_name?: string\r\n table_name?: string\r\n columns?: string[] | string\r\n where?: AthenaJsonObject\r\n orderBy?: AthenaJsonObject | AthenaJsonArray\r\n conditions?: AthenaGatewayCondition[]\r\n limit?: number\r\n offset?: number\r\n current_page?: number\r\n page_size?: number\r\n total_pages?: number\r\n strip_nulls?: boolean\r\n count?: AthenaCountOption\r\n head?: boolean\r\n group_by?: string\r\n time_granularity?: 'day' | 'hour' | 'minute'\r\n aggregation_column?: string\r\n aggregation_strategy?: 'cumulative_sum'\r\n aggregation_dedup?: boolean\r\n sort_by?: AthenaSortBy\r\n}\r\n\r\nexport interface AthenaInsertPayload<\r\n TInsertBody = AthenaJsonObject,\r\n TUpdateBody = AthenaJsonObject,\r\n> {\r\n table_name: string\r\n insert_body: TInsertBody | TInsertBody[]\r\n update_body?: TUpdateBody\r\n columns?: string[] | string\r\n count?: AthenaCountOption\r\n head?: boolean\r\n default_to_null?: boolean\r\n on_conflict?: string | string[]\r\n}\r\n\r\nexport interface AthenaDeletePayload {\r\n table_name: string\r\n resource_id?: string\r\n columns?: string[] | string\r\n conditions?: AthenaGatewayCondition[]\r\n sort_by?: AthenaSortBy\r\n current_page?: number\r\n page_size?: number\r\n total_pages?: number\r\n}\r\n\r\nexport interface AthenaUpdatePayload<TUpdateBody = AthenaJsonObject>\r\n extends AthenaFetchPayload {\r\n set?: TUpdateBody\r\n data?: TUpdateBody\r\n}\r\n\r\nexport type AthenaRpcFilterOperator =\r\n | 'eq'\r\n | 'neq'\r\n | 'gt'\r\n | 'gte'\r\n | 'lt'\r\n | 'lte'\r\n | 'like'\r\n | 'ilike'\r\n | 'is'\r\n | 'in'\r\n\r\nexport interface AthenaRpcFilter {\r\n column: string\r\n operator: AthenaRpcFilterOperator\r\n value?: AthenaConditionValue | AthenaConditionArrayValue | string\r\n}\r\n\r\nexport interface AthenaRpcOrder {\r\n column: string\r\n ascending?: boolean\r\n}\r\n\r\nexport interface AthenaRpcPayload<TArgs = AthenaJsonObject> {\r\n function: string\r\n function_name?: string\r\n schema?: string\r\n args?: TArgs\r\n select?: string\r\n filters?: AthenaRpcFilter[]\r\n count?: AthenaCountOption\r\n head?: boolean\r\n limit?: number\r\n offset?: number\r\n order?: AthenaRpcOrder\r\n}\r\n\r\nexport interface AthenaQueryPayload {\r\n query: string\r\n}\r\n\r\n/** Backend type for Athena client (aligns with athena-rs) */\r\nexport type BackendType = 'athena' | 'postgrest' | 'postgresql' | 'scylladb'\r\n\r\n/** Backend config: type from SDK + backend-scoped options */\r\nexport interface BackendConfig {\r\n type: BackendType\r\n options?: AthenaJsonObject\r\n}\r\n\r\n/** Pre-defined backends for lean usage: backend: Backend.Athena */\r\nexport const Backend = {\r\n Athena: { type: 'athena' } as const,\r\n Postgrest: { type: 'postgrest' } as const,\r\n PostgreSQL: { type: 'postgresql' } as const,\r\n ScyllaDB: { type: 'scylladb' } as const,\r\n} as const satisfies Record<string, BackendConfig>\r\n\r\nexport type BackendOption = BackendConfig | BackendType\r\n\r\nexport interface AthenaGatewayBaseOptions {\n baseUrl?: string\n apiKey?: string\n client?: string\n backend?: BackendOption\n publishEvent?: string\n forceNoCache?: boolean\n headers?: Record<string, string>\n userId?: string | null\n organizationId?: string | null\n}\n\r\nexport type AthenaGatewayHookConfig = AthenaGatewayBaseOptions\r\nexport interface AthenaGatewayCallOptions extends AthenaGatewayBaseOptions {\r\n schema?: string\r\n count?: AthenaCountOption\r\n head?: boolean\r\n defaultToNull?: boolean\r\n stripNulls?: boolean\r\n onConflict?: string | string[]\r\n updateBody?: AthenaJsonObject\r\n}\r\n\r\nexport interface AthenaRpcCallOptions extends AthenaGatewayCallOptions {\r\n count?: AthenaCountOption\r\n get?: boolean\r\n}\r\n\r\nexport interface AthenaGatewayResponse<T = unknown> {\r\n ok: boolean\r\n status: number\r\n statusText?: string | null\r\n data: T | null\r\n count?: number | null\r\n error?: string\r\n errorDetails?: AthenaGatewayErrorDetails | null\r\n raw: unknown\r\n}\r\n\r\nexport type AthenaGatewayErrorCode =\r\n | 'NETWORK_ERROR'\r\n | 'INVALID_URL'\r\n | 'HTTP_ERROR'\r\n | 'INVALID_JSON'\r\n | 'UNKNOWN_ERROR'\r\n\r\nexport interface AthenaGatewayErrorDetails {\r\n code: AthenaGatewayErrorCode\r\n message: string\r\n status: number\r\n endpoint?: AthenaGatewayEndpointPath\r\n method?: AthenaGatewayMethod\r\n requestId?: string\r\n hint?: string\r\n cause?: string\r\n}\r\n\r\nexport interface AthenaGatewayConnectionOptions {\r\n path?: `/${string}`\r\n headers?: Record<string, string>\r\n signal?: AbortSignal\r\n}\r\n\r\nexport interface AthenaGatewayConnectionResult {\r\n ok: boolean\r\n reachable: boolean\r\n status: number\r\n statusText?: string | null\r\n baseUrl: string\r\n url: string\r\n error?: string\r\n errorDetails?: AthenaGatewayErrorDetails | null\r\n raw: unknown\r\n}\r\n\r\nexport interface AthenaGatewayResponseLog extends AthenaGatewayResponse {\r\n timestamp: string\r\n}\r\n\r\nexport interface AthenaGatewayCallLog {\r\n endpoint: AthenaGatewayEndpointPath\r\n method: AthenaGatewayMethod\r\n payload: unknown\r\n headers: Record<string, string>\r\n timestamp: string\r\n}\r\n\r\nexport interface AthenaGatewayHookResult {\r\n fetchGateway: <T = unknown>(\r\n payload: AthenaFetchPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ) => Promise<AthenaGatewayResponse<T>>\r\n insertGateway: <T = unknown>(\r\n payload: AthenaInsertPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ) => Promise<AthenaGatewayResponse<T>>\r\n updateGateway: <T = unknown>(\r\n payload: AthenaUpdatePayload,\r\n options?: AthenaGatewayCallOptions,\r\n ) => Promise<AthenaGatewayResponse<T>>\r\n deleteGateway: <T = unknown>(\r\n payload: AthenaDeletePayload,\r\n options?: AthenaGatewayCallOptions,\r\n ) => Promise<AthenaGatewayResponse<T>>\r\n rpcGateway: <T = unknown>(\r\n payload: AthenaRpcPayload,\r\n options?: AthenaRpcCallOptions,\r\n ) => Promise<AthenaGatewayResponse<T>>\r\n isLoading: boolean\r\n error: string | null\r\n lastRequest: AthenaGatewayCallLog | null\r\n lastResponse: AthenaGatewayResponseLog | null\r\n baseUrl: string\r\n}\r\n","import type {\r\n AnyModelDef,\r\n DatabaseDef,\r\n ModelDef,\r\n ModelMetadata,\r\n RegistryDef,\r\n SchemaDef,\r\n} from './types.ts'\r\n\r\n/**\n * @deprecated Prefer `table(...).schema(...).columns(...).primaryKey(...)` for\n * new model contracts. `defineModel(...)` is retained for legacy compatibility,\n * manual low-level contracts, and legacy generator output.\n *\n * Declares a model contract with explicit metadata and typed row/insert/update shapes.\n */\nexport function defineModel<\n Row,\n Insert = Partial<Row>,\n Update = Partial<Insert>,\n Meta extends ModelMetadata<Row> = ModelMetadata<Row>,\n>(input: { meta: Meta }): ModelDef<Row, Insert, Update, Meta> {\r\n return input\r\n}\r\n\r\n/**\r\n * Declares a schema-level model map.\r\n */\r\nexport function defineSchema<\r\n Models extends Record<string, AnyModelDef>,\r\n>(models: Models): SchemaDef<Models> {\r\n return { models }\r\n}\r\n\r\n/**\r\n * Declares a database-level schema map.\r\n */\r\nexport function defineDatabase<\r\n Schemas extends Record<string, SchemaDef<Record<string, AnyModelDef>>>,\r\n>(schemas: Schemas): DatabaseDef<Schemas> {\r\n return { schemas }\r\n}\r\n\r\n/**\r\n * Declares a top-level multi-database registry.\r\n */\r\nexport function defineRegistry<\r\n Databases extends Record<string, DatabaseDef<Record<string, SchemaDef<Record<string, AnyModelDef>>>>>,\r\n>(databases: Databases): RegistryDef<Databases> {\r\n return databases\r\n}\r\n\r\n","import type { AnyModelDef, InsertOf, RowOf, UpdateOf } from './types.ts'\r\n\r\ntype ModelValueRecord = Record<string, unknown>\r\n\r\nexport type ModelFormNullishMode = 'empty-string' | 'undefined' | 'null'\r\n\r\ntype NullishValueByMode = {\r\n 'empty-string': ''\r\n undefined: undefined\r\n null: null\r\n}\r\n\r\ntype MapNullableToFormValue<TField, TMode extends ModelFormNullishMode> =\r\n null extends TField\r\n ? Exclude<TField, null> | NullishValueByMode[TMode]\r\n : TField\r\n\r\n/**\r\n * Form value shape derived from a model insert payload.\r\n * Nullable fields are remapped to the selected nullish representation.\r\n */\r\nexport type ModelFormValues<\r\n TModel extends AnyModelDef,\r\n TMode extends ModelFormNullishMode = 'empty-string',\r\n> = {\r\n [K in keyof InsertOf<TModel>]: MapNullableToFormValue<InsertOf<TModel>[K], TMode>\r\n}\r\n\r\n/**\r\n * Alias for deriving form value types from any model contract.\r\n */\r\nexport type FormValuesOf<\r\n TModel extends AnyModelDef,\r\n TMode extends ModelFormNullishMode = 'empty-string',\r\n> = ModelFormValues<TModel, TMode>\r\n\r\n/**\r\n * Default value shape for form initialization.\r\n */\r\nexport type ModelFormDefaults<\r\n TModel extends AnyModelDef,\r\n TMode extends ModelFormNullishMode = 'empty-string',\r\n> = Partial<ModelFormValues<TModel, TMode>>\r\n\r\nexport interface ToModelFormDefaultsOptions<TMode extends ModelFormNullishMode = 'empty-string'> {\r\n /**\r\n * Controls how nullable model values are represented in form defaults.\r\n * - `empty-string` (default): `null -> \"\"`\r\n * - `undefined`: `null -> undefined`\r\n * - `null`: keeps `null`\r\n */\r\n nullishMode?: TMode\r\n}\r\n\r\nexport interface ToModelPayloadOptions {\r\n /**\r\n * Converts `\"\"` into `null` for nullable model fields.\r\n * Defaults to `true`.\r\n */\r\n emptyStringAsNull?: boolean\r\n /**\r\n * Omits `undefined` keys from the outgoing payload.\r\n * Defaults to `true`.\r\n */\r\n stripUndefined?: boolean\r\n}\r\n\r\nfunction resolveNullishValue(mode: ModelFormNullishMode): '' | undefined | null {\r\n if (mode === 'undefined') return undefined\r\n if (mode === 'null') return null\r\n return ''\r\n}\r\n\r\nfunction isRecord(value: unknown): value is ModelValueRecord {\r\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\r\n}\r\n\r\nfunction isNullableColumn(model: AnyModelDef, key: string): boolean {\r\n const nullable = model.meta.nullable as Partial<Record<string, boolean>> | undefined\r\n return nullable?.[key] === true\r\n}\r\n\r\n/**\r\n * Normalizes model data into form-safe defaults using model nullability metadata.\r\n */\r\nexport function toModelFormDefaults<\r\n TModel extends AnyModelDef,\r\n TMode extends ModelFormNullishMode = 'empty-string',\r\n>(\r\n model: TModel,\r\n values?: Partial<RowOf<TModel>> | Partial<InsertOf<TModel>> | null,\r\n options?: ToModelFormDefaultsOptions<TMode>,\r\n): ModelFormDefaults<TModel, TMode> {\r\n const source = values as ModelValueRecord | null | undefined\r\n if (!isRecord(source)) {\r\n return {} as ModelFormDefaults<TModel, TMode>\r\n }\r\n\r\n const mode = options?.nullishMode ?? ('empty-string' as TMode)\r\n const nullishValue = resolveNullishValue(mode)\r\n const result: ModelValueRecord = {}\r\n\r\n for (const [key, value] of Object.entries(source)) {\r\n if (value === null && isNullableColumn(model, key)) {\r\n result[key] = nullishValue\r\n continue\r\n }\r\n result[key] = value\r\n }\r\n\r\n return result as ModelFormDefaults<TModel, TMode>\r\n}\r\n\r\n/**\r\n * Normalizes form values back into model-compatible insert/update payloads.\r\n */\r\nexport function toModelPayload<TModel extends AnyModelDef>(\r\n model: TModel,\r\n formValues: Partial<ModelFormValues<TModel, 'empty-string' | 'undefined' | 'null'>>,\r\n options?: ToModelPayloadOptions,\r\n): Partial<InsertOf<TModel>> {\r\n const emptyStringAsNull = options?.emptyStringAsNull ?? true\r\n const stripUndefined = options?.stripUndefined ?? true\r\n const result: ModelValueRecord = {}\r\n\r\n for (const [key, rawValue] of Object.entries(formValues as ModelValueRecord)) {\r\n if (rawValue === undefined && stripUndefined) {\r\n continue\r\n }\r\n\r\n if (emptyStringAsNull && rawValue === '' && isNullableColumn(model, key)) {\r\n result[key] = null\r\n continue\r\n }\r\n\r\n result[key] = rawValue\r\n }\r\n\r\n return result as Partial<InsertOf<TModel>>\r\n}\r\n\r\n/**\r\n * Runtime form adapter bound to a model contract.\r\n */\r\nexport interface ModelFormAdapter<TModel extends AnyModelDef> {\r\n model: TModel\r\n toDefaults<TMode extends ModelFormNullishMode = 'empty-string'>(\r\n values?: Partial<RowOf<TModel>> | Partial<InsertOf<TModel>> | null,\r\n options?: ToModelFormDefaultsOptions<TMode>,\r\n ): ModelFormDefaults<TModel, TMode>\r\n toInsert(\r\n values: Partial<ModelFormValues<TModel, 'empty-string' | 'undefined' | 'null'>>,\r\n options?: ToModelPayloadOptions,\r\n ): Partial<InsertOf<TModel>>\r\n toUpdate(\r\n values: Partial<ModelFormValues<TModel, 'empty-string' | 'undefined' | 'null'>>,\r\n options?: ToModelPayloadOptions,\r\n ): Partial<UpdateOf<TModel>>\r\n}\r\n\r\n/**\r\n * Creates a small model-aware adapter for form defaults and payload normalization.\r\n */\r\nexport function createModelFormAdapter<TModel extends AnyModelDef>(model: TModel): ModelFormAdapter<TModel> {\r\n return {\r\n model,\r\n toDefaults(values, options) {\r\n return toModelFormDefaults(model, values, options)\r\n },\r\n toInsert(values, options) {\r\n return toModelPayload(model, values, options) as Partial<InsertOf<TModel>>\r\n },\r\n toUpdate(values, options) {\r\n return toModelPayload(model, values, options) as Partial<UpdateOf<TModel>>\r\n },\r\n }\r\n}\r\n","import type { ZodType } from 'zod'\r\nimport type { ModelColumnKind } from './types.ts'\r\n\r\nexport const COLUMN_CONFIG = Symbol('athena.column.config')\r\n\r\nexport interface ColumnRuntimeConfig<\r\n TValue,\r\n TNullable extends boolean = false,\r\n THasDefault extends boolean = false,\r\n TGenerated extends boolean = false,\r\n TColumnName extends string | undefined = undefined,\r\n TKind extends ModelColumnKind = ModelColumnKind,\r\n> {\r\n readonly kind: TKind\r\n readonly columnName?: TColumnName\r\n readonly nullable: TNullable\r\n readonly hasDefault: THasDefault\r\n readonly isGenerated: TGenerated\r\n readonly enumValues?: readonly string[]\r\n readonly jsonSchema?: ZodType<TValue>\r\n readonly __value?: TValue\r\n}\r\n\r\nexport interface AthenaColumnBuilder<\r\n TValue,\r\n TNullable extends boolean = false,\r\n THasDefault extends boolean = false,\r\n TGenerated extends boolean = false,\r\n TColumnName extends string | undefined = undefined,\r\n TKind extends ModelColumnKind = ModelColumnKind,\r\n> {\r\n readonly [COLUMN_CONFIG]: ColumnRuntimeConfig<\r\n TValue,\r\n TNullable,\r\n THasDefault,\r\n TGenerated,\r\n TColumnName,\r\n TKind\r\n >\r\n optional(): AthenaColumnBuilder<TValue, true, THasDefault, TGenerated, TColumnName, TKind>\r\n from<TNextColumnName extends string>(\r\n columnName: TNextColumnName,\r\n ): AthenaColumnBuilder<TValue, TNullable, THasDefault, TGenerated, TNextColumnName, TKind>\r\n defaulted(): AthenaColumnBuilder<TValue, TNullable, true, TGenerated, TColumnName, TKind>\r\n generated(): AthenaColumnBuilder<TValue, TNullable, THasDefault, true, TColumnName, TKind>\r\n}\r\n\r\nexport type AnyColumnBuilder = AthenaColumnBuilder<\r\n unknown,\r\n boolean,\r\n boolean,\r\n boolean,\r\n string | undefined,\r\n ModelColumnKind\r\n>\r\n\r\nfunction createColumnBuilder<\r\n TValue,\r\n TNullable extends boolean,\r\n THasDefault extends boolean,\r\n TGenerated extends boolean,\r\n TColumnName extends string | undefined,\r\n TKind extends ModelColumnKind,\r\n>(\r\n config: ColumnRuntimeConfig<\r\n TValue,\r\n TNullable,\r\n THasDefault,\r\n TGenerated,\r\n TColumnName,\r\n TKind\r\n >,\r\n): AthenaColumnBuilder<TValue, TNullable, THasDefault, TGenerated, TColumnName, TKind> {\r\n return {\r\n [COLUMN_CONFIG]: config,\r\n optional() {\r\n return createColumnBuilder({\r\n ...config,\r\n nullable: true,\r\n })\r\n },\r\n from<TNextColumnName extends string>(columnName: TNextColumnName) {\r\n return createColumnBuilder({\r\n ...config,\r\n columnName,\r\n })\r\n },\r\n defaulted() {\r\n return createColumnBuilder({\r\n ...config,\r\n hasDefault: true,\r\n })\r\n },\r\n generated() {\r\n return createColumnBuilder({\r\n ...config,\r\n isGenerated: true,\r\n })\r\n },\r\n }\r\n}\r\n\r\nexport function isColumnBuilder(value: unknown): value is AnyColumnBuilder {\r\n return value !== null && typeof value === 'object' && COLUMN_CONFIG in value\r\n}\r\n\r\nexport function getColumnConfig<TColumn extends AnyColumnBuilder>(\r\n column: TColumn,\r\n): TColumn[typeof COLUMN_CONFIG] {\r\n return column[COLUMN_CONFIG]\r\n}\r\n\r\nexport function string(): AthenaColumnBuilder<string, false, false, false, undefined, 'string'> {\r\n return createColumnBuilder({\r\n kind: 'string',\r\n nullable: false,\r\n hasDefault: false,\r\n isGenerated: false,\r\n })\r\n}\r\n\r\nexport function number(): AthenaColumnBuilder<number, false, false, false, undefined, 'number'> {\r\n return createColumnBuilder({\r\n kind: 'number',\r\n nullable: false,\r\n hasDefault: false,\r\n isGenerated: false,\r\n })\r\n}\r\n\r\nexport function boolean(): AthenaColumnBuilder<boolean, false, false, false, undefined, 'boolean'> {\r\n return createColumnBuilder({\r\n kind: 'boolean',\r\n nullable: false,\r\n hasDefault: false,\r\n isGenerated: false,\r\n })\r\n}\r\n\r\nexport function json<TValue = unknown>(\r\n schema?: ZodType<TValue>,\r\n): AthenaColumnBuilder<TValue, false, false, false, undefined, 'json'> {\r\n return createColumnBuilder({\r\n kind: 'json',\r\n nullable: false,\r\n hasDefault: false,\r\n isGenerated: false,\r\n jsonSchema: schema,\r\n })\r\n}\r\n\r\nexport function enumeration<const TValues extends readonly [string, ...string[]]>(\r\n values: TValues,\r\n): AthenaColumnBuilder<TValues[number], false, false, false, undefined, 'enumeration'> {\r\n if (values.length === 0) {\r\n throw new Error('enumeration() requires at least one value')\r\n }\r\n\r\n return createColumnBuilder({\r\n kind: 'enumeration',\r\n nullable: false,\r\n hasDefault: false,\r\n isGenerated: false,\r\n enumValues: values,\r\n })\r\n}\r\n","import { z, type ZodType, type ZodTypeAny } from 'zod'\r\nimport { toModelPayload } from './model-form.ts'\r\nimport { getColumnConfig, type AnyColumnBuilder } from './table-columns.ts'\r\nimport type { AnyModelDef, ModelColumnKind } from './types.ts'\r\n\r\nexport interface AthenaTableSchemaBundle<Row, Insert, Update> {\r\n readonly row: ZodType<Row>\r\n readonly insert: ZodType<Insert>\r\n readonly update: ZodType<Update>\r\n readonly form: ZodType<Insert>\r\n}\r\n\r\nfunction isScalarFormKind(kind: ModelColumnKind): boolean {\r\n return kind === 'string' || kind === 'number' || kind === 'boolean' || kind === 'enumeration'\r\n}\r\n\r\nfunction createBaseSchema(column: AnyColumnBuilder): ZodTypeAny {\r\n const config = getColumnConfig(column)\r\n\r\n switch (config.kind) {\r\n case 'boolean':\r\n return z.boolean()\r\n case 'number':\r\n return z.number()\r\n case 'json':\r\n return (config.jsonSchema ?? z.unknown()) as ZodTypeAny\r\n case 'enumeration':\r\n if (!config.enumValues || config.enumValues.length === 0) {\r\n return z.string()\r\n }\r\n return z.enum(config.enumValues as [string, ...string[]])\r\n case 'string':\r\n default:\r\n return z.string()\r\n }\r\n}\r\n\r\nfunction applyNullable(schema: ZodTypeAny, column: AnyColumnBuilder): ZodTypeAny {\r\n const config = getColumnConfig(column)\r\n return config.nullable ? schema.nullable() : schema\r\n}\r\n\r\nfunction applyInsertOptional(schema: ZodTypeAny, column: AnyColumnBuilder): ZodTypeAny {\r\n const config = getColumnConfig(column)\r\n return config.nullable || config.hasDefault ? schema.optional() : schema\r\n}\r\n\r\nfunction createFormFieldSchema(column: AnyColumnBuilder): ZodTypeAny {\r\n const config = getColumnConfig(column)\r\n const base = createBaseSchema(column)\r\n\r\n let schema: ZodTypeAny\r\n if (config.nullable && isScalarFormKind(config.kind)) {\r\n schema = z\r\n .union([base, z.literal('')])\r\n .transform(value => value === '' ? null : value)\r\n } else {\r\n schema = applyNullable(base, column)\r\n }\r\n\r\n if (config.nullable || config.hasDefault) {\r\n schema = schema.optional()\r\n }\r\n\r\n return schema\r\n}\r\n\r\nexport function buildTableSchemaBundle<Row, Insert, Update>(\r\n model: AnyModelDef,\r\n columns: Record<string, AnyColumnBuilder>,\r\n): AthenaTableSchemaBundle<Row, Insert, Update> {\r\n const rowShape: Record<string, ZodTypeAny> = {}\r\n const insertShape: Record<string, ZodTypeAny> = {}\r\n const updateShape: Record<string, ZodTypeAny> = {}\r\n const formShape: Record<string, ZodTypeAny> = {}\r\n\r\n for (const [columnName, column] of Object.entries(columns)) {\r\n const config = getColumnConfig(column)\r\n const base = createBaseSchema(column)\r\n\r\n rowShape[columnName] = applyNullable(base, column)\r\n\r\n if (config.isGenerated) {\r\n continue\r\n }\r\n\r\n insertShape[columnName] = applyInsertOptional(applyNullable(base, column), column)\r\n updateShape[columnName] = applyNullable(base, column).optional()\r\n formShape[columnName] = createFormFieldSchema(column)\r\n }\r\n\r\n const rowSchema = z.object(rowShape) as ZodType<Row>\r\n const insertSchema = z.object(insertShape) as ZodType<Insert>\r\n const updateSchema = z.object(updateShape) as ZodType<Update>\r\n const formSchema = z\r\n .object(formShape)\r\n .transform(value => toModelPayload(model, value as never) as Insert) as ZodType<Insert>\r\n\r\n return {\r\n row: rowSchema,\r\n insert: insertSchema,\r\n update: updateSchema,\r\n form: formSchema,\r\n }\r\n}\r\n","import { defineModel } from './definitions.ts'\r\nimport type { ModelFormValues, ModelFormNullishMode } from './model-form.ts'\r\nimport { buildTableSchemaBundle, type AthenaTableSchemaBundle } from './table-schemas.ts'\r\nimport {\r\n COLUMN_CONFIG,\r\n getColumnConfig,\r\n isColumnBuilder,\r\n type AnyColumnBuilder,\r\n type AthenaColumnBuilder,\r\n} from './table-columns.ts'\r\nimport type { AnyModelDef, ModelColumnMetadata, ModelDef, ModelMetadata } from './types.ts'\r\n\r\ntype Simplify<T> = { [K in keyof T]: T[K] } & {}\r\ntype ExtractColumnConfig<TColumn extends AnyColumnBuilder> = TColumn[typeof COLUMN_CONFIG]\r\ntype ColumnValue<TColumn extends AnyColumnBuilder> =\r\n ExtractColumnConfig<TColumn> extends { __value?: infer TValue } ? TValue : never\r\ntype ColumnNullable<TColumn extends AnyColumnBuilder> =\r\n ExtractColumnConfig<TColumn> extends { nullable: infer TNullable extends boolean } ? TNullable : never\r\ntype ColumnHasDefault<TColumn extends AnyColumnBuilder> =\r\n ExtractColumnConfig<TColumn> extends { hasDefault: infer THasDefault extends boolean } ? THasDefault : never\r\ntype ColumnGenerated<TColumn extends AnyColumnBuilder> =\r\n ExtractColumnConfig<TColumn> extends { isGenerated: infer TGenerated extends boolean } ? TGenerated : never\r\n\r\ntype RowFieldType<TColumn extends AnyColumnBuilder> =\r\n ColumnNullable<TColumn> extends true ? ColumnValue<TColumn> | null : ColumnValue<TColumn>\r\n\r\ntype WritableColumnKeys<TColumns extends Record<string, AnyColumnBuilder>> = Extract<{\r\n [K in keyof TColumns]-?: ColumnGenerated<TColumns[K]> extends true ? never : K\r\n}[keyof TColumns], string>\r\n\r\ntype InsertRequiredKeys<TColumns extends Record<string, AnyColumnBuilder>> = Extract<{\r\n [K in keyof TColumns]-?: ColumnGenerated<TColumns[K]> extends true\r\n ? never\r\n : ColumnHasDefault<TColumns[K]> extends true\r\n ? never\r\n : ColumnNullable<TColumns[K]> extends true\r\n ? never\r\n : K\r\n}[keyof TColumns], string>\r\n\r\ntype InsertOptionalKeys<TColumns extends Record<string, AnyColumnBuilder>> = Exclude<\r\n WritableColumnKeys<TColumns>,\r\n InsertRequiredKeys<TColumns>\r\n>\r\n\r\ntype ExtractMappedSchemaName<TMappedName extends string | undefined> =\r\n TMappedName extends `${infer TSchema}.${string}` ? TSchema : undefined\r\n\r\ntype ExtractMappedTableName<TMappedName extends string | undefined> =\r\n TMappedName extends `${string}.${infer TTable}`\r\n ? TTable\r\n : TMappedName extends string\r\n ? TMappedName\r\n : undefined\r\n\r\ntype ResolvedSchemaName<\r\n TSchemaName extends string | undefined,\r\n TMappedName extends string | undefined,\r\n> = TSchemaName extends string ? TSchemaName : ExtractMappedSchemaName<TMappedName>\r\n\r\ntype ResolvedTableName<\r\n TName extends string,\r\n TMappedName extends string | undefined,\r\n> = ExtractMappedTableName<TMappedName> extends string ? ExtractMappedTableName<TMappedName> : TName\r\n\r\ntype QualifiedTableName<\r\n TName extends string,\r\n TMappedName extends string | undefined,\r\n TSchemaName extends string | undefined,\r\n> = ResolvedSchemaName<TSchemaName, TMappedName> extends infer TResolvedSchema extends string | undefined\r\n ? TResolvedSchema extends string\r\n ? `${TResolvedSchema}.${ResolvedTableName<TName, TMappedName>}`\r\n : ResolvedTableName<TName, TMappedName>\r\n : never\r\n\r\nexport type RowFromColumns<TColumns extends Record<string, AnyColumnBuilder>> = Simplify<{\r\n [K in keyof TColumns]: RowFieldType<TColumns[K]>\r\n}>\r\n\r\nexport type InsertFromColumns<TColumns extends Record<string, AnyColumnBuilder>> = Simplify<\r\n {\r\n [K in InsertRequiredKeys<TColumns>]: ColumnValue<TColumns[K]>\r\n } & {\r\n [K in InsertOptionalKeys<TColumns>]?: RowFieldType<TColumns[K]>\r\n }\r\n>\r\n\r\nexport type UpdateFromColumns<TColumns extends Record<string, AnyColumnBuilder>> = Simplify<{\r\n [K in WritableColumnKeys<TColumns>]?: RowFieldType<TColumns[K]>\r\n}>\r\n\r\nexport type FormValuesFromColumns<\r\n TColumns extends Record<string, AnyColumnBuilder>,\r\n TMode extends ModelFormNullishMode = 'empty-string',\r\n> = ModelFormValues<\r\n AthenaTableDef<TColumns>,\r\n TMode\r\n>\r\n\r\nexport interface AthenaTableDef<\r\n TColumns extends Record<string, AnyColumnBuilder>,\r\n TName extends string = string,\r\n TMappedName extends string | undefined = undefined,\r\n TSchemaName extends string | undefined = undefined,\r\n> extends ModelDef<\r\n RowFromColumns<TColumns>,\r\n InsertFromColumns<TColumns>,\r\n UpdateFromColumns<TColumns>,\r\n ModelMetadata<RowFromColumns<TColumns>>\r\n > {\r\n readonly kind: 'table'\r\n readonly name: TName\r\n readonly mappedName: TMappedName\r\n readonly schemaName: ResolvedSchemaName<TSchemaName, TMappedName>\r\n readonly tableName: ResolvedTableName<TName, TMappedName>\r\n readonly qualifiedName: QualifiedTableName<TName, TMappedName, TSchemaName>\r\n readonly columns: Readonly<TColumns>\r\n readonly schemas: AthenaTableSchemaBundle<\r\n RowFromColumns<TColumns>,\r\n InsertFromColumns<TColumns>,\r\n UpdateFromColumns<TColumns>\r\n >\r\n}\r\n\r\ninterface AthenaTableBuilder<\r\n TName extends string,\r\n TMappedName extends string | undefined = undefined,\r\n TSchemaName extends string | undefined = undefined,\r\n> {\r\n readonly name: TName\r\n readonly mappedName: TMappedName\r\n readonly schemaName: TSchemaName\r\n from<TNextMappedName extends string>(\r\n tableName: TNextMappedName,\r\n ): AthenaTableBuilder<TName, TNextMappedName, TSchemaName>\r\n schema<TNextSchemaName extends string>(\r\n schemaName: TNextSchemaName,\r\n ): AthenaTableBuilder<TName, TMappedName, TNextSchemaName>\r\n columns<TColumns extends Record<string, AnyColumnBuilder>>(\r\n columns: TColumns,\r\n ): AthenaTableColumnsBuilder<TName, TMappedName, TSchemaName, TColumns>\r\n}\r\n\r\ninterface AthenaTableColumnsBuilder<\r\n TName extends string,\r\n TMappedName extends string | undefined,\r\n TSchemaName extends string | undefined,\r\n TColumns extends Record<string, AnyColumnBuilder>,\r\n> {\r\n readonly name: TName\r\n readonly mappedName: TMappedName\r\n readonly schemaName: TSchemaName\r\n readonly columns: Readonly<TColumns>\r\n from<TNextMappedName extends string>(\n tableName: TNextMappedName,\n ): AthenaTableColumnsBuilder<TName, TNextMappedName, TSchemaName, TColumns>\n schema<TNextSchemaName extends string>(\n schemaName: TNextSchemaName,\n ): AthenaTableColumnsBuilder<TName, TMappedName, TNextSchemaName, TColumns>\n withoutPrimaryKey(): AthenaTableDef<TColumns, TName, TMappedName, TSchemaName>\n primaryKey(): AthenaTableDef<TColumns, TName, TMappedName, TSchemaName>\n primaryKey<\n TPrimaryKey extends readonly [\n Extract<keyof TColumns, string>,\n ...Array<Extract<keyof TColumns, string>>,\n ],\n >(...keys: TPrimaryKey): AthenaTableDef<TColumns, TName, TMappedName, TSchemaName>\r\n}\r\n\r\nfunction assertColumnRecord(columns: Record<string, AnyColumnBuilder>): void {\r\n for (const [columnName, column] of Object.entries(columns)) {\r\n if (!isColumnBuilder(column)) {\r\n throw new Error(`Invalid column definition for \"${columnName}\"`)\r\n }\r\n }\r\n}\r\n\r\nfunction normalizeMappedNameInput(mappedName: string): string {\r\n const normalized = mappedName.trim()\r\n if (!normalized) {\r\n throw new Error('table.from() requires a non-empty table name')\r\n }\r\n return normalized\r\n}\r\n\r\nfunction normalizeSchemaNameInput(schemaName: string): string {\r\n const normalized = schemaName.trim()\r\n if (!normalized) {\r\n throw new Error('table.schema() requires a non-empty schema name')\r\n }\r\n if (normalized.includes('.')) {\r\n throw new Error(\r\n 'table.schema() expects a schema name without dots. Use .schema(\"schema\").from(\"table\") or .from(\"schema.table\").',\r\n )\r\n }\r\n return normalized\r\n}\r\n\r\nfunction resolveTableTarget(logicalName: string, mappedName?: string, explicitSchemaName?: string): {\r\n schema?: string\r\n model: string\r\n qualifiedName: string\r\n} {\r\n const physicalName = (mappedName ?? logicalName).trim()\r\n if (!physicalName) {\r\n throw new Error('table() requires a non-empty name')\r\n }\r\n\r\n const firstDot = physicalName.indexOf('.')\r\n const lastDot = physicalName.lastIndexOf('.')\r\n if (firstDot > 0 && firstDot === lastDot) {\r\n const inlineSchema = physicalName.slice(0, firstDot).trim()\r\n const inlineModel = physicalName.slice(firstDot + 1).trim()\r\n if (!inlineSchema || !inlineModel) {\r\n throw new Error('table.from() schema-qualified names must look like \"schema.table\"')\r\n }\r\n if (explicitSchemaName && explicitSchemaName !== inlineSchema) {\r\n throw new Error(\r\n `table schema \"${explicitSchemaName}\" conflicts with mapped table \"${physicalName}\"`,\r\n )\r\n }\r\n\r\n return {\r\n schema: explicitSchemaName ?? inlineSchema,\r\n model: inlineModel,\r\n qualifiedName: `${explicitSchemaName ?? inlineSchema}.${inlineModel}`,\r\n }\r\n }\r\n\r\n if (explicitSchemaName) {\r\n return {\r\n schema: explicitSchemaName,\r\n model: physicalName,\r\n qualifiedName: `${explicitSchemaName}.${physicalName}`,\r\n }\r\n }\r\n\r\n return {\r\n model: physicalName,\r\n qualifiedName: physicalName,\r\n }\r\n}\r\n\r\nfunction toColumnMetadata(column: AnyColumnBuilder): ModelColumnMetadata {\r\n const config = getColumnConfig(column)\r\n return {\r\n kind: config.kind,\r\n columnName: config.columnName,\r\n nullable: config.nullable,\r\n hasDefault: config.hasDefault,\r\n isGenerated: config.isGenerated,\r\n enumValues: config.enumValues,\r\n }\r\n}\r\n\r\nfunction buildNullableMap(columns: Record<string, AnyColumnBuilder>): Record<string, boolean> {\r\n return Object.fromEntries(\r\n Object.entries(columns).map(([columnName, column]) => [columnName, getColumnConfig(column).nullable]),\r\n )\r\n}\r\n\r\nfunction buildColumnMetadataMap(columns: Record<string, AnyColumnBuilder>): Record<string, ModelColumnMetadata> {\r\n return Object.fromEntries(\r\n Object.entries(columns).map(([columnName, column]) => [columnName, toColumnMetadata(column)]),\r\n )\r\n}\r\n\r\nfunction finalizeTable<\r\n TName extends string,\r\n TMappedName extends string | undefined,\r\n TSchemaName extends string | undefined,\r\n TColumns extends Record<string, AnyColumnBuilder>,\r\n>(\n name: TName,\n mappedName: TMappedName,\n schemaName: TSchemaName,\n columns: TColumns,\n primaryKey: ReadonlyArray<Extract<keyof TColumns, string>>,\n): AthenaTableDef<TColumns, TName, TMappedName, TSchemaName> {\n const target = resolveTableTarget(name, mappedName, schemaName)\r\n const model = defineModel<\r\n RowFromColumns<TColumns>,\r\n InsertFromColumns<TColumns>,\r\n UpdateFromColumns<TColumns>\r\n >({\r\n meta: {\r\n schema: target.schema,\r\n model: target.model,\r\n primaryKey: [...primaryKey],\r\n nullable: buildNullableMap(columns),\r\n columns: buildColumnMetadataMap(columns),\r\n },\r\n })\r\n\r\n const schemas = buildTableSchemaBundle<\r\n RowFromColumns<TColumns>,\r\n InsertFromColumns<TColumns>,\r\n UpdateFromColumns<TColumns>\r\n >(model as AnyModelDef, columns)\r\n\r\n return Object.assign(model, {\r\n kind: 'table' as const,\r\n name,\r\n mappedName,\r\n schemaName: target.schema,\r\n tableName: target.model,\r\n qualifiedName: target.qualifiedName,\r\n columns,\r\n schemas,\r\n }) as AthenaTableDef<TColumns, TName, TMappedName, TSchemaName>\r\n}\r\n\r\nfunction createColumnsBuilder<\r\n TName extends string,\r\n TMappedName extends string | undefined,\r\n TSchemaName extends string | undefined,\r\n TColumns extends Record<string, AnyColumnBuilder>,\r\n>(\r\n name: TName,\r\n mappedName: TMappedName,\r\n schemaName: TSchemaName,\r\n columns: TColumns,\r\n): AthenaTableColumnsBuilder<TName, TMappedName, TSchemaName, TColumns> {\r\n assertColumnRecord(columns)\r\n\r\n return {\r\n name,\r\n mappedName,\r\n schemaName,\r\n columns,\r\n from<TNextMappedName extends string>(tableName: TNextMappedName) {\r\n const normalizedTableName = normalizeMappedNameInput(tableName)\r\n resolveTableTarget(name, normalizedTableName, schemaName)\r\n return createColumnsBuilder(name, normalizedTableName as TNextMappedName, schemaName, columns)\r\n },\r\n schema<TNextSchemaName extends string>(nextSchemaName: TNextSchemaName) {\n const normalizedSchemaName = normalizeSchemaNameInput(nextSchemaName)\n resolveTableTarget(name, mappedName, normalizedSchemaName)\n return createColumnsBuilder(name, mappedName, normalizedSchemaName as TNextSchemaName, columns)\n },\n withoutPrimaryKey() {\n return finalizeTable(name, mappedName, schemaName, columns, [])\n },\n primaryKey(...keys: Array<Extract<keyof TColumns, string>>) {\n return finalizeTable(name, mappedName, schemaName, columns, keys)\n },\n }\n}\n\r\nfunction createTableBuilder<\r\n TName extends string,\r\n TMappedName extends string | undefined,\r\n TSchemaName extends string | undefined,\r\n>(\r\n name: TName,\r\n mappedName: TMappedName,\r\n schemaName: TSchemaName,\r\n): AthenaTableBuilder<TName, TMappedName, TSchemaName> {\r\n return {\r\n name,\r\n mappedName,\r\n schemaName,\r\n from<TNextMappedName extends string>(tableName: TNextMappedName) {\r\n const normalizedTableName = normalizeMappedNameInput(tableName)\r\n resolveTableTarget(name, normalizedTableName, schemaName)\r\n return createTableBuilder(name, normalizedTableName as TNextMappedName, schemaName)\r\n },\r\n schema<TNextSchemaName extends string>(nextSchemaName: TNextSchemaName) {\r\n const normalizedSchemaName = normalizeSchemaNameInput(nextSchemaName)\r\n resolveTableTarget(name, mappedName, normalizedSchemaName)\r\n return createTableBuilder(name, mappedName, normalizedSchemaName as TNextSchemaName)\r\n },\r\n columns<TColumns extends Record<string, AnyColumnBuilder>>(columns: TColumns) {\r\n return createColumnsBuilder(name, mappedName, schemaName, columns)\r\n },\r\n }\r\n}\r\n\r\nexport function table<TName extends string>(name: TName): AthenaTableBuilder<TName, undefined> {\r\n if (!name.trim()) {\r\n throw new Error('table() requires a non-empty name')\r\n }\r\n\r\n return createTableBuilder(name, undefined, undefined)\r\n}\r\n\r\nexport type { AthenaColumnBuilder }\r\n","import {\n createClient,\n type AthenaCreateClientAuthOptions,\n type AthenaClientSessionLike,\n type AthenaClientSessionOptions,\n type AthenaClientContextOptions,\n type AthenaClientExperimentalOptions,\n type AthenaHeaderBag,\n type AthenaFromOptions,\n type AthenaResult,\n type AthenaSdkClient,\n type RpcQueryBuilder,\n type TableQueryBuilder,\n} from '../client.ts'\r\nimport type {\r\n AthenaGatewayCallOptions,\r\n AthenaGatewayConnectionOptions,\r\n AthenaGatewayConnectionResult,\r\n AthenaJsonObject,\r\n AthenaRpcCallOptions,\r\n} from '../gateway/types.ts'\r\nimport type {\r\n AthenaModelTarget,\r\n AnyModelDef,\r\n DatabaseDef,\r\n InsertOf,\r\n ModelAt,\r\n RegistryDef,\r\n RowOf,\r\n SchemaDef,\r\n TenantContext,\r\n TenantKeyMap,\r\n UpdateOf,\r\n} from './types.ts'\r\nimport { resolveAthenaModelTargetTableName } from './model-target.ts'\r\n\r\ntype RegistryConstraint = RegistryDef<\r\n Record<string, DatabaseDef<Record<string, SchemaDef<Record<string, AnyModelDef>>>>>\r\n>\r\n\r\n/**\r\n * Options for creating typed Athena clients.\r\n */\r\nexport interface TypedClientOptions<TMap extends TenantKeyMap = TenantKeyMap>\n extends Pick<\n AthenaGatewayCallOptions,\n 'backend' | 'client' | 'headers' | 'forceNoCache' | 'userId' | 'organizationId'\n > {\n auth?: Omit<AthenaCreateClientAuthOptions, 'url' | 'baseUrl' | 'apiKey'>\n tenantKeyMap?: TMap\n tenantContext?: TenantContext<TMap>\n experimental?: AthenaClientExperimentalOptions\n}\n\r\nexport interface TypedClientOptionsWithTypecheckedColumns<\r\n TMap extends TenantKeyMap = TenantKeyMap,\r\n> extends TypedClientOptions<TMap> {\r\n experimental: AthenaClientExperimentalOptions & {\r\n typecheckColumns: true\r\n }\r\n}\r\n\r\n/**\r\n * Typed Athena client with registry-driven model resolution and tenant-context propagation.\r\n */\r\nexport interface TypedAthenaClient<\n TRegistry extends RegistryConstraint,\n TTenantMap extends TenantKeyMap = Record<never, string>,\n TStrict extends boolean = false,\n> extends AthenaSdkClient<TStrict> {\n readonly registry: TRegistry\n readonly tenantKeyMap: Readonly<TTenantMap>\n readonly tenantContext: TenantContext<TTenantMap>\n withContext(context?: AthenaClientContextOptions): TypedAthenaClient<TRegistry, TTenantMap, TStrict>\n withSession(\n session?: AthenaClientSessionLike | null,\n options?: AthenaClientSessionOptions,\n ): TypedAthenaClient<TRegistry, TTenantMap, TStrict>\n withTenantContext(context: TenantContext<TTenantMap>): TypedAthenaClient<TRegistry, TTenantMap, TStrict>\n fromModel<\n TDatabase extends keyof TRegistry & string,\n TSchema extends keyof TRegistry[TDatabase]['schemas'] & string,\r\n TModel extends keyof TRegistry[TDatabase]['schemas'][TSchema]['models'] & string,\r\n >(\r\n database: TDatabase,\r\n schema: TSchema,\r\n model: TModel,\r\n ): TableQueryBuilder<\r\n RowOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n InsertOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n UpdateOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n {\r\n registry: TRegistry\r\n database: TDatabase\r\n schema: TSchema\r\n model: ModelAt<TRegistry, TDatabase, TSchema, TModel>\r\n },\r\n TStrict\r\n >\r\n}\r\n\r\nclass TenantHeaderMapper<TMap extends TenantKeyMap> {\n constructor(private readonly tenantKeyMap: TMap) {}\n\r\n apply(\r\n baseHeaders: Record<string, string> | undefined,\r\n tenantContext: TenantContext<TMap>,\r\n ): Record<string, string> | undefined {\r\n const headers: Record<string, string> = {\r\n ...(baseHeaders ?? {}),\r\n }\r\n\r\n for (const [tenantKey, headerName] of Object.entries(this.tenantKeyMap)) {\r\n const tenantValue = tenantContext[tenantKey as keyof TMap]\r\n if (tenantValue === undefined || tenantValue === null) {\r\n continue\r\n }\r\n headers[headerName] = String(tenantValue)\r\n }\r\n\r\n return Object.keys(headers).length > 0 ? headers : undefined\r\n }\n}\n\nfunction normalizeOptionalString(value: string | null | undefined): string | undefined {\n if (typeof value !== 'string') {\n return undefined\n }\n\n const normalizedValue = value.trim()\n return normalizedValue ? normalizedValue : undefined\n}\n\nfunction readHeaderBagValue(\n headers: AthenaClientSessionOptions['requestHeaders'],\n targetKey: string,\n): string | undefined {\n if (!headers) {\n return undefined\n }\n\n if (typeof (headers as AthenaHeaderBag).get === 'function') {\n return normalizeOptionalString((headers as AthenaHeaderBag).get(targetKey))\n }\n\n const normalizedTargetKey = targetKey.toLowerCase()\n for (const [key, value] of Object.entries(headers)) {\n if (key.toLowerCase() !== normalizedTargetKey) {\n continue\n }\n\n if (typeof value === 'string') {\n return normalizeOptionalString(value)\n }\n\n return undefined\n }\n\n return undefined\n}\n\nfunction resolveSessionContextOptions(\n session?: AthenaClientSessionLike | null,\n options?: AthenaClientSessionOptions,\n): AthenaClientContextOptions | undefined {\n const sessionToken = normalizeOptionalString(session?.session?.token)\n const requestCookie =\n readHeaderBagValue(options?.requestHeaders, 'cookie') ??\n readHeaderBagValue(options?.headers, 'cookie')\n const authInput = options?.auth\n const resolvedUserId =\n options?.userId !== undefined ? options.userId : session?.user?.id\n const resolvedOrganizationId =\n options?.organizationId !== undefined\n ? options.organizationId\n : session?.session?.activeOrganizationId\n const resolvedBearerToken =\n authInput?.bearerToken !== undefined ? authInput.bearerToken : sessionToken\n const resolvedSessionToken =\n authInput?.sessionToken !== undefined ? authInput.sessionToken : sessionToken\n const resolvedCookie =\n authInput?.cookie !== undefined ? authInput.cookie : requestCookie\n\n const auth =\n authInput !== undefined ||\n resolvedBearerToken !== undefined ||\n resolvedSessionToken !== undefined ||\n resolvedCookie !== undefined\n ? {\n ...(authInput ?? {}),\n ...(resolvedBearerToken !== undefined\n ? { bearerToken: resolvedBearerToken }\n : {}),\n ...(resolvedSessionToken !== undefined\n ? { sessionToken: resolvedSessionToken }\n : {}),\n ...(resolvedCookie !== undefined ? { cookie: resolvedCookie } : {}),\n headers: authInput?.headers ? { ...authInput.headers } : undefined,\n }\n : undefined\n\n if (\n resolvedUserId === undefined &&\n resolvedOrganizationId === undefined &&\n options?.forceNoCache === undefined &&\n !options?.headers &&\n !auth\n ) {\n return undefined\n }\n\n return {\n userId: resolvedUserId,\n organizationId: resolvedOrganizationId,\n forceNoCache: options?.forceNoCache,\n headers: options?.headers ? { ...options.headers } : undefined,\n auth,\n }\n}\n\nclass RegistryNavigator<TRegistry extends RegistryConstraint> {\n constructor(private readonly registry: TRegistry) {}\n\r\n resolveModel<\r\n TDatabase extends keyof TRegistry & string,\r\n TSchema extends keyof TRegistry[TDatabase]['schemas'] & string,\r\n TModel extends keyof TRegistry[TDatabase]['schemas'][TSchema]['models'] & string,\r\n >(\r\n database: TDatabase,\r\n schema: TSchema,\r\n model: TModel,\r\n ): ModelAt<TRegistry, TDatabase, TSchema, TModel> {\r\n const databaseDef = this.registry[database]\r\n if (!databaseDef) {\r\n throw new Error(`Unknown database \"${database}\"`)\r\n }\r\n\r\n const schemaDef = databaseDef.schemas[schema]\r\n if (!schemaDef) {\r\n throw new Error(`Unknown schema \"${schema}\" in database \"${database}\"`)\r\n }\r\n\r\n const modelDef = schemaDef.models[model]\r\n if (!modelDef) {\r\n throw new Error(`Unknown model \"${model}\" in schema \"${schema}\"`)\r\n }\r\n\r\n return modelDef as ModelAt<TRegistry, TDatabase, TSchema, TModel>\r\n }\r\n\r\n resolveTableName(\r\n schema: string,\r\n model: string,\r\n modelDef: AnyModelDef,\r\n ): string {\r\n return resolveAthenaModelTargetTableName(modelDef, {\r\n fallbackSchema: schema,\r\n fallbackModel: model,\r\n })\r\n }\r\n}\r\n\r\nclass TypedAthenaClientImpl<\r\n TRegistry extends RegistryConstraint,\r\n TTenantMap extends TenantKeyMap,\r\n TStrict extends boolean = false,\r\n> implements TypedAthenaClient<TRegistry, TTenantMap, TStrict> {\r\n readonly registry: TRegistry\r\n readonly tenantKeyMap: Readonly<TTenantMap>\r\n readonly tenantContext: TenantContext<TTenantMap>\r\n readonly db: AthenaSdkClient<TStrict>['db']\r\n\r\n private readonly baseClient: AthenaSdkClient<TStrict>\n private readonly registryNavigator: RegistryNavigator<TRegistry>\n private readonly tenantHeaderMapper: TenantHeaderMapper<TTenantMap>\n private readonly clientOptions: TypedClientOptions<TTenantMap>\n private readonly url: string\n private readonly apiKey: string\n\r\n constructor(input: {\r\n registry: TRegistry\r\n url: string\r\n apiKey: string\r\n options?: TypedClientOptions<TTenantMap>\r\n }) {\r\n this.registry = input.registry\r\n this.url = input.url\r\n this.apiKey = input.apiKey\r\n\r\n const tenantKeyMap = (input.options?.tenantKeyMap ?? ({} as TTenantMap)) as TTenantMap\r\n const tenantContext = (input.options?.tenantContext ?? {}) as TenantContext<TTenantMap>\r\n\r\n this.tenantKeyMap = tenantKeyMap\r\n this.tenantContext = tenantContext\r\n this.tenantHeaderMapper = new TenantHeaderMapper(tenantKeyMap)\n this.registryNavigator = new RegistryNavigator(input.registry)\n\n this.clientOptions = {\n backend: input.options?.backend,\n client: input.options?.client,\n headers: input.options?.headers,\n forceNoCache: input.options?.forceNoCache,\n userId: input.options?.userId,\n organizationId: input.options?.organizationId,\n auth: input.options?.auth,\n tenantKeyMap,\n tenantContext,\n experimental: input.options?.experimental,\n }\n\n this.baseClient = createClient(this.url, this.apiKey, {\n backend: this.clientOptions.backend,\n client: this.clientOptions.client,\n headers: this.tenantHeaderMapper.apply(this.clientOptions.headers, tenantContext),\n forceNoCache: this.clientOptions.forceNoCache,\n userId: this.clientOptions.userId,\n organizationId: this.clientOptions.organizationId,\n auth: this.clientOptions.auth,\n experimental: this.clientOptions.experimental,\n }) as AthenaSdkClient<TStrict>\n this.db = this.baseClient.db\n }\n\r\n from<TModel extends AthenaModelTarget>(\r\n model: TModel,\r\n ): TableQueryBuilder<RowOf<TModel>, InsertOf<TModel>, UpdateOf<TModel>, unknown, TStrict>\r\n from<\r\n Row = Record<string, unknown>,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n >(\r\n table: string,\r\n options?: AthenaFromOptions,\r\n ): TableQueryBuilder<Row, Insert, Update, unknown, TStrict>\r\n from<\r\n Row = Record<string, unknown>,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n >(\r\n tableOrModel: string | AthenaModelTarget<Row, Insert, Update>,\r\n options?: AthenaFromOptions,\r\n ): TableQueryBuilder<Row, Insert, Update, unknown, TStrict> {\r\n const from = this.baseClient.from as unknown as (\r\n target: string | AthenaModelTarget<Row, Insert, Update>,\r\n options?: AthenaFromOptions,\r\n ) => TableQueryBuilder<Row, Insert, Update, unknown, TStrict>\r\n return from(tableOrModel, options)\r\n }\r\n\r\n rpc<Row = unknown, Args extends AthenaJsonObject = AthenaJsonObject>(\r\n fn: string,\r\n args?: Args,\r\n options?: AthenaRpcCallOptions,\r\n ): RpcQueryBuilder<Row, TStrict> {\r\n return this.baseClient.rpc<Row, Args>(fn, args, options)\r\n }\r\n\r\n query<Row = unknown>(\r\n query: string,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<Row[]>> {\r\n return this.baseClient.query<Row>(query, options)\r\n }\r\n\r\n verifyConnection(\n options?: AthenaGatewayConnectionOptions,\n ): Promise<AthenaGatewayConnectionResult> {\n return this.baseClient.verifyConnection(options)\n }\n\n withContext(context?: AthenaClientContextOptions): TypedAthenaClient<TRegistry, TTenantMap, TStrict> {\n const headers = {\n ...(this.clientOptions.headers ?? {}),\n ...(context?.headers ?? {}),\n }\n const auth =\n this.clientOptions.auth || context?.auth\n ? {\n ...(this.clientOptions.auth ?? {}),\n ...(context?.auth ?? {}),\n headers:\n this.clientOptions.auth?.headers || context?.auth?.headers\n ? {\n ...(this.clientOptions.auth?.headers ?? {}),\n ...(context?.auth?.headers ?? {}),\n }\n : undefined,\n }\n : undefined\n\n return new TypedAthenaClientImpl({\n registry: this.registry,\n url: this.url,\n apiKey: this.apiKey,\n options: {\n ...this.clientOptions,\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n auth,\n tenantKeyMap: this.tenantKeyMap as TTenantMap,\n tenantContext: {\n ...this.tenantContext,\n },\n ...(context?.userId !== undefined ? { userId: context.userId } : {}),\n ...(context?.organizationId !== undefined\n ? { organizationId: context.organizationId }\n : {}),\n ...(context?.forceNoCache !== undefined\n ? { forceNoCache: context.forceNoCache }\n : {}),\n },\n })\n }\n\n withSession(\n session?: AthenaClientSessionLike | null,\n options?: AthenaClientSessionOptions,\n ): TypedAthenaClient<TRegistry, TTenantMap, TStrict> {\n return this.withContext(resolveSessionContextOptions(session, options))\n }\n\n withTenantContext(context: TenantContext<TTenantMap>): TypedAthenaClient<TRegistry, TTenantMap, TStrict> {\n return new TypedAthenaClientImpl({\n registry: this.registry,\n url: this.url,\n apiKey: this.apiKey,\r\n options: {\r\n ...this.clientOptions,\r\n tenantKeyMap: this.tenantKeyMap as TTenantMap,\r\n tenantContext: {\r\n ...this.tenantContext,\r\n ...(context ?? {}),\r\n },\r\n experimental: this.clientOptions.experimental,\r\n },\r\n })\r\n }\r\n\r\n fromModel<\r\n TDatabase extends keyof TRegistry & string,\r\n TSchema extends keyof TRegistry[TDatabase]['schemas'] & string,\r\n TModel extends keyof TRegistry[TDatabase]['schemas'][TSchema]['models'] & string,\r\n >(\r\n database: TDatabase,\r\n schema: TSchema,\r\n model: TModel,\r\n ): TableQueryBuilder<\r\n RowOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n InsertOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n UpdateOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n {\r\n registry: TRegistry\r\n database: TDatabase\r\n schema: TSchema\r\n model: ModelAt<TRegistry, TDatabase, TSchema, TModel>\r\n },\r\n TStrict\r\n > {\r\n const modelDef = this.registryNavigator.resolveModel(database, schema, model)\r\n const tableName = this.registryNavigator.resolveTableName(schema, model, modelDef as AnyModelDef)\r\n return this.baseClient.from<\r\n RowOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n InsertOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n UpdateOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>\r\n >(tableName) as TableQueryBuilder<\r\n RowOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n InsertOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n UpdateOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n {\r\n registry: TRegistry\r\n database: TDatabase\r\n schema: TSchema\r\n model: ModelAt<TRegistry, TDatabase, TSchema, TModel>\r\n },\r\n TStrict\r\n >\r\n }\r\n}\r\n\r\n/**\r\n * Creates a typed client bound to a registry contract and optional tenant header mapping.\r\n */\r\nexport function createTypedClient<\r\n TRegistry extends RegistryConstraint,\r\n TTenantMap extends TenantKeyMap = Record<never, string>,\r\n>(\r\n registry: TRegistry,\r\n url: string,\r\n apiKey: string,\r\n options: TypedClientOptionsWithTypecheckedColumns<TTenantMap>,\r\n): TypedAthenaClient<TRegistry, TTenantMap, true>\r\nexport function createTypedClient<\r\n TRegistry extends RegistryConstraint,\r\n TTenantMap extends TenantKeyMap = Record<never, string>,\r\n>(\r\n registry: TRegistry,\r\n url: string,\r\n apiKey: string,\r\n options?: TypedClientOptions<TTenantMap>,\r\n): TypedAthenaClient<TRegistry, TTenantMap, false>\r\nexport function createTypedClient<\r\n TRegistry extends RegistryConstraint,\r\n TTenantMap extends TenantKeyMap = Record<never, string>,\r\n>(\r\n registry: TRegistry,\r\n url: string,\r\n apiKey: string,\r\n options?: TypedClientOptions<TTenantMap>,\r\n): TypedAthenaClient<TRegistry, TTenantMap, false> {\r\n return new TypedAthenaClientImpl({\r\n registry,\r\n url,\r\n apiKey,\r\n options,\r\n })\r\n}\r\n\r\n","import type { GeneratorProviderConfig, GeneratorSchemaSelection } from './types.ts'\r\n\r\nexport const DEFAULT_POSTGRES_SCHEMAS = ['public'] as const\r\n\r\nfunction collectSchemaNames(input: GeneratorSchemaSelection | undefined): string[] {\r\n if (!input) {\r\n return []\r\n }\r\n\r\n const values = typeof input === 'string' ? [input] : input\r\n return values.flatMap(value => String(value).split(','))\r\n}\r\n\r\n/**\r\n * Normalizes schema selection from config or env-backed strings into a stable,\r\n * deduplicated list. Empty selections fall back to PostgreSQL's public schema.\r\n */\r\nexport function normalizeSchemaSelection(\r\n input: GeneratorSchemaSelection | undefined,\r\n): string[] {\r\n const schemas: string[] = []\r\n const seen = new Set<string>()\r\n\r\n for (const value of collectSchemaNames(input)) {\r\n const schema = value.trim()\r\n if (!schema || seen.has(schema)) {\r\n continue\r\n }\r\n seen.add(schema)\r\n schemas.push(schema)\r\n }\r\n\r\n return schemas.length > 0 ? schemas : [...DEFAULT_POSTGRES_SCHEMAS]\r\n}\r\n\r\n/**\r\n * Resolves the effective schema list for provider-backed generator runs.\r\n */\r\nexport function resolveProviderSchemas(providerConfig: GeneratorProviderConfig): string[] {\r\n if (providerConfig.kind === 'postgres') {\r\n return normalizeSchemaSelection(providerConfig.schemas)\r\n }\r\n\r\n return [...DEFAULT_POSTGRES_SCHEMAS]\r\n}\r\n","import type { IntrospectionSchema, IntrospectionSnapshot } from '../schema/types.ts'\nimport type {\n GeneratorTableSelection,\n NormalizedGeneratorFilterConfig,\n} from './types.ts'\n\nfunction normalizeTableSelector(value: string): string | undefined {\n const trimmed = value.trim()\n return trimmed.length > 0 ? trimmed : undefined\n}\n\nexport function normalizeTableSelection(\n value: GeneratorTableSelection | undefined,\n): string[] {\n if (typeof value === 'string') {\n return Array.from(\n new Set(\n value\n .split(',')\n .map(normalizeTableSelector)\n .filter((entry): entry is string => Boolean(entry)),\n ),\n )\n }\n\n if (Array.isArray(value)) {\n return Array.from(\n new Set(\n value\n .map(entry => typeof entry === 'string' ? normalizeTableSelector(entry) : undefined)\n .filter((entry): entry is string => Boolean(entry)),\n ),\n )\n }\n\n return []\n}\n\nfunction matchesTableSelector(\n schemaName: string,\n tableName: string,\n selector: string,\n): boolean {\n const separatorIndex = selector.indexOf('.')\n if (separatorIndex < 0) {\n return tableName === selector\n }\n\n const selectorSchema = selector.slice(0, separatorIndex).trim()\n const selectorTable = selector.slice(separatorIndex + 1).trim()\n return selectorSchema === schemaName && selectorTable === tableName\n}\n\nfunction shouldKeepTable(\n schemaName: string,\n tableName: string,\n filter: NormalizedGeneratorFilterConfig,\n): boolean {\n const included = filter.includeTables.length === 0\n || filter.includeTables.some(selector => matchesTableSelector(schemaName, tableName, selector))\n if (!included) {\n return false\n }\n\n return !filter.excludeTables.some(selector => matchesTableSelector(schemaName, tableName, selector))\n}\n\nfunction hasTableFilters(filter: NormalizedGeneratorFilterConfig): boolean {\n return filter.includeTables.length > 0 || filter.excludeTables.length > 0\n}\n\nexport function filterIntrospectionSnapshot(\n snapshot: IntrospectionSnapshot,\n filter: NormalizedGeneratorFilterConfig,\n): IntrospectionSnapshot {\n if (!hasTableFilters(filter)) {\n return snapshot\n }\n\n const schemas: Record<string, IntrospectionSchema> = {}\n\n for (const [schemaName, schema] of Object.entries(snapshot.schemas)) {\n const tables = Object.fromEntries(\n Object.entries(schema.tables).filter(([tableName]) => shouldKeepTable(schemaName, tableName, filter)),\n )\n\n if (Object.keys(tables).length === 0) {\n continue\n }\n\n schemas[schemaName] = {\n ...schema,\n tables,\n }\n }\n\n if (Object.keys(schemas).length === 0) {\n const includeLabel = filter.includeTables.length > 0\n ? ` includeTables=${filter.includeTables.join(', ')}`\n : ''\n const excludeLabel = filter.excludeTables.length > 0\n ? ` excludeTables=${filter.excludeTables.join(', ')}`\n : ''\n throw new Error(\n `Generator table filters matched no tables after schema selection.${includeLabel}${excludeLabel}`,\n )\n }\n\n return {\n ...snapshot,\n schemas,\n }\n}\n","import { parseBooleanFlag } from '../auxiliaries.ts'\n\ninterface GeneratorEnvBaseOptions<T> {\n default?: T\n optional?: boolean\n}\n\nexport type GeneratorEnvStringOptions = GeneratorEnvBaseOptions<string>\n\nexport type GeneratorEnvBooleanOptions = GeneratorEnvBaseOptions<boolean>\n\nexport interface GeneratorEnvListOptions extends GeneratorEnvBaseOptions<readonly string[]> {\n separator?: string\n}\n\nexport type GeneratorEnvJsonOptions<T> = GeneratorEnvBaseOptions<T>\n\nexport type GeneratorEnvOneOfOptions<T extends string> = GeneratorEnvBaseOptions<T>\n\ntype GeneratorEnvHelper = {\n (key: string, options?: GeneratorEnvStringOptions): string\n (key: string, options: GeneratorEnvStringOptions & { optional: true }): string | undefined\n boolean(key: string, options?: GeneratorEnvBooleanOptions): boolean\n boolean(key: string, options: GeneratorEnvBooleanOptions & { optional: true }): boolean | undefined\n list(key: string, options?: GeneratorEnvListOptions): string[]\n list(key: string, options: GeneratorEnvListOptions & { optional: true }): string[] | undefined\n json<T>(key: string, options?: GeneratorEnvJsonOptions<T>): T\n json<T>(key: string, options: GeneratorEnvJsonOptions<T> & { optional: true }): T | undefined\n oneOf<const T extends string>(\n key: string,\n allowedValues: readonly T[],\n options?: GeneratorEnvOneOfOptions<T>,\n ): T\n oneOf<const T extends string>(\n key: string,\n allowedValues: readonly T[],\n options: GeneratorEnvOneOfOptions<T> & { optional: true },\n ): T | undefined\n}\n\nfunction readEnvStringValue(key: string): string | undefined {\n if (typeof process === 'undefined' || !process.env) {\n return undefined\n }\n\n const value = process.env[key]\n if (typeof value !== 'string') {\n return undefined\n }\n\n const trimmed = value.trim()\n return trimmed.length > 0 ? trimmed : undefined\n}\n\nfunction throwMissingEnvVar(key: string): never {\n throw new Error(\n `Generator config env var ${key} is missing or empty. Set ${key} or provide a default value.`,\n )\n}\n\nfunction resolveEnvValue<T>(\n key: string,\n options: GeneratorEnvBaseOptions<T> | undefined,\n resolver: (rawValue: string) => T,\n): T | undefined {\n const rawValue = readEnvStringValue(key)\n if (rawValue === undefined) {\n if (options?.default !== undefined) {\n return options.default\n }\n if (options?.optional) {\n return undefined\n }\n return throwMissingEnvVar(key)\n }\n\n return resolver(rawValue)\n}\n\nfunction resolveStringEnv(key: string, options?: GeneratorEnvStringOptions): string | undefined {\n return resolveEnvValue(key, options, value => value)\n}\n\nfunction resolveBooleanEnv(key: string, options?: GeneratorEnvBooleanOptions): boolean | undefined {\n return resolveEnvValue(key, options, value => parseBooleanFlag(value, false))\n}\n\nfunction resolveListEnv(key: string, options?: GeneratorEnvListOptions): string[] | undefined {\n return resolveEnvValue(key, options, value => {\n const separator = options?.separator ?? ','\n return value\n .split(separator)\n .map(entry => entry.trim())\n .filter((entry, index, entries) => entry.length > 0 && entries.indexOf(entry) === index)\n })?.slice()\n}\n\nfunction resolveJsonEnv<T>(key: string, options?: GeneratorEnvJsonOptions<T>): T | undefined {\n return resolveEnvValue(key, options, value => {\n try {\n return JSON.parse(value) as T\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n throw new Error(`Generator config env var ${key} must contain valid JSON. ${message}`)\n }\n })\n}\n\nfunction resolveOneOfEnv<T extends string>(\n key: string,\n allowedValues: readonly T[],\n options?: GeneratorEnvOneOfOptions<T>,\n): T | undefined {\n return resolveEnvValue(key, options, value => {\n if (allowedValues.includes(value as T)) {\n return value as T\n }\n\n throw new Error(\n `Generator config env var ${key} must be one of: ${allowedValues.join(', ')}. Received: ${value}.`,\n )\n })\n}\n\nfunction generatorEnvString(key: string, options?: GeneratorEnvStringOptions): string\nfunction generatorEnvString(\n key: string,\n options: GeneratorEnvStringOptions & { optional: true },\n): string | undefined\nfunction generatorEnvString(\n key: string,\n options?: GeneratorEnvStringOptions,\n): string | undefined {\n return resolveStringEnv(key, options)\n}\n\nfunction generatorEnvBoolean(key: string, options?: GeneratorEnvBooleanOptions): boolean\nfunction generatorEnvBoolean(\n key: string,\n options: GeneratorEnvBooleanOptions & { optional: true },\n): boolean | undefined\nfunction generatorEnvBoolean(\n key: string,\n options?: GeneratorEnvBooleanOptions,\n): boolean | undefined {\n return resolveBooleanEnv(key, options)\n}\n\nfunction generatorEnvList(key: string, options?: GeneratorEnvListOptions): string[]\nfunction generatorEnvList(\n key: string,\n options: GeneratorEnvListOptions & { optional: true },\n): string[] | undefined\nfunction generatorEnvList(\n key: string,\n options?: GeneratorEnvListOptions,\n): string[] | undefined {\n return resolveListEnv(key, options)\n}\n\nfunction generatorEnvJson<T>(key: string, options?: GeneratorEnvJsonOptions<T>): T\nfunction generatorEnvJson<T>(\n key: string,\n options: GeneratorEnvJsonOptions<T> & { optional: true },\n): T | undefined\nfunction generatorEnvJson<T>(\n key: string,\n options?: GeneratorEnvJsonOptions<T>,\n): T | undefined {\n return resolveJsonEnv(key, options)\n}\n\nfunction generatorEnvOneOf<const T extends string>(\n key: string,\n allowedValues: readonly T[],\n options?: GeneratorEnvOneOfOptions<T>,\n): T\nfunction generatorEnvOneOf<const T extends string>(\n key: string,\n allowedValues: readonly T[],\n options: GeneratorEnvOneOfOptions<T> & { optional: true },\n): T | undefined\nfunction generatorEnvOneOf<const T extends string>(\n key: string,\n allowedValues: readonly T[],\n options?: GeneratorEnvOneOfOptions<T>,\n): T | undefined {\n return resolveOneOfEnv(key, allowedValues, options)\n}\n\n/**\n * Typed env reader for generator configs. This keeps `athena.config.*` files\n * declarative while preserving exact field types for booleans, lists, unions,\n * and JSON-backed objects.\n */\nexport const generatorEnv = Object.assign(generatorEnvString, {\n boolean: generatorEnvBoolean,\n list: generatorEnvList,\n json: generatorEnvJson,\n oneOf: generatorEnvOneOf,\n}) as GeneratorEnvHelper\n","import type { IntrospectionColumn } from '../schema/types.ts'\r\n\r\nconst NUMBER_TYPES = new Set([\r\n 'int2',\r\n 'int4',\r\n 'float4',\r\n 'float8',\r\n 'smallint',\r\n 'integer',\r\n 'real',\r\n 'double precision',\r\n])\r\n\r\nconst STRING_NUMERIC_TYPES = new Set([\r\n 'int8',\r\n 'bigint',\r\n 'serial8',\r\n 'bigserial',\r\n 'numeric',\r\n 'decimal',\r\n 'money',\r\n])\r\n\r\nconst TEXT_TYPES = new Set([\r\n 'char',\r\n 'bpchar',\r\n 'varchar',\r\n 'character varying',\r\n 'text',\r\n 'citext',\r\n 'name',\r\n 'uuid',\r\n 'date',\r\n 'time',\r\n 'timetz',\r\n 'timestamp',\r\n 'timestamptz',\r\n 'interval',\r\n 'inet',\r\n 'cidr',\r\n 'macaddr',\r\n 'macaddr8',\r\n 'point',\r\n 'line',\r\n 'lseg',\r\n 'box',\r\n 'path',\r\n 'polygon',\r\n 'circle',\r\n 'bit',\r\n 'varbit',\r\n 'xml',\r\n 'tsvector',\r\n 'tsquery',\r\n 'jsonpath',\r\n])\r\n\r\nfunction normalizeTypeLabel(column: IntrospectionColumn): string {\r\n const preferred = (column.udtName || column.dataType).toLowerCase().trim()\r\n if (column.arrayDimensions > 0 && preferred.startsWith('_')) {\r\n return preferred.slice(1)\r\n }\r\n return preferred\r\n}\r\n\r\nfunction wrapArrayType(baseType: string, depth: number): string {\r\n let wrapped = baseType\r\n for (let index = 0; index < depth; index += 1) {\r\n wrapped = `Array<${wrapped}>`\r\n }\r\n return wrapped\r\n}\r\n\r\nfunction resolveScalarType(column: IntrospectionColumn): string {\r\n const label = normalizeTypeLabel(column)\r\n\r\n if (NUMBER_TYPES.has(label)) {\r\n return 'number'\r\n }\r\n\r\n if (STRING_NUMERIC_TYPES.has(label)) {\r\n return 'string'\r\n }\r\n\r\n if (label === 'bool' || label === 'boolean') {\r\n return 'boolean'\r\n }\r\n\r\n if (label === 'bytea') {\r\n return 'Buffer'\r\n }\r\n\r\n if (label === 'json' || label === 'jsonb') {\r\n return 'Record<string, unknown>'\r\n }\r\n\r\n if (TEXT_TYPES.has(label)) {\r\n return 'string'\r\n }\r\n\r\n if (label.endsWith('range') || label.endsWith('multirange')) {\r\n return 'string'\r\n }\r\n\r\n return 'unknown'\r\n}\r\n\r\nfunction resolveKindAwareType(column: IntrospectionColumn): string {\r\n if (column.typeKind === 'enum') {\r\n const values = column.enumValues ?? []\r\n if (values.length === 0) {\r\n return 'string'\r\n }\r\n return values.map(value => `'${value.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\")}'`).join(' | ')\r\n }\r\n\r\n if (column.typeKind === 'composite') {\r\n return 'Record<string, unknown>'\r\n }\r\n\r\n if (column.typeKind === 'domain' || column.typeKind === 'range' || column.typeKind === 'multirange') {\r\n return 'string'\r\n }\r\n\r\n return resolveScalarType(column)\r\n}\r\n\r\nexport function resolvePostgresColumnType(column: IntrospectionColumn): string {\r\n const baseType = resolveKindAwareType(column)\r\n if (!column.arrayDimensions || column.arrayDimensions <= 0) {\r\n return baseType\r\n }\r\n return wrapArrayType(baseType, column.arrayDimensions)\r\n}\r\n","import {\n deleteSessionCookie,\n getCookieCache,\n getCookies,\n getSessionCookie,\n parseCookies,\n setSessionCookie,\n type AthenaAuthCookies,\n type AthenaCookieContextRuntime,\n type AthenaCookieOptions,\n type AthenaCookiesOptions,\n} from '../cookies/index.ts'\nimport type { AthenaSessionPair } from '../cookies/types.ts'\n\ntype AthenaMaybePromise<T> = T | Promise<T>\ntype AthenaAuthServerCookieOptions = Pick<AthenaCookiesOptions, 'session' | 'advanced'>\n\nconst DEFAULT_AUTH_BASE_PATH = '/api/auth'\n\nexport const ATHENA_AUTH_BASE_ERROR_CODES = {\n HANDLER_NOT_CONFIGURED: 'HANDLER_NOT_CONFIGURED',\n INVALID_BASE_URL: 'INVALID_BASE_URL',\n UNTRUSTED_HOST: 'UNTRUSTED_HOST',\n} as const\n\nexport interface AthenaAuthSocialProviderConfig {\n clientId: string\n clientSecret: string\n scope?: string[]\n [key: string]: unknown\n}\n\nexport interface AthenaAuthPluginContext {\n path?: string\n headers?: Headers\n context: {\n returned?: unknown\n responseHeaders?: Headers\n setSession?: AthenaSessionPair | null\n clearSession?: boolean\n dontRememberMe?: boolean\n cookieOverrides?: Partial<AthenaCookieOptions>\n [key: string]: unknown\n }\n}\n\nexport interface AthenaAuthPluginHandlerContext extends AthenaAuthPluginContext {\n auth: AthenaAuthServer\n}\n\nexport interface AthenaAuthPlugin {\n id: string\n version: string\n $ERROR_CODES?: Record<string, string>\n hooks?: {\n after?: Array<{\n matcher: (ctx: AthenaAuthPluginContext) => boolean\n handler: (ctx: AthenaAuthPluginHandlerContext) => Promise<void> | void\n }>\n }\n}\n\nexport interface AthenaAuthCookieRuntimeInput {\n headers?: Headers\n responseHeaders?: Headers\n cookies?: AthenaAuthCookies\n getCookie?: (name: string) => string | null | undefined\n setCookie?: (name: string, value: string, attributes: AthenaCookieOptions) => void\n logger?: AthenaCookieContextRuntime['logger']\n setSignedCookie?: AthenaCookieContextRuntime['setSignedCookie']\n getSignedCookie?: AthenaCookieContextRuntime['getSignedCookie']\n setNewSession?: AthenaCookieContextRuntime['context']['setNewSession']\n}\n\nexport interface AthenaAuthServerRuntimeOptions {\n baseURL?: string\n basePath: string\n secret: string\n cookies: AthenaAuthServerCookieOptions\n}\n\nexport type AthenaAuthDatabaseFactory<TDatabase = unknown> = (\n options: AthenaAuthServerRuntimeOptions,\n) => TDatabase\n\nexport type AthenaAuthBaseURLConfig = AthenaCookiesOptions['baseURL']\n\nexport type AthenaAuthTrustedOrigins =\n | string[]\n | ((request?: Request) => AthenaMaybePromise<string[]>)\n\nexport type AthenaAuthTrustedProviders =\n | string[]\n | ((request?: Request) => AthenaMaybePromise<string[]>)\n\nexport interface AthenaAuthHandlerResult {\n response?: Response\n returned?: unknown\n setSession?: AthenaSessionPair | null\n clearSession?: boolean\n dontRememberMe?: boolean\n cookieOverrides?: Partial<AthenaCookieOptions>\n}\n\nexport interface AthenaAuthServerConfig<\n TDatabase = unknown,\n> extends AthenaAuthServerCookieOptions {\n baseURL?: AthenaAuthBaseURLConfig\n basePath?: string\n secret: string\n database: TDatabase | AthenaAuthDatabaseFactory<TDatabase>\n socialProviders?: Record<string, AthenaAuthSocialProviderConfig>\n trustedOrigins?: AthenaAuthTrustedOrigins\n trustedProviders?: AthenaAuthTrustedProviders\n api?: Record<string, unknown>\n errorCodes?: Record<string, string>\n handler?: (\n ctx: AthenaAuthRequestContext,\n ) => AthenaMaybePromise<Response | AthenaAuthHandlerResult>\n plugins?: AthenaAuthPlugin[]\n}\n\ntype ResolveAthenaAuthDatabase<TConfig extends AthenaAuthServerConfig> =\n TConfig['database'] extends (...args: never[]) => infer TResult\n ? TResult\n : TConfig['database']\n\nexport interface AthenaAuthRequestContext<\n TConfig extends AthenaAuthServerConfig = AthenaAuthServerConfig,\n> {\n auth: AthenaAuthServer<TConfig>\n request: Request\n url: URL\n path: string\n basePath: string\n baseURL: string\n origin: string\n headers: Headers\n cookies: AthenaAuthCookies\n trustedOrigins: string[]\n trustedProviders: string[]\n options: TConfig\n runtime: AthenaAuthServerRuntimeOptions\n database: ResolveAthenaAuthDatabase<TConfig>\n socialProviders: NonNullable<TConfig['socialProviders']>\n}\n\nexport interface AthenaAuthContext<\n TConfig extends AthenaAuthServerConfig = AthenaAuthServerConfig,\n> {\n auth: AthenaAuthServer<TConfig>\n options: TConfig\n runtime: AthenaAuthServerRuntimeOptions\n basePath: string\n baseURL?: string\n origin?: string\n database: ResolveAthenaAuthDatabase<TConfig>\n socialProviders: NonNullable<TConfig['socialProviders']>\n plugins: AthenaAuthPlugin[]\n cookies: AthenaAuthCookies\n trustedOrigins: string[]\n trustedProviders: string[]\n}\n\nexport interface AthenaAuthServerApi<\n TConfig extends AthenaAuthServerConfig = AthenaAuthServerConfig,\n> {\n applyResponseCookies: AthenaAuthServer<TConfig>['applyResponseCookies']\n clearSession: AthenaAuthServer<TConfig>['clearSession']\n createCookieContext: AthenaAuthServer<TConfig>['createCookieContext']\n getCookieCache: typeof getCookieCache\n getSessionCookie: typeof getSessionCookie\n resolveRequestContext: AthenaAuthServer<TConfig>['resolveRequestContext']\n runAfterHooks: AthenaAuthServer<TConfig>['runAfterHooks']\n setSession: AthenaAuthServer<TConfig>['setSession']\n}\n\nexport interface AthenaAuthServer<\n TConfig extends AthenaAuthServerConfig = AthenaAuthServerConfig,\n> {\n config: TConfig\n options: TConfig\n runtime: AthenaAuthServerRuntimeOptions\n database: ResolveAthenaAuthDatabase<TConfig>\n socialProviders: NonNullable<TConfig['socialProviders']>\n plugins: AthenaAuthPlugin[]\n cookies: AthenaAuthCookies\n api: AthenaAuthServerApi<TConfig> & Record<string, unknown>\n $context: Promise<AthenaAuthContext<TConfig>>\n $ERROR_CODES: Record<string, string>\n createCookieContext: (input?: AthenaAuthCookieRuntimeInput) => AthenaCookieContextRuntime\n setSession: (\n input: AthenaAuthCookieRuntimeInput | undefined,\n session: AthenaSessionPair,\n dontRememberMe?: boolean,\n overrides?: Partial<AthenaCookieOptions>,\n ) => Promise<void>\n clearSession: (\n input?: AthenaAuthCookieRuntimeInput,\n skipDontRememberMe?: boolean,\n ) => void\n applyResponseCookies: (ctx: AthenaAuthPluginContext) => Promise<Headers>\n runAfterHooks: (ctx: AthenaAuthPluginContext) => Promise<AthenaAuthPluginContext>\n resolveRequestContext: (request: Request) => Promise<AthenaAuthRequestContext<TConfig>>\n handler: (request: Request) => Promise<Response>\n}\n\nfunction capitalize(value: string): string {\n return value.length > 0 ? `${value[0]?.toUpperCase()}${value.slice(1)}` : value\n}\n\nfunction serializeSetCookieValue(\n name: string,\n value: string,\n attributes: AthenaCookieOptions,\n): string {\n const parts = [`${name}=${encodeURIComponent(value)}`]\n const knownKeys = new Set([\n 'maxAge',\n 'expires',\n 'domain',\n 'path',\n 'secure',\n 'httpOnly',\n 'partitioned',\n 'sameSite',\n ])\n\n if (attributes.maxAge !== undefined) {\n parts.push(`Max-Age=${Math.trunc(attributes.maxAge)}`)\n }\n if (attributes.expires instanceof Date) {\n parts.push(`Expires=${attributes.expires.toUTCString()}`)\n }\n if (attributes.domain) {\n parts.push(`Domain=${attributes.domain}`)\n }\n if (attributes.path) {\n parts.push(`Path=${attributes.path}`)\n }\n if (attributes.secure) {\n parts.push('Secure')\n }\n if (attributes.httpOnly) {\n parts.push('HttpOnly')\n }\n if (attributes.partitioned) {\n parts.push('Partitioned')\n }\n if (attributes.sameSite) {\n parts.push(`SameSite=${capitalize(attributes.sameSite)}`)\n }\n\n for (const [key, rawValue] of Object.entries(attributes)) {\n if (knownKeys.has(key) || rawValue === undefined || rawValue === null || rawValue === false) {\n continue\n }\n if (rawValue === true) {\n parts.push(key)\n continue\n }\n parts.push(`${key}=${String(rawValue)}`)\n }\n\n return parts.join('; ')\n}\n\nfunction readCookieFromHeaders(headers: Headers | undefined, name: string): string | undefined {\n const cookieHeader = headers?.get('cookie')\n if (!cookieHeader) {\n return undefined\n }\n return parseCookies(cookieHeader).get(name)\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction resolveSessionCandidate(value: unknown): AthenaSessionPair | null {\n if (!isRecord(value)) {\n return null\n }\n\n const session = isRecord(value.session) ? value.session : undefined\n const user = isRecord(value.user) ? value.user : undefined\n if (session && typeof session.token === 'string' && session.token.length > 0 && user) {\n return {\n session: session as Record<string, unknown> & { token: string },\n user: user as Record<string, unknown>,\n }\n }\n\n return null\n}\n\nfunction inferSessionPair(returned: unknown): AthenaSessionPair | null {\n return (\n resolveSessionCandidate(returned) ??\n (isRecord(returned) ? resolveSessionCandidate(returned.data) : null) ??\n (isRecord(returned) ? resolveSessionCandidate(returned.session) : null)\n )\n}\n\nfunction resolveResponseHeaders(ctx: AthenaAuthPluginContext): Headers {\n if (ctx.context.responseHeaders instanceof Headers) {\n return ctx.context.responseHeaders\n }\n\n const headers = new Headers()\n ctx.context.responseHeaders = headers\n return headers\n}\n\nfunction normalizeBaseURL(baseURL: string): string {\n return baseURL.replace(/\\/$/, '')\n}\n\nfunction normalizeBasePath(basePath: string | undefined): string {\n if (!basePath || basePath === '/') {\n return DEFAULT_AUTH_BASE_PATH\n }\n\n const normalized = basePath.startsWith('/') ? basePath : `/${basePath}`\n return normalized.endsWith('/') && normalized.length > 1\n ? normalized.slice(0, -1)\n : normalized\n}\n\nfunction isDynamicBaseURLConfig(\n baseURL: AthenaAuthBaseURLConfig | undefined,\n): baseURL is Exclude<AthenaAuthBaseURLConfig, string | undefined> {\n return (\n typeof baseURL === 'object' &&\n baseURL !== null &&\n 'allowedHosts' in baseURL &&\n Array.isArray((baseURL as { allowedHosts?: unknown }).allowedHosts)\n )\n}\n\nfunction getRequestUrl(request: Request): URL {\n try {\n return new URL(request.url)\n } catch {\n return new URL('http://localhost')\n }\n}\n\nfunction getRequestHost(request: Request, url: URL): string | null {\n const forwardedHost = request.headers.get('x-forwarded-host')?.split(',')[0]?.trim()\n const host = forwardedHost || request.headers.get('host') || url.host\n return host || null\n}\n\nfunction getRequestProtocol(\n request: Request,\n configuredProtocol: 'http' | 'https' | 'auto' | undefined,\n url: URL,\n): 'http' | 'https' {\n if (configuredProtocol === 'http' || configuredProtocol === 'https') {\n return configuredProtocol\n }\n\n const forwardedProto = request.headers.get('x-forwarded-proto')?.split(',')[0]?.trim()\n if (forwardedProto === 'http' || forwardedProto === 'https') {\n return forwardedProto\n }\n\n if (url.protocol === 'http:' || url.protocol === 'https:') {\n return url.protocol.slice(0, -1) as 'http' | 'https'\n }\n\n return 'http'\n}\n\nfunction resolveRequestBaseURL(\n baseURL: AthenaAuthBaseURLConfig | undefined,\n request: Request,\n): string | null {\n if (typeof baseURL === 'string') {\n return normalizeBaseURL(baseURL)\n }\n\n const requestUrl = getRequestUrl(request)\n const host = getRequestHost(request, requestUrl)\n if (!host) {\n return null\n }\n\n if (isDynamicBaseURLConfig(baseURL)) {\n const allowedHosts = baseURL.allowedHosts ?? []\n if (allowedHosts.length > 0 && !allowedHosts.includes(host)) {\n return null\n }\n }\n\n const protocol =\n typeof baseURL === 'object' && baseURL !== null\n ? getRequestProtocol(request, baseURL.protocol, requestUrl)\n : getRequestProtocol(request, undefined, requestUrl)\n\n return `${protocol}://${host}`\n}\n\nfunction getOrigin(baseURL: string | undefined): string | undefined {\n if (!baseURL) {\n return undefined\n }\n\n try {\n return new URL(baseURL).origin\n } catch {\n return undefined\n }\n}\n\nasync function resolveTrustedOrigins(\n config: AthenaAuthServerConfig,\n baseURL: string | undefined,\n request?: Request,\n): Promise<string[]> {\n const resolved =\n typeof config.trustedOrigins === 'function'\n ? await config.trustedOrigins(request)\n : (config.trustedOrigins ?? [])\n\n const values = [\n getOrigin(baseURL),\n ...resolved,\n ]\n\n return Array.from(new Set(values.filter((value): value is string => typeof value === 'string' && value.length > 0)))\n}\n\nasync function resolveTrustedProviders(\n config: AthenaAuthServerConfig,\n request?: Request,\n): Promise<string[]> {\n const configured =\n typeof config.trustedProviders === 'function'\n ? await config.trustedProviders(request)\n : (config.trustedProviders ?? [])\n\n const values = [\n ...Object.keys(config.socialProviders ?? {}),\n ...configured,\n ]\n\n return Array.from(new Set(values.filter((value): value is string => typeof value === 'string' && value.length > 0)))\n}\n\nfunction createJsonResponse(payload: unknown, init?: ResponseInit): Response {\n const headers = new Headers(init?.headers)\n if (!headers.has('content-type')) {\n headers.set('content-type', 'application/json; charset=utf-8')\n }\n return new Response(JSON.stringify(payload), {\n ...init,\n headers,\n })\n}\n\nfunction mergeResponseHeaders(response: Response, headers: Headers): Response {\n return new Response(response.body, {\n status: response.status,\n statusText: response.statusText,\n headers,\n })\n}\n\nexport function defineAthenaAuthConfig<TConfig extends AthenaAuthServerConfig>(\n config: TConfig,\n): TConfig {\n return config\n}\n\nexport function athenaAuth<TConfig extends AthenaAuthServerConfig>(\n config: TConfig,\n): AthenaAuthServer<TConfig> {\n const normalizedBasePath = normalizeBasePath(config.basePath)\n const staticBaseURL =\n typeof config.baseURL === 'string' ? normalizeBaseURL(config.baseURL) : undefined\n const runtime: AthenaAuthServerRuntimeOptions = {\n baseURL: staticBaseURL,\n basePath: normalizedBasePath,\n secret: config.secret,\n cookies: {\n session: config.session,\n advanced: config.advanced,\n },\n }\n const resolvedDatabase = (\n typeof config.database === 'function'\n ? config.database(runtime)\n : config.database\n ) as ResolveAthenaAuthDatabase<TConfig>\n const cookies = getCookies({\n baseURL: staticBaseURL ?? config.baseURL,\n session: config.session,\n advanced: config.advanced,\n })\n\n const auth = {} as AthenaAuthServer<TConfig>\n\n const createCookieContext: AthenaAuthServer<TConfig>['createCookieContext'] = (input = {}) => {\n const responseHeaders = input.responseHeaders ?? new Headers()\n const runtimeHeaders = input.headers\n const authCookies = input.cookies ?? auth.cookies\n\n const setCookie = input.setCookie ?? ((name, value, attributes) => {\n responseHeaders.append(\n 'set-cookie',\n serializeSetCookieValue(name, value, attributes),\n )\n })\n\n return {\n headers: runtimeHeaders,\n getCookie: input.getCookie ?? (name => readCookieFromHeaders(runtimeHeaders, name)),\n setCookie,\n logger: input.logger,\n setSignedCookie: input.setSignedCookie,\n getSignedCookie: input.getSignedCookie,\n context: {\n secret: runtime.secret,\n authCookies,\n sessionConfig: {\n expiresIn: config.session?.expiresIn,\n },\n options: {\n session: {\n cookieCache: config.session?.cookieCache,\n },\n account: {\n storeAccountCookie: true,\n },\n },\n setNewSession: input.setNewSession,\n },\n }\n }\n\n const setSession: AthenaAuthServer<TConfig>['setSession'] = async (\n input,\n session,\n dontRememberMe,\n overrides,\n ) => {\n const cookieContext = createCookieContext(input)\n await setSessionCookie(cookieContext, session, dontRememberMe, overrides)\n }\n\n const clearSession: AthenaAuthServer<TConfig>['clearSession'] = (\n input,\n skipDontRememberMe,\n ) => {\n const cookieContext = createCookieContext(input)\n deleteSessionCookie(cookieContext, skipDontRememberMe)\n }\n\n const applyResponseCookies: AthenaAuthServer<TConfig>['applyResponseCookies'] = async ctx => {\n const responseHeaders = resolveResponseHeaders(ctx)\n const session =\n ctx.context.setSession ??\n inferSessionPair(ctx.context.returned)\n\n if (ctx.context.clearSession) {\n clearSession({\n headers: ctx.headers,\n responseHeaders,\n })\n }\n\n if (session) {\n await setSession(\n {\n headers: ctx.headers,\n responseHeaders,\n },\n session,\n ctx.context.dontRememberMe,\n ctx.context.cookieOverrides,\n )\n }\n\n return responseHeaders\n }\n\n const runAfterHooks: AthenaAuthServer<TConfig>['runAfterHooks'] = async ctx => {\n for (const plugin of auth.plugins) {\n for (const hook of plugin.hooks?.after ?? []) {\n if (!hook.matcher(ctx)) {\n continue\n }\n await hook.handler({\n ...ctx,\n auth,\n })\n }\n }\n return ctx\n }\n\n const resolveRequestContext: AthenaAuthServer<TConfig>['resolveRequestContext'] = async request => {\n const requestUrl = getRequestUrl(request)\n const resolvedBaseURL = resolveRequestBaseURL(config.baseURL, request)\n if (!resolvedBaseURL) {\n throw new Error(\n isDynamicBaseURLConfig(config.baseURL)\n ? 'Could not resolve base URL from request. Check allowedHosts/baseURL.'\n : 'Could not resolve base URL from request.',\n )\n }\n\n const requestCookies = getCookies({\n baseURL: resolvedBaseURL,\n session: config.session,\n advanced: config.advanced,\n })\n const trustedOrigins = await resolveTrustedOrigins(config, resolvedBaseURL, request)\n const trustedProviders = await resolveTrustedProviders(config, request)\n\n return {\n auth,\n request,\n url: requestUrl,\n path: requestUrl.pathname,\n basePath: normalizedBasePath,\n baseURL: resolvedBaseURL,\n origin: getOrigin(resolvedBaseURL) ?? resolvedBaseURL,\n headers: request.headers,\n cookies: requestCookies,\n trustedOrigins,\n trustedProviders,\n options: config,\n runtime: {\n ...runtime,\n baseURL: resolvedBaseURL,\n },\n database: auth.database,\n socialProviders: auth.socialProviders,\n }\n }\n\n const handler: AthenaAuthServer<TConfig>['handler'] = async request => {\n const requestContext = await resolveRequestContext(request)\n\n if (typeof config.handler !== 'function') {\n return createJsonResponse(\n {\n ok: false,\n code: ATHENA_AUTH_BASE_ERROR_CODES.HANDLER_NOT_CONFIGURED,\n error: 'No native auth handler was configured for this Athena auth instance.',\n path: requestContext.path,\n basePath: requestContext.basePath,\n },\n { status: 501 },\n )\n }\n\n const result = await config.handler(requestContext)\n if (result instanceof Response) {\n return result\n }\n\n const response =\n result.response ??\n (result.returned !== undefined\n ? createJsonResponse(result.returned)\n : new Response(null, { status: 204 }))\n\n const responseHeaders = new Headers(response.headers)\n await runAfterHooks({\n path: requestContext.path,\n headers: request.headers,\n context: {\n responseHeaders,\n returned: result.returned,\n setSession: result.setSession,\n clearSession: result.clearSession,\n dontRememberMe: result.dontRememberMe,\n cookieOverrides: result.cookieOverrides,\n },\n })\n\n return mergeResponseHeaders(response, responseHeaders)\n }\n\n const api: AthenaAuthServer<TConfig>['api'] = Object.assign(\n {\n applyResponseCookies,\n clearSession,\n createCookieContext,\n getCookieCache,\n getSessionCookie,\n resolveRequestContext,\n runAfterHooks,\n setSession,\n } satisfies AthenaAuthServerApi<TConfig>,\n config.api ?? {},\n )\n\n const $ERROR_CODES = {\n ...auth.plugins?.reduce<Record<string, string>>((acc, plugin) => {\n if (plugin.$ERROR_CODES) {\n return {\n ...acc,\n ...plugin.$ERROR_CODES,\n }\n }\n return acc\n }, {}),\n ...(config.errorCodes ?? {}),\n ...ATHENA_AUTH_BASE_ERROR_CODES,\n }\n\n Object.assign(auth, {\n config,\n options: config,\n runtime,\n database: resolvedDatabase,\n socialProviders: (config.socialProviders ?? {}) as NonNullable<TConfig['socialProviders']>,\n plugins: [...(config.plugins ?? [])],\n cookies,\n api,\n $ERROR_CODES,\n createCookieContext,\n setSession,\n clearSession,\n applyResponseCookies,\n runAfterHooks,\n resolveRequestContext,\n handler,\n } satisfies Omit<AthenaAuthServer<TConfig>, '$context'>)\n\n auth.$context = Promise.all([\n resolveTrustedOrigins(config, staticBaseURL),\n resolveTrustedProviders(config),\n ]).then(([trustedOrigins, trustedProviders]) => ({\n auth,\n options: config,\n runtime,\n basePath: normalizedBasePath,\n baseURL: staticBaseURL,\n origin: getOrigin(staticBaseURL),\n database: auth.database,\n socialProviders: auth.socialProviders,\n plugins: auth.plugins,\n cookies: auth.cookies,\n trustedOrigins,\n trustedProviders,\n }))\n\n return auth\n}\n","/**\r\n * athena-js browser entry\r\n *\r\n * Keeps the root package import browser-safe by avoiding Node-only modules\r\n * while preserving the existing export surface.\r\n */\r\n\r\n// Athena client\r\nexport { createClient, AthenaClient } from './client.js'\r\nexport { Backend } from './gateway/types.js'\r\nexport { AthenaGatewayError, isAthenaGatewayError } from './gateway/errors.ts'\r\nexport { verifyAthenaGatewayUrl } from './gateway/client.ts'\r\nexport { normalizeAthenaGatewayBaseUrl } from './gateway/url.ts'\r\nexport {\r\n isOk,\r\n unwrap,\r\n unwrapRows,\r\n unwrapOne,\r\n requireSuccess,\r\n requireAffected,\r\n parseBooleanFlag,\r\n normalizeAthenaError,\r\n coerceInt,\r\n assertInt,\r\n withRetry,\r\n AthenaError,\r\n AthenaErrorCode,\r\n AthenaErrorKind,\r\n AthenaErrorCategory,\r\n} from './auxiliaries.js'\r\nexport { identifier } from './sql-identifiers.ts'\r\nexport {\r\n defineDatabase,\r\n defineModel,\r\n defineRegistry,\r\n defineSchema,\r\n} from './schema/definitions.ts'\r\nexport {\r\n table,\r\n} from './schema/table-builder.ts'\r\nexport {\r\n boolean,\r\n enumeration,\r\n json,\r\n number,\r\n string,\r\n} from './schema/table-columns.ts'\r\nexport { createTypedClient } from './schema/typed-client.ts'\r\nexport {\r\n createModelFormAdapter,\r\n toModelFormDefaults,\r\n toModelPayload,\r\n} from './schema/model-form.ts'\r\nexport {\n DEFAULT_POSTGRES_SCHEMAS,\n normalizeSchemaSelection,\n resolveProviderSchemas,\n} from './generator/schema-selection.ts'\nexport {\n filterIntrospectionSnapshot,\n normalizeTableSelection,\n} from './generator/table-selection.ts'\nexport { generatorEnv } from './generator/env.ts'\nexport { resolvePostgresColumnType } from './generator/postgres-type-mapping.ts'\nexport {\n ATHENA_AUTH_ADMIN_LIMITS,\n ATHENA_AUTH_MAX_ADMIN_JSON_BYTES,\n ATHENA_AUTH_MAX_ADMIN_JSON_DEPTH,\n ATHENA_AUTH_MAX_TEMPLATE_VARIABLES,\n ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH,\n ATHENA_AUTH_BASE_ERROR_CODES,\n athenaAuth,\n createAuthClient,\n defineAthenaAuthConfig,\n renderAthenaReactEmail,\n createAuthReactEmailInput,\r\n defineAuthEmailTemplate,\r\n} from './auth/index.ts'\r\nexport {\r\n storageSdkManifest,\r\n AthenaStorageError,\r\n AthenaStorageErrorCode,\r\n createAthenaStorageError,\r\n} from './storage/module.ts'\r\nexport { getAthenaDebugAst } from './query-debug-ast.ts'\r\n\r\nimport type {\r\n PostgresIntrospectionProviderOptions,\r\n} from './schema/postgres-provider.ts'\r\nimport type { IntrospectionSnapshot, SchemaIntrospectionProvider } from './schema/types.ts'\r\nimport type {\n AthenaGeneratorConfig,\n GeneratedArtifacts,\n GeneratorExperimentalFlags,\n GeneratorProviderConfig,\n LoadGeneratorConfigOptions,\n LoadedGeneratorConfig,\n NormalizedAthenaGeneratorConfig,\n RunGeneratorOptions,\n RunGeneratorResult,\n} from './generator/types.ts'\r\n\r\nfunction throwBrowserUnsupported(apiName: string): never {\r\n throw new Error(\r\n `@xylex-group/athena: ${apiName} is not available in browser bundles. Use this API in a Node.js runtime.`,\r\n )\r\n}\r\n\r\nexport function createPostgresIntrospectionProvider(\r\n options: PostgresIntrospectionProviderOptions,\r\n): SchemaIntrospectionProvider {\r\n void options\r\n return throwBrowserUnsupported('createPostgresIntrospectionProvider')\r\n}\r\n\r\nexport function defineGeneratorConfig<TConfig extends AthenaGeneratorConfig>(\r\n config: TConfig,\r\n): TConfig {\r\n return config\r\n}\r\n\r\nexport function findGeneratorConfigPath(cwd?: string): string | undefined {\r\n void cwd\r\n return throwBrowserUnsupported('findGeneratorConfigPath')\r\n}\r\n\r\nexport async function loadGeneratorConfig(\r\n options: LoadGeneratorConfigOptions = {},\r\n): Promise<LoadedGeneratorConfig> {\r\n void options\r\n return throwBrowserUnsupported('loadGeneratorConfig')\r\n}\r\n\r\nexport function normalizeGeneratorConfig(\r\n input: AthenaGeneratorConfig,\r\n): NormalizedAthenaGeneratorConfig {\r\n void input\r\n return throwBrowserUnsupported('normalizeGeneratorConfig')\r\n}\r\n\r\nexport function generateArtifactsFromSnapshot(\r\n snapshot: IntrospectionSnapshot,\r\n config: AthenaGeneratorConfig | NormalizedAthenaGeneratorConfig,\r\n): GeneratedArtifacts {\r\n void snapshot\r\n void config\r\n return throwBrowserUnsupported('generateArtifactsFromSnapshot')\r\n}\r\n\r\nexport function resolveGeneratorProvider(\r\n providerConfig: GeneratorProviderConfig,\r\n experimentalFlags: GeneratorExperimentalFlags,\r\n): SchemaIntrospectionProvider {\r\n void providerConfig\r\n void experimentalFlags\r\n return throwBrowserUnsupported('resolveGeneratorProvider')\r\n}\r\n\r\nexport async function runSchemaGenerator(\r\n options: RunGeneratorOptions = {},\r\n): Promise<RunGeneratorResult> {\r\n void options\r\n return throwBrowserUnsupported('runSchemaGenerator')\r\n}\r\n\r\nexport type {\r\n AthenaClientExperimentalOptions,\r\n AthenaFromOptions,\r\n RpcQueryBuilder,\n RpcOrderOptions,\n AthenaCreateClientAuthOptions,\n AthenaCreateClientConfig,\n AthenaCreateClientConfigWithStorage,\n AthenaCreateClientConfigWithStorageAndTypecheckedColumns,\n AthenaCreateClientConfigWithTypecheckedColumns,\n AthenaCreateClientOptions,\n AthenaClientContextOptions,\n AthenaClientFromEnvironmentOptions,\n AthenaClientFromEnvironmentOptionsWithStorage,\n AthenaClientFromEnvironmentOptionsWithStorageAndTypecheckedColumns,\n AthenaClientFromEnvironmentOptionsWithTypecheckedColumns,\n AthenaClientSessionLike,\n AthenaClientSessionOptions,\n AthenaHeaderBag,\n AthenaClientOverrideOptions,\n AthenaCreateClientServiceUrlConfig,\n AthenaCreateClientOptionsWithTypecheckedColumns,\n AthenaSdkClient,\r\n AthenaSdkClientWithAuth,\r\n AthenaSdkClientWithStorage,\r\n TableQueryBuilder,\r\n AthenaResult,\r\n AthenaCreateClientOptionsWithStorage,\r\n AthenaCreateClientOptionsWithStorageAndTypecheckedColumns,\r\n} from './client.js'\r\nexport type {\r\n AthenaDeleteDebugAst,\r\n AthenaFindManyDebugAst,\r\n AthenaInsertDebugAst,\r\n AthenaQueryDebugAst,\r\n AthenaRawQueryDebugAst,\r\n AthenaRpcBuilderStateAst,\r\n AthenaRpcDebugAst,\r\n AthenaSelectDebugAst,\r\n AthenaSelectDebugTransport,\r\n AthenaTableBuilderStateAst,\r\n AthenaUpdateDebugAst,\r\n AthenaUpsertDebugAst,\r\n} from './query-debug-ast.ts'\r\nexport type { AthenaDbModule } from './db/module.js'\r\nexport type {\r\n AthenaEnvelope,\r\n AthenaStorageBinaryCallOptions,\r\n AthenaStorageCallOptions,\r\n AthenaStorageClientConfig,\r\n AthenaStorageErrorDetails,\r\n AthenaStorageErrorHandler,\r\n AthenaStorageErrorInput,\r\n AthenaStorageModule,\r\n CreateStorageCatalogRequest,\r\n CreateStorageUploadUrlRequest,\r\n CreateStorageUploadUrlsRequest,\r\n DeleteStorageFolderRequest,\r\n GetStorageFileUrlQuery,\r\n ListStorageFilesRequest,\r\n ManagedFileRecord,\r\n MoveStorageFolderRequest,\r\n PresignedFileUrlResponse,\r\n S3CatalogItem,\r\n S3CredentialListItem,\r\n SetStorageFileVisibilityRequest,\r\n StorageFileAccessPurpose,\r\n StorageBatchUploadUrlResponse,\r\n StorageFileMutationResponse,\r\n StorageFolderMutationResponse,\r\n StorageListFilesResponse,\r\n StorageUploadUrlResponse,\r\n UpdateStorageCatalogRequest,\n UpdateStorageFileRequest,\n} from './storage/module.js'\nexport type * from './storage/module.js'\nexport type {\n AthenaStorageEnv,\r\n AthenaStorageFileConfig,\r\n AthenaStorageFileDeleteInput,\r\n AthenaStorageFileDownloadInput,\r\n AthenaStorageFileListInput,\r\n AthenaStorageFileModule,\r\n AthenaStorageFileUploadInput,\r\n AthenaStorageFileUploadResult,\r\n AthenaStoragePathContext,\r\n AthenaStoragePrefixPath,\r\n AthenaStorageTemplateValue,\r\n AthenaStorageTemplateVars,\r\n AthenaStorageUploadedFile,\r\n AthenaStorageUploadConstraints,\r\n AthenaStorageUploadProgress,\r\n AthenaStorageUploadProgressHandler,\r\n AthenaStorageUploadSource,\r\n} from './storage/file.js'\r\nexport type {\r\n AthenaErrorInput,\r\n AthenaOperationContext,\r\n NormalizedAthenaError,\r\n UnwrapOptions,\r\n UnwrapOneOptions,\r\n RequireAffectedOptions,\r\n IntCoercionOptions,\r\n RetryConfig,\r\n RetryBackoffStrategy,\r\n} from './auxiliaries.js'\r\nexport type {\r\n AthenaModelTarget,\r\n AnyColumnBuilder,\r\n AthenaColumnBuilder,\r\n AthenaTableDef,\r\n AthenaTableSchemaBundle,\r\n ColumnRuntimeConfig,\r\n DatabaseDef,\r\n FormValuesOf,\r\n FormValuesFromColumns,\r\n InsertOf,\r\n InsertFromColumns,\r\n IntrospectionColumn,\r\n IntrospectionInspectOptions,\r\n IntrospectionRelation,\r\n IntrospectionSchema,\r\n IntrospectionSnapshot,\r\n IntrospectionTable,\r\n IntrospectionTypeKind,\r\n ModelColumnKind,\r\n ModelColumnMetadata,\r\n ModelAt,\r\n ModelDef,\r\n ModelMetadata,\r\n ModelRelationKind,\r\n ModelRelationMetadata,\r\n PostgresIntrospectionProviderOptions,\r\n RegistryDef,\r\n RowFromColumns,\r\n RowOf,\r\n SchemaDef,\r\n SchemaIntrospectionProvider,\r\n ModelFormAdapter,\r\n ModelFormDefaults,\r\n ModelFormNullishMode,\r\n ModelFormValues,\r\n TenantContext,\r\n TenantContextValue,\r\n TenantKeyMap,\r\n ToModelFormDefaultsOptions,\r\n ToModelPayloadOptions,\r\n TypedAthenaClient,\r\n TypedClientOptions,\r\n TypedClientOptionsWithTypecheckedColumns,\r\n UpdateFromColumns,\r\n UpdateOf,\r\n} from './schema/index.ts'\r\nexport type {\r\n AthenaGeneratorConfig,\r\n GeneratedArtifact,\n GeneratedArtifacts,\n GeneratorArtifactKind,\n GeneratorExperimentalFlags,\n GeneratorFilterConfig,\n GeneratorFeatureFlags,\n GeneratorInternalConfig,\n GeneratorNamingConfig,\n GeneratorOutputConfig,\n GeneratorOutputFormat,\n GeneratorOutputPreset,\n GeneratorOutputTargets,\n GeneratorProviderConfig,\n GeneratorSchemaSelection,\n GeneratorTableSelection,\n LoadGeneratorConfigOptions,\n LoadedGeneratorConfig,\n NamingStyle,\n NormalizedGeneratorFilterConfig,\n NormalizedGeneratorOutputConfig,\n NormalizedAthenaGeneratorConfig,\n RunGeneratorOptions,\n RunGeneratorResult,\n SkippedGeneratedArtifact,\n SkippedGeneratedArtifactReason,\n} from './generator/index.ts'\nexport type {\r\n AthenaAuthQueryPrimitive,\r\n AthenaAuthQueryValue,\r\n AthenaAuthCredentials,\r\n AthenaAuthCallOptions,\n AthenaAuthClientConfig,\n AthenaAuthGetUserResponse,\n AthenaAuthEndpointPath,\n AthenaAuthErrorCode,\r\n AthenaAuthErrorDetails,\r\n AthenaAuthRequestInput,\r\n AthenaAuthMethod,\r\n AthenaAuthResult,\r\n AthenaAuthBindings,\r\n AthenaAuthStatusResponse,\r\n AthenaAuthRevokeSessionRequest,\r\n AthenaAuthSessionRevokeBinding,\r\n AthenaAuthAdminUserSessionRevokeBinding,\r\n AthenaAuthResetPasswordBinding,\r\n AthenaAuthGenericInput,\r\n AthenaAuthGenericQueryInput,\r\n AthenaAuthSdkClient,\r\n AthenaAuthSocialRedirectResponse,\r\n AthenaAuthEmailChangeResponse,\r\n AthenaAuthLinkedAccount,\r\n AthenaAuthOrganization,\r\n AthenaAuthOrganizationMember,\r\n AthenaAuthOrganizationInvitation,\r\n AthenaAuthOrganizationBindings,\r\n AthenaOAuthTokenBundle,\r\n AthenaOAuthAccountTokenRequest,\r\n AthenaForgetPasswordRequest,\r\n AthenaResetPasswordRequest,\r\n AthenaVerifyEmailRequest,\r\n AthenaSendVerificationEmailRequest,\r\n AthenaChangeEmailRequest,\r\n AthenaChangePasswordRequest,\r\n AthenaUpdateUserRequest,\r\n AthenaDeleteUserRequest,\r\n AthenaDeleteUserCallbackRequest,\r\n AthenaDeleteUserResponse,\r\n AthenaAuthReactEmailProps,\r\n AthenaAuthReactEmailComponent,\r\n AthenaAuthReactEmailRenderInput,\r\n AthenaAuthReactEmailRenderOptions,\r\n AthenaAuthReactEmailConfig,\r\n AthenaAuthReactEmailEventPhase,\n AthenaAuthReactEmailRenderEvent,\n AthenaAuthEmailTemplateDefinition,\n AthenaAuthEmailTemplateReactOverrides,\n AthenaAuthEmailTemplateCreateFromDefinitionInput,\n AthenaAuthEmailTemplateUpdateFromDefinitionInput,\n AthenaAuthEmailTemplateBuilder,\n AthenaAdminEmailListQuery,\n AthenaAdminEmailListResponse,\n AthenaAdminEmailGetQuery,\n AthenaAdminEmailGetResponse,\n AthenaAdminEmailCreateRequest,\n AthenaAdminEmailUpdateRequest,\n AthenaAdminEmailUpdateResponse,\n AthenaAdminEmailDeleteRequest,\n AthenaAdminEmailFailureListQuery,\n AthenaAdminEmailFailureListResponse,\n AthenaAdminEmailFailureGetQuery,\n AthenaAdminEmailFailureGetResponse,\n AthenaAdminEmailFailureCreateRequest,\n AthenaAdminEmailFailureUpdateRequest,\n AthenaAdminEmailFailureUpdateResponse,\n AthenaAdminEmailFailureDeleteRequest,\n AthenaAdminEmailTemplateListQuery,\n AthenaAdminEmailTemplateListResponse,\n AthenaAdminEmailTemplateCreateRequest,\n AthenaAdminEmailTemplateUpdateRequest,\n AthenaAdminEmailTemplateDeleteRequest,\n AthenaAdminEmailTemplateGetQuery,\n AthenaAdminEmailTemplateGetResponse,\n AthenaLinkSocialRequest,\n AthenaUnlinkAccountRequest,\n AthenaAuthSession,\n AthenaAuthSessionResponse,\n AthenaSocialSignInRequest,\n AthenaUsernameSignInRequest,\n AthenaAuthSignInResponse,\n AthenaAuthSignOutResponse,\n AthenaAuthUser,\n AthenaEmailSignInRequest,\n AthenaEmailSignUpRequest,\n AthenaAuthAdminLimits,\n} from './auth/index.ts'\nexport type {\r\n AthenaJsonPrimitive,\r\n AthenaJsonValue,\r\n AthenaJsonObject,\r\n AthenaJsonArray,\r\n AthenaConditionCastType,\r\n AthenaRpcCallOptions,\r\n AthenaRpcFilter,\r\n AthenaRpcFilterOperator,\r\n AthenaRpcOrder,\r\n AthenaRpcPayload,\r\n AthenaGatewayErrorCode,\r\n AthenaGatewayErrorDetails,\r\n AthenaGatewayConnectionOptions,\r\n AthenaGatewayConnectionResult,\r\n BackendType,\r\n BackendConfig,\r\n AthenaGatewayCallOptions,\r\n} from './gateway/types.js'\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/gateway/errors.ts","../src/gateway/url.ts","../src/cookies/base64.ts","../src/cookies/cookie-utils.ts","../src/cookies/crypto.ts","../src/cookies/session-store.ts","../src/cookies/index.ts","../package.json","../src/sdk-version.ts","../src/gateway/client.ts","../src/sql-identifiers.ts","../src/auth/limits.ts","../src/auth/react-email.ts","../src/auth/client.ts","../src/utils/parse-boolean-flag.ts","../src/auxiliaries.ts","../src/db/module.ts","../src/storage/file.ts","../src/storage/module.ts","../src/chat/module.ts","../src/client-builder.ts","../src/query-ast.ts","../src/gateway/structured-select.ts","../src/query-transport.ts","../src/query-debug-ast.ts","../src/query-tracing.ts","../src/schema/model-target.ts","../src/client.ts","../src/gateway/types.ts","../src/schema/definitions.ts","../src/schema/model-form.ts","../src/schema/table-columns.ts","../src/schema/table-schemas.ts","../src/schema/table-builder.ts","../src/schema/typed-client.ts","../src/generator/schema-selection.ts","../src/generator/table-selection.ts","../src/generator/env.ts","../src/generator/postgres-type-mapping.ts","../src/auth/server.ts","../src/browser.ts"],"names":["request","identifier","aliasIdentifier","baseIdentifier","isRecord","SDK_NAME","SDK_HEADER_VALUE","NO_CACHE_HEADER_VALUE","normalizeHeaderValue","isCacheControlHeaderName","parseResponseBody","resolveRequestId","resolveErrorMessage","buildHeaders","token","sessions","parseBooleanFlag","message","table","kind","resolveErrorHint","callAthena","firstNonEmptyString","resolveStructuredErrorPayload","stringifyFilterValue","filterMethods","z","createTableBuilder","normalizeOptionalString","readHeaderBagValue","resolveSessionContextOptions","isDynamicBaseURLConfig"],"mappings":";;;;;AAuBO,IAAM,kBAAA,GAAN,MAAM,mBAAA,SAA2B,KAAA,CAAM;AAAA,EACnC,IAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA;AAAA,EACA,WAAA;AAAA,EAET,YAAY,KAAA,EAAgC;AAC1C,IAAA,KAAA,CAAM,MAAM,OAAO,CAAA;AACnB,IAAA,IAAA,CAAK,IAAA,GAAO,oBAAA;AACZ,IAAA,IAAA,CAAK,OAAO,KAAA,CAAM,IAAA;AAClB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAM,MAAA,IAAU,CAAA;AAC9B,IAAA,IAAA,CAAK,WAAW,KAAA,CAAM,QAAA;AACtB,IAAA,IAAA,CAAK,SAAS,KAAA,CAAM,MAAA;AACpB,IAAA,IAAA,CAAK,YAAY,KAAA,CAAM,SAAA;AACvB,IAAA,IAAA,CAAK,OAAO,KAAA,CAAM,IAAA;AAClB,IAAA,IAAA,CAAK,cAAc,KAAA,CAAM,KAAA;AAAA,EAC3B;AAAA,EAEA,SAAA,GAAuC;AACrC,IAAA,OAAO;AAAA,MACL,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,OAAO,IAAA,CAAK;AAAA,KACd;AAAA,EACF;AAAA,EAEA,OAAO,YAAA,CACL,QAAA,EACA,QAAA,EACA;AACA,IAAA,MAAM,UAAU,QAAA,CAAS,YAAA;AACzB,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,OAAO,IAAI,mBAAA,CAAmB;AAAA,QAC5B,MAAM,OAAA,CAAQ,IAAA;AAAA,QACd,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,QAAA,EAAU,OAAA,CAAQ,QAAA,IAAY,QAAA,CAAS,QAAA;AAAA,QACvC,MAAA,EAAQ,OAAA,CAAQ,MAAA,IAAU,QAAA,CAAS,MAAA;AAAA,QACnC,SAAA,EAAW,OAAA,CAAQ,SAAA,IAAa,QAAA,CAAS,SAAA;AAAA,QACzC,MAAM,OAAA,CAAQ,IAAA;AAAA,QACd,OAAO,OAAA,CAAQ;AAAA,OAChB,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,IAAI,mBAAA,CAAmB;AAAA,MAC5B,IAAA,EAAM,YAAA;AAAA,MACN,OAAA,EAAS,SAAS,KAAA,IAAS,wBAAA;AAAA,MAC3B,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,UAAU,QAAA,CAAS,QAAA;AAAA,MACnB,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,WAAW,QAAA,CAAS;AAAA,KACrB,CAAA;AAAA,EACH;AACF;AAEO,SAAS,qBAAqB,KAAA,EAA6C;AAChF,EAAA,OAAO,KAAA,YAAiB,kBAAA;AAC1B;;;ACtFO,IAAM,uBAAA,GAA0B,uBAAA;AAEvC,SAAS,sBAAsB,KAAA,EAAwB;AACrD,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,WAAA;AAChC,EAAA,IAAI,KAAA,KAAU,MAAM,OAAO,MAAA;AAC3B,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,KAAA,CAAM,MAAK,CAAE,MAAA,GAAS,IAAI,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,GAAI,iBAAA;AAAA,EAC3D;AACA,EAAA,OAAO,GAAG,OAAO,KAAK,IAAI,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA,CAAA;AACjD;AAEA,SAAS,mBAAA,CAAoB,SAAiB,IAAA,EAAkC;AAC9E,EAAA,OAAO,IAAI,kBAAA,CAAmB;AAAA,IAC5B,IAAA,EAAM,aAAA;AAAA,IACN,OAAA;AAAA,IACA,MAAA,EAAQ,CAAA;AAAA,IACR;AAAA,GACD,CAAA;AACH;AAOO,SAAS,6BAAA,CACd,KAAA,EACA,OAAA,GAAgD,EAAC,EACzC;AACR,EAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,IAAS,yBAAA;AAC/B,EAAA,MAAM,SAAA,GAAY,SAAS,OAAA,CAAQ,cAAA;AAEnC,EAAA,IAAI,SAAA,KAAc,MAAA,IAAa,SAAA,KAAc,IAAA,EAAM;AACjD,IAAA,MAAM,mBAAA;AAAA,MACJ,CAAA,EAAG,KAAK,CAAA,oDAAA,EAAuD,qBAAA,CAAsB,KAAK,CAAC,CAAA,CAAA,CAAA;AAAA,MAC3F;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAU,UAAU,IAAA,EAAK;AAC/B,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,mBAAA;AAAA,MACJ,CAAA,EAAG,KAAK,CAAA,oDAAA,EAAuD,qBAAA,CAAsB,SAAS,CAAC,CAAA,CAAA,CAAA;AAAA,MAC/F;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,IAAI,IAAI,OAAO,CAAA;AAAA,EAC1B,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,mBAAA;AAAA,MACJ,CAAA,EAAG,KAAK,CAAA,gDAAA,EAAmD,qBAAA,CAAsB,SAAS,CAAC,CAAA,CAAA,CAAA;AAAA,MAC3F;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,MAAA,CAAO,QAAA,KAAa,OAAA,IAAW,MAAA,CAAO,aAAa,QAAA,EAAU;AAC/D,IAAA,MAAM,mBAAA;AAAA,MACJ,GAAG,KAAK,CAAA,kCAAA,EAAqC,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAA,CAAA,CAAA;AAAA,MACpE;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,MAAA,CAAO,MAAA,IAAU,MAAA,CAAO,IAAA,EAAM;AAChC,IAAA,MAAM,mBAAA;AAAA,MACJ,GAAG,KAAK,CAAA,+DAAA,EAAkE,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAA,CAAA,CAAA;AAAA,MACjG;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO,MAAA,CAAO,QAAA,EAAS,CAAE,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAC7C;AAEO,SAAS,qBAAA,CAAsB,SAAiB,IAAA,EAAsB;AAC3E,EAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AACzB,IAAA,MAAM,mBAAA;AAAA,MACJ,CAAA,kDAAA,EAAqD,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,MACzE;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO,CAAA,EAAG,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA;AAC1B;;;ACrFA,SAAS,OAAA,GAAmD;AAC1D,EAAA,MAAM,YAAa,UAAA,CAAkC,IAAA;AACrD,EAAA,OAAO,OAAO,SAAA,KAAc,UAAA,GAAc,SAAA,GAA0C,MAAA;AACtF;AAEA,SAAS,OAAA,GAAmD;AAC1D,EAAA,MAAM,YAAa,UAAA,CAAkC,IAAA;AACrD,EAAA,OAAO,OAAO,SAAA,KAAc,UAAA,GAAc,SAAA,GAA0C,MAAA;AACtF;AAEA,SAAS,oBAAoB,KAAA,EAA2B;AACtD,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAA,IAAU,MAAA,CAAO,aAAa,IAAI,CAAA;AAAA,EACpC;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,oBAAoB,MAAA,EAA4B;AACvD,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,MAAA,CAAO,MAAM,CAAA;AAC1C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,IAAA,KAAA,CAAM,CAAC,CAAA,GAAI,MAAA,CAAO,UAAA,CAAW,CAAC,CAAA;AAAA,EAChC;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,aAAa,KAAA,EAA2B;AAC/C,EAAA,MAAM,SAAS,OAAA,EAAQ;AACvB,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,OAAO,MAAA,CAAO,mBAAA,CAAoB,KAAK,CAAC,CAAA;AAAA,EAC1C;AACA,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,SAAS,QAAQ,CAAA;AAC7C;AAEA,SAAS,aAAa,MAAA,EAA4B;AAChD,EAAA,MAAM,SAAS,OAAA,EAAQ;AACvB,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,OAAO,mBAAA,CAAoB,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,EAC3C;AACA,EAAA,OAAO,IAAI,UAAA,CAAW,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,QAAQ,CAAC,CAAA;AACrD;AAEO,SAAS,uBAAuB,KAAA,EAA2B;AAChE,EAAA,OAAO,YAAA,CAAa,KAAK,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA,CAAE,OAAA,CAAQ,QAAQ,EAAE,CAAA;AACvF;AAEO,SAAS,wBAAwB,KAAA,EAAuB;AAC7D,EAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,EAAY,CAAE,OAAO,KAAK,CAAA;AAC5C,EAAA,OAAO,uBAAuB,KAAK,CAAA;AACrC;AAEO,SAAS,uBAAuB,KAAA,EAA2B;AAChE,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA,CAAE,OAAA,CAAQ,MAAM,GAAG,CAAA;AAC7D,EAAA,MAAM,aAAA,GAAgB,WAAW,MAAA,GAAS,CAAA;AAC1C,EAAA,MAAM,MAAA,GAAS,aAAA,KAAkB,CAAA,GAAI,UAAA,GAAa,CAAA,EAAG,UAAU,CAAA,EAAG,GAAA,CAAI,MAAA,CAAO,CAAA,GAAI,aAAa,CAAC,CAAA,CAAA;AAC/F,EAAA,OAAO,aAAa,MAAM,CAAA;AAC5B;AAEO,SAAS,wBAAwB,KAAA,EAAuB;AAC7D,EAAA,OAAO,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,sBAAA,CAAuB,KAAK,CAAC,CAAA;AAC/D;;;AClCO,IAAM,oBAAA,GAAuB,WAAA;AAmJ7B,SAAS,aAAa,YAAA,EAA2C;AACtE,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,KAAA,CAAM,IAAI,CAAA;AACvC,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAoB;AAC1C,EAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,MAAA,KAAW;AAC1B,IAAA,MAAM,CAAC,IAAA,EAAM,KAAK,CAAA,GAAI,MAAA,CAAO,MAAM,QAAQ,CAAA;AAC3C,IAAA,SAAA,CAAU,GAAA,CAAI,MAAgB,KAAe,CAAA;AAAA,EAC/C,CAAC,CAAA;AACD,EAAA,OAAO,SAAA;AACT;;;ACjLA,IAAM,SAAA,GAAY,OAAA;AAiBlB,eAAe,eAAA,GAA6C;AAC1D,EAAA,MAAM,eAAgB,UAAA,CAA0C,MAAA;AAChE,EAAA,IAAI,cAAc,MAAA,EAAQ;AACxB,IAAA,OAAO,YAAA,CAAa,MAAA;AAAA,EACtB;AACA,EAAA,MAAM,EAAE,SAAA,EAAU,GAAI,MAAM,OAAO,QAAa,CAAA;AAChD,EAAA,MAAM,SAAU,SAAA,CAAuC,MAAA;AACvD,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAAA,EACzD;AACA,EAAA,OAAO,MAAA;AACT;AAEA,eAAe,aAAA,CAAc,QAAgB,KAAA,EAA4C;AACvF,EAAA,MAAM,MAAA,GAAS,MAAM,eAAA,EAAgB;AACrC,EAAA,OAAO,MAAA,CAAO,SAAA;AAAA,IACZ,KAAA;AAAA,IACA,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,MAAM,CAAA;AAAA,IAC/B;AAAA,MACE,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM;AAAA,KACR;AAAA,IACA,KAAA;AAAA,IACA,CAAC,KAAK;AAAA,GACR;AACF;AAEA,SAAS,cAAc,MAAA,EAAiC;AACtD,EAAA,OAAO,IAAI,WAAW,MAAM,CAAA;AAC9B;AAEA,SAAS,gBAAgB,cAAA,EAA2C;AAClE,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,wBAAwB,cAAc,CAAA;AACtD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAClC,IAAA,IAAI,CAAC,OAAA,IAAW,OAAO,OAAA,KAAY,QAAA,EAAU;AAC3C,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,OAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEA,SAAS,aAAa,OAAA,EAA8B;AAClD,EAAA,MAAM,MAAM,OAAA,CAAQ,GAAA;AACpB,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAM,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAC3C;AAEA,eAAsB,iBAAA,CAAkB,QAAgB,KAAA,EAAgC;AACtF,EAAA,MAAM,MAAA,GAAS,MAAM,eAAA,EAAgB;AACrC,EAAA,MAAM,GAAA,GAAM,MAAM,aAAA,CAAc,MAAA,EAAQ,MAAM,CAAA;AAC9C,EAAA,MAAM,SAAA,GAAY,MAAM,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,GAAA,EAAK,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,KAAK,CAAC,CAAA;AAChF,EAAA,OAAO,sBAAA,CAAuB,aAAA,CAAc,SAAS,CAAC,CAAA;AACxD;AAEA,eAAsB,YAAA,CACpB,OAAA,EACA,MAAA,EACA,SAAA,GAAY,KAAK,CAAA,EACA;AACjB,EAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AACxC,EAAA,MAAM,MAAA,GAAS,EAAE,GAAA,EAAK,SAAA,EAAW,KAAK,KAAA,EAAM;AAC5C,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,GAAG,OAAA;AAAA,IACH,GAAA,EAAK,GAAA;AAAA,IACL,KAAK,GAAA,GAAM;AAAA,GACb;AACA,EAAA,MAAM,UAAA,GAAa,uBAAA,CAAwB,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AACjE,EAAA,MAAM,WAAA,GAAc,uBAAA,CAAwB,IAAA,CAAK,SAAA,CAAU,WAAW,CAAC,CAAA;AACvE,EAAA,MAAM,OAAA,GAAU,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA;AAC5C,EAAA,MAAM,SAAA,GAAY,MAAM,iBAAA,CAAkB,MAAA,EAAQ,OAAO,CAAA;AACzD,EAAA,OAAO,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA;AAChC;AAEA,eAAsB,cAAA,CACpB,OACA,MAAA,EAC0B;AAC1B,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA;AAC7B,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,CAAC,UAAA,EAAY,WAAA,EAAa,aAAa,CAAA,GAAI,KAAA;AACjD,EAAA,IAAI,CAAC,UAAA,IAAc,CAAC,WAAA,IAAe,CAAC,aAAA,EAAe;AACjD,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,MAAA,GAAkC,IAAA;AACtC,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,uBAAA,CAAwB,UAAU,CAAC,CAAA;AAAA,EACzD,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,GAAA,KAAQ,SAAA,EAAW;AACvC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAA,GAAU,gBAAgB,WAAW,CAAA;AAC3C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,iBAAA,GAAoB,MAAM,iBAAA,CAAkB,MAAA,EAAQ,GAAG,UAAU,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,CAAA;AACxF,EAAA,IAAI,sBAAsB,aAAA,EAAe;AACvC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,YAAA,CAAa,OAAO,CAAA,EAAG;AACzB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,OAAA;AACT;;;ACvIA,IAAM,mBAAA,GAAsB,IAAA;AAC5B,IAAM,2BAAA,GAA8B,GAAA;AACpC,IAAM,aAAa,mBAAA,GAAsB,2BAAA;AAUzC,SAAS,cAAc,UAAA,EAA4B;AACjD,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,KAAA,CAAM,GAAG,CAAA;AAClC,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACvC,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,QAAA,IAAY,GAAA,EAAK,EAAE,CAAA;AAC1C,EAAA,OAAO,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,GAAI,CAAA,GAAI,KAAA;AACnC;AAEA,SAAS,kBAAA,CAAmB,YAAoB,GAAA,EAAyC;AACvF,EAAA,MAAM,SAAiB,EAAC;AACxB,EAAA,MAAM,UAAU,YAAA,CAAa,GAAA,CAAI,SAAS,GAAA,CAAI,QAAQ,KAAK,EAAE,CAAA;AAC7D,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,OAAA,EAAS;AACnC,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,UAAU,CAAA,EAAG;AAC/B,MAAA,MAAA,CAAO,IAAI,CAAA,GAAI,KAAA;AAAA,IACjB;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,WAAW,MAAA,EAAwB;AAC1C,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,IAAA,CAAK,MAAM,EAAE,IAAA,CAAK,CAAC,IAAA,EAAM,KAAA,KAAU,aAAA,CAAc,IAAI,CAAA,GAAI,aAAA,CAAc,KAAK,CAAC,CAAA;AACvG,EAAA,OAAO,UAAA,CAAW,IAAI,CAAC,GAAA,KAAQ,OAAO,GAAG,CAAC,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA;AACrD;AAEA,SAAS,WAAA,CAAY,SAAA,EAAmB,MAAA,EAAqB,MAAA,EAAgB,GAAA,EAAgD;AAC3H,EAAA,MAAM,aAAa,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,SAAS,UAAU,CAAA;AAC7D,EAAA,IAAI,eAAe,CAAA,EAAG;AACpB,IAAA,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,GAAI,MAAA,CAAO,KAAA;AAC7B,IAAA,OAAO,CAAC,MAAM,CAAA;AAAA,EAChB;AAEA,EAAA,MAAM,UAAyB,EAAC;AAChC,EAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,UAAA,EAAY,KAAA,EAAA,EAAS;AAC/C,IAAA,MAAM,IAAA,GAAO,CAAA,EAAG,MAAA,CAAO,IAAI,IAAI,KAAK,CAAA,CAAA;AACpC,IAAA,MAAM,QAAQ,KAAA,GAAQ,UAAA;AACtB,IAAA,MAAM,QAAQ,MAAA,CAAO,KAAA,CAAM,SAAA,CAAU,KAAA,EAAO,QAAQ,UAAU,CAAA;AAC9D,IAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,MACX,GAAG,MAAA;AAAA,MACH,IAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,MAAA,CAAO,IAAI,CAAA,GAAI,KAAA;AAAA,EACjB;AAEA,EAAA,GAAA,CAAI,QAAQ,KAAA,GAAQ,CAAA,SAAA,EAAY,SAAA,CAAU,WAAA,EAAa,CAAA,OAAA,CAAA,EAAW;AAAA,IAChE,OAAA,EAAS,CAAA,EAAG,SAAS,CAAA,wBAAA,EAA2B,mBAAmB,CAAA,OAAA,CAAA;AAAA,IACnE,eAAA,EAAiB,2BAAA;AAAA,IACjB,SAAA,EAAW,OAAO,KAAA,CAAM,MAAA;AAAA,IACxB,UAAA;AAAA,IACA,MAAA,EAAQ,QAAQ,GAAA,CAAI,CAAC,UAAU,KAAA,CAAM,KAAA,CAAM,SAAS,2BAA2B;AAAA,GAChF,CAAA;AAED,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,eAAA,CAAgB,QAAgB,aAAA,EAAiE;AACxG,EAAA,MAAM,gBAA6C,EAAC;AACpD,EAAA,KAAA,MAAW,QAAQ,MAAA,EAAQ;AACzB,IAAA,aAAA,CAAc,IAAI,CAAA,GAAI;AAAA,MACpB,IAAA;AAAA,MACA,KAAA,EAAO,EAAA;AAAA,MACP,UAAA,EAAY;AAAA,QACV,GAAG,aAAA;AAAA,QACH,MAAA,EAAQ;AAAA;AACV,KACF;AAAA,EACF;AACA,EAAA,OAAO,aAAA;AACT;AAEA,IAAM,eACJ,CAAC,SAAA,KACD,CAAC,UAAA,EAAoB,eAAoC,GAAA,KAAoC;AAC3F,EAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,UAAA,EAAY,GAAG,CAAA;AAEjD,EAAA,OAAO;AAAA,IACL,QAAA,GAAmB;AACjB,MAAA,OAAO,WAAW,MAAM,CAAA;AAAA,IAC1B,CAAA;AAAA,IACA,SAAA,GAAqB;AACnB,MAAA,OAAO,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,MAAA,GAAS,CAAA;AAAA,IACtC,CAAA;AAAA,IACA,KAAA,CAAM,OAAe,OAAA,EAAuD;AAC1E,MAAA,MAAM,aAAA,GAAgB,eAAA,CAAgB,MAAA,EAAQ,aAAa,CAAA;AAC3D,MAAA,KAAA,MAAW,QAAQ,MAAA,EAAQ;AACzB,QAAA,OAAO,OAAO,IAAI,CAAA;AAAA,MACpB;AAEA,MAAA,MAAM,OAAA,GAAuC,aAAA;AAC7C,MAAA,MAAM,OAAA,GAAU,WAAA;AAAA,QACd,SAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAM,UAAA;AAAA,UACN,KAAA;AAAA,UACA,UAAA,EAAY;AAAA,YACV,GAAG,aAAA;AAAA,YACH,GAAG;AAAA;AACL,SACF;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,QAAA,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,GAAI,KAAA;AAAA,MACxB;AACA,MAAA,OAAO,MAAA,CAAO,OAAO,OAAO,CAAA;AAAA,IAC9B,CAAA;AAAA,IACA,KAAA,GAAuB;AACrB,MAAA,MAAM,aAAA,GAAgB,eAAA,CAAgB,MAAA,EAAQ,aAAa,CAAA;AAC3D,MAAA,KAAA,MAAW,QAAQ,MAAA,EAAQ;AACzB,QAAA,OAAO,OAAO,IAAI,CAAA;AAAA,MACpB;AACA,MAAA,OAAO,MAAA,CAAO,OAAO,aAAa,CAAA;AAAA,IACpC,CAAA;AAAA,IACA,WAAW,OAAA,EAA8B;AACvC,MAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,QAAA,GAAA,CAAI,UAAU,MAAA,CAAO,IAAA,EAAM,MAAA,CAAO,KAAA,EAAO,OAAO,UAAU,CAAA;AAAA,MAC5D;AAAA,IACF;AAAA,GACF;AACF,CAAA;AAEK,IAAM,kBAAA,GAAqB,aAAa,SAAS,CAAA;AACjD,IAAM,kBAAA,GAAqB,aAAa,SAAS,CAAA;;;ACjHxD,IAAM,qBAAA,GAAwB,aAAA;AAC9B,IAAM,oBAAA,GAAuB,aAAA;AAC7B,IAAM,uBAAA,GAA0B,CAAA,GAAI,EAAA,GAAK,EAAA,GAAK,EAAA;AAC9C,IAAM,wBAAwB,EAAA,GAAK,CAAA;AAEnC,SAAS,mBAAA,GAA+B;AACtC,EAAA,OAAO,OAAO,OAAA,KAAY,WAAA,IAAe,OAAA,CAAQ,KAAK,QAAA,KAAa,YAAA;AACrE;AAEA,SAAS,oBAAA,GAA2C;AAClD,EAAA,IAAI,OAAO,YAAY,WAAA,EAAa;AAClC,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,QAAQ,GAAA,EAAK,kBAAA,IAAsB,QAAQ,GAAA,EAAK,kBAAA,IAAsB,QAAQ,GAAA,EAAK,WAAA;AAC5F;AAEA,SAAS,uBAAuB,OAAA,EAAmD;AACjF,EAAA,OACE,OAAO,OAAA,KAAY,QAAA,IACnB,OAAA,KAAY,IAAA,IACZ,kBAAkB,OAAA,IAClB,KAAA,CAAM,OAAA,CAAS,OAAA,CAAuC,YAAY,CAAA;AAEtE;AAEA,SAAS,sBAAsB,aAAA,EAAiC;AAC9D,EAAA,MAAM,QAAA,GAAW,CAAC,aAAa,CAAA;AAC/B,EAAA,IAAI,CAAC,QAAA,CAAS,QAAA,CAAS,qBAAqB,CAAA,EAAG;AAC7C,IAAA,QAAA,CAAS,KAAK,qBAAqB,CAAA;AAAA,EACrC;AACA,EAAA,IAAI,CAAC,QAAA,CAAS,QAAA,CAAS,oBAAoB,CAAA,EAAG;AAC5C,IAAA,QAAA,CAAS,KAAK,oBAAoB,CAAA;AAAA,EACpC;AACA,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,YAAY,OAAA,EAAwB;AAC3C,EAAA,OAAO,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAgC,OAAO,CAAA,CAAE,CAAA;AAC5D;AAEA,SAAS,iBAAiB,MAAA,EAAyB;AACjD,EAAA,MAAM,QAAA,GAAW,UAAU,oBAAA,EAAqB;AAChD,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,MAAM,WAAA;AAAA,MACJ;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,SAAS,KAAA,EAAgD;AAChE,EAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,EAAU;AACvC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,wBAAwB,OAAA,EAAoC;AACnE,EAAA,MAAM,KAAA,GAAQ,QAAQ,OAAA,EAAS,KAAA;AAC/B,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,WAAW,CAAA,EAAG;AACnD,IAAA,MAAM,YAAY,6EAA6E,CAAA;AAAA,EACjG;AACA,EAAA,OAAO,KAAA;AACT;AAEA,eAAe,oBAAA,CACb,aAAA,EACA,OAAA,EACA,IAAA,EACiB;AACjB,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,kBAAkB,QAAA,EAAU;AACrC,IAAA,OAAO,aAAA;AAAA,EACT;AACA,EAAA,OAAO,aAAA,CAAc,SAAS,IAAI,CAAA;AACpC;AAEA,SAAS,yBAAA,CAA0B,YAAA,EAAsB,UAAA,EAAoB,QAAA,EAA2B;AACtG,EAAA,OAAO,QAAA,GAAW,CAAA,EAAG,oBAAoB,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA,GAAK,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA;AAC1G;AAEA,eAAe,cAAA,CACb,GAAA,EACA,IAAA,EACA,KAAA,EACA,UAAA,EACe;AACf,EAAA,MAAM,MAAA,GAAS,IAAI,OAAA,CAAQ,MAAA;AAC3B,EAAA,IAAI,MAAA,IAAU,OAAO,GAAA,CAAI,eAAA,KAAoB,UAAA,EAAY;AACvD,IAAA,MAAM,GAAA,CAAI,eAAA,CAAgB,IAAA,EAAM,KAAA,EAAO,QAAQ,UAAU,CAAA;AACzD,IAAA;AAAA,EACF;AACA,EAAA,GAAA,CAAI,SAAA,CAAU,IAAA,EAAM,KAAA,EAAO,UAAU,CAAA;AACvC;AAEA,SAAS,gBAAmB,KAAA,EAAyB;AACnD,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,EACzB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEA,SAAS,kBAAkB,MAAA,EAAqD;AAC9E,EAAA,IAAI,MAAA,EAAQ,aAAa,MAAA,EAAW;AAClC,IAAA,OAAO,MAAA,CAAO,QAAA;AAAA,EAChB;AACA,EAAA,OAAO,mBAAA,EAAoB;AAC7B;AAEO,SAAS,mBAAmB,OAAA,EAA+B;AAChE,EAAA,MAAM,gBAAgB,OAAO,OAAA,CAAQ,OAAA,KAAY,QAAA,GAAW,QAAQ,OAAA,GAAU,MAAA;AAC9E,EAAA,MAAM,eAAA,GACJ,OAAO,OAAA,CAAQ,OAAA,KAAY,QAAA,IAAY,QAAQ,OAAA,KAAY,IAAA,GAAO,OAAA,CAAQ,OAAA,CAAQ,QAAA,GAAW,MAAA;AAE/F,EAAA,MAAM,SACJ,OAAA,CAAQ,QAAA,EAAU,qBAAqB,MAAA,GACnC,OAAA,CAAQ,SAAS,gBAAA,GACjB,eAAA,KAAoB,UAClB,IAAA,GACA,eAAA,KAAoB,SAClB,KAAA,GACA,aAAA,GACE,cAAc,UAAA,CAAW,UAAU,IACnC,mBAAA,EAAoB;AAEhC,EAAA,MAAM,kBAAA,GAAqB,SAAS,oBAAA,GAAuB,EAAA;AAC3D,EAAA,MAAM,qBAAA,GAAwB,CAAC,CAAC,OAAA,CAAQ,UAAU,qBAAA,EAAuB,OAAA;AACzE,EAAA,MAAM,MAAA,GAAS,qBAAA,GACX,OAAA,CAAQ,QAAA,EAAU,qBAAA,EAAuB,MAAA,KAAW,aAAA,GAAgB,IAAI,GAAA,CAAI,aAAa,CAAA,CAAE,QAAA,GAAW,MAAA,CAAA,GACtG,MAAA;AAEJ,EAAA,IAAI,yBAAyB,CAAC,MAAA,IAAU,CAAC,sBAAA,CAAuB,OAAA,CAAQ,OAAO,CAAA,EAAG;AAChF,IAAA,MAAM,YAAY,mEAAmE,CAAA;AAAA,EACvF;AAEA,EAAA,SAAS,YAAA,CAAa,UAAA,EAAoB,kBAAA,GAAmD,EAAC,EAAqB;AACjH,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,QAAA,EAAU,YAAA,IAAgB,qBAAA;AACjD,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,QAAA,EAAU,OAAA,GAAU,UAAU,GAAG,IAAA,IAAQ,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA;AACrF,IAAA,MAAM,aAAa,OAAA,CAAQ,QAAA,EAAU,UAAU,UAAU,CAAA,EAAG,cAAc,EAAC;AAE3E,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,CAAA,EAAG,kBAAkB,CAAA,EAAG,IAAI,CAAA,CAAA;AAAA,MAClC,UAAA,EAAY;AAAA,QACV,MAAA,EAAQ,CAAC,CAAC,kBAAA;AAAA,QACV,QAAA,EAAU,KAAA;AAAA,QACV,IAAA,EAAM,GAAA;AAAA,QACN,QAAA,EAAU,IAAA;AAAA,QACV,GAAI,qBAAA,GAAwB,EAAE,MAAA,KAAW,EAAC;AAAA,QAC1C,GAAG,QAAQ,QAAA,EAAU,uBAAA;AAAA,QACrB,GAAG,kBAAA;AAAA,QACH,GAAG;AAAA;AACL,KACF;AAAA,EACF;AAEA,EAAA,OAAO,YAAA;AACT;AAEO,SAAS,WAAW,OAAA,EAAkD;AAC3E,EAAA,MAAM,YAAA,GAAe,mBAAmB,OAAO,CAAA;AAC/C,EAAA,MAAM,YAAA,GAAe,aAAa,eAAA,EAAiB,EAAE,QAAQ,OAAA,CAAQ,OAAA,EAAS,SAAA,IAAa,uBAAA,EAAyB,CAAA;AACpH,EAAA,MAAM,WAAA,GAAc,YAAA,CAAa,cAAA,EAAgB,EAAE,MAAA,EAAQ,QAAQ,OAAA,EAAS,WAAA,EAAa,MAAA,IAAU,qBAAA,EAAuB,CAAA;AAC1H,EAAA,MAAM,WAAA,GAAc,YAAA,CAAa,cAAA,EAAgB,EAAE,MAAA,EAAQ,QAAQ,OAAA,EAAS,WAAA,EAAa,MAAA,IAAU,qBAAA,EAAuB,CAAA;AAC1H,EAAA,MAAM,iBAAA,GAAoB,aAAa,eAAe,CAAA;AAEtD,EAAA,OAAO;AAAA,IACL,YAAA,EAAc;AAAA,MACZ,MAAM,YAAA,CAAa,IAAA;AAAA,MACnB,YAAY,YAAA,CAAa;AAAA,KAC3B;AAAA,IACA,WAAA,EAAa;AAAA,MACX,MAAM,WAAA,CAAY,IAAA;AAAA,MAClB,YAAY,WAAA,CAAY;AAAA,KAC1B;AAAA,IACA,iBAAA,EAAmB;AAAA,MACjB,MAAM,iBAAA,CAAkB,IAAA;AAAA,MACxB,YAAY,iBAAA,CAAkB;AAAA,KAChC;AAAA,IACA,WAAA,EAAa;AAAA,MACX,MAAM,WAAA,CAAY,IAAA;AAAA,MAClB,YAAY,WAAA,CAAY;AAAA;AAC1B,GACF;AACF;AAEA,eAAsB,cAAA,CACpB,GAAA,EACA,OAAA,EACA,cAAA,EACe;AACf,EAAA,MAAM,iBAAA,GAAoB,GAAA,CAAI,OAAA,CAAQ,OAAA,EAAS,OAAA,EAAS,WAAA;AACxD,EAAA,IAAI,CAAC,mBAAmB,OAAA,EAAS;AAC/B,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,UAAU,MAAM,oBAAA;AAAA,IACpB,iBAAA,CAAkB,OAAA;AAAA,IAClB,OAAA,CAAQ,OAAA;AAAA,IACR,OAAA,CAAQ;AAAA,GACV;AAEA,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,SAAS,OAAA,CAAQ,OAAA;AAAA,IACjB,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,IACpB;AAAA,GACF;AAEA,EAAA,MAAM,cAAA,GAAiB,GAAA,CAAI,OAAA,CAAQ,WAAA,CAAY,WAAA,CAAY,UAAA;AAC3D,EAAA,MAAM,MAAA,GAAS,cAAA,GAAiB,MAAA,GAAY,cAAA,CAAe,MAAA;AAC3D,EAAA,MAAM,OAAA,GAA+B;AAAA,IACnC,GAAG,cAAA;AAAA,IACH;AAAA,GACF;AACA,EAAA,MAAM,YAAY,IAAA,CAAK,GAAA,EAAI,GAAA,CAAM,OAAA,CAAQ,UAAU,EAAA,IAAM,GAAA;AACzD,EAAA,MAAM,QAAA,GAAW,kBAAkB,QAAA,IAAY,SAAA;AAC/C,EAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,GAAA,CAAI,OAAA,CAAQ,MAAM,CAAA;AAElD,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI,aAAa,KAAA,EAAO;AACtB,IAAA,OAAA,GAAU,MAAM,YAAA,CAAa,WAAA,EAAa,MAAA,EAAQ,OAAA,CAAQ,UAAU,qBAAqB,CAAA;AAAA,EAC3F,CAAA,MAAA,IAAW,aAAa,KAAA,EAAO;AAC7B,IAAA,MAAM,YAAY,2DAA2D,CAAA;AAAA,EAC/E,CAAA,MAAO;AACL,IAAA,MAAM,YAAY,MAAM,iBAAA;AAAA,MACtB,MAAA;AAAA,MACA,KAAK,SAAA,CAAU;AAAA,QACb,GAAG,WAAA;AAAA,QACH;AAAA,OACD;AAAA,KACH;AACA,IAAA,OAAA,GAAU,uBAAA;AAAA,MACR,KAAK,SAAA,CAAU;AAAA,QACb,OAAA,EAAS,WAAA;AAAA,QACT,SAAA;AAAA,QACA;AAAA,OACD;AAAA,KACH;AAAA,EACF;AAEA,EAAA,IAAI,OAAA,CAAQ,SAAS,IAAA,EAAM;AACzB,IAAA,MAAM,KAAA,GAAQ,mBAAmB,GAAA,CAAI,OAAA,CAAQ,YAAY,WAAA,CAAY,IAAA,EAAM,SAAS,GAAG,CAAA;AACvF,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,KAAA,CAAM,OAAA,EAAS,OAAO,CAAA;AAC5C,IAAA,KAAA,CAAM,WAAW,OAAO,CAAA;AAAA,EAC1B,CAAA,MAAO;AACL,IAAA,MAAM,KAAA,GAAQ,mBAAmB,GAAA,CAAI,OAAA,CAAQ,YAAY,WAAA,CAAY,IAAA,EAAM,SAAS,GAAG,CAAA;AACvF,IAAA,IAAI,KAAA,CAAM,WAAU,EAAG;AACrB,MAAA,KAAA,CAAM,UAAA,CAAW,KAAA,CAAM,KAAA,EAAO,CAAA;AAAA,IAChC;AACA,IAAA,GAAA,CAAI,UAAU,GAAA,CAAI,OAAA,CAAQ,YAAY,WAAA,CAAY,IAAA,EAAM,SAAS,OAAO,CAAA;AAAA,EAC1E;AACF;AAEA,eAAsB,gBAAA,CACpB,GAAA,EACA,OAAA,EACA,cAAA,EACA,SAAA,EACe;AACf,EAAA,IAAI,cAAA,KAAmB,UAAa,OAAO,GAAA,CAAI,oBAAoB,UAAA,IAAc,GAAA,CAAI,QAAQ,MAAA,EAAQ;AACnG,IAAA,MAAM,YAAA,GAAe,MAAM,GAAA,CAAI,eAAA,CAAgB,GAAA,CAAI,OAAA,CAAQ,WAAA,CAAY,iBAAA,CAAkB,IAAA,EAAM,GAAA,CAAI,OAAA,CAAQ,MAAM,CAAA;AACjH,IAAA,cAAA,GAAiB,CAAC,CAAC,YAAA;AAAA,EACrB;AAEA,EAAA,MAAM,yBAAyB,cAAA,IAAkB,KAAA;AACjD,EAAA,MAAM,KAAA,GAAQ,wBAAwB,OAAO,CAAA;AAC7C,EAAA,MAAM,OAAA,GAAU,GAAA,CAAI,OAAA,CAAQ,WAAA,CAAY,YAAA,CAAa,UAAA;AACrD,EAAA,MAAM,MAAA,GAAS,sBAAA,GAAyB,MAAA,GAAY,GAAA,CAAI,QAAQ,aAAA,EAAe,SAAA;AAC/E,EAAA,MAAM,eAAe,GAAA,EAAK,GAAA,CAAI,QAAQ,WAAA,CAAY,YAAA,CAAa,MAAM,KAAA,EAAO;AAAA,IAC1E,GAAG,OAAA;AAAA,IACH,MAAA;AAAA,IACA,GAAG;AAAA,GACJ,CAAA;AAED,EAAA,IAAI,sBAAA,EAAwB;AAC1B,IAAA,MAAM,cAAA;AAAA,MACJ,GAAA;AAAA,MACA,GAAA,CAAI,OAAA,CAAQ,WAAA,CAAY,iBAAA,CAAkB,IAAA;AAAA,MAC1C,MAAA;AAAA,MACA,GAAA,CAAI,OAAA,CAAQ,WAAA,CAAY,iBAAA,CAAkB;AAAA,KAC5C;AAAA,EACF;AAEA,EAAA,MAAM,cAAA,CAAe,GAAA,EAAK,OAAA,EAAS,sBAAsB,CAAA;AACzD,EAAA,GAAA,CAAI,OAAA,CAAQ,gBAAgB,OAAO,CAAA;AACrC;AAKO,SAAS,YAAA,CAAa,KAAiC,MAAA,EAAgC;AAC5F,EAAA,GAAA,CAAI,SAAA,CAAU,MAAA,CAAO,IAAA,EAAM,EAAA,EAAI;AAAA,IAC7B,GAAG,MAAA,CAAO,UAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACT,CAAA;AACH;AAEO,SAAS,mBAAA,CAAoB,KAAiC,kBAAA,EAAoC;AACvG,EAAA,YAAA,CAAa,GAAA,EAAK,GAAA,CAAI,OAAA,CAAQ,WAAA,CAAY,YAAY,CAAA;AACtD,EAAA,YAAA,CAAa,GAAA,EAAK,GAAA,CAAI,OAAA,CAAQ,WAAA,CAAY,WAAW,CAAA;AAErD,EAAA,IAAI,GAAA,CAAI,OAAA,CAAQ,OAAA,EAAS,OAAA,EAAS,kBAAA,EAAoB;AACpD,IAAA,YAAA,CAAa,GAAA,EAAK,GAAA,CAAI,OAAA,CAAQ,WAAA,CAAY,WAAW,CAAA;AACrD,IAAA,MAAM,YAAA,GAAe,kBAAA;AAAA,MACnB,GAAA,CAAI,OAAA,CAAQ,WAAA,CAAY,WAAA,CAAY,IAAA;AAAA,MACpC,GAAA,CAAI,OAAA,CAAQ,WAAA,CAAY,WAAA,CAAY,UAAA;AAAA,MACpC;AAAA,KACF;AACA,IAAA,YAAA,CAAa,UAAA,CAAW,YAAA,CAAa,KAAA,EAAO,CAAA;AAAA,EAC9C;AAEA,EAAA,MAAM,YAAA,GAAe,kBAAA;AAAA,IACnB,GAAA,CAAI,OAAA,CAAQ,WAAA,CAAY,WAAA,CAAY,IAAA;AAAA,IACpC,GAAA,CAAI,OAAA,CAAQ,WAAA,CAAY,WAAA,CAAY,UAAA;AAAA,IACpC;AAAA,GACF;AACA,EAAA,YAAA,CAAa,UAAA,CAAW,YAAA,CAAa,KAAA,EAAO,CAAA;AAE5C,EAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,IAAA,YAAA,CAAa,GAAA,EAAK,GAAA,CAAI,OAAA,CAAQ,WAAA,CAAY,iBAAiB,CAAA;AAAA,EAC7D;AACF;AAEO,IAAM,gBAAA,GAAmB,CAC9BA,QAAAA,EACA,MAAA,KAOkB;AAClB,EAAA,MAAM,OAAA,GAAA,CAAWA,QAAAA,YAAmB,OAAA,IAAW,EAAE,SAAA,IAAaA,YAAWA,QAAAA,GAAUA,QAAAA,CAAQ,OAAA,EAAS,GAAA,CAAI,QAAQ,CAAA;AAChH,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,EAAE,UAAA,GAAa,eAAA,EAAiB,eAAe,aAAA,EAAc,GAAI,UAAU,EAAC;AAClF,EAAA,MAAM,YAAA,GAAe,aAAa,OAAO,CAAA;AACzC,EAAA,MAAM,SAAA,GAAY,CAAC,IAAA,KACjB,YAAA,CAAa,GAAA,CAAI,IAAI,CAAA,IAAK,YAAA,CAAa,GAAA,CAAI,CAAA,EAAG,oBAAoB,CAAA,EAAG,IAAI,CAAA,CAAE,CAAA;AAC7E,EAAA,MAAM,oBAAA,GAAuB,KAAA,CAAM,IAAA,iBAAK,IAAI,GAAA,CAAI;AAAA,IAC9C,UAAA;AAAA,IACA,UAAA,CAAW,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA;AAAA,IAC5B,UAAA,CAAW,OAAA,CAAQ,IAAA,EAAM,GAAG;AAAA,GAC7B,CAAC,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AAClB,EAAA,KAAA,MAAW,iBAAiB,oBAAA,EAAsB;AAChD,IAAA,MAAM,YAAA,GACJ,SAAA,CAAU,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,aAAa,CAAA,CAAE,CAAA,IAAK,SAAA,CAAU,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,aAAa,CAAA,CAAE,CAAA;AAC/F,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,OAAO,YAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT,CAAA;AAEO,IAAM,cAAA,GAAiB,OAI5BA,QAAAA,EACA,MAAA,KAMW;AACX,EAAA,MAAM,UAAUA,QAAAA,YAAmB,OAAA,IAAW,EAAE,SAAA,IAAaA,QAAAA,CAAAA,GAAWA,WAAUA,QAAAA,CAAQ,OAAA;AAC1F,EAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAA;AACzC,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,YAAA,GAAe,aAAa,YAAY,CAAA;AAC9C,EAAA,MAAM,UAAA,GAAa,QAAQ,UAAA,IAAc,cAAA;AACzC,EAAA,MAAM,eAAA,GAAkB,QAAQ,YAAA,IAAgB,qBAAA;AAChD,EAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,IAAY,SAAA;AACrC,EAAA,MAAM,cAAA,GAAiB,sBAAsB,eAAe,CAAA;AAC5D,EAAA,MAAM,QAAA,GAAW,kBAAkB,MAAM,CAAA;AACzC,EAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,MAAA,EAAQ,MAAM,CAAA;AAE9C,EAAA,IAAI,WAAA;AAEJ,EAAA,KAAA,MAAW,UAAU,cAAA,EAAgB;AACnC,IAAA,MAAM,SAAA,GAAY,yBAAA,CAA0B,MAAA,EAAQ,UAAA,EAAY,QAAQ,CAAA;AACxE,IAAA,MAAM,WAAA,GAAc,YAAA,CAAa,GAAA,CAAI,SAAS,CAAA;AAC9C,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,WAAA,GAAc,WAAA;AACd,MAAA;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,MAAM,sBAA+D,EAAC;AACtE,IAAA,KAAA,MAAW,UAAU,cAAA,EAAgB;AACnC,MAAA,MAAM,SAAA,GAAY,yBAAA,CAA0B,MAAA,EAAQ,UAAA,EAAY,QAAQ,CAAA;AACxE,MAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,YAAA,CAAa,SAAQ,EAAG;AAClD,QAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,CAAA,EAAG,SAAS,GAAG,CAAA,EAAG;AACrC,UAAA;AAAA,QACF;AACA,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC5B,QAAA,MAAM,QAAA,GAAW,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACvC,QAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,QAAA,IAAY,GAAA,EAAK,EAAE,CAAA;AAC1C,QAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,EAAG;AACxB,UAAA,mBAAA,CAAoB,IAAA,CAAK,EAAE,KAAA,EAAO,KAAA,EAAO,CAAA;AAAA,QAC3C;AAAA,MACF;AACA,MAAA,IAAI,mBAAA,CAAoB,SAAS,CAAA,EAAG;AAClC,QAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,mBAAA,CAAoB,SAAS,CAAA,EAAG;AAClC,MAAA,mBAAA,CAAoB,KAAK,CAAC,IAAA,EAAM,UAAU,IAAA,CAAK,KAAA,GAAQ,MAAM,KAAK,CAAA;AAClE,MAAA,WAAA,GAAc,mBAAA,CAAoB,IAAI,CAAC,KAAA,KAAU,MAAM,KAAK,CAAA,CAAE,KAAK,EAAE,CAAA;AAAA,IACvE;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,aAAa,KAAA,EAAO;AACtB,IAAA,MAAM,WAAA;AAAA,MACJ;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,aAAa,KAAA,EAAO;AACtB,IAAA,MAAM,OAAA,GAAU,MAAM,cAAA,CAAwC,WAAA,EAAa,MAAM,CAAA;AACjF,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,aAAA,GAAgB,QAAA,CAAS,OAAA,CAAQ,OAAO,CAAA;AAC9C,IAAA,MAAM,UAAA,GAAa,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAA;AACxC,IAAA,MAAM,YAAY,OAAA,CAAQ,SAAA;AAC1B,IAAA,IAAI,CAAC,aAAA,IAAiB,CAAC,UAAA,IAAc,OAAO,cAAc,QAAA,EAAU;AAClE,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,MAAM,gBAAgB,OAAO,OAAA,CAAQ,OAAA,KAAY,QAAA,GAAW,QAAQ,OAAA,GAAU,GAAA;AAC9E,MAAA,MAAM,eAAA,GACJ,OAAO,MAAA,CAAO,OAAA,KAAY,QAAA,GACtB,MAAA,CAAO,OAAA,GACP,MAAM,MAAA,CAAO,OAAA,CAAQ,aAAA,EAA+B,UAAuB,CAAA;AACjF,MAAA,IAAI,kBAAkB,eAAA,EAAiB;AACrC,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,aAAA;AAAA,MACT,IAAA,EAAM,UAAA;AAAA,MACN,SAAA;AAAA,MACA,SAAS,OAAO,OAAA,CAAQ,OAAA,KAAY,QAAA,GAAW,QAAQ,OAAA,GAAU;AAAA,KACnE;AAAA,EACF;AAEA,EAAA,MAAM,cAAA,GAAiB,eAAA,CASpB,uBAAA,CAAwB,WAAW,CAAC,CAAA;AAEvC,EAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,oBAAoB,MAAM,iBAAA;AAAA,IAC9B,MAAA;AAAA,IACA,KAAK,SAAA,CAAU;AAAA,MACb,GAAG,cAAA,CAAe,OAAA;AAAA,MAClB,WAAW,cAAA,CAAe;AAAA,KAC3B;AAAA,GACH;AAEA,EAAA,IAAI,iBAAA,KAAsB,eAAe,SAAA,EAAW;AAClD,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,cAAA,CAAe,SAAA,IAAa,IAAA,CAAK,GAAA,EAAI,EAAG;AAC1C,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,kBAAkB,cAAA,CAAe,OAAA;AACvC,EAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,IAAA,MAAM,aAAA,GAAgB,gBAAgB,OAAA,IAAW,GAAA;AACjD,IAAA,MAAM,eAAA,GACJ,OAAO,MAAA,CAAO,OAAA,KAAY,QAAA,GACtB,MAAA,CAAO,OAAA,GACP,MAAM,MAAA,CAAO,OAAA,CAAQ,eAAA,CAAgB,OAAA,EAAS,gBAAgB,IAAI,CAAA;AACxE,IAAA,IAAI,kBAAkB,eAAA,EAAiB;AACrC,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,MAAM,aAAA,GAAgB,QAAA,CAAS,eAAA,CAAgB,OAAO,CAAA;AACtD,EAAA,MAAM,UAAA,GAAa,QAAA,CAAS,eAAA,CAAgB,IAAI,CAAA;AAChD,EAAA,IAAI,CAAC,aAAA,IAAiB,CAAC,UAAA,EAAY;AACjC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,aAAA;AAAA,IACT,IAAA,EAAM,UAAA;AAAA,IACN,WAAW,eAAA,CAAgB,SAAA;AAAA,IAC3B,SAAS,eAAA,CAAgB;AAAA,GAC3B;AACF,CAAA;;;AChiBA,IAAA,eAAA,GAAA;AAAA,EAoLE,OAAA,EAAW;AACb,CAAA;;;ACnLO,IAAM,kBAAkB,eAAA,CAAY,OAAA;AAEpC,SAAS,oBAAoB,OAAA,EAAyB;AAC3D,EAAA,OAAO,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,eAAe,CAAA,CAAA;AACtC;;;ACuBA,IAAM,cAAA,GAAiB,gBAAA;AACvB,IAAM,QAAA,GAAW,oBAAA;AACjB,IAAM,gBAAA,GAAmB,oBAAoB,QAAQ,CAAA;AACrD,IAAM,qBAAA,GAAwB,UAAA;AAE9B,SAAS,iBAAA,CAAkB,SAAiB,WAAA,EAA4B;AACtE,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,EAAiB,WAAA,EAAa,KAAA,EAAM;AAAA,EACvD;AAEA,EAAA,MAAM,0BACJ,WAAA,EAAa,WAAA,EAAY,CAAE,QAAA,CAAS,kBAAkB,CAAA,IAAK,KAAA;AAC7D,EAAA,MAAM,SAAA,GACJ,2BAA2B,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,IAAK,OAAA,CAAQ,WAAW,GAAG,CAAA;AAE9E,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAoB,WAAA,EAAa,KAAA,EAAM;AAAA,EAC1D;AAEA,EAAA,IAAI;AACF,IAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,CAAK,MAAM,OAAO,CAAA,EAAc,aAAa,KAAA,EAAM;AAAA,EACtE,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAoB,WAAA,EAAa,IAAA,EAAK;AAAA,EACzD;AACF;AAEA,SAAS,qBAAqB,KAAA,EAAuB;AACnD,EAAA,OAAO,QAAQ,KAAA,GAAQ,MAAA;AACzB;AAEA,SAAS,yBAAyB,IAAA,EAAc;AAC9C,EAAA,OAAO,IAAA,CAAK,aAAY,KAAM,eAAA;AAChC;AAEA,SAAS,kBAAA,CACP,SACA,UAAA,EACoB;AACpB,EAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,IAAA,MAAM,MAAA,GAAS,oBAAA,CAAqB,OAAA,CAAQ,SAAS,CAAC,CAAA;AACtD,IAAA,IAAI,QAAQ,OAAO,MAAA;AAAA,EACrB;AAEA,EAAA,MAAM,iBAAA,GAAoB,IAAI,GAAA,CAAI,UAAA,CAAW,IAAI,CAAA,SAAA,KAAa,SAAA,CAAU,WAAA,EAAa,CAAC,CAAA;AACtF,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AAClD,IAAA,IAAI,CAAC,iBAAA,CAAkB,GAAA,CAAI,GAAA,CAAI,WAAA,EAAa,CAAA,EAAG;AAC7C,MAAA;AAAA,IACF;AACA,IAAA,MAAM,UAAA,GAAa,qBAAqB,KAAK,CAAA;AAC7C,IAAA,IAAI,YAAY,OAAO,UAAA;AAAA,EACzB;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,0CACP,OAAA,EACoB;AACpB,EAAA,MAAM,aAAA,GAAgB,kBAAA,CAAmB,OAAA,EAAS,CAAC,eAAe,CAAC,CAAA;AACnE,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,KAAA,CAAM,kBAAkB,CAAA;AACpD,EAAA,MAAM,KAAA,GAAQ,KAAA,GAAQ,CAAC,CAAA,EAAG,IAAA,EAAK;AAC/B,EAAA,OAAO,QAAQ,KAAA,GAAQ,MAAA;AACzB;AAEA,SAAS,oCACP,OAAA,EACoB;AACpB,EAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,OAAA,EAAS,CAAC,QAAQ,CAAC,CAAA;AACrD,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO,iBAAiB,IAAI,OAAA,CAAQ,EAAE,MAAA,EAAQ,CAAC,CAAA,IAAK,MAAA;AACtD;AAEA,SAAS,SAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAA,CAAQ,KAAK,CAAA,IAAK,OAAO,UAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,eAAe,KAAA,EAAoC;AAC1D,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,IAAA,GAAO,MAAA,GAAS,CAAA,GAAI,KAAA,CAAM,IAAA,EAAK,GAAI,MAAA;AAC/E;AAEA,SAAS,8BAA8B,OAAA,EAAkD;AACvF,EAAA,IAAI,CAAC,QAAA,CAAS,OAAO,CAAA,EAAG,OAAO,IAAA;AAC/B,EAAA,OAAO,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA,GAAI,QAAQ,KAAA,GAAQ,OAAA;AACnD;AAEA,SAAS,iBAAiB,OAAA,EAAsC;AAC9D,EAAA,OACE,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,IAC1B,OAAA,CAAQ,GAAA,CAAI,kBAAkB,CAAA,IAC9B,OAAA,CAAQ,GAAA,CAAI,qBAAqB,CAAA,IACjC,MAAA;AAEJ;AAEA,SAAS,mBAAA,CAAoB,SAAkB,QAAA,EAAkB;AAC/D,EAAA,MAAM,iBAAA,GAAoB,8BAA8B,OAAO,CAAA;AAC/D,EAAA,IAAI,iBAAA,EAAmB;AACrB,IAAA,MAAM,oBAAoB,CAAC,iBAAA,CAAkB,SAAS,iBAAA,CAAkB,KAAA,EAAO,kBAAkB,OAAO,CAAA;AACxG,IAAA,KAAA,MAAW,aAAa,iBAAA,EAAmB;AACzC,MAAA,MAAM,QAAA,GAAW,eAAe,SAAS,CAAA;AACzC,MAAA,IAAI,UAAU,OAAO,QAAA;AAAA,IACvB;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAa,eAAe,OAAO,CAAA;AACzC,EAAA,IAAI,YAAY,OAAO,UAAA;AAEvB,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,iBAAiB,OAAA,EAAsC;AAC9D,EAAA,MAAM,iBAAA,GAAoB,8BAA8B,OAAO,CAAA;AAC/D,EAAA,OAAO,iBAAA,GAAoB,cAAA,CAAe,iBAAA,CAAkB,IAAI,CAAA,GAAI,MAAA;AACtE;AAEA,SAAS,iBAAA,CAAkB,UAAoB,OAAA,EAAiC;AAC9E,EAAA,MAAM,aAAA,GAAgB,cAAA,CAAe,QAAA,CAAS,UAAU,CAAA;AACxD,EAAA,IAAI,eAAe,OAAO,aAAA;AAC1B,EAAA,MAAM,aAAA,GAAgB,QAAA,CAAS,OAAO,CAAA,GAAI,OAAA,GAAU,IAAA;AACpD,EAAA,OAAO,aAAA,GAAgB,cAAA,CAAe,aAAA,CAAc,UAAU,KAAK,IAAA,GAAO,IAAA;AAC5E;AAEA,SAAS,iBAAiB,KAAA,EAAsD;AAC9E,EAAA,OAAO,MAAM,SAAA,EAAU;AACzB;AAUA,SAAS,cAAc,KAAA,EAAwB;AAC7C,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,MAAA;AAClD,EAAA,IAAI,OAAO,KAAA,KAAU,SAAA,EAAW,OAAO,QAAQ,MAAA,GAAS,OAAA;AACxD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,MAAA,CAAO,SAAS,KAAK,CAAA,GAAI,MAAA,CAAO,KAAK,CAAA,GAAI,MAAA;AAC/E,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAEA,SAAS,aAAa,MAAA,EAA2B;AAC/C,EAAA,OAAO,IAAI,MAAA,CAAO,GAAA,CAAI,aAAa,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAChD;AAEA,SAAS,wBAAwB,KAAA,EAAwB;AACvD,EAAA,IAAI,MAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,aAAa,KAAK,CAAA;AACnD,EAAA,IAAI,SAAS,OAAO,KAAA,KAAU,UAAU,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AACnE,EAAA,OAAO,cAAc,KAAK,CAAA;AAC5B;AAEA,SAAS,sBAAsB,MAAA,EAAiC;AAC9D,EAAA,MAAM,QAAQ,MAAA,CAAO,KAAA;AACrB,EAAA,QAAQ,OAAO,QAAA;AAAU,IACvB,KAAK,IAAA,EAAM;AACT,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACzB,QAAA,MAAM,IAAI,kBAAA,CAAmB;AAAA,UAC3B,IAAA,EAAM,eAAA;AAAA,UACN,OAAA,EAAS,CAAA,YAAA,EAAe,MAAA,CAAO,MAAM,CAAA,4CAAA,CAAA;AAAA,UACrC,MAAA,EAAQ;AAAA,SACT,CAAA;AAAA,MACH;AACA,MAAA,OAAO,CAAA,GAAA,EAAM,YAAA,CAAa,KAAK,CAAC,CAAA,CAAA;AAAA,IAClC;AAAA,IACA,KAAK,IAAA;AACH,MAAA,OAAO,CAAA,GAAA,EAAM,aAAA,CAAc,KAAK,CAAC,CAAA,CAAA;AAAA,IACnC,KAAK,IAAA;AAAA,IACL,KAAK,KAAA;AAAA,IACL,KAAK,IAAA;AAAA,IACL,KAAK,KAAA;AAAA,IACL,KAAK,IAAA;AAAA,IACL,KAAK,KAAA;AAAA,IACL,KAAK,MAAA;AAAA,IACL,KAAK,OAAA;AACH,MAAA,OAAO,GAAG,MAAA,CAAO,QAAQ,CAAA,CAAA,EAAI,aAAA,CAAc,KAAK,CAAC,CAAA,CAAA;AAAA;AAEvD;AAEA,SAAS,oBAAoB,OAAA,EAAsD;AACjF,EAAA,MAAM,YAAA,GAAA,CAAgB,OAAA,CAAQ,aAAA,IAAiB,OAAA,CAAQ,UAAU,IAAA,EAAK;AACtE,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,MAAM,IAAI,kBAAA,CAAmB;AAAA,MAC3B,IAAA,EAAM,eAAA;AAAA,MACN,OAAA,EAAS,8BAAA;AAAA,MACT,MAAA,EAAQ,CAAA;AAAA,MACR,QAAA,EAAU,cAAA;AAAA,MACV,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,EAAgB;AAClC,EAAA,IAAI,QAAQ,MAAA,EAAQ,KAAA,CAAM,GAAA,CAAI,QAAA,EAAU,QAAQ,MAAM,CAAA;AACtD,EAAA,IAAI,QAAQ,MAAA,EAAQ,KAAA,CAAM,GAAA,CAAI,QAAA,EAAU,QAAQ,MAAM,CAAA;AACtD,EAAA,IAAI,QAAQ,KAAA,EAAO,KAAA,CAAM,GAAA,CAAI,OAAA,EAAS,QAAQ,KAAK,CAAA;AACnD,EAAA,IAAI,OAAA,CAAQ,IAAA,EAAM,KAAA,CAAM,GAAA,CAAI,QAAQ,MAAM,CAAA;AAC1C,EAAA,IAAI,OAAO,OAAA,CAAQ,KAAA,KAAU,QAAA,EAAU,KAAA,CAAM,IAAI,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAC,CAAA;AAC/E,EAAA,IAAI,OAAO,OAAA,CAAQ,MAAA,KAAW,QAAA,EAAU,KAAA,CAAM,IAAI,QAAA,EAAU,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAC,CAAA;AAClF,EAAA,IAAI,OAAA,CAAQ,OAAO,MAAA,EAAQ;AACzB,IAAA,KAAA,CAAM,GAAA;AAAA,MACJ,OAAA;AAAA,MACA,OAAA,CAAQ,KAAA,CAAM,SAAA,KAAc,KAAA,GACxB,CAAA,EAAG,QAAQ,KAAA,CAAM,MAAM,CAAA,KAAA,CAAA,GACvB,OAAA,CAAQ,KAAA,CAAM;AAAA,KACpB;AAAA,EACF;AAEA,EAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,IAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAA,EAAG;AACvD,MAAA,KAAA,CAAM,GAAA,CAAI,GAAA,EAAK,uBAAA,CAAwB,KAAK,CAAC,CAAA;AAAA,IAC/C;AAAA,EACF;AAEA,EAAA,IAAI,OAAA,CAAQ,SAAS,MAAA,EAAQ;AAC3B,IAAA,KAAA,MAAW,MAAA,IAAU,QAAQ,OAAA,EAAS;AACpC,MAAA,IAAI,OAAA,CAAQ,IAAA,IAAQ,MAAA,CAAO,SAAA,CAAU,cAAA,CAAe,KAAK,OAAA,CAAQ,IAAA,EAAM,MAAA,CAAO,MAAM,CAAA,EAAG;AACrF,QAAA,MAAM,IAAI,kBAAA,CAAmB;AAAA,UAC3B,IAAA,EAAM,eAAA;AAAA,UACN,SAAS,CAAA,YAAA,EAAe,MAAA,CAAO,MAAM,CAAA,+BAAA,EAAkC,OAAO,MAAM,CAAA,aAAA,CAAA;AAAA,UACpF,MAAA,EAAQ;AAAA,SACT,CAAA;AAAA,MACH;AACA,MAAA,KAAA,CAAM,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,qBAAA,CAAsB,MAAM,CAAC,CAAA;AAAA,IAC3D;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GAAW,CAAA,KAAA,EAAQ,kBAAA,CAAmB,YAAY,CAAC,CAAA,CAAA;AACzD,EAAA,MAAM,SAAA,GAAY,MAAM,QAAA,EAAS;AACjC,EAAA,MAAM,YAAY,SAAA,GAAY,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,GAAK,QAAA;AAC3D,EAAA,OAAO,SAAA;AACT;AAEA,SAAS,YAAA,CACP,QACA,OAAA,EACwB;AACxB,EAAA,MAAM,gBAAA,GAAmB,SAAS,UAAA,IAAc,IAAA;AAChD,EAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,MAAA,CAAO,YAAA,IAAgB,SAAS,YAAY,CAAA;AACzE,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,GAAI,MAAA,CAAO,OAAA,IAAW,EAAC;AAAA,IACvB,GAAI,OAAA,EAAS,OAAA,IAAW;AAAC,GAC3B;AACA,EAAA,MAAM,YAAA,GACJ,YAAA,CAAa,iBAAiB,CAAA,IAAK,aAAa,iBAAiB,CAAA;AACnE,EAAA,MAAM,WAAA,GACJ,SAAS,MAAA,IACT,MAAA,CAAO,WACN,OAAO,YAAA,KAAiB,QAAA,GAAW,YAAA,GAAe,MAAA,CAAA,IACnD,cAAA;AACF,EAAA,MAAM,WAAA,GAAc,OAAA,EAAS,MAAA,IAAU,MAAA,CAAO,MAAA;AAC9C,EAAA,MAAM,iBAAA,GAAoB,OAAA,EAAS,YAAA,IAAgB,MAAA,CAAO,YAAA;AAE1D,EAAA,MAAM,OAAA,GAAkC;AAAA,IACtC,cAAA,EAAgB,kBAAA;AAAA,IAChB,cAAA,EAAgB;AAAA,GAClB;AAEA,EAAA,IAAI,OAAA,EAAS,MAAA,IAAU,MAAA,CAAO,MAAA,EAAQ;AACpC,IAAA,OAAA,CAAQ,WAAW,CAAA,GAAI,OAAA,EAAS,MAAA,IAAU,OAAO,MAAA,IAAU,EAAA;AAAA,EAC7D;AAEA,EAAA,IAAI,OAAA,EAAS,cAAA,IAAkB,MAAA,CAAO,cAAA,EAAgB;AACpD,IAAA,OAAA,CAAQ,mBAAmB,CAAA,GACzB,OAAA,EAAS,cAAA,IAAkB,OAAO,cAAA,IAAkB,EAAA;AAAA,EACxD;AAEA,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,OAAA,CAAQ,iBAAiB,CAAA,GAAI,WAAA;AAAA,EAC/B;AAEA,EAAA,MAAM,YAAA,GAAe,OAAA,EAAS,OAAA,IAAW,MAAA,CAAO,OAAA;AAChD,EAAA,IAAI,YAAA,EAAc;AAChB,IAAA,MAAM,IAAA,GACJ,OAAO,YAAA,KAAiB,QAAA,GAAW,eAAe,YAAA,CAAa,IAAA;AACjE,IAAA,IAAI,IAAA,EAAM,OAAA,CAAQ,gBAAgB,CAAA,GAAI,IAAA;AAAA,EACxC;AAEA,EAAA,IAAI,OAAO,qBAAqB,SAAA,EAAW;AACzC,IAAA,OAAA,CAAQ,eAAe,CAAA,GAAI,gBAAA,GAAmB,MAAA,GAAS,OAAA;AAAA,EACzD;AAEA,EAAA,IAAI,iBAAA,EAAmB;AACrB,IAAA,OAAA,CAAQ,iBAAiB,CAAA,GAAI,iBAAA;AAAA,EAC/B;AAEA,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,OAAA,CAAQ,QAAQ,CAAA,GAAI,WAAA;AACpB,IAAA,OAAA,CAAQ,WAAW,CAAA,GAAI,OAAA,CAAQ,WAAW,CAAA,IAAK,WAAA;AAAA,EACjD;AAEA,EAAA,MAAM,oBAAA,GAAuB,mBAAmB,YAAA,EAAc;AAAA,IAC5D;AAAA,GACD,CAAA;AACD,EAAA,MAAM,mBAAA,GACJ,oBAAA,IAAwB,mCAAA,CAAoC,YAAY,CAAA;AAC1E,EAAA,IAAI,mBAAA,EAAqB;AACvB,IAAA,OAAA,CAAQ,6BAA6B,CAAA,GAAI,mBAAA;AAAA,EAC3C;AAEA,EAAA,MAAM,mBAAA,GAAsB,mBAAmB,YAAA,EAAc;AAAA,IAC3D;AAAA,GACD,CAAA;AACD,EAAA,MAAM,kBAAA,GACJ,mBAAA,IAAuB,yCAAA,CAA0C,YAAY,CAAA;AAC/E,EAAA,IAAI,kBAAA,EAAoB;AACtB,IAAA,OAAA,CAAQ,4BAA4B,CAAA,GAAI,kBAAA;AAAA,EAC1C;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,iBAAA,EAAmB,iBAAiB,CAAA;AAC9D,EAAA,MAAA,CAAO,OAAA,CAAQ,YAAY,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AACrD,IAAA,IAAI,gBAAA,CAAiB,QAAA,CAAS,GAAG,CAAA,EAAG;AACpC,IAAA,IAAI,YAAA,IAAgB,wBAAA,CAAyB,GAAG,CAAA,EAAG;AACnD,IAAA,MAAM,UAAA,GAAa,qBAAqB,KAAK,CAAA;AAC7C,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,UAAA;AAAA,IACjB;AAAA,EACF,CAAC,CAAA;AAED,EAAA,IAAI,YAAA,EAAc;AAChB,IAAA,OAAA,CAAQ,eAAe,CAAA,GAAI,qBAAA;AAAA,EAC7B;AAEA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,oBAAA,CACP,KAAA,EACA,QAAA,EACA,MAAA,EAC0B;AAC1B,EAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,EAAA,MAAM,YAAA,GACJ,KAAA,YAAiB,kBAAA,GACb,KAAA,GACA,IAAI,kBAAA,CAAmB;AAAA,IACrB,IAAA,EAAM,aAAA;AAAA,IACN,OAAA;AAAA,IACA,MAAA,EAAQ,CAAA;AAAA,IACR,QAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA,EAAO,OAAA;AAAA,IACP,IAAA,EAAM;AAAA,GACP,CAAA;AAEP,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,KAAA;AAAA,IACJ,MAAA,EAAQ,CAAA;AAAA,IACR,UAAA,EAAY,IAAA;AAAA,IACZ,IAAA,EAAM,IAAA;AAAA,IACN,OAAO,YAAA,CAAa,OAAA;AAAA,IACpB,YAAA,EAAc,gBAAA;AAAA,MACZ,IAAI,kBAAA,CAAmB;AAAA,QACrB,MAAM,YAAA,CAAa,IAAA;AAAA,QACnB,SAAS,YAAA,CAAa,OAAA;AAAA,QACtB,QAAQ,YAAA,CAAa,MAAA;AAAA,QACrB,QAAA;AAAA,QACA,MAAA;AAAA,QACA,WAAW,YAAA,CAAa,SAAA;AAAA,QACxB,MAAM,YAAA,CAAa,IAAA;AAAA,QACnB,OAAO,YAAA,CAAa;AAAA,OACrB;AAAA,KACH;AAAA,IACA,GAAA,EAAK;AAAA,GACP;AACF;AAEA,SAAS,sBAAsB,KAAA,EAAuB;AACpD,EAAA,OAAO,8BAA8B,KAAA,EAAO;AAAA,IAC1C,cAAA,EAAgB;AAAA,GACjB,CAAA;AACH;AAEA,SAAS,iBAAiB,IAAA,EAAe;AACvC,EAAA,IAAI,CAAC,MAAM,OAAO,GAAA;AAClB,EAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AACzB,IAAA,MAAM,IAAI,kBAAA,CAAmB;AAAA,MAC3B,IAAA,EAAM,aAAA;AAAA,MACN,OAAA,EAAS,CAAA,wDAAA,EAA2D,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,MACxF,MAAA,EAAQ,CAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,sBAAA,CACP,aACA,OAAA,EACwB;AACxB,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,GAAG,WAAA;AAAA,IACH,GAAI,WAAW;AAAC,GAClB;AAEA,EAAA,IAAI,CAAC,MAAA,CAAO,cAAc,KAAK,CAAC,MAAA,CAAO,cAAc,CAAA,EAAG;AACtD,IAAA,MAAA,CAAO,cAAc,CAAA,GAAI,gBAAA;AAAA,EAC3B;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,eAAe,sBAAA,CACb,OAAA,EACA,cAAA,EACA,OAAA,EACwC;AACxC,EAAA,MAAM,IAAA,GAAO,gBAAA,CAAiB,OAAA,EAAS,IAAI,CAAA;AAC3C,EAAA,MAAM,GAAA,GAAM,qBAAA,CAAsB,OAAA,EAAS,IAAI,CAAA;AAE/C,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,MAChC,MAAA,EAAQ,KAAA;AAAA,MACR,OAAA,EAAS,sBAAA,CAAuB,cAAA,EAAgB,OAAA,EAAS,OAAO,CAAA;AAAA,MAChE,QAAQ,OAAA,EAAS;AAAA,KAClB,CAAA;AACD,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,IAAA,EAAK;AACpC,IAAA,MAAM,SAAA,GAAY,gBAAA,CAAiB,QAAA,CAAS,OAAO,CAAA;AACnD,IAAA,MAAM,UAAA,GAAa,iBAAA;AAAA,MACjB,OAAA,IAAW,EAAA;AAAA,MACX,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,cAAc;AAAA,KACrC;AAEA,IAAA,IAAI,WAAW,WAAA,EAAa;AAC1B,MAAA,MAAM,gBAAA,GAAmB,IAAI,kBAAA,CAAmB;AAAA,QAC9C,IAAA,EAAM,cAAA;AAAA,QACN,OAAA,EAAS,uCAAA;AAAA,QACT,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,MAAA,EAAQ,KAAA;AAAA,QACR,SAAA;AAAA,QACA,IAAA,EAAM,iDAAA;AAAA,QACN,KAAA,EAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,GAAG;AAAA,OAC5B,CAAA;AACD,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,SAAA,EAAW,IAAA;AAAA,QACX,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,UAAA,EAAY,iBAAA,CAAkB,QAAA,EAAU,UAAA,CAAW,MAAM,CAAA;AAAA,QACzD,OAAA;AAAA,QACA,GAAA;AAAA,QACA,OAAO,gBAAA,CAAiB,OAAA;AAAA,QACxB,YAAA,EAAc,iBAAiB,gBAAgB,CAAA;AAAA,QAC/C,KAAK,UAAA,CAAW;AAAA,OAClB;AAAA,IACF;AAEA,IAAA,MAAM,SAAS,UAAA,CAAW,MAAA;AAC1B,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,SAAA,GAAY,IAAI,kBAAA,CAAmB;AAAA,QACvC,IAAA,EAAM,YAAA;AAAA,QACN,OAAA,EAAS,mBAAA;AAAA,UACP,MAAA;AAAA,UACA,CAAA,mBAAA,EAAsB,IAAI,CAAA,oBAAA,EAAuB,QAAA,CAAS,MAAM,CAAA;AAAA,SAClE;AAAA,QACA,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,MAAA,EAAQ,KAAA;AAAA,QACR,SAAA;AAAA,QACA,IAAA,EAAM,iBAAiB,MAAM;AAAA,OAC9B,CAAA;AAED,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,SAAA,EAAW,IAAA;AAAA,QACX,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,UAAA,EAAY,iBAAA,CAAkB,QAAA,EAAU,MAAM,CAAA;AAAA,QAC9C,OAAA;AAAA,QACA,GAAA;AAAA,QACA,OAAO,SAAA,CAAU,OAAA;AAAA,QACjB,YAAA,EAAc,iBAAiB,SAAS,CAAA;AAAA,QACxC,GAAA,EAAK;AAAA,OACP;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,IAAA;AAAA,MACJ,SAAA,EAAW,IAAA;AAAA,MACX,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,UAAA,EAAY,iBAAA,CAAkB,QAAA,EAAU,MAAM,CAAA;AAAA,MAC9C,OAAA;AAAA,MACA,GAAA;AAAA,MACA,KAAA,EAAO,KAAA,CAAA;AAAA,MACP,YAAA,EAAc,IAAA;AAAA,MACd,GAAA,EAAK;AAAA,KACP;AAAA,EACF,SAAS,SAAA,EAAW;AAClB,IAAA,MAAM,UAAU,SAAA,YAAqB,KAAA,GAAQ,SAAA,CAAU,OAAA,GAAU,OAAO,SAAS,CAAA;AACjF,IAAA,MAAM,YAAA,GAAe,IAAI,kBAAA,CAAmB;AAAA,MAC1C,IAAA,EAAM,eAAA;AAAA,MACN,OAAA,EAAS,CAAA,2CAAA,EAA8C,GAAG,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA;AAAA,MACtE,MAAA,EAAQ,KAAA;AAAA,MACR,KAAA,EAAO,OAAA;AAAA,MACP,IAAA,EAAM;AAAA,KACP,CAAA;AACD,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,SAAA,EAAW,KAAA;AAAA,MACX,MAAA,EAAQ,CAAA;AAAA,MACR,UAAA,EAAY,IAAA;AAAA,MACZ,OAAA;AAAA,MACA,GAAA;AAAA,MACA,OAAO,YAAA,CAAa,OAAA;AAAA,MACpB,YAAA,EAAc,iBAAiB,YAAY,CAAA;AAAA,MAC3C,GAAA,EAAK;AAAA,KACP;AAAA,EACF;AACF;AAEA,eAAsB,sBAAA,CACpB,SACA,OAAA,EACwC;AACxC,EAAA,MAAM,iBAAA,GAAoB,8BAA8B,OAAO,CAAA;AAC/D,EAAA,OAAO,uBAAuB,iBAAA,EAAmB,EAAE,cAAA,EAAgB,gBAAA,IAAoB,OAAO,CAAA;AAChG;AAEA,eAAe,UAAA,CACb,MAAA,EACA,QAAA,EACA,MAAA,EACA,SACA,OAAA,EACmC;AACnC,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI;AACF,IAAA,OAAA,GAAU,qBAAA,CAAsB,OAAA,EAAS,OAAA,IAAW,MAAA,CAAO,OAAO,CAAA;AAAA,EACpE,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,oBAAA,CAAwB,KAAA,EAAO,QAAA,EAAU,MAAM,CAAA;AAAA,EACxD;AAEA,EAAA,MAAM,GAAA,GAAM,qBAAA,CAAsB,OAAA,EAAS,QAAQ,CAAA;AACnD,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,MAAA,EAAQ,OAAO,CAAA;AAE5C,EAAA,IAAI;AACF,IAAA,MAAM,WAAA,GAA2B;AAAA,MAC/B,MAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAI,WAAW,KAAA,EAAO;AACpB,MAAA,WAAA,CAAY,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA;AAAA,IAC3C;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK,WAAW,CAAA;AAE7C,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,IAAA,EAAK;AACpC,IAAA,MAAM,SAAA,GAAY,gBAAA,CAAiB,QAAA,CAAS,OAAO,CAAA;AACnD,IAAA,MAAM,UAAA,GAAa,iBAAA;AAAA,MACjB,OAAA,IAAW,EAAA;AAAA,MACX,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,cAAc;AAAA,KACrC;AAEA,IAAA,IAAI,WAAW,WAAA,EAAa;AAC1B,MAAA,MAAM,gBAAA,GAAmB,IAAI,kBAAA,CAAmB;AAAA,QAC9C,IAAA,EAAM,cAAA;AAAA,QACN,OAAA,EAAS,iCAAA;AAAA,QACT,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,QAAA;AAAA,QACA,MAAA;AAAA,QACA,SAAA;AAAA,QACA,IAAA,EAAM,iDAAA;AAAA,QACN,KAAA,EAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,GAAG;AAAA,OAC5B,CAAA;AACD,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,UAAA,EAAY,iBAAA,CAAkB,QAAA,EAAU,UAAA,CAAW,MAAM,CAAA;AAAA,QACzD,IAAA,EAAM,IAAA;AAAA,QACN,OAAO,gBAAA,CAAiB,OAAA;AAAA,QACxB,YAAA,EAAc,iBAAiB,gBAAgB,CAAA;AAAA,QAC/C,KAAK,UAAA,CAAW;AAAA,OAClB;AAAA,IACF;AAEA,IAAA,MAAM,SAAS,UAAA,CAAW,MAAA;AAC1B,IAAA,MAAM,aAAA,GAAgB,QAAA,CAAS,MAAM,CAAA,GAAI,MAAA,GAAS,IAAA;AAElD,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,SAAA,GAAY,IAAI,kBAAA,CAAmB;AAAA,QACvC,IAAA,EAAM,YAAA;AAAA,QACN,OAAA,EAAS,mBAAA;AAAA,UACP,MAAA;AAAA,UACA,kBAAkB,MAAM,CAAA,CAAA,EAAI,QAAQ,CAAA,oBAAA,EAAuB,SAAS,MAAM,CAAA;AAAA,SAC5E;AAAA,QACA,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,QAAA;AAAA,QACA,MAAA;AAAA,QACA,SAAA;AAAA,QACA,IAAA,EAAM,iBAAiB,MAAM;AAAA,OAC9B,CAAA;AAED,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,UAAA,EAAY,iBAAA,CAAkB,QAAA,EAAU,MAAM,CAAA;AAAA,QAC9C,IAAA,EAAM,IAAA;AAAA,QACN,OAAO,SAAA,CAAU,OAAA;AAAA,QACjB,YAAA,EAAc,iBAAiB,SAAS,CAAA;AAAA,QACxC,GAAA,EAAK;AAAA,OACP;AAAA,IACF;AAIA,IAAA,MAAM,WAAA,GACJ,aAAA,IAAiB,MAAA,IAAU,aAAA,GACtB,cAAc,IAAA,GACd,MAAA;AACP,IAAA,MAAM,YAAA,GACJ,aAAA,IAAiB,OAAA,IAAW,aAAA,GACxB,OAAO,aAAA,CAAc,KAAA,KAAU,QAAA,IAAY,aAAA,CAAc,KAAA,KAAU,IAAA,GAChE,aAAA,CAAc,QACf,KAAA,CAAA,GACF,KAAA,CAAA;AAEN,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,IAAA;AAAA,MACJ,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,UAAA,EAAY,iBAAA,CAAkB,QAAA,EAAU,MAAM,CAAA;AAAA,MAC9C,MAAM,WAAA,IAAe,IAAA;AAAA,MACrB,KAAA,EAAO,YAAA;AAAA,MACP,KAAA,EAAO,KAAA,CAAA;AAAA,MACP,YAAA,EAAc,IAAA;AAAA,MACd,GAAA,EAAK;AAAA,KACP;AAAA,EACF,SAAS,SAAA,EAAW;AAClB,IAAA,MAAM,UAAU,SAAA,YAAqB,KAAA,GAAQ,SAAA,CAAU,OAAA,GAAU,OAAO,SAAS,CAAA;AACjF,IAAA,MAAM,YAAA,GAAe,IAAI,kBAAA,CAAmB;AAAA,MAC1C,IAAA,EAAM,eAAA;AAAA,MACN,SAAS,CAAA,4BAAA,EAA+B,MAAM,CAAA,CAAA,EAAI,QAAQ,KAAK,OAAO,CAAA,CAAA;AAAA,MACtE,QAAA;AAAA,MACA,MAAA;AAAA,MACA,KAAA,EAAO,OAAA;AAAA,MACP,IAAA,EAAM;AAAA,KACP,CAAA;AACD,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,MAAA,EAAQ,CAAA;AAAA,MACR,UAAA,EAAY,IAAA;AAAA,MACZ,IAAA,EAAM,IAAA;AAAA,MACN,OAAO,YAAA,CAAa,OAAA;AAAA,MACpB,YAAA,EAAc,iBAAiB,YAAY,CAAA;AAAA,MAC3C,GAAA,EAAK;AAAA,KACP;AAAA,EACF;AACF;AAkCO,SAAS,yBAAA,CACd,MAAA,GAAmC,EAAC,EACf;AACrB,EAAA,MAAM,iBAAA,GAAoB,qBAAA,CAAsB,MAAA,CAAO,OAAO,CAAA;AAC9D,EAAA,MAAM,gBAAA,GAA6C;AAAA,IACjD,GAAG,MAAA;AAAA,IACH,OAAA,EAAS;AAAA,GACX;AAEA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,iBAAA;AAAA,IACT,aAAa,OAAA,EAAS;AACpB,MAAA,OAAO,YAAA,CAAa,kBAAkB,OAAO,CAAA;AAAA,IAC/C,CAAA;AAAA,IACA,iBAAiB,OAAA,EAAS;AACxB,MAAA,OAAO,sBAAA;AAAA,QACL,iBAAA;AAAA,QACA,aAAa,gBAAgB,CAAA;AAAA,QAC7B;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,YAAA,CAAa,SAAS,OAAA,EAAS;AAC7B,MAAA,OAAO,UAAA,CAAW,gBAAA,EAAkB,gBAAA,EAAkB,MAAA,EAAQ,SAAS,OAAO,CAAA;AAAA,IAChF,CAAA;AAAA,IACA,aAAA,CAAc,SAAS,OAAA,EAAS;AAC9B,MAAA,OAAO,UAAA,CAAW,gBAAA,EAAkB,iBAAA,EAAmB,KAAA,EAAO,SAAS,OAAO,CAAA;AAAA,IAChF,CAAA;AAAA,IACA,aAAA,CAAc,SAAS,OAAA,EAAS;AAC9B,MAAA,OAAO,UAAA,CAAW,gBAAA,EAAkB,iBAAA,EAAmB,MAAA,EAAQ,SAAS,OAAO,CAAA;AAAA,IACjF,CAAA;AAAA,IACA,aAAA,CAAc,SAAS,OAAA,EAAS;AAC9B,MAAA,OAAO,UAAA,CAAW,gBAAA,EAAkB,iBAAA,EAAmB,QAAA,EAAU,SAAS,OAAO,CAAA;AAAA,IACnF,CAAA;AAAA,IACA,UAAA,CAAW,SAAS,OAAA,EAAS;AAC3B,MAAA,IAAI,SAAS,GAAA,EAAK;AAChB,QAAA,MAAM,QAAA,GAAW,oBAAoB,OAAO,CAAA;AAC5C,QAAA,OAAO,UAAA,CAAW,gBAAA,EAAkB,QAAA,EAAU,KAAA,EAAO,MAAM,OAAO,CAAA;AAAA,MACpE;AACA,MAAA,OAAO,UAAA,CAAW,gBAAA,EAAkB,cAAA,EAAgB,MAAA,EAAQ,SAAS,OAAO,CAAA;AAAA,IAC9E,CAAA;AAAA,IACA,YAAA,CAAa,SAAS,OAAA,EAAS;AAC7B,MAAA,OAAO,UAAA,CAAW,gBAAA,EAAkB,gBAAA,EAAkB,MAAA,EAAQ,SAAS,OAAO,CAAA;AAAA,IAChF;AAAA,GACF;AACF;;;ACnvBA,IAAM,yBAAA,GAA4B,0BAAA;AAClC,IAAM,4BAAA,GAA+B,uDAAA;AACrC,IAAM,iBAAA,GAAoB,mEAAA;AAC1B,IAAM,sBAAA,GAAyB,6DAAA;AAE/B,SAAS,uBAAuBC,WAAAA,EAA4B;AAC1D,EAAA,OAAO,CAAA,CAAA,EAAIA,WAAAA,CAAW,OAAA,CAAQ,IAAA,EAAM,IAAI,CAAC,CAAA,CAAA,CAAA;AAC3C;AAEA,SAAS,4BACP,KAAA,EAC4D;AAC5D,EAAA,MAAM,kBAAA,GAAqB,sBAAA,CAAuB,IAAA,CAAK,KAAK,CAAA;AAC5D,EAAA,IAAI,kBAAA,EAAoB;AACtB,IAAA,MAAM,GAAGC,gBAAAA,EAAiBC,eAAc,CAAA,GAAI,kBAAA;AAC5C,IAAA,IAAI,6BAA6B,IAAA,CAAKA,eAAc,KAAK,yBAAA,CAA0B,IAAA,CAAKD,gBAAe,CAAA,EAAG;AACxG,MAAA,OAAO,EAAE,cAAA,EAAAC,eAAAA,EAAgB,eAAA,EAAAD,gBAAAA,EAAgB;AAAA,IAC3C;AAAA,EACF;AAEA,EAAA,MAAM,aAAA,GAAgB,iBAAA,CAAkB,IAAA,CAAK,KAAK,CAAA;AAClD,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,GAAG,cAAA,EAAgB,eAAe,CAAA,GAAI,aAAA;AAC5C,EAAA,IAAI,CAAC,6BAA6B,IAAA,CAAK,cAAc,KAAK,CAAC,yBAAA,CAA0B,IAAA,CAAK,eAAe,CAAA,EAAG;AAC1G,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,EAAE,gBAAgB,eAAA,EAAgB;AAC3C;AAKO,SAAS,yBAAyBD,WAAAA,EAA4B;AACnE,EAAA,OAAOA,WAAAA,CACJ,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAA,OAAA,KAAW,sBAAA,CAAuB,OAAO,CAAC,CAAA,CAC9C,IAAA,CAAK,GAAG,CAAA;AACb;AAEA,SAAS,iBAAiB,KAAA,EAAuB;AAC/C,EAAA,IAAI,KAAA,KAAU,KAAK,OAAO,KAAA;AAC1B,EAAA,IAAI,4BAAA,CAA6B,IAAA,CAAK,KAAK,CAAA,EAAG;AAC5C,IAAA,OAAO,yBAAyB,KAAK,CAAA;AAAA,EACvC;AAEA,EAAA,MAAM,iBAAA,GAAoB,4BAA4B,KAAK,CAAA;AAC3D,EAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,EAAE,cAAA,EAAgB,eAAA,EAAgB,GAAI,iBAAA;AAC5C,EAAA,OAAO,GAAG,wBAAA,CAAyB,cAAc,CAAC,CAAA,IAAA,EAAO,sBAAA,CAAuB,eAAe,CAAC,CAAA,CAAA;AAClG;AAEO,SAAS,uBAAuB,KAAA,EAAuB;AAC5D,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,IAAI,CAAC,OAAA,IAAW,OAAA,KAAY,GAAA,SAAY,OAAA,IAAW,GAAA;AAEnD,EAAA,MAAM,kBAAA,GAAqB,sBAAA,CAAuB,IAAA,CAAK,OAAO,CAAA;AAC9D,EAAA,IAAI,kBAAA,EAAoB;AACtB,IAAA,MAAM,GAAG,eAAA,EAAiB,cAAc,CAAA,GAAI,kBAAA;AAC5C,IAAA,OAAO,GAAG,wBAAA,CAAyB,cAAc,CAAC,CAAA,IAAA,EAAO,sBAAA,CAAuB,eAAe,CAAC,CAAA,CAAA;AAAA,EAClG;AAEA,EAAA,OAAO,yBAAyB,OAAO,CAAA;AACzC;AAEA,SAAS,kBAAkB,KAAA,EAAwB;AACjD,EAAA,IAAI,KAAA,KAAU,KAAK,OAAO,IAAA;AAC1B,EAAA,IAAI,4BAAA,CAA6B,IAAA,CAAK,KAAK,CAAA,EAAG,OAAO,IAAA;AACrD,EAAA,OAAO,2BAAA,CAA4B,KAAK,CAAA,IAAK,IAAA;AAC/C;AAEA,SAAS,4BAA4B,KAAA,EAAgC;AACnE,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,IAAI,YAAA,GAAe,KAAA;AACnB,EAAA,IAAI,YAAA,GAAe,KAAA;AACnB,EAAA,IAAI,KAAA,GAAQ,CAAA;AAEZ,EAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,KAAA,CAAM,MAAA,EAAQ,SAAS,CAAA,EAAG;AACpD,IAAA,MAAM,IAAA,GAAO,MAAM,KAAK,CAAA;AACxB,IAAA,MAAM,IAAA,GAAO,QAAQ,CAAA,GAAI,KAAA,CAAM,SAAS,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA,GAAI,EAAA;AAE3D,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,MAAA,IAAU,IAAA;AACV,MAAA,IAAI,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,EAAK;AAChC,QAAA,MAAA,IAAU,IAAA;AACV,QAAA,KAAA,IAAS,CAAA;AACT,QAAA;AAAA,MACF;AACA,MAAA,IAAI,SAAS,GAAA,EAAK;AAChB,QAAA,YAAA,GAAe,KAAA;AAAA,MACjB;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,MAAA,IAAU,IAAA;AACV,MAAA,IAAI,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,EAAK;AAChC,QAAA,MAAA,IAAU,IAAA;AACV,QAAA,KAAA,IAAS,CAAA;AACT,QAAA;AAAA,MACF;AACA,MAAA,IAAI,SAAS,GAAA,EAAK;AAChB,QAAA,YAAA,GAAe,KAAA;AAAA,MACjB;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,YAAA,GAAe,IAAA;AACf,MAAA,MAAA,IAAU,IAAA;AACV,MAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,YAAA,GAAe,IAAA;AACf,MAAA,MAAA,IAAU,IAAA;AACV,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,KAAA,IAAS,CAAA;AACT,MAAA,MAAA,IAAU,IAAA;AACV,MAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,KAAA,IAAS,CAAA;AACT,MAAA,IAAI,KAAA,GAAQ,GAAG,OAAO,IAAA;AACtB,MAAA,MAAA,IAAU,IAAA;AACV,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,KAAS,GAAA,IAAO,KAAA,KAAU,CAAA,EAAG;AAC/B,MAAA,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,IAAA,EAAM,CAAA;AACxB,MAAA,MAAA,GAAS,EAAA;AACT,MAAA;AAAA,IACF;AAEA,IAAA,MAAA,IAAU,IAAA;AAAA,EACZ;AAEA,EAAA,IAAI,YAAA,IAAgB,YAAA,IAAgB,KAAA,KAAU,CAAA,EAAG;AAC/C,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,MAAA,CAAO,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA,EAAG;AAC5B,IAAA,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,IAAA,EAAM,CAAA;AAAA,EAC1B;AAEA,EAAA,OAAO,KAAA;AACT;AASO,SAAS,6BAA6B,OAAA,EAAyB;AACpE,EAAA,MAAM,OAAA,GAAU,QAAQ,IAAA,EAAK;AAC7B,EAAA,IAAI,CAAC,OAAA,IAAW,OAAA,KAAY,GAAA,SAAY,OAAA,IAAW,GAAA;AAEnD,EAAA,MAAM,MAAA,GAAS,4BAA4B,OAAO,CAAA;AAClD,EAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG;AAClC,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,iBAAiB,CAAA,EAAG;AACpC,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,OAAO,MAAA,CAAO,GAAA,CAAI,gBAAgB,CAAA,CAAE,KAAK,IAAI,CAAA;AAC/C;AAWA,IAAM,oBAAN,MAAiD;AAAA,EACtC,QAAA;AAAA,EAET,YAAY,QAAA,EAAoB;AAC9B,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAAA,EAClB;AAAA,EAEA,KAAA,GAAgB;AACd,IAAA,OAAO,KAAK,QAAA,CAAS,GAAA,CAAI,sBAAsB,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,EAC3D;AAAA,EAEA,QAAA,GAAmB;AACjB,IAAA,OAAO,KAAK,KAAA,EAAM;AAAA,EACpB;AACF,CAAA;AAKO,SAAS,cAAc,QAAA,EAAmC;AAC/D,EAAA,MAAM,mBAAmB,QAAA,CACtB,OAAA,CAAQ,aAAW,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAC,CAAA,CACrC,IAAI,CAAA,OAAA,KAAW,OAAA,CAAQ,MAAM,CAAA,CAC7B,OAAO,CAAA,OAAA,KAAW,OAAA,CAAQ,SAAS,CAAC,CAAA;AAEvC,EAAA,OAAO,IAAI,kBAAkB,gBAAgB,CAAA;AAC/C;;;AC/MO,IAAM,mCAAmC,EAAA,GAAK;AAC9C,IAAM,gCAAA,GAAmC;AACzC,IAAM,kCAAA,GAAqC;AAC3C,IAAM,wCAAA,GAA2C;AAEjD,IAAM,wBAAA,GAA2B;AAAA,EACtC,iBAAA,EAAmB,gCAAA;AAAA,EACnB,iBAAA,EAAmB,gCAAA;AAAA,EACnB,oBAAA,EAAsB,kCAAA;AAAA,EACtB,yBAAA,EAA2B;AAC7B;AAEA,SAAS,+BAA+B,MAAA,EAAiB;AACvD,EAAA,MAAM,UAAA,GAAa,QAAQ,IAAA,EAAK;AAChC,EAAA,OAAO,UAAA,IAAc,UAAA,CAAW,MAAA,GAAS,CAAA,GACrC,UAAA,GACA,4CAAA;AACN;AAEO,SAAS,iCAAA,CACd,WACA,MAAA,EAC+B;AAC/B,EAAA,MAAM,KAAA,GAAQ,+BAA+B,MAAM,CAAA;AACnD,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC7B,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,6BAAA,CAA+B,CAAA;AAAA,EACzD;AAEA,EAAA,IAAI,SAAA,CAAU,SAAS,kCAAA,EAAoC;AACzD,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,EAAG,KAAK,CAAA,0BAAA,EAA6B,kCAAkC,CAAA,SAAA;AAAA,KACzE;AAAA,EACF;AAEA,EAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,QAAA,EAAU,KAAA,KAAU;AACrC,IAAA,IAAI,OAAO,aAAa,QAAA,EAAU;AAChC,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,GAAG,KAAK,CAAA,qCAAA,EAAwC,OAAO,QAAQ,aAAa,KAAK,CAAA,CAAA;AAAA,OACnF;AAAA,IACF;AAEA,IAAA,IAAI,QAAA,CAAS,SAAS,wCAAA,EAA0C;AAC9D,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,EAAG,KAAK,CAAA,oCAAA,EAAuC,wCAAwC,yBAAyB,QAAA,CAAS,MAAM,wBAAwB,KAAK,CAAA,CAAA;AAAA,OAC9J;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACH;;;ACZA,IAAI,6BAAA;AAEJ,SAASG,UAAS,KAAA,EAAgD;AAChE,EAAA,OAAO,OAAA,CAAQ,KAAK,CAAA,IAAK,OAAO,UAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,WAAW,KAAA,EAA0D;AAC5E,EAAA,OAAO,OAAO,KAAA,KAAU,UAAA;AAC1B;AAEA,SAAS,oBAAoB,KAAA,EAAoC;AAC/D,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,MAAA;AACtC,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,YAAA,GAAe;AACtB,EAAA,OAAA,iBAAO,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAChC;AAEA,SAAS,mBAAA,CACP,OAAA,EACA,KAAA,EACA,KAAA,GAAsE,EAAC,EACvE;AACA,EAAA,IAAI,CAAC,OAAA,EAAS;AACd,EAAA,IAAI;AACF,IAAA,OAAA,CAAQ;AAAA,MACN,KAAA;AAAA,MACA,WAAW,YAAA,EAAa;AAAA,MACxB,GAAG;AAAA,KACJ,CAAA;AAAA,EACH,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAEA,SAAS,mBAAA,CACP,OACA,QAAA,EACiC;AACjC,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,MAAA,EAAQ,KAAA,CAAM,MAAA,IAAU,QAAA,EAAU,MAAA;AAAA,IAClC,gBAAA,EAAkB,KAAA,CAAM,gBAAA,IAAoB,QAAA,EAAU;AAAA,GACxD;AACF;AAEA,SAAS,oBACP,OAAA,EACgD;AAChD,EAAA,IAAI,CAAC,SAAS,OAAO,MAAA;AACrB,EAAA,OAAO;AAAA,IACL,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,SAAS,OAAA,CAAQ,OAAA;AAAA,IACjB,KAAA,EAAO,OAAA,IAAW,OAAA,GAAU,OAAA,CAAQ,KAAA,GAAQ;AAAA,GAC9C;AACF;AAEA,eAAe,6BAAA,GAAiE;AAC9E,EAAA,IAAI,CAAC,6BAAA,EAA+B;AAClC,IAAA,6BAAA,GAAA,CAAiC,YAAY;AAC3C,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAM,OAAO,qBAAqB,CAAA;AACjD,QAAA,IAAI,CAAC,UAAA,CAAW,MAAA,CAAO,MAAM,CAAA,EAAG;AAC9B,UAAA,MAAM,IAAI,MAAM,4BAA4B,CAAA;AAAA,QAC9C;AACA,QAAA,OAAO;AAAA,UACL,QAAQ,MAAA,CAAO,MAAA;AAAA,UACf,aAAa,UAAA,CAAW,MAAA,CAAO,WAAW,CAAA,GACrC,OAAO,WAAA,GACR,KAAA,CAAA;AAAA,UACJ,QAAQ,UAAA,CAAW,MAAA,CAAO,MAAM,CAAA,GAC3B,OAAO,MAAA,GACR,KAAA;AAAA,SACN;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,6IAA6I,OAAO,CAAA;AAAA,SACtJ;AAAA,MACF;AAAA,IACF,CAAA,GAAG;AAAA,EACL;AAEA,EAAA,IAAI,CAAC,6BAAA,EAA+B;AAClC,IAAA,MAAM,IAAI,MAAM,kDAAkD,CAAA;AAAA,EACpE;AAEA,EAAA,OAAO,6BAAA;AACT;AAEA,eAAe,yBAAyB,KAAA,EAA0D;AAChG,EAAA,IAAI,KAAA,CAAM,WAAW,IAAA,EAAM;AACzB,IAAA,OAAO,KAAA,CAAM,OAAA;AAAA,EACf;AACA,EAAA,IAAI,CAAC,MAAM,SAAA,EAAW;AACpB,IAAA,MAAM,IAAI,MAAM,8DAA8D,CAAA;AAAA,EAChF;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,WAAA,GAAc,MAAM,OAAO,OAAO,CAAA;AACxC,IAAA,IAAI,OAAO,WAAA,CAAY,aAAA,KAAkB,UAAA,EAAY;AACnD,MAAA,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAAA,IAClE;AACA,IAAA,OAAO,WAAA,CAAY,aAAA;AAAA,MACjB,KAAA,CAAM,SAAA;AAAA,MACN,KAAA,CAAM,SAAS;AAAC,KAClB;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,gHAAgH,OAAO,CAAA;AAAA,KACzH;AAAA,EACF;AACF;AAEO,SAAS,yBAAA,CAGd,SAAA,EACA,KAAA,EACA,SAAA,GAAsF,EAAC,EACtD;AACjC,EAAA,OAAO;AAAA,IACL,GAAG,SAAA;AAAA,IACH,SAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,SAAS,wBAGd,UAAA,EACwC;AACxC,EAAA,MAAM,QAAyD,CAAC,KAAA,EAAO,cACrE,yBAAA,CAA0B,UAAA,CAAW,WAAW,KAAA,EAAO;AAAA,IACrD,GAAG,UAAA,CAAW,QAAA;AAAA,IACd,GAAG;AAAA,GACJ,CAAA;AAEH,EAAA,OAAO;AAAA,IACL,WAAW,UAAA,CAAW,SAAA;AAAA,IACtB,KAAA;AAAA,IACA,gBAAA,EAAkB,CAAC,KAAA,KAAoE;AACrF,MAAA,MAAM,WAAA,GAAc,KAAA,CAAM,WAAA,IAAe,UAAA,CAAW,WAAA;AACpD,MAAA,MAAM,eAAA,GAAkB,KAAA,CAAM,eAAA,IAAmB,UAAA,CAAW,eAAA;AAC5D,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,MAAM,IAAI,MAAM,+DAA+D,CAAA;AAAA,MACjF;AACA,MAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,QAAA,MAAM,IAAI,MAAM,mEAAmE,CAAA;AAAA,MACrF;AAEA,MAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,GAAG,MAAK,GAAI,KAAA;AAClD,MAAA,OAAO;AAAA,QACL,GAAG,IAAA;AAAA,QACH,WAAA;AAAA,QACA,eAAA;AAAA,QACA,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,cAAc;AAAA,OACpC;AAAA,IACF,CAAA;AAAA,IACA,gBAAA,EAAkB,CAAC,KAAA,KAAoE;AACrF,MAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,GAAG,MAAK,GAAI,KAAA;AAClD,MAAA,OAAO;AAAA,QACL,GAAG,IAAA;AAAA,QACH,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,cAAc;AAAA,OACpC;AAAA,IACF;AAAA,GACF;AACF;AAEA,eAAsB,sBAAA,CACpB,OACA,OAAA,EACuC;AACvC,EAAA,IAAI,CAACA,SAAAA,CAAS,KAAK,CAAA,EAAG;AACpB,IAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAAA,EACzD;AAEA,EAAA,MAAM,cAAA,GAAiB,oBAAoB,OAAO,CAAA;AAClD,EAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,EAAI;AACvB,EAAA,mBAAA,CAAoB,cAAA,EAAgB,SAAS,cAAA,EAAgB;AAAA,IAC3D,OAAO,cAAA,EAAgB,KAAA;AAAA,IACvB,OAAA,EAAS;AAAA,GACV,CAAA;AAED,EAAA,IAAI;AACF,IAAA,MAAM,eAAA,GAAkB,mBAAA,CAAoB,KAAA,EAAO,cAAA,EAAgB,QAAQ,CAAA;AAC3E,IAAA,MAAM,OAAA,GAAU,MAAM,wBAAA,CAAyB,eAAe,CAAA;AAC9D,IAAA,MAAM,YAAA,GAAe,MAAM,6BAAA,EAA8B;AACzD,IAAA,MAAM,SAAA,GAAY,MAAM,YAAA,CAAa,MAAA,CAAO,OAAO,CAAA;AACnD,IAAA,MAAM,eAAe,OAAO,SAAA,KAAc,WAAW,SAAA,GAAY,MAAA,CAAO,aAAa,EAAE,CAAA;AACvF,IAAA,IAAI,CAAC,YAAA,CAAa,IAAA,EAAK,EAAG;AACxB,MAAA,MAAM,IAAI,MAAM,oDAAoD,CAAA;AAAA,IACtE;AAEA,IAAA,IAAI,IAAA,GAAO,YAAA;AACX,IAAA,IAAI,eAAA,CAAgB,MAAA,IAAU,YAAA,CAAa,MAAA,EAAQ;AACjD,MAAA,MAAM,WAAA,GAAc,MAAM,YAAA,CAAa,MAAA,CAAO,YAAY,CAAA;AAC1D,MAAA,IAAI,OAAO,WAAA,KAAgB,QAAA,IAAY,YAAY,IAAA,EAAK,CAAE,SAAS,CAAA,EAAG;AACpE,QAAA,IAAA,GAAO,WAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,MAAM,YAAA,GAAe,mBAAA,CAAoB,eAAA,CAAgB,IAAI,CAAA;AAC7D,IAAA,IAAI,iBAAiB,KAAA,CAAA,EAAW;AAC9B,MAAA,mBAAA,CAAoB,cAAA,EAAgB,SAAS,gBAAA,EAAkB;AAAA,QAC7D,OAAO,cAAA,EAAgB,KAAA;AAAA,QACvB,UAAA,EAAY,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA;AAAA,QACzB,OAAA,EAAS;AAAA,OACV,CAAA;AACD,MAAA,OAAO;AAAA,QACL,IAAA;AAAA,QACA,IAAA,EAAM;AAAA,OACR;AAAA,IACF;AAEA,IAAA,IAAI,eAAA,CAAgB,gBAAA,KAAqB,KAAA,IAAS,CAAC,aAAa,WAAA,EAAa;AAC3E,MAAA,mBAAA,CAAoB,cAAA,EAAgB,SAAS,gBAAA,EAAkB;AAAA,QAC7D,OAAO,cAAA,EAAgB,KAAA;AAAA,QACvB,UAAA,EAAY,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA;AAAA,QACzB,OAAA,EAAS;AAAA,OACV,CAAA;AACD,MAAA,OAAO,EAAE,IAAA,EAAK;AAAA,IAChB;AAEA,IAAA,MAAM,cAAA,GAAiB,MAAM,YAAA,CAAa,WAAA,CAAY,IAAI,CAAA;AAC1D,IAAA,MAAM,SAAA,GAAY,oBAAoB,cAAc,CAAA;AACpD,IAAA,mBAAA,CAAoB,cAAA,EAAgB,SAAS,gBAAA,EAAkB;AAAA,MAC7D,OAAO,cAAA,EAAgB,KAAA;AAAA,MACvB,UAAA,EAAY,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA;AAAA,MACzB,OAAA,EAAS,YAAY,8CAAA,GAAiD;AAAA,KACvE,CAAA;AACD,IAAA,IAAI,cAAc,KAAA,CAAA,EAAW;AAC3B,MAAA,OAAO,EAAE,IAAA,EAAK;AAAA,IAChB;AAEA,IAAA,OAAO;AAAA,MACL,IAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACR;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,IAAA,mBAAA,CAAoB,cAAA,EAAgB,SAAS,cAAA,EAAgB;AAAA,MAC3D,OAAO,cAAA,EAAgB,KAAA;AAAA,MACvB,UAAA,EAAY,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA;AAAA,MACzB,KAAA,EAAO,OAAA;AAAA,MACP,OAAA,EAAS;AAAA,KACV,CAAA;AACD,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AAEA,eAAsB,8BAAA,CAGpB,KAAA,EACA,MAAA,EACA,OAAA,EACgC;AAChC,EAAA,MAAM,EAAE,KAAA,EAAO,GAAG,mBAAA,EAAoB,GAAI,KAAA;AAC1C,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,mBAAA;AAAA,EACT;AAEA,EAAA,MAAM,QAAA,GAAW,MAAM,sBAAA,CAAuB,KAAA,EAAO,OAAO,CAAA;AAC5D,EAAA,MAAM,OAAA,GAAiC;AAAA,IACrC,GAAI;AAAA,GACN;AAEA,EAAA,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAA,GAAI,QAAA,CAAS,IAAA;AAErC,EAAA,MAAM,gBAAA,GAAmB,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAA;AACjD,EAAA,IACE,QAAA,CAAS,SAAS,MAAA,KACjB,gBAAA,KAAqB,UAAa,gBAAA,KAAqB,IAAA,IAAQ,qBAAqB,EAAA,CAAA,EACrF;AACA,IAAA,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAA,GAAI,QAAA,CAAS,IAAA;AAAA,EACvC;AAEA,EAAA,IACE,MAAA,CAAO,cAAA,KACN,OAAA,CAAQ,MAAA,CAAO,cAAc,CAAA,KAAM,MAAA,IAAa,OAAA,CAAQ,MAAA,CAAO,cAAc,CAAA,KAAM,IAAA,CAAA,IACpFA,SAAAA,CAAS,KAAA,CAAM,KAAK,CAAA,EACpB;AACA,IAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAChD,IAAA,IAAI,gBAAA,CAAiB,SAAS,CAAA,EAAG;AAC/B,MAAA,OAAA,CAAQ,MAAA,CAAO,cAAc,CAAA,GAAI,gBAAA;AAAA,IACnC;AAAA,EACF;AAEA,EAAA,OAAO,OAAA;AACT;;;AC/PA,IAAM,qBAAA,GAAwB,gCAAA;AAC9B,IAAMC,SAAAA,GAAW,yBAAA;AACjB,IAAMC,iBAAAA,GAAmB,oBAAoBD,SAAQ,CAAA;AACrD,IAAME,sBAAAA,GAAwB,UAAA;AAgB9B,SAAS,iBAAiB,OAAA,EAA0B;AAClD,EAAA,OAAA,CAAQ,OAAA,IAAW,qBAAA,EAAuB,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAC7D;AAEA,SAASH,UAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAA,CAAQ,KAAK,CAAA,IAAK,OAAO,UAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAC5E;AAEA,SAASI,sBAAqB,KAAA,EAA2C;AACvE,EAAA,OAAO,QAAQ,KAAA,GAAQ,MAAA;AACzB;AAEA,SAASC,0BAAyB,IAAA,EAAuB;AACvD,EAAA,OAAO,IAAA,CAAK,aAAY,KAAM,eAAA;AAChC;AAEA,SAASC,kBAAAA,CAAkB,SAAiB,WAAA,EAA4B;AACtE,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,EAAiB,WAAA,EAAa,KAAA,EAAM;AAAA,EACvD;AAEA,EAAA,MAAM,0BACJ,WAAA,EAAa,WAAA,EAAY,CAAE,QAAA,CAAS,kBAAkB,CAAA,IAAK,KAAA;AAC7D,EAAA,MAAM,SAAA,GACJ,2BAA2B,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,IAAK,OAAA,CAAQ,WAAW,GAAG,CAAA;AAE9E,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAoB,WAAA,EAAa,KAAA,EAAM;AAAA,EAC1D;AAEA,EAAA,IAAI;AACF,IAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,CAAK,MAAM,OAAO,CAAA,EAAc,aAAa,KAAA,EAAM;AAAA,EACtE,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAoB,WAAA,EAAa,IAAA,EAAK;AAAA,EACzD;AACF;AAEA,SAASC,kBAAiB,OAAA,EAAsC;AAC9D,EAAA,OACE,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,IAC1B,OAAA,CAAQ,GAAA,CAAI,kBAAkB,CAAA,IAC9B,OAAA,CAAQ,GAAA,CAAI,qBAAqB,CAAA,IACjC,MAAA;AAEJ;AAEA,SAASC,oBAAAA,CAAoB,SAAkB,QAAA,EAAkB;AAC/D,EAAA,IAAIR,SAAAA,CAAS,OAAO,CAAA,EAAG;AACrB,IAAA,MAAM,oBAAoB,CAAC,OAAA,CAAQ,OAAO,OAAA,CAAQ,OAAA,EAAS,QAAQ,OAAO,CAAA;AAC1E,IAAA,KAAA,MAAW,aAAa,iBAAA,EAAmB;AACzC,MAAA,IAAI,OAAO,SAAA,KAAc,QAAA,IAAY,UAAU,IAAA,EAAK,CAAE,SAAS,CAAA,EAAG;AAChE,QAAA,OAAO,UAAU,IAAA,EAAK;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,OAAO,OAAA,KAAY,QAAA,IAAY,QAAQ,IAAA,EAAK,CAAE,SAAS,CAAA,EAAG;AAC5D,IAAA,OAAO,QAAQ,IAAA,EAAK;AAAA,EACtB;AAEA,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,eAAe,KAAA,EAAmD;AACzE,EAAA,OAAO;AAAA,IACL,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,UAAU,KAAA,CAAM,QAAA;AAAA,IAChB,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,OAAO,KAAA,CAAM;AAAA,GACf;AACF;AAEA,SAAS,gBAAA,CACP,MACA,QAAA,EACmC;AACnC,EAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,QAAA,EAAU,OAAO,MAAA;AAC/B,EAAA,OAAO;AAAA,IACL,GAAG,IAAA;AAAA,IACH,GAAG,QAAA;AAAA,IACH,OAAA,EAAS;AAAA,MACP,GAAI,IAAA,EAAM,OAAA,IAAW,EAAC;AAAA,MACtB,GAAI,QAAA,EAAU,OAAA,IAAW;AAAC;AAC5B,GACF;AACF;AAEA,SAAS,gBAAA,CACP,MAAA,EACA,MAAA,EACA,SAAA,EACA,SAAA,EACM;AACN,EAAA,IAAI,EAAE,aAAa,MAAA,CAAA,EAAS;AAC1B,IAAA;AAAA,EACF;AACA,EAAA,MAAM,KAAA,GAAQ,OAAO,SAAS,CAAA;AAC9B,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,MAAA,CAAO,SAAS,CAAA,GAAI,KAAA;AAAA,EACtB;AACF;AAEA,SAAS,mCAAmC,OAAA,EAA2D;AACrG,EAAA,MAAM,UAAA,GAAa,EAAE,GAAG,OAAA,EAAQ;AAEhC,EAAA,gBAAA,CAAiB,UAAA,EAAY,OAAA,EAAS,cAAA,EAAgB,aAAa,CAAA;AACnE,EAAA,gBAAA,CAAiB,UAAA,EAAY,OAAA,EAAS,YAAA,EAAc,WAAW,CAAA;AAC/D,EAAA,gBAAA,CAAiB,UAAA,EAAY,OAAA,EAAS,kBAAA,EAAoB,iBAAiB,CAAA;AAC3E,EAAA,gBAAA,CAAiB,UAAA,EAAY,OAAA,EAAS,eAAA,EAAiB,cAAc,CAAA;AACrE,EAAA,gBAAA,CAAiB,UAAA,EAAY,OAAA,EAAS,eAAA,EAAiB,cAAc,CAAA;AACrE,EAAA,gBAAA,CAAiB,UAAA,EAAY,OAAA,EAAS,mBAAA,EAAqB,kBAAkB,CAAA;AAC7E,EAAA,gBAAA,CAAiB,UAAA,EAAY,OAAA,EAAS,yBAAA,EAA2B,uBAAuB,CAAA;AACxF,EAAA,gBAAA,CAAiB,UAAA,EAAY,OAAA,EAAS,WAAA,EAAa,UAAU,CAAA;AAE7D,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,uCAEN,KAAA,EAAuB;AACxB,EAAA,MAAM,OAAA,GAAU,KAAA;AAChB,EAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,OAAA,EAAQ;AAEnC,EAAA,gBAAA,CAAiB,aAAA,EAAe,OAAA,EAAS,aAAA,EAAe,cAAc,CAAA;AACtE,EAAA,gBAAA,CAAiB,aAAA,EAAe,OAAA,EAAS,WAAA,EAAa,YAAY,CAAA;AAClE,EAAA,gBAAA,CAAiB,aAAA,EAAe,OAAA,EAAS,iBAAA,EAAmB,kBAAkB,CAAA;AAC9E,EAAA,gBAAA,CAAiB,aAAA,EAAe,OAAA,EAAS,cAAA,EAAgB,eAAe,CAAA;AACxE,EAAA,gBAAA,CAAiB,aAAA,EAAe,OAAA,EAAS,cAAA,EAAgB,eAAe,CAAA;AACxE,EAAA,gBAAA,CAAiB,aAAA,EAAe,OAAA,EAAS,kBAAA,EAAoB,mBAAmB,CAAA;AAChF,EAAA,gBAAA,CAAiB,aAAA,EAAe,OAAA,EAAS,uBAAA,EAAyB,yBAAyB,CAAA;AAC3F,EAAA,gBAAA,CAAiB,aAAA,EAAe,OAAA,EAAS,UAAA,EAAY,WAAW,CAAA;AAEhE,EAAA,OAAO,aAAA;AACT;AAEA,SAAS,uCAAuC,OAAA,EAA2D;AACzG,EAAA,MAAM,UAAA,GAAa,EAAE,GAAG,OAAA,EAAQ;AAEhC,EAAA,gBAAA,CAAiB,UAAA,EAAY,OAAA,EAAS,aAAA,EAAe,YAAY,CAAA;AACjE,EAAA,gBAAA,CAAiB,UAAA,EAAY,OAAA,EAAS,iBAAA,EAAmB,gBAAgB,CAAA;AACzE,EAAA,gBAAA,CAAiB,UAAA,EAAY,OAAA,EAAS,kBAAA,EAAoB,iBAAiB,CAAA;AAC3E,EAAA,gBAAA,CAAiB,UAAA,EAAY,OAAA,EAAS,SAAA,EAAW,QAAQ,CAAA;AACzD,EAAA,gBAAA,CAAiB,UAAA,EAAY,OAAA,EAAS,iBAAA,EAAmB,gBAAgB,CAAA;AACzE,EAAA,gBAAA,CAAiB,UAAA,EAAY,OAAA,EAAS,eAAA,EAAiB,cAAc,CAAA;AAErE,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,sBACP,aAAA,EACuB;AACvB,EAAA,IAAI,aAAA,CAAc,MAAA,KAAW,GAAA,IAAO,aAAA,CAAc,QAAQ,IAAA,EAAM;AAC9D,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,MAAA,EAAQ,cAAA;AAAA,MACR,MAAA,EAAQ,GAAA;AAAA,MACR,KAAA,EAAO,cAAc,KAAA,IAAS,cAAA;AAAA,MAC9B;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,KAAA;AAAA,IACJ,MAAA,EAAQ,gBAAA;AAAA,IACR,QAAQ,aAAA,CAAc,MAAA;AAAA,IACtB,KAAA,EAAO,cAAc,KAAA,IAAS,mCAAA;AAAA,IAC9B;AAAA,GACF;AACF;AAEA,SAAS,wBAAA,CACP,kBACA,aAAA,EACuB;AACvB,EAAA,IAAI,gBAAA,CAAiB,WAAW,GAAA,EAAK;AACnC,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,MAAA,EAAQ,cAAA;AAAA,MACR,MAAA,EAAQ,GAAA;AAAA,MACR,KAAA,EAAO,iBAAiB,KAAA,IAAS,cAAA;AAAA,MACjC,aAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,gBAAA,CAAiB,WAAW,GAAA,EAAK;AACnC,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,MAAA,EAAQ,WAAA;AAAA,MACR,MAAA,EAAQ,GAAA;AAAA,MACR,KAAA,EAAO,iBAAiB,KAAA,IAAS,WAAA;AAAA,MACjC,aAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,KAAA;AAAA,IACJ,MAAA,EAAQ,gBAAA;AAAA,IACR,QAAQ,gBAAA,CAAiB,MAAA;AAAA,IACzB,KAAA,EAAO,iBAAiB,KAAA,IAAS,oCAAA;AAAA,IACjC,aAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,oBAA0E,KAAA,EAAU;AAC3F,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,MAAA;AAAA,MACT,YAAA,EAAc;AAAA,KAChB;AAAA,EACF;AAEA,EAAA,MAAM,EAAE,YAAA,EAAc,GAAG,IAAA,EAAK,GAAI,KAAA;AAClC,EAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,IAAA,CAAK,IAAI,EAAE,MAAA,GAAS,CAAA;AAClD,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,iBAAiB,IAAA,GAAO,MAAA;AAAA,IACjC;AAAA,GACF;AACF;AAEA,SAASS,aAAAA,CACP,QACA,OAAA,EACwB;AACxB,EAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,MAAA,CAAO,YAAA,IAAgB,SAAS,YAAY,CAAA;AACzE,EAAA,MAAM,OAAA,GAAkC;AAAA,IACtC,cAAA,EAAgB,kBAAA;AAAA,IAChB,cAAA,EAAgBP;AAAA,GAClB;AAEA,EAAA,MAAM,MAAA,GAAS,OAAA,EAAS,MAAA,IAAU,MAAA,CAAO,MAAA;AACzC,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,OAAA,CAAQ,MAAA,GAAS,MAAA;AACjB,IAAA,OAAA,CAAQ,WAAW,CAAA,GAAI,MAAA;AAAA,EACzB;AAEA,EAAA,MAAM,WAAA,GAAc,OAAA,EAAS,WAAA,IAAe,MAAA,CAAO,WAAA;AACnD,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,OAAA,CAAQ,aAAA,GAAgB,UAAU,WAAW,CAAA,CAAA;AAAA,EAC/C;AAEA,EAAA,MAAM,MAAA,GAAS,OAAA,EAAS,MAAA,IAAU,MAAA,CAAO,MAAA;AACzC,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,OAAA,CAAQ,MAAA,GAAS,MAAA;AAAA,EACnB;AAEA,EAAA,MAAM,YAAA,GAAe,OAAA,EAAS,YAAA,IAAgB,MAAA,CAAO,YAAA;AACrD,EAAA,IAAI,YAAA,EAAc;AAChB,IAAA,OAAA,CAAQ,6BAA6B,CAAA,GAAI,YAAA;AAAA,EAC3C;AAEA,EAAA,MAAM,kBAAA,GAAqB;AAAA,IACzB,GAAI,MAAA,CAAO,OAAA,IAAW,EAAC;AAAA,IACvB,GAAI,OAAA,EAAS,OAAA,IAAW;AAAC,GAC3B;AAEA,EAAA,MAAA,CAAO,OAAA,CAAQ,kBAAkB,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AAC3D,IAAA,IAAI,YAAA,IAAgBG,yBAAAA,CAAyB,GAAG,CAAA,EAAG;AACjD,MAAA;AAAA,IACF;AACA,IAAA,MAAM,UAAA,GAAaD,sBAAqB,KAAK,CAAA;AAC7C,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,UAAA;AAAA,IACjB;AAAA,EACF,CAAC,CAAA;AAED,EAAA,IAAI,YAAA,EAAc;AAChB,IAAA,OAAA,CAAQ,eAAe,CAAA,GAAID,sBAAAA;AAAA,EAC7B;AAEA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,gBAAA,CAAiB,YAAA,EAA+B,GAAA,EAAa,KAAA,EAA6B;AACjG,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM;AAC3C,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,KAAA,CAAM,QAAQ,CAAA,IAAA,KAAQ;AACpB,MAAA,YAAA,CAAa,MAAA,CAAO,GAAA,EAAK,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,IACvC,CAAC,CAAA;AACD,IAAA;AAAA,EACF;AACA,EAAA,YAAA,CAAa,MAAA,CAAO,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AACxC;AAEA,SAAS,eAAA,CACP,OAAA,EACA,QAAA,EACA,KAAA,EACA;AACA,EAAA,MAAM,GAAA,GAAM,CAAA,EAAG,OAAO,CAAA,EAAG,QAAQ,CAAA,CAAA;AACjC,EAAA,IAAI,CAAC,SAAS,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,MAAA,KAAW,GAAG,OAAO,GAAA;AACtD,EAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,EAAA,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM,gBAAA,CAAiB,YAAA,EAAc,GAAA,EAAK,KAAK,CAAC,CAAA;AAC1F,EAAA,MAAM,SAAA,GAAY,aAAa,QAAA,EAAS;AACxC,EAAA,OAAO,SAAA,GAAY,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,GAAK,GAAA;AAC7C;AAEA,SAAS,mBAAmB,QAAA,EAAoD;AAC9E,EAAA,IAAI,QAAA,CAAS,UAAA,CAAW,kBAAkB,CAAA,EAAG;AAC3C,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,QAAQ,QAAA;AAAU,IAChB,KAAK,cAAA;AAAA,IACL,KAAK,gBAAA;AAAA,IACL,KAAK,eAAA;AAAA,IACL,KAAK,sBAAA;AAAA,IACL,KAAK,qBAAA;AAAA,IACL,KAAK,aAAA;AAAA,IACL,KAAK,aAAA;AAAA,IACL,KAAK,uBAAA;AAAA,IACL,KAAK,gBAAA;AAAA,IACL,KAAK,oCAAA;AAAA,IACL,KAAK,6BAAA;AAAA,IACL,KAAK,uBAAA;AAAA,IACL,KAAK,mBAAA;AAAA,IACL,KAAK,2BAAA;AAAA,IACL,KAAK,uBAAA;AAAA,IACL,KAAK,kBAAA;AAAA,IACL,KAAK,2BAAA;AAAA,IACL,KAAK,0BAAA;AAAA,IACL,KAAK,2BAAA;AAAA,IACL,KAAK,4BAAA;AAAA,IACL,KAAK,mBAAA;AAAA,IACL,KAAK,cAAA;AAAA,IACL,KAAK,eAAA;AAAA,IACL,KAAK,qCAAA;AAAA,IACL,KAAK,oBAAA;AAAA,IACL,KAAK,8BAAA;AAAA,IACL,KAAK,gCAAA;AAAA,IACL,KAAK,qCAAA;AAAA,IACL,KAAK,4BAAA;AAAA,IACL,KAAK,iCAAA;AAAA,IACL,KAAK,SAAA;AAAA,IACL,KAAK,KAAA;AAAA,IACL,KAAK,QAAA;AACH,MAAA,OAAO,KAAA;AAAA,IACT;AACE,MAAA,OAAO,MAAA;AAAA;AAEb;AAEA,eAAe,gBAAA,CACb,MAAA,EACA,OAAA,EACA,IAAA,EACA,OACA,OAAA,EAC8B;AAC9B,EAAA,MAAM,OAAA,GAAU,gBAAA,CAAiB,OAAA,EAAS,OAAA,IAAW,OAAO,OAAO,CAAA;AACnE,EAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,OAAA,EAAS,OAAA,CAAQ,UAAU,KAAK,CAAA;AAC5D,EAAA,MAAM,OAAA,GAAUM,aAAAA,CAAa,MAAA,EAAQ,OAAO,CAAA;AAC5C,EAAA,MAAM,WAAA,GAAc,OAAA,EAAS,WAAA,IAAe,MAAA,CAAO,WAAA,IAAe,SAAA;AAClE,EAAA,MAAM,WAAA,GAA2B;AAAA,IAC/B,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,OAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAQ,OAAA,EAAS;AAAA,GACnB;AAEA,EAAA,IAAI,OAAA,CAAQ,WAAW,KAAA,EAAO;AAC5B,IAAA,WAAA,CAAY,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,IAAA,IAAQ,EAAE,CAAA;AAAA,EAC9C;AAEA,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,KAAA,IAAS,UAAA,CAAW,KAAA;AAC3C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,UAAU,cAAA,CAAe;AAAA,MAC7B,IAAA,EAAM,eAAA;AAAA,MACN,OAAA,EAAS,mDAAA;AAAA,MACT,MAAA,EAAQ,CAAA;AAAA,MACR,UAAU,OAAA,CAAQ,QAAA;AAAA,MAClB,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,IAAA,EAAM;AAAA,KACP,CAAA;AACD,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,MAAA,EAAQ,CAAA;AAAA,MACR,IAAA,EAAM,IAAA;AAAA,MACN,OAAO,OAAA,CAAQ,OAAA;AAAA,MACf,YAAA,EAAc,OAAA;AAAA,MACd,GAAA,EAAK;AAAA,KACP;AAAA,EACF;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,GAAA,EAAK,WAAW,CAAA;AAC/C,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,IAAA,EAAK;AACpC,IAAA,MAAM,SAAA,GAAYF,iBAAAA,CAAiB,QAAA,CAAS,OAAO,CAAA;AACnD,IAAA,MAAM,UAAA,GAAaD,mBAAkB,OAAA,IAAW,EAAA,EAAI,SAAS,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAC,CAAA;AAExF,IAAA,IAAI,WAAW,WAAA,EAAa;AAC1B,MAAA,MAAM,UAAU,cAAA,CAAe;AAAA,QAC7B,IAAA,EAAM,cAAA;AAAA,QACN,OAAA,EAAS,qCAAA;AAAA,QACT,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,SAAA;AAAA,QACA,IAAA,EAAM,uDAAA;AAAA,QACN,KAAA,EAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,GAAG;AAAA,OAC5B,CAAA;AACD,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,IAAA,EAAM,IAAA;AAAA,QACN,OAAO,OAAA,CAAQ,OAAA;AAAA,QACf,YAAA,EAAc,OAAA;AAAA,QACd,KAAK,UAAA,CAAW;AAAA,OAClB;AAAA,IACF;AAEA,IAAA,MAAM,SAAS,UAAA,CAAW,MAAA;AAE1B,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,UAAU,cAAA,CAAe;AAAA,QAC7B,IAAA,EAAM,YAAA;AAAA,QACN,OAAA,EAASE,oBAAAA;AAAA,UACP,MAAA;AAAA,UACA,CAAA,cAAA,EAAiB,QAAQ,MAAM,CAAA,CAAA,EAAI,QAAQ,QAAQ,CAAA,oBAAA,EAAuB,SAAS,MAAM,CAAA;AAAA,SAC3F;AAAA,QACA,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB;AAAA,OACD,CAAA;AACD,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,IAAA,EAAM,IAAA;AAAA,QACN,OAAO,OAAA,CAAQ,OAAA;AAAA,QACf,YAAA,EAAc,OAAA;AAAA,QACd,GAAA,EAAK;AAAA,OACP;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,IAAA;AAAA,MACJ,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,MAAO,MAAA,IAAgB,IAAA;AAAA,MACvB,KAAA,EAAO,IAAA;AAAA,MACP,YAAA,EAAc,IAAA;AAAA,MACd,GAAA,EAAK;AAAA,KACP;AAAA,EACF,SAAS,SAAA,EAAW;AAClB,IAAA,MAAM,UAAU,SAAA,YAAqB,KAAA,GAAQ,SAAA,CAAU,OAAA,GAAU,OAAO,SAAS,CAAA;AACjF,IAAA,MAAM,UAAU,cAAA,CAAe;AAAA,MAC7B,IAAA,EAAM,eAAA;AAAA,MACN,OAAA,EAAS,+BAA+B,OAAA,CAAQ,MAAM,IAAI,OAAA,CAAQ,QAAQ,KAAK,OAAO,CAAA,CAAA;AAAA,MACtF,MAAA,EAAQ,CAAA;AAAA,MACR,UAAU,OAAA,CAAQ,QAAA;AAAA,MAClB,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,KAAA,EAAO,OAAA;AAAA,MACP,IAAA,EAAM;AAAA,KACP,CAAA;AACD,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,MAAA,EAAQ,CAAA;AAAA,MACR,IAAA,EAAM,IAAA;AAAA,MACN,OAAO,OAAA,CAAQ,OAAA;AAAA,MACf,YAAA,EAAc,OAAA;AAAA,MACd,GAAA,EAAK;AAAA,KACP;AAAA,EACF;AACF;AAEA,SAAS,8BAAA,CACP,MAAA,EACA,OAAA,EACA,KAAA,EACA,OAAA,EACA;AACA,EAAA,MAAM,EAAE,OAAA,EAAS,YAAA,EAAa,GAAI,oBAAoB,KAAK,CAAA;AAC3D,EAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,YAAA,EAAc,OAAO,CAAA;AAC5D,EAAA,OAAO,iBAA0B,MAAA,EAAQ,OAAA,EAAS,WAAW,EAAC,EAAG,QAAW,aAAa,CAAA;AAC3F;AAEA,SAAS,4BAAA,CACP,MAAA,EACA,OAAA,EACA,KAAA,EACA,OAAA,EACA;AACA,EAAA,MAAM,EAAE,YAAA,EAAa,GAAI,mBAAA,CAAoB,KAAK,CAAA;AAClD,EAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,YAAA,EAAc,OAAO,CAAA;AAC5D,EAAA,OAAO,iBAA0B,MAAA,EAAQ,OAAA,EAAS,EAAC,EAAG,QAAW,aAAa,CAAA;AAChF;AAEA,SAAS,6BAAA,CACP,MAAA,EACA,OAAA,EACA,KAAA,EACA,OAAA,EACA;AACA,EAAA,MAAM,EAAE,YAAA,EAAa,GAAI,mBAAA,CAAoB,KAAK,CAAA;AAClD,EAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,YAAA,EAAc,OAAO,CAAA;AAC5D,EAAA,OAAO,gBAAA,CAA0B,MAAA,EAAQ,OAAA,EAAS,MAAA,EAAW,QAAW,aAAa,CAAA;AACvF;AAEA,SAAS,kCAAA,CAIP,MAAA,EACA,OAAA,EACA,KAAA,EACA,OAAA,EACA;AACA,EAAA,MAAM,EAAE,OAAA,EAAS,YAAA,EAAa,GAAI,oBAAoB,KAAK,CAAA;AAC3D,EAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,YAAA,EAAc,OAAO,CAAA;AAC5D,EAAA,MAAM,QAAS,OAAA,EAA0E,KAAA;AACzF,EAAA,OAAO,gBAAA;AAAA,IACL,MAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF;AACF;AAKO,SAAS,gBAAA,CAAiB,MAAA,GAAiC,EAAC,EAAwB;AACzF,EAAA,MAAM,iBAAA,GAAoB,gBAAA,CAAiB,MAAA,CAAO,OAAO,CAAA;AACzD,EAAA,MAAM,cAAA,GAAyC;AAAA,IAC7C,GAAG,MAAA;AAAA,IACH,OAAA,EAAS;AAAA,GACX;AAEA,EAAA,MAAMZ,QAAAA,GAAU,CACd,KAAA,EACA,OAAA,KACiC;AACjC,IAAA,MAAM,MAAA,GAAS,MAAM,MAAA,KAAW,KAAA,CAAM,SAAS,MAAA,GAAY,MAAA,GAAS,kBAAA,CAAmB,KAAA,CAAM,QAAQ,CAAA,CAAA;AACrG,IAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,KAAA,CAAM,YAAA,EAAc,OAAO,CAAA;AAClE,IAAA,OAAO,gBAAA;AAAA,MACL,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,KAAA,CAAM,QAAA,EAAU,MAAA,EAAO;AAAA,MACnC,KAAA,CAAM,IAAA;AAAA,MACN,KAAA,CAAM,KAAA;AAAA,MACN;AAAA,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAClB,QAAA,EACA,KAAA,EACA,OAAA,KACG;AACH,IAAA,MAAM,EAAE,OAAA,EAAS,YAAA,EAAa,GAAI,oBAAoB,KAAK,CAAA;AAC3D,IAAA,OAAOA,QAAAA;AAAA,MACL;AAAA,QACE,QAAA;AAAA,QACA,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,WAAW,EAAC;AAAA,QAClB;AAAA,OACF;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CACjB,QAAA,EACA,KAAA,EACA,OAAA,KACG;AACH,IAAA,MAAM,EAAE,YAAA,EAAa,GAAI,mBAAA,CAAoB,KAAK,CAAA;AAClD,IAAA,OAAOA,QAAAA;AAAA,MACL;AAAA,QACE,QAAA;AAAA,QACA,MAAA,EAAQ,KAAA;AAAA,QACR;AAAA,OACF;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAInB,QAAA,EACA,KAAA,EAGA,OAAA,KACG;AACH,IAAA,MAAM,EAAE,OAAA,EAAS,YAAA,EAAa,GAAI,oBAAoB,KAAK,CAAA;AAC3D,IAAA,MAAM,QAAS,OAAA,EAA4C,KAAA;AAG3D,IAAA,OAAOA,QAAAA;AAAA,MACL;AAAA,QACE,QAAA;AAAA,QACA,MAAA,EAAQ,KAAA;AAAA,QACR,KAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,mBAAA,GAAsB,CAAC,KAAA,MAAmC;AAAA,IAC9D,GAAG,cAAA,CAAe,UAAA;AAAA,IAClB;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,wBAAA,GAA2B,CAG/B,KAAA,EACA,KAAA,KAEA,+BAA+B,KAAA,EAAO;AAAA,IACpC,SAAA,EAAW,UAAA;AAAA,IACX,SAAA,EAAW;AAAA,GACb,EAAG,mBAAA,CAAoB,KAAK,CAAC,CAAA;AAE/B,EAAA,MAAM,mCAAmC,CAGvC,KAAA,EACA,UAEA,8BAAA,CAA+B,sCAAA,CAAuC,KAAK,CAAA,EAAG;AAAA,IAC5E,SAAA,EAAW,cAAA;AAAA,IACX,SAAA,EAAW,cAAA;AAAA,IACX,cAAA,EAAgB;AAAA,KACf,mBAAA,CAAoB,KAAK,CAAC,CAAA,CAAE,KAAK,CAAA,OAAA,KAAW;AAC7C,IAAA,MAAM,iBAAA,GAAoB,mCAAmC,OAAkC,CAAA;AAC/F,IAAA,IAAI,eAAe,OAAA,IAAW,OAAA,CAAQ,cAAc,MAAA,IAAa,OAAA,CAAQ,cAAc,IAAA,EAAM;AAC3F,MAAA,iCAAA;AAAA,QACE,OAAA,CAAQ,SAAA;AAAA,QACR,GAAG,KAAK,CAAA,UAAA;AAAA,OACV;AAAA,IACF;AACA,IAAA,OAAO,iBAAA;AAAA,EACT,CAAC,CAAA;AAEH,EAAA,MAAM,cAAA,GAAuD,OAAO,KAAA,EAAO,OAAA,KAAY;AACrF,IAAA,MAAM,eAAe,KAAA,EAAO,YAAA,GACxB,EAAE,YAAA,EAAc,KAAA,CAAM,cAAa,GACnC,MAAA;AACJ,IAAA,MAAM,gBAAgB,MAAM,UAAA;AAAA,MAC1B,cAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,IAAI,CAAC,aAAA,CAAc,EAAA,IAAM,aAAA,CAAc,QAAQ,IAAA,EAAM;AACnD,MAAA,OAAO,sBAAsB,aAAa,CAAA;AAAA,IAC5C;AAEA,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,IAAA;AAAA,MACJ,SAAS,aAAA,CAAc;AAAA,KACzB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,OAAA,GAAyC,OAAO,KAAA,EAAO,OAAA,KAAY;AACvE,IAAA,MAAM,gBAAgB,MAAM,UAAA;AAAA,MAC1B,cAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,IAAI,CAAC,cAAc,EAAA,EAAI;AACrB,MAAA,OAAO;AAAA,QACL,GAAG,aAAA;AAAA,QACH,IAAA,EAAM;AAAA,OACR;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,GAAG,aAAA;AAAA,MACH,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,aAAA,CAAc,IAAA,EAAM,IAAA,IAAQ;AAAA;AACpC,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,OACxB,QAAA,EACA,KAAA,EACA,OAAA,KACmC;AACnC,IAAA,MAAM,eAAe,MAAM,cAAA;AAAA,MACzB,OAAO,YAAA,GAAe,EAAE,YAAA,EAAc,KAAA,CAAM,cAAa,GAAI,MAAA;AAAA,MAC7D;AAAA,KACF;AAEA,IAAA,IAAI,CAAC,aAAa,EAAA,EAAI;AACpB,MAAA,OAAO,YAAA;AAAA,IACT;AAEA,IAAA,MAAM,mBAAmB,MAAM,WAAA;AAAA,MAC7B,QAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,IAAI,CAAC,iBAAiB,EAAA,EAAI;AACxB,MAAA,OAAO,yBAAyB,gBAAA,EAAkB;AAAA,QAChD,EAAA,EAAI,IAAA;AAAA,QACJ,MAAA,EAAQ,GAAA;AAAA,QACR,MAAM,YAAA,CAAa,OAAA;AAAA,QACnB,KAAA,EAAO,IAAA;AAAA,QACP,YAAA,EAAc,IAAA;AAAA,QACd,KAAK,YAAA,CAAa;AAAA,OACnB,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,CAAC,gBAAA,CAAiB,IAAA,EAAM,OAAA,EAAS;AACnC,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,MAAA,EAAQ,WAAA;AAAA,QACR,MAAA,EAAQ,GAAA;AAAA,QACR,KAAA,EAAO,gBAAA,CAAiB,IAAA,EAAM,KAAA,IAAS,WAAA;AAAA,QACvC,aAAA,EAAe;AAAA,UACb,EAAA,EAAI,IAAA;AAAA,UACJ,MAAA,EAAQ,GAAA;AAAA,UACR,MAAM,YAAA,CAAa,OAAA;AAAA,UACnB,KAAA,EAAO,IAAA;AAAA,UACP,YAAA,EAAc,IAAA;AAAA,UACd,KAAK,YAAA,CAAa;AAAA,SACpB;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,OAAO,YAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,0BAAA,GAA0E,OAAO,KAAA,EAAO,OAAA,KAAY;AACxG,IAAA,MAAM,UAAU,MAAM,YAAA;AAAA,MACpB,aAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAI,OAAA,CAAQ,MAAM,OAAA,CAAQ,MAAA,KAAW,OAAO,OAAA,CAAQ,YAAA,EAAc,SAAS,YAAA,EAAc;AACvF,MAAA,OAAO,OAAA;AAAA,IACT;AACA,IAAA,OAAO,YAAA;AAAA,MACL,aAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAmD,OAAO,KAAA,EAAO,OAAA,KAAY;AACjF,IAAA,MAAM,OAAA,GAAU,MAAM,UAAA,CAAqC,SAAA,EAAW,OAAO,OAAO,CAAA;AACpF,IAAA,IAAI,OAAA,CAAQ,MAAM,OAAA,CAAQ,MAAA,KAAW,OAAO,OAAA,CAAQ,YAAA,EAAc,SAAS,YAAA,EAAc;AACvF,MAAA,OAAO,OAAA;AAAA,IACT;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,UAAA,CAAiC,KAAA,EAAO,OAAO,OAAO,CAAA;AAC7E,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,OAAO;AAAA,QACL,GAAG,QAAA;AAAA,QACH,IAAA,EAAM;AAAA,OACR;AAAA,IACF;AAEA,IAAA,MAAM,cAAA,GACJI,SAAAA,CAAS,QAAA,CAAS,IAAI,KAAK,OAAO,QAAA,CAAS,IAAA,CAAK,EAAA,KAAO,SAAA,GAClD,QAAA,CAAS,IAAA,CAAK,EAAA,GAAK,OAAO,OAAA,GAC3B,IAAA;AAEN,IAAA,OAAO;AAAA,MACL,GAAG,QAAA;AAAA,MACH,IAAA,EAAM;AAAA,QACJ,MAAA,EAAQ;AAAA;AACV,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,OAAA,GAAU,CACd,KAAA,EACA,OAAA,KAEA,4BAAA;AAAA,IACE,cAAA;AAAA,IACA,EAAE,QAAA,EAAU,WAAA,EAAa,MAAA,EAAQ,MAAA,EAAO;AAAA,IACxC,KAAA;AAAA,IACA;AAAA,GACF;AAEF,EAAA,MAAM,cAAA,GAAiB,CACrB,KAAA,EACA,OAAA,KAEA,4BAAA;AAAA,IACE,cAAA;AAAA,IACA,EAAE,QAAA,EAAU,kBAAA,EAAoB,MAAA,EAAQ,MAAA,EAAO;AAAA,IAC/C,KAAA;AAAA,IACA;AAAA,GACF;AAEF,EAAA,MAAM,mBAAA,GAAsB,CAC1B,KAAA,EACA,OAAA,KAEA,4BAAA;AAAA,IACE,cAAA;AAAA,IACA,EAAE,QAAA,EAAU,wBAAA,EAA0B,MAAA,EAAQ,MAAA,EAAO;AAAA,IACrD,KAAA;AAAA,IACA;AAAA,GACF;AAEF,EAAA,MAAM,aAAA,GAAgB,CACpB,KAAA,EACA,OAAA,KAEA,8BAAA;AAAA,IACE,cAAA;AAAA,IACA,EAAE,QAAA,EAAU,iBAAA,EAAmB,MAAA,EAAQ,MAAA,EAAO;AAAA,IAC9C,KAAA;AAAA,IACA;AAAA,GACF;AAEF,EAAA,MAAM,UAAA,GAAa,CACjB,KAAA,EACA,OAAA,KACG;AACH,IAAA,MAAM,EAAE,OAAA,EAAS,YAAA,EAAa,GAAI,oBAAoB,KAAK,CAAA;AAC3D,IAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,YAAA,EAAc,OAAO,CAAA;AAC5D,IAAA,OAAO,gBAAA;AAAA,MACL,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,cAAA,EAAgB,MAAA,EAAQ,MAAA,EAAO;AAAA,MAC3C,WAAW,EAAC;AAAA,MACZ,MAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,CACzB,KAAA,EACA,OAAA,KACG;AACH,IAAA,MAAM,EAAE,OAAA,EAAS,YAAA,EAAa,GAAI,oBAAoB,KAAK,CAAA;AAC3D,IAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,YAAA,EAAc,OAAO,CAAA;AAC5D,IAAA,MAAM,KAAA,GAAS,WAAW,EAAC;AAC3B,IAAA,OAAO,gBAAA;AAAA,MACL,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,uBAAA,EAAyB,MAAA,EAAQ,KAAA,EAAM;AAAA,MACnD,MAAA;AAAA,MACA;AAAA,QACE,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,aAAa,KAAA,CAAM;AAAA,OACrB;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,yBAAA,GAA4B,CAChC,KAAA,EACA,OAAA,KACG;AACH,IAAA,MAAM,EAAE,OAAA,EAAS,YAAA,EAAa,GAAI,oBAAoB,KAAK,CAAA;AAC3D,IAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,YAAA,EAAc,OAAO,CAAA;AAC5D,IAAA,MAAM,KAAA,GAAQ,OAAA;AACd,IAAA,MAAM,KAAA,GAAQ,KAAA,EAAO,KAAA,EAAO,IAAA,EAAK;AACjC,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,IAAI,MAAM,sDAAsD,CAAA;AAAA,IACxE;AACA,IAAA,MAAM,QAAA,GAAW,CAAA,gBAAA,EAAmB,kBAAA,CAAmB,KAAK,CAAC,CAAA,CAAA;AAC7D,IAAA,OAAO,gBAAA;AAAA,MACL,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAM;AAAA,MAC1B,MAAA;AAAA,MACA,OAAO,WAAA,GAAc,EAAE,WAAA,EAAa,KAAA,CAAM,aAAY,GAAI,MAAA;AAAA,MAC1D;AAAA,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,YAAA,GAA+C;AAAA,IACnD,MAAA,EAAQ,CAAC,KAAA,EAAO,OAAA,KACd,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,sBAAA,EAAwB,MAAA,EAAQ,MAAA,EAAO;AAAA,MACnD,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,MAAA,EAAQ,CAAC,KAAA,EAAO,OAAA,KACd,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,sBAAA,EAAwB,MAAA,EAAQ,MAAA,EAAO;AAAA,MACnD,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,MAAA,EAAQ,CAAC,KAAA,EAAO,OAAA,KACd,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,sBAAA,EAAwB,MAAA,EAAQ,MAAA,EAAO;AAAA,MACnD,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,SAAA,EAAW,CAAC,KAAA,EAAO,OAAA,KACjB,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,0BAAA,EAA4B,MAAA,EAAQ,MAAA,EAAO;AAAA,MACvD,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,IAAA,EAAM,CAAC,KAAA,EAAO,OAAA,KACZ,UAAA;AAAA,MACE,oBAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,OAAA,EAAS,CAAC,KAAA,EAAO,OAAA,KACf,kCAAA;AAAA,MAKE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,qCAAA,EAAuC,MAAA,EAAQ,KAAA,EAAM;AAAA,MACjE,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,SAAA,EAAW,CAAC,KAAA,EAAO,OAAA,KACjB,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,0BAAA,EAA4B,MAAA,EAAQ,MAAA,EAAO;AAAA,MACvD,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,KAAA,EAAO,CAAC,KAAA,EAAO,OAAA,KACb,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,qBAAA,EAAuB,MAAA,EAAQ,MAAA,EAAO;AAAA,MAClD,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,mBAAA,EAAqB,CAAC,KAAA,EAAO,OAAA,KAC3B,kCAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,qCAAA,EAAuC,MAAA,EAAQ,KAAA,EAAM;AAAA,MACjE,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,aAAA,EAAe,CAAC,KAAA,EAAO,OAAA,KACrB,WAAA;AAAA,MACE,8BAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,mBAAmB,CAAC,KAAA,EAAO,YACzB,iBAAA,CAAkB,8BAAA,EAAgC,OAAO,OAAO,CAAA;AAAA,IAClE,UAAA,EAAY;AAAA,MACV,MAAA,EAAQ,CAAC,KAAA,EAAO,OAAA,KACd,8BAAA;AAAA,QAIE,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,iCAAA,EAAmC,MAAA,EAAQ,MAAA,EAAO;AAAA,QAC9D,KAAA;AAAA,QACA;AAAA,OACF;AAAA,MACF,MAAA,EAAQ,CAAC,KAAA,EAAO,OAAA,KACd,8BAAA;AAAA,QAIE,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,iCAAA,EAAmC,MAAA,EAAQ,MAAA,EAAO;AAAA,QAC9D,KAAA;AAAA,QACA;AAAA,OACF;AAAA,MACF,GAAA,EAAK,CAAC,KAAA,EAAO,OAAA,KACX,kCAAA;AAAA,QAIE,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,8BAAA,EAAgC,MAAA,EAAQ,KAAA,EAAM;AAAA,QAC1D,KAAA;AAAA,QACA;AAAA,OACF;AAAA,MACF,MAAA,EAAQ,CAAC,KAAA,EAAO,OAAA,KACd,8BAAA;AAAA,QAIE,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,iCAAA,EAAmC,MAAA,EAAQ,MAAA,EAAO;AAAA,QAC9D,KAAA;AAAA,QACA;AAAA,OACF;AAAA,MACF,IAAA,EAAM,CAAC,KAAA,EAAO,OAAA,KACZ,kCAAA;AAAA,QAIE,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,gCAAA,EAAkC,MAAA,EAAQ,KAAA,EAAM;AAAA,QAC5D,KAAA;AAAA,QACA;AAAA;AACF,KACJ;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,MAAA,EAAQ,CAAC,KAAA,EAAO,OAAA,KACd,8BAAA;AAAA,QAIE,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,6BAAA,EAA+B,MAAA,EAAQ,MAAA,EAAO;AAAA,QAC1D,KAAA;AAAA,QACA;AAAA,OACF;AAAA,MACF,UAAA,EAAY,CAAC,KAAA,EAAO,OAAA,KAClB,8BAAA;AAAA,QAIE,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,kCAAA,EAAoC,MAAA,EAAQ,MAAA,EAAO;AAAA,QAC/D,KAAA;AAAA,QACA;AAAA,OACF;AAAA,MACF,MAAA,EAAQ,CAAC,KAAA,EAAO,OAAA,KACd,8BAAA;AAAA,QAIE,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,6BAAA,EAA+B,MAAA,EAAQ,MAAA,EAAO;AAAA,QAC1D,KAAA;AAAA,QACA;AAAA,OACF;AAAA,MACF,SAAA,EAAW,CAAC,KAAA,EAAO,OAAA,KACjB,6BAAA;AAAA,QACE,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,iCAAA,EAAmC,MAAA,EAAQ,KAAA,EAAM;AAAA,QAC7D,KAAA;AAAA,QACA;AAAA,OACF;AAAA,MACF,IAAA,EAAM,CAAC,KAAA,EAAO,OAAA,KACZ,kCAAA;AAAA,QAIE,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,4BAAA,EAA8B,MAAA,EAAQ,KAAA,EAAM;AAAA,QACxD,KAAA;AAAA,QACA;AAAA;AACF;AACJ,GACF;AAEA,EAAA,MAAM,oBAAoB,MAAA,CAAO,MAAA;AAAA,IAC/B,CACE,OACA,OAAA,KAEA,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,iBAAA,EAAmB,MAAA,EAAQ,MAAA,EAAO;AAAA,MAC9C,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF;AAAA,MACE,KAAA,EAAO;AAAA;AACT,GACF;AAEA,EAAA,MAAM,oBAAA,GAAgE,CACpE,KAAA,EACA,OAAA,KACG;AACH,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,MAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,QAAA,MAAM,IAAI,MAAM,oDAAoD,CAAA;AAAA,MACtE;AACA,MAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,QAAA,OAAO,aAAA,CAAc,KAAA,CAAM,CAAC,CAAA,EAAG,OAAO,CAAA;AAAA,MACxC;AACA,MAAA,OAAO,cAAA,CAAe,QAAW,OAAO,CAAA;AAAA,IAC1C;AAEA,IAAA,MAAM,MAAA,GAAS,KAAA;AAIf,IAAA,MAAM,SAAS,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,MAAM,IACtC,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,CAAAU,WAASA,MAAAA,CAAM,IAAA,EAAK,CAAE,MAAA,GAAS,CAAC,CAAA,GACrD,MAAA;AAEJ,IAAA,IAAI,MAAA,IAAU,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC/B,MAAA,OAAO,cAAA;AAAA,QACL,OAAO,YAAA,GAAe,EAAE,YAAA,EAAc,MAAA,CAAO,cAAa,GAAI,MAAA;AAAA,QAC9D;AAAA,OACF;AAAA,IACF;AAEA,IAAA,IAAI,MAAA,IAAU,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG;AACjC,MAAA,OAAO,aAAA;AAAA,QACL,EAAE,KAAA,EAAO,MAAA,CAAO,CAAC,CAAA,EAAG,YAAA,EAAc,OAAO,YAAA,EAAa;AAAA,QACtD;AAAA,OACF;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,EAAO,IAAA,EAAK;AACjC,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,IAAI,MAAM,qEAAqE,CAAA;AAAA,IACvF;AAEA,IAAA,OAAO,aAAA;AAAA,MACL;AAAA,QACE,KAAA;AAAA,QACA,cAAc,MAAA,CAAO;AAAA,OACvB;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,6BAAA,GAA0F,CAC9F,KAAA,EACA,OAAA,KACG;AACH,IAAA,MAAM,aAAA,GAAgB,CAAC,MAAA,KAAuC;AAC5D,MAAA,MAAM,OAAA,GAAU,MAAA,CAAO,MAAA,IAAU,EAAE,EAAE,IAAA,EAAK;AAC1C,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,MAAM,uDAAuD,CAAA;AAAA,MACzE;AACA,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAEA,IAAA,MAAM,yBAAA,GAA4B,CAChCC,SAAAA,KACyC;AACzC,MAAA,MAAM,aAAA,GAAgB,CAAC,GAAG,IAAI,GAAA,CAAIA,SAAAA,CAAS,GAAA,CAAI,CAAA,OAAA,KAAW,aAAA,CAAc,OAAA,CAAQ,MAAM,CAAC,CAAC,CAAC,CAAA;AACzF,MAAA,IAAI,aAAA,CAAc,WAAW,CAAA,EAAG;AAC9B,QAAA,MAAM,IAAI,MAAM,2EAA2E,CAAA;AAAA,MAC7F;AACA,MAAA,OAAO,EAAE,MAAA,EAAQ,aAAA,CAAc,CAAC,CAAA,EAAE;AAAA,IACpC,CAAA;AAEA,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,MAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,QAAA,MAAM,IAAI,MAAM,8DAA8D,CAAA;AAAA,MAChF;AACA,MAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,QAAA,OAAO,WAAA;AAAA,UACL,4BAAA;AAAA,UACA;AAAA,YACE,GAAG,MAAM,CAAC,CAAA;AAAA,YACV,MAAA,EAAQ,aAAA,CAAc,KAAA,CAAM,CAAC,EAAE,MAAM;AAAA,WACvC;AAAA,UACA;AAAA,SACF;AAAA,MACF;AACA,MAAA,OAAO,WAAA;AAAA,QACL,6BAAA;AAAA,QACA,0BAA0B,KAAK,CAAA;AAAA,QAC/B;AAAA,OACF;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,KAAA;AAKf,IAAA,MAAM,WAAW,MAAA,CAAO,QAAA;AAExB,IAAA,IAAI,QAAA,IAAY,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG;AACrC,MAAA,MAAM,IAAI,MAAM,8DAA8D,CAAA;AAAA,IAChF;AAEA,IAAA,IAAI,QAAA,IAAY,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG;AACrC,MAAA,OAAO,WAAA;AAAA,QACL,4BAAA;AAAA,QACA;AAAA,UACE,GAAG,SAAS,CAAC,CAAA;AAAA,UACb,MAAA,EAAQ,aAAA,CAAc,QAAA,CAAS,CAAC,EAAE,MAAM,CAAA;AAAA,UACxC,cAAc,MAAA,CAAO;AAAA,SACvB;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,IAAI,QAAA,IAAY,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AACnC,MAAA,OAAO,WAAA;AAAA,QACL,6BAAA;AAAA,QACA;AAAA,UACE,GAAG,0BAA0B,QAAQ,CAAA;AAAA,UACrC,cAAc,MAAA,CAAO;AAAA,SACvB;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,MAAM,gBAAA,GAAmB,aAAA,CAAc,MAAA,CAAO,MAAM,CAAA;AAEpD,IAAA,IAAI,CAAC,OAAO,YAAA,EAAc;AACxB,MAAA,OAAO,WAAA;AAAA,QACL,6BAAA;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,gBAAA;AAAA,UACR,cAAc,MAAA,CAAO;AAAA,SACvB;AAAA,QACA;AAAA,OACF;AAAA,IACF;AACA,IAAA,OAAO,WAAA;AAAA,MACL,4BAAA;AAAA,MACA;AAAA,QACE,GAAG,MAAA;AAAA,QACH,MAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,IAAA,GAA2B;AAAA,IAC/B,YAAY,CAAC,KAAA,EAAO,YAAY,UAAA,CAAW,cAAA,EAAgB,OAAO,OAAO,CAAA;AAAA,IACzE,OAAA;AAAA,IACA,cAAA;AAAA,IACA,OAAA;AAAA,IACA,gBAAgB,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,kBAAA,EAAoB,OAAO,OAAO,CAAA;AAAA,IAClF,aAAA,EAAe,iBAAA;AAAA,IACf,aAAa,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,eAAA,EAAiB,OAAO,OAAO,CAAA;AAAA,IAC5E,WAAA,EAAa,CAAC,KAAA,EAAO,OAAA,KAAY;AAC/B,MAAA,MAAM,UAAA,GAA0C;AAAA,QAC9C,KAAA,EAAO;AAAA,UACL,OAAO,KAAA,CAAM,KAAA;AAAA,UACb,aAAa,KAAA,CAAM;AAAA,SACrB;AAAA,QACA,cAAc,KAAA,CAAM;AAAA,OACtB;AACA,MAAA,OAAO,YAAA;AAAA,QACL,eAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,uBAAuB,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,0BAAA,EAA4B,OAAO,OAAO,CAAA;AAAA,IACjG,aAAa,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,eAAA,EAAiB,OAAO,OAAO,CAAA;AAAA,IAC5E,mBAAmB,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,sBAAA,EAAwB,OAAO,OAAO,CAAA;AAAA,IAC1F,kBAAkB,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,qBAAA,EAAuB,OAAO,OAAO,CAAA;AAAA,IACxF,gBAAgB,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,kBAAA,EAAoB,OAAO,OAAO,CAAA;AAAA,IAClF,IAAA,EAAM;AAAA,MACJ,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,cAAA,EAAgB,OAAO,OAAO,CAAA;AAAA,MACtE,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,cAAA,EAAgB,OAAO,OAAO,CAAA;AAAA,MACtE,KAAA,EAAO;AAAA,QACL,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,OAAA,EAAS;AAAA,MACP,MAAM,CAAC,KAAA,EAAO,YAAY,UAAA,CAAW,gBAAA,EAAkB,OAAO,OAAO,CAAA;AAAA,MACrE,MAAA,EAAQ,oBAAA;AAAA,MACR,WAAA,EAAa;AAAA,KACf;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,MAAM,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,cAAA,EAAgB,OAAO,OAAO;AAAA,KACtE;AAAA,IACA,OAAA,EAAS;AAAA,MACP,MAAM,CAAC,KAAA,EAAO,YAAY,UAAA,CAAW,gBAAA,EAAkB,OAAO,OAAO,CAAA;AAAA,MACrE,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,iBAAA,EAAmB,OAAO,OAAO;AAAA,KAC3E;AAAA,IACA,UAAA,EAAY;AAAA,MACV,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,cAAc,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,gBAAA,EAAkB,OAAO,OAAO,CAAA;AAAA,IAC9E,gBAAgB,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,mBAAA,EAAqB,OAAO,OAAO,CAAA;AAAA,IACnF,MAAA,EAAQ,kBAAA;AAAA,IACR,IAAI,CAAC,KAAA,EAAO,YAAY,UAAA,CAAW,KAAA,EAAO,OAAO,OAAO,CAAA;AAAA,IACxD,OAAO,CAAC,KAAA,EAAO,YAAY,UAAA,CAAW,QAAA,EAAU,OAAO,OAAO,CAAA;AAAA,IAC9D,SAAA,EAAW;AAAA,MACT,YAAY,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,0BAAA,EAA4B,OAAO,OAAO,CAAA;AAAA,MACtF,YAAY,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,yBAAA,EAA2B,OAAO,OAAO,CAAA;AAAA,MACrF,SAAS,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,sBAAA,EAAwB,OAAO,OAAO,CAAA;AAAA,MAC/E,WAAW,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,wBAAA,EAA0B,OAAO,OAAO,CAAA;AAAA,MACnF,kBAAkB,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,gCAAA,EAAkC,OAAO,OAAO,CAAA;AAAA,MAClG,mBAAA,EAAqB,CAAC,KAAA,EAAO,OAAA,KAC3B,8BAAA;AAAA,QAIE,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,mCAAA,EAAqC,MAAA,EAAQ,MAAA,EAAO;AAAA,QAChE,KAAA;AAAA,QACA;AAAA,OACF;AAAA,MACF,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,oBAAA,EAAsB,OAAO,OAAO,CAAA;AAAA,MAC5E,SAAS,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,qBAAA,EAAuB,OAAO,OAAO;AAAA,KAChF;AAAA,IACA,OAAA,EAAS;AAAA,MACP,yBAAyB,CAAC,KAAA,EAAO,YAC/B,UAAA,CAAW,oCAAA,EAAsC,OAAO,OAAO,CAAA;AAAA,MACjE,6BAA6B,CAAC,KAAA,EAAO,YACnC,WAAA,CAAY,wCAAA,EAA0C,OAAO,OAAO,CAAA;AAAA,MACtE,oBAAoB,CAAC,KAAA,EAAO,YAC1B,WAAA,CAAY,8BAAA,EAAgC,OAAO,OAAO,CAAA;AAAA,MAC5D,sBAAsB,CAAC,KAAA,EAAO,YAC5B,WAAA,CAAY,gCAAA,EAAkC,OAAO,OAAO,CAAA;AAAA,MAC9D,kBAAkB,CAAC,KAAA,EAAO,YAAY,UAAA,CAAW,6BAAA,EAA+B,OAAO,OAAO,CAAA;AAAA,MAC9F,eAAe,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,yBAAA,EAA2B,OAAO,OAAO,CAAA;AAAA,MACxF,eAAe,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,yBAAA,EAA2B,OAAO,OAAO,CAAA;AAAA,MACxF,mBAAmB,CAAC,KAAA,EAAO,YAAY,UAAA,CAAW,uBAAA,EAAyB,OAAO,OAAO;AAAA,KAC3F;AAAA,IACA,KAAA,EAAO;AAAA,MACL,IAAA,EAAM;AAAA,QACJ,KAAK,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,iBAAA,EAAmB,OAAO,OAAO;AAAA,OACxE;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,MAAM,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,mBAAA,EAAqB,OAAO,OAAO,CAAA;AAAA,QAC1E,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,oBAAA,EAAsB,OAAO,OAAO,CAAA;AAAA,QAC5E,OAAO,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,mBAAA,EAAqB,OAAO,OAAO,CAAA;AAAA,QAC1E,KAAK,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,iBAAA,EAAmB,OAAO,OAAO,CAAA;AAAA,QACtE,aAAa,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,yBAAA,EAA2B,OAAO,OAAO,CAAA;AAAA,QACtF,mBAAmB,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,2BAAA,EAA6B,OAAO,OAAO,CAAA;AAAA,QAC9F,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,oBAAA,EAAsB,OAAO,OAAO,CAAA;AAAA,QAC5E,aAAa,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,0BAAA,EAA4B,OAAO,OAAO,CAAA;AAAA,QACvF,OAAA,EAAS;AAAA,UACP,MAAM,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,2BAAA,EAA6B,OAAO,OAAO,CAAA;AAAA,UACjF,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,eAAe,CAAC,KAAA,EAAO,YACrB,WAAA,CAA8C,uBAAA,EAAyB,OAAO,OAAO,CAAA;AAAA,MACvF,mBAAmB,CAAC,KAAA,EAAO,YACzB,iBAAA,CAAkB,uBAAA,EAAyB,OAAO,OAAO,CAAA;AAAA,MAC3D,MAAA,EAAQ;AAAA,QACN,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,uBAAA,EAAyB,OAAO,OAAO;AAAA,OACjF;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,6BAAA,EAA+B,OAAO,OAAO,CAAA;AAAA,QACrF,MAAM,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,2BAAA,EAA6B,OAAO,OAAO;AAAA,OACpF;AAAA,MACA,QAAA,EAAU;AAAA,QACR,MAAM,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,uBAAA,EAAyB,OAAO,OAAO;AAAA,OAChF;AAAA,MACA,KAAA,EAAO;AAAA,QACL,MAAM,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,mBAAA,EAAqB,OAAO,OAAO,CAAA;AAAA,QAC1E,KAAK,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,kBAAA,EAAoB,OAAO,OAAO,CAAA;AAAA,QACxE,MAAA,EAAQ,OAAO,KAAA,EAAO,OAAA,KACpB,WAAA;AAAA,UACE,qBAAA;AAAA,UACA,MAAM,wBAAA,CAAyB,qBAAA,EAAuB,KAAK,CAAA;AAAA,UAC3D;AAAA,SACF;AAAA,QACF,MAAA,EAAQ,OAAO,KAAA,EAAO,OAAA,KACpB,WAAA;AAAA,UACE,qBAAA;AAAA,UACA,MAAM,wBAAA,CAAyB,qBAAA,EAAuB,KAAK,CAAA;AAAA,UAC3D;AAAA,SACF;AAAA,QACF,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,qBAAA,EAAuB,OAAO,OAAO,CAAA;AAAA,QAC7E,OAAA,EAAS;AAAA,UACP,MAAM,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,2BAAA,EAA6B,OAAO,OAAO,CAAA;AAAA,UAClF,KAAK,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,0BAAA,EAA4B,OAAO,OAAO,CAAA;AAAA,UAChF,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,6BAAA,EAA+B,OAAO,OAAO,CAAA;AAAA,UACrF,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,6BAAA,EAA+B,OAAO,OAAO,CAAA;AAAA,UACrF,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,6BAAA,EAA+B,OAAO,OAAO;AAAA,SACvF;AAAA,QACA,QAAA,EAAU;AAAA,UACR,MAAM,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,4BAAA,EAA8B,OAAO,OAAO,CAAA;AAAA,UACnF,KAAK,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,2BAAA,EAA6B,OAAO,OAAO,CAAA;AAAA,UACjF,MAAA,EAAQ,OAAO,KAAA,EAAO,OAAA,KACpB,WAAA;AAAA,YACE,8BAAA;AAAA,YACA,MAAM,gCAAA,CAAiC,8BAAA,EAAgC,KAAK,CAAA;AAAA,YAC5E;AAAA,WACF;AAAA,UACF,MAAA,EAAQ,OAAO,KAAA,EAAO,OAAA,KACpB,WAAA;AAAA,YACE,8BAAA;AAAA,YACA,MAAM,gCAAA,CAAiC,8BAAA,EAAgC,KAAK,CAAA;AAAA,YAC5E;AAAA,WACF;AAAA,UACF,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,8BAAA,EAAgC,OAAO,OAAO,CAAA;AAAA,UACtF,IAAA,EAAM,CAAC,KAAA,EAAO,OAAA,KACZ,WAAA;AAAA,YACE,4BAAA;AAAA,YACA,sCAAA,CAAuC,mBAAA,CAAoB,KAAK,CAAA,CAAE,OAAkC,CAAA;AAAA,YACpG;AAAA;AACF,SACJ;AAAA,QACA,SAAA,EAAW;AAAA,UACT,MAAM,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,8BAAA,EAAgC,OAAO,OAAO;AAAA;AACvF,OACF;AAAA,MACA,aAAA,EAAe;AAAA,QACb,KAAK,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,2BAAA,EAA6B,OAAO,OAAO,CAAA;AAAA,QACjF,MAAA,EAAQ,OAAO,KAAA,EAAO,OAAA,KACpB,WAAA;AAAA,UACE,8BAAA;AAAA,UACA,MAAM,gCAAA,CAAiC,8BAAA,EAAgC,KAAK,CAAA;AAAA,UAC5E;AAAA,SACF;AAAA,QACF,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,8BAAA,EAAgC,OAAO,OAAO,CAAA;AAAA,QACtF,MAAM,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,4BAAA,EAA8B,OAAO,OAAO,CAAA;AAAA,QACnF,MAAA,EAAQ,OAAO,KAAA,EAAO,OAAA,KACpB,WAAA;AAAA,UACE,8BAAA;AAAA,UACA,MAAM,gCAAA,CAAiC,8BAAA,EAAgC,KAAK,CAAA;AAAA,UAC5E;AAAA,SACF;AAAA,QACF,IAAA,EAAM,CAAC,KAAA,EAAO,OAAA,KACZ,WAAA;AAAA,UACE,4BAAA;AAAA,UACA,sCAAA,CAAuC,mBAAA,CAAoB,KAAK,CAAA,CAAE,OAAkC,CAAA;AAAA,UACpG;AAAA;AACF,OACJ;AAAA,MACA,cAAA,EAAgB;AAAA,QACd,MAAM,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,8BAAA,EAAgC,OAAO,OAAO;AAAA;AACvF,KACF;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,iBAAA,EAAmB,OAAO,OAAO,CAAA;AAAA,MACzE,KAAK,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,cAAA,EAAgB,OAAO,OAAO,CAAA;AAAA,MACpE,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,iBAAA,EAAmB,OAAO,OAAO,CAAA;AAAA,MACzE,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,iBAAA,EAAmB,OAAO,OAAO,CAAA;AAAA,MACzE,MAAM,CAAC,KAAA,EAAO,YAAY,YAAA,CAAa,eAAA,EAAiB,OAAO,OAAO,CAAA;AAAA,MACtE,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,iBAAA,EAAmB,OAAO,OAAO,CAAA;AAAA,MACzE,gBAAA,EAAkB,CAAC,KAAA,EAAO,OAAA,KACxB,4BAAA;AAAA,QACE,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,sCAAA,EAAwC,MAAA,EAAQ,MAAA,EAAO;AAAA,QACnE,KAAA;AAAA,QACA;AAAA;AACF,KACJ;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,OAAO,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,gBAAA,EAAkB,OAAO,OAAO,CAAA;AAAA,MACvE,UAAU,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,mBAAA,EAAqB,OAAO,OAAO,CAAA;AAAA,MAC7E,QAAQ,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,iBAAA,EAAmB,OAAO,OAAO;AAAA,KAC3E;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,OAAO,CAAC,KAAA,EAAO,YAAY,WAAA,CAAY,gBAAA,EAAkB,OAAO,OAAO;AAAA,KACzE;AAAA,IACA,YAAA;AAAA,IACA,QAAA,EAAU;AAAA,MACR,QAAA,EAAU,CAAC,KAAA,EAAO,OAAA,KAAY;AAC5B,QAAA,MAAM,EAAE,OAAA,EAAS,YAAA,EAAa,GAAI,oBAAoB,KAAK,CAAA;AAC3D,QAAA,MAAM,MAAA,GAAS,OAAA;AAKf,QAAA,MAAM,WAAW,MAAA,CAAO,MAAA,EAAQ,QAAA,IAAY,EAAE,EAAE,IAAA,EAAK;AACrD,QAAA,IAAI,CAAC,QAAA,EAAU;AACb,UAAA,MAAM,IAAI,MAAM,uDAAuD,CAAA;AAAA,QACzE;AACA,QAAA,MAAM,OAAO,MAAA,CAAO,MAAA,EAAQ,IAAA,IAAQ,EAAE,EAAE,IAAA,EAAK;AAC7C,QAAA,MAAM,QAAQ,MAAA,CAAO,MAAA,EAAQ,KAAA,IAAS,EAAE,EAAE,IAAA,EAAK;AAC/C,QAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,KAAA,EAAO;AACnB,UAAA,MAAM,IAAI,MAAM,4DAA4D,CAAA;AAAA,QAC9E;AACA,QAAA,MAAM,QAAA,GAAW,CAAA,UAAA,EAAa,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAA;AAC1D,QAAA,OAAOf,QAAAA,CAAQ;AAAA,UACb,QAAA;AAAA,UACA,MAAA,EAAQ,KAAA;AAAA,UACR,KAAA,EAAO;AAAA,YACL,IAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA;AAAA,WACC,OAAO,CAAA;AAAA,MACZ;AAAA;AACF,GACF;AAEA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,iBAAA;AAAA,IACT,OAAA,EAAAA,QAAAA;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,KAAA,EAAO,CACL,KAAA,EACA,OAAA,KAEA,8BAAA;AAAA,QAIE,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,gBAAA,EAAkB,MAAA,EAAQ,MAAA,EAAO;AAAA,QAC7C,KAAA;AAAA,QACA;AAAA,OACF;AAAA,MACF,QAAA,EAAU,CACR,KAAA,EACA,OAAA,KAEA,8BAAA;AAAA,QAIE,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,mBAAA,EAAqB,MAAA,EAAQ,MAAA,EAAO;AAAA,QAChD,KAAA;AAAA,QACA;AAAA,OACF;AAAA,MACF,MAAA,EAAQ,CACN,KAAA,EACA,OAAA,KAEA,8BAAA;AAAA,QAIE,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,iBAAA,EAAmB,MAAA,EAAQ,MAAA,EAAO;AAAA,QAC9C,KAAA;AAAA,QACA;AAAA;AACF,KACJ;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,KAAA,EAAO,CACL,KAAA,EACA,OAAA,KAEA,8BAAA;AAAA,QAIE,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,gBAAA,EAAkB,MAAA,EAAQ,MAAA,EAAO;AAAA,QAC7C,KAAA;AAAA,QACA;AAAA;AACF,KACJ;AAAA,IACA,OAAA;AAAA,IACA,MAAA,EAAQ,OAAA;AAAA,IACR,UAAA,EAAY,CAAC,KAAA,EAAwC,OAAA,KACnD,6BAAA;AAAA,MACE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,cAAA,EAAgB,MAAA,EAAQ,KAAA,EAAM;AAAA,MAC1C,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,OAAA;AAAA,IACA,cAAA;AAAA,IACA,YAAA,EAAc,CAAC,KAAA,EAAwC,OAAA,KACrD,6BAAA;AAAA,MACE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,gBAAA,EAAkB,MAAA,EAAQ,KAAA,EAAM;AAAA,MAC5C,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,aAAA;AAAA,IACA,YAAA,EAAc,aAAA;AAAA,IACd,cAAA;AAAA,IACA,aAAA,EAAe,cAAA;AAAA,IACf,mBAAA;AAAA,IACA,kBAAA,EAAoB,mBAAA;AAAA,IACpB,cAAA,EAAgB,CACd,KAAA,EACA,OAAA,KAEA,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,kBAAA,EAAoB,MAAA,EAAQ,MAAA,EAAO;AAAA,MAC/C,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,aAAA,EAAe,CACb,KAAA,EACA,OAAA,KAEA,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,iBAAA,EAAmB,MAAA,EAAQ,MAAA,EAAO;AAAA,MAC9C,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,yBAAA;AAAA,IACA,WAAA,EAAa,CACX,KAAA,EACA,OAAA,KACG;AACH,MAAA,MAAM,EAAE,OAAA,EAAS,YAAA,EAAa,GAAI,oBAAoB,KAAK,CAAA;AAC3D,MAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,YAAA,EAAc,OAAO,CAAA;AAC5D,MAAA,MAAM,KAAA,GAAQ,OAAA;AACd,MAAA,OAAO,gBAAA;AAAA,QACL,cAAA;AAAA,QACA,EAAE,QAAA,EAAU,eAAA,EAAiB,MAAA,EAAQ,KAAA,EAAM;AAAA,QAC3C,MAAA;AAAA,QACA,KAAA,GACI;AAAA,UACE,OAAO,KAAA,CAAM,KAAA;AAAA,UACb,aAAa,KAAA,CAAM;AAAA,SACrB,GACA,MAAA;AAAA,QACJ;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,qBAAA,EAAuB,CACrB,KAAA,EACA,OAAA,KAEA,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,0BAAA,EAA4B,MAAA,EAAQ,MAAA,EAAO;AAAA,MACvD,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,WAAA,EAAa,CACX,KAAA,EACA,OAAA,KAEA,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,eAAA,EAAiB,MAAA,EAAQ,MAAA,EAAO;AAAA,MAC5C,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,cAAA,EAAgB,CACd,KAAA,EACA,OAAA,KAEA,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,kBAAA,EAAoB,MAAA,EAAQ,MAAA,EAAO;AAAA,MAC/C,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,UAAA,EAAY,CACV,KAAA,EACA,OAAA,KAEA,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,cAAA,EAAgB,MAAA,EAAQ,MAAA,EAAO;AAAA,MAC3C,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,UAAA;AAAA,IACA,kBAAA;AAAA,IACA,UAAA,EAAY,CACV,KAAA,EACA,OAAA,KAEA,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,cAAA,EAAgB,MAAA,EAAQ,MAAA,EAAO;AAAA,MAC3C,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,YAAA,EAAc,CAAC,KAAA,EAAwC,OAAA,KACrD,6BAAA;AAAA,MACE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,gBAAA,EAAkB,MAAA,EAAQ,KAAA,EAAM;AAAA,MAC5C,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,aAAA,EAAe,CACb,KAAA,EACA,OAAA,KAEA,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,iBAAA,EAAmB,MAAA,EAAQ,MAAA,EAAO;AAAA,MAC9C,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,YAAA,EAAc,CACZ,KAAA,EACA,OAAA,KAEA,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,gBAAA,EAAkB,MAAA,EAAQ,MAAA,EAAO;AAAA,MAC7C,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,cAAA,EAAgB,CACd,KAAA,EACA,OAAA,KAEA,8BAAA;AAAA,MAIE,cAAA;AAAA,MACA,EAAE,QAAA,EAAU,mBAAA,EAAqB,MAAA,EAAQ,MAAA,EAAO;AAAA,MAChD,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACF,YAAA;AAAA,IACA;AAAA,GACF;AACF;;;ACpzDO,SAAS,gBAAA,CACd,UACA,QAAA,EACS;AACT,EAAA,IAAI,CAAC,UAAU,OAAO,QAAA;AAEtB,EAAA,MAAM,UAAA,GAAa,QAAA,CAAS,IAAA,EAAK,CAAE,WAAA,EAAY;AAE/C,EAAA,IACE,eAAe,GAAA,IACf,UAAA,KAAe,UACf,UAAA,KAAe,KAAA,IACf,eAAe,IAAA,EACf;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IACE,eAAe,GAAA,IACf,UAAA,KAAe,WACf,UAAA,KAAe,IAAA,IACf,eAAe,KAAA,EACf;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAO,QAAA;AACT;;;ACbO,IAAM,eAAA,GAAkB;AAAA,EAC7B,eAAA,EAAiB,kBAAA;AAAA,EACjB,QAAA,EAAU,WAAA;AAAA,EACV,UAAA,EAAY,YAAA;AAAA,EACZ,IAAA,EAAM,MAAA;AAAA,EACN,SAAA,EAAW,YAAA;AAAA,EACX,SAAA,EAAW,WAAA;AAAA,EACX,OAAA,EAAS;AACX;AAcO,IAAM,eAAA,GAAkB;AAAA,EAC7B,eAAA,EAAiB,kBAAA;AAAA,EACjB,QAAA,EAAU,WAAA;AAAA,EACV,gBAAA,EAAkB,mBAAA;AAAA,EAClB,gBAAA,EAAkB,mBAAA;AAAA,EAClB,aAAA,EAAe,gBAAA;AAAA,EACf,WAAA,EAAa,cAAA;AAAA,EACb,kBAAA,EAAoB,qBAAA;AAAA,EACpB,gBAAA,EAAkB,mBAAA;AAAA,EAClB,WAAA,EAAa,cAAA;AAAA,EACb,OAAA,EAAS;AACX;AAIO,IAAM,mBAAA,GAAsB;AAAA,EACjC,SAAA,EAAW,WAAA;AAAA,EACX,MAAA,EAAQ,QAAA;AAAA,EACR,MAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAU,UAAA;AAAA,EACV,OAAA,EAAS;AACX;AAuEO,SAASgB,iBAAAA,CACd,UACA,QAAA,EACS;AACT,EAAA,OAAO,gBAAA,CAAqB,UAAU,QAAQ,CAAA;AAChD;AAEO,IAAM,WAAA,GAAN,cAA0B,KAAA,CAAM;AAAA,EAC5B,IAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAA;AAAA,EAET,YAAY,KAAA,EAAyB;AACnC,IAAA,KAAA,CAAM,MAAM,OAAO,CAAA;AACnB,IAAA,IAAA,CAAK,IAAA,GAAO,aAAA;AACZ,IAAA,IAAA,CAAK,OAAO,KAAA,CAAM,IAAA;AAClB,IAAA,IAAA,CAAK,OAAO,KAAA,CAAM,IAAA;AAClB,IAAA,IAAA,CAAK,WAAW,KAAA,CAAM,QAAA;AACtB,IAAA,IAAA,CAAK,SAAS,KAAA,CAAM,MAAA;AACpB,IAAA,IAAA,CAAK,SAAA,GAAY,MAAM,SAAA,IAAa,KAAA;AACpC,IAAA,IAAA,CAAK,YAAY,KAAA,CAAM,SAAA;AACvB,IAAA,IAAA,CAAK,UAAU,KAAA,CAAM,OAAA;AACrB,IAAA,IAAA,CAAK,MAAM,KAAA,CAAM,GAAA;AAAA,EACnB;AACF;AAEA,SAASZ,UAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAA,CAAQ,KAAK,CAAA,IAAK,OAAO,UAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,uBAAuB,MAAA,EAAuC;AACrE,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,MAAM,IAAA,EAAK,CAAE,SAAS,CAAA,EAAG;AACxD,MAAA,OAAO,MAAM,IAAA,EAAK;AAAA,IACpB;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,wBAAwB,KAAA,EAAoC;AACnE,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,MAAM,IAAA,EAAK,CAAE,SAAS,CAAA,EAAG;AACxD,IAAA,OAAO,MAAM,IAAA,EAAK;AAAA,EACpB;AACA,EAAA,IAAI,iBAAiB,KAAA,IAAS,KAAA,CAAM,QAAQ,IAAA,EAAK,CAAE,SAAS,CAAA,EAAG;AAC7D,IAAA,OAAO,KAAA,CAAM,QAAQ,IAAA,EAAK;AAAA,EAC5B;AACA,EAAA,IAAI,CAACA,SAAAA,CAAS,KAAK,CAAA,EAAG;AACpB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,oBAAoB,KAAA,CAAM,OAAA,EAAS,KAAA,CAAM,KAAA,EAAO,MAAM,OAAO,CAAA;AACtE;AAEA,SAAS,4BAA4B,KAAA,EAAoD;AACvF,EAAA,IAAI,CAACA,SAAAA,CAAS,KAAK,KAAK,OAAO,KAAA,CAAM,gBAAgB,QAAA,EAAU;AAC7D,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA,CAAM,WAAA;AACf;AAEA,SAAS,wBACP,KAAA,EAYA;AACA,EAAA,OACEA,UAAS,KAAK,CAAA,IACd,OAAO,KAAA,CAAM,OAAA,KAAY,aACxB,KAAA,CAAM,UAAA,KAAe,MAAA,IAAa,iBAAA,CAAkB,MAAM,UAAU,CAAA,CAAA,KACpE,MAAM,IAAA,KAAS,MAAA,IAAa,kBAAkB,KAAA,CAAM,IAAI,CAAA,CAAA,KACxD,KAAA,CAAM,aAAa,MAAA,IAAa,qBAAA,CAAsB,MAAM,QAAQ,CAAA,CAAA,KACpE,MAAM,SAAA,KAAc,MAAA,IAAa,OAAO,KAAA,CAAM,cAAc,SAAA,CAAA,KAC5D,KAAA,CAAM,WAAW,MAAA,IAAa,OAAO,MAAM,MAAA,KAAW,QAAA,CAAA;AAE3D;AAEA,SAAS,kBAAkB,KAAA,EAA0C;AACnE,EAAA,OACE,KAAA,KAAU,kBAAA,IACV,KAAA,KAAU,WAAA,IACV,KAAA,KAAU,YAAA,IACV,KAAA,KAAU,MAAA,IACV,KAAA,KAAU,YAAA,IACV,KAAA,KAAU,WAAA,IACV,KAAA,KAAU,SAAA;AAEd;AAEA,SAAS,kBAAkB,KAAA,EAA0C;AACnE,EAAA,OACE,UAAU,kBAAA,IACV,KAAA,KAAU,eACV,KAAA,KAAU,mBAAA,IACV,UAAU,mBAAA,IACV,KAAA,KAAU,gBAAA,IACV,KAAA,KAAU,kBACV,KAAA,KAAU,qBAAA,IACV,UAAU,mBAAA,IACV,KAAA,KAAU,kBACV,KAAA,KAAU,SAAA;AAEd;AAEA,SAAS,sBAAsB,KAAA,EAA8C;AAC3E,EAAA,OACE,KAAA,KAAU,eACV,KAAA,KAAU,QAAA,IACV,UAAU,QAAA,IACV,KAAA,KAAU,cACV,KAAA,KAAU,SAAA;AAEd;AAEA,SAAS,wBAAwB,KAAA,EAAgD;AAC/E,EAAA,OACEA,SAAAA,CAAS,KAAK,CAAA,IACd,iBAAA,CAAkB,MAAM,IAAI,CAAA,IAC5B,iBAAA,CAAkB,KAAA,CAAM,IAAI,CAAA,IAC5B,sBAAsB,KAAA,CAAM,QAAQ,CAAA,IACpC,OAAO,KAAA,CAAM,SAAA,KAAc,aAC3B,OAAO,KAAA,CAAM,OAAA,KAAY,QAAA,IACzB,KAAA,IAAS,KAAA;AAEb;AAEA,SAAS,oBAAA,CACP,YACA,OAAA,EACuB;AACvB,EAAA,IAAI,CAAC,OAAA,EAAS,KAAA,IAAS,CAAC,SAAS,SAAA,EAAW;AAC1C,IAAA,OAAO,UAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,GAAG,UAAA;AAAA,IACH,KAAA,EAAO,OAAA,CAAQ,KAAA,IAAS,UAAA,CAAW,KAAA;AAAA,IACnC,SAAA,EAAW,OAAA,CAAQ,SAAA,IAAa,UAAA,CAAW;AAAA,GAC7C;AACF;AAEA,SAAS,+BAA+B,aAAA,EAA2D;AACjG,EAAA,IAAI,CAACA,SAAAA,CAAS,aAAa,CAAA,EAAG,OAAO,MAAA;AACrC,EAAA,IAAI,EAAE,yBAAA,IAA6B,aAAA,CAAA,EAAgB,OAAO,MAAA;AAC1D,EAAA,MAAM,YAAY,aAAA,CAAc,uBAAA;AAChC,EAAA,OAAO,uBAAA,CAAwB,SAAS,CAAA,GAAI,SAAA,GAAY,MAAA;AAC1D;AAEA,SAAS,cAAc,KAAA,EAAwB;AAC7C,EAAA,IAAI;AACF,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA;AACvC,IAAA,OAAO,UAAA,IAAc,OAAO,KAAK,CAAA;AAAA,EACnC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,kBAAA;AAAA,EACT;AACF;AAEA,SAAS,YAAY,OAAA,EAAsD;AACzE,EAAA,IAAI,CAAC,OAAA,EAAS,QAAA,EAAU,OAAO,MAAA;AAC/B,EAAA,MAAM,QAAA,GACJ,OAAO,OAAA,CAAQ,QAAA,KAAa,WAAW,OAAA,CAAQ,QAAA,GAAW,aAAA,CAAc,OAAA,CAAQ,QAAQ,CAAA;AAC1F,EAAA,OAAO,aAAa,QAAQ,CAAA,CAAA;AAC9B;AAEA,SAAS,mBAAmB,KAAA,EAAgD;AAC1E,EAAA,OACEA,SAAAA,CAAS,KAAK,CAAA,IACd,QAAA,IAAY,KAAA,IACZ,OAAA,IAAW,KAAA,IACX,MAAA,IAAU,KAAA,IACV,OAAO,KAAA,CAAM,MAAA,KAAW,QAAA;AAE5B;AAEA,SAAS,qBAAqB,OAAA,EAAgE;AAC5F,EAAA,IAAI,CAAC,OAAA,EAAS,QAAA,EAAU,OAAO,MAAA;AAC/B,EAAA,IAAI,QAAQ,QAAA,KAAa,gBAAA,IAAoB,OAAA,CAAQ,QAAA,KAAa,kBAAkB,OAAO,QAAA;AAC3F,EAAA,IAAI,OAAA,CAAQ,QAAA,KAAa,iBAAA,EAAmB,OAAO,QAAA;AACnD,EAAA,IAAI,OAAA,CAAQ,QAAA,KAAa,iBAAA,EAAmB,OAAO,QAAA;AACnD,EAAA,IAAI,OAAA,CAAQ,QAAA,KAAa,iBAAA,EAAmB,OAAO,QAAA;AACnD,EAAA,IAAI,OAAA,CAAQ,aAAa,cAAA,IAAkB,OAAA,CAAQ,SAAS,UAAA,CAAW,OAAO,GAAG,OAAO,KAAA;AACxF,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,UAAA,CAAW,OAAe,QAAA,EAAwC;AACzE,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAA;AAChC,IAAA,IAAI,KAAA,GAAQ,CAAC,CAAA,EAAG,OAAO,MAAM,CAAC,CAAA;AAAA,EAChC;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,kBAAkB,OAAA,EAAqC;AAC9D,EAAA,OAAO,WAAW,OAAA,EAAS;AAAA,IACzB,0CAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH;AAEA,SAAS,aAAa,OAAA,EAAqC;AACzD,EAAA,OAAO,WAAW,OAAA,EAAS;AAAA,IACzB,2CAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH;AAEA,SAAS,YAAA,CAAa,MAAA,EAA4B,IAAA,EAA0C,OAAA,EAAkC;AAC5H,EAAA,MAAM,KAAA,GAAQ,QAAQ,WAAA,EAAY;AAClC,EAAA,MAAM,gBAAA,GACJ,KAAA,CAAM,QAAA,CAAS,mBAAmB,KAClC,KAAA,CAAM,QAAA,CAAS,eAAe,CAAA,IAC9B,MAAM,QAAA,CAAS,gBAAgB,CAAA,IAC/B,KAAA,CAAM,SAAS,WAAW,CAAA;AAC5B,EAAA,MAAM,qBAAqB,KAAA,CAAM,QAAA,CAAS,WAAW,CAAA,IAAK,KAAA,CAAM,SAAS,SAAS,CAAA;AAClF,EAAA,MAAM,oBAAA,GACJ,KAAA,CAAM,QAAA,CAAS,YAAY,CAAA,IAAK,KAAA,CAAM,QAAA,CAAS,SAAS,CAAA,IAAK,KAAA,CAAM,QAAA,CAAS,WAAW,CAAA;AACzF,EAAA,MAAM,cAAA,GACJ,KAAA,CAAM,QAAA,CAAS,cAAc,CAAA,IAAK,KAAA,CAAM,QAAA,CAAS,WAAW,CAAA,IAAK,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA;AACxF,EAAA,MAAM,sBAAsB,KAAA,CAAM,QAAA,CAAS,YAAY,CAAA,IAAK,KAAA,CAAM,SAAS,mBAAmB,CAAA;AAC9F,EAAA,MAAM,sBACJ,KAAA,CAAM,QAAA,CAAS,SAAS,CAAA,IACxB,KAAA,CAAM,SAAS,UAAU,CAAA,IACzB,MAAM,QAAA,CAAS,kBAAkB,KACjC,KAAA,CAAM,QAAA,CAAS,QAAQ,CAAA,IACvB,KAAA,CAAM,SAAS,UAAU,CAAA;AAE3B,EAAA,IAAI,MAAA,KAAW,GAAA,IAAO,gBAAA,EAAkB,OAAO,kBAAA;AAC/C,EAAA,IAAI,MAAA,KAAW,GAAA,IAAO,kBAAA,EAAoB,OAAO,WAAA;AACjD,EAAA,IAAI,MAAA,KAAW,GAAA,IAAO,MAAA,KAAW,GAAA,IAAO,gBAAgB,OAAO,MAAA;AAC/D,EAAA,IAAI,MAAA,KAAW,GAAA,IAAO,mBAAA,EAAqB,OAAO,YAAA;AAClD,EAAA,IAAI,IAAA,KAAS,eAAe,OAAO,YAAA;AACnC,EAAA,IAAI,MAAA,KAAW,GAAA,IAAO,MAAA,KAAW,GAAA,IAAO,sBAAsB,OAAO,YAAA;AACrE,EAAA,IAAI,IAAA,KAAS,mBAAmB,MAAA,KAAW,CAAA,IAAM,WAAW,MAAA,IAAa,MAAA,IAAU,OAAQ,mBAAA,EAAqB;AAC9G,IAAA,OAAO,WAAA;AAAA,EACT;AACA,EAAA,OAAO,SAAA;AACT;AAEA,SAAS,iBAAA,CACP,IAAA,EACA,MAAA,EACA,WAAA,EACiB;AACjB,EAAA,IAAI,gBAAgB,aAAA,EAAe;AACjC,IAAA,OAAO,eAAA,CAAgB,gBAAA;AAAA,EACzB;AAEA,EAAA,IAAI,WAAA,KAAgB,eAAA,IAAoB,IAAA,KAAS,WAAA,IAAe,WAAW,CAAA,EAAI;AAC7E,IAAA,OAAO,eAAA,CAAgB,kBAAA;AAAA,EACzB;AAEA,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,kBAAA;AACH,MAAA,OAAO,eAAA,CAAgB,eAAA;AAAA,IACzB,KAAK,WAAA;AACH,MAAA,OAAO,eAAA,CAAgB,QAAA;AAAA,IACzB,KAAK,YAAA;AACH,MAAA,OAAO,eAAA,CAAgB,gBAAA;AAAA,IACzB,KAAK,YAAA;AACH,MAAA,OAAO,eAAA,CAAgB,WAAA;AAAA,IACzB,KAAK,MAAA;AACH,MAAA,IAAI,WAAW,GAAA,EAAK;AAClB,QAAA,OAAO,eAAA,CAAgB,aAAA;AAAA,MACzB;AACA,MAAA,OAAO,eAAA,CAAgB,gBAAA;AAAA,IACzB,KAAK,WAAA;AACH,MAAA,OAAO,WAAW,MAAA,IAAa,MAAA,IAAU,GAAA,GACrC,eAAA,CAAgB,cAChB,eAAA,CAAgB,gBAAA;AAAA,IACtB,KAAK,SAAA;AAAA,IACL;AACE,MAAA,OAAO,WAAW,MAAA,IAAa,MAAA,IAAU,GAAA,GACrC,eAAA,CAAgB,cAChB,eAAA,CAAgB,OAAA;AAAA;AAE1B;AAEA,SAAS,qBAAA,CAAsB,MAAuB,MAAA,EAAiD;AACrG,EAAA,IAAI,IAAA,KAAS,WAAA,KAAgB,MAAA,KAAW,CAAA,IAAK,WAAW,MAAA,CAAA,EAAY;AAClE,IAAA,OAAO,mBAAA,CAAoB,SAAA;AAAA,EAC7B;AACA,EAAA,IAAI,IAAA,KAAS,kBAAA,EAAoB,OAAO,mBAAA,CAAoB,QAAA;AAC5D,EAAA,IAAI,SAAS,YAAA,IAAgB,IAAA,KAAS,UAAU,IAAA,KAAS,WAAA,SAAoB,mBAAA,CAAoB,MAAA;AACjG,EAAA,IAAI,IAAA,KAAS,YAAA,IAAgB,IAAA,KAAS,WAAA,SAAoB,mBAAA,CAAoB,MAAA;AAC9E,EAAA,OAAO,mBAAA,CAAoB,OAAA;AAC7B;AAEA,SAAS,WAAA,CAAY,MAAuB,MAAA,EAAqC;AAC/E,EAAA,IAAI,IAAA,KAAS,YAAA,IAAgB,IAAA,KAAS,WAAA,EAAa,OAAO,IAAA;AAC1D,EAAA,OAAO,MAAA,KAAW,UAAa,MAAA,IAAU,GAAA;AAC3C;AAEA,SAAS,aAAA,CAAc,MAAuB,MAAA,EAAyC;AACrF,EAAA,IAAI,SAAS,WAAA,KAAgB,MAAA,KAAW,CAAA,IAAK,MAAA,KAAW,SAAY,OAAO,eAAA;AAC3E,EAAA,IAAI,IAAA,KAAS,cAAc,OAAO,cAAA;AAClC,EAAA,IAAI,MAAA,KAAW,MAAA,IAAa,MAAA,IAAU,GAAA,EAAK,OAAO,YAAA;AAClD,EAAA,OAAO,eAAA;AACT;AAEA,SAAS,oBAAA,CACP,MAAA,EACA,eAAA,EACA,OAAA,EACoB;AACpB,EAAA,IAAI,oBAAA,CAAqB,MAAM,CAAA,EAAG;AAChC,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI,kBAAA,CAAmB,MAAM,CAAA,IAAK,MAAA,CAAO,YAAA,EAAc;AACrD,IAAA,MAAMa,WACJ,uBAAA,CAAwB,MAAA,CAAO,KAAK,CAAA,IACpC,MAAA,CAAO,aAAa,OAAA,IACpB,eAAA;AACF,IAAA,OAAO,IAAI,kBAAA,CAAmB;AAAA,MAC5B,IAAA,EAAM,OAAO,YAAA,CAAa,IAAA;AAAA,MAC1B,OAAA,EAAAA,QAAAA;AAAA,MACA,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,QAAA,EAAU,OAAO,YAAA,CAAa,QAAA;AAAA,MAC9B,MAAA,EAAQ,OAAO,YAAA,CAAa,MAAA;AAAA,MAC5B,SAAA,EAAW,OAAO,YAAA,CAAa,SAAA;AAAA,MAC/B,IAAA,EAAA,CACGb,SAAAA,CAAS,MAAA,CAAO,KAAK,CAAA,GAAI,mBAAA,CAAoB,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,GAAI,MAAA,KACnE,MAAA,CAAO,YAAA,CAAa,IAAA;AAAA,MACtB,KAAA,EAAA,CACGA,SAAAA,CAAS,MAAA,CAAO,KAAK,CAAA,GAAI,mBAAA,CAAoB,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,GAAI,MAAA,KACpE,MAAA,CAAO,YAAA,CAAa;AAAA,KACvB,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,UAAA,GAAa,oBAAA,CAAqB,MAAA,EAAQ,OAAO,CAAA;AACvD,EAAA,MAAM,OAAA,GACJ,kBAAA,CAAmB,MAAM,CAAA,IAAK,MAAA,CAAO,KAAA,IAAS,IAAA,IAAQ,MAAA,CAAO,YAAA,IAAgB,IAAA,GACzE,eAAA,GACA,UAAA,CAAW,OAAA,IAAW,eAAA;AAE5B,EAAA,OAAO,IAAI,kBAAA,CAAmB;AAAA,IAC5B,IAAA,EAAM,aAAA,CAAc,UAAA,CAAW,IAAA,EAAM,WAAW,MAAM,CAAA;AAAA,IACtD,OAAA;AAAA,IACA,MAAA,EAAQ,WAAW,MAAA,IAAU,CAAA;AAAA,IAC7B,IAAA,EACE,WAAW,UAAA,IAAc,IAAA,GACrB,eAAe,UAAA,CAAW,UAAU,CAAA,CAAA,GACpC,WAAA,CAAY,OAAO,CAAA;AAAA,IACzB,KAAA,EAAO,OAAO,UAAA,CAAW,GAAA,KAAQ,WAAW,UAAA,CAAW,GAAA,GAAM,aAAA,CAAc,UAAA,CAAW,GAAG;AAAA,GAC1F,CAAA;AACH;AAKO,SAAS,KAAQ,MAAA,EAAkC;AACxD,EAAA,OAAO,OAAO,KAAA,IAAS,IAAA,IAAQ,OAAO,MAAA,IAAU,GAAA,IAAO,OAAO,MAAA,GAAS,GAAA;AACzE;AAYO,SAAS,oBAAA,CACd,eACA,OAAA,EACuB;AACvB,EAAA,MAAM,QAAA,GAAW,+BAA+B,aAAa,CAAA;AAC7D,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,OAAO,oBAAA,CAAqB,UAAU,OAAO,CAAA;AAAA,EAC/C;AAEA,EAAA,IAAI,kBAAA,CAAmB,aAAa,CAAA,EAAG;AACrC,IAAA,IAAI,uBAAA,CAAwB,aAAA,CAAc,KAAK,CAAA,EAAG;AAChD,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,aAAA,CAAc,KAAA,CAAM,IAAA,IAAQ,YAAA,CAAa,aAAA,CAAc,MAAA,EAAQ,2BAAA,CAA4B,aAAA,CAAc,KAAK,CAAA,EAAG,aAAA,CAAc,MAAM,OAAO,CAAA;AAAA,QAClJ,IAAA,EACE,aAAA,CAAc,KAAA,CAAM,UAAA,IACpB,iBAAA;AAAA,UACE,aAAA,CAAc,MAAM,IAAA,IAClB,YAAA;AAAA,YACE,aAAA,CAAc,MAAA;AAAA,YACd,2BAAA,CAA4B,cAAc,KAAK,CAAA;AAAA,YAC/C,cAAc,KAAA,CAAM;AAAA,WACtB;AAAA,UACF,aAAA,CAAc,KAAA,CAAM,MAAA,IAAU,aAAA,CAAc,MAAA;AAAA,UAC5C,2BAAA,CAA4B,cAAc,KAAK;AAAA,SACjD;AAAA,QACF,QAAA,EACE,aAAA,CAAc,KAAA,CAAM,QAAA,IACpB,qBAAA;AAAA,UACE,aAAA,CAAc,MAAM,IAAA,IAClB,YAAA;AAAA,YACE,aAAA,CAAc,MAAA;AAAA,YACd,2BAAA,CAA4B,cAAc,KAAK,CAAA;AAAA,YAC/C,cAAc,KAAA,CAAM;AAAA,WACtB;AAAA,UACF,aAAA,CAAc,KAAA,CAAM,MAAA,IAAU,aAAA,CAAc;AAAA,SAC9C;AAAA,QACF,SAAA,EACE,aAAA,CAAc,KAAA,CAAM,SAAA,IACpB,WAAA;AAAA,UACE,aAAA,CAAc,MAAM,IAAA,IAClB,YAAA;AAAA,YACE,aAAA,CAAc,MAAA;AAAA,YACd,2BAAA,CAA4B,cAAc,KAAK,CAAA;AAAA,YAC/C,cAAc,KAAA,CAAM;AAAA,WACtB;AAAA,UACF,aAAA,CAAc,KAAA,CAAM,MAAA,IAAU,aAAA,CAAc;AAAA,SAC9C;AAAA,QACF,MAAA,EAAQ,aAAA,CAAc,KAAA,CAAM,MAAA,IAAU,aAAA,CAAc,MAAA;AAAA,QACpD,UAAA,EAAY,cAAc,KAAA,CAAM,UAAA;AAAA,QAChC,KAAA,EAAO,OAAA,EAAS,KAAA,IAAS,aAAA,CAAc,KAAA,CAAM,KAAA;AAAA,QAC7C,SAAA,EAAW,OAAA,EAAS,SAAA,IAAa,aAAA,CAAc,KAAA,CAAM,SAAA;AAAA,QACrD,OAAA,EAAS,cAAc,KAAA,CAAM,OAAA;AAAA,QAC7B,GAAA,EAAK,aAAA,CAAc,KAAA,CAAM,GAAA,IAAO,aAAA,CAAc;AAAA,OAChD;AAAA,IACF;AAEA,IAAA,MAAM,UAAU,aAAA,CAAc,YAAA;AAC9B,IAAA,MAAMa,QAAAA,GACJ,uBAAA,CAAwB,aAAA,CAAc,KAAK,CAAA,IAC3C,OAAA,EAAS,OAAA,IACT,CAAA,OAAA,EAAU,OAAA,EAAS,SAAA,IAAa,oBAAA,CAAqB,OAAO,KAAK,SAAS,CAAA,OAAA,CAAA;AAC5E,IAAA,MAAM,SAAA,GAAY,OAAA,EAAS,SAAA,IAAa,oBAAA,CAAqB,OAAO,CAAA;AACpE,IAAA,MAAMC,MAAAA,GAAQ,OAAA,EAAS,KAAA,IAAS,YAAA,CAAaD,QAAO,CAAA;AACpD,IAAA,MAAM,UAAA,GAAa,kBAAkBA,QAAO,CAAA;AAC5C,IAAA,MAAM,WAAA,GAAc,OAAA,EAAS,IAAA,IAAQ,2BAAA,CAA4B,cAAc,KAAK,CAAA;AACpF,IAAA,MAAME,KAAAA,GAAO,YAAA,CAAa,aAAA,CAAc,MAAA,EAAQ,aAAaF,QAAO,CAAA;AACpE,IAAA,MAAM,IAAA,GAAO,iBAAA,CAAkBE,KAAAA,EAAM,aAAA,CAAc,QAAQ,WAAW,CAAA;AACtE,IAAA,MAAM,QAAA,GAAW,qBAAA,CAAsBA,KAAAA,EAAM,aAAA,CAAc,MAAM,CAAA;AACjE,IAAA,OAAO;AAAA,MACL,IAAA,EAAAA,KAAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA,EAAW,WAAA,CAAYA,KAAAA,EAAM,aAAA,CAAc,MAAM,CAAA;AAAA,MACjD,QAAQ,aAAA,CAAc,MAAA;AAAA,MACtB,UAAA;AAAA,MACA,KAAA,EAAAD,MAAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA,EAAAD,QAAAA;AAAA,MACA,KAAK,aAAA,CAAc;AAAA,KACrB;AAAA,EACF;AAEA,EAAA,IAAI,oBAAA,CAAqB,aAAa,CAAA,EAAG;AACvC,IAAA,MAAM,OAAA,GAAU,cAAc,SAAA,EAAU;AACxC,IAAA,MAAM,SAAA,GAAY,OAAA,EAAS,SAAA,IAAa,oBAAA,CAAqB,OAAO,CAAA;AACpE,IAAA,MAAMC,MAAAA,GAAQ,OAAA,EAAS,KAAA,IAAS,YAAA,CAAa,cAAc,OAAO,CAAA;AAClE,IAAA,MAAM,UAAA,GAAa,iBAAA,CAAkB,aAAA,CAAc,OAAO,CAAA;AAC1D,IAAA,MAAMC,QAAO,YAAA,CAAa,aAAA,CAAc,QAAQ,aAAA,CAAc,IAAA,EAAM,cAAc,OAAO,CAAA;AACzF,IAAA,MAAM,OAAO,iBAAA,CAAkBA,KAAAA,EAAM,aAAA,CAAc,MAAA,EAAQ,cAAc,IAAI,CAAA;AAC7E,IAAA,MAAM,QAAA,GAAW,qBAAA,CAAsBA,KAAAA,EAAM,aAAA,CAAc,MAAM,CAAA;AACjE,IAAA,OAAO;AAAA,MACL,IAAA,EAAAA,KAAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA,EAAW,WAAA,CAAYA,KAAAA,EAAM,aAAA,CAAc,MAAM,CAAA;AAAA,MACjD,QAAQ,aAAA,CAAc,MAAA;AAAA,MACtB,UAAA;AAAA,MACA,KAAA,EAAAD,MAAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAS,aAAA,CAAc,OAAA;AAAA,MACvB,GAAA,EAAK;AAAA,KACP;AAAA,EACF;AAEA,EAAA,IAAI,yBAAyB,KAAA,EAAO;AAClC,IAAA,MAAM,WAAA,GACJd,UAAS,aAAa,CAAA,IAAK,OAAO,aAAA,CAAc,MAAA,KAAW,QAAA,GACvD,aAAA,CAAc,MAAA,GACd,MAAA;AACN,IAAA,MAAMe,KAAAA,GAAO,YAAA,CAAa,WAAA,EAAa,MAAA,EAAW,cAAc,OAAO,CAAA;AACvE,IAAA,OAAO;AAAA,MACL,IAAA,EAAAA,KAAAA;AAAA,MACA,IAAA,EAAM,iBAAA,CAAkBA,KAAAA,EAAM,WAAW,CAAA;AAAA,MACzC,QAAA,EAAU,qBAAA,CAAsBA,KAAAA,EAAM,WAAW,CAAA;AAAA,MACjD,SAAA,EAAW,WAAA,CAAYA,KAAAA,EAAM,WAAW,CAAA;AAAA,MACxC,MAAA,EAAQ,WAAA;AAAA,MACR,UAAA,EAAY,iBAAA,CAAkB,aAAA,CAAc,OAAO,CAAA;AAAA,MACnD,KAAA,EAAO,OAAA,EAAS,KAAA,IAAS,YAAA,CAAa,cAAc,OAAO,CAAA;AAAA,MAC3D,WAAW,OAAA,EAAS,SAAA;AAAA,MACpB,SAAS,aAAA,CAAc,OAAA;AAAA,MACvB,GAAA,EAAK;AAAA,KACP;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAU,OAAO,aAAA,KAAkB,QAAA,GAAW,aAAA,GAAgB,sBAAA;AACpE,EAAA,MAAM,IAAA,GAAO,YAAA,CAAa,MAAA,EAAW,MAAA,EAAW,OAAO,CAAA;AACvD,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,IAAA,EAAM,iBAAA,CAAkB,IAAA,EAAM,MAAS,CAAA;AAAA,IACvC,QAAA,EAAU,qBAAA,CAAsB,IAAA,EAAM,MAAS,CAAA;AAAA,IAC/C,SAAA,EAAW,WAAA,CAAY,IAAA,EAAM,MAAS,CAAA;AAAA,IACtC,MAAA,EAAQ,MAAA;AAAA,IACR,UAAA,EAAY,kBAAkB,OAAO,CAAA;AAAA,IACrC,KAAA,EAAO,OAAA,EAAS,KAAA,IAAS,YAAA,CAAa,OAAO,CAAA;AAAA,IAC7C,WAAW,OAAA,EAAS,SAAA;AAAA,IACpB,OAAA;AAAA,IACA,GAAA,EAAK;AAAA,GACP;AACF;AASO,SAAS,UAAA,CACd,QACA,OAAA,EACK;AACL,EAAA,IAAI,CAAC,IAAA,CAAK,MAAM,CAAA,EAAG;AACjB,IAAA,MAAM,oBAAA,CAAqB,MAAA,EAAQ,uBAAA,EAAyB,OAAA,EAAS,OAAO,CAAA;AAAA,EAC9E;AACA,EAAA,IAAI,MAAA,CAAO,IAAA,IAAQ,IAAA,EAAM,OAAO,EAAC;AACjC,EAAA,OAAO,KAAA,CAAM,QAAQ,MAAA,CAAO,IAAI,IAAI,MAAA,CAAO,IAAA,GAAO,CAAC,MAAA,CAAO,IAAI,CAAA;AAChE;AAYO,SAAS,MAAA,CACd,QACA,OAAA,EACU;AACV,EAAA,IAAI,CAAC,IAAA,CAAK,MAAM,CAAA,EAAG;AACjB,IAAA,MAAM,oBAAA,CAAqB,MAAA,EAAQ,uBAAA,EAAyB,OAAA,EAAS,OAAO,CAAA;AAAA,EAC9E;AACA,EAAA,IAAI,MAAA,CAAO,IAAA,IAAQ,IAAA,IAAQ,CAAC,SAAS,SAAA,EAAW;AAC9C,IAAA,MAAM,oBAAA,CAAqB,MAAA,EAAQ,iCAAA,EAAmC,OAAA,EAAS,OAAO,CAAA;AAAA,EACxF;AACA,EAAA,OAAO,MAAA,CAAO,IAAA;AAChB;AAcO,SAAS,SAAA,CACd,QACA,OAAA,EACU;AACV,EAAA,MAAM,IAAA,GAAO,UAAA,CAAW,MAAA,EAAQ,OAAO,CAAA;AACvC,EAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,IAAA,IAAI,OAAA,EAAS,WAAW,OAAO,IAAA;AAC/B,IAAA,MAAM,oBAAA,CAAqB,MAAA,EAAQ,oCAAA,EAAsC,OAAA,EAAS,OAAO,CAAA;AAAA,EAC3F;AACA,EAAA,IAAI,OAAA,EAAS,iBAAA,IAAqB,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG;AACnD,IAAA,MAAM,oBAAA;AAAA,MACJ,MAAA;AAAA,MACA,CAAA,sCAAA,EAAyC,KAAK,MAAM,CAAA,CAAA;AAAA,MACpD,OAAA,CAAQ;AAAA,KACV;AAAA,EACF;AACA,EAAA,OAAO,KAAK,CAAC,CAAA;AACf;AAOO,SAAS,cAAA,CACd,QACA,OAAA,EACiB;AACjB,EAAA,IAAI,CAAC,IAAA,CAAK,MAAM,CAAA,EAAG;AACjB,IAAA,MAAM,oBAAA;AAAA,MACJ,MAAA;AAAA,MACA,CAAA,OAAA,EAAU,OAAA,EAAS,SAAA,IAAa,SAAS,CAAA,OAAA,CAAA;AAAA,MACzC;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAWO,SAAS,eAAA,CACd,MAAA,EACA,OAAA,EACA,OAAA,EACQ;AACR,EAAA,cAAA,CAAe,QAAQ,OAAO,CAAA;AAE9B,EAAA,MAAM,OAAA,GAAU,SAAS,GAAA,IAAO,CAAA;AAChC,EAAA,MAAM,QAAQ,MAAA,CAAO,KAAA;AACrB,EAAA,IAAI,SAAS,IAAA,EAAM;AACjB,IAAA,MAAM,IAAI,kBAAA,CAAmB;AAAA,MAC3B,IAAA,EAAM,eAAA;AAAA,MACN,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,OAAA,EAAS,2DAAA;AAAA,MACT,IAAA,EAAM,uEAAA;AAAA,MACN,KAAA,EAAO,aAAA,CAAc,MAAA,CAAO,GAAG;AAAA,KAChC,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,IAAA,MAAM,IAAI,kBAAA,CAAmB;AAAA,MAC3B,IAAA,EAAM,eAAA;AAAA,MACN,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,OAAA,EAAS,CAAA,kBAAA,EAAqB,OAAO,CAAA,4BAAA,EAA+B,KAAK,CAAA,CAAA;AAAA,MACzE,IAAA,EAAM,YAAY,OAAO,CAAA;AAAA,MACzB,KAAA,EAAO,aAAA,CAAc,MAAA,CAAO,GAAG;AAAA,KAChC,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,WAAA,CAAY,OAAe,OAAA,EAA6C;AAC/E,EAAA,IAAI,SAAS,GAAA,KAAQ,MAAA,IAAa,KAAA,GAAQ,OAAA,CAAQ,KAAK,OAAO,IAAA;AAC9D,EAAA,IAAI,SAAS,GAAA,KAAQ,MAAA,IAAa,KAAA,GAAQ,OAAA,CAAQ,KAAK,OAAO,IAAA;AAC9D,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,mBAAmB,KAAA,EAA8B;AACxD,EAAA,MAAM,UAAA,GAAa,MAAM,IAAA,EAAK;AAC9B,EAAA,IAAI,CAAC,YAAA,CAAa,IAAA,CAAK,UAAU,GAAG,OAAO,IAAA;AAC3C,EAAA,MAAM,MAAA,GAAS,OAAO,UAAU,CAAA;AAChC,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,IAAK,CAAC,MAAA,CAAO,SAAA,CAAU,MAAM,CAAA,EAAG,OAAO,IAAA;AAClE,EAAA,OAAO,MAAA;AACT;AAOO,SAAS,SAAA,CAAU,OAAgB,OAAA,EAA6C;AACrF,EAAA,IAAI,KAAA,IAAS,MAAM,OAAO,IAAA;AAE1B,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,IAAK,CAAC,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,EAAG,OAAO,IAAA;AAChE,IAAA,OAAO,WAAA,CAAY,OAAO,OAAO,CAAA;AAAA,EACnC;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,MAAA,GAAS,mBAAmB,KAAK,CAAA;AACvC,IAAA,IAAI,MAAA,IAAU,MAAM,OAAO,IAAA;AAC3B,IAAA,OAAO,WAAA,CAAY,QAAQ,OAAO,CAAA;AAAA,EACpC;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,IAAI,SAAS,YAAA,EAAc;AACzB,MAAA,IAAI,KAAA,GAAQ,OAAO,MAAA,CAAO,gBAAgB,KAAK,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,gBAAgB,CAAA,EAAG;AACtF,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAAS,OAAO,KAAK,CAAA;AAC3B,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,IAAK,CAAC,MAAA,CAAO,SAAA,CAAU,MAAM,CAAA,EAAG,OAAO,IAAA;AAClE,IAAA,OAAO,WAAA,CAAY,QAAQ,OAAO,CAAA;AAAA,EACpC;AAEA,EAAA,OAAO,IAAA;AACT;AAOO,SAAS,SAAA,CAAU,KAAA,EAAgB,KAAA,GAAQ,OAAA,EAAS,OAAA,EAAsC;AAC/F,EAAA,MAAM,MAAA,GAAS,SAAA,CAAU,KAAA,EAAO,OAAO,CAAA;AACvC,EAAA,IAAI,UAAU,IAAA,EAAM;AAClB,IAAA,MAAM,IAAI,SAAA,CAAU,CAAA,EAAG,KAAK,CAAA,yBAAA,CAA2B,CAAA;AAAA,EACzD;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,mBAAmB,KAAA,EAAyB;AACnD,EAAA,MAAM,UAAA,GAAa,qBAAqB,KAAK,CAAA;AAC7C,EAAA,OAAO,UAAA,CAAW,IAAA,KAAS,WAAA,IAAe,UAAA,CAAW,IAAA,KAAS,YAAA;AAChE;AAEA,SAAS,cAAA,CACP,OAAA,EACA,KAAA,EACA,MAAA,EACQ;AACR,EAAA,MAAM,YAAY,MAAA,CAAO,WAAA;AACzB,EAAA,MAAM,QAAA,GACJ,OAAO,MAAA,CAAO,OAAA,KAAY,aACtB,MAAA,CAAO,OAAA,CAAQ,SAAS,KAAK,CAAA,GAC7B,OAAO,OAAA,KAAY,QAAA,GACjB,YAAY,OAAA,GACZ,SAAA,GAAY,KAAK,GAAA,CAAI,CAAA,EAAG,UAAU,CAAC,CAAA;AAE3C,EAAA,MAAM,SAAA,GAAY,OAAO,QAAA,CAAS,QAAQ,IAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,QAAQ,CAAA,GAAI,CAAA;AACtE,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,YAAY,SAAS,CAAA;AACrD,EAAA,MAAM,eACJ,OAAO,MAAA,CAAO,MAAA,KAAW,QAAA,GACrB,KAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,GAAG,MAAA,CAAO,MAAM,CAAC,CAAA,GACtC,MAAA,CAAO,SACL,GAAA,GACA,CAAA;AAER,EAAA,IAAI,CAAC,cAAc,OAAO,OAAA;AAC1B,EAAA,MAAM,YAAY,OAAA,GAAU,YAAA;AAC5B,EAAA,MAAM,MAAA,GAAA,CAAU,IAAA,CAAK,MAAA,EAAO,GAAI,IAAI,CAAA,IAAK,SAAA;AACzC,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,OAAA,GAAU,MAAM,CAAA;AACrC;AAEA,SAAS,MAAM,EAAA,EAA2B;AACxC,EAAA,IAAI,EAAA,IAAM,CAAA,EAAG,OAAO,OAAA,CAAQ,OAAA,EAAQ;AACpC,EAAA,OAAO,IAAI,QAAQ,CAAA,OAAA,KAAW;AAC5B,IAAA,UAAA,CAAW,SAAS,EAAE,CAAA;AAAA,EACxB,CAAC,CAAA;AACH;AAYA,eAAsB,SAAA,CAAa,QAAqB,EAAA,EAAkC;AACxF,EAAA,MAAM,OAAA,GAAU,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,KAAA,CAAM,MAAA,CAAO,OAAO,CAAC,CAAA;AACtD,EAAA,MAAM,WAAA,GAAc,OAAO,WAAA,IAAe,kBAAA;AAC1C,EAAA,MAAM,cAAA,GAAiB;AAAA,IACrB,WAAA,EAAa,OAAO,WAAA,IAAe,GAAA;AAAA,IACnC,UAAA,EAAY,OAAO,UAAA,IAAc,GAAA;AAAA,IACjC,OAAA,EAAS,OAAO,OAAA,IAAW,aAAA;AAAA,IAC3B,MAAA,EAAQ,OAAO,MAAA,IAAU;AAAA,GAC3B;AAEA,EAAA,KAAA,IAAS,QAAA,GAAW,CAAA,EAAG,QAAA,IAAY,OAAA,EAAS,YAAY,CAAA,EAAG;AACzD,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,EAAA,EAAG;AAAA,IAClB,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,YAAY,OAAA,EAAS;AACvB,QAAA,MAAM,KAAA;AAAA,MACR;AAEA,MAAA,MAAM,iBAAiB,QAAA,GAAW,CAAA;AAClC,MAAA,MAAM,KAAA,GAAQ,MAAM,WAAA,CAAY,KAAA,EAAO,cAAc,CAAA;AACrD,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,MAAM,KAAA;AAAA,MACR;AAEA,MAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,cAAA,EAAgB,KAAA,EAAO,cAAc,CAAA;AAClE,MAAA,MAAM,MAAM,KAAK,CAAA;AAAA,IACnB;AAAA,EACF;AAEA,EAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AACzD;;;ACpyBO,SAAS,eACd,KAAA,EACyB;AACzB,EAAA,MAAM,EAAA,GAA8B;AAAA,IAClC,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,MAAA,CACED,MAAAA,EACA,KAAA,EACA,MAAA,EACA;AACA,MAAA,IAAI,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC/D,QAAA,OAAO,MAAM,IAAA,CAAUA,MAAK,CAAA,CAAE,MAAA,CAAO,QAAW,KAAiC,CAAA;AAAA,MACnF;AACA,MAAA,OAAO,MAAM,IAAA,CAAUA,MAAK,CAAA,CAAE,MAAA,CAAO,OAAO,MAAM,CAAA;AAAA,IACpD,CAAA;AAAA,IACA,MAAA,CACEA,MAAAA,EACA,MAAA,EACA,OAAA,EAC2C;AAC3C,MAAA,OAAO,MAAM,OAAA,CAAQ,MAAM,IACvB,KAAA,CAAM,IAAA,CAAmCA,MAAK,CAAA,CAAE,MAAA,CAAO,MAAA,EAAQ,OAAO,IACtE,KAAA,CAAM,IAAA,CAAmCA,MAAK,CAAA,CAAE,MAAA,CAAO,QAAQ,OAAO,CAAA;AAAA,IAC5E,CAAA;AAAA,IACA,MAAA,CACEA,MAAAA,EACA,MAAA,EACA,OAAA,EAC2C;AAC3C,MAAA,OAAO,MAAM,OAAA,CAAQ,MAAM,IACvB,KAAA,CAAM,IAAA,CAA0BA,MAAK,CAAA,CAAE,MAAA,CAAO,MAAA,EAAQ,OAAO,IAC7D,KAAA,CAAM,IAAA,CAA0BA,MAAK,CAAA,CAAE,MAAA,CAAO,QAAQ,OAAO,CAAA;AAAA,IACnE,CAAA;AAAA,IACA,MAAA,CACEA,MAAAA,EACA,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,MAAM,IAAA,CAA0BA,MAAK,CAAA,CAAE,MAAA,CAAO,QAAQ,OAAO,CAAA;AAAA,IACtE,CAAA;AAAA,IACA,MAAA,CACEA,QACA,OAAA,EACA;AACA,MAAA,OAAO,KAAA,CAAM,IAAA,CAAUA,MAAK,CAAA,CAAE,OAAO,OAAO,CAAA;AAAA,IAC9C,CAAA;AAAA,IACA,GAAA,CACE,EAAA,EACA,IAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,KAAA,CAAM,GAAA,CAAe,EAAA,EAAI,IAAA,EAAM,OAAO,CAAA;AAAA,IAC/C,CAAA;AAAA,IACA,KAAA,CAAqB,OAAe,OAAA,EAAoC;AACtE,MAAA,OAAO,KAAA,CAAM,KAAA,CAAW,KAAA,EAAO,OAAO,CAAA;AAAA,IACxC;AAAA,GACF;AAEA,EAAA,OAAO,EAAA;AACT;;;ACuCO,SAAS,uBAAA,CACd,IAAA,EACA,MAAA,GAAkC,EAAC,EACV;AACzB,EAAA,MAAM,MAAA,GAA4C,OAAO,KAAA,EAAO,OAAA,KAAY;AAC1E,IAAA,MAAM,OAAA,GAAU,uBAAuB,KAAK,CAAA;AAC5C,IAAA,yBAAA,CAA0B,SAAS,KAAK,CAAA;AAExC,IAAA,MAAM,cAAA,GAAiB,OAAA,CAAQ,GAAA,CAAI,CAAC,QAAQ,KAAA,KAAiC;AAC3E,MAAA,MAAM,aAAa,uBAAA,CAAwB,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,SAAS,MAAM,CAAA;AAChF,MAAA,OAAO;AAAA,QACL,MAAA;AAAA,QACA,aAAA,EAAe;AAAA,UACb,OAAO,KAAA,CAAM,KAAA;AAAA,UACb,QAAQ,KAAA,CAAM,MAAA;AAAA,UACd,WAAA,EAAa,UAAA;AAAA,UACb,IAAA,EAAM,KAAA,CAAM,IAAA,IAAQ,MAAA,CAAO,QAAA;AAAA,UAC3B,aAAA,EAAe,KAAA,CAAM,aAAA,IAAiB,MAAA,CAAO,QAAA;AAAA,UAC7C,WAAA,EAAa,KAAA,CAAM,WAAA,IAAe,KAAA,CAAM,UAAA;AAAA,UACxC,SAAA,EAAW,KAAA,CAAM,SAAA,IAAa,MAAA,CAAO,WAAA;AAAA,UACrC,YAAA,EAAc,KAAA,CAAM,YAAA,IAAgB,MAAA,CAAO,WAAA;AAAA,UAC3C,YAAY,MAAA,CAAO,SAAA;AAAA,UACnB,QAAQ,KAAA,CAAM,MAAA;AAAA,UACd,UAAU,KAAA,CAAM,QAAA;AAAA,UAChB,wBAAwB,KAAA,CAAM,sBAAA;AAAA,UAC9B,KAAK,KAAA,CAAM,GAAA;AAAA,UACX,eAAe,KAAA,CAAM,aAAA;AAAA,UACrB,YAAY,KAAA,CAAM,UAAA;AAAA,UAClB,oBAAoB,KAAA,CAAM;AAAA;AAC5B,OACF;AAAA,IACF,CAAC,CAAA;AAED,IAAA,KAAA,CAAM,aAAa,sBAAA,CAAuB,WAAA,EAAa,SAAS,CAAA,EAAG,CAAA,EAAG,CAAC,CAAC,CAAA;AAExE,IAAA,MAAM,UAAA,GACJ,cAAA,CAAe,MAAA,KAAW,CAAA,GACtB,CAAC,MAAM,IAAA,CAAK,sBAAA,CAAuB,cAAA,CAAe,CAAC,CAAA,CAAE,aAAA,EAAe,OAAO,CAAC,CAAA,GAAA,CAC3E,MAAM,IAAA,CAAK,uBAAA,CAAwB,EAAE,KAAA,EAAO,cAAA,CAAe,GAAA,CAAI,CAAAlB,QAAAA,KAAWA,QAAAA,CAAQ,aAAa,CAAA,EAAE,EAAG,OAAO,CAAA,EAAG,KAAA;AAErH,IAAA,MAAM,kBAAkB,IAAI,KAAA,CAAM,eAAe,MAAM,CAAA,CAAE,KAAK,CAAC,CAAA;AAC/D,IAAA,MAAM,WAAwC,EAAC;AAE/C,IAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,cAAA,CAAe,MAAA,EAAQ,SAAS,CAAA,EAAG;AAC7D,MAAA,MAAMA,QAAAA,GAAU,eAAe,KAAK,CAAA;AACpC,MAAA,MAAM,SAAA,GAAY,WAAW,KAAK,CAAA;AAClC,MAAA,MAAM,WAAW,MAAM,aAAA;AAAA,QACrB,UAAU,MAAA,CAAO,GAAA;AAAA,QACjB,SAAA,CAAU,MAAA,CAAO,OAAA,IAAW,EAAC;AAAA,QAC7BA,QAAAA,CAAQ,MAAA;AAAA,QACR,KAAA;AAAA,QACA,OAAA;AAAA,QACA,CAAA,QAAA,KAAY;AACV,UAAA,eAAA,CAAgB,KAAK,IAAI,QAAA,CAAS,MAAA;AAClC,UAAA,KAAA,CAAM,UAAA,GAAa,sBAAA,CAAuB,WAAA,EAAa,OAAA,EAAS,KAAA,EAAO,SAAS,MAAA,EAAQ,GAAA,CAAI,eAAe,CAAC,CAAC,CAAA;AAAA,QAC/G;AAAA,OACF;AACA,MAAA,QAAA,CAAS,IAAA,CAAK;AAAA,QACZ,MAAM,SAAA,CAAU,IAAA;AAAA,QAChB,QAAQ,SAAA,CAAU,MAAA;AAAA,QAClB,MAAA,EAAQA,SAAQ,MAAA,CAAO,MAAA;AAAA,QACvB,QAAA,EAAUA,SAAQ,MAAA,CAAO,QAAA;AAAA,QACzB,WAAA,EAAaA,SAAQ,aAAA,CAAc,WAAA;AAAA,QACnC;AAAA,OACD,CAAA;AACD,MAAA,eAAA,CAAgB,KAAK,CAAA,GAAIA,QAAAA,CAAQ,MAAA,CAAO,SAAA;AACxC,MAAA,KAAA,CAAM,UAAA,GAAa,sBAAA,CAAuB,UAAA,EAAY,OAAA,EAAS,KAAA,EAAOA,QAAAA,CAAQ,MAAA,CAAO,SAAA,EAAW,GAAA,CAAI,eAAe,CAAC,CAAC,CAAA;AAAA,IACvH;AAEA,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,QAAA;AAAA,MACP,OAAO,QAAA,CAAS;AAAA,KAClB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,QAAA,IAAY,CAChB,KAAA,EACA,cAAA,EACA,YAAA,KACmC;AACnC,IAAA,MAAM,EAAE,SAAS,KAAA,EAAO,OAAA,KAAY,qBAAA,CAAsB,KAAA,EAAO,gBAAgB,YAAY,CAAA;AAC7F,IAAA,MAAM,SAAA,GAAY,QAAQ,GAAA,CAAI,CAAA,MAAA,KAAU,KAAK,mBAAA,CAAoB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAC,CAAA;AACxF,IAAA,OAAO,MAAM,OAAA,CAAQ,KAAK,CAAA,IAAMI,SAAAA,CAAS,KAAK,CAAA,IAAK,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAO,CAAA,GAC1E,OAAA,CAAQ,IAAI,SAAS,CAAA,GACrB,UAAU,CAAC,CAAA;AAAA,EACjB,CAAA,CAAA;AAEA,EAAA,MAAM,UAAA,IAAc,CAClB,KAAA,EACA,OAAA,KACyE;AACzE,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,MAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAA,MAAA,KAAU,KAAK,iBAAA,CAAkB,MAAA,EAAQ,OAAO,CAAC,CAAC,CAAA;AAAA,IACjF;AACA,IAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,KAAA,EAAiB,OAAO,CAAA;AAAA,EACxD,CAAA,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,QAAA;AAAA,IAEA,IAAA,CAAK,OAAO,OAAA,EAAS;AACnB,MAAA,MAAM,SAAS,kBAAA,CAAmB,KAAA,CAAM,UAAU,EAAA,EAAI,KAAA,EAAO,SAAS,MAAM,CAAA;AAC5E,MAAA,OAAO,IAAA,CAAK,gBAAA;AAAA,QACV;AAAA,UACE,OAAO,KAAA,CAAM,KAAA;AAAA,UACb;AAAA,SACF;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAA,EAAQ;AAAA,GACV;AACF;AAEO,SAAS,mBACd,IAAA,EACA,KAAA,EAWA,OAAA,EACA,MAAA,GAAkC,EAAC,EAC3B;AACR,EAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,KAAA,EAAO,OAAA,EAAS,MAAM,CAAA;AACxD,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,UAAA,IAAc,MAAA,CAAO,UAAA;AAC9C,EAAA,MAAM,SAAS,OAAO,UAAA,KAAe,UAAA,GACjC,UAAA,CAAW,OAAO,CAAA,GAClB,UAAA;AACJ,EAAA,OAAO,eAAA,CAAgB,sBAAsB,MAAA,IAAU,EAAA,EAAI,OAAO,CAAA,EAAG,qBAAA,CAAsB,IAAA,EAAM,OAAO,CAAC,CAAA;AAC3G;AAEA,SAAS,uBAAA,CACP,KAAA,EACA,MAAA,EACA,KAAA,EACA,SACA,MAAA,EACQ;AACR,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,WAAA,IAAe,KAAA,CAAM,UAAA;AAC/C,EAAA,MAAM,cAAc,KAAA,CAAM,kBAAA;AAC1B,EAAA,MAAM,eAAe,MAAA,CAAO,QAAA;AAC5B,EAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,KAAA,EAAO,OAAA,EAAS,MAAM,CAAA;AACxD,EAAA,MAAM,GAAA,GAAM,WAAA,GACR,qBAAA,CAAsB,WAAA,EAAa;AAAA,IACjC,GAAG,OAAA;AAAA,IACH,IAAA,EAAM;AAAA,MACJ,GAAG,OAAA,CAAQ,IAAA;AAAA,MACX,KAAA;AAAA,MACA,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,MAAM,MAAA,CAAO;AAAA;AACf,GACD,IACD,WAAA,IAAe,YAAA;AACnB,EAAA,OAAO,kBAAA,CAAmB,GAAA,EAAK,KAAA,EAAO,OAAA,EAAS,MAAM,CAAA;AACvD;AAEA,SAAS,uBAAuB,KAAA,EAA+D;AAC7F,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAA;AACjC,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,MAAM,IAAI,MAAM,uDAAuD,CAAA;AAAA,EACzE;AACA,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,MAAA,EAAQ,KAAA,KAAU;AAClC,IAAA,MAAM,QAAA,GAAW,MAAM,QAAA,IAAY,UAAA,CAAW,MAAM,CAAA,IAAK,CAAA,KAAA,EAAQ,QAAQ,CAAC,CAAA,CAAA;AAC1E,IAAA,MAAM,SAAA,GAAY,WAAW,MAAM,CAAA;AACnC,IAAA,MAAM,cAAc,KAAA,CAAM,YAAA,IAAgB,KAAA,CAAM,SAAA,IAAa,kBAAkB,MAAM,CAAA;AACrF,IAAA,OAAO;AAAA,MACL,MAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAC,CAAA;AACH;AAEA,SAAS,yBAAA,CAA0B,SAA4C,KAAA,EAA2C;AACxH,EAAA,MAAM,QAAA,GAAW,MAAM,QAAA,IAAY,CAAA;AACnC,EAAA,IAAI,OAAA,CAAQ,SAAS,QAAA,EAAU;AAC7B,IAAA,MAAM,IAAI,MAAM,CAAA,2CAAA,EAA8C,QAAQ,QAAQ,QAAA,KAAa,CAAA,GAAI,EAAA,GAAK,GAAG,CAAA,cAAA,CAAgB,CAAA;AAAA,EACzH;AAEA,EAAA,MAAM,gBAAA,GAAmB,KAAA,CAAM,gBAAA,KAC7B,KAAA,CAAM,aAAA,KAAkB,MAAA,GAAY,MAAA,GAAY,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,aAAA,GAAgB,IAAA,GAAO,IAAI,CAAA,CAAA;AAE9F,EAAA,IAAI,qBAAqB,MAAA,EAAW;AAClC,IAAA,MAAM,WAAW,OAAA,CAAQ,IAAA,CAAK,CAAA,MAAA,KAAU,MAAA,CAAO,YAAY,gBAAgB,CAAA;AAC3E,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oCAAA,EAAuC,SAAS,QAAQ,CAAA,eAAA,EAAkB,gBAAgB,CAAA,MAAA,CAAQ,CAAA;AAAA,IACpH;AAAA,EACF;AAEA,EAAA,MAAM,iBAAA,GAAoB,mBAAA,CAAoB,KAAA,CAAM,iBAAA,IAAqB,MAAM,UAAU,CAAA;AACzF,EAAA,IAAI,iBAAA,CAAkB,OAAO,CAAA,EAAG;AAC9B,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,IAAA,CAAK,CAAA,MAAA,KAAU,CAAC,iBAAA,CAAkB,GAAA,CAAI,aAAA,CAAc,MAAA,CAAO,QAAQ,CAAC,CAAC,CAAA;AAC7F,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oCAAA,EAAuC,OAAA,CAAQ,QAAQ,CAAA,0BAAA,CAA4B,CAAA;AAAA,IACrG;AAAA,EACF;AACF;AAEA,eAAe,cACb,GAAA,EACA,aAAA,EACA,MAAA,EACA,KAAA,EACA,SACA,UAAA,EACmB;AACnB,EAAA,MAAM,OAAA,GAAU,IAAI,OAAA,CAAQ,aAAa,CAAA;AACzC,EAAA,IAAI,OAAA,CAAQ,KAAA,CAAM,aAAa,CAAA,CAAE,OAAA,CAAQ,CAAC,KAAA,EAAO,GAAA,KAAQ,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,KAAK,CAAC,CAAA;AAChF,EAAA,IAAI,OAAO,WAAA,IAAe,CAAC,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,EAAG;AACtD,IAAA,OAAA,CAAQ,GAAA,CAAI,cAAA,EAAgB,MAAA,CAAO,WAAW,CAAA;AAAA,EAChD;AACA,EAAA,IAAI,OAAO,mBAAmB,WAAA,EAAa;AACzC,IAAA,OAAO,oBAAA,CAAqB,GAAA,EAAK,MAAA,EAAQ,OAAA,EAAS,SAAS,UAAU,CAAA;AAAA,EACvE;AACA,EAAA,UAAA,CAAW,EAAE,MAAA,EAAQ,CAAA,EAAG,CAAA;AACxB,EAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,IAChC,MAAA,EAAQ,KAAA;AAAA,IACR,OAAA;AAAA,IACA,MAAM,MAAA,CAAO,MAAA;AAAA,IACb,QAAQ,OAAA,EAAS;AAAA,GAClB,CAAA;AACD,EAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,8CAAA,EAAiD,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AAAA,EACpF;AACA,EAAA,UAAA,CAAW,EAAE,MAAA,EAAQ,MAAA,CAAO,SAAA,EAAW,CAAA;AACvC,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,oBAAA,CACP,GAAA,EACA,MAAA,EACA,OAAA,EACA,SACA,UAAA,EACmB;AACnB,EAAA,MAAM,GAAA,GAAM,cAAA;AACZ,EAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,IAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,IAAI,KAAA,CAAM,oEAAoE,CAAC,CAAA;AAAA,EACvG;AACA,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,EAAI;AACpB,IAAA,MAAM,KAAA,GAAQ,MAAM,GAAA,CAAI,KAAA,EAAM;AAC9B,IAAA,GAAA,CAAI,IAAA,CAAK,OAAO,GAAG,CAAA;AACnB,IAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,KAAA,EAAO,GAAA,KAAQ,IAAI,gBAAA,CAAiB,GAAA,EAAK,KAAK,CAAC,CAAA;AAChE,IAAA,GAAA,CAAI,MAAA,CAAO,UAAA,GAAa,CAAC,KAAA,KAAyC;AAChE,MAAA,UAAA,CAAW,EAAE,MAAA,EAAQ,KAAA,CAAM,MAAA,EAAQ,CAAA;AAAA,IACrC,CAAA;AACA,IAAA,GAAA,CAAI,SAAS,MAAM;AACjB,MAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,QAAA,OAAA,CAAQ,MAAA,CAAO,mBAAA,CAAoB,OAAA,EAAS,KAAK,CAAA;AAAA,MACnD;AACA,MAAA,IAAI,GAAA,CAAI,MAAA,GAAS,GAAA,IAAO,GAAA,CAAI,UAAU,GAAA,EAAK;AACzC,QAAA,MAAA,CAAO,IAAI,KAAA,CAAM,CAAA,8CAAA,EAAiD,GAAA,CAAI,MAAM,EAAE,CAAC,CAAA;AAC/E,QAAA;AAAA,MACF;AACA,MAAA,UAAA,CAAW,EAAE,MAAA,EAAQ,MAAA,CAAO,SAAA,EAAW,CAAA;AACvC,MAAA,OAAA,CAAQ,IAAI,QAAA,CAAS,GAAA,CAAI,QAAA,EAAuD;AAAA,QAC9E,QAAQ,GAAA,CAAI,MAAA;AAAA,QACZ,YAAY,GAAA,CAAI,UAAA;AAAA,QAChB,OAAA,EAAS,eAAA,CAAgB,GAAA,CAAI,qBAAA,EAAuB;AAAA,OACrD,CAAC,CAAA;AAAA,IACJ,CAAA;AACA,IAAA,GAAA,CAAI,UAAU,MAAM;AAClB,MAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,QAAA,OAAA,CAAQ,MAAA,CAAO,mBAAA,CAAoB,OAAA,EAAS,KAAK,CAAA;AAAA,MACnD;AACA,MAAA,MAAA,CAAO,IAAI,KAAA,CAAM,wDAAwD,CAAC,CAAA;AAAA,IAC5E,CAAA;AACA,IAAA,GAAA,CAAI,UAAU,MAAM;AAClB,MAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,QAAA,OAAA,CAAQ,MAAA,CAAO,mBAAA,CAAoB,OAAA,EAAS,KAAK,CAAA;AAAA,MACnD;AACA,MAAA,MAAA,CAAO,IAAI,YAAA,CAAa,gBAAA,EAAkB,YAAY,CAAC,CAAA;AAAA,IACzD,CAAA;AACA,IAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,MAAA,IAAI,OAAA,CAAQ,OAAO,OAAA,EAAS;AAC1B,QAAA,KAAA,EAAM;AACN,QAAA;AAAA,MACF;AACA,MAAA,OAAA,CAAQ,OAAO,gBAAA,CAAiB,OAAA,EAAS,OAAO,EAAE,IAAA,EAAM,MAAM,CAAA;AAAA,IAChE;AACA,IAAA,GAAA,CAAI,IAAA,CAAK,OAAO,MAAM,CAAA;AAAA,EACxB,CAAC,CAAA;AACH;AAEA,SAAS,qBAAA,CACP,KAAA,EACA,cAAA,EACA,YAAA,EAKA;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,EAAE,SAAS,CAAC,KAAK,GAAG,KAAA,EAAO,cAAA,EAAsD,SAAS,YAAA,EAAa;AAAA,EAChH;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,EAAE,SAAS,CAAC,GAAG,KAAK,CAAA,EAAG,KAAA,EAAO,cAAA,EAAsD,OAAA,EAAS,YAAA,EAAa;AAAA,EACnH;AACA,EAAA,MAAM,aAAA,GAAgB,KAAA;AACtB,EAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAS,GAAG,OAAM,GAAI,aAAA;AACtC,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,OAAA,GAAU,CAAC,GAAG,OAAO,IAAI,MAAA,GAAS,CAAC,MAAM,CAAA,GAAI,EAAC;AAAA,IACvD,KAAA;AAAA,IACA,OAAA,EAAS;AAAA,GACX;AACF;AAEA,SAAS,iBAAA,CACP,KAAA,EAUA,OAAA,EACA,MAAA,EAC0B;AAC1B,EAAA,MAAM,iBAAiB,KAAA,CAAM,cAAA,IAAkB,KAAA,CAAM,eAAA,IAAmB,SAAS,cAAA,IAAkB,MAAA;AACnG,EAAA,MAAM,SAAS,KAAA,CAAM,MAAA,IAAU,KAAA,CAAM,OAAA,IAAW,SAAS,MAAA,IAAU,MAAA;AACnE,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,UAAA,IAAc,KAAA,CAAM,WAAA,IAAe,MAAA;AAC5D,EAAA,MAAM,IAAA,GAAO;AAAA,IACX,GAAI,MAAA,CAAO,IAAA,IAAQ,EAAC;AAAA,IACpB,GAAI,KAAA,CAAM,IAAA,IAAQ;AAAC,GACrB;AACA,EAAA,IAAI,mBAAmB,MAAA,EAAW;AAChC,IAAA,IAAA,CAAK,cAAA,GAAiB,cAAA;AACtB,IAAA,IAAA,CAAK,eAAA,GAAkB,cAAA;AAAA,EACzB;AACA,EAAA,IAAI,WAAW,MAAA,EAAW;AACxB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA;AAAA,EACjB;AACA,EAAA,IAAI,eAAe,MAAA,EAAW;AAC5B,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,IAAA,CAAK,WAAA,GAAc,UAAA;AAAA,EACrB;AACA,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,GAAA,EAAK;AAAA,MACH,GAAG,cAAA,EAAe;AAAA,MAClB,GAAI,MAAA,CAAO,GAAA,IAAO,EAAC;AAAA,MACnB,GAAI,KAAA,CAAM,GAAA,IAAO;AAAC,KACpB;AAAA,IACA,cAAA;AAAA,IACA,eAAA,EAAiB,cAAA;AAAA,IACjB,MAAA;AAAA,IACA,OAAA,EAAS,MAAA;AAAA,IACT,UAAA;AAAA,IACA,WAAA,EAAa;AAAA,GACf;AACF;AAEA,SAAS,qBAAA,CAAsB,UAAkB,OAAA,EAA2C;AAC1F,EAAA,OAAO,SAAS,OAAA,CAAQ,4BAAA,EAA8B,CAAC,MAAA,EAAQ,YAAgC,UAAA,KAAmC;AAChI,IAAA,MAAM,KAAA,GAAA,CAAS,UAAA,IAAc,UAAA,IAAc,EAAA,EAAI,IAAA,EAAK;AACpD,IAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AACnB,IAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,KAAA,EAAO,OAAO,CAAA;AACjD,IAAA,OAAO,UAAU,MAAA,IAAa,KAAA,KAAU,IAAA,GAAO,EAAA,GAAK,OAAO,KAAK,CAAA;AAAA,EAClE,CAAC,CAAA;AACH;AAEA,SAAS,oBAAA,CAAqB,OAAe,OAAA,EAA+D;AAC1G,EAAA,IAAI,KAAA,CAAM,UAAA,CAAW,MAAM,CAAA,EAAG;AAC5B,IAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,EACnC;AACA,EAAA,IAAI,KAAA,IAAS,QAAQ,IAAA,EAAM;AACzB,IAAA,OAAO,OAAA,CAAQ,KAAK,KAAK,CAAA;AAAA,EAC3B;AACA,EAAA,OAAO,OAAA,CAAQ,IAAI,KAAK,CAAA;AAC1B;AAEA,SAAS,mBAAmB,KAAA,EAAkC;AAC5D,EAAA,OAAO,KAAA,CACJ,GAAA,CAAI,CAAA,IAAA,KAAQ,IAAA,CAAK,MAAK,CAAE,OAAA,CAAQ,YAAA,EAAc,EAAE,CAAC,CAAA,CACjD,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AACb;AAEA,SAAS,QAAQ,KAAA,EAA2E;AAC1F,EAAA,IAAI,cAAA,CAAe,KAAK,CAAA,EAAG,OAAO,CAAC,KAAK,CAAA;AACxC,EAAA,OAAO,KAAA,CAAM,KAAK,KAAK,CAAA;AACzB;AAEA,SAAS,eAAe,KAAA,EAAoD;AAC1E,EAAA,OAAO,KAAA,YAAiB,IAAA,IAAQ,KAAA,YAAiB,WAAA,IAAe,KAAA,YAAiB,UAAA;AACnF;AAEA,SAAS,WAAW,MAAA,EAAuD;AACzE,EAAA,OAAOA,SAAAA,CAAS,MAAM,CAAA,IAAK,OAAO,OAAO,IAAA,KAAS,QAAA,IAAY,MAAA,CAAO,IAAA,CAAK,IAAA,EAAK,GAC3E,MAAA,CAAO,IAAA,CAAK,MAAK,GACjB,MAAA;AACN;AAEA,SAAS,WAAW,MAAA,EAA2C;AAC7D,EAAA,IAAI,MAAA,YAAkB,IAAA,EAAM,OAAO,MAAA,CAAO,IAAA;AAC1C,EAAA,OAAO,MAAA,CAAO,UAAA;AAChB;AAEA,SAAS,kBAAkB,MAAA,EAAuD;AAChF,EAAA,OAAO,MAAA,YAAkB,QAAQ,MAAA,CAAO,IAAA,CAAK,MAAK,GAAI,MAAA,CAAO,IAAA,CAAK,IAAA,EAAK,GAAI,MAAA;AAC7E;AAEA,SAAS,oBAAoB,UAAA,EAAwD;AACnF,EAAA,OAAO,IAAI,GAAA,CAAA,CAAK,UAAA,IAAc,EAAC,EAAG,IAAI,CAAA,SAAA,KAAa,SAAA,CAAU,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA,CAAE,WAAA,EAAa,CAAA,CAAE,MAAA,CAAO,OAAO,CAAC,CAAA;AAChH;AAEA,SAAS,cAAc,QAAA,EAA0B;AAC/C,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,WAAA,CAAY,GAAG,CAAA;AACxC,EAAA,OAAO,OAAA,KAAY,KAAK,EAAA,GAAK,QAAA,CAAS,MAAM,OAAA,GAAU,CAAC,EAAE,WAAA,EAAY;AACvE;AAEA,SAAS,sBAAA,CACP,KAAA,EACA,OAAA,EACA,SAAA,EACA,QACA,eAAA,EAC6B;AAC7B,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,SAAS,CAAA,EAAG,SAAA,IAAa,CAAA;AAC/C,EAAA,MAAM,cAAA,GAAiB,QAAQ,MAAA,CAAO,CAAC,YAAY,MAAA,KAAW,UAAA,GAAa,MAAA,CAAO,SAAA,EAAW,CAAC,CAAA;AAC9F,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAW,OAAA,CAAQ,MAAA;AAAA,IACnB,QAAA,EAAU,OAAA,CAAQ,SAAS,CAAA,EAAG,QAAA,IAAY,EAAA;AAAA,IAC1C,MAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA,EAAS,QAAQ,CAAA,GAAI,IAAA,CAAK,MAAO,MAAA,GAAS,KAAA,GAAS,GAAG,CAAA,GAAI,GAAA;AAAA,IAC1D,eAAA;AAAA,IACA,cAAA;AAAA,IACA,gBAAA,EAAkB,iBAAiB,CAAA,GAAI,IAAA,CAAK,MAAO,eAAA,GAAkB,cAAA,GAAkB,GAAG,CAAA,GAAI;AAAA,GAChG;AACF;AAEA,SAAS,IAAI,MAAA,EAAmC;AAC9C,EAAA,OAAO,OAAO,MAAA,CAAO,CAAC,OAAO,KAAA,KAAU,KAAA,GAAQ,OAAO,CAAC,CAAA;AACzD;AAEA,SAAS,gBAAgB,GAAA,EAAsB;AAC7C,EAAA,MAAM,OAAA,GAAU,IAAI,OAAA,EAAQ;AAC5B,EAAA,KAAA,MAAW,QAAQ,GAAA,CAAI,IAAA,EAAK,CAAE,KAAA,CAAM,SAAS,CAAA,EAAG;AAC9C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAC9B,IAAA,IAAI,UAAU,EAAA,EAAI;AAClB,IAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,CAAE,IAAA,EAAK,EAAG,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA,CAAE,MAAM,CAAA;AAAA,EACvE;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,cAAA,GAAmC;AAC1C,EAAA,MAAM,cAAe,UAAA,CAAwD,OAAA;AAC7E,EAAA,OAAO,WAAA,EAAa,OAAO,EAAC;AAC9B;AAEA,SAASA,UAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAA,CAAQ,KAAK,CAAA,IAAK,OAAO,KAAA,KAAU,QAAA;AAC5C;;;ACtpBO,IAAM,kBAAA,GAAqB;AAAA,EAChC,SAAA,EAAW,SAAA;AAAA,EACX,QAAA,EAAU,UAAA;AAAA,EACV,aAAA,EAAe;AAAA,IACb,GAAA,EAAK,8BAAA;AAAA,IACL,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,OAAA,EAAS;AAAA,IACP;AAAA,MACE,IAAA,EAAM,qBAAA;AAAA,MACN,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,mBAAA;AAAA,MACN,gBAAA,EAAkB,KAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,sBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,mBAAA;AAAA,MACN,WAAA,EAAa,6BAAA;AAAA,MACb,gBAAA,EAAkB,KAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,sBAAA;AAAA,MACN,MAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM,wBAAA;AAAA,MACN,UAAA,EAAY,CAAC,IAAI,CAAA;AAAA,MACjB,WAAA,EAAa,6BAAA;AAAA,MACb,gBAAA,EAAkB,KAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,sBAAA;AAAA,MACN,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,wBAAA;AAAA,MACN,UAAA,EAAY,CAAC,IAAI,CAAA;AAAA,MACjB,gBAAA,EAAkB,KAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,wBAAA;AAAA,MACN,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,sBAAA;AAAA,MACN,gBAAA,EAAkB,KAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,wBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,2BAAA;AAAA,MACN,WAAA,EAAa,+BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,yBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,4BAAA;AAAA,MACN,WAAA,EAAa,gCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,kBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,qBAAA;AAAA,MACN,WAAA,EAAa,yBAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,gBAAA;AAAA,MACN,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,0BAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,mBAAA;AAAA,MACN,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,8BAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,WAAA,EAAa,CAAC,SAAS,CAAA;AAAA,MACvB,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,qBAAA;AAAA,MACN,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,gCAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,WAAA,EAAa,CAAC,SAAS,CAAA;AAAA,MACvB,gBAAA,EAAkB,KAAA;AAAA,MAClB,YAAA,EAAc,UAAA;AAAA,MACd,MAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,IAAA,EAAM,mBAAA;AAAA,MACN,MAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM,0BAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,WAAA,EAAa,0BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,mBAAA;AAAA,MACN,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,0BAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,0BAAA;AAAA,MACN,MAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM,qCAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,WAAA,EAAa,iCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,2BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,qCAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,WAAA,EAAa,iCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,8BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,gCAAA;AAAA,MACN,WAAA,EAAa,qCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,qBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,yBAAA;AAAA,MACN,WAAA,EAAa,4BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,mBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,uBAAA;AAAA,MACN,WAAA,EAAa,0BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,oBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,uBAAA;AAAA,MACN,WAAA,EAAa,2BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,sBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,yCAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,WAAA,EAAa,6BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,yBAAA;AAAA,MACN,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,iCAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc,6BAAA;AAAA,MACd,MAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,IAAA,EAAM,iBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,+BAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,WAAA,EAAa,wBAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,wBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,4BAAA;AAAA,MACN,WAAA,EAAa,+BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,wBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,4BAAA;AAAA,MACN,WAAA,EAAa,+BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,oBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,kCAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,kBAAA;AAAA,MACN,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,gCAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,yBAAA;AAAA,MACN,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,qCAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,wBAAA;AAAA,MACN,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,oCAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,WAAA,EAAa,CAAC,SAAS,CAAA;AAAA,MACvB,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,yBAAA;AAAA,MACN,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,mCAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,2BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,wDAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAA,EAAW,YAAY,CAAA;AAAA,MACpC,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,0BAAA;AAAA,MACN,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,gDAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAA,EAAW,YAAY,CAAA;AAAA,MACpC,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,yBAAA;AAAA,MACN,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,oCAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,WAAA,EAAa,CAAC,YAAY,CAAA;AAAA,MAC1B,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,yBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,oCAAA;AAAA,MACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,MACtB,WAAA,EAAa,6BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,oBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,uBAAA;AAAA,MACN,WAAA,EAAa,2BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,oBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,uBAAA;AAAA,MACN,WAAA,EAAa,2BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,wBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,2BAAA;AAAA,MACN,WAAA,EAAa,8BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,wBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,4BAAA;AAAA,MACN,WAAA,EAAa,+BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,yBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,6BAAA;AAAA,MACN,WAAA,EAAa,gCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,wBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,4BAAA;AAAA,MACN,WAAA,EAAa,+BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,oBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,kBAAA;AAAA,MACN,WAAA,EAAa,2BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,mBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,uBAAA;AAAA,MACN,WAAA,EAAa,sBAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,qBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,yBAAA;AAAA,MACN,WAAA,EAAa,sBAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,uBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,2BAAA;AAAA,MACN,WAAA,EAAa,8BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,qBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,yBAAA;AAAA,MACN,WAAA,EAAa,4BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,mBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,uBAAA;AAAA,MACN,WAAA,EAAa,0BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,qBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,sBAAA;AAAA,MACN,WAAA,EAAa,sBAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,2BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,6BAAA;AAAA,MACN,WAAA,EAAa,+BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,qBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,yBAAA;AAAA,MACN,WAAA,EAAa,sBAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,8BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,6BAAA;AAAA,MACN,WAAA,EAAa,6BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,+BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,8BAAA;AAAA,MACN,WAAA,EAAa,gCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,2BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,2BAAA;AAAA,MACN,WAAA,EAAa,iCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,6BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,mCAAA;AAAA,MACN,WAAA,EAAa,qCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,4BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,kCAAA;AAAA,MACN,WAAA,EAAa,qCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,2BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,yBAAA;AAAA,MACN,WAAA,EAAa,kCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,2BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,gCAAA;AAAA,MACN,WAAA,EAAa,kCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,2BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,gCAAA;AAAA,MACN,WAAA,EAAa,kCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,oBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,uBAAA;AAAA,MACN,WAAA,EAAa,0CAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,qBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,yBAAA;AAAA,MACN,WAAA,EAAa,0BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,qBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,yBAAA;AAAA,MACN,WAAA,EAAa,0BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,2BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,4BAAA;AAAA,MACN,WAAA,EAAa,+BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,2BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,gCAAA;AAAA,MACN,WAAA,EAAa,kCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,8BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,mCAAA;AAAA,MACN,WAAA,EAAa,+BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,wBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,yBAAA;AAAA,MACN,WAAA,EAAa,4BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,wBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,6BAAA;AAAA,MACN,WAAA,EAAa,+BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,2BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,gCAAA;AAAA,MACN,WAAA,EAAa,4BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,8BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,gCAAA;AAAA,MACN,WAAA,EAAa,iCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,8BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,oCAAA;AAAA,MACN,WAAA,EAAa,oCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,iCAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,uCAAA;AAAA,MACN,WAAA,EAAa,iCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,sBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,uBAAA;AAAA,MACN,WAAA,EAAa,0BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,sBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,2BAAA;AAAA,MACN,WAAA,EAAa,6BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,yBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,8BAAA;AAAA,MACN,WAAA,EAAa,0BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,8BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,2BAAA;AAAA,MACN,WAAA,EAAa,+BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,0BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,8BAAA;AAAA,MACN,WAAA,EAAa,iCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,gCAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,6BAAA;AAAA,MACN,WAAA,EAAa,iCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,6BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,0BAAA;AAAA,MACN,WAAA,EAAa,8BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,2BAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,+BAAA;AAAA,MACN,WAAA,EAAa,kCAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,wBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,qBAAA;AAAA,MACN,WAAA,EAAa,0BAAA;AAAA,MACb,gBAAA,EAAkB,QAAA;AAAA,MAClB,YAAA,EAAc;AAAA;AAChB;AAEJ;AAwjBO,IAAM,sBAAA,GAAyB;AAAA,EACpC,UAAA,EAAY,aAAA;AAAA,EACZ,YAAA,EAAc,eAAA;AAAA,EACd,SAAA,EAAW,YAAA;AAAA,EACX,WAAA,EAAa,cAAA;AAAA,EACb,qBAAA,EAAuB,yBAAA;AAAA,EACvB,YAAA,EAAc;AAChB;AA8BO,IAAM,kBAAA,GAAN,cAAiC,KAAA,CAAM;AAAA,EACnC,IAAA;AAAA,EACA,UAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA;AAAA,EACA,WAAA;AAAA,EACA,GAAA;AAAA,EACA,UAAA;AAAA,EACA,uBAAA;AAAA,EAET,YAAY,KAAA,EAAgC;AAC1C,IAAA,KAAA,CAAM,MAAM,OAAA,EAAS,EAAE,KAAA,EAAO,KAAA,CAAM,OAAO,CAAA;AAC3C,IAAA,IAAA,CAAK,IAAA,GAAO,oBAAA;AACZ,IAAA,IAAA,CAAK,OAAO,KAAA,CAAM,IAAA;AAClB,IAAA,IAAA,CAAK,SAAS,KAAA,CAAM,MAAA;AACpB,IAAA,IAAA,CAAK,WAAW,KAAA,CAAM,QAAA;AACtB,IAAA,IAAA,CAAK,SAAS,KAAA,CAAM,MAAA;AACpB,IAAA,IAAA,CAAK,YAAY,KAAA,CAAM,SAAA;AACvB,IAAA,IAAA,CAAK,OAAO,KAAA,CAAM,IAAA;AAClB,IAAA,IAAA,CAAK,WAAA,GAAc,aAAA,CAAc,KAAA,CAAM,KAAK,CAAA;AAC5C,IAAA,IAAA,CAAK,GAAA,GAAM,MAAM,GAAA,IAAO,IAAA;AACxB,IAAA,IAAA,CAAK,UAAA,GAAa,2BAA2B,KAAK,CAAA;AAClD,IAAA,IAAA,CAAK,0BAA0B,IAAA,CAAK,UAAA;AACpC,IAAA,IAAA,CAAK,UAAA,GAAa,KAAK,UAAA,CAAW,IAAA;AAClC,IAAA,IAAA,CAAK,IAAA,GAAO,KAAK,UAAA,CAAW,IAAA;AAC5B,IAAA,IAAA,CAAK,QAAA,GAAW,KAAK,UAAA,CAAW,QAAA;AAChC,IAAA,IAAA,CAAK,SAAA,GAAY,KAAK,UAAA,CAAW,SAAA;AACjC,IAAA,MAAA,CAAO,cAAA,CAAe,MAAM,yBAAA,EAA2B;AAAA,MACrD,OAAO,IAAA,CAAK,UAAA;AAAA,MACZ,UAAA,EAAY,KAAA;AAAA,MACZ,YAAA,EAAc,KAAA;AAAA,MACd,QAAA,EAAU;AAAA,KACX,CAAA;AAAA,EACH;AAAA,EAEA,SAAA,GAAuC;AACrC,IAAA,OAAO;AAAA,MACL,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,OAAO,IAAA,CAAK,WAAA;AAAA,MACZ,KAAK,IAAA,CAAK;AAAA,KACZ;AAAA,EACF;AACF;AAkVA,SAASA,UAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAA,CAAQ,KAAK,CAAA,IAAK,OAAO,UAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,cAAc,KAAA,EAAoC;AACzD,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM,OAAO,MAAA;AAClD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,EAAA,IAAI,KAAA,YAAiB,SAAS,KAAA,CAAM,OAAA,CAAQ,MAAK,EAAG,OAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,EAAK;AAC9E,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AAAA,EAC7B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACrB;AACF;AAEA,SAAS,mBAAmB,IAAA,EAAsD;AAChF,EAAA,IAAI,IAAA,KAAS,eAAe,OAAO,aAAA;AACnC,EAAA,IAAI,IAAA,KAAS,iBAAiB,OAAO,eAAA;AACrC,EAAA,IAAI,IAAA,KAAS,cAAA,IAAkB,IAAA,KAAS,yBAAA,EAA2B,OAAO,cAAA;AAC1E,EAAA,IAAI,IAAA,KAAS,cAAc,OAAO,YAAA;AAClC,EAAA,OAAO,eAAA;AACT;AAEA,SAAS,WAAA,CAAY,SAAkB,KAAA,EAA8C;AACnF,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AAC9B,IAAA,IAAI,KAAA,EAAO,IAAA,EAAK,EAAG,OAAO,MAAM,IAAA,EAAK;AAAA,EACvC;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,4BAAA,CACP,UACA,MAAA,EACQ;AACR,EAAA,MAAM,eAAe,MAAA,CAAO,QAAQ,EAAE,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAClD,EAAA,KAAA,MAAW,SAAA,IAAa,mBAAmB,OAAA,EAAS;AAClD,IAAA,IAAI,SAAA,CAAU,WAAW,MAAA,EAAQ;AACjC,IAAA,MAAM,OAAA,GAAU,CAAA,CAAA,EAAI,SAAA,CAAU,IAAA,CAAK,OAAA,CAAQ,qBAAA,EAAuB,MAAM,CAAA,CAAE,OAAA,CAAQ,gBAAA,EAAkB,OAAO,CAAC,CAAA,CAAA,CAAA;AAC5G,IAAA,IAAI,IAAI,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA,EAAG;AAC1C,MAAA,OAAO,SAAA,CAAU,IAAA;AAAA,IACnB;AAAA,EACF;AACA,EAAA,OAAO,CAAA,QAAA,EAAW,MAAA,CAAO,WAAA,EAAa,CAAA,CAAA;AACxC;AAEA,SAAS,2BAA2B,KAAA,EAAuD;AACzF,EAAA,OAAO,oBAAA;AAAA,IACL;AAAA,MACE,IAAA,EAAM,IAAA;AAAA,MACN,KAAA,EAAO;AAAA,QACL,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,WAAA,EAAa,kBAAA,CAAmB,KAAA,CAAM,IAAI,CAAA;AAAA,QAC1C,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,GAAA,EAAK,KAAA,CAAM,GAAA,IAAO,KAAA,CAAM,KAAA,IAAS;AAAA,OACnC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,IAAA,EAAM,kBAAA,CAAmB,KAAA,CAAM,IAAI,CAAA;AAAA,QACnC,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,UAAU,KAAA,CAAM,QAAA;AAAA,QAChB,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,WAAW,KAAA,CAAM,SAAA;AAAA,QACjB,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,KAAA,EAAO,aAAA,CAAc,KAAA,CAAM,KAAK;AAAA,OAClC;AAAA,MACA,GAAA,EAAK,KAAA,CAAM,GAAA,IAAO,KAAA,CAAM,KAAA,IAAS,IAAA;AAAA,MACjC,QAAQ,KAAA,CAAM;AAAA,KAChB;AAAA,IACA,EAAE,SAAA,EAAW,4BAAA,CAA6B,MAAM,QAAA,EAAU,KAAA,CAAM,MAAM,CAAA;AAAE,GAC1E;AACF;AAEO,SAAS,yBAAyB,KAAA,EAAoD;AAC3F,EAAA,OAAO,IAAI,mBAAmB,KAAK,CAAA;AACrC;AAEA,eAAe,kBAAA,CACb,KAAA,EACA,OAAA,EACA,cAAA,EACe;AACf,EAAA,MAAM,WAAW,CAAC,cAAA,EAAgB,OAAA,EAAS,OAAA,EAAS,OAAO,CAAA,CAAE,MAAA;AAAA,IAC3D,CAAC,OAAA,KAAkD,OAAO,OAAA,KAAY;AAAA,GACxE;AACA,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,IAAI;AACF,MAAA,MAAM,QAAQ,KAAK,CAAA;AAAA,IACrB,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACF;AAEA,eAAe,kBAAA,CACb,KAAA,EACA,OAAA,EACA,cAAA,EACgB;AAChB,EAAA,MAAM,KAAA,GAAQ,yBAAyB,KAAK,CAAA;AAC5C,EAAA,MAAM,kBAAA,CAAmB,KAAA,EAAO,OAAA,EAAS,cAAc,CAAA;AACvD,EAAA,MAAM,KAAA;AACR;AAEA,SAASM,kBAAAA,CAAkB,SAAiB,WAAA,EAA4B;AACtE,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,EAAiB,WAAA,EAAa,KAAA,EAAM;AAAA,EACvD;AAEA,EAAA,MAAM,0BACJ,WAAA,EAAa,WAAA,EAAY,CAAE,QAAA,CAAS,kBAAkB,CAAA,IAAK,KAAA;AAC7D,EAAA,MAAM,SAAA,GACJ,2BAA2B,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,IAAK,OAAA,CAAQ,WAAW,GAAG,CAAA;AAE9E,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAoB,WAAA,EAAa,KAAA,EAAM;AAAA,EAC1D;AAEA,EAAA,IAAI;AACF,IAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,CAAK,MAAM,OAAO,CAAA,EAAc,aAAa,KAAA,EAAM;AAAA,EACtE,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAoB,WAAA,EAAa,IAAA,EAAK;AAAA,EACzD;AACF;AAEA,SAAS,WAAA,CAAY,MAAc,KAAA,EAAwB;AACzD,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,MAAM,MAAA,GAAS,IAAI,eAAA,EAAgB;AACnC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM;AAC3C,IAAA,MAAA,CAAO,GAAA,CAAI,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EAC/B;AACA,EAAA,MAAM,SAAA,GAAY,OAAO,QAAA,EAAS;AAClC,EAAA,OAAO,SAAA,GAAY,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,GAAK,IAAA;AAC9C;AAEA,SAAS,YAAY,IAAA,EAAyC;AAC5D,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,0BAAA,CACP,UACA,cAAA,EAC2B;AAC3B,EAAA,IAAI,CAAC,gBAAgB,aAAA,EAAe;AAClC,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,MAAM,CAAC,UAAU,SAAS,CAAA,GAAI,OAAO,QAAQ,CAAA,CAAE,KAAA,CAAM,GAAA,EAAK,CAAC,CAAA;AAC3D,EAAA,MAAM,eAAA,GAAkB,QAAA,CAAS,UAAA,CAAW,WAAW,CAAA,GACnD,QAAA,CAAS,KAAA,CAAM,UAAA,CAAW,MAAM,CAAA,GAChC,QAAA,KAAa,UAAA,GACX,GAAA,GACA,QAAA;AACN,EAAA,MAAM,eAAe,eAAA,CAAgB,UAAA,CAAW,GAAG,CAAA,GAAI,eAAA,GAAkB,IAAI,eAAe,CAAA,CAAA;AAC5F,EAAA,OAAO,YAAY,SAAA,GAAY,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,SAAS,KAAK,YAAY,CAAA;AAC9E;AAEA,SAAS,aAAA,CAAc,IAAA,EAAc,IAAA,EAAc,KAAA,EAAuB;AACxE,EAAA,OAAO,KAAK,OAAA,CAAQ,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,CAAA,EAAK,kBAAA,CAAmB,KAAK,CAAC,CAAA;AAC5D;AAEA,SAASE,oBAAAA,CAAoB,SAAkB,QAAA,EAA0B;AACvE,EAAA,IAAIR,SAAAA,CAAS,OAAO,CAAA,EAAG;AACrB,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,SAAS,OAAA,CAAQ,OAAA;AAC5D,IAAA,IAAI,OAAO,OAAA,KAAY,QAAA,IAAY,OAAA,CAAQ,MAAK,EAAG;AACjD,MAAA,OAAO,QAAQ,IAAA,EAAK;AAAA,IACtB;AAAA,EACF;AACA,EAAA,IAAI,OAAO,OAAA,KAAY,QAAA,IAAY,OAAA,CAAQ,MAAK,EAAG;AACjD,IAAA,OAAO,QAAQ,IAAA,EAAK;AAAA,EACtB;AACA,EAAA,OAAO,QAAA;AACT;AAEA,SAASgB,kBAAiB,OAAA,EAAsC;AAC9D,EAAA,IAAI,CAAChB,SAAAA,CAAS,OAAO,CAAA,EAAG,OAAO,MAAA;AAC/B,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,IAAA,IAAQ,OAAA,CAAQ,UAAA;AACrC,EAAA,OAAO,OAAO,SAAS,QAAA,IAAY,IAAA,CAAK,MAAK,GAAI,IAAA,CAAK,MAAK,GAAI,MAAA;AACjE;AAEA,SAAS,kBAAkB,OAAA,EAAsC;AAC/D,EAAA,IAAI,CAACA,SAAAA,CAAS,OAAO,CAAA,EAAG,OAAO,MAAA;AAC/B,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,IAAS,OAAA,CAAQ,MAAA;AACvC,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,CAAM,MAAK,GAAI,KAAA,CAAM,MAAK,GAAI,MAAA;AACpE;AAEA,SAAS,uBAAuB,KAAA,EAAwC;AACtE,EAAA,IAAI,oBAAA,CAAqB,KAAK,CAAA,EAAG;AAC/B,IAAA,IAAI,KAAA,CAAM,IAAA,KAAS,aAAA,EAAe,OAAO,aAAA;AACzC,IAAA,IAAI,KAAA,CAAM,IAAA,KAAS,eAAA,EAAiB,OAAO,eAAA;AAC3C,IAAA,IAAI,KAAA,CAAM,IAAA,KAAS,cAAA,EAAgB,OAAO,cAAA;AAC1C,IAAA,IAAI,KAAA,CAAM,IAAA,KAAS,YAAA,EAAc,OAAO,YAAA;AAAA,EAC1C;AACA,EAAA,OAAO,eAAA;AACT;AAEA,eAAe,oBACb,OAAA,EACA,QAAA,EACA,QACA,QAAA,EACA,OAAA,EACA,SACA,cAAA,EACY;AACZ,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,OAAA,EAAS,OAAA,GACrB,6BAAA,CAA8B,OAAA,CAAQ,OAAO,CAAA,GAC7C,cAAA,EAAgB,OAAA,GACd,6BAAA,CAA8B,cAAA,CAAe,OAAO,IACpD,OAAA,CAAQ,OAAA;AACd,IAAA,GAAA,GAAM,qBAAA,CAAsB,OAAA,EAAS,0BAAA,CAA2B,QAAA,EAAU,cAAc,CAAC,CAAA;AACzF,IAAA,OAAA,GAAU,OAAA,CAAQ,aAAa,OAAO,CAAA;AAAA,EACxC,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,kBAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,uBAAuB,KAAK,CAAA;AAAA,QAClC,OAAA,EAAS,iBAAiB,KAAA,GACtB,KAAA,CAAM,UACN,CAAA,eAAA,EAAkB,MAAM,IAAI,QAAQ,CAAA,kCAAA,CAAA;AAAA,QACxC,MAAA,EAAQ,oBAAA,CAAqB,KAAK,CAAA,GAAI,MAAM,MAAA,GAAS,CAAA;AAAA,QACrD,QAAA;AAAA,QACA,MAAA;AAAA,QACA,GAAA,EAAK,KAAA;AAAA,QACL,SAAA,EAAW,oBAAA,CAAqB,KAAK,CAAA,GAAI,MAAM,SAAA,GAAY,MAAA;AAAA,QAC3D,IAAA,EAAM,oBAAA,CAAqB,KAAK,CAAA,GAAI,MAAM,IAAA,GAAO,MAAA;AAAA,QACjD,KAAA,EAAO;AAAA,OACT;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACA,EAAA,MAAM,WAAA,GAA2B;AAAA,IAC/B,MAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAQ,OAAA,EAAS;AAAA,GACnB;AACA,EAAA,IAAI,OAAA,KAAY,MAAA,IAAa,MAAA,KAAW,KAAA,EAAO;AAC7C,IAAA,WAAA,CAAY,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA;AAAA,EAC3C;AAEA,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI;AACF,IAAA,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK,WAAW,CAAA;AAAA,EACzC,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,IAAA,OAAO,kBAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,eAAA;AAAA,QACN,SAAS,CAAA,2CAAA,EAA8C,MAAM,CAAA,CAAA,EAAI,QAAQ,KAAK,OAAO,CAAA,CAAA;AAAA,QACrF,MAAA,EAAQ,CAAA;AAAA,QACR,QAAA;AAAA,QACA,MAAA;AAAA,QACA,KAAA,EAAO;AAAA,OACT;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI;AACF,IAAA,OAAA,GAAU,MAAM,SAAS,IAAA,EAAK;AAAA,EAChC,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,kBAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,eAAA;AAAA,QACN,OAAA,EAAS,CAAA,eAAA,EAAkB,MAAM,CAAA,CAAA,EAAI,QAAQ,CAAA,gCAAA,CAAA;AAAA,QAC7C,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,QAAA;AAAA,QACA,MAAA;AAAA,QACA,SAAA,EAAW,YAAY,QAAA,CAAS,OAAA,EAAS,CAAC,qBAAA,EAAuB,cAAA,EAAgB,YAAY,CAAC,CAAA;AAAA,QAC9F,KAAA,EAAO;AAAA,OACT;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACA,EAAA,MAAM,UAAA,GAAaM,mBAAkB,OAAA,IAAW,EAAA,EAAI,SAAS,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAC,CAAA;AACxF,EAAA,MAAM,SAAA,GAAY,YAAY,QAAA,CAAS,OAAA,EAAS,CAAC,qBAAA,EAAuB,cAAA,EAAgB,YAAY,CAAC,CAAA;AACrG,EAAA,IAAI,WAAW,WAAA,EAAa;AAC1B,IAAA,OAAO,kBAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,cAAA;AAAA,QACN,OAAA,EAAS,CAAA,eAAA,EAAkB,MAAM,CAAA,CAAA,EAAI,QAAQ,CAAA,wBAAA,CAAA;AAAA,QAC7C,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,QAAA;AAAA,QACA,MAAA;AAAA,QACA,SAAA;AAAA,QACA,KAAK,UAAA,CAAW;AAAA,OAClB;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,IAAA,OAAO,kBAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,YAAA;AAAA,QACN,OAAA,EAASE,oBAAAA;AAAA,UACP,UAAA,CAAW,MAAA;AAAA,UACX,kBAAkB,MAAM,CAAA,CAAA,EAAI,QAAQ,CAAA,oBAAA,EAAuB,SAAS,MAAM,CAAA;AAAA,SAC5E;AAAA,QACA,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,QAAA;AAAA,QACA,MAAA;AAAA,QACA,SAAA;AAAA,QACA,IAAA,EAAMQ,iBAAAA,CAAiB,UAAA,CAAW,MAAM,CAAA;AAAA,QACxC,KAAA,EAAO,iBAAA,CAAkB,UAAA,CAAW,MAAM,CAAA;AAAA,QAC1C,KAAK,UAAA,CAAW;AAAA,OAClB;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,aAAa,QAAA,EAAU;AACzB,IAAA,IAAI,CAAChB,UAAS,UAAA,CAAW,MAAM,KAAK,EAAE,MAAA,IAAU,WAAW,MAAA,CAAA,EAAS;AAClE,MAAA,OAAO,kBAAA;AAAA,QACL;AAAA,UACE,IAAA,EAAM,yBAAA;AAAA,UACN,OAAA,EAAS,CAAA,eAAA,EAAkB,MAAM,CAAA,CAAA,EAAI,QAAQ,CAAA,oCAAA,CAAA;AAAA,UAC7C,QAAQ,QAAA,CAAS,MAAA;AAAA,UACjB,QAAA;AAAA,UACA,MAAA;AAAA,UACA,SAAA;AAAA,UACA,KAAK,UAAA,CAAW;AAAA,SAClB;AAAA,QACA,OAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AACA,IAAA,OAAO,WAAW,MAAA,CAAO,IAAA;AAAA,EAC3B;AAEA,EAAA,OAAO,UAAA,CAAW,MAAA;AACpB;AAEA,eAAe,yBAAA,CACb,OAAA,EACA,QAAA,EACA,MAAA,EACA,SACA,cAAA,EACmB;AACnB,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,OAAA,EAAS,OAAA,GACrB,6BAAA,CAA8B,OAAA,CAAQ,OAAO,CAAA,GAC7C,cAAA,EAAgB,OAAA,GACd,6BAAA,CAA8B,cAAA,CAAe,OAAO,IACpD,OAAA,CAAQ,OAAA;AACd,IAAA,GAAA,GAAM,qBAAA,CAAsB,OAAA,EAAS,0BAAA,CAA2B,QAAA,EAAU,cAAc,CAAC,CAAA;AACzF,IAAA,OAAA,GAAU,OAAA,CAAQ,aAAa,OAAO,CAAA;AAAA,EACxC,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,kBAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,uBAAuB,KAAK,CAAA;AAAA,QAClC,OAAA,EAAS,iBAAiB,KAAA,GACtB,KAAA,CAAM,UACN,CAAA,eAAA,EAAkB,MAAM,IAAI,QAAQ,CAAA,kCAAA,CAAA;AAAA,QACxC,MAAA,EAAQ,oBAAA,CAAqB,KAAK,CAAA,GAAI,MAAM,MAAA,GAAS,CAAA;AAAA,QACrD,QAAA;AAAA,QACA,MAAA;AAAA,QACA,GAAA,EAAK,KAAA;AAAA,QACL,SAAA,EAAW,oBAAA,CAAqB,KAAK,CAAA,GAAI,MAAM,SAAA,GAAY,MAAA;AAAA,QAC3D,IAAA,EAAM,oBAAA,CAAqB,KAAK,CAAA,GAAI,MAAM,IAAA,GAAO,MAAA;AAAA,QACjD,KAAA,EAAO;AAAA,OACT;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI;AACF,IAAA,QAAA,GAAW,MAAM,MAAM,GAAA,EAAK;AAAA,MAC1B,MAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAQ,OAAA,EAAS;AAAA,KAClB,CAAA;AAAA,EACH,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,IAAA,OAAO,kBAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,eAAA;AAAA,QACN,SAAS,CAAA,2CAAA,EAA8C,MAAM,CAAA,CAAA,EAAI,QAAQ,KAAK,OAAO,CAAA,CAAA;AAAA,QACrF,MAAA,EAAQ,CAAA;AAAA,QACR,QAAA;AAAA,QACA,MAAA;AAAA,QACA,KAAA,EAAO;AAAA,OACT;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,SAAS,EAAA,EAAI;AACf,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,MAAM,SAAA,GAAY,YAAY,QAAA,CAAS,OAAA,EAAS,CAAC,qBAAA,EAAuB,cAAA,EAAgB,YAAY,CAAC,CAAA;AACrG,EAAA,IAAI,YAAA,GAAwB,IAAA;AAC5B,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,IAAA,EAAK;AACpC,IAAA,MAAM,UAAA,GAAaM,mBAAkB,OAAA,IAAW,EAAA,EAAI,SAAS,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAC,CAAA;AACxF,IAAA,YAAA,GAAe,UAAA,CAAW,MAAA;AAAA,EAC5B,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,kBAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,eAAA;AAAA,QACN,OAAA,EAAS,CAAA,eAAA,EAAkB,MAAM,CAAA,CAAA,EAAI,QAAQ,CAAA,sCAAA,CAAA;AAAA,QAC7C,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,QAAA;AAAA,QACA,MAAA;AAAA,QACA,SAAA;AAAA,QACA,KAAA,EAAO;AAAA,OACT;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO,kBAAA;AAAA,IACL;AAAA,MACE,IAAA,EAAM,YAAA;AAAA,MACN,OAAA,EAASE,oBAAAA;AAAA,QACP,YAAA;AAAA,QACA,kBAAkB,MAAM,CAAA,CAAA,EAAI,QAAQ,CAAA,oBAAA,EAAuB,SAAS,MAAM,CAAA;AAAA,OAC5E;AAAA,MACA,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,QAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,IAAA,EAAMQ,kBAAiB,YAAY,CAAA;AAAA,MACnC,KAAA,EAAO,kBAAkB,YAAY,CAAA;AAAA,MACrC,GAAA,EAAK;AAAA,KACP;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,WAAW,IAAA,EAA0C;AAC5D,EAAA,OAAO,OAAO,IAAA,KAAS,WAAA,IAAe,IAAA,YAAgB,IAAA;AACxD;AAEA,SAAS,qBAAqB,IAAA,EAAgE;AAC5F,EAAA,OAAO,OAAO,cAAA,KAAmB,WAAA,IAAe,IAAA,YAAgB,cAAA;AAClE;AAEA,eAAe,sBAAA,CACb,SAAA,EACA,aAAA,EACA,IAAA,EACA,OAAA,EACmB;AACnB,EAAA,MAAM,OAAA,GAAU,IAAI,OAAA,CAAQ,aAAa,CAAA;AACzC,EAAA,MAAA,CAAO,QAAQ,OAAA,EAAS,OAAA,IAAW,EAAE,EAAE,OAAA,CAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,KAAK,CAAC,CAAA;AACxF,EAAA,IAAI,CAAC,QAAQ,GAAA,CAAI,cAAc,KAAK,UAAA,CAAW,IAAI,CAAA,IAAK,IAAA,CAAK,IAAA,EAAM;AACjE,IAAA,OAAA,CAAQ,GAAA,CAAI,cAAA,EAAgB,IAAA,CAAK,IAAI,CAAA;AAAA,EACvC;AAEA,EAAA,MAAM,IAAA,GAA0C;AAAA,IAC9C,MAAA,EAAQ,KAAA;AAAA,IACR,OAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAQ,OAAA,EAAS;AAAA,GACnB;AACA,EAAA,IAAI,oBAAA,CAAqB,IAAI,CAAA,EAAG;AAC9B,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AACA,EAAA,OAAO,KAAA,CAAM,WAAW,IAAI,CAAA;AAC9B;AAEA,SAAS,oBAAoB,MAAA,EAA8D;AACzF,EAAA,MAAM,UAAkC,EAAE,GAAI,MAAA,CAAO,OAAA,IAAW,EAAC,EAAG;AACpE,EAAA,OAAO;AAAA,IACL,GAAG,MAAA;AAAA,IACH,MAAA,EAAQ,KAAA;AAAA,IACR,OAAA;AAAA,IACA,WAAW,MAAA,CAAO,UAAA;AAAA,IAClB,GAAA,CAAI,MAAM,OAAA,EAAS;AACjB,MAAA,OAAO,sBAAA,CAAuB,MAAA,CAAO,GAAA,EAAK,OAAA,EAAS,MAAM,OAAO,CAAA;AAAA,IAClE;AAAA,GACF;AACF;AAEA,SAAS,mBAAmB,QAAA,EAAqE;AAC/F,EAAA,OAAO;AAAA,IACL,GAAG,QAAA;AAAA,IACH,MAAA,EAAQ,mBAAA,CAAoB,QAAA,CAAS,MAAM;AAAA,GAC7C;AACF;AAEA,SAAS,oBACP,QAAA,EACsC;AACtC,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,QAAA,CAAS,KAAA,CAAM,GAAA,CAAI,kBAAkB;AAAA,GAC9C;AACF;AAEA,SAAS,0BAA0B,KAAA,EAAsE;AACvG,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,IAAA;AACnC,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,WAAA,IAAe,KAAA,CAAM,UAAA;AAC/C,EAAA,IAAI,CAAC,KAAA,EAAO,IAAA,EAAK,EAAG;AAClB,IAAA,MAAM,IAAI,MAAM,mDAAmD,CAAA;AAAA,EACrE;AACA,EAAA,IAAI,CAAC,WAAA,EAAa,IAAA,EAAK,EAAG;AACxB,IAAA,MAAM,IAAI,MAAM,+DAA+D,CAAA;AAAA,EACjF;AACA,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,QAAA,EAAU,IAAA,EAAK;AACtC,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,YAAA,EAAc,IAAA,EAAK;AAC9C,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,WAAA;AAAA,IACA,IAAA,EAAM,MAAM,IAAA,IAAQ,QAAA;AAAA,IACpB,aAAA,EAAe,KAAA,CAAM,aAAA,IAAiB,YAAA,IAAgB,QAAA;AAAA,IACtD,WAAA,EAAa,KAAA,CAAM,WAAA,IAAe,KAAA,CAAM,UAAA;AAAA,IACxC,SAAA,EAAW,KAAA,CAAM,SAAA,IAAa,KAAA,CAAM,QAAA;AAAA,IACpC,YAAA,EAAc,KAAA,CAAM,YAAA,IAAgB,KAAA,CAAM,WAAA;AAAA,IAC1C,UAAA,EAAY,KAAA,CAAM,UAAA,IAAc,KAAA,CAAM,SAAA;AAAA,IACtC,OAAA,EAAS,KAAA,CAAM,OAAA,IAAW,KAAA,CAAM,MAAA;AAAA,IAChC,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,YAAY,KAAA,CAAM,UAAA;AAAA,IAClB,UAAU,KAAA,CAAM,QAAA;AAAA,IAChB,wBAAwB,KAAA,CAAM,sBAAA;AAAA,IAC9B,KAAK,KAAA,CAAM,GAAA;AAAA,IACX,eAAe,KAAA,CAAM,aAAA;AAAA,IACrB,YAAY,KAAA,CAAM,UAAA;AAAA,IAClB,oBAAoB,KAAA,CAAM;AAAA,GAC5B;AACF;AAEA,eAAe,+BAAA,CACb,OAAA,EACA,QAAA,EACA,IAAA,EACA,SACA,cAAA,EACY;AACZ,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,OAAA,EAAS,OAAA,GACrB,6BAAA,CAA8B,OAAA,CAAQ,OAAO,CAAA,GAC7C,cAAA,EAAgB,OAAA,GACd,6BAAA,CAA8B,cAAA,CAAe,OAAO,IACpD,OAAA,CAAQ,OAAA;AACd,IAAA,GAAA,GAAM,qBAAA,CAAsB,OAAA,EAAS,0BAAA,CAA2B,QAAA,EAAU,cAAc,CAAC,CAAA;AACzF,IAAA,OAAA,GAAU,OAAA,CAAQ,aAAa,OAAO,CAAA;AAAA,EACxC,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,kBAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,uBAAuB,KAAK,CAAA;AAAA,QAClC,SAAS,KAAA,YAAiB,KAAA,GACtB,KAAA,CAAM,OAAA,GACN,sBAAsB,QAAQ,CAAA,kCAAA,CAAA;AAAA,QAClC,MAAA,EAAQ,oBAAA,CAAqB,KAAK,CAAA,GAAI,MAAM,MAAA,GAAS,CAAA;AAAA,QACrD,QAAA;AAAA,QACA,MAAA,EAAQ,KAAA;AAAA,QACR,GAAA,EAAK,KAAA;AAAA,QACL,SAAA,EAAW,oBAAA,CAAqB,KAAK,CAAA,GAAI,MAAM,SAAA,GAAY,MAAA;AAAA,QAC3D,IAAA,EAAM,oBAAA,CAAqB,KAAK,CAAA,GAAI,MAAM,IAAA,GAAO,MAAA;AAAA,QACjD,KAAA,EAAO;AAAA,OACT;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO,QAAQ,cAAc,CAAA;AAC7B,EAAA,OAAO,QAAQ,cAAc,CAAA;AAC7B,EAAA,IAAI,UAAA,CAAW,IAAI,CAAA,IAAK,IAAA,CAAK,IAAA,EAAM;AACjC,IAAA,OAAA,CAAQ,cAAc,IAAI,IAAA,CAAK,IAAA;AAAA,EACjC;AAEA,EAAA,MAAM,WAAA,GAAiD;AAAA,IACrD,MAAA,EAAQ,KAAA;AAAA,IACR,OAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAQ,OAAA,EAAS;AAAA,GACnB;AACA,EAAA,IAAI,oBAAA,CAAqB,IAAI,CAAA,EAAG;AAC9B,IAAA,WAAA,CAAY,MAAA,GAAS,MAAA;AAAA,EACvB;AAEA,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI;AACF,IAAA,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK,WAAW,CAAA;AAAA,EACzC,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,IAAA,OAAO,kBAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,eAAA;AAAA,QACN,OAAA,EAAS,CAAA,+CAAA,EAAkD,QAAQ,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA;AAAA,QAC/E,MAAA,EAAQ,CAAA;AAAA,QACR,QAAA;AAAA,QACA,MAAA,EAAQ,KAAA;AAAA,QACR,KAAA,EAAO;AAAA,OACT;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI;AACF,IAAA,OAAA,GAAU,MAAM,SAAS,IAAA,EAAK;AAAA,EAChC,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,kBAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,eAAA;AAAA,QACN,OAAA,EAAS,sBAAsB,QAAQ,CAAA,gCAAA,CAAA;AAAA,QACvC,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,QAAA;AAAA,QACA,MAAA,EAAQ,KAAA;AAAA,QACR,SAAA,EAAW,YAAY,QAAA,CAAS,OAAA,EAAS,CAAC,qBAAA,EAAuB,cAAA,EAAgB,YAAY,CAAC,CAAA;AAAA,QAC9F,KAAA,EAAO;AAAA,OACT;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAaV,mBAAkB,OAAA,IAAW,EAAA,EAAI,SAAS,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAC,CAAA;AACxF,EAAA,MAAM,SAAA,GAAY,YAAY,QAAA,CAAS,OAAA,EAAS,CAAC,qBAAA,EAAuB,cAAA,EAAgB,YAAY,CAAC,CAAA;AACrG,EAAA,IAAI,WAAW,WAAA,EAAa;AAC1B,IAAA,OAAO,kBAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,cAAA;AAAA,QACN,OAAA,EAAS,sBAAsB,QAAQ,CAAA,wBAAA,CAAA;AAAA,QACvC,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,QAAA;AAAA,QACA,MAAA,EAAQ,KAAA;AAAA,QACR,SAAA;AAAA,QACA,KAAK,UAAA,CAAW;AAAA,OAClB;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACA,EAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,IAAA,OAAO,kBAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,YAAA;AAAA,QACN,OAAA,EAASE,oBAAAA;AAAA,UACP,UAAA,CAAW,MAAA;AAAA,UACX,CAAA,mBAAA,EAAsB,QAAQ,CAAA,oBAAA,EAAuB,QAAA,CAAS,MAAM,CAAA;AAAA,SACtE;AAAA,QACA,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,QAAA;AAAA,QACA,MAAA,EAAQ,KAAA;AAAA,QACR,SAAA;AAAA,QACA,IAAA,EAAMQ,iBAAAA,CAAiB,UAAA,CAAW,MAAM,CAAA;AAAA,QACxC,KAAA,EAAO,iBAAA,CAAkB,UAAA,CAAW,MAAM,CAAA;AAAA,QAC1C,KAAK,UAAA,CAAW;AAAA,OAClB;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACA,EAAA,IAAI,CAAChB,UAAS,UAAA,CAAW,MAAM,KAAK,EAAE,MAAA,IAAU,WAAW,MAAA,CAAA,EAAS;AAClE,IAAA,OAAO,kBAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,yBAAA;AAAA,QACN,OAAA,EAAS,sBAAsB,QAAQ,CAAA,oCAAA,CAAA;AAAA,QACvC,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,QAAA;AAAA,QACA,MAAA,EAAQ,KAAA;AAAA,QACR,SAAA;AAAA,QACA,KAAK,UAAA,CAAW;AAAA,OAClB;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,WAAW,MAAA,CAAO,IAAA;AAC3B;AAEO,SAAS,mBAAA,CACd,SACA,cAAA,EACqB;AACrB,EAAA,MAAM,sBAAA,GAAyB,cAAA;AAC/B,EAAA,MAAM,OAAA,GAAU,CACd,IAAA,EACA,MAAA,EACA,SACA,OAAA,KACG,mBAAA;AAAA,IACH,OAAA;AAAA,IACA,YAAY,IAAI,CAAA;AAAA,IAChB,MAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAMiB,WAAAA,GAAa,CACjB,IAAA,EACA,MAAA,EACA,SACA,OAAA,KACG,mBAAA;AAAA,IACH,OAAA;AAAA,IACA,YAAY,IAAI,CAAA;AAAA,IAChB,MAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACE,OAAA;AAAA,IACA;AAAA,GACJ;AACA,EAAA,MAAM,yBAAA,GAA4B,CAChC,MAAA,EACA,MAAA,EACA,OACA,OAAA,KACGA,WAAAA;AAAA,IACH,aAAA,CAAc,qCAAA,EAAuC,SAAA,EAAW,MAAM,CAAA;AAAA,IACtE,MAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,IAAA,GAAgC;AAAA,IACpC,oBAAoB,OAAA,EAAS;AAC3B,MAAA,OAAO,OAAA,CAAQ,mBAAA,EAAqB,KAAA,EAAO,MAAA,EAAW,OAAO,CAAA;AAAA,IAC/D,CAAA;AAAA,IACA,oBAAA,CAAqB,OAAO,OAAA,EAAS;AACnC,MAAA,OAAO,OAAA,CAAQ,mBAAA,EAAqB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IAC5D,CAAA;AAAA,IACA,oBAAA,CAAqB,EAAA,EAAI,KAAA,EAAO,OAAA,EAAS;AACvC,MAAA,OAAO,OAAA,CAAQ,cAAc,wBAAA,EAA0B,IAAA,EAAM,EAAE,CAAA,EAAG,OAAA,EAAS,OAAO,OAAO,CAAA;AAAA,IAC3F,CAAA;AAAA,IACA,oBAAA,CAAqB,IAAI,OAAA,EAAS;AAChC,MAAA,OAAO,OAAA,CAAQ,cAAc,wBAAA,EAA0B,IAAA,EAAM,EAAE,CAAA,EAAG,QAAA,EAAU,QAAW,OAAO,CAAA;AAAA,IAChG,CAAA;AAAA,IACA,uBAAuB,OAAA,EAAS;AAC9B,MAAA,OAAO,OAAA,CAAQ,sBAAA,EAAwB,KAAA,EAAO,MAAA,EAAW,OAAO,CAAA;AAAA,IAClE,CAAA;AAAA,IACA,sBAAA,CAAuB,OAAO,OAAA,EAAS;AACrC,MAAA,OAAOA,WAAAA,CAAW,2BAAA,EAA6B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACvE,CAAA;AAAA,IACA,uBAAA,CAAwB,OAAO,OAAA,EAAS;AACtC,MAAA,OAAOA,WAAAA,CAAW,4BAAA,EAA8B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACxE,CAAA;AAAA,IACA,gBAAA,CAAiB,OAAO,OAAA,EAAS;AAC/B,MAAA,OAAOA,WAAAA,CAAW,qBAAA,EAAuB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACjE,CAAA;AAAA,IACA,cAAA,CAAe,QAAQ,OAAA,EAAS;AAC9B,MAAA,OAAOA,WAAAA,CAAW,cAAc,0BAAA,EAA4B,SAAA,EAAW,MAAM,CAAA,EAAG,KAAA,EAAO,QAAW,OAAO,CAAA;AAAA,IAC3G,CAAA;AAAA,IACA,iBAAA,CAAkB,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS;AACxC,MAAA,MAAM,IAAA,GAAO,WAAA;AAAA,QACX,aAAA,CAAc,8BAAA,EAAgC,SAAA,EAAW,MAAM,CAAA;AAAA,QAC/D;AAAA,OACF;AACA,MAAA,OAAOA,WAAAA,CAAW,IAAA,EAAM,KAAA,EAAO,MAAA,EAAW,OAAO,CAAA;AAAA,IACnD,CAAA;AAAA,IACA,mBAAA,CAAoB,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS;AAC1C,MAAA,MAAM,IAAA,GAAO,WAAA;AAAA,QACX,aAAA,CAAc,gCAAA,EAAkC,SAAA,EAAW,MAAM,CAAA;AAAA,QACjE;AAAA,OACF;AACA,MAAA,OAAO,0BAA0B,OAAA,EAAS,WAAA,CAAY,IAAI,CAAA,EAAG,KAAA,EAAO,SAAS,sBAAsB,CAAA;AAAA,IACrG,CAAA;AAAA,IACA,iBAAA,CAAkB,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS;AACxC,MAAA,OAAOA,WAAAA,CAAW,cAAc,0BAAA,EAA4B,SAAA,EAAW,MAAM,CAAA,EAAG,OAAA,EAAS,OAAO,OAAO,CAAA;AAAA,IACzG,CAAA;AAAA,IACA,iBAAA,CAAkB,QAAQ,OAAA,EAAS;AACjC,MAAA,OAAOA,WAAAA,CAAW,cAAc,0BAAA,EAA4B,SAAA,EAAW,MAAM,CAAA,EAAG,QAAA,EAAU,QAAW,OAAO,CAAA;AAAA,IAC9G,CAAA;AAAA,IACA,wBAAA,CAAyB,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS;AAC/C,MAAA,OAAO,yBAAA,CAA0B,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAO,OAAO,CAAA;AAAA,IAClE,CAAA;AAAA,IACA,mBAAA,CAAoB,OAAO,OAAA,EAAS;AAClC,MAAA,OAAOA,WAAAA,CAAW,yBAAA,EAA2B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACrE,CAAA;AAAA,IACA,iBAAA,CAAkB,OAAO,OAAA,EAAS;AAChC,MAAA,OAAOA,WAAAA,CAAW,uBAAA,EAAyB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACnE;AAAA,GACF;AACA,EAAA,MAAM,UAAA,GAAa,uBAAA,CAAwB,IAAA,EAAM,cAAc,CAAA;AAC/D,EAAA,MAAM,UAAA,IAAc,CAClB,KAAA,EACA,OAAA,KACG;AACH,IAAA,IAAIjB,SAAAA,CAAS,KAAK,CAAA,IAAK,OAAA,IAAW,KAAA,EAAO;AACvC,MAAA,OAAO,UAAA,CAAW,MAAA,CAAO,KAAA,EAAsE,OAAO,CAAA;AAAA,IACxG;AACA,IAAA,OAAO,IAAA,CAAK,sBAAA;AAAA,MACV,0BAA0B,KAAuC,CAAA;AAAA,MACjE;AAAA,KACF,CAAE,KAAK,kBAAkB,CAAA;AAAA,EAC3B,CAAA,CAAA;AACA,EAAA,MAAM,cAAc,CAAC,KAAA,EAAmC,YACtD,UAAA,CAAW,MAAA,CAAO,OAAsE,OAAO,CAAA,CAAA;AAGjG,EAAA,MAAM,IAAA,GAAmC;AAAA,IACvC,GAAG,UAAA;AAAA,IACH,MAAA,EAAQ,UAAA;AAAA,IACR,UAAA,CAAW,OAAO,OAAA,EAAS;AACzB,MAAA,OAAO,IAAA,CAAK,uBAAA;AAAA,QACV,EAAE,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,yBAAyB,CAAA,EAAE;AAAA,QACpD;AAAA,OACF,CAAE,KAAK,mBAAmB,CAAA;AAAA,IAC5B,CAAA;AAAA,IACA,aAAA,CAAc,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS;AACpC,MAAA,OAAOiB,WAAAA,CAAW,aAAA,CAAc,yCAAA,EAA2C,SAAA,EAAW,MAAM,GAAG,MAAA,EAAQ,KAAA,IAAS,EAAC,EAAG,OAAO,CAAA;AAAA,IAC7H,CAAA;AAAA,IACA,YAAA,CAAa,MAAA,EAAQ,IAAA,EAAM,OAAA,EAAS;AAClC,MAAA,OAAO,+BAAA;AAAA,QACL,OAAA;AAAA,QACA,WAAA,CAAY,aAAA,CAAc,iCAAA,EAAmC,SAAA,EAAW,MAAM,CAAC,CAAA;AAAA,QAC/E,IAAA;AAAA,QACA,OAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,MAAA,OAAOA,WAAAA,CAAW,uBAAA,EAAyB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACnE,CAAA;AAAA,IACA,GAAA,CAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,OAAO,IAAA,CAAK,cAAA,CAAe,MAAA,EAAQ,OAAO,CAAA;AAAA,IAC5C,CAAA;AAAA,IACA,MAAA,CAAO,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS;AAC7B,MAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACtD,CAAA;AAAA,IACA,MAAA,EAAQ,UAAA;AAAA,IACR,UAAA,CAAW,OAAO,OAAA,EAAS;AACzB,MAAA,OAAOA,WAAAA,CAAW,4BAAA,EAA8B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACxE,CAAA;AAAA,IACA,UAAA,CAAW,OAAO,OAAA,EAAS;AACzB,MAAA,OAAOA,WAAAA,CAAW,4BAAA,EAA8B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACxE,CAAA;AAAA,IACA,OAAA,CAAQ,QAAQ,OAAA,EAAS;AACvB,MAAA,OAAOA,WAAAA,CAAW,cAAc,kCAAA,EAAoC,SAAA,EAAW,MAAM,CAAA,EAAG,MAAA,EAAQ,EAAC,EAAG,OAAO,CAAA;AAAA,IAC7G,CAAA;AAAA,IACA,KAAA,CAAM,QAAQ,OAAA,EAAS;AACrB,MAAA,OAAOA,WAAAA,CAAW,cAAc,gCAAA,EAAkC,SAAA,EAAW,MAAM,CAAA,EAAG,QAAA,EAAU,QAAW,OAAO,CAAA;AAAA,IACpH,CAAA;AAAA,IACA,IAAA,CAAK,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS;AAC3B,MAAA,OAAOA,WAAAA,CAAW,cAAc,+BAAA,EAAiC,SAAA,EAAW,MAAM,CAAA,EAAG,MAAA,EAAQ,OAAO,OAAO,CAAA;AAAA,IAC7G,CAAA;AAAA,IACA,GAAA,CAAI,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS;AAC1B,MAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACtD,CAAA;AAAA,IACA,SAAA,CAAU,QAAQ,OAAA,EAAS;AACzB,MAAA,OAAOA,WAAAA,CAAW,cAAc,qCAAA,EAAuC,SAAA,EAAW,MAAM,CAAA,EAAG,KAAA,EAAO,QAAW,OAAO,CAAA;AAAA,IACtH,CAAA;AAAA,IACA,QAAA,CAAS,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS;AAC/B,MAAA,MAAM,IAAA,GAAO,WAAA;AAAA,QACX,aAAA,CAAc,oCAAA,EAAsC,SAAA,EAAW,MAAM,CAAA;AAAA,QACrE;AAAA,OACF;AACA,MAAA,OAAOA,WAAAA,CAAW,IAAA,EAAM,KAAA,EAAO,MAAA,EAAW,OAAO,CAAA;AAAA,IACnD,CAAA;AAAA,IACA,KAAA,CAAM,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS;AAC5B,MAAA,OAAO,IAAA,CAAK,mBAAA,CAAoB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACxD,CAAA;AAAA,IACA,QAAA,CAAS,QAAQ,OAAA,EAAS;AACxB,MAAA,OAAOA,WAAAA,CAAW,cAAc,mCAAA,EAAqC,SAAA,EAAW,MAAM,CAAA,EAAG,KAAA,EAAO,QAAW,OAAO,CAAA;AAAA,IACpH,CAAA;AAAA,IACA,cAAA,CAAe,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAS;AACzC,MAAA,OAAOA,WAAAA;AAAA,QACL,aAAA;AAAA,UACE,aAAA,CAAc,wDAAA,EAA0D,SAAA,EAAW,MAAM,CAAA;AAAA,UACzF,YAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,MAAA;AAAA,QACA,EAAC;AAAA,QACD;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,aAAA,CAAc,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAS;AACxC,MAAA,OAAOA,WAAAA;AAAA,QACL,aAAA;AAAA,UACE,aAAA,CAAc,gDAAA,EAAkD,SAAA,EAAW,MAAM,CAAA;AAAA,UACjF,YAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,QAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,SAAA,EAAW;AAAA,MACT,GAAA,CAAI,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS;AAC1B,QAAA,MAAM,IAAA,GAAO,WAAA;AAAA,UACX,aAAA,CAAc,oCAAA,EAAsC,SAAA,EAAW,MAAM,CAAA;AAAA,UACrE;AAAA,SACF;AACA,QAAA,OAAOA,WAAAA,CAAW,IAAA,EAAM,KAAA,EAAO,MAAA,EAAW,OAAO,CAAA;AAAA,MACnD,CAAA;AAAA,MACA,GAAA,CAAI,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS;AAC1B,QAAA,OAAOA,WAAAA,CAAW,cAAc,oCAAA,EAAsC,SAAA,EAAW,MAAM,CAAA,EAAG,MAAA,EAAQ,OAAO,OAAO,CAAA;AAAA,MAClH;AAAA,KACF;AAAA,IACA,UAAA,EAAY;AAAA,MACV,MAAA,CAAO,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS;AAC7B,QAAA,OAAO,IAAA,CAAK,wBAAA,CAAyB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,MAC7D,CAAA;AAAA,MACA,GAAA,CAAI,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS;AAC1B,QAAA,OAAO,yBAAA,CAA0B,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,MACjE,CAAA;AAAA,MACA,OAAA,CAAQ,OAAO,OAAA,EAAS;AACtB,QAAA,OAAOA,WAAAA,CAAW,gCAAA,EAAkC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,MAC5E;AAAA;AACF,GACF;AACA,EAAA,MAAM,WAAA,GAAiD;AAAA,IACrD,KAAK,OAAA,EAAS;AACZ,MAAA,OAAO,IAAA,CAAK,uBAAuB,OAAO,CAAA;AAAA,IAC5C;AAAA,GACF;AACA,EAAA,MAAM,OAAA,GAAyC;AAAA,IAC7C,KAAK,OAAA,EAAS;AACZ,MAAA,OAAO,IAAA,CAAK,oBAAoB,OAAO,CAAA;AAAA,IACzC,CAAA;AAAA,IACA,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,MAAA,OAAO,IAAA,CAAK,oBAAA,CAAqB,KAAA,EAAO,OAAO,CAAA;AAAA,IACjD,CAAA;AAAA,IACA,MAAA,CAAO,EAAA,EAAI,KAAA,EAAO,OAAA,EAAS;AACzB,MAAA,OAAO,IAAA,CAAK,oBAAA,CAAqB,EAAA,EAAI,KAAA,EAAO,OAAO,CAAA;AAAA,IACrD,CAAA;AAAA,IACA,MAAA,CAAO,IAAI,OAAA,EAAS;AAClB,MAAA,OAAO,IAAA,CAAK,oBAAA,CAAqB,EAAA,EAAI,OAAO,CAAA;AAAA,IAC9C;AAAA,GACF;AACA,EAAA,MAAM,MAAA,GAAuC;AAAA,IAC3C,IAAA,CAAK,OAAO,OAAA,EAAS;AACnB,MAAA,OAAOA,WAAAA,CAAW,uBAAA,EAAyB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACnE,CAAA;AAAA,IACA,IAAA,CAAK,OAAO,OAAA,EAAS;AACnB,MAAA,OAAOA,WAAAA,CAAW,uBAAA,EAAyB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACnE,CAAA;AAAA,IACA,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,MAAA,OAAO,IAAA,CAAK,mBAAA,CAAoB,KAAA,EAAO,OAAO,CAAA;AAAA,IAChD,CAAA;AAAA,IACA,IAAA,CAAK,OAAO,OAAA,EAAS;AACnB,MAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,KAAA,EAAO,OAAO,CAAA;AAAA,IAC9C;AAAA,GACF;AACA,EAAA,MAAM,UAAA,GAA+C;AAAA,IACnD,IAAA,CAAK,OAAO,OAAA,EAAS;AACnB,MAAA,OAAOA,WAAAA,CAAW,2BAAA,EAA6B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACvE,CAAA;AAAA,IACA,KAAA,CAAM,OAAO,OAAA,EAAS;AACpB,MAAA,OAAOA,WAAAA,CAAW,4BAAA,EAA8B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACxE,CAAA;AAAA,IACA,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,MAAA,OAAOA,WAAAA,CAAW,6BAAA,EAA+B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACzE,CAAA;AAAA,IACA,KAAA,CAAM,OAAO,OAAA,EAAS;AACpB,MAAA,OAAOA,WAAAA,CAAW,4BAAA,EAA8B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACxE;AAAA,GACF;AACA,EAAA,MAAM,YAAA,GAAmD;AAAA,IACvD,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,MAAA,OAAOA,WAAAA,CAAW,yBAAA,EAA2B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACrE,CAAA;AAAA,IACA,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,MAAA,OAAOA,WAAAA,CAAW,gCAAA,EAAkC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IAC5E,CAAA;AAAA,IACA,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,MAAA,OAAOA,WAAAA,CAAW,gCAAA,EAAkC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IAC5E;AAAA,GACF;AACA,EAAA,MAAM,MAAA,GAAuC;AAAA,IAC3C,IAAA,CAAK,OAAO,OAAA,EAAS;AACnB,MAAA,OAAOA,WAAAA,CAAW,kBAAA,EAAoB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IAC9D,CAAA;AAAA,IACA,IAAA,CAAK,OAAO,OAAA,EAAS;AACnB,MAAA,OAAOA,WAAAA,CAAW,uBAAA,EAAyB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACnE,CAAA;AAAA,IACA,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,MAAA,OAAOA,WAAAA,CAAW,yBAAA,EAA2B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACrE,CAAA;AAAA,IACA,QAAA,CAAS,OAAO,OAAA,EAAS;AACvB,MAAA,OAAOA,WAAAA,CAAW,2BAAA,EAA6B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACvE,CAAA;AAAA,IACA,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,MAAA,OAAOA,WAAAA,CAAW,yBAAA,EAA2B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACrE,CAAA;AAAA,IACA,IAAA,CAAK,OAAO,OAAA,EAAS;AACnB,MAAA,OAAOA,WAAAA,CAAW,uBAAA,EAAyB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACnE,CAAA;AAAA,IACA,GAAA,CAAI,OAAO,OAAA,EAAS;AAClB,MAAA,OAAOA,WAAAA,CAAW,sBAAA,EAAwB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IAClE,CAAA;AAAA,IACA,SAAA,CAAU,OAAO,OAAA,EAAS;AACxB,MAAA,OAAOA,WAAAA,CAAW,6BAAA,EAA+B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACzE,CAAA;AAAA,IACA,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,MAAA,OAAOA,WAAAA,CAAW,yBAAA,EAA2B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACrE,CAAA;AAAA,IACA,SAAA,CAAU,OAAO,OAAA,EAAS;AACxB,MAAA,OAAOA,WAAAA,CAAW,6BAAA,EAA+B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACzE,CAAA;AAAA,IACA,QAAA,CAAS,OAAO,OAAA,EAAS;AACvB,MAAA,OAAOA,WAAAA,CAAW,2BAAA,EAA6B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACvE,CAAA;AAAA,IACA,cAAA,CAAe,OAAO,OAAA,EAAS;AAC7B,MAAA,OAAOA,WAAAA,CAAW,mCAAA,EAAqC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IAC/E,CAAA;AAAA,IACA,aAAA,CAAc,OAAO,OAAA,EAAS;AAC5B,MAAA,OAAOA,WAAAA,CAAW,kCAAA,EAAoC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IAC9E,CAAA;AAAA,IACA,UAAA,CAAW,OAAO,OAAA,EAAS;AACzB,MAAA,OAAOA,WAAAA,CAAW,8BAAA,EAAgC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IAC1E,CAAA;AAAA,IACA,MAAA,EAAQ;AAAA,GACV;AACA,EAAA,MAAM,MAAA,GAAuC;AAAA,IAC3C,IAAA,CAAK,OAAO,OAAA,EAAS;AACnB,MAAA,OAAOA,WAAAA,CAAW,uBAAA,EAAyB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACnE,CAAA;AAAA,IACA,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,MAAA,OAAOA,WAAAA,CAAW,yBAAA,EAA2B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACrE,CAAA;AAAA,IACA,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,MAAA,OAAOA,WAAAA,CAAW,yBAAA,EAA2B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACrE,CAAA;AAAA,IACA,SAAA,EAAW;AAAA,MACT,GAAA,CAAI,OAAO,OAAA,EAAS;AAClB,QAAA,OAAOA,WAAAA,CAAW,4BAAA,EAA8B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,MACxE,CAAA;AAAA,MACA,GAAA,CAAI,OAAO,OAAA,EAAS;AAClB,QAAA,OAAOA,WAAAA,CAAW,gCAAA,EAAkC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,MAC5E,CAAA;AAAA,MACA,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,QAAA,OAAOA,WAAAA,CAAW,mCAAA,EAAqC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,MAC/E;AAAA,KACF;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,GAAA,CAAI,OAAO,OAAA,EAAS;AAClB,QAAA,OAAOA,WAAAA,CAAW,yBAAA,EAA2B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,MACrE,CAAA;AAAA,MACA,GAAA,CAAI,OAAO,OAAA,EAAS;AAClB,QAAA,OAAOA,WAAAA,CAAW,6BAAA,EAA+B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,MACzE,CAAA;AAAA,MACA,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,QAAA,OAAOA,WAAAA,CAAW,gCAAA,EAAkC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,MAC5E;AAAA,KACF;AAAA,IACA,YAAA,EAAc;AAAA,MACZ,GAAA,CAAI,OAAO,OAAA,EAAS;AAClB,QAAA,OAAOA,WAAAA,CAAW,gCAAA,EAAkC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,MAC5E,CAAA;AAAA,MACA,GAAA,CAAI,OAAO,OAAA,EAAS;AAClB,QAAA,OAAOA,WAAAA,CAAW,oCAAA,EAAsC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,MAChF,CAAA;AAAA,MACA,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,QAAA,OAAOA,WAAAA,CAAW,uCAAA,EAAyC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,MACnF;AAAA,KACF;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,GAAA,CAAI,OAAO,OAAA,EAAS;AAClB,QAAA,OAAOA,WAAAA,CAAW,uBAAA,EAAyB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,MACnE,CAAA;AAAA,MACA,GAAA,CAAI,OAAO,OAAA,EAAS;AAClB,QAAA,OAAOA,WAAAA,CAAW,2BAAA,EAA6B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,MACvE,CAAA;AAAA,MACA,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,QAAA,OAAOA,WAAAA,CAAW,8BAAA,EAAgC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,MAC1E;AAAA;AACF,GACF;AACA,EAAA,MAAM,SAAA,GAA6C;AAAA,IACjD,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,MAAA,OAAOA,WAAAA,CAAW,2BAAA,EAA6B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACvE,CAAA;AAAA,IACA,QAAA,CAAS,OAAO,OAAA,EAAS;AACvB,MAAA,OAAOA,WAAAA,CAAW,8BAAA,EAAgC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IAC1E,CAAA;AAAA,IACA,QAAA,CAAS,OAAO,OAAA,EAAS;AACvB,MAAA,OAAOA,WAAAA,CAAW,6BAAA,EAA+B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACzE,CAAA;AAAA,IACA,KAAA,CAAM,OAAO,OAAA,EAAS;AACpB,MAAA,OAAOA,WAAAA,CAAW,0BAAA,EAA4B,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACtE,CAAA;AAAA,IACA,SAAA,CAAU,OAAO,OAAA,EAAS;AACxB,MAAA,OAAOA,WAAAA,CAAW,+BAAA,EAAiC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IAC3E;AAAA,GACF;AACA,EAAA,MAAM,KAAA,GAAqC;AAAA,IACzC,IAAA,CAAK,OAAO,OAAA,EAAS;AACnB,MAAA,OAAOA,WAAAA,CAAW,qBAAA,EAAuB,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACjE;AAAA,GACF;AACA,EAAA,OAAO;AAAA,IACL,GAAG,IAAA;AAAA,IACH,WAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAQ,IAAA,CAAK;AAAA,GACf;AACF;;;AC3qFA,IAAMhB,SAAAA,GAAW,yBAAA;AACjB,IAAMC,iBAAAA,GAAmB,oBAAoBD,SAAQ,CAAA;AACrD,IAAME,sBAAAA,GAAwB,UAAA;AAEvB,IAAM,eAAA,GAAN,cAA8B,KAAA,CAAM;AAAA,EACzC,MAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA;AAAA,EAEA,YAAY,KAAA,EAOT;AACD,IAAA,KAAA,CAAM,MAAM,OAAO,CAAA;AACnB,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AACZ,IAAA,IAAA,CAAK,SAAS,KAAA,CAAM,MAAA;AACpB,IAAA,IAAA,CAAK,WAAW,KAAA,CAAM,QAAA;AACtB,IAAA,IAAA,CAAK,SAAS,KAAA,CAAM,MAAA;AACpB,IAAA,IAAA,CAAK,YAAY,KAAA,CAAM,SAAA;AACvB,IAAA,IAAA,CAAK,OAAO,KAAA,CAAM,IAAA;AAAA,EACpB;AACF;AAgBA,SAAS,sBAAsB,KAAA,EAAoC;AACjE,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,SAAS,IAAI,GAAA,CAAI,cAAA,CAAe,KAAA,EAAO,2BAA2B,CAAC,CAAA;AACzE,EAAA,MAAA,CAAO,QAAA,GAAW,MAAA,CAAO,QAAA,KAAa,MAAA,GAAS,QAAA,GAAW,OAAA;AAC1D,EAAA,MAAA,CAAO,QAAA,GAAW,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,mBAAmB,WAAW,CAAA;AACxE,EAAA,OAAO,OAAO,QAAA,EAAS;AACzB;AAEA,SAAS,cAAA,CAAe,OAAe,KAAA,EAAuB;AAC5D,EAAA,MAAM,UAAA,GAAa,MAAM,IAAA,EAAK;AAC9B,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,aAAA,CAAe,CAAA;AAAA,EACzC;AAEA,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,IAAI,IAAI,UAAU,CAAA;AAAA,EAC7B,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,oCAAA,CAAsC,CAAA;AAAA,EAChE;AAEA,EAAA,IAAI,MAAA,CAAO,QAAA,KAAa,KAAA,IAAS,MAAA,CAAO,aAAa,MAAA,EAAQ;AAC3D,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,oBAAA,CAAsB,CAAA;AAAA,EAChD;AAEA,EAAA,MAAA,CAAO,QAAA,GAAW,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,QAAQ,EAAE,CAAA;AACpD,EAAA,OAAO,MAAA,CAAO,QAAA,EAAS,CAAE,OAAA,CAAQ,OAAO,EAAE,CAAA;AAC5C;AAEA,SAASH,UAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAA,CAAQ,KAAK,CAAA,IAAK,OAAO,UAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAC5E;AAEA,SAASI,sBAAqB,KAAA,EAA2C;AACvE,EAAA,OAAO,QAAQ,KAAA,GAAQ,MAAA;AACzB;AAEA,SAASE,kBAAAA,CAAkB,SAAiB,WAAA,EAA4B;AACtE,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,EAAiB,WAAA,EAAa,KAAA,EAAM;AAAA,EACvD;AAEA,EAAA,MAAM,0BACJ,WAAA,EAAa,WAAA,EAAY,CAAE,QAAA,CAAS,kBAAkB,CAAA,IAAK,KAAA;AAC7D,EAAA,MAAM,SAAA,GACJ,2BAA2B,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,IAAK,OAAA,CAAQ,WAAW,GAAG,CAAA;AAE9E,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAoB,WAAA,EAAa,KAAA,EAAM;AAAA,EAC1D;AAEA,EAAA,IAAI;AACF,IAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,CAAK,MAAM,OAAO,CAAA,EAAc,aAAa,KAAA,EAAM;AAAA,EACtE,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAoB,WAAA,EAAa,IAAA,EAAK;AAAA,EACzD;AACF;AAEA,SAASC,kBAAiB,OAAA,EAAsC;AAC9D,EAAA,OACE,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,IAC1B,OAAA,CAAQ,GAAA,CAAI,kBAAkB,CAAA,IAC9B,OAAA,CAAQ,GAAA,CAAI,qBAAqB,CAAA,IACjC,MAAA;AAEJ;AAEA,SAASC,oBAAAA,CAAoB,SAAkB,QAAA,EAA0B;AACvE,EAAA,IAAIR,SAAAA,CAAS,OAAO,CAAA,EAAG;AACrB,IAAA,KAAA,MAAW,SAAA,IAAa,CAAC,OAAA,CAAQ,KAAA,EAAO,QAAQ,OAAA,EAAS,OAAA,CAAQ,OAAO,CAAA,EAAG;AACzE,MAAA,IAAI,OAAO,SAAA,KAAc,QAAA,IAAY,UAAU,IAAA,EAAK,CAAE,SAAS,CAAA,EAAG;AAChE,QAAA,OAAO,UAAU,IAAA,EAAK;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,OAAO,OAAA,KAAY,QAAA,IAAY,QAAQ,IAAA,EAAK,CAAE,SAAS,CAAA,EAAG;AAC5D,IAAA,OAAO,QAAQ,IAAA,EAAK;AAAA,EACtB;AAEA,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,iBAAA,CAAkB,OAAe,KAAA,EAAuB;AAC/D,EAAA,MAAM,UAAA,GAAa,MAAM,IAAA,EAAK;AAC9B,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,aAAA,CAAe,CAAA;AAAA,EACzC;AACA,EAAA,OAAO,mBAAmB,UAAU,CAAA;AACtC;AAEA,SAAS,YAAY,KAAA,EAAyC;AAC5D,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAA,GAAS,IAAI,eAAA,EAAgB;AACnC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM;AACzC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,IAAI,IAAA,KAAS,MAAA,IAAa,IAAA,KAAS,IAAA,EAAM;AACvC,UAAA,MAAA,CAAO,MAAA,CAAO,GAAA,EAAK,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,QACjC;AAAA,MACF;AACA,MAAA;AAAA,IACF;AACA,IAAA,MAAA,CAAO,GAAA,CAAI,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EAC/B;AAEA,EAAA,MAAM,OAAA,GAAU,OAAO,QAAA,EAAS;AAChC,EAAA,OAAO,OAAA,GAAU,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,GAAK,EAAA;AACnC;AAEA,SAAS,YAAA,CACP,OAAA,EACA,GAAA,EACA,SAAA,EACyB;AACzB,EAAA,IAAI;AACF,IAAA,OAAO,IAAK,OAAA,CAGkB,GAAA,EAAK,SAAS,CAAA;AAAA,EAC9C,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,iBAAiB,SAAA,EAAW;AAC9B,MAAA,OAAQ,OAAA,CAGsB,KAAK,SAAS,CAAA;AAAA,IAC9C;AACA,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AAEA,SAASS,aAAAA,CACP,QACA,OAAA,EACwB;AACxB,EAAA,MAAM,OAAA,GAAkC;AAAA,IACtC,MAAA,EAAQ,kBAAA;AAAA,IACR,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,aAAa,MAAA,CAAO,MAAA;AAAA,IACpB,cAAA,EAAgBP;AAAA,GAClB;AAEA,EAAA,IAAI,MAAA,CAAO,MAAA,IAAU,OAAA,EAAS,MAAA,EAAQ;AACpC,IAAA,OAAA,CAAQ,iBAAiB,CAAA,GAAI,OAAA,EAAS,MAAA,IAAU,OAAO,MAAA,IAAU,EAAA;AAAA,EACnE;AAEA,EAAA,MAAM,WAAA,GAAc,OAAA,EAAS,WAAA,IAAe,MAAA,CAAO,WAAA;AACnD,EAAA,IAAI,OAAO,WAAA,KAAgB,QAAA,IAAY,WAAA,CAAY,MAAK,EAAG;AACzD,IAAA,OAAA,CAAQ,gBAAgB,WAAA,CAAY,UAAA,CAAW,SAAS,CAAA,GACpD,WAAA,GACA,UAAU,WAAW,CAAA,CAAA;AAAA,EAC3B;AAEA,EAAA,MAAM,MAAA,GAAS,OAAA,EAAS,MAAA,IAAU,MAAA,CAAO,MAAA;AACzC,EAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,CAAO,MAAK,EAAG;AAC/C,IAAA,OAAA,CAAQ,MAAA,GAAS,MAAA;AAAA,EACnB;AAEA,EAAA,MAAM,YAAA,GAAe,OAAA,EAAS,YAAA,IAAgB,MAAA,CAAO,YAAA;AACrD,EAAA,IAAI,OAAO,YAAA,KAAiB,QAAA,IAAY,YAAA,CAAa,MAAK,EAAG;AAC3D,IAAA,OAAA,CAAQ,6BAA6B,CAAA,GAAI,YAAA;AAAA,EAC3C;AAEA,EAAA,IAAI,MAAA,CAAO,YAAA,IAAgB,OAAA,EAAS,YAAA,EAAc;AAChD,IAAA,OAAA,CAAQ,eAAe,CAAA,GAAIC,sBAAAA;AAAA,EAC7B;AAEA,EAAA,KAAA,MAAW,UAAU,CAAC,MAAA,CAAO,OAAA,EAAS,OAAA,EAAS,OAAO,CAAA,EAAG;AACvD,IAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,IAAU,EAAE,CAAA,EAAG;AACvD,MAAA,MAAM,UAAA,GAAaC,sBAAqB,KAAK,CAAA;AAC7C,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,UAAA;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,YAAA,CAAa,MAAmB,IAAA,EAA4B;AACnE,EAAA,OAAO;AAAA,IACL,GAAG,IAAA;AAAA,IACH,MAAM,IAAA,KAAS,MAAA,GAAY,MAAA,GAAY,IAAA,CAAK,UAAU,IAAI,CAAA;AAAA,IAC1D,OAAA,EAAS;AAAA,MACP,cAAA,EAAgB,kBAAA;AAAA,MAChB,GAAI,IAAA,CAAK;AAAA;AACX,GACF;AACF;AAEA,eAAe,OAAA,CACb,MAAA,EACA,MAAA,EACA,QAAA,EACA,SACA,IAAA,EACY;AACZ,EAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,MAAM,GAAA,GAAM,CAAA,EAAG,MAAA,CAAO,OAAO,GAAG,QAAQ,CAAA,CAAA;AACxC,EAAA,MAAM,IAAA,GAAoB;AAAA,IACxB,MAAA;AAAA,IACA,OAAA,EAASK,aAAAA,CAAa,MAAA,EAAQ,OAAO,CAAA;AAAA,IACrC,QAAQ,OAAA,EAAS;AAAA,GACnB;AACA,EAAA,MAAM,SAAA,GACJ,SAAS,MAAA,IAAa,MAAA,KAAW,QAC7B,IAAA,GACA,YAAA,CAAa,MAAM,IAAI,CAAA;AAE7B,EAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK,SAAS,CAAA;AAC3C,EAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,IAAA,EAAK;AACpC,EAAA,MAAM,EAAE,QAAO,GAAIH,kBAAAA,CAAkB,SAAS,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAC,CAAA;AAElF,EAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,IAAA,MAAM,IAAI,eAAA,CAAgB;AAAA,MACxB,OAAA,EAASE,oBAAAA,CAAoB,MAAA,EAAQ,CAAA,YAAA,EAAe,MAAM,IAAI,QAAQ,CAAA,aAAA,EAAgB,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AAAA,MACvG,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,QAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA,EAAWD,iBAAAA,CAAiB,QAAA,CAAS,OAAO,CAAA;AAAA,MAC5C,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,mBAAgD,OAAA,EAAuB;AAC9E,EAAA,OAAO,OAAA,CAAQ,IAAA;AACjB;AAEA,SAAS,wBAAA,CACP,QACA,OAAA,EAC8B;AAC9B,EAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AACjB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,SAAA,GACJ,MAAA,CAAO,gBAAA,IACL,UAAA,CAAqE,SAAA;AAEzE,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,SAAS,YAAA,CAAa,SAAA,EAAW,MAAA,CAAO,KAAA,EAAO,SAAS,SAAS,CAAA;AAEvE,EAAA,MAAM,IAAA,GAAO,CAAC,OAAA,KAAuC;AACnD,IAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAA;AAAA,EACrC,CAAA;AAEA,EAAA,IAAI,SAAS,SAAA,EAAW;AACtB,IAAA,MAAM,QAAA,GAAW,CAAC,KAAA,KAAmB;AACnC,MAAA,MAAM,YAAA,GAAe,KAAA;AACrB,MAAA,MAAM,MAAM,YAAA,EAAc,IAAA;AAC1B,MAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,QAAA;AAAA,MACF;AACA,MAAA,IAAI;AACF,QAAA,OAAA,CAAQ,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,GAAG,CAAsD,CAAA;AAAA,MAC1F,CAAA,CAAA,MAAQ;AACN,QAAA,OAAA,CAAQ,YAAY,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,2DAA2D,CAAA;AAAA,MACzG;AAAA,IACF,CAAA;AAEA,IAAA,IAAI,OAAO,MAAA,CAAO,gBAAA,KAAqB,UAAA,EAAY;AACjD,MAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,QAAQ,CAAA;AAAA,IAC7C,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,SAAA,GAAY,QAAA;AAAA,IACrB;AAAA,EACF;AAEA,EAAA,MAAM,KAAA,GAAQ,CAAC,OAAA,KAA8E;AAC3F,IAAA,IAAA,CAAK;AAAA,MACH,IAAA,EAAM,YAAA;AAAA,MACN,OAAO,OAAA,EAAS,KAAA;AAAA,MAChB,oBAAoB,OAAA,EAAS;AAAA,KAC9B,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,IAAI,SAAS,KAAA,EAAO;AAClB,IAAA,MAAM,MAAA,GAAS,MAAM,KAAA,CAAM;AAAA,MACzB,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAO,KAAA,IAAS,MAAA;AAAA,MAC/B,kBAAA,EAAoB,OAAA,CAAQ,KAAA,EAAO,kBAAA,IAAsB;AAAA,KAC1D,CAAA;AACD,IAAA,IAAI,OAAO,MAAA,CAAO,gBAAA,KAAqB,UAAA,EAAY;AACjD,MAAA,MAAA,CAAO,gBAAA,CAAiB,QAAQ,MAAM,CAAA;AAAA,IACxC,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,MAAA,GAAS,MAAA;AAAA,IAClB;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA,CAAU,QAAQ,OAAA,EAAS;AACzB,MAAA,IAAA,CAAK;AAAA,QACH,IAAA,EAAM,gBAAA;AAAA,QACN,OAAA,EAAS,MAAA;AAAA,QACT,UAAU,OAAA,IAAW;AAAA,OACtB,CAAA;AAAA,IACH,CAAA;AAAA,IACA,YAAY,MAAA,EAAQ;AAClB,MAAA,IAAA,CAAK;AAAA,QACH,IAAA,EAAM,kBAAA;AAAA,QACN,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH,CAAA;AAAA,IACA,OAAO,KAAA,EAAqC;AAC1C,MAAA,IAAA,CAAK;AAAA,QACH,IAAA,EAAM,aAAA;AAAA,QACN;AAAA,OACD,CAAA;AAAA,IACH,CAAA;AAAA,IACA,YAAY,MAAA,EAAQ;AAClB,MAAA,IAAA,CAAK;AAAA,QACH,IAAA,EAAM,mBAAA;AAAA,QACN,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH,CAAA;AAAA,IACA,WAAW,MAAA,EAAQ;AACjB,MAAA,IAAA,CAAK;AAAA,QACH,IAAA,EAAM,kBAAA;AAAA,QACN,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH,CAAA;AAAA,IACA,kBAAkB,YAAA,EAAc;AAC9B,MAAA,IAAA,CAAK;AAAA,QACH,IAAA,EAAM,yBAAA;AAAA,QACN,gBAAgB,YAAA,IAAgB;AAAA,OACjC,CAAA;AAAA,IACH,CAAA;AAAA,IACA,QAAA,CAAS,QAAQ,KAAA,EAAO;AACtB,MAAA,IAAA,CAAK;AAAA,QACH,IAAA,EAAM,iBAAA;AAAA,QACN,OAAA,EAAS,MAAA;AAAA,QACT,UAAA,EAAY,OAAO,UAAA,IAAc,MAAA;AAAA,QACjC,GAAA,EAAK,OAAO,GAAA,IAAO;AAAA,OACpB,CAAA;AAAA,IACH,CAAA;AAAA,IACA,KAAK,EAAA,GAAA,iBAAK,IAAI,IAAA,EAAK,EAAE,aAAY,EAAG;AAClC,MAAA,IAAA,CAAK;AAAA,QACH,IAAA,EAAM,MAAA;AAAA,QACN;AAAA,OACD,CAAA;AAAA,IACH,CAAA;AAAA,IACA,KAAA,CAAM,MAAM,MAAA,EAAQ;AAClB,MAAA,MAAA,CAAO,KAAA,CAAM,MAAM,MAAM,CAAA;AAAA,IAC3B;AAAA,GACF;AACF;AAEO,SAAS,iBAAiB,MAAA,EAAkD;AACjF,EAAA,MAAM,QAAA,GAAqC;AAAA,IACzC,KAAK,OAAA,EAAS;AACZ,MAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,eAAA,IAAmB,qBAAA,CAAsB,OAAO,KAAK,CAAA;AACpF,MAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,QAAA,MAAM,IAAI,KAAA;AAAA,UACR;AAAA,SACF;AAAA,MACF;AAEA,MAAA,OAAO,OAAA;AAAA,QACL;AAAA,UACE,GAAG,MAAA;AAAA,UACH,OAAA,EAAS;AAAA,SACX;AAAA,QACA,KAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,QAAQ,OAAA,EAAS;AACf,MAAA,OAAO,wBAAA,CAAyB,QAAQ,OAAO,CAAA;AAAA,IACjD;AAAA,GACF;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM;AAAA,MACJ,IAAA,CAAK,OAAkC,OAAA,EAAiC;AACtE,QAAA,OAAO,OAAA;AAAA,UACL,MAAA;AAAA,UACA,KAAA;AAAA,UACA,CAAA,MAAA,EAAS,WAAA,CAAY,KAA4C,CAAC,CAAA,CAAA;AAAA,UAClE;AAAA,SACF;AAAA,MACF,CAAA;AAAA,MACA,MAAA,CAAO,OAAoC,OAAA,EAAiC;AAC1E,QAAA,OAAO,OAAA,CAAuC,MAAA,EAAQ,MAAA,EAAQ,QAAA,EAAU,SAAS,KAAK,CAAA;AAAA,MACxF,CAAA;AAAA,MACA,GAAA,CAAI,QAAgB,OAAA,EAAiC;AACnD,QAAA,OAAO,OAAA;AAAA,UACL,MAAA;AAAA,UACA,KAAA;AAAA,UACA,CAAA,OAAA,EAAU,iBAAA,CAAkB,MAAA,EAAQ,cAAc,CAAC,CAAA,CAAA;AAAA,UACnD;AAAA,SACF;AAAA,MACF,CAAA;AAAA,MACA,MAAA,CAAO,MAAA,EAAgB,KAAA,EAAoC,OAAA,EAAiC;AAC1F,QAAA,OAAO,OAAA;AAAA,UACL,MAAA;AAAA,UACA,OAAA;AAAA,UACA,CAAA,OAAA,EAAU,iBAAA,CAAkB,MAAA,EAAQ,cAAc,CAAC,CAAA,CAAA;AAAA,UACnD,OAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF,CAAA;AAAA,MACA,OAAA,CAAQ,QAAgB,OAAA,EAAiC;AACvD,QAAA,OAAO,OAAA;AAAA,UACL,MAAA;AAAA,UACA,MAAA;AAAA,UACA,CAAA,OAAA,EAAU,iBAAA,CAAkB,MAAA,EAAQ,cAAc,CAAC,CAAA,QAAA,CAAA;AAAA,UACnD;AAAA,SACF;AAAA,MACF,CAAA;AAAA,MACA,UAAA,EAAY;AAAA,QACV,IAAA,CAAK,MAAA,EAAgB,KAAA,EAAuC,OAAA,EAAiC;AAC3F,UAAA,OAAO,OAAA;AAAA,YACL,MAAA;AAAA,YACA,MAAA;AAAA,YACA,CAAA,OAAA,EAAU,iBAAA,CAAkB,MAAA,EAAQ,cAAc,CAAC,CAAA,YAAA,CAAA;AAAA,YACnD,OAAA;AAAA,YACA,SAAS;AAAC,WACZ;AAAA,QACF;AAAA,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,IAAA,CAAK,QAAgB,OAAA,EAAiC;AACpD,UAAA,OAAO,OAAA;AAAA,YACL,MAAA;AAAA,YACA,KAAA;AAAA,YACA,CAAA,OAAA,EAAU,iBAAA,CAAkB,MAAA,EAAQ,cAAc,CAAC,CAAA,QAAA,CAAA;AAAA,YACnD;AAAA,WACF;AAAA,QACF,CAAA;AAAA,QACA,GAAA,CAAI,MAAA,EAAgB,KAAA,EAAoC,OAAA,EAAiC;AACvF,UAAA,OAAO,OAAA;AAAA,YACL,MAAA;AAAA,YACA,MAAA;AAAA,YACA,CAAA,OAAA,EAAU,iBAAA,CAAkB,MAAA,EAAQ,cAAc,CAAC,CAAA,QAAA,CAAA;AAAA,YACnD,OAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA;AAAA,QACA,MAAA,CAAO,MAAA,EAAgB,MAAA,EAAgB,OAAA,EAAiC;AACtE,UAAA,OAAO,OAAA;AAAA,YACL,MAAA;AAAA,YACA,QAAA;AAAA,YACA,CAAA,OAAA,EAAU,kBAAkB,MAAA,EAAQ,cAAc,CAAC,CAAA,SAAA,EAAY,iBAAA,CAAkB,MAAA,EAAQ,cAAc,CAAC,CAAA,CAAA;AAAA,YACxG;AAAA,WACF;AAAA,QACF;AAAA,OACF;AAAA,MACA,OAAA,EAAS;AAAA,QACP,IAAA,CAAK,MAAA,EAAgB,KAAA,EAAqC,OAAA,EAAiC;AACzF,UAAA,OAAO,OAAA;AAAA,YACL,MAAA;AAAA,YACA,KAAA;AAAA,YACA,CAAA,OAAA,EAAU,kBAAkB,MAAA,EAAQ,cAAc,CAAC,CAAA,SAAA,EAAY,WAAA,CAAY,KAA4C,CAAC,CAAA,CAAA;AAAA,YACxH;AAAA,WACF;AAAA,QACF,CAAA;AAAA,QACA,IAAA,CAAK,MAAA,EAAgB,KAAA,EAAqC,OAAA,EAAiC;AACzF,UAAA,OAAO,OAAA;AAAA,YACL,MAAA;AAAA,YACA,MAAA;AAAA,YACA,CAAA,OAAA,EAAU,iBAAA,CAAkB,MAAA,EAAQ,cAAc,CAAC,CAAA,SAAA,CAAA;AAAA,YACnD,OAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA;AAAA,QACA,MAAA,CAAO,MAAA,EAAgB,SAAA,EAAmB,KAAA,EAAqC,OAAA,EAAiC;AAC9G,UAAA,OAAO,OAAA;AAAA,YACL,MAAA;AAAA,YACA,OAAA;AAAA,YACA,CAAA,OAAA,EAAU,kBAAkB,MAAA,EAAQ,cAAc,CAAC,CAAA,UAAA,EAAa,iBAAA,CAAkB,SAAA,EAAW,iBAAiB,CAAC,CAAA,CAAA;AAAA,YAC/G,OAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA;AAAA,QACA,MAAA,CAAO,MAAA,EAAgB,SAAA,EAAmB,OAAA,EAAiC;AACzE,UAAA,OAAO,OAAA;AAAA,YACL,MAAA;AAAA,YACA,QAAA;AAAA,YACA,CAAA,OAAA,EAAU,kBAAkB,MAAA,EAAQ,cAAc,CAAC,CAAA,UAAA,EAAa,iBAAA,CAAkB,SAAA,EAAW,iBAAiB,CAAC,CAAA,CAAA;AAAA,YAC/G;AAAA,WACF;AAAA,QACF;AAAA;AACF,KACF;AAAA,IACA,OAAA,EAAS;AAAA,MACP,QAAA,EAAU;AAAA,QACR,GAAA,CAAI,SAAA,EAAmB,KAAA,EAAqC,OAAA,EAAiC;AAC3F,UAAA,OAAO,OAAA;AAAA,YACL,MAAA;AAAA,YACA,MAAA;AAAA,YACA,CAAA,UAAA,EAAa,iBAAA,CAAkB,SAAA,EAAW,iBAAiB,CAAC,CAAA,UAAA,CAAA;AAAA,YAC5D,OAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA;AAAA,QACA,MAAA,CAAO,SAAA,EAAmB,KAAA,EAAe,OAAA,EAAiC;AACxE,UAAA,OAAO,OAAA;AAAA,YACL,MAAA;AAAA,YACA,QAAA;AAAA,YACA,CAAA,UAAA,EAAa,kBAAkB,SAAA,EAAW,iBAAiB,CAAC,CAAA,WAAA,EAAc,iBAAA,CAAkB,KAAA,EAAO,gBAAgB,CAAC,CAAA,CAAA;AAAA,YACpH;AAAA,WACF;AAAA,QACF;AAAA,OACF;AAAA,MACA,MAAA,CAAO,OAAwC,OAAA,EAAiC;AAC9E,QAAA,OAAO,OAAA;AAAA,UACL,MAAA;AAAA,UACA,MAAA;AAAA,UACA,kBAAA;AAAA,UACA,OAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AAAA,KACF;AAAA,IACA;AAAA,GACF;AACF;AAEO,IAAM,eAAA,GAAkB;AAAA,EAC7B,SAAA,EAAW,MAAA;AAAA,EACX,QAAA,EAAU,OAAA;AAAA,EACV,OAAA,EAAS;AAAA,IACP,EAAE,IAAA,EAAM,WAAA,EAAa,MAAA,EAAQ,KAAA,EAAO,MAAM,aAAA,EAAc;AAAA,IACxD,EAAE,IAAA,EAAM,YAAA,EAAc,MAAA,EAAQ,MAAA,EAAQ,MAAM,aAAA,EAAc;AAAA,IAC1D,EAAE,IAAA,EAAM,SAAA,EAAW,MAAA,EAAQ,KAAA,EAAO,MAAM,uBAAA,EAAwB;AAAA,IAChE,EAAE,IAAA,EAAM,YAAA,EAAc,MAAA,EAAQ,OAAA,EAAS,MAAM,uBAAA,EAAwB;AAAA,IACrE,EAAE,IAAA,EAAM,aAAA,EAAe,MAAA,EAAQ,MAAA,EAAQ,MAAM,+BAAA,EAAgC;AAAA,IAC7E,EAAE,IAAA,EAAM,kBAAA,EAAoB,MAAA,EAAQ,KAAA,EAAO,MAAM,gCAAA,EAAiC;AAAA,IAClF,EAAE,IAAA,EAAM,iBAAA,EAAmB,MAAA,EAAQ,MAAA,EAAQ,MAAM,gCAAA,EAAiC;AAAA,IAClF,EAAE,IAAA,EAAM,mBAAA,EAAqB,MAAA,EAAQ,OAAA,EAAS,MAAM,6CAAA,EAA8C;AAAA,IAClG,EAAE,IAAA,EAAM,mBAAA,EAAqB,MAAA,EAAQ,QAAA,EAAU,MAAM,6CAAA,EAA8C;AAAA,IACnG,EAAE,IAAA,EAAM,mBAAA,EAAqB,MAAA,EAAQ,MAAA,EAAQ,MAAM,mCAAA,EAAoC;AAAA,IACvF,EAAE,IAAA,EAAM,iBAAA,EAAmB,MAAA,EAAQ,KAAA,EAAO,MAAM,+BAAA,EAAgC;AAAA,IAChF,EAAE,IAAA,EAAM,gBAAA,EAAkB,MAAA,EAAQ,MAAA,EAAQ,MAAM,+BAAA,EAAgC;AAAA,IAChF,EAAE,IAAA,EAAM,kBAAA,EAAoB,MAAA,EAAQ,QAAA,EAAU,MAAM,yCAAA,EAA0C;AAAA,IAC9F,EAAE,IAAA,EAAM,aAAA,EAAe,MAAA,EAAQ,MAAA,EAAQ,MAAM,uCAAA,EAAwC;AAAA,IACrF,EAAE,IAAA,EAAM,gBAAA,EAAkB,MAAA,EAAQ,QAAA,EAAU,MAAM,+CAAA,EAAgD;AAAA,IAClG,EAAE,IAAA,EAAM,gBAAA,EAAkB,MAAA,EAAQ,MAAA,EAAQ,MAAM,uBAAA,EAAwB;AAAA,IACxE,EAAE,IAAA,EAAM,iBAAA,EAAmB,MAAA,EAAQ,KAAA,EAAO,MAAM,WAAA,EAAY;AAAA,IAC5D,EAAE,IAAA,EAAM,iBAAA,EAAmB,MAAA,EAAQ,KAAA,EAAO,MAAM,cAAA;AAAe;AAEnE;AAEO,SAAS,eAAe,OAAA,EAAwD;AACrF,EAAA,OAAO,mBAAmB,OAAO,CAAA;AACnC;AAEO,SAAS,kBAAkB,OAAA,EAA8D;AAC9F,EAAA,OAAO,mBAAmB,OAAO,CAAA;AACnC;;;ACloBA,IAAM,eAAA,GAAiC,EAAE,IAAA,EAAM,QAAA,EAAS;AAEjD,SAAS,gBAAgB,KAAA,EAA+D;AAC7F,EAAA,IAAI,CAAC,OAAO,OAAO,eAAA;AACnB,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,EAAE,IAAA,EAAM,OAAM,GAAI,KAAA;AACvD;AAEA,SAAS,YAAA,CACP,SACA,IAAA,EACwB;AACxB,EAAA,OAAO;AAAA,IACL,GAAI,WAAW,EAAC;AAAA,IAChB,GAAG;AAAA,GACL;AACF;AAEA,SAAS,qBAAA,CACP,SACA,IAAA,EAC+B;AAC/B,EAAA,MAAM,MAAA,GAAwC;AAAA,IAC5C,GAAI,WAAW,EAAC;AAAA,IAChB,GAAG;AAAA,GACL;AACA,EAAA,IAAI,OAAA,EAAS,OAAA,IAAW,IAAA,CAAK,OAAA,EAAS;AACpC,IAAA,MAAA,CAAO,UAAU,YAAA,CAAa,OAAA,EAAS,SAAS,IAAA,CAAK,OAAA,IAAW,EAAE,CAAA;AAAA,EACpE;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,wBAAA,CACP,SACA,IAAA,EACiC;AACjC,EAAA,MAAM,MAAA,GAA0C;AAAA,IAC9C,GAAI,WAAW,EAAC;AAAA,IAChB,GAAG;AAAA,GACL;AACA,EAAA,IACE,OAAA,EAAS,YAAA,IACT,OAAO,OAAA,CAAQ,YAAA,KAAiB,QAAA,IAChC,IAAA,CAAK,YAAA,IACL,OAAO,IAAA,CAAK,YAAA,KAAiB,QAAA,EAC7B;AACA,IAAA,MAAA,CAAO,YAAA,GAAe;AAAA,MACpB,GAAG,OAAA,CAAQ,YAAA;AAAA,MACX,GAAG,IAAA,CAAK;AAAA,KACV;AAAA,EACF;AACA,EAAA,IAAI,OAAA,EAAS,OAAA,IAAW,IAAA,CAAK,OAAA,EAAS;AACpC,IAAA,MAAA,CAAO,OAAA,GAAU;AAAA,MACf,GAAI,OAAA,EAAS,OAAA,IAAW,EAAC;AAAA,MACzB,GAAI,IAAA,CAAK,OAAA,IAAW;AAAC,KACvB;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,oBAAA,CAIP,OAAA,EACA,cAAA,EACA,aAAA,EAC+C;AAG/C,EAAA,OAAO,OAAA;AACT;AAEA,IAAM,0BAAN,MAA2E;AAAA,EAgBzE,YACmB,WAAA,EACjB;AADiB,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AAAA,EAChB;AAAA,EAjBK,OAAA;AAAA,EACA,MAAA;AAAA,EACA,aAAA,GAA+B,eAAA;AAAA,EAC/B,UAAA;AAAA,EACA,aAAA;AAAA,EACA,qBAAA;AAAA,EACA,mBAAA,GAAsB,KAAA;AAAA,EACtB,cAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,kBAAA;AAAA,EACA,eAAA;AAAA,EACA,kBAAA;AAAA,EACA,mBAAA;AAAA,EAMR,IAAI,GAAA,EAAmE;AACrE,IAAA,IAAA,CAAK,OAAA,GAAU,GAAA;AACf,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,IAAI,MAAA,EAAsE;AACxE,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,QAAQ,OAAA,EAAyE;AAC/E,IAAA,IAAA,CAAK,aAAA,GAAgB,gBAAgB,OAAO,CAAA;AAC5C,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAO,UAAA,EAA0E;AAC/E,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,QAAQ,OAAA,EAAoE;AAC1E,IAAA,IAAA,CAAK,cAAA,GAAiB,OAAA;AACtB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,KAAK,MAAA,EAA0E;AAC7E,IAAA,IAAA,CAAK,UAAA,GAAa,qBAAA,CAAsB,IAAA,CAAK,UAAA,EAAY,MAAM,CAAA;AAC/D,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAQA,aACE,OAAA,EAC2I;AAC3I,IAAA,IAAA,CAAK,mBAAA,GAAsB,wBAAA,CAAyB,IAAA,CAAK,mBAAA,EAAqB,OAAO,CAAA;AACrF,IAAA,IAAI,OAAA,CAAQ,oBAAA,IAAwB,OAAA,CAAQ,gBAAA,EAAkB;AAC5D,MAAA,OAAO,oBAAA,CAAqB,IAAgB,CAAA;AAAA,IAC9C;AACA,IAAA,IAAI,QAAQ,oBAAA,EAAsB;AAChC,MAAA,OAAO,oBAAA,CAAqB,IAAiB,CAAA;AAAA,IAC/C;AACA,IAAA,IAAI,QAAQ,gBAAA,EAAkB;AAC5B,MAAA,OAAO,oBAAA,CAAqB,IAAiB,CAAA;AAAA,IAC/C;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAMA,QACE,OAAA,EAC2I;AAC3I,IAAA,IAAI,OAAA,CAAQ,WAAW,MAAA,EAAW;AAChC,MAAA,IAAA,CAAK,aAAa,OAAA,CAAQ,MAAA;AAAA,IAC5B;AACA,IAAA,IAAI,OAAA,CAAQ,WAAW,MAAA,EAAW;AAChC,MAAA,IAAA,CAAK,gBAAgB,OAAA,CAAQ,MAAA;AAAA,IAC/B;AACA,IAAA,IAAI,OAAA,CAAQ,mBAAmB,MAAA,EAAW;AACxC,MAAA,IAAA,CAAK,wBAAwB,OAAA,CAAQ,cAAA;AAAA,IACvC;AACA,IAAA,IAAI,OAAA,CAAQ,iBAAiB,MAAA,EAAW;AACtC,MAAA,IAAA,CAAK,sBAAsB,OAAA,CAAQ,YAAA;AAAA,IACrC;AACA,IAAA,IAAI,OAAA,CAAQ,YAAY,MAAA,EAAW;AACjC,MAAA,IAAA,CAAK,aAAA,GAAgB,eAAA,CAAgB,OAAA,CAAQ,OAAO,CAAA;AAAA,IACtD;AACA,IAAA,IAAI,OAAA,CAAQ,YAAY,MAAA,EAAW;AACjC,MAAA,IAAA,CAAK,cAAA,GAAiB,YAAA,CAAa,IAAA,CAAK,cAAA,EAAgB,QAAQ,OAAO,CAAA;AAAA,IACzE;AACA,IAAA,IAAI,OAAA,CAAQ,SAAS,MAAA,EAAW;AAC9B,MAAA,IAAA,CAAK,UAAA,GAAa,qBAAA,CAAsB,IAAA,CAAK,UAAA,EAAY,QAAQ,IAAI,CAAA;AAAA,IACvE;AACA,IAAA,IAAI,QAAQ,EAAA,EAAI,GAAA,KAAQ,UAAa,OAAA,CAAQ,EAAA,CAAG,QAAQ,IAAA,EAAM;AAC5D,MAAA,IAAA,CAAK,aAAA,GAAgB,QAAQ,EAAA,CAAG,GAAA;AAAA,IAClC;AACA,IAAA,IAAI,QAAQ,OAAA,EAAS,GAAA,KAAQ,UAAa,OAAA,CAAQ,OAAA,CAAQ,QAAQ,IAAA,EAAM;AACtE,MAAA,IAAA,CAAK,kBAAA,GAAqB,QAAQ,OAAA,CAAQ,GAAA;AAAA,IAC5C;AACA,IAAA,IAAI,OAAA,CAAQ,KAAA,KAAU,MAAA,IAAa,OAAA,CAAQ,UAAU,IAAA,EAAM;AACzD,MAAA,IAAA,CAAK,gBAAgB,OAAA,CAAQ,KAAA;AAAA,IAC/B;AACA,IAAA,IAAI,OAAA,CAAQ,UAAA,KAAe,MAAA,IAAa,OAAA,CAAQ,eAAe,IAAA,EAAM;AACnE,MAAA,IAAA,CAAK,qBAAqB,OAAA,CAAQ,UAAA;AAAA,IACpC;AACA,IAAA,IAAI,OAAA,CAAQ,OAAA,KAAY,MAAA,IAAa,OAAA,CAAQ,YAAY,IAAA,EAAM;AAC7D,MAAA,IAAA,CAAK,kBAAkB,OAAA,CAAQ,OAAA;AAAA,IACjC;AACA,IAAA,IAAI,QAAQ,OAAA,EAAS,GAAA,KAAQ,UAAa,OAAA,CAAQ,OAAA,CAAQ,QAAQ,IAAA,EAAM;AACtE,MAAA,IAAA,CAAK,kBAAA,GAAqB,QAAQ,OAAA,CAAQ,GAAA;AAAA,IAC5C;AACA,IAAA,IAAI,OAAA,CAAQ,UAAA,KAAe,MAAA,IAAa,OAAA,CAAQ,eAAe,IAAA,EAAM;AACnE,MAAA,IAAA,CAAK,qBAAqB,OAAA,CAAQ,UAAA;AAAA,IACpC;AACA,IAAA,IAAI,OAAA,CAAQ,iBAAiB,MAAA,EAAW;AACtC,MAAA,IAAA,CAAK,mBAAA,GAAsB,wBAAA,CAAyB,IAAA,CAAK,mBAAA,EAAqB,QAAQ,YAAY,CAAA;AAAA,IACpG;AACA,IAAA,IAAI,OAAA,CAAQ,YAAA,EAAc,oBAAA,IAAwB,OAAA,CAAQ,aAAa,gBAAA,EAAkB;AACvF,MAAA,OAAO,oBAAA,CAAqB,IAAgB,CAAA;AAAA,IAC9C;AACA,IAAA,IAAI,OAAA,CAAQ,cAAc,oBAAA,EAAsB;AAC9C,MAAA,OAAO,oBAAA,CAAqB,IAAiB,CAAA;AAAA,IAC/C;AACA,IAAA,IAAI,OAAA,CAAQ,cAAc,gBAAA,EAAkB;AAC1C,MAAA,OAAO,oBAAA,CAAqB,IAAiB,CAAA;AAAA,IAC/C;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,KAAA,GAAwC;AACtC,IAAA,IAAK,CAAC,IAAA,CAAK,OAAA,IAAW,CAAC,IAAA,CAAK,aAAA,IAAiB,CAAC,IAAA,CAAK,kBAAA,IAAuB,CAAC,IAAA,CAAK,MAAA,EAAQ;AACtF,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAEA,IAAA,OAAO,KAAK,WAAA,CAAY;AAAA,MACtB,KAAK,IAAA,CAAK,OAAA;AAAA,MACV,KAAK,IAAA,CAAK,MAAA;AAAA,MACV,QAAQ,IAAA,CAAK,UAAA;AAAA,MACb,QAAQ,IAAA,CAAK,aAAA;AAAA,MACb,gBAAgB,IAAA,CAAK,qBAAA;AAAA,MACrB,cAAc,IAAA,CAAK,mBAAA;AAAA,MACnB,SAAS,IAAA,CAAK,aAAA;AAAA,MACd,SAAS,IAAA,CAAK,cAAA;AAAA,MACd,IAAI,IAAA,CAAK,aAAA,GAAgB,EAAE,GAAA,EAAK,IAAA,CAAK,eAAc,GAAI,MAAA;AAAA,MACvD,SAAS,IAAA,CAAK,kBAAA,GAAqB,EAAE,GAAA,EAAK,IAAA,CAAK,oBAAmB,GAAI,MAAA;AAAA,MACtE,MAAM,IAAA,CAAK,UAAA;AAAA,MACX,SAAS,IAAA,CAAK,eAAA;AAAA,MACd,SAAS,IAAA,CAAK,kBAAA,GAAqB,EAAE,GAAA,EAAK,IAAA,CAAK,oBAAmB,GAAI,MAAA;AAAA,MACtE,YAAY,IAAA,CAAK,kBAAA;AAAA,MACjB,cAAc,IAAA,CAAK;AAAA,KACpB,CAAA;AAAA,EACH;AACF,CAAA;AAEO,SAAS,0BACd,WAAA,EACmC;AACnC,EAAA,OAAO,IAAI,wBAAwB,WAAW,CAAA;AAChD;;;ACtOA,IAAM,YAAA,GACJ,4EAAA;AAyRF,IAAM,gBAAA,uBAAuB,GAAA,CAA0B;AAAA,EACrD,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,IAAM,sBAAA,uBAA6B,GAAA,CAA+B;AAAA,EAChE,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,SAASP,UAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAA,CAAQ,KAAK,CAAA,IAAK,OAAO,UAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,aAAa,KAAA,EAAwB;AAC5C,EAAA,OAAO,YAAA,CAAa,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,CAAA;AACvC;AAEA,SAAS,uBAAuB,MAAA,EAAyB;AACvD,EAAA,OAAO,MAAA,KAAW,QAAQ,qBAAA,CAAsB,IAAA,CAAK,MAAM,CAAA,IAAK,OAAA,CAAQ,KAAK,MAAM,CAAA;AACrF;AAEO,SAAS,2BAAA,CAA4B,QAAgB,KAAA,EAAsC;AAChG,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,aAAa,KAAK,CAAA,IAAK,uBAAuB,MAAM,CAAA;AAC1F;AAEA,SAAS,qBAAqB,KAAA,EAAmD;AAC/E,EAAA,OAAOA,SAAAA,CAAS,KAAK,CAAA,IAAKA,SAAAA,CAAS,MAAM,MAAM,CAAA;AACjD;AAEA,SAAS,mBAAA,CAAoB,OAAe,KAAA,EAAuB;AACjE,EAAA,MAAM,UAAA,GAAa,MAAM,IAAA,EAAK;AAC9B,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,2BAAA,CAA6B,CAAA;AAAA,EACvD;AACA,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,qBAAqB,KAAA,EAA0E;AACtG,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA,EACvB;AACA,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAEA,SAAS,qBAAA,CACP,QAAA,EACA,MAAA,EACA,KAAA,EACwB;AACxB,EAAA,MAAM,SAAA,GAAoC,EAAE,QAAA,EAAS;AACrD,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,SAAA,CAAU,MAAA,GAAS,MAAA;AACnB,IAAA,IAAI,aAAa,IAAA,EAAM;AACrB,MAAA,SAAA,CAAU,SAAA,GAAY,MAAA;AAAA,IACxB;AAAA,EACF;AACA,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,SAAA,CAAU,KAAA,GAAQ,KAAA;AAClB,IAAA,IAAI,aAAa,IAAA,EAAM;AACrB,MAAA,SAAA,CAAU,QAAA,GAAW,KAAA;AAAA,IACvB;AAAA,EACF;AACA,EAAA,IAAI,QAAA,KAAa,QAAQ,MAAA,IAAU,KAAA,KAAU,UAAa,2BAAA,CAA4B,MAAA,EAAQ,KAA6B,CAAA,EAAG;AAC5H,IAAA,SAAA,CAAU,WAAA,GAAc,MAAA;AACxB,IAAA,SAAA,CAAU,cAAA,GAAiB,MAAA;AAAA,EAC7B;AACA,EAAA,OAAO,SAAA;AACT;AAEA,SAAS,oBAAA,CACP,KACA,IAAA,EACQ;AACR,EAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,IAAA,CAAK,MAAM,CAAA;AAC7C,EAAA,MAAM,WAAA,GAAc,mBAAA,CAAoB,GAAA,EAAK,qBAAqB,CAAA;AAClE,EAAA,IAAI,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,GAAA,EAAK;AAC3B,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,sBAAsB,WAAW,CAAA,gGAAA;AAAA,KACnC;AAAA,EACF;AAEA,EAAA,MAAM,iBAAA,GAAoB,mBAAA,CAAoB,IAAA,CAAK,GAAA,IAAO,aAAa,uBAAuB,CAAA;AAC9F,EAAA,IAAI,IAAA,CAAK,MAAA,IAAU,iBAAA,CAAkB,QAAA,CAAS,GAAG,CAAA,EAAG;AAClD,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,sBAAsB,WAAW,CAAA,wEAAA;AAAA,KACnC;AAAA,EACF;AAEA,EAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,MAAA,EAAQ,IAAA,EAAK;AACzC,EAAA,MAAM,aAAA,GAAgB,iBAClB,CAAA,EAAG,mBAAA,CAAoB,gBAAgB,wBAAwB,CAAC,CAAA,CAAA,EAAI,iBAAiB,CAAA,CAAA,GACrF,iBAAA;AACJ,EAAA,MAAM,QAAQ,IAAA,CAAK,EAAA,EAAI,MAAK,KAAM,aAAA,KAAkB,cAAc,WAAA,GAAc,EAAA,CAAA;AAChF,EAAA,MAAM,MAAA,GAAS,KAAA,GAAQ,CAAA,EAAG,KAAK,CAAA,CAAA,CAAA,GAAM,EAAA;AACrC,EAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAG,aAAa,IAAI,MAAM,CAAA,CAAA,CAAA;AAC5C;AAEO,SAAS,mBAAmB,MAAA,EAAmC;AACpE,EAAA,IAAI,CAACA,SAAAA,CAAS,MAAM,CAAA,EAAG;AACrB,IAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAAA,EACrD;AAEA,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,QAAQ,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AACvD,IAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,aAAa,IAAA,EAAM;AACrB,MAAA,MAAA,CAAO,IAAA,CAAK,mBAAA,CAAoB,MAAA,EAAQ,eAAe,CAAC,CAAA;AACxD,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,oBAAA,CAAqB,QAAQ,CAAA,EAAG;AAClC,MAAA,MAAA,CAAO,IAAA,CAAK,oBAAA,CAAqB,MAAA,EAAQ,QAAQ,CAAC,CAAA;AAClD,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAgC,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,EAC3D;AAEA,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,IAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,EAC/D;AAEA,EAAA,OAAO,MAAA,CAAO,KAAK,GAAG,CAAA;AACxB;AAEO,SAAS,8BAA8B,MAAA,EAAoC;AAChF,EAAA,IAAI,CAACA,SAAAA,CAAS,MAAM,CAAA,EAAG;AACrB,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,KAAA,MAAW,QAAA,IAAY,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,EAAG;AAC5C,IAAA,IAAI,CAAC,oBAAA,CAAqB,QAAQ,CAAA,EAAG;AACnC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,OAAO,SAAS,MAAA,KAAW,QAAA,IAAY,SAAS,MAAA,CAAO,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA,EAAG;AAC5E,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,6BAAA,CAA8B,QAAA,CAAS,MAAM,CAAA,EAAG;AAClD,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,kBAAA,CACP,QACA,KAAA,EAC0B;AAC1B,EAAA,MAAM,gBAAA,GAAmB,mBAAA,CAAoB,MAAA,EAAQ,cAAc,CAAA;AACnE,EAAA,IAAI,CAACA,SAAAA,CAAS,KAAK,CAAA,EAAG;AACpB,IAAA,OAAO,CAAC,qBAAA,CAAsB,IAAA,EAAM,gBAAA,EAAkB,KAAK,CAAC,CAAA;AAAA,EAC9D;AAEA,EAAA,MAAM,aAAuC,EAAC;AAC9C,EAAA,KAAA,MAAW,CAAC,WAAA,EAAa,QAAQ,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC3D,IAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAC,gBAAA,CAAiB,GAAA,CAAI,WAAmC,CAAA,EAAG;AAC9D,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,4BAAA,EAA+B,WAAW,CAAA,MAAA,EAAS,gBAAgB,CAAA,CAAA,CAAG,CAAA;AAAA,IACxF;AACA,IAAA,IAAA,CACG,WAAA,KAAgB,IAAA,IAAQ,WAAA,KAAgB,UAAA,IAAc,WAAA,KAAgB,kBACvE,CAAC,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EACvB;AACA,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,MAAA,EAAS,gBAAgB,CAAA,CAAA,EAAI,WAAW,CAAA,wBAAA,CAA0B,CAAA;AAAA,IACpF;AACA,IAAA,UAAA,CAAW,IAAA;AAAA,MACT,qBAAA;AAAA,QACE,WAAA;AAAA,QACA,gBAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,EACF;AAEA,EAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,MAAA,EAAS,gBAAgB,CAAA,+BAAA,CAAiC,CAAA;AAAA,EAC5E;AAEA,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,6BAAA,CACP,QACA,KAAA,EACU;AACV,EAAA,IAAI,CAACA,SAAAA,CAAS,MAAM,CAAA,EAAG;AACrB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,eAAA,EAAkB,KAAK,CAAA,wBAAA,CAA0B,CAAA;AAAA,EACnE;AAEA,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CAAE,MAAA,CAAO,CAAC,GAAG,KAAK,CAAA,KAAM,KAAA,KAAU,MAAS,CAAA;AAChF,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,eAAA,EAAkB,KAAK,CAAA,uCAAA,CAAyC,CAAA;AAAA,EAClF;AAEA,EAAA,MAAM,CAAC,SAAA,EAAW,QAAQ,CAAA,GAAI,QAAQ,CAAC,CAAA;AACvC,EAAA,MAAM,MAAA,GAAS,mBAAA,CAAoB,SAAA,EAAW,CAAA,MAAA,EAAS,KAAK,CAAA,OAAA,CAAS,CAAA;AAErE,EAAA,IAAI,CAACA,SAAAA,CAAS,QAAQ,CAAA,EAAG;AACvB,IAAA,OAAO,CAAC,CAAA,EAAG,MAAM,OAAO,oBAAA,CAAqB,QAAgC,CAAC,CAAA,CAAE,CAAA;AAAA,EAClF;AAEA,EAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA,CAAE,MAAA,CAAO,CAAC,GAAG,KAAK,CAAA,KAAM,KAAA,KAAU,MAAS,CAAA;AAC1F,EAAA,IAAI,eAAA,CAAgB,WAAW,CAAA,EAAG;AAChC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,eAAA,EAAkB,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,+BAAA,CAAiC,CAAA;AAAA,EACpF;AAEA,EAAA,IAAI,KAAA,KAAU,KAAA,IAAS,eAAA,CAAgB,MAAA,GAAS,CAAA,EAAG;AACjD,IAAA,MAAM,IAAI,MAAM,wEAAwE,CAAA;AAAA,EAC1F;AAEA,EAAA,OAAO,gBAAgB,GAAA,CAAI,CAAC,CAAC,WAAA,EAAa,UAAU,CAAA,KAAM;AACxD,IAAA,IAAI,CAAC,sBAAA,CAAuB,GAAA,CAAI,WAAwC,CAAA,EAAG;AACzE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,eAAA,EAAkB,KAAK,CAAA,wCAAA,CAA0C,CAAA;AAAA,IACnF;AACA,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA,EAAG;AAC7B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,eAAA,EAAkB,KAAK,CAAA,wCAAA,CAA0C,CAAA;AAAA,IACnF;AACA,IAAA,OAAO,GAAG,MAAM,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA,EAAI,oBAAA,CAAqB,UAAkC,CAAC,CAAA,CAAA;AAAA,EAC7F,CAAC,CAAA;AACH;AAEO,SAAS,aAAa,KAAA,EAA2D;AACtF,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,CAACA,SAAAA,CAAS,KAAK,CAAA,EAAG;AACpB,IAAA,MAAM,IAAI,MAAM,kCAAkC,CAAA;AAAA,EACpD;AAEA,EAAA,MAAM,aAAuC,EAAC;AAC9C,EAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,QAAQ,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AACtD,IAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,WAAW,IAAA,EAAM;AACnB,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,IAAK,QAAA,CAAS,WAAW,CAAA,EAAG;AACrD,QAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,MAC/D;AACA,MAAA,MAAM,cAAc,QAAA,CAAS,OAAA;AAAA,QAAQ,CAAA,KAAA,KACnC,6BAAA,CAA8B,KAAA,EAAoC,IAAI;AAAA,OACxE;AACA,MAAA,UAAA,CAAW,IAAA,CAAK,sBAAsB,IAAA,EAAM,MAAA,EAAW,YAAY,IAAA,CAAK,GAAG,CAAC,CAAC,CAAA;AAC7E,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,WAAW,KAAA,EAAO;AACpB,MAAA,MAAM,WAAA,GAAc,6BAAA,CAA8B,QAAA,EAAuC,KAAK,CAAA;AAC9F,MAAA,IAAI,WAAA,CAAY,WAAW,CAAA,EAAG;AAC5B,QAAA,MAAM,IAAI,MAAM,oEAAoE,CAAA;AAAA,MACtF;AACA,MAAA,UAAA,CAAW,KAAK,qBAAA,CAAsB,KAAA,EAAO,QAAW,WAAA,CAAY,CAAC,CAAC,CAAC,CAAA;AACvE,MAAA;AAAA,IACF;AAEA,IAAA,UAAA,CAAW,IAAA,CAAK,GAAG,kBAAA,CAAmB,MAAA,EAAQ,QAA2D,CAAC,CAAA;AAAA,EAC5G;AAEA,EAAA,OAAO,UAAA,CAAW,MAAA,GAAS,CAAA,GAAI,UAAA,GAAa,MAAA;AAC9C;AAEA,SAAS,sBAAsB,KAAA,EAA+D;AAC5F,EAAA,IAAI,OAAO,UAAU,SAAA,EAAW;AAC9B,IAAA,OAAO,KAAA,KAAU,QAAQ,YAAA,GAAe,WAAA;AAAA,EAC1C;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,UAAA,GAAa,KAAA,CAAM,IAAA,EAAK,CAAE,WAAA,EAAY;AAC5C,IAAA,IAAI,UAAA,KAAe,KAAA,IAAS,UAAA,KAAe,WAAA,EAAa;AACtD,MAAA,OAAO,WAAA;AAAA,IACT;AACA,IAAA,IAAI,UAAA,KAAe,MAAA,IAAU,UAAA,KAAe,YAAA,EAAc;AACxD,MAAA,OAAO,YAAA;AAAA,IACT;AACA,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,+BAAA,EAAkC,KAAK,CAAA,CAAA,CAAG,CAAA;AAAA,EAC5D;AACA,EAAA,OAAO,KAAA,CAAM,SAAA,KAAc,KAAA,GAAQ,YAAA,GAAe,WAAA;AACpD;AAEO,SAAS,eAAqC,OAAA,EAAwD;AAC3G,EAAA,IAAI,YAAY,MAAA,EAAW;AACzB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,CAACA,SAAAA,CAAS,OAAO,CAAA,EAAG;AACtB,IAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA,EACtD;AAEA,EAAA,IAAI,YAAY,OAAA,EAAS;AACvB,IAAA,OAAO;AAAA,MACL,OAAO,mBAAA,CAAoB,MAAA,CAAO,OAAA,CAAQ,MAAM,GAAG,gBAAgB,CAAA;AAAA,MACnE,SAAA,EAAW,OAAA,CAAQ,SAAA,KAAc,KAAA,GAAQ,YAAA,GAAe;AAAA,KAC1D;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,CAAE,MAAA,CAAO,CAAC,GAAG,KAAK,CAAA,KAAM,KAAA,KAAU,MAAS,CAAA;AACjF,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,MAAM,IAAI,MAAM,sDAAsD,CAAA;AAAA,EACxE;AAEA,EAAA,MAAM,CAAC,MAAA,EAAQ,KAAK,CAAA,GAAI,QAAQ,CAAC,CAAA;AACjC,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,mBAAA,CAAoB,MAAA,EAAQ,gBAAgB,CAAA;AAAA,IACnD,SAAA,EAAW,sBAAsB,KAAoC;AAAA,GACvE;AACF;;;ACjnBA,IAAM,0BAAA,GAA6B,0BAAA;AAEnC,SAAS,iBAAiB,KAAA,EAAwB;AAChD,EAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAG,EAAE,GAAA,CAAI,CAAA,OAAA,KAAW,OAAA,CAAQ,IAAA,EAAM,CAAA;AAC/D,EAAA,OAAO,QAAA,CAAS,SAAS,CAAA,IAAK,QAAA,CAAS,MAAM,CAAA,OAAA,KAAW,0BAAA,CAA2B,IAAA,CAAK,OAAO,CAAC,CAAA;AAClG;AAEA,SAAS,oBAAoB,GAAA,EAAqB;AAChD,EAAA,MAAM,OAAA,GAAU,IAAI,IAAA,EAAK;AACzB,EAAA,IAAI,CAAC,SAAS,OAAO,EAAA;AAErB,EAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA;AACtC,EAAA,MAAM,YAAA,GAAe,cAAc,CAAA,GAAI,OAAA,CAAQ,MAAM,UAAA,GAAa,CAAC,CAAA,CAAE,IAAA,EAAK,GAAI,OAAA;AAC9E,EAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,OAAA,CAAQ,GAAG,CAAA;AAC9C,EAAA,OAAA,CAAQ,aAAA,IAAiB,IAAI,YAAA,CAAa,KAAA,CAAM,GAAG,aAAa,CAAA,GAAI,cAAc,IAAA,EAAK;AACzF;AAEA,SAAS,gCAAgC,MAAA,EAAyB;AAChE,EAAA,IAAI,YAAA,GAAe,KAAA;AACnB,EAAA,IAAI,YAAA,GAAe,KAAA;AACnB,EAAA,IAAI,UAAA,GAAa,CAAA;AAEjB,EAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,MAAA,CAAO,MAAA,EAAQ,SAAS,CAAA,EAAG;AACrD,IAAA,MAAM,IAAA,GAAO,OAAO,KAAK,CAAA;AACzB,IAAA,MAAM,IAAA,GAAO,QAAQ,CAAA,GAAI,MAAA,CAAO,SAAS,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAA,GAAI,EAAA;AAE7D,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,IAAI,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,EAAK;AAChC,QAAA,KAAA,IAAS,CAAA;AACT,QAAA;AAAA,MACF;AACA,MAAA,IAAI,SAAS,GAAA,EAAK;AAChB,QAAA,YAAA,GAAe,KAAA;AAAA,MACjB;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,IAAI,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,EAAK;AAChC,QAAA,KAAA,IAAS,CAAA;AACT,QAAA;AAAA,MACF;AACA,MAAA,IAAI,SAAS,GAAA,EAAK;AAChB,QAAA,YAAA,GAAe,KAAA;AAAA,MACjB;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,YAAA,GAAe,IAAA;AACf,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,YAAA,GAAe,IAAA;AACf,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,MAAM,eAAe,mBAAA,CAAoB,MAAA,CAAO,KAAA,CAAM,UAAA,EAAY,KAAK,CAAC,CAAA;AACxE,MAAA,IAAI,gBAAA,CAAiB,YAAY,CAAA,EAAG;AAClC,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,UAAA,GAAa,KAAA,GAAQ,CAAA;AACrB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,EAAK;AAChC,MAAA,UAAA,GAAa,KAAA,GAAQ,CAAA;AAAA,IACvB;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,yBAAyB,OAAA,EAAoC;AACpE,EAAA,OAAO,MAAM,OAAA,CAAQ,OAAO,IAAI,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA,GAAI,OAAA;AACtD;AAOA,SAAS,qBACP,UAAA,EACqC;AACrC,EAAA,IAAI,CAAC,UAAA,EAAY,MAAA,EAAQ,OAAO,MAAA;AAEhC,EAAA,MAAM,QAA0B,EAAC;AAEjC,EAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,IAAA,IAAI,CAAC,UAAU,MAAA,EAAQ;AACrB,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,SAAA,CAAU,eAAe,MAAA,EAAW;AACtC,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,UAAU,SAAA,CAAU,KAAA;AAC1B,IAAA,MAAM,WAAW,SAAA,CAAU,QAAA;AAC3B,IAAA,IAAI,aAAa,IAAA,EAAM;AACrB,MAAA,IAAI,OAAA,KAAY,QAAW,OAAO,IAAA;AAAA,IACpC,WAAW,QAAA,KAAa,KAAA,IAAS,QAAA,KAAa,IAAA,IAAQ,aAAa,IAAA,EAAM;AACvE,MAAA,IAAI,OAAA,KAAY,QAAW,OAAO,IAAA;AAAA,IACpC,CAAA,MAAA,IAAW,aAAa,IAAA,EAAM;AAC5B,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,OAAO,GAAG,OAAO,IAAA;AAAA,IACtC,CAAA,MAAO;AACL,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,QAAA,GAAW,KAAA,CAAM,SAAA,CAAU,MAAM,CAAA;AACvC,IAAA,IAAI,QAAA,KAAa,MAAA,KAAc,OAAO,QAAA,KAAa,QAAA,IAAY,aAAa,IAAA,IAAQ,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,CAAA,EAAI;AAC5G,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,IAAA,GAAQ,YAA6C,EAAC;AAC5D,IAAA,IAAI,OAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,IAAA,EAAM,QAAQ,CAAA,EAAG;AACxD,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAA,CAAK,QAAQ,CAAA,GAAI,OAAA;AACjB,IAAA,KAAA,CAAM,SAAA,CAAU,MAAM,CAAA,GAAI,IAAA;AAAA,EAC5B;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,uBAAuB,KAAA,EAA+D;AAC7F,EAAA,IAAI,CAAC,KAAA,EAAO,KAAA,EAAO,OAAO,MAAA;AAC1B,EAAA,OAAO;AAAA,IACL,CAAC,KAAA,CAAM,KAAK,GAAG,KAAA,CAAM,SAAA,KAAc,eAAe,MAAA,GAAS;AAAA,GAC7D;AACF;AAmBO,SAAS,+BACd,KAAA,EAC4D;AAC5D,EAAA,MAAM,MAAA,GAAS,wBAAA,CAAyB,KAAA,CAAM,OAAO,EAAE,IAAA,EAAK;AAC5D,EAAA,IAAI,CAAC,MAAA,IAAU,MAAA,KAAW,GAAA,EAAK;AAC7B,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,+BAAA,CAAgC,MAAM,CAAA,EAAG;AAC5C,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,CAAM,KAAA,KAAU,MAAA,IAAa,KAAA,CAAM,SAAS,MAAA,EAAW;AACzD,IAAA,OAAO;AAAA,MACL,KAAA,EACE;AAAA,KACJ;AAAA,EACF;AAEA,EAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,KAAA,CAAM,UAAU,CAAA;AACnD,EAAA,IAAI,UAAU,IAAA,EAAM;AAClB,IAAA,OAAO;AAAA,MACL,KAAA,EACE;AAAA,KACJ;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,OAAA,EAAS;AAAA,MACP,YAAY,KAAA,CAAM,SAAA;AAAA,MAClB,MAAA;AAAA,MACA,KAAA;AAAA,MACA,OAAA,EAAS,sBAAA,CAAuB,KAAA,CAAM,KAAK,CAAA;AAAA,MAC3C,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,aAAa,KAAA,CAAM;AAAA;AACrB,GACF;AACF;;;ACtHO,SAAS,2BAA2B,KAAA,EAA4C;AACrF,EAAA,OACE,KAAA,CAAM,UAAA,CAAW,MAAA,KAAW,CAAA,IAC5B,MAAM,MAAA,KAAW,MAAA,IACjB,KAAA,CAAM,WAAA,KAAgB,MAAA,IACtB,KAAA,CAAM,QAAA,KAAa,MAAA,IACnB,MAAM,UAAA,KAAe,MAAA;AAEzB;AAEO,SAAS,mBAAwB,KAAA,EAAsD;AAC5F,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO;AAAA,IACL,QAAQ,KAAA,CAAM,KAAA;AAAA,IACd,SAAA,EAAW,MAAM,SAAA,KAAc;AAAA,GACjC;AACF;AAEA,SAASA,UAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAA,CAAQ,KAAK,CAAA,IAAK,OAAO,UAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,oCACP,KAAA,EAC0B;AAC1B,EAAA,IAAI,CAACA,SAAAA,CAAS,KAAK,CAAA,EAAG;AACpB,IAAA,OAAO;AAAA,MACL,EAAA,EAAI;AAAA,KACN;AAAA,EACF;AAEA,EAAA,MAAM,aAAuC,EAAC;AAC9C,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,OAAO,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAClD,IAAA,IAAI,YAAY,MAAA,EAAW;AACzB,MAAA,UAAA,CAAW,GAAqC,CAAA,GAAI,OAAA;AAAA,IACtD;AAAA,EACF;AACA,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,mCACP,MAAA,EACgC;AAChC,EAAA,MAAM,aAAsC,EAAC;AAC7C,EAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAiC,CAAA,EAAG;AAC/E,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA;AAAA,IACF;AACA,IAAA,UAAA,CAAW,MAAM,CAAA,GAAI,mCAAA,CAAoC,KAAK,CAAA;AAAA,EAChE;AACA,EAAA,OAAO,UAAA;AACT;AAEO,SAAS,0BACd,KAAA,EAC8B;AAC9B,EAAA,IAAI,CAAC,KAAA,IAAS,CAACA,SAAAA,CAAS,KAAK,CAAA,EAAG;AAC9B,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,aAA+B,EAAC;AACtC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAgC,CAAA,EAAG;AAC3E,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,GAAA,KAAQ,IAAA,IAAQ,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxC,MAAA,UAAA,CAAW,KAAK,KAAA,CAAM,GAAA;AAAA,QAAI,CAAA,MAAA,KACxB,mCAAmC,MAAwC;AAAA,OAC7E;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAI,GAAA,KAAQ,KAAA,IAASA,SAAAA,CAAS,KAAK,CAAA,EAAG;AACpC,MAAA,UAAA,CAAW,GAAA,GAAM,kCAAA;AAAA,QACf;AAAA,OACF;AACA,MAAA;AAAA,IACF;AACA,IAAA,UAAA,CAAW,GAAG,CAAA,GAAI,mCAAA,CAAoC,KAAK,CAAA;AAAA,EAC7D;AAEA,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,kCAAA,CACP,QACA,KAAA,EACS;AACT,EAAA,IAAI,CAACA,SAAAA,CAAS,KAAK,CAAA,EAAG;AACpB,IAAA,OAAO,2BAAA,CAA4B,QAAQ,KAA0D,CAAA;AAAA,EACvG;AAEA,EAAA,MAAM,UAAU,KAAA,CAAM,EAAA;AACtB,EAAA,OAAO,OAAA,KAAY,MAAA,IACd,2BAAA,CAA4B,MAAA,EAAQ,OAA4D,CAAA;AACvG;AAEA,SAAS,wCACP,MAAA,EACS;AACT,EAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAiC,CAAA,EAAG;AAC/E,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,kCAAA,CAAmC,MAAA,EAAQ,KAAK,CAAA,EAAG;AACrD,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,wCACd,KAAA,EACS;AACT,EAAA,IAAI,CAAC,KAAA,IAAS,CAACA,SAAAA,CAAS,KAAK,CAAA,EAAG;AAC9B,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAgC,CAAA,EAAG;AAC3E,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,GAAA,KAAQ,IAAA,IAAQ,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxC,MAAA,IACE,KAAA,CAAM,IAAA;AAAA,QAAK,CAAA,MAAA,KACT,wCAAwC,MAAwC;AAAA,OAClF,EACA;AACA,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAI,GAAA,KAAQ,KAAA,IAASA,SAAAA,CAAS,KAAK,CAAA,EAAG;AACpC,MAAA,IAAI,uCAAA,CAAwC,KAAuC,CAAA,EAAG;AACpF,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAI,kCAAA,CAAmC,GAAA,EAAK,KAAK,CAAA,EAAG;AAClD,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,kBAAkB,KAAA,EAKL;AAC3B,EAAA,IAAI,QAAQ,KAAA,CAAM,KAAA;AAClB,EAAA,IAAI,SAAS,KAAA,CAAM,MAAA;AAEnB,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,CAAM,QAAA,KAAa,MAAA,EAAW;AACvD,IAAA,KAAA,GAAQ,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,KAAA,CAAM,KAAA,CAAM,QAAQ,CAAC,CAAA;AAAA,EAChD;AACA,EAAA,IACE,MAAA,KAAW,MAAA,IACX,KAAA,CAAM,QAAA,KAAa,MAAA,IACnB,MAAM,WAAA,KAAgB,MAAA,IACtB,KAAA,CAAM,WAAA,GAAc,CAAA,EACpB;AACA,IAAA,MAAA,GAAA,CAAU,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,WAAW,CAAA,GAAI,CAAA,IAAK,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,QAAQ,CAAC,CAAA;AAAA,EACvF;AAEA,EAAA,OAAO,EAAE,OAAO,MAAA,EAAO;AACzB;AAEA,SAAS,2BAA2B,UAAA,EAA2D;AAC7F,EAAA,OACE,UAAA,EAAY,IAAA;AAAA,IACV,CAAA,SAAA,KACE,UAAU,QAAA,KAAa,IAAA,KACtB,UAAU,UAAA,KAAe,MAAA,IAAa,UAAU,WAAA,KAAgB,MAAA;AAAA,GACrE,IAAK,KAAA;AAET;AAEO,SAAS,0BAA0B,KAAA,EAMZ;AAC5B,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,KAAA,CAAM,UAAA,CAAW,SACtC,KAAA,CAAM,KAAA,CAAM,UAAA,CAAW,GAAA,CAAI,CAAA,SAAA,MAAc,EAAE,GAAG,SAAA,GAAY,CAAA,GAC1D,MAAA;AAEJ,EAAA,MAAM,aAAa,iBAAA,CAAkB;AAAA,IACnC,KAAA,EAAO,MAAM,KAAA,CAAM,KAAA;AAAA,IACnB,MAAA,EAAQ,MAAM,KAAA,CAAM,MAAA;AAAA,IACpB,WAAA,EAAa,MAAM,KAAA,CAAM,WAAA;AAAA,IACzB,QAAA,EAAU,MAAM,KAAA,CAAM;AAAA,GACvB,CAAA;AACD,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,OAAA,EAAS,UAAA,IAAc,IAAA;AAChD,EAAA,MAAM,4BAA4B,8BAAA,CAA+B;AAAA,IAC/D,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,UAAA;AAAA,IACA,OAAO,UAAA,CAAW,KAAA;AAAA,IAClB,QAAQ,UAAA,CAAW,MAAA;AAAA,IACnB,KAAA,EAAO,MAAM,KAAA,CAAM,KAAA;AAAA,IACnB,UAAA;AAAA,IACA,KAAA,EAAO,MAAM,OAAA,EAAS,KAAA;AAAA,IACtB,IAAA,EAAM,MAAM,OAAA,EAAS;AAAA,GACtB,CAAA;AACD,EAAA,IAAI,yBAAA,IAA6B,WAAW,yBAAA,EAA2B;AACrE,IAAA,MAAM,IAAI,KAAA,CAAM,yBAAA,CAA0B,KAAK,CAAA;AAAA,EACjD;AACA,EAAA,IAAI,yBAAA,EAA2B;AAC7B,IAAA,MAAM,EAAE,OAAA,EAAS,MAAA,EAAO,GAAI,yBAAA;AAC5B,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,OAAA;AAAA,MACN,OAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,MAAA;AAAA,QACT,UAAA;AAAA,QACA,OAAO,UAAA,CAAW,KAAA;AAAA,QAClB,QAAQ,UAAA,CAAW,MAAA;AAAA,QACnB,KAAA,EAAO,MAAM,KAAA,CAAM;AAAA;AACrB,KACF;AAAA,EACF;AAEA,EAAA,IAAI,0BAAA,CAA2B,UAAU,CAAA,IAAK,CAAC,KAAA,CAAM,OAAA,EAAS,IAAA,IAAQ,CAAC,KAAA,CAAM,OAAA,EAAS,KAAA,IAAS,UAAA,EAAY;AACzG,IAAA,MAAM,KAAA,GAAQ,MAAM,qBAAA,CAAsB;AAAA,MACxC,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,UAAA;AAAA,MACA,KAAA,EAAO,MAAM,KAAA,CAAM,KAAA;AAAA,MACnB,MAAA,EAAQ,MAAM,KAAA,CAAM,MAAA;AAAA,MACpB,WAAA,EAAa,MAAM,KAAA,CAAM,WAAA;AAAA,MACzB,QAAA,EAAU,MAAM,KAAA,CAAM,QAAA;AAAA,MACtB,KAAA,EAAO,MAAM,KAAA,CAAM;AAAA,KACpB,CAAA;AACD,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,OAAA;AAAA,QACN,KAAA;AAAA,QACA,OAAA,EAAS,EAAE,KAAA;AAAM,OACnB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,OAAA,EAAS;AAAA,MACP,YAAY,KAAA,CAAM,SAAA;AAAA,MAClB,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,UAAA;AAAA,MACA,KAAA,EAAO,MAAM,KAAA,CAAM,KAAA;AAAA,MACnB,MAAA,EAAQ,MAAM,KAAA,CAAM,MAAA;AAAA,MACpB,YAAA,EAAc,MAAM,KAAA,CAAM,WAAA;AAAA,MAC1B,SAAA,EAAW,MAAM,KAAA,CAAM,QAAA;AAAA,MACvB,WAAA,EAAa,MAAM,KAAA,CAAM,UAAA;AAAA,MACzB,OAAA,EAAS,MAAM,KAAA,CAAM,KAAA;AAAA,MACrB,WAAA,EAAa,UAAA;AAAA,MACb,KAAA,EAAO,MAAM,OAAA,EAAS,KAAA;AAAA,MACtB,IAAA,EAAM,MAAM,OAAA,EAAS;AAAA,KACvB;AAAA,IACA,KAAA,EAAO;AAAA,MACL,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,UAAA;AAAA,MACA,KAAA,EAAO,MAAM,KAAA,CAAM,KAAA;AAAA,MACnB,MAAA,EAAQ,MAAM,KAAA,CAAM,MAAA;AAAA,MACpB,WAAA,EAAa,MAAM,KAAA,CAAM,WAAA;AAAA,MACzB,QAAA,EAAU,MAAM,KAAA,CAAM,QAAA;AAAA,MACtB,KAAA,EAAO,MAAM,KAAA,CAAM;AAAA;AACrB,GACF;AACF;;;AC/UA,IAAM,oBAAA,GAAuB,kBAAA;AAuM7B,SAAS,gBAAgB,UAAA,EAAgE;AACvF,EAAA,OAAO,WAAW,GAAA,CAAI,CAAA,SAAA,MAAc,EAAE,GAAG,WAAU,CAAE,CAAA;AACvD;AAEO,SAAS,0BACd,KAAA,EAC4B;AAC5B,EAAA,OAAO;AAAA,IACL,UAAA,EAAY,eAAA,CAAgB,KAAA,CAAM,UAAU,CAAA;AAAA,IAC5C,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,OAAO,KAAA,CAAM,KAAA,GAAQ,EAAE,GAAG,KAAA,CAAM,OAAM,GAAI,MAAA;AAAA,IAC1C,aAAa,KAAA,CAAM,WAAA;AAAA,IACnB,UAAU,KAAA,CAAM,QAAA;AAAA,IAChB,YAAY,KAAA,CAAM;AAAA,GACpB;AACF;AAEO,SAAS,wBACd,KAAA,EAC0B;AAC1B,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,MAAM,OAAA,CAAQ,GAAA,CAAI,aAAW,EAAE,GAAG,QAAO,CAAE,CAAA;AAAA,IACpD,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,OAAO,KAAA,CAAM,KAAA,GAAQ,EAAE,GAAG,KAAA,CAAM,OAAM,GAAI;AAAA,GAC5C;AACF;AAEA,SAAS,qBAAqB,IAAA,EAA6D;AACzF,EAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;AACzB,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,aAAA;AAAA,MACN,QAAA,EAAU,gBAAA;AAAA,MACV,SAAS,IAAA,CAAK;AAAA,KAChB;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,IAAA,CAAK,OAAA,CAAQ,MAAA,KAAW,SAAY,kBAAA,GAAqB,gBAAA;AAAA,IAC/D,QAAA,EAAU,gBAAA;AAAA,IACV,SAAS,IAAA,CAAK;AAAA,GAChB;AACF;AAEA,SAAS,sBAAsB,SAAA,EAAuC;AACpE,EAAA,OAAO,SAAA,IAAa,mBAAA;AACtB;AAEO,SAAS,oBAAoB,KAAA,EAKX;AACvB,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAA;AAAA,IACT,IAAA,EAAM,QAAA;AAAA,IACN,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB,KAAA,EAAO;AAAA,MACL,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,KAAA,EAAO,yBAAA,CAA0B,KAAA,CAAM,KAAK;AAAA,KAC9C;AAAA,IACA,SAAA,EAAW,oBAAA,CAAqB,KAAA,CAAM,IAAI;AAAA,GAC5C;AACF;AAEO,SAAS,8BAGd,KAAA,EASuC;AACvC,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAA;AAAA,IACT,IAAA,EAAM,UAAA;AAAA,IACN,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB,KAAA,EAAO;AAAA,MACL,MAAA,EAAQ,MAAM,OAAA,CAAQ,MAAA;AAAA,MACtB,KAAA,EAAO,MAAM,OAAA,CAAQ,KAAA;AAAA,MACrB,OAAA,EAAS,MAAM,OAAA,CAAQ,OAAA;AAAA,MACvB,KAAA,EAAO,MAAM,OAAA,CAAQ;AAAA,KACvB;AAAA,IACA,QAAA,EAAU;AAAA,MACR,SAAS,KAAA,CAAM,eAAA;AAAA,MACf,SAAA,EAAW,yBAAA,CAA0B,KAAA,CAAM,SAAS,CAAA;AAAA,MACpD,cAAA,EAAgB,yBAAA,CAA0B,KAAA,CAAM,cAAc;AAAA,KAChE;AAAA,IACA,SAAA,EAAW,uBAAA,CAAsC,KAAA,CAAM,IAAI;AAAA,GAC7D;AACF;AAEO,SAAS,4BAGd,KAAA,EASuC;AACvC,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAA;AAAA,IACT,IAAA,EAAM,UAAA;AAAA,IACN,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB,KAAA,EAAO;AAAA,MACL,MAAA,EAAQ,MAAM,OAAA,CAAQ,MAAA;AAAA,MACtB,KAAA,EAAO,MAAM,OAAA,CAAQ,KAAA;AAAA,MACrB,OAAA,EAAS,MAAM,OAAA,CAAQ,OAAA;AAAA,MACvB,KAAA,EAAO,MAAM,OAAA,CAAQ;AAAA,KACvB;AAAA,IACA,QAAA,EAAU;AAAA,MACR,SAAS,KAAA,CAAM,eAAA;AAAA,MACf,SAAA,EAAW,yBAAA,CAA0B,KAAA,CAAM,SAAS,CAAA;AAAA,MACpD,cAAA,EAAgB,yBAAA,CAA0B,KAAA,CAAM,cAAc;AAAA,KAChE;AAAA,IACA,SAAA,EAAW;AAAA,MACT,IAAA,EAAM,kBAAA;AAAA,MACN,QAAA,EAAU,gBAAA;AAAA,MACV,SAAS,KAAA,CAAM;AAAA;AACjB,GACF;AACF;AAEA,SAAS,wBAIP,IAAA,EAC4C;AAC5C,EAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;AACzB,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,gBAAA;AAAA,MACN,QAAA,EAAU,gBAAA;AAAA,MACV,SAAS,IAAA,CAAK;AAAA,KAChB;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,IAAA,CAAK,OAAA,CAAQ,MAAA,KAAW,SAAY,kBAAA,GAAqB,gBAAA;AAAA,IAC/D,QAAA,EAAU,gBAAA;AAAA,IACV,SAAS,IAAA,CAAK;AAAA,GAChB;AACF;AAEO,SAAS,oBAAoB,OAAA,EAAoD;AACtF,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAA;AAAA,IACT,IAAA,EAAM,QAAA;AAAA,IACN,WAAW,OAAA,CAAQ,UAAA;AAAA,IACnB,KAAA,EAAO;AAAA,MACL,QAAQ,OAAA,CAAQ,WAAA;AAAA,MAChB,WAAW,OAAA,CAAQ,OAAA;AAAA,MACnB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,eAAe,OAAA,CAAQ;AAAA,KACzB;AAAA,IACA,SAAA,EAAW;AAAA,MACT,IAAA,EAAM,QAAA;AAAA,MACN,QAAA,EAAU,iBAAA;AAAA,MACV;AAAA;AACF,GACF;AACF;AAEO,SAAS,oBAAoB,OAAA,EAAoD;AACtF,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAA;AAAA,IACT,IAAA,EAAM,QAAA;AAAA,IACN,WAAW,OAAA,CAAQ,UAAA;AAAA,IACnB,KAAA,EAAO;AAAA,MACL,QAAQ,OAAA,CAAQ,WAAA;AAAA,MAChB,YAAY,OAAA,CAAQ,WAAA;AAAA,MACpB,YAAY,OAAA,CAAQ,WAAA;AAAA,MACpB,WAAW,OAAA,CAAQ,OAAA;AAAA,MACnB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,eAAe,OAAA,CAAQ;AAAA,KACzB;AAAA,IACA,SAAA,EAAW;AAAA,MACT,IAAA,EAAM,QAAA;AAAA,MACN,QAAA,EAAU,iBAAA;AAAA,MACV;AAAA;AACF,GACF;AACF;AAEO,SAAS,oBAAoB,KAAA,EAGX;AACvB,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAA;AAAA,IACT,IAAA,EAAM,QAAA;AAAA,IACN,SAAA,EAAW,qBAAA,CAAsB,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA;AAAA,IACzD,KAAA,EAAO;AAAA,MACL,MAAA,EAAQ,MAAM,OAAA,CAAQ,GAAA;AAAA,MACtB,KAAA,EAAO,yBAAA,CAA0B,KAAA,CAAM,KAAK,CAAA;AAAA,MAC5C,SAAA,EAAW,MAAM,OAAA,CAAQ;AAAA,KAC3B;AAAA,IACA,SAAA,EAAW;AAAA,MACT,IAAA,EAAM,QAAA;AAAA,MACN,QAAA,EAAU,iBAAA;AAAA,MACV,SAAS,KAAA,CAAM;AAAA;AACjB,GACF;AACF;AAEO,SAAS,oBAAoB,KAAA,EAGX;AACvB,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAA;AAAA,IACT,IAAA,EAAM,QAAA;AAAA,IACN,SAAA,EAAW,MAAM,OAAA,CAAQ,UAAA;AAAA,IACzB,KAAA,EAAO;AAAA,MACL,UAAA,EAAY,MAAM,OAAA,CAAQ,WAAA;AAAA,MAC1B,KAAA,EAAO,yBAAA,CAA0B,KAAA,CAAM,KAAK,CAAA;AAAA,MAC5C,SAAA,EAAW,MAAM,OAAA,CAAQ;AAAA,KAC3B;AAAA,IACA,SAAA,EAAW;AAAA,MACT,IAAA,EAAM,QAAA;AAAA,MACN,QAAA,EAAU,iBAAA;AAAA,MACV,SAAS,KAAA,CAAM;AAAA;AACjB,GACF;AACF;AAEO,SAAS,iBAAiB,KAAA,EAOX;AACpB,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAA;AAAA,IACT,IAAA,EAAM,KAAA;AAAA,IACN,cAAc,KAAA,CAAM,YAAA;AAAA,IACpB,KAAA,EAAO;AAAA,MACL,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,QAAQ,KAAA,CAAM,eAAA;AAAA,MACd,KAAA,EAAO,uBAAA,CAAwB,KAAA,CAAM,KAAK;AAAA,KAC5C;AAAA,IACA,SAAA,EAAW;AAAA,MACT,IAAA,EAAM,KAAA,CAAM,QAAA,KAAa,cAAA,GAAiB,UAAA,GAAa,SAAA;AAAA,MACvD,UAAU,KAAA,CAAM,QAAA;AAAA,MAChB,SAAS,KAAA,CAAM;AAAA;AACjB,GACF;AACF;AAEO,SAAS,sBAAsB,KAAA,EAAuC;AAC3E,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAA;AAAA,IACT,IAAA,EAAM,OAAA;AAAA,IACN,KAAA,EAAO;AAAA,MACL;AAAA,KACF;AAAA,IACA,SAAA,EAAW;AAAA,MACT,IAAA,EAAM,WAAA;AAAA,MACN,QAAA,EAAU,gBAAA;AAAA,MACV,OAAA,EAAS;AAAA,QACP;AAAA;AACF;AACF,GACF;AACF;AAEO,SAAS,oBAAA,CACd,QACA,GAAA,EACM;AACN,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA;AAAA,EACF;AACA,EAAA,IAAI,CAAC,MAAA,IAAW,OAAO,WAAW,QAAA,IAAY,OAAO,WAAW,UAAA,EAAa;AAC3E,IAAA;AAAA,EACF;AACA,EAAA,MAAA,CAAO,cAAA,CAAe,QAAQ,oBAAA,EAAsB;AAAA,IAClD,KAAA,EAAO,GAAA;AAAA,IACP,UAAA,EAAY,KAAA;AAAA,IACZ,YAAA,EAAc,IAAA;AAAA,IACd,QAAA,EAAU;AAAA,GACX,CAAA;AACH;AAEO,SAAS,kBACd,KAAA,EAC4B;AAC5B,EAAA,IAAI,CAAC,KAAA,IAAU,OAAO,UAAU,QAAA,IAAY,OAAO,UAAU,UAAA,EAAa;AACxE,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAS,KAAA,CAAkC,oBAAoB,CAAA,IAAyC,IAAA;AAC1G;;;ACjgBA,IAAM,+BAAA,GAAkC;AAAA,EACtC,gBAAA;AAAA,EACA,eAAA;AAAA,EACA,uBAAA;AAAA,EACA,sBAAA;AAAA,EACA,eAAA;AAAA,EACA,cAAA;AAAA,EACA,sBAAA;AAAA,EACA,qBAAA;AAAA,EACA,oCAAA;AAAA,EACA,kCAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAA;AAoCA,SAAS,6BAA6B,KAAA,EAAgD;AACpF,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,IAAA,GAAO,OAAA,CAAQ,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA;AACvC,EAAA,IAAI,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC7B,IAAA,IAAA,GAAO,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,EACrB;AAEA,EAAA,IAAI,YAAA;AACJ,EAAA,IAAI,QAAA,GAAW,IAAA;AACf,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,KAAA,CAAM,oBAAoB,CAAA;AACpD,EAAA,IAAI,YAAA,EAAc;AAChB,IAAA,YAAA,GAAe,YAAA,CAAa,CAAC,CAAA,CAAE,IAAA,EAAK,IAAK,MAAA;AACzC,IAAA,QAAA,GAAW,YAAA,CAAa,CAAC,CAAA,CAAE,IAAA,EAAK;AAAA,EAClC;AAEA,EAAA,MAAM,aAAA,GAAgB,QAAA,CAAS,KAAA,CAAM,oBAAoB,CAAA;AACzD,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,WAAW,aAAA,CAAc,CAAC,CAAA,CAAE,OAAA,CAAQ,cAAc,EAAE,CAAA;AAC1D,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,aAAA,CAAc,CAAC,CAAC,CAAA;AACpC,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,aAAA,CAAc,CAAC,CAAC,CAAA;AACtC,EAAA,IAAI,CAAC,OAAO,QAAA,CAAS,IAAI,KAAK,CAAC,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,EAAG;AACtD,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAA,CAAS,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA;AAClD,EAAA,MAAM,WAAW,cAAA,CAAe,KAAA,CAAM,GAAG,CAAA,CAAE,EAAA,CAAG,EAAE,CAAA,IAAK,QAAA;AACrD,EAAA,OAAO;AAAA,IACL,QAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA,EAAO,OAAA;AAAA,IACP;AAAA,GACF;AACF;AAEA,SAAS,yBAAA,GAA6D;AACpE,EAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,EAAM,CAAE,KAAA;AAC1B,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,MAAM,MAAA,GAAS,KAAA,CACZ,KAAA,CAAM,IAAI,EACV,KAAA,CAAM,CAAC,CAAA,CACP,GAAA,CAAI,WAAS,KAAA,CAAM,IAAA,EAAM,CAAA,CACzB,OAAO,OAAO,CAAA;AAEjB,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,IAAI,gCAAgC,IAAA,CAAK,CAAA,OAAA,KAAW,MAAM,QAAA,CAAS,OAAO,CAAC,CAAA,EAAG;AAC5E,MAAA;AAAA,IACF;AACA,IAAA,MAAM,QAAA,GAAW,6BAA6B,KAAK,CAAA;AACnD,IAAA,IAAI,UAAU,OAAO,QAAA;AAAA,EACvB;AAEA,EAAA,MAAM,QAAA,GAAW,OAAO,IAAA,CAAK,CAAA,KAAA,KAAS,CAAC,KAAA,CAAM,QAAA,CAAS,2BAA2B,CAAC,CAAA;AAClF,EAAA,OAAO,QAAA,GAAW,4BAAA,CAA6B,QAAQ,CAAA,GAAI,IAAA;AAC7D;AAEA,SAAS,wBAAwB,KAAA,EAAoC;AACnE,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,YAAA,IAAgB,SAAA;AACpD,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,OAAA,EAAS,KAAA,GAAQ,OAAA,GAAU,IAAA;AACtD,EAAA,MAAM,MAAA,GAAS,CAAA,mBAAA,EAAsB,KAAA,CAAM,SAAA,CAAU,aAAa,CAAA,CAAA,EAAI,KAAA,CAAM,QAAQ,IAAI,MAAM,CAAA,CAAA,EAAI,KAAA,CAAM,UAAU,MAAM,YAAY,CAAA,CAAA;AACpI,EAAA,OAAA,CAAQ,IAAA,CAAK,QAAQ,KAAK,CAAA;AAC5B;AAEO,SAAS,qBAAqB,MAAA,EAA6D;AAChG,EAAA,OAAO,MAAA,EAAQ,iBAAgB,IAAK,IAAA;AACtC;AAEO,SAAS,wBAAA,CACd,QACA,eAAA,EAC0B;AAC1B,EAAA,IAAI,iBAAiB,eAAA,IAAmB,MAAA;AAExC,EAAA,OAAO;AAAA,IACL,QAAQ,QAAA,EAAU;AAChB,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,cAAA,GAAiB,QAAA;AACjB,QAAA,OAAO,QAAA;AAAA,MACT;AACA,MAAA,IAAI,mBAAmB,MAAA,EAAW;AAChC,QAAA,OAAO,cAAA;AAAA,MACT;AACA,MAAA,MAAM,gBAAA,GAAmB,qBAAqB,MAAM,CAAA;AACpD,MAAA,IAAI,gBAAA,EAAkB;AACpB,QAAA,cAAA,GAAiB,gBAAA;AAAA,MACnB;AACA,MAAA,OAAO,gBAAA;AAAA,IACT;AAAA,GACF;AACF;AAEO,SAAS,kBACd,YAAA,EAC+B;AAC/B,EAAA,MAAM,cAAc,YAAA,EAAc,YAAA;AAClC,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,SACJ,OAAO,WAAA,KAAgB,YAAY,WAAA,CAAY,MAAA,GAAS,YAAY,MAAA,GAAS,uBAAA;AAE/E,EAAA,MAAM,IAAA,GAAO,CAAC,KAAA,KAAiC;AAC7C,IAAA,IAAI;AACF,MAAA,MAAA,CAAO,KAAK,CAAA;AAAA,IACd,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,IAAA,CAAK,oCAAoC,KAAK,CAAA;AAAA,IACxD;AAAA,EACF,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,eAAA,EAAiB,yBAAA;AAAA,IACjB,cAAA,CACE,OAAA,EACA,MAAA,EACA,UAAA,EACA,QAAA,EACA;AACA,MAAA,IAAA,CAAK;AAAA,QACH,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,QAClC,UAAA;AAAA,QACA,WAAW,OAAA,CAAQ,SAAA;AAAA,QACnB,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,cAAc,OAAA,CAAQ,YAAA;AAAA,QACtB,KAAK,OAAA,CAAQ,GAAA;AAAA,QACb,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,KAAK,OAAA,CAAQ,GAAA;AAAA,QACb,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,QAAA;AAAA,QACA,OAAA,EAAS;AAAA,UACP,QAAQ,MAAA,CAAO,MAAA;AAAA,UACf,OAAO,MAAA,CAAO,KAAA;AAAA,UACd,YAAA,EAAc,OAAO,YAAA,IAAgB,IAAA;AAAA,UACrC,KAAA,EAAO,OAAO,KAAA,IAAS,IAAA;AAAA,UACvB,MAAM,MAAA,CAAO,IAAA;AAAA,UACb,KAAK,MAAA,CAAO;AAAA;AACd,OACD,CAAA;AAAA,IACH,CAAA;AAAA,IACA,cAAA,CACE,OAAA,EACA,KAAA,EACA,UAAA,EACA,QAAA,EACA;AACA,MAAA,IAAA,CAAK;AAAA,QACH,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,QAClC,UAAA;AAAA,QACA,WAAW,OAAA,CAAQ,SAAA;AAAA,QACnB,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,cAAc,OAAA,CAAQ,YAAA;AAAA,QACtB,KAAK,OAAA,CAAQ,GAAA;AAAA,QACb,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,KAAK,OAAA,CAAQ,GAAA;AAAA,QACb,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,QAAA;AAAA,QACA,WAAA,EAAa;AAAA,OACd,CAAA;AAAA,IACH;AAAA,GACF;AACF;AAEA,eAAsB,qBAAA,CACpB,MAAA,EACA,OAAA,EACA,MAAA,EACA,gBAAA,EAC0B;AAC1B,EAAA,MAAM,QAAA,GAAW,MAAA,GAAU,gBAAA,IAAoB,MAAA,CAAO,iBAAgB,GAAK,IAAA;AAC3E,EAAA,MAAM,SAAA,GAAY,MAAA,GAAS,IAAA,CAAK,GAAA,EAAI,GAAI,CAAA;AACxC,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,MAAM,MAAA,EAAO;AAC5B,IAAA,oBAAA,CAAqB,MAAA,EAAQ,QAAQ,GAAG,CAAA;AACxC,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAA,CAAO,eAAe,OAAA,EAAS,MAAA,EAAQ,KAAK,GAAA,EAAI,GAAI,WAAW,QAAQ,CAAA;AAAA,IACzE;AACA,IAAA,OAAO,MAAA;AAAA,EACT,SAAS,KAAA,EAAO;AACd,IAAA,oBAAA,CAAqB,KAAA,EAAO,QAAQ,GAAG,CAAA;AACvC,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAA,CAAO,eAAe,OAAA,EAAS,KAAA,EAAO,KAAK,GAAA,EAAI,GAAI,WAAW,QAAQ,CAAA;AAAA,IACxE;AACA,IAAA,MAAM,KAAA;AAAA,EACR;AACF;;;ACzPA,SAAS,sBAAsB,KAAA,EAA+C;AAC5E,EAAA,MAAM,UAAA,GAAa,OAAO,IAAA,EAAK;AAC/B,EAAA,OAAO,aAAa,UAAA,GAAa,MAAA;AACnC;AAEO,SAAS,oBAAoB,KAAA,EAA4C;AAC9E,EAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,EAAU;AACvC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,SAAA,GAAY,KAAA;AAClB,EAAA,OAAO,OAAA,CAAQ,UAAU,IAAA,IAAQ,KAAA,CAAM,QAAQ,SAAA,CAAU,IAAA,CAAK,UAAU,CAAC,CAAA;AAC3E;AAEO,SAAS,iCAAA,CACd,MAAA,EACA,OAAA,GAAoD,EAAC,EAC7C;AACR,EAAA,MAAM,iBAAA,GAAoB,qBAAA,CAAsB,MAAA,CAAO,IAAA,CAAK,SAAS,CAAA;AACrE,EAAA,IAAI,iBAAA,EAAmB;AACrB,IAAA,OAAO,iBAAA;AAAA,EACT;AAEA,EAAA,MAAM,aAAa,qBAAA,CAAsB,MAAA,CAAO,IAAA,CAAK,MAAA,IAAU,QAAQ,cAAc,CAAA;AACrF,EAAA,MAAM,YAAY,qBAAA,CAAsB,MAAA,CAAO,IAAA,CAAK,KAAA,IAAS,QAAQ,aAAa,CAAA;AAElF,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO,UAAA,GAAa,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,GAAK,SAAA;AACrD;;;ACuPA,IAAM,eAAA,GAAkB,GAAA;AACxB,IAAM,iBAAA,GAAoB,8BAAA;AAC1B,IAAM,2BAAA,GAA8B,yBAAA;AACpC,IAAMC,SAAAA,GAAW,oBAAA;AAwCjB,SAAS,aAAgB,QAAA,EAAqD;AAC5E,EAAA,MAAM,MAAA,GAA0B;AAAA,IAC9B,IAAA,EAAM,SAAS,IAAA,IAAQ,IAAA;AAAA,IACvB,KAAA,EAAO,IAAA;AAAA,IACP,YAAA,EAAc,SAAS,YAAA,IAAgB,IAAA;AAAA,IACvC,QAAQ,QAAA,CAAS,MAAA;AAAA,IACjB,UAAA,EAAY,SAAS,UAAA,IAAc,IAAA;AAAA,IACnC,KAAK,QAAA,CAAS;AAAA,GAChB;AACA,EAAA,IAAI,QAAA,CAAS,UAAU,MAAA,EAAW;AAChC,IAAA,MAAA,CAAO,QAAQ,QAAA,CAAS,KAAA;AAAA,EAC1B;AACA,EAAA,OAAO,MAAA;AACT;AAOA,IAAM,8BAAA,GAA8C;AAAA,EAClD,OAAA,EAAS,CAAA;AAAA,EACT,WAAA,EAAa,GAAA;AAAA,EACb,UAAA,EAAY,GAAA;AAAA,EACZ,OAAA,EAAS,aAAA;AAAA,EACT,MAAA,EAAQ;AACV,CAAA;AAEA,SAAS,qBAAA,CACP,QACA,eAAA,EACM;AACN,EAAA,MAAA,CAAO,cAAA,CAAe,QAAQ,2BAAA,EAA6B;AAAA,IACzD,KAAA,EAAO,eAAA;AAAA,IACP,UAAA,EAAY,KAAA;AAAA,IACZ,YAAA,EAAc,IAAA;AAAA,IACd,QAAA,EAAU;AAAA,GACX,CAAA;AACH;AAEA,SAAS,sBACP,YAAA,EACuB;AAEvB,EAAA,OAAO,CAAI,UAAoC,OAAA,KAAsD;AACnG,IAAA,MAAM,MAAA,GAAS,aAAa,QAAQ,CAAA;AACpC,IAAA,IAAI,QAAA,CAAS,KAAA,IAAS,IAAA,IAAQ,QAAA,CAAS,gBAAgB,IAAA,EAAM;AAC3D,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,MAAM,eAAA,GAAkB,oBAAA;AAAA,MACtB;AAAA,QACE,GAAG,MAAA;AAAA,QACH,KAAA,EAAO,QAAA,CAAS,KAAA,IAAS,QAAA,CAAS,cAAc,OAAA,IAAW;AAAA,OAC7D;AAAA,MACA;AAAA,KACF;AACA,IAAA,MAAA,CAAO,KAAA,GAAQ,iBAAA,CAAkB,QAAA,EAAU,MAAA,EAAQ,eAAe,CAAA;AAClE,IAAA,qBAAA,CAAsB,QAAQ,eAAe,CAAA;AAC7C,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AACF;AAEA,eAAe,uBAAA,CACb,cACA,MAAA,EAC0B;AAC1B,EAAA,IAAI,CAAC,cAAc,UAAA,EAAY;AAC7B,IAAA,OAAO,MAAA,EAAO;AAAA,EAChB;AAEA,EAAA,IAAI,mBAAA;AACJ,EAAA,IAAI,eAAA,GAA4C,IAAA;AAChD,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,SAAA;AAAA,MACX;AAAA,QACE,GAAG,8BAAA;AAAA,QACH,aAAa,CAAA,KAAA,KACX,KAAA,KAAU,eAAA,IAAmB,oBAAA,CAAqB,KAAK,CAAA,CAAE;AAAA,OAC7D;AAAA,MACA,YAAY;AACZ,QAAA,MAAM,MAAA,GAAS,MAAM,MAAA,EAAO;AAC5B,QAAA,IAAI,MAAA,CAAO,OAAO,SAAA,EAAW;AAC3B,UAAA,mBAAA,GAAsB,MAAA;AACtB,UAAA,eAAA,GAAkB,MAAA,CAAO,KAAA;AACzB,UAAA,MAAM,eAAA;AAAA,QACR;AACA,QAAA,OAAO,MAAA;AAAA,MACP;AAAA,KACF;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,mBAAA,IAAuB,UAAU,eAAA,EAAiB;AACpD,MAAA,OAAO,mBAAA;AAAA,IACT;AACA,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AAEA,SAASD,WAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAA,CAAQ,KAAK,CAAA,IAAK,OAAO,UAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAC5E;AAEA,SAASkB,wBAAuB,MAAA,EAAuC;AACrE,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,MAAM,IAAA,EAAK,CAAE,SAAS,CAAA,EAAG;AACxD,MAAA,OAAO,MAAM,IAAA,EAAK;AAAA,IACpB;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAASC,+BAA8B,GAAA,EAA8C;AACnF,EAAA,IAAI,CAACnB,UAAAA,CAAS,GAAG,CAAA,EAAG,OAAO,IAAA;AAC3B,EAAA,OAAOA,UAAAA,CAAS,GAAA,CAAI,KAAK,CAAA,GAAI,IAAI,KAAA,GAAQ,GAAA;AAC3C;AAEA,SAAS,6BAAA,CAA8B,SAAyC,OAAA,EAAiC;AAC/G,EAAA,IAAI,CAAC,OAAA,IAAW,EAAE,SAAA,IAAa,OAAA,CAAA,EAAU;AACvC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,UAAU,OAAA,CAAQ,OAAA;AACxB,EAAA,IAAI,WAAW,IAAA,EAAM;AACnB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,YAAY,QAAA,IAAY,OAAA,CAAQ,MAAK,KAAM,OAAA,CAAQ,MAAK,EAAG;AACpE,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,iBAAA,CACP,QAAA,EACA,MAAA,EACA,UAAA,EACmB;AACnB,EAAA,MAAM,YAAYA,UAAAA,CAAS,QAAA,CAAS,GAAG,CAAA,GAAI,SAAS,GAAA,GAAM,IAAA;AAC1D,EAAA,MAAM,OAAA,GAAUmB,8BAAAA,CAA8B,QAAA,CAAS,GAAG,CAAA;AAC1D,EAAA,MAAM,OAAA,GACJD,oBAAAA;AAAA,IACE,QAAA,CAAS,KAAA;AAAA,IACT,OAAA,EAAS,OAAA;AAAA,IACT,OAAA,EAAS,KAAA;AAAA,IACT,OAAA,EAAS,OAAA;AAAA,IACT,SAAS,YAAA,EAAc,OAAA;AAAA,IACvB,UAAA,CAAW;AAAA,OACR,UAAA,CAAW,OAAA;AAClB,EAAA,MAAM,aACJA,oBAAAA,CAAoB,QAAA,CAAS,UAAA,EAAY,SAAA,EAAW,UAAU,CAAA,IAAK,IAAA;AACrE,EAAA,MAAM,OACJA,oBAAAA,CAAoB,OAAA,EAAS,MAAM,QAAA,CAAS,YAAA,EAAc,IAAI,CAAA,IAAK,IAAA;AACrE,EAAA,MAAM,IAAA,GACJA,oBAAAA,CAAoB,OAAA,EAAS,IAAI,KACjC,UAAA,CAAW,IAAA;AACb,EAAA,MAAM,UACJ,6BAAA,CAA8B,OAAA,EAAS,OAAO,CAAA,IAC9C,QAAA,CAAS,cAAc,KAAA,IACvB,IAAA;AAEF,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,IAAA;AAAA,IACA,YAAY,UAAA,CAAW,IAAA;AAAA,IACvB,WAAA,EAAa,QAAA,CAAS,YAAA,EAAc,IAAA,IAAQ,IAAA;AAAA,IAC5C,MAAM,UAAA,CAAW,IAAA;AAAA,IACjB,UAAU,UAAA,CAAW,QAAA;AAAA,IACrB,WAAW,UAAA,CAAW,SAAA;AAAA,IACtB,OAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,UAAA;AAAA,IACA,YAAY,UAAA,CAAW,UAAA;AAAA,IACvB,OAAO,UAAA,CAAW,KAAA;AAAA,IAClB,WAAW,UAAA,CAAW,SAAA;AAAA,IACtB,QAAA,EAAU,SAAS,YAAA,EAAc,QAAA;AAAA,IACjC,MAAA,EAAQ,SAAS,YAAA,EAAc,MAAA;AAAA,IAC/B,SAAA,EAAW,SAAS,YAAA,EAAc,SAAA;AAAA,IAClC,KAAA,EAAO,SAAS,YAAA,EAAc,KAAA;AAAA,IAC9B,KAAK,MAAA,CAAO;AAAA,GACd;AACF;AAGA,SAAS,eAAuB,QAAA,EAA4E;AAC1G,EAAA,MAAM,UAAU,QAAA,CAAS,IAAA;AACzB,EAAA,MAAM,UAAA,GACJ,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,GAAK,OAAA,CAAQ,MAAA,GAAS,OAAA,CAAQ,CAAC,CAAA,GAAI,IAAA,GAAQ,OAAA,IAAW,IAAA;AAC7E,EAAA,OAAO;AAAA,IACL,GAAG,QAAA;AAAA,IACH,IAAA,EAAM;AAAA,GACR;AACF;AAEA,SAAS,gBACJ,OAAA,EACY;AACf,EAAA,OAAO,OAAA,CAAQ,MAAA,CAAsB,CAAC,GAAA,EAAK,IAAA,KAAS;AAClD,IAAA,IAAI,CAAC,MAAM,OAAO,GAAA;AAClB,IAAA,MAAM,SAAS,EAAE,GAAI,OAAO,EAAC,EAAI,GAAG,IAAA,EAAK;AACzC,IAAA,IAAI,GAAA,EAAK,OAAA,IAAW,IAAA,CAAK,OAAA,EAAS;AAChC,MAAA,MAAA,CAAO,OAAA,GAAU;AAAA,QACf,GAAI,GAAA,EAAK,OAAA,IAAW,EAAC;AAAA,QACrB,GAAI,IAAA,CAAK,OAAA,IAAW;AAAC,OACvB;AAAA,IACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT,GAAG,MAAS,CAAA;AACd;AAEA,SAAS,mBAAmB,KAAA,EAAkC;AAC5D,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,wBAAwB,MAAA,EAAuC;AACtE,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,0BAAA,CAA2B,SAAiB,WAAA,EAA4B;AAC/E,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,0BACJ,WAAA,EAAa,WAAA,EAAY,CAAE,QAAA,CAAS,kBAAkB,CAAA,IAAK,KAAA;AAC7D,EAAA,MAAM,SAAA,GACJ,2BAA2B,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,IAAK,OAAA,CAAQ,WAAW,GAAG,CAAA;AAE9E,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,EAC3B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,OAAA;AAAA,EACT;AACF;AAEA,SAAS,qBAAqB,KAAA,EAA4C;AACxE,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAA,GAAS,IAAI,eAAA,EAAgB;AACnC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM;AACzC,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,IAAI,IAAA,KAAS,MAAA,IAAa,IAAA,KAAS,IAAA,EAAM;AACvC,UAAA,MAAA,CAAO,MAAA,CAAO,GAAA,EAAK,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,QACjC;AAAA,MACF;AACA,MAAA;AAAA,IACF;AAEA,IAAA,MAAA,CAAO,GAAA,CAAI,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EAC/B;AAEA,EAAA,MAAM,OAAA,GAAU,OAAO,QAAA,EAAS;AAChC,EAAA,OAAO,OAAA,GAAU,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,GAAK,EAAA;AACnC;AAEA,SAAS,4BAA4B,OAAA,EAA4D;AAC/F,EAAA,IAAI,YAAY,MAAA,EAAW;AACzB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,OAAO,CAAC,GAAG,OAAO,CAAA;AACpB;AAEA,SAAS,mBAAA,CAKP,QAAA,EAKA,cAAA,GAA2C,eAAA,EAC3C,QACA,eAAA,EACqC;AACrC,EAAA,IAAI,eAAA,GAAiD,cAAA,KAAmB,IAAA,GAAO,MAAA,GAAY,cAAA;AAC3F,EAAA,IAAI,eAAA;AACJ,EAAA,IAAI,OAAA,GAAgD,IAAA;AACpD,EAAA,MAAM,aAAA,GAAgB,wBAAA,CAAyB,MAAA,EAAQ,eAAe,CAAA;AAEtE,EAAA,MAAM,GAAA,GAAM,CACV,OAAA,EACA,OAAA,EACA,QAAA,KACG;AACH,IAAA,MAAM,iBAAiB,OAAA,IAAW,eAAA;AAClC,IAAA,MAAM,iBAAiB,OAAA,IAAW,eAAA;AAClC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAA,GAAU,QAAA;AAAA,QACR,4BAA4B,cAAc,CAAA;AAAA,QAC1C,cAAA;AAAA,QACA,aAAA,CAAc,QAAQ,QAAQ;AAAA,OAChC;AAAA,IACF;AACA,IAAA,OAAO,OAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,aAAA,GAAqD;AAAA,IACzD,MAAA,CAAO,SAA6B,OAAA,EAAoC;AACtE,MAAA,eAAA,GAAkB,OAAA;AAClB,MAAA,eAAA,GAAkB,OAAA,IAAW,eAAA;AAC7B,MAAA,OAAO,GAAA,CAAI,OAAA,EAAS,OAAA,EAAS,oBAAA,CAAqB,MAAM,CAAC,CAAA;AAAA,IAC3D,CAAA;AAAA,IACA,SAAA,CAAU,SAA6B,OAAA,EAAoC;AACzE,MAAA,OAAO,aAAA,CAAc,MAAA,CAAO,OAAA,EAAS,OAAO,CAAA;AAAA,IAC9C,CAAA;AAAA,IACA,MAAA,CAAO,SAA6B,OAAA,EAAoC;AACtE,MAAA,eAAA,GAAkB,OAAA;AAClB,MAAA,eAAA,GAAkB,OAAA,IAAW,eAAA;AAC7B,MAAA,OAAO,GAAA,CAAI,SAAS,OAAA,EAAS,oBAAA,CAAqB,MAAM,CAAC,CAAA,CAAE,KAAK,cAAc,CAAA;AAAA,IAChF,CAAA;AAAA,IACA,WAAA,CAAY,SAA6B,OAAA,EAAoC;AAC3E,MAAA,OAAO,aAAA,CAAc,MAAA,CAAO,OAAA,EAAS,OAAO,CAAA;AAAA,IAC9C,CAAA;AAAA,IACA,IAAA,CAAK,aAAa,UAAA,EAAY;AAC5B,MAAA,OAAO,IAAI,eAAA,EAAiB,eAAe,CAAA,CAAE,IAAA,CAAK,aAAa,UAAU,CAAA;AAAA,IAC3E,CAAA;AAAA,IACA,MAAM,UAAA,EAAY;AAChB,MAAA,OAAO,GAAA,CAAI,eAAA,EAAiB,eAAe,CAAA,CAAE,MAAM,UAAU,CAAA;AAAA,IAC/D,CAAA;AAAA,IACA,QAAQ,SAAA,EAAW;AACjB,MAAA,OAAO,GAAA,CAAI,eAAA,EAAiB,eAAe,CAAA,CAAE,QAAQ,SAAS,CAAA;AAAA,IAChE;AAAA,GACF;AAEA,EAAA,OAAO,aAAA;AACT;AAkKA,SAAS,cAAc,KAAA,EAA8C;AACnE,EAAA,MAAM,SAAA,GAAY,MAAM,UAAA,CAAW,IAAA;AAAA,IACjC,CAAA,SAAA,KACE,UAAU,QAAA,KAAa,IAAA,KACtB,UAAU,MAAA,KAAW,aAAA,IAAiB,UAAU,MAAA,KAAW,IAAA;AAAA,GAChE;AACA,EAAA,OAAO,SAAA,EAAW,OAAO,QAAA,EAAS;AACpC;AAEA,SAASE,sBAAqB,KAAA,EAA0E;AACtG,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA,EACvB;AACA,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAEA,SAAS,cAAc,IAAA,EAAuC;AAC5D,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,IAAA,EAAK,CAAE,WAAA,EAAY;AAC3C,EAAA,IAAI,CAAC,iBAAA,CAAkB,IAAA,CAAK,UAAU,CAAA,EAAG;AACvC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,EAC/C;AACA,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,uBAAuB,KAAA,EAAuB;AACrD,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,EAAM,IAAI,CAAA;AACjC;AAEA,SAAS,aAAa,KAAA,EAAqC;AACzD,EAAA,IAAI,KAAA,KAAU,MAAM,OAAO,MAAA;AAC3B,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,MAAA,CAAO,SAAS,KAAK,CAAA,GAAI,MAAA,CAAO,KAAK,CAAA,GAAI,MAAA;AAC/E,EAAA,IAAI,OAAO,KAAA,KAAU,SAAA,EAAW,OAAO,QAAQ,MAAA,GAAS,OAAA;AACxD,EAAA,OAAO,CAAA,CAAA,EAAI,sBAAA,CAAuB,KAAK,CAAC,CAAA,CAAA,CAAA;AAC1C;AAEA,SAAS,QAAA,CAAS,YAAoB,IAAA,EAAwC;AAC5E,EAAA,IAAI,CAAC,MAAM,OAAO,UAAA;AAClB,EAAA,OAAO,CAAA,EAAG,UAAU,CAAA,EAAA,EAAK,aAAA,CAAc,IAAI,CAAC,CAAA,CAAA;AAC9C;AAEA,SAAS,yBAAyB,OAAA,EAAoC;AACpE,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1B,IAAA,OAAO,OAAA,CAAQ,IAAI,CAAA,MAAA,KAAU,sBAAA,CAAuB,MAAM,CAAC,CAAA,CAAE,KAAK,IAAI,CAAA;AAAA,EACxE;AACA,EAAA,OAAO,6BAA6B,OAAO,CAAA;AAC7C;AAMA,SAAS,uBAAuB,KAAA,EAA+C;AAC7E,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AAErB,EAAA,IAAI,CAAC,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,EAAG;AAC5B,IAAA,OAAO;AAAA,MACL,eAAA,EAAiB,QAAQ,WAAA;AAAY,KACvC;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,GAAQ,EAAA;AACZ,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,MAAA,GAAS,KAAA;AACb,EAAA,OAAO,KAAA,GAAQ,QAAQ,MAAA,EAAQ;AAC7B,IAAA,MAAM,IAAA,GAAO,QAAQ,KAAK,CAAA;AAC1B,IAAA,MAAM,IAAA,GAAO,QAAQ,CAAA,GAAI,OAAA,CAAQ,SAAS,OAAA,CAAQ,KAAA,GAAQ,CAAC,CAAA,GAAI,EAAA;AAC/D,IAAA,IAAI,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,EAAK;AAChC,MAAA,KAAA,IAAS,GAAA;AACT,MAAA,KAAA,IAAS,CAAA;AACT,MAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,MAAA,GAAS,IAAA;AACT,MAAA,KAAA,IAAS,CAAA;AACT,MAAA;AAAA,IACF;AACA,IAAA,KAAA,IAAS,IAAA;AACT,IAAA,KAAA,IAAS,CAAA;AAAA,EACX;AAEA,EAAA,IAAI,CAAC,MAAA,IAAU,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAA,CAAE,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA,IAAK,CAAC,KAAA,CAAM,MAAK,EAAG;AACtE,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,eAAA,EAAiB;AAAA,GACnB;AACF;AAEA,SAAS,wBAAwB,SAAA,EAAqD;AACpF,EAAA,MAAM,OAAA,GAAU,UAAU,IAAA,EAAK;AAC/B,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,OAAA,CAAQ,MAAA,EAAQ,SAAS,CAAA,EAAG;AACtD,IAAA,MAAM,IAAA,GAAO,QAAQ,KAAK,CAAA;AAC1B,IAAA,MAAM,IAAA,GAAO,QAAQ,CAAA,GAAI,OAAA,CAAQ,SAAS,OAAA,CAAQ,KAAA,GAAQ,CAAC,CAAA,GAAI,EAAA;AAC/D,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,IAAI,QAAA,IAAY,SAAS,GAAA,EAAK;AAC5B,QAAA,KAAA,IAAS,CAAA;AACT,QAAA;AAAA,MACF;AACA,MAAA,QAAA,GAAW,CAAC,QAAA;AACZ,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,KAAS,GAAA,IAAO,CAAC,QAAA,EAAU;AAC7B,MAAA,MAAM,gBAAgB,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,KAAK,EAAE,IAAA,EAAK;AACnD,MAAA,MAAM,eAAe,OAAA,CAAQ,KAAA,CAAM,KAAA,GAAQ,CAAC,EAAE,IAAA,EAAK;AACnD,MAAA,IAAI,CAAC,aAAA,IAAiB,CAAC,YAAA,EAAc;AACnC,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,OAAO,EAAE,aAAA,EAAc;AAAA,IACzB;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,uBAAA,CAAwB,WAAmB,MAAA,EAAoC;AACtF,EAAA,IAAI,CAAC,QAAQ,OAAO,SAAA;AACpB,EAAA,MAAM,gBAAA,GAAmB,OAAO,IAAA,EAAK;AACrC,EAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,IAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,EAC5D;AACA,EAAA,MAAM,mBAAA,GAAsB,UAAU,IAAA,EAAK;AAC3C,EAAA,MAAM,YAAA,GAAe,uBAAuB,gBAAgB,CAAA;AAC5D,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,EAC5D;AACA,EAAA,MAAM,SAAA,GAAY,wBAAwB,mBAAmB,CAAA;AAC7D,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,MAAM,iBAAA,GAAoB,sBAAA,CAAuB,SAAA,CAAU,aAAa,CAAA;AACxE,IAAA,MAAM,UAAA,GAAa,iBAAA,GACf,iBAAA,CAAkB,eAAA,KAAoB,YAAA,CAAa,kBACnD,mBAAA,CAAoB,UAAA,CAAW,CAAA,EAAG,gBAAgB,CAAA,CAAA,CAAG,CAAA;AACzD,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,OAAO,mBAAA;AAAA,IACT;AACA,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,eAAA,EAAkB,gBAAgB,CAAA,yCAAA,EAA4C,mBAAmB,CAAA,CAAA;AAAA,KACnG;AAAA,EACF;AACA,EAAA,OAAO,CAAA,EAAG,gBAAgB,CAAA,CAAA,EAAI,mBAAmB,CAAA,CAAA;AACnD;AAEA,SAAS,qBAAqB,SAAA,EAAkD;AAC9E,EAAA,IAAI,CAAC,SAAA,CAAU,MAAA,EAAQ,OAAO,IAAA;AAC9B,EAAA,MAAM,SAAS,QAAA,CAAS,wBAAA,CAAyB,UAAU,MAAM,CAAA,EAAG,UAAU,WAAW,CAAA;AACzF,EAAA,MAAM,QAAQ,SAAA,CAAU,KAAA;AACxB,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,EAAA,EAAI,GAAA;AAAA,IACJ,GAAA,EAAK,IAAA;AAAA,IACL,EAAA,EAAI,GAAA;AAAA,IACJ,GAAA,EAAK,IAAA;AAAA,IACL,EAAA,EAAI,GAAA;AAAA,IACJ,GAAA,EAAK,IAAA;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACT;AAEA,EAAA,QAAQ,UAAU,QAAA;AAAU,IAC1B,KAAK,IAAA;AAAA,IACL,KAAK,KAAA;AAAA,IACL,KAAK,IAAA;AAAA,IACL,KAAK,KAAA;AAAA,IACL,KAAK,IAAA;AAAA,IACL,KAAK,KAAA;AAAA,IACL,KAAK,MAAA;AAAA,IACL,KAAK,OAAA,EAAS;AACZ,MAAA,IAAI,MAAM,OAAA,CAAQ,KAAK,CAAA,IAAK,KAAA,KAAU,QAAW,OAAO,IAAA;AACxD,MAAA,MAAM,MAAM,QAAA,CAAS,YAAA,CAAa,KAAK,CAAA,EAAG,UAAU,UAAU,CAAA;AAC9D,MAAA,OAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,WAAA,CAAY,UAAU,QAAQ,CAAC,IAAI,GAAG,CAAA,CAAA;AAAA,IAC5D;AAAA,IACA,KAAK,IAAA,EAAM;AACT,MAAA,IAAI,KAAA,KAAU,IAAA,EAAM,OAAO,CAAA,EAAG,MAAM,CAAA,QAAA,CAAA;AACpC,MAAA,IAAI,KAAA,KAAU,IAAA,EAAM,OAAO,CAAA,EAAG,MAAM,CAAA,QAAA,CAAA;AACpC,MAAA,IAAI,KAAA,KAAU,KAAA,EAAO,OAAO,CAAA,EAAG,MAAM,CAAA,SAAA,CAAA;AACrC,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,IACA,KAAK,IAAA,EAAM;AACT,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,GAAG,OAAO,IAAA;AAClC,MAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,OAAA;AAC/B,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,GAAA,CAAI,CAAA,IAAA,KAAQ,QAAA,CAAS,aAAa,IAAI,CAAA,EAAG,SAAA,CAAU,UAAU,CAAC,CAAA;AACnF,MAAA,OAAO,GAAG,MAAM,CAAA,KAAA,EAAQ,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,IAC3C;AAAA,IACA;AACE,MAAA,OAAO,IAAA;AAAA;AAEb;AAEA,SAAS,sBAAsB,KAAA,EASb;AAChB,EAAA,MAAM,eAAyB,EAAC;AAChC,EAAA,KAAA,MAAW,SAAA,IAAa,MAAM,UAAA,EAAY;AACxC,IAAA,MAAM,MAAA,GAAS,qBAAqB,SAAS,CAAA;AAC7C,IAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AACpB,IAAA,YAAA,CAAa,KAAK,MAAM,CAAA;AAAA,EAC1B;AAEA,EAAA,IAAI,QAAQ,KAAA,CAAM,KAAA;AAClB,EAAA,IAAI,SAAS,KAAA,CAAM,MAAA;AACnB,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,CAAM,QAAA,KAAa,MAAA,EAAW;AACvD,IAAA,KAAA,GAAQ,KAAA,CAAM,QAAA;AAAA,EAChB;AACA,EAAA,IACE,MAAA,KAAW,MAAA,IACX,KAAA,CAAM,QAAA,KAAa,MAAA,IACnB,MAAM,WAAA,KAAgB,MAAA,IACtB,KAAA,CAAM,WAAA,GAAc,CAAA,EACpB;AACA,IAAA,MAAA,GAAA,CAAU,KAAA,CAAM,WAAA,GAAc,CAAA,IAAK,KAAA,CAAM,QAAA;AAAA,EAC3C;AAEA,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,CAAA,OAAA,EAAU,yBAAyB,KAAA,CAAM,OAAO,CAAC,CAAA,MAAA,EAAS,wBAAA,CAAyB,KAAA,CAAM,SAAS,CAAC,CAAA;AAAA,GACrG;AAEA,EAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AAC3B,IAAA,QAAA,CAAS,KAAK,CAAA,MAAA,EAAS,YAAA,CAAa,IAAA,CAAK,OAAO,CAAC,CAAA,CAAE,CAAA;AAAA,EACrD;AAEA,EAAA,IAAI,KAAA,CAAM,OAAO,KAAA,EAAO;AACtB,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,KAAA,CAAM,SAAA,KAAc,eAAe,MAAA,GAAS,KAAA;AACpE,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,wBAAA,CAAyB,KAAA,CAAM,MAAM,KAAK,CAAC,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,CAAA;AAAA,EACtF;AAEA,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,QAAA,CAAS,IAAA,CAAK,CAAA,MAAA,EAAS,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,KAAA,CAAM,KAAK,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,EACzD;AAEA,EAAA,IAAI,WAAW,MAAA,EAAW;AACxB,IAAA,QAAA,CAAS,IAAA,CAAK,CAAA,OAAA,EAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,KAAA,CAAM,MAAM,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,EAC3D;AAEA,EAAA,OAAO,CAAA,EAAG,QAAA,CAAS,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAC9B;AAEA,SAAS,mBAAmB,OAAA,EAAyB;AACnD,EAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,OAAA,EAAS,KAAK,CAAA;AACvC;AAEA,SAAS,iBAAiB,KAAA,EAA4C;AACpE,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,SAAA;AAChC,EAAA,IACE,KAAA,KAAU,IAAA,IACV,OAAO,KAAA,KAAU,QAAA,IACjB,OAAO,KAAA,KAAU,QAAA,IACjB,OAAO,KAAA,KAAU,SAAA,EACjB;AACA,IAAA,OAAO,aAAa,KAAK,CAAA;AAAA,EAC3B;AACA,EAAA,OAAO,IAAI,sBAAA,CAAuB,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAC,CAAA,QAAA,CAAA;AAC1D;AAEA,SAAS,0BAA0B,SAAA,EAA2C;AAC5E,EAAA,MAAM,KAAA,GAAQ,qBAAqB,SAAS,CAAA;AAC5C,EAAA,IAAI,OAAO,OAAO,KAAA;AAElB,EAAA,MAAM,YAAA,GAAe,kBAAA,CAAmB,IAAA,CAAK,SAAA,CAAU,SAAS,CAAC,CAAA;AACjE,EAAA,IAAI,CAAC,UAAU,MAAA,EAAQ;AACrB,IAAA,OAAO,kCAAkC,YAAY,CAAA,GAAA,CAAA;AAAA,EACvD;AAEA,EAAA,MAAM,SAAS,QAAA,CAAS,wBAAA,CAAyB,UAAU,MAAM,CAAA,EAAG,UAAU,WAAW,CAAA;AACzF,EAAA,MAAM,QAAQ,SAAA,CAAU,KAAA;AACxB,EAAA,MAAM,MAAM,QAAA,CAAS,gBAAA,CAAiB,KAAoC,CAAA,EAAG,UAAU,UAAU,CAAA;AAEjG,EAAA,QAAQ,UAAU,QAAA;AAAU,IAC1B,KAAK,UAAA;AACH,MAAA,OAAO,CAAA,EAAG,MAAM,CAAA,IAAA,EAAO,GAAG,CAAA,CAAA;AAAA,IAC5B,KAAK,aAAA;AACH,MAAA,OAAO,CAAA,EAAG,MAAM,CAAA,IAAA,EAAO,GAAG,CAAA,CAAA;AAAA,IAC5B,KAAK,KAAA;AACH,MAAA,OAAO,uCAAuC,YAAY,CAAA,GAAA,CAAA;AAAA,IAC5D,KAAK,IAAA;AACH,MAAA,OAAO,sCAAsC,YAAY,CAAA,GAAA,CAAA;AAAA,IAC3D;AACE,MAAA,OAAO,kCAAkC,YAAY,CAAA,GAAA,CAAA;AAAA;AAE3D;AAEA,SAAS,sBAAA,CACP,QAAA,EACA,KAAA,EACA,KAAA,EACA,MAAA,EACA;AACA,EAAA,IAAI,OAAO,KAAA,EAAO;AAChB,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,SAAA,KAAc,YAAA,GAAe,MAAA,GAAS,KAAA;AAC9D,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,wBAAA,CAAyB,KAAA,CAAM,KAAK,CAAC,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,CAAA;AAAA,EAChF;AACA,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,QAAA,CAAS,IAAA,CAAK,CAAA,MAAA,EAAS,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,KAAA,CAAM,KAAK,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,EACzD;AACA,EAAA,IAAI,WAAW,MAAA,EAAW;AACxB,IAAA,QAAA,CAAS,IAAA,CAAK,CAAA,OAAA,EAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,KAAA,CAAM,MAAM,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,EAC3D;AACF;AAEA,SAAS,sBAAsB,KAAA,EASpB;AACT,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,CAAA,OAAA,EAAU,yBAAyB,KAAA,CAAM,OAAO,CAAC,CAAA,MAAA,EAAS,wBAAA,CAAyB,KAAA,CAAM,SAAS,CAAC,CAAA;AAAA,GACrG;AACA,EAAA,IAAI,KAAA,CAAM,YAAY,MAAA,EAAQ;AAC5B,IAAA,MAAM,YAAA,GAAe,KAAA,CAAM,UAAA,CAAW,GAAA,CAAI,yBAAyB,CAAA;AACnE,IAAA,QAAA,CAAS,KAAK,CAAA,MAAA,EAAS,YAAA,CAAa,IAAA,CAAK,OAAO,CAAC,CAAA,CAAE,CAAA;AAAA,EACrD;AACA,EAAA,MAAM,UAAA,GAAa,kBAAkB,KAAK,CAAA;AAC1C,EAAA,sBAAA,CAAuB,UAAU,KAAA,CAAM,KAAA,EAAO,UAAA,CAAW,KAAA,EAAO,WAAW,MAAM,CAAA;AACjF,EAAA,OAAO,CAAA,EAAG,QAAA,CAAS,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAC9B;AAEA,SAAS,4BAA4B,SAAA,EAAuC;AAC1E,EAAA,IAAI,CAAC,SAAA,EAAW,IAAA,EAAK,EAAG;AACtB,IAAA,OAAO,qBAAA;AAAA,EACT;AACA,EAAA,OAAO,yBAAyB,SAAS,CAAA;AAC3C;AAEA,SAAS,oBAAoB,OAAA,EAAsC;AACjE,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,WAAW,IAC1C,OAAA,CAAQ,WAAA,GACR,CAAC,OAAA,CAAQ,WAAW,CAAA;AACxB,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,KAAA,MAAW,MAAA,IAAU,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,EAAG;AACrC,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,EAAG;AACtB,MAAA,IAAA,CAAK,IAAI,MAAM,CAAA;AACf,MAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AAAA,IACrB;AAAA,EACF;AAEA,EAAA,MAAM,WAAW,CAAC,CAAA,YAAA,EAAe,yBAAyB,OAAA,CAAQ,UAAU,CAAC,CAAA,CAAE,CAAA;AAE/E,EAAA,IAAI,CAAC,IAAA,CAAK,MAAA,IAAU,CAAC,QAAQ,MAAA,EAAQ;AACnC,IAAA,QAAA,CAAS,KAAK,gBAAgB,CAAA;AAC9B,IAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,MAAA,QAAA,CAAS,IAAA,CAAK,CAAA,UAAA,EAAa,IAAA,CAAK,MAAM,CAAA,oCAAA,CAAsC,CAAA;AAAA,IAC9E;AAAA,EACF,CAAA,MAAO;AACL,IAAA,MAAM,YAAA,GAAe,IAAA,CAClB,GAAA,CAAI,CAAA,GAAA,KAAO;AACV,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,CAAA,MAAA,KAAU;AACnC,QAAA,MAAM,YAAY,MAAA,CAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,KAAK,MAAM,CAAA;AAClE,QAAA,IAAI,CAAC,SAAA,EAAW;AACd,UAAA,OAAO,OAAA,CAAQ,kBAAkB,MAAA,GAAS,SAAA;AAAA,QAC5C;AACA,QAAA,MAAM,QAAA,GAAY,IAAoD,MAAM,CAAA;AAC5E,QAAA,OAAO,iBAAiB,QAAQ,CAAA;AAAA,MAClC,CAAC,CAAA;AACD,MAAA,OAAO,CAAA,CAAA,EAAI,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,IAC9B,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAA;AACZ,IAAA,MAAM,YAAA,GAAe,QAAQ,GAAA,CAAI,CAAA,MAAA,KAAU,yBAAyB,MAAM,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AACtF,IAAA,QAAA,CAAS,IAAA,CAAK,CAAA,CAAA,EAAI,YAAY,CAAA,CAAA,CAAG,CAAA;AACjC,IAAA,QAAA,CAAS,IAAA,CAAK,CAAA,OAAA,EAAU,YAAY,CAAA,CAAE,CAAA;AAAA,EACxC;AAEA,EAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,IAAA,MAAM,kBAAkB,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,WAAW,IACrD,OAAA,CAAQ,WAAA,CAAY,GAAA,CAAI,CAAA,MAAA,KAAU,yBAAyB,MAAM,CAAC,EAAE,IAAA,CAAK,IAAI,IAC7E,OAAA,CAAQ,WAAA;AACZ,IAAA,IAAI,OAAA,CAAQ,eAAe,MAAA,CAAO,IAAA,CAAK,QAAQ,WAAW,CAAA,CAAE,SAAS,CAAA,EAAG;AACtE,MAAA,MAAM,WAAA,GAAc,MAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,WAAW,CAAA,CAAE,GAAA;AAAA,QAAI,CAAC,CAAC,MAAA,EAAQ,KAAK,CAAA,KACzE,CAAA,EAAG,wBAAA,CAAyB,MAAM,CAAC,CAAA,GAAA,EAAM,gBAAA,CAAiB,KAAwB,CAAC,CAAA;AAAA,OACrF;AACA,MAAA,QAAA,CAAS,IAAA,CAAK,gBAAgB,eAAe,CAAA,gBAAA,EAAmB,YAAY,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,IAC1F,CAAA,MAAO;AACL,MAAA,QAAA,CAAS,IAAA,CAAK,CAAA,aAAA,EAAgB,eAAe,CAAA,YAAA,CAAc,CAAA;AAAA,IAC7D;AAAA,EACF;AAEA,EAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,IAAA,QAAA,CAAS,KAAK,CAAA,UAAA,EAAa,wBAAA,CAAyB,OAAA,CAAQ,OAAO,CAAC,CAAA,CAAE,CAAA;AAAA,EACxE;AAEA,EAAA,OAAO,CAAA,EAAG,QAAA,CAAS,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAC9B;AAEA,SAAS,oBAAoB,OAAA,EAAsC;AACjE,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,IAAO,OAAA,CAAQ,QAAQ,EAAC;AAC5C,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,CAAE,GAAA;AAAA,IAAI,CAAC,CAAC,MAAA,EAAQ,KAAK,CAAA,KACzD,CAAA,EAAG,wBAAA,CAAyB,MAAM,CAAC,CAAA,GAAA,EAAM,gBAAA,CAAiB,KAAwB,CAAC,CAAA;AAAA,GACrF;AACA,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,CAAA,OAAA,EAAU,2BAAA,CAA4B,OAAA,CAAQ,UAAU,CAAC,CAAA,KAAA,EAAQ,WAAA,CAAY,MAAA,GAAS,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA,GAAI,iBAAiB,CAAA;AAAA,GAClI;AACA,EAAA,IAAI,OAAA,CAAQ,YAAY,MAAA,EAAQ;AAC9B,IAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,UAAA,CAAW,GAAA,CAAI,yBAAyB,CAAA;AACrE,IAAA,QAAA,CAAS,KAAK,CAAA,MAAA,EAAS,YAAA,CAAa,IAAA,CAAK,OAAO,CAAC,CAAA,CAAE,CAAA;AAAA,EACrD;AACA,EAAA,MAAM,aAAa,iBAAA,CAAkB;AAAA,IACnC,aAAa,OAAA,CAAQ,YAAA;AAAA,IACrB,UAAU,OAAA,CAAQ;AAAA,GACnB,CAAA;AACD,EAAA,sBAAA,CAAuB,UAAU,OAAA,CAAQ,OAAA,EAAS,UAAA,CAAW,KAAA,EAAO,WAAW,MAAM,CAAA;AACrF,EAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,IAAA,QAAA,CAAS,KAAK,CAAA,UAAA,EAAa,wBAAA,CAAyB,OAAA,CAAQ,OAAO,CAAC,CAAA,CAAE,CAAA;AAAA,EACxE;AACA,EAAA,OAAO,CAAA,EAAG,QAAA,CAAS,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAC9B;AAEA,SAAS,oBAAoB,OAAA,EAAsC;AACjE,EAAA,MAAM,WAAW,CAAC,CAAA,YAAA,EAAe,yBAAyB,OAAA,CAAQ,UAAU,CAAC,CAAA,CAAE,CAAA;AAC/E,EAAA,MAAM,eAAyB,EAAC;AAChC,EAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,IAAA,YAAA,CAAa,KAAK,CAAA,gBAAA,EAAmB,YAAA,CAAa,OAAA,CAAQ,WAAW,CAAC,CAAA,CAAE,CAAA;AAAA,EAC1E;AACA,EAAA,IAAI,OAAA,CAAQ,YAAY,MAAA,EAAQ;AAC9B,IAAA,YAAA,CAAa,KAAK,GAAG,OAAA,CAAQ,UAAA,CAAW,GAAA,CAAI,yBAAyB,CAAC,CAAA;AAAA,EACxE;AACA,EAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,IAAA,QAAA,CAAS,KAAK,CAAA,MAAA,EAAS,YAAA,CAAa,IAAA,CAAK,OAAO,CAAC,CAAA,CAAE,CAAA;AAAA,EACrD;AACA,EAAA,MAAM,aAAa,iBAAA,CAAkB;AAAA,IACnC,aAAa,OAAA,CAAQ,YAAA;AAAA,IACrB,UAAU,OAAA,CAAQ;AAAA,GACnB,CAAA;AACD,EAAA,sBAAA,CAAuB,UAAU,OAAA,CAAQ,OAAA,EAAS,UAAA,CAAW,KAAA,EAAO,WAAW,MAAM,CAAA;AACrF,EAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,IAAA,QAAA,CAAS,KAAK,CAAA,UAAA,EAAa,wBAAA,CAAyB,OAAA,CAAQ,OAAO,CAAC,CAAA,CAAE,CAAA;AAAA,EACxE;AACA,EAAA,OAAO,CAAA,EAAG,QAAA,CAAS,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAC9B;AAEA,SAAS,qBAAqB,MAAA,EAAiC;AAC7D,EAAA,MAAM,MAAA,GAAS,wBAAA,CAAyB,MAAA,CAAO,MAAM,CAAA;AACrD,EAAA,MAAM,QAAQ,MAAA,CAAO,KAAA;AACrB,EAAA,QAAQ,OAAO,QAAA;AAAU,IACvB,KAAK,IAAA;AAAA,IACL,KAAK,KAAA;AAAA,IACL,KAAK,IAAA;AAAA,IACL,KAAK,KAAA;AAAA,IACL,KAAK,IAAA;AAAA,IACL,KAAK,KAAA;AAAA,IACL,KAAK,MAAA;AAAA,IACL,KAAK,OAAA,EAAS;AACZ,MAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC/C,QAAA,OAAO,mCAAmC,kBAAA,CAAmB,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAC,CAAA,GAAA,CAAA;AAAA,MACtF;AACA,MAAA,MAAM,WAAA,GAAc;AAAA,QAClB,EAAA,EAAI,GAAA;AAAA,QACJ,GAAA,EAAK,IAAA;AAAA,QACL,EAAA,EAAI,GAAA;AAAA,QACJ,GAAA,EAAK,IAAA;AAAA,QACL,EAAA,EAAI,GAAA;AAAA,QACJ,GAAA,EAAK,IAAA;AAAA,QACL,IAAA,EAAM,MAAA;AAAA,QACN,KAAA,EAAO;AAAA,OACT;AACA,MAAA,OAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,WAAA,CAAY,MAAA,CAAO,QAAQ,CAAC,CAAA,CAAA,EAAI,YAAA,CAAa,KAAK,CAAC,CAAA,CAAA;AAAA,IACzE;AAAA,IACA,KAAK,IAAA;AACH,MAAA,IAAI,KAAA,KAAU,IAAA,EAAM,OAAO,CAAA,EAAG,MAAM,CAAA,QAAA,CAAA;AACpC,MAAA,IAAI,KAAA,KAAU,IAAA,EAAM,OAAO,CAAA,EAAG,MAAM,CAAA,QAAA,CAAA;AACpC,MAAA,IAAI,KAAA,KAAU,KAAA,EAAO,OAAO,CAAA,EAAG,MAAM,CAAA,SAAA,CAAA;AACrC,MAAA,OAAO,mCAAmC,kBAAA,CAAmB,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAC,CAAA,GAAA,CAAA;AAAA,IACtF,KAAK,IAAA;AACH,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACzB,QAAA,OAAO,mCAAmC,kBAAA,CAAmB,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAC,CAAA,GAAA,CAAA;AAAA,MACtF;AACA,MAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,OAAA;AAC/B,MAAA,OAAO,CAAA,EAAG,MAAM,CAAA,KAAA,EAAQ,KAAA,CAAM,GAAA,CAAI,CAAA,IAAA,KAAQ,YAAA,CAAa,IAAI,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,IAC1E;AACE,MAAA,OAAO,mCAAmC,kBAAA,CAAmB,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAC,CAAA,GAAA,CAAA;AAAA;AAE1F;AAEA,SAAS,iBAAiB,OAAA,EAAmC;AAC3D,EAAA,MAAM,WAAA,GAAc,QAAQ,IAAA,GAAO,MAAA,CAAO,QAAQ,OAAA,CAAQ,IAAI,IAAI,EAAC;AACnE,EAAA,MAAM,aAAa,WAAA,CAChB,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM,CAAA,EAAG,yBAAyB,GAAG,CAAC,OAAO,gBAAA,CAAiB,KAAwB,CAAC,CAAA,CAAE,CAAA,CACzG,KAAK,IAAI,CAAA;AACZ,EAAA,MAAM,cAAc,OAAA,CAAQ,MAAA,GACxB,CAAA,EAAG,wBAAA,CAAyB,QAAQ,MAAM,CAAC,CAAA,CAAA,EAAI,wBAAA,CAAyB,QAAQ,QAAQ,CAAC,CAAA,CAAA,GACzF,wBAAA,CAAyB,QAAQ,QAAQ,CAAA;AAC7C,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,CAAA,OAAA,EAAU,OAAA,CAAQ,MAAA,GAAS,4BAAA,CAA6B,OAAA,CAAQ,MAAM,CAAA,GAAI,GAAG,CAAA,MAAA,EAAS,WAAW,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA;AAAA,GACjH;AACA,EAAA,IAAI,OAAA,CAAQ,SAAS,MAAA,EAAQ;AAC3B,IAAA,QAAA,CAAS,IAAA,CAAK,CAAA,MAAA,EAAS,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,oBAAoB,CAAA,CAAE,IAAA,CAAK,OAAO,CAAC,CAAA,CAAE,CAAA;AAAA,EAClF;AACA,EAAA,IAAI,OAAA,CAAQ,OAAO,MAAA,EAAQ;AACzB,IAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,KAAA,CAAM,SAAA,KAAc,QAAQ,MAAA,GAAS,KAAA;AAC/D,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,wBAAA,CAAyB,OAAA,CAAQ,MAAM,MAAM,CAAC,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,CAAA;AAAA,EACzF;AACA,EAAA,IAAI,OAAA,CAAQ,UAAU,MAAA,EAAW;AAC/B,IAAA,QAAA,CAAS,IAAA,CAAK,CAAA,MAAA,EAAS,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,EACjE;AACA,EAAA,IAAI,OAAA,CAAQ,WAAW,MAAA,EAAW;AAChC,IAAA,QAAA,CAAS,IAAA,CAAK,CAAA,OAAA,EAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,EACnE;AACA,EAAA,OAAO,CAAA,EAAG,QAAA,CAAS,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAC9B;AAEA,SAAS,mBAAA,CACP,KAAA,EACA,YAAA,EAMA,IAAA,EACwB;AACxB,EAAA,OAAO;AAAA,IACL,EAAA,CAAG,QAAsC,KAAA,EAA6B;AACpE,MAAA,MAAM,UAAA,GAAa,OAAO,MAAM,CAAA;AAChC,MAAA,IAAI,2BAAA,CAA4B,UAAA,EAAY,KAAK,CAAA,EAAG;AAClD,QAAA,YAAA,CAAa,MAAM,UAAA,EAAY,KAAA,EAAO,EAAE,UAAA,EAAY,QAAQ,CAAA;AAAA,MAC9D,CAAA,MAAO;AACL,QAAA,YAAA,CAAa,IAAA,EAAM,YAAY,KAAK,CAAA;AAAA,MACtC;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,MAAA,CAAO,MAAA,EAAsC,KAAA,EAA6B,IAAA,EAA+B;AACvG,MAAA,YAAA,CAAa,IAAA,EAAM,OAAO,MAAM,CAAA,EAAG,OAAO,EAAE,SAAA,EAAW,MAAM,CAAA;AAC7D,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,MAAA,CAAO,QAAsC,KAAA,EAAe;AAC1D,MAAA,YAAA,CAAa,IAAA,EAAM,OAAO,MAAM,CAAA,EAAG,OAAO,EAAE,SAAA,EAAW,QAAQ,CAAA;AAC/D,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,MAAM,OAAA,EAA8E;AAClF,MAAA,MAAA,CAAO,OAAA,CAAQ,OAA2D,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,MAAA,EAAQ,KAAK,CAAA,KAAM;AACvG,QAAA,IAAI,UAAU,MAAA,EAAW;AACvB,UAAA;AAAA,QACF;AACA,QAAA,IAAI,2BAAA,CAA4B,MAAA,EAAQ,KAAK,CAAA,EAAG;AAC9C,UAAA,YAAA,CAAa,MAAM,MAAA,EAAQ,KAAA,EAAO,EAAE,UAAA,EAAY,QAAQ,CAAA;AAAA,QAC1D,CAAA,MAAO;AACL,UAAA,YAAA,CAAa,IAAA,EAAM,QAAQ,KAAK,CAAA;AAAA,QAClC;AAAA,MACF,CAAC,CAAA;AACD,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,KAAA,CAAM,MAAc,EAAA,EAAY;AAC9B,MAAA,KAAA,CAAM,MAAA,GAAS,IAAA;AACf,MAAA,KAAA,CAAM,KAAA,GAAQ,KAAK,IAAA,GAAO,CAAA;AAC1B,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,MAAM,KAAA,EAAe;AACnB,MAAA,KAAA,CAAM,KAAA,GAAQ,KAAA;AACd,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,OAAO,KAAA,EAAe;AACpB,MAAA,KAAA,CAAM,MAAA,GAAS,KAAA;AACf,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,YAAY,KAAA,EAAe;AACzB,MAAA,KAAA,CAAM,WAAA,GAAc,KAAA;AACpB,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,SAAS,KAAA,EAAe;AACtB,MAAA,KAAA,CAAM,QAAA,GAAW,KAAA;AACjB,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,WAAW,KAAA,EAAe;AACxB,MAAA,KAAA,CAAM,UAAA,GAAa,KAAA;AACnB,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,KAAA,CAAM,QAAsC,OAAA,EAAwB;AAClE,MAAA,KAAA,CAAM,KAAA,GAAQ;AAAA,QACZ,KAAA,EAAO,OAAO,MAAM,CAAA;AAAA,QACpB,SAAA,EAAW,OAAA,EAAS,SAAA,KAAc,KAAA,GAAQ,YAAA,GAAe;AAAA,OAC3D;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,EAAA,CAAG,QAAsC,KAAA,EAA6B;AACpE,MAAA,YAAA,CAAa,IAAA,EAAM,MAAA,CAAO,MAAM,CAAA,EAAG,KAAK,CAAA;AACxC,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,GAAA,CAAI,QAAsC,KAAA,EAA6B;AACrE,MAAA,YAAA,CAAa,KAAA,EAAO,MAAA,CAAO,MAAM,CAAA,EAAG,KAAK,CAAA;AACzC,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,EAAA,CAAG,QAAsC,KAAA,EAA6B;AACpE,MAAA,YAAA,CAAa,IAAA,EAAM,MAAA,CAAO,MAAM,CAAA,EAAG,KAAK,CAAA;AACxC,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,GAAA,CAAI,QAAsC,KAAA,EAA6B;AACrE,MAAA,YAAA,CAAa,KAAA,EAAO,MAAA,CAAO,MAAM,CAAA,EAAG,KAAK,CAAA;AACzC,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,GAAA,CAAI,QAAsC,KAAA,EAA6B;AACrE,MAAA,YAAA,CAAa,KAAA,EAAO,MAAA,CAAO,MAAM,CAAA,EAAG,KAAK,CAAA;AACzC,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,IAAA,CAAK,QAAsC,KAAA,EAA6B;AACtE,MAAA,YAAA,CAAa,MAAA,EAAQ,MAAA,CAAO,MAAM,CAAA,EAAG,KAAK,CAAA;AAC1C,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,KAAA,CAAM,QAAsC,KAAA,EAA6B;AACvE,MAAA,YAAA,CAAa,OAAA,EAAS,MAAA,CAAO,MAAM,CAAA,EAAG,KAAK,CAAA;AAC3C,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,EAAA,CAAG,QAAsC,KAAA,EAA6B;AACpE,MAAA,YAAA,CAAa,IAAA,EAAM,MAAA,CAAO,MAAM,CAAA,EAAG,KAAK,CAAA;AACxC,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,EAAA,CAAG,QAAsC,MAAA,EAAmC;AAC1E,MAAA,YAAA,CAAa,IAAA,EAAM,MAAA,CAAO,MAAM,CAAA,EAAG,MAAM,CAAA;AACzC,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,QAAA,CAAS,QAAsC,MAAA,EAAmC;AAChF,MAAA,YAAA,CAAa,UAAA,EAAY,MAAA,CAAO,MAAM,CAAA,EAAG,MAAM,CAAA;AAC/C,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,WAAA,CAAY,QAAsC,MAAA,EAAmC;AACnF,MAAA,YAAA,CAAa,aAAA,EAAe,MAAA,CAAO,MAAM,CAAA,EAAG,MAAM,CAAA;AAClD,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,GAAA,CACE,kBAAA,EACA,QAAA,EACA,KAAA,EACA;AACA,MAAA,MAAM,UAAA,GAAa,OAAO,kBAAkB,CAAA;AAC5C,MAAA,IAAI,QAAA,IAAY,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AAC3C,QAAA,YAAA,CAAa,KAAA,EAAO,MAAA,EAAW,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,EAAIA,qBAAAA,CAAqB,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,MAC3F,CAAA,MAAO;AACL,QAAA,YAAA,CAAa,KAAA,EAAO,QAAW,UAAU,CAAA;AAAA,MAC3C;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,GAAG,UAAA,EAAoB;AACrB,MAAA,YAAA,CAAa,IAAA,EAAM,QAAW,UAAU,CAAA;AACxC,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,GACF;AACF;AAEA,SAAS,YAAY,OAAA,EAA6B;AAChD,EAAA,IAAI,CAAC,SAAS,OAAO,MAAA;AACrB,EAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAA,CAAQ,KAAK,GAAG,CAAA;AACzB;AAEA,SAAS,sBAAA,CACP,SACA,IAAA,EACA;AACA,EAAA,MAAM,SAAA,GAAY,CAChB,QAAA,EACA,MAAA,EACA,KAAA,KACG;AACH,IAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,MAAA,EAAQ,QAAA,EAAU,OAAO,CAAA;AAAA,EAC1C,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,EAAA,CAAG,QAAgB,KAAA,EAA6B;AAC9C,MAAA,SAAA,CAAU,IAAA,EAAM,QAAQ,KAAK,CAAA;AAC7B,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,GAAA,CAAI,QAAgB,KAAA,EAA6B;AAC/C,MAAA,SAAA,CAAU,KAAA,EAAO,QAAQ,KAAK,CAAA;AAC9B,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,EAAA,CAAG,QAAgB,KAAA,EAA6B;AAC9C,MAAA,SAAA,CAAU,IAAA,EAAM,QAAQ,KAAK,CAAA;AAC7B,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,GAAA,CAAI,QAAgB,KAAA,EAA6B;AAC/C,MAAA,SAAA,CAAU,KAAA,EAAO,QAAQ,KAAK,CAAA;AAC9B,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,EAAA,CAAG,QAAgB,KAAA,EAA6B;AAC9C,MAAA,SAAA,CAAU,IAAA,EAAM,QAAQ,KAAK,CAAA;AAC7B,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,GAAA,CAAI,QAAgB,KAAA,EAA6B;AAC/C,MAAA,SAAA,CAAU,KAAA,EAAO,QAAQ,KAAK,CAAA;AAC9B,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,IAAA,CAAK,QAAgB,KAAA,EAA6B;AAChD,MAAA,SAAA,CAAU,MAAA,EAAQ,QAAQ,KAAK,CAAA;AAC/B,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,KAAA,CAAM,QAAgB,KAAA,EAA6B;AACjD,MAAA,SAAA,CAAU,OAAA,EAAS,QAAQ,KAAK,CAAA;AAChC,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,EAAA,CAAG,QAAgB,KAAA,EAA6B;AAC9C,MAAA,SAAA,CAAU,IAAA,EAAM,QAAQ,KAAK,CAAA;AAC7B,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,EAAA,CAAG,QAAgB,MAAA,EAAmC;AACpD,MAAA,SAAA,CAAU,IAAA,EAAM,QAAQ,MAAM,CAAA;AAC9B,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,GACF;AACF;AAEA,SAAS,gBAAA,CACP,cACA,IAAA,EACA,WAAA,EACA,QACA,mBAAA,EACA,MAAA,EACA,eAAA,EACA,eAAA,GAAkB,KAAA,EACa;AAC/B,EAAA,MAAM,KAAA,GAKF;AAAA,IACF,SAAS;AAAC,GACZ;AAEA,EAAA,IAAI,eAAA;AACJ,EAAA,IAAI,eAAA;AACJ,EAAA,IAAI,OAAA,GAA+C,IAAA;AACnD,EAAA,MAAM,aAAA,GAAgB,wBAAA,CAAyB,MAAA,EAAQ,eAAe,CAAA;AAEtE,EAAA,MAAM,UAAA,GAAa,OACjB,OAAA,EACA,OAAA,EACA,QAAA,KACyC;AACzC,IAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,WAAA,EAAa,OAAO,CAAA;AACvD,IAAA,MAAM,yBAAA,GAA4B,4BAA4B,OAAO,CAAA;AACrE,IAAA,MAAM,OAAA,GAA4B;AAAA,MAChC,QAAA,EAAU,YAAA;AAAA,MACV,IAAA;AAAA,MACA,QAAQ,aAAA,EAAe,MAAA;AAAA,MACvB,MAAA,EAAQ,YAAY,OAAO,CAAA;AAAA,MAC3B,OAAA,EAAS,MAAM,OAAA,CAAQ,MAAA,GAAS,CAAC,GAAG,KAAA,CAAM,OAAO,CAAA,GAAI,MAAA;AAAA,MACrD,OAAO,aAAA,EAAe,KAAA;AAAA,MACtB,MAAM,aAAA,EAAe,IAAA;AAAA,MACrB,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,OAAO,KAAA,CAAM;AAAA,KACf;AACA,IAAA,MAAM,QAAA,GAA8C,aAAA,EAAe,GAAA,GAC/D,CAAA,KAAA,EAAQ,YAAY,CAAA,CAAA,GACpB,cAAA;AACJ,IAAA,MAAM,GAAA,GAAM,iBAAiB,OAAO,CAAA;AACpC,IAAA,MAAM,QAAA,GAAW,kBACb,gBAAA,CAAiB;AAAA,MACf,YAAA;AAAA,MACA,IAAA;AAAA,MACA,eAAA,EAAiB,yBAAA;AAAA,MACjB,KAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACD,CAAA,GACD,MAAA;AACJ,IAAA,OAAO,qBAAA;AAAA,MACL,MAAA;AAAA,MACA;AAAA,QACE,SAAA,EAAW,KAAA;AAAA,QACX,QAAA;AAAA,QACA,YAAA;AAAA,QACA,GAAA;AAAA,QACA,OAAA;AAAA,QACA,GAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA,YAAY;AACV,QAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,UAAA,CAA0B,SAAS,aAAa,CAAA;AAC9E,QAAA,OAAO,mBAAA,CAAoB,QAAA,EAAU,EAAE,SAAA,EAAW,OAAO,CAAA;AAAA,MAC3D,CAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,GAAA,GAAM,CACV,OAAA,EACA,OAAA,EACA,QAAA,KACG;AACH,IAAA,MAAM,iBAAiB,OAAA,IAAW,eAAA;AAClC,IAAA,MAAM,iBAAiB,OAAA,IAAW,eAAA;AAClC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAA,GAAU,WAAgB,cAAA,EAAgB,cAAA,EAAgB,aAAA,CAAc,OAAA,CAAQ,QAAQ,CAAC,CAAA;AAAA,IAC3F;AACA,IAAA,OAAO,OAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,UAAU,EAAC;AACjB,EAAA,MAAM,aAAA,GAAgB,sBAAA,CAAuB,KAAA,CAAM,OAAA,EAAS,OAAO,CAAA;AAEnE,EAAA,MAAA,CAAO,MAAA,CAAO,SAAS,aAAA,EAAe;AAAA,IACpC,MAAA,CAAO,SAA6B,OAAA,EAAgC;AAClE,MAAA,eAAA,GAAkB,OAAA;AAClB,MAAA,eAAA,GAAkB,OAAA,IAAW,eAAA;AAC7B,MAAA,OAAO,GAAA,CAAI,OAAA,EAAS,OAAA,EAAS,oBAAA,CAAqB,MAAM,CAAC,CAAA;AAAA,IAC3D,CAAA;AAAA,IACA,MAAM,MAAA,CAAgB,OAAA,EAA6B,OAAA,EAAgC;AACjF,MAAA,MAAM,SAAS,MAAM,GAAA,CAAI,SAAS,OAAA,EAAS,oBAAA,CAAqB,MAAM,CAAC,CAAA;AACvE,MAAA,OAAO,eAAe,MAAM,CAAA;AAAA,IAC9B,CAAA;AAAA,IACA,WAAA,CAAqB,SAA6B,OAAA,EAAgC;AAChF,MAAA,OAAO,OAAA,CAAQ,MAAA,CAA6B,OAAA,EAAS,OAAO,CAAA;AAAA,IAC9D,CAAA;AAAA,IACA,KAAA,CAAM,QAAgB,OAAA,EAA2B;AAC/C,MAAA,KAAA,CAAM,QAAQ,EAAE,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAS,aAAa,IAAA,EAAK;AAC9D,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,MAAM,KAAA,EAAe;AACnB,MAAA,KAAA,CAAM,KAAA,GAAQ,KAAA;AACd,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,OAAO,KAAA,EAAe;AACpB,MAAA,KAAA,CAAM,MAAA,GAAS,KAAA;AACf,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,KAAA,CAAM,MAAc,EAAA,EAAY;AAC9B,MAAA,KAAA,CAAM,MAAA,GAAS,IAAA;AACf,MAAA,KAAA,CAAM,KAAA,GAAQ,KAAK,IAAA,GAAO,CAAA;AAC1B,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,IAAA,CACE,aACA,UAAA,EACA;AACA,MAAA,OAAO,IAAI,eAAA,EAAiB,eAAe,CAAA,CAAE,IAAA,CAAK,aAAa,UAAU,CAAA;AAAA,IAC3E,CAAA;AAAA,IACA,MAAiB,UAAA,EAAsD;AACrE,MAAA,OAAO,GAAA,CAAI,eAAA,EAAiB,eAAe,CAAA,CAAE,MAAM,UAAU,CAAA;AAAA,IAC/D,CAAA;AAAA,IACA,QAAQ,SAAA,EAAwB;AAC9B,MAAA,OAAO,GAAA,CAAI,eAAA,EAAiB,eAAe,CAAA,CAAE,QAAQ,SAAS,CAAA;AAAA,IAChE;AAAA,GACD,CAAA;AAED,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,kBAAA,CAOP,SAAA,EACA,MAAA,EACA,mBAAA,EACA,QACA,YAAA,EAC2D;AAC3D,EAAA,MAAM,KAAA,GAA2B;AAAA,IAC/B,YAAY;AAAC,GACf;AACA,EAAA,MAAM,eAAA,GAAkB,OAAA,CAAQ,YAAA,EAAc,QAAQ,CAAA;AAEtD,EAAA,MAAM,YAAA,GAAe,CACnB,QAAA,EACA,MAAA,EACA,OACA,KAAA,KACG;AACH,IAAA,MAAM,SAAA,GAAoC,EAAE,QAAA,EAAS;AACrD,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,SAAA,CAAU,MAAA,GAAS,MAAA;AACnB,MAAA,IAAI,aAAa,IAAA,EAAM;AAErB,QAAA,SAAA,CAAU,SAAA,GAAY,MAAA;AAAA,MACxB;AAAA,IACF;AACA,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA,SAAA,CAAU,KAAA,GAAQ,KAAA;AAClB,MAAA,IAAI,aAAa,IAAA,EAAM;AACrB,QAAA,SAAA,CAAU,QAAA,GAAW,KAAA;AAAA,MACvB;AAAA,IACF;AACA,IAAA,IAAI,OAAO,SAAA,EAAW;AACpB,MAAA,SAAA,CAAU,aAAa,KAAA,CAAM,SAAA;AAC7B,MAAA,IAAI,aAAa,IAAA,EAAM;AACrB,QAAA,SAAA,CAAU,gBAAgB,KAAA,CAAM,SAAA;AAAA,MAClC;AAAA,IACF;AACA,IAAA,IAAI,OAAO,UAAA,EAAY;AACrB,MAAA,SAAA,CAAU,cAAc,KAAA,CAAM,UAAA;AAC9B,MAAA,IAAI,aAAa,IAAA,EAAM;AACrB,QAAA,SAAA,CAAU,iBAAiB,KAAA,CAAM,UAAA;AAAA,MACnC;AAAA,IACF;AACA,IAAA,KAAA,CAAM,UAAA,CAAW,KAAK,SAAS,CAAA;AAAA,EACjC,CAAA;AAEA,EAAA,MAAM,gBAAgB,OAA0B;AAAA,IAC9C,UAAA,EAAY,MAAM,UAAA,CAAW,GAAA,CAAI,gBAAc,EAAE,GAAG,WAAU,CAAE,CAAA;AAAA,IAChE,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,OAAO,KAAA,CAAM,KAAA,GAAQ,EAAE,GAAG,KAAA,CAAM,OAAM,GAAI,MAAA;AAAA,IAC1C,aAAa,KAAA,CAAM,WAAA;AAAA,IACnB,UAAU,KAAA,CAAM,QAAA;AAAA,IAChB,YAAY,KAAA,CAAM;AAAA,GACpB,CAAA;AAEA,EAAA,MAAM,UAAU,EAAC;AAEjB,EAAA,MAAM,aAAA,GAAgB,mBAAA;AAAA,IACpB,KAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,SAAA,GAAY,OAChB,OAAA,GAA6B,eAAA,EAC7B,SACA,cAAA,GAAoC,aAAA,EAAc,EAClD,QAAA,EACA,eAAA,KACG;AACH,IAAA,MAAM,cAAA,GAAiB,2BAAA,CAA4B,OAAO,CAAA,IAAK,eAAA;AAC/D,IAAA,MAAM,iBAAA,GAAoB,uBAAA,CAAwB,SAAA,EAAW,OAAA,EAAS,MAAM,CAAA;AAC5E,IAAA,MAAM,OAAO,yBAAA,CAA0B;AAAA,MACrC,SAAA,EAAW,iBAAA;AAAA,MACX,OAAA,EAAS,cAAA;AAAA,MACT,KAAA,EAAO,cAAA;AAAA,MACP,OAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,MAAM,QAAA,GAAW,kBACZ,eAAA,GAAkB;AAAA,MACjB,SAAA,EAAW,iBAAA;AAAA,MACX,OAAA,EAAS,cAAA;AAAA,MACT,cAAA;AAAA,MACA;AAAA,KACD,KAAK,mBAAA,CAAoB;AAAA,MACxB,SAAA,EAAW,iBAAA;AAAA,MACX,OAAA,EAAS,cAAA;AAAA,MACT,KAAA,EAAO,cAAA;AAAA,MACP;AAAA,KACD,CAAA,GACD,MAAA;AAEJ,IAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;AACzB,MAAA,OAAO,uBAAA;AAAA,QAAwB,YAAA;AAAA,QAAc,MAC3C,qBAAA;AAAA,UACE,MAAA;AAAA,UACA;AAAA,YACE,SAAA,EAAW,QAAA;AAAA,YACX,QAAA,EAAU,gBAAA;AAAA,YACV,KAAA,EAAO,iBAAA;AAAA,YACP,KAAK,IAAA,CAAK,KAAA;AAAA,YACV,SAAS,IAAA,CAAK,OAAA;AAAA,YACd,GAAA,EAAK,QAAA;AAAA,YACL;AAAA,WACF;AAAA,UACA,YAAY;AACV,YAAA,MAAM,gBAAgB,MAAM,MAAA,CAAO,YAAA,CAAgB,IAAA,CAAK,SAAS,OAAO,CAAA;AACxE,YAAA,OAAO,oBAAoB,aAAA,EAAe,EAAE,OAAO,iBAAA,EAAmB,SAAA,EAAW,UAAU,CAAA;AAAA,UAC7F,CAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,IACF;AAEA,IAAA,MAAM,MAAM,qBAAA,CAAsB;AAAA,MAChC,SAAA,EAAW,iBAAA;AAAA,MACX,GAAG,IAAA,CAAK;AAAA,KACT,CAAA;AACD,IAAA,OAAO,uBAAA;AAAA,MAAwB,YAAA;AAAA,MAAc,MAC3C,qBAAA;AAAA,QACE,MAAA;AAAA,QACA;AAAA,UACE,SAAA,EAAW,QAAA;AAAA,UACX,QAAA,EAAU,gBAAA;AAAA,UACV,KAAA,EAAO,iBAAA;AAAA,UACP,GAAA;AAAA,UACA,SAAS,IAAA,CAAK,OAAA;AAAA,UACd,GAAA,EAAK,QAAA;AAAA,UACL;AAAA,SACF;AAAA,QACA,YAAY;AACV,UAAA,MAAM,WAAW,MAAM,MAAA,CAAO,YAAA,CAAgB,IAAA,CAAK,SAAS,OAAO,CAAA;AACnE,UAAA,OAAO,oBAAoB,QAAA,EAAU,EAAE,OAAO,iBAAA,EAAmB,SAAA,EAAW,UAAU,CAAA;AAAA,QACxF,CAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,CACxB,OAAA,EACA,OAAA,EACA,eAAA,KAC2C;AAC3C,IAAA,MAAM,QAAQ,EAAC;AACf,IAAA,MAAM,aAAA,GAAgB,wBAAA,CAAyB,MAAA,EAAQ,eAAe,CAAA;AACtE,IAAA,MAAMC,cAAAA,GAAgB,mBAAA;AAAA,MACpB,KAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,MAAA,CAAO,MAAA,CAAO,OAAOA,cAAAA,EAAe;AAAA,MAClC,MAAM,MAAA,CAAwB,IAAA,EAA0B,IAAA,EAAiC;AACvF,QAAA,MAAM,IAAI,MAAM,SAAA;AAAA,UACd,IAAA,IAAQ,OAAA;AAAA,UACR,IAAA,IAAQ,OAAA;AAAA,UACR,aAAA,EAAc;AAAA,UACd,aAAA,CAAc,OAAA,CAAQ,oBAAA,CAAqB,MAAM,CAAC;AAAA,SACpD;AACA,QAAA,OAAO,eAAe,CAAC,CAAA;AAAA,MACzB,CAAA;AAAA,MACA,WAAA,CAA6B,MAA0B,IAAA,EAAiC;AACtF,QAAA,OAAO,KAAA,CAAM,MAAA,CAA6B,IAAA,EAAM,IAAI,CAAA;AAAA,MACtD,CAAA;AAAA,MACA,IAAA,CACE,aACA,UAAA,EACA;AACA,QAAA,OAAO,SAAA;AAAA,UACL,OAAA;AAAA,UACA,OAAA;AAAA,UACA,aAAA,EAAc;AAAA,UACd,cAAc,OAAA;AAAQ,SACxB,CAAE,IAAA,CAAK,WAAA,EAAa,UAAU,CAAA;AAAA,MAChC,CAAA;AAAA,MACA,MAAiB,UAAA,EAAsD;AACrE,QAAA,OAAO,SAAA,CAAyB,SAAS,OAAA,EAAS,aAAA,IAAiB,aAAA,CAAc,OAAA,EAAS,CAAA,CAAE,KAAA;AAAA,UAC1F;AAAA,SACF;AAAA,MACF,CAAA;AAAA,MACA,QAAQ,SAAA,EAAwB;AAC9B,QAAA,OAAO,SAAA,CAAyB,SAAS,OAAA,EAAS,aAAA,IAAiB,aAAA,CAAc,OAAA,EAAS,CAAA,CAAE,OAAA;AAAA,UAC1F;AAAA,SACF;AAAA,MACF;AAAA,KACD,CAAA;AACD,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAA,CAAO,MAAA,CAAO,SAAS,aAAA,EAAe;AAAA,IACpC,KAAA,GAAQ;AACN,MAAA,KAAA,CAAM,aAAa,EAAC;AACpB,MAAA,KAAA,CAAM,KAAA,GAAQ,MAAA;AACd,MAAA,KAAA,CAAM,MAAA,GAAS,MAAA;AACf,MAAA,KAAA,CAAM,KAAA,GAAQ,MAAA;AACd,MAAA,KAAA,CAAM,WAAA,GAAc,MAAA;AACpB,MAAA,KAAA,CAAM,QAAA,GAAW,MAAA;AACjB,MAAA,KAAA,CAAM,UAAA,GAAa,MAAA;AACnB,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,MAAA,CAAgB,OAAA,GAA6B,eAAA,EAAiB,OAAA,EAAoC;AAChG,MAAA,OAAO,iBAAA,CAAqB,OAAA,EAAS,OAAA,EAAS,oBAAA,CAAqB,MAAM,CAAC,CAAA;AAAA,IAC5E,CAAA;AAAA,IACA,MAAM,SACJ,OAAA,EAGA;AACA,MAAA,MAAM,OAAA,GAAU,kBAAA,CAAmB,OAAA,CAAQ,MAAM,CAAA;AACjD,MAAA,MAAM,YAAY,aAAA,EAAc;AAChC,MAAA,MAAM,iBAAiB,aAAA,EAAc;AACrC,MAAA,MAAM,QAAA,GAAW,qBAAqB,MAAM,CAAA;AAC5C,MAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,OAAA,CAAQ,KAAK,CAAA;AAChD,MAAA,IAAI,eAAe,MAAA,EAAQ;AACzB,QAAA,cAAA,CAAe,UAAA,CAAW,IAAA,CAAK,GAAG,aAAa,CAAA;AAAA,MACjD;AACA,MAAA,IAAI,OAAA,CAAQ,YAAY,MAAA,EAAW;AACjC,QAAA,cAAA,CAAe,KAAA,GAAQ,cAAA,CAAoB,OAAA,CAAQ,OAAO,CAAA;AAAA,MAC5D;AACA,MAAA,IAAI,OAAA,CAAQ,UAAU,MAAA,EAAW;AAC/B,QAAA,cAAA,CAAe,QAAQ,OAAA,CAAQ,KAAA;AAAA,MACjC;AACA,MAAA,IACE,YAAA,EAAc,WAAA,IACd,0BAAA,CAA2B,SAAS,KACpC,CAAC,6BAAA,CAA8B,OAAA,CAAQ,MAAM,CAAA,IAC7C,CAAC,uCAAA,CAAwC,OAAA,CAAQ,KAAK,CAAA,EACtD;AACA,QAAA,MAAM,iBAAA,GAAoB,uBAAA,CAAwB,SAAA,EAAW,MAAS,CAAA;AACtE,QAAA,MAAM,OAAA,GAAkD;AAAA,UACtD,UAAA,EAAY,iBAAA;AAAA,UACZ,QAAQ,OAAA,CAAQ;AAAA,SAClB;AACA,QAAA,IAAI,OAAA,CAAQ,UAAU,MAAA,EAAW;AAC/B,UAAA,OAAA,CAAQ,KAAA,GAAQ,yBAAA,CAA0B,OAAA,CAAQ,KAAK,CAAA;AAAA,QACzD;AACA,QAAA,MAAM,QAAA,GAAW,kBAAA,CAAwB,cAAA,CAAe,KAAK,CAAA;AAC7D,QAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,UAAA,OAAA,CAAQ,OAAA,GAAU,QAAA;AAAA,QACpB;AACA,QAAA,IAAI,cAAA,CAAe,UAAU,MAAA,EAAW;AACtC,UAAA,OAAA,CAAQ,QAAQ,cAAA,CAAe,KAAA;AAAA,QACjC;AACA,QAAA,MAAM,MAAM,qBAAA,CAAsB;AAAA,UAChC,SAAA,EAAW,iBAAA;AAAA,UACX,OAAA;AAAA,UACA,YAAY,cAAA,CAAe,UAAA;AAAA,UAC3B,OAAO,cAAA,CAAe,KAAA;AAAA,UACtB,OAAO,cAAA,CAAe;AAAA,SACvB,CAAA;AACD,QAAA,MAAM,QAAA,GAAW,kBACb,2BAAA,CAA4B;AAAA,UAC1B,SAAA,EAAW,iBAAA;AAAA,UACX,OAAA;AAAA,UACA,eAAA,EAAiB,OAAA;AAAA,UACjB,SAAA;AAAA,UACA,cAAA;AAAA,UACA;AAAA,SACD,CAAA,GACD,MAAA;AACJ,QAAA,OAAO,uBAAA;AAAA,UAAwB,YAAA;AAAA,UAAc,MAC3C,qBAAA;AAAA,YACE,MAAA;AAAA,YACA;AAAA,cACE,SAAA,EAAW,QAAA;AAAA,cACX,QAAA,EAAU,gBAAA;AAAA,cACV,KAAA,EAAO,iBAAA;AAAA,cACP,GAAA;AAAA,cACA,OAAA;AAAA,cACA,GAAA,EAAK;AAAA,aACP;AAAA,YACA,YAAY;AACV,cAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,YAAA;AAAA,gBAC5B;AAAA,eACF;AACA,cAAA,OAAO,oBAAoB,QAAA,EAAU,EAAE,OAAO,iBAAA,EAAmB,SAAA,EAAW,UAAU,CAAA;AAAA,YACxF,CAAA;AAAA,YACA;AAAA;AACF,SACF;AAAA,MACF;AACA,MAAA,OAAO,SAAA;AAAA,QACL,OAAA;AAAA,QACA,MAAA;AAAA,QACA,cAAA;AAAA,QACA,QAAA;AAAA,QACA,eAAA,GACI,CAAC,EAAE,SAAA,EAAW,mBAAmB,cAAA,EAAgB,WAAA,EAAa,IAAA,EAAK,KACjE,6BAAA,CAA8B;AAAA,UAC5B,SAAA,EAAW,iBAAA;AAAA,UACX,OAAA;AAAA,UACA,eAAA,EAAiB,OAAA;AAAA,UACjB,SAAA;AAAA,UACA,cAAA,EAAgB,WAAA;AAAA,UAChB;AAAA,SACD,CAAA,GACH;AAAA,OACN;AAAA,IACF,CAAA;AAAA,IACA,MAAA,CAAO,QAA2B,OAAA,EAAoC;AACpE,MAAA,MAAM,gBAAA,GAAmB,qBAAqB,MAAM,CAAA;AACpD,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AACzB,QAAA,MAAM,iBAAA,GAAoB,OACxB,OAAA,EACA,aAAA,EACA,QAAA,KACG;AACH,UAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,OAAA,EAAS,aAAa,CAAA;AACzD,UAAA,MAAM,iBAAA,GAAoB,uBAAA,CAAwB,SAAA,EAAW,aAAA,EAAe,MAAM,CAAA;AAClF,UAAA,MAAM,OAAA,GAA+B;AAAA,YACnC,UAAA,EAAY,iBAAA;AAAA,YACZ,WAAA,EAAa,wBAAwB,MAAM;AAAA,WAC7C;AACA,UAAA,IAAI,OAAA,UAAiB,OAAA,GAAU,OAAA;AAC/B,UAAA,IAAI,aAAA,EAAe,KAAA,EAAO,OAAA,CAAQ,KAAA,GAAQ,aAAA,CAAc,KAAA;AACxD,UAAA,IAAI,aAAA,EAAe,IAAA,EAAM,OAAA,CAAQ,IAAA,GAAO,aAAA,CAAc,IAAA;AACtD,UAAA,IAAI,aAAA,EAAe,kBAAkB,MAAA,EAAW;AAC9C,YAAA,OAAA,CAAQ,kBAAkB,aAAA,CAAc,aAAA;AAAA,UAC1C;AACA,UAAA,MAAM,GAAA,GAAM,oBAAoB,OAAO,CAAA;AACvC,UAAA,MAAM,QAAA,GAAW,eAAA,GAAkB,mBAAA,CAAoB,OAAO,CAAA,GAAI,MAAA;AAClE,UAAA,OAAO,qBAAA;AAAA,YACL,MAAA;AAAA,YACA;AAAA,cACE,SAAA,EAAW,QAAA;AAAA,cACX,QAAA,EAAU,iBAAA;AAAA,cACV,KAAA,EAAO,iBAAA;AAAA,cACP,GAAA;AAAA,cACA,OAAA;AAAA,cACA,GAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS;AAAA,aACX;AAAA,YACA,YAAY;AACV,cAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,aAAA,CAAqB,SAAS,aAAa,CAAA;AACzE,cAAA,OAAO,oBAAoB,QAAA,EAAU,EAAE,OAAO,iBAAA,EAAmB,SAAA,EAAW,UAAU,CAAA;AAAA,YACxF,CAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA;AACA,QAAA,OAAO,mBAAA,CAA2B,iBAAA,EAAmB,eAAA,EAAiB,MAAA,EAAQ,gBAAgB,CAAA;AAAA,MAChG;AACA,MAAA,MAAM,gBAAA,GAAmB,OACvB,OAAA,EACA,aAAA,EACA,QAAA,KACG;AACH,QAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,OAAA,EAAS,aAAa,CAAA;AACzD,QAAA,MAAM,iBAAA,GAAoB,uBAAA,CAAwB,SAAA,EAAW,aAAA,EAAe,MAAM,CAAA;AAClF,QAAA,MAAM,OAAA,GAA+B;AAAA,UACnC,UAAA,EAAY,iBAAA;AAAA,UACZ,WAAA,EAAa,mBAAmB,MAAM;AAAA,SACxC;AACA,QAAA,IAAI,OAAA,UAAiB,OAAA,GAAU,OAAA;AAC/B,QAAA,IAAI,aAAA,EAAe,KAAA,EAAO,OAAA,CAAQ,KAAA,GAAQ,aAAA,CAAc,KAAA;AACxD,QAAA,IAAI,aAAA,EAAe,IAAA,EAAM,OAAA,CAAQ,IAAA,GAAO,aAAA,CAAc,IAAA;AACtD,QAAA,IAAI,aAAA,EAAe,kBAAkB,MAAA,EAAW;AAC9C,UAAA,OAAA,CAAQ,kBAAkB,aAAA,CAAc,aAAA;AAAA,QAC1C;AACA,QAAA,MAAM,GAAA,GAAM,oBAAoB,OAAO,CAAA;AACvC,QAAA,MAAM,QAAA,GAAW,eAAA,GAAkB,mBAAA,CAAoB,OAAO,CAAA,GAAI,MAAA;AAClE,QAAA,OAAO,qBAAA;AAAA,UACL,MAAA;AAAA,UACA;AAAA,YACE,SAAA,EAAW,QAAA;AAAA,YACX,QAAA,EAAU,iBAAA;AAAA,YACV,KAAA,EAAO,iBAAA;AAAA,YACP,GAAA;AAAA,YACA,OAAA;AAAA,YACA,GAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS;AAAA,WACX;AAAA,UACA,YAAY;AACV,YAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,aAAA,CAAmB,SAAS,aAAa,CAAA;AACvE,YAAA,OAAO,oBAAoB,QAAA,EAAU,EAAE,OAAO,iBAAA,EAAmB,SAAA,EAAW,UAAU,CAAA;AAAA,UACxF,CAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF,CAAA;AACA,MAAA,OAAO,mBAAA,CAAyB,gBAAA,EAAkB,eAAA,EAAiB,MAAA,EAAQ,gBAAgB,CAAA;AAAA,IAC7F,CAAA;AAAA,IACA,MAAA,CACE,QACA,OAAA,EACA;AACA,MAAA,MAAM,gBAAA,GAAmB,qBAAqB,MAAM,CAAA;AACpD,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AACzB,QAAA,MAAM,iBAAA,GAAoB,OACxB,OAAA,EACA,aAAA,EACA,QAAA,KACG;AACH,UAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,OAAA,EAAS,aAAa,CAAA;AACzD,UAAA,MAAM,iBAAA,GAAoB,uBAAA,CAAwB,SAAA,EAAW,aAAA,EAAe,MAAM,CAAA;AAClF,UAAA,MAAM,OAAA,GAA+B;AAAA,YACnC,UAAA,EAAY,iBAAA;AAAA,YACZ,WAAA,EAAa,wBAAwB,MAAM,CAAA;AAAA,YAC3C,aAAa,OAAA,EAAS,UAAA,GAAa,kBAAA,CAAmB,OAAA,CAAQ,UAAU,CAAA,GAAI;AAAA,WAC9E;AACA,UAAA,IAAI,OAAA,UAAiB,OAAA,GAAU,OAAA;AAC/B,UAAA,IAAI,OAAA,EAAS,UAAA,EAAY,OAAA,CAAQ,WAAA,GAAc,OAAA,CAAQ,UAAA;AACvD,UAAA,IAAI,aAAA,EAAe,KAAA,EAAO,OAAA,CAAQ,KAAA,GAAQ,aAAA,CAAc,KAAA;AACxD,UAAA,IAAI,aAAA,EAAe,IAAA,EAAM,OAAA,CAAQ,IAAA,GAAO,aAAA,CAAc,IAAA;AACtD,UAAA,IAAI,aAAA,EAAe,kBAAkB,MAAA,EAAW;AAC9C,YAAA,OAAA,CAAQ,kBAAkB,aAAA,CAAc,aAAA;AAAA,UAC1C;AACA,UAAA,MAAM,GAAA,GAAM,oBAAoB,OAAO,CAAA;AACvC,UAAA,MAAM,QAAA,GAAW,eAAA,GAAkB,mBAAA,CAAoB,OAAO,CAAA,GAAI,MAAA;AAClE,UAAA,OAAO,qBAAA;AAAA,YACL,MAAA;AAAA,YACA;AAAA,cACE,SAAA,EAAW,QAAA;AAAA,cACX,QAAA,EAAU,iBAAA;AAAA,cACV,KAAA,EAAO,iBAAA;AAAA,cACP,GAAA;AAAA,cACA,OAAA;AAAA,cACA,GAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS;AAAA,aACX;AAAA,YACA,YAAY;AACV,cAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,aAAA,CAAqB,SAAS,aAAa,CAAA;AACzE,cAAA,OAAO,oBAAoB,QAAA,EAAU,EAAE,OAAO,iBAAA,EAAmB,SAAA,EAAW,UAAU,CAAA;AAAA,YACxF,CAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA;AACA,QAAA,OAAO,mBAAA,CAA2B,iBAAA,EAAmB,eAAA,EAAiB,MAAA,EAAQ,gBAAgB,CAAA;AAAA,MAChG;AACA,MAAA,MAAM,gBAAA,GAAmB,OACvB,OAAA,EACA,aAAA,EACA,QAAA,KACG;AACH,QAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,OAAA,EAAS,aAAa,CAAA;AACzD,QAAA,MAAM,iBAAA,GAAoB,uBAAA,CAAwB,SAAA,EAAW,aAAA,EAAe,MAAM,CAAA;AAClF,QAAA,MAAM,OAAA,GAA+B;AAAA,UACnC,UAAA,EAAY,iBAAA;AAAA,UACZ,WAAA,EAAa,mBAAmB,MAAM,CAAA;AAAA,UACtC,aAAa,OAAA,EAAS,UAAA,GAAa,kBAAA,CAAmB,OAAA,CAAQ,UAAU,CAAA,GAAI;AAAA,SAC9E;AACA,QAAA,IAAI,OAAA,UAAiB,OAAA,GAAU,OAAA;AAC/B,QAAA,IAAI,OAAA,EAAS,UAAA,EAAY,OAAA,CAAQ,WAAA,GAAc,OAAA,CAAQ,UAAA;AACvD,QAAA,IAAI,aAAA,EAAe,KAAA,EAAO,OAAA,CAAQ,KAAA,GAAQ,aAAA,CAAc,KAAA;AACxD,QAAA,IAAI,aAAA,EAAe,IAAA,EAAM,OAAA,CAAQ,IAAA,GAAO,aAAA,CAAc,IAAA;AACtD,QAAA,IAAI,aAAA,EAAe,kBAAkB,MAAA,EAAW;AAC9C,UAAA,OAAA,CAAQ,kBAAkB,aAAA,CAAc,aAAA;AAAA,QAC1C;AACA,QAAA,MAAM,GAAA,GAAM,oBAAoB,OAAO,CAAA;AACvC,QAAA,MAAM,QAAA,GAAW,eAAA,GAAkB,mBAAA,CAAoB,OAAO,CAAA,GAAI,MAAA;AAClE,QAAA,OAAO,qBAAA;AAAA,UACL,MAAA;AAAA,UACA;AAAA,YACE,SAAA,EAAW,QAAA;AAAA,YACX,QAAA,EAAU,iBAAA;AAAA,YACV,KAAA,EAAO,iBAAA;AAAA,YACP,GAAA;AAAA,YACA,OAAA;AAAA,YACA,GAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS;AAAA,WACX;AAAA,UACA,YAAY;AACV,YAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,aAAA,CAAmB,SAAS,aAAa,CAAA;AACvE,YAAA,OAAO,oBAAoB,QAAA,EAAU,EAAE,OAAO,iBAAA,EAAmB,SAAA,EAAW,UAAU,CAAA;AAAA,UACxF,CAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF,CAAA;AACA,MAAA,OAAO,mBAAA,CAAyB,gBAAA,EAAkB,eAAA,EAAiB,MAAA,EAAQ,gBAAgB,CAAA;AAAA,IAC7F,CAAA;AAAA,IACA,MAAA,CAAO,QAAgB,OAAA,EAAoC;AACzD,MAAA,MAAM,gBAAA,GAAmB,qBAAqB,MAAM,CAAA;AACpD,MAAA,MAAM,aAAA,GAAgB,OACpB,OAAA,EACA,aAAA,EACA,QAAA,KACG;AACH,QAAA,MAAM,iBAAiB,aAAA,EAAc;AACrC,QAAA,MAAM,OAAA,GAAU,eAAe,UAAA,CAAW,MAAA,GAAS,CAAC,GAAG,cAAA,CAAe,UAAU,CAAA,GAAI,MAAA;AACpF,QAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,OAAA,EAAS,aAAa,CAAA;AACzD,QAAA,MAAM,iBAAA,GAAoB,uBAAA,CAAwB,SAAA,EAAW,aAAA,EAAe,MAAM,CAAA;AAClF,QAAA,MAAM,OAAA,GAA+B;AAAA,UACnC,UAAA,EAAY,iBAAA;AAAA,UACZ,GAAA,EAAK,mBAAmB,MAAM,CAAA;AAAA,UAC9B,UAAA,EAAY,OAAA;AAAA,UACZ,WAAA,EAAa,eAAe,UAAA,IAAc;AAAA,SAC5C;AACA,QAAA,IAAI,cAAA,CAAe,KAAA,EAAO,OAAA,CAAQ,OAAA,GAAU,cAAA,CAAe,KAAA;AAC3D,QAAA,IAAI,cAAA,CAAe,WAAA,KAAgB,MAAA,EAAW,OAAA,CAAQ,eAAe,cAAA,CAAe,WAAA;AACpF,QAAA,IAAI,cAAA,CAAe,QAAA,KAAa,MAAA,EAAW,OAAA,CAAQ,YAAY,cAAA,CAAe,QAAA;AAC9E,QAAA,IAAI,cAAA,CAAe,UAAA,KAAe,MAAA,EAAW,OAAA,CAAQ,cAAc,cAAA,CAAe,UAAA;AAClF,QAAA,IAAI,OAAA,UAAiB,OAAA,GAAU,OAAA;AAC/B,QAAA,MAAM,GAAA,GAAM,oBAAoB,OAAO,CAAA;AACvC,QAAA,MAAM,QAAA,GAAW,kBACb,mBAAA,CAAoB;AAAA,UAClB,KAAA,EAAO,cAAA;AAAA,UACP;AAAA,SACD,CAAA,GACD,MAAA;AACJ,QAAA,OAAO,qBAAA;AAAA,UACL,MAAA;AAAA,UACA;AAAA,YACE,SAAA,EAAW,QAAA;AAAA,YACX,QAAA,EAAU,iBAAA;AAAA,YACV,KAAA,EAAO,iBAAA;AAAA,YACP,GAAA;AAAA,YACA,OAAA;AAAA,YACA,GAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS;AAAA,WACX;AAAA,UACA,YAAY;AACV,YAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,aAAA,CAAqB,SAAS,aAAa,CAAA;AACzE,YAAA,OAAO,oBAAoB,QAAA,EAAU,EAAE,OAAO,iBAAA,EAAmB,SAAA,EAAW,UAAU,CAAA;AAAA,UACxF,CAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF,CAAA;AACA,MAAA,MAAM,QAAA,GAAW,mBAAA,CAA2B,aAAA,EAAe,IAAA,EAAM,QAAQ,gBAAgB,CAAA;AACzF,MAAA,MAAM,cAAc,EAAC;AACrB,MAAA,MAAMA,cAAAA,GAAgB,mBAAA,CAA2C,KAAA,EAAO,YAAA,EAAc,WAAW,CAAA;AACjG,MAAA,MAAA,CAAO,MAAA,CAAO,WAAA,EAAaA,cAAAA,EAAe,QAAQ,CAAA;AAClD,MAAA,OAAO,WAAA;AAAA,IACT,CAAA;AAAA,IACA,OAAO,OAAA,EAA8D;AACnE,MAAA,MAAM,OAAA,GAAU,MAAM,UAAA,CAAW,MAAA,GAAS,CAAC,GAAG,KAAA,CAAM,UAAU,CAAA,GAAI,MAAA;AAClE,MAAA,MAAM,UAAA,GAAa,OAAA,EAAS,UAAA,IAAc,aAAA,CAAc,KAAK,CAAA;AAC7D,MAAA,IAAI,CAAC,UAAA,IAAc,CAAC,OAAA,EAAS,MAAA,EAAQ;AACnC,QAAA,MAAM,IAAI,MAAM,uFAAuF,CAAA;AAAA,MACzG;AACA,MAAA,MAAM,gBAAA,GAAmB,qBAAqB,MAAM,CAAA;AACpD,MAAA,MAAM,aAAA,GAAgB,OACpB,OAAA,EACA,aAAA,EACA,QAAA,KACG;AACH,QAAA,MAAM,iBAAiB,aAAA,EAAc;AACrC,QAAA,MAAM,UAAA,GAAgC;AAAA,UACpC,GAAG,cAAA;AAAA,UACH,UAAA,EAAY,OAAA,GAAU,OAAA,CAAQ,GAAA,CAAI,CAAA,SAAA,MAAc,EAAE,GAAG,SAAA,EAAU,CAAE,CAAA,GAAI;AAAC,SACxE;AACA,QAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,OAAA,EAAS,aAAa,CAAA;AACzD,QAAA,MAAM,iBAAA,GAAoB,uBAAA,CAAwB,SAAA,EAAW,aAAA,EAAe,MAAM,CAAA;AAClF,QAAA,MAAM,OAAA,GAA+B;AAAA,UACnC,UAAA,EAAY,iBAAA;AAAA,UACZ,WAAA,EAAa,UAAA;AAAA,UACb,UAAA,EAAY;AAAA,SACd;AACA,QAAA,IAAI,cAAA,CAAe,KAAA,EAAO,OAAA,CAAQ,OAAA,GAAU,cAAA,CAAe,KAAA;AAC3D,QAAA,IAAI,cAAA,CAAe,WAAA,KAAgB,MAAA,EAAW,OAAA,CAAQ,eAAe,cAAA,CAAe,WAAA;AACpF,QAAA,IAAI,cAAA,CAAe,QAAA,KAAa,MAAA,EAAW,OAAA,CAAQ,YAAY,cAAA,CAAe,QAAA;AAC9E,QAAA,IAAI,cAAA,CAAe,UAAA,KAAe,MAAA,EAAW,OAAA,CAAQ,cAAc,cAAA,CAAe,UAAA;AAClF,QAAA,IAAI,OAAA,UAAiB,OAAA,GAAU,OAAA;AAC/B,QAAA,MAAM,GAAA,GAAM,oBAAoB,OAAO,CAAA;AACvC,QAAA,MAAM,QAAA,GAAW,kBACb,mBAAA,CAAoB;AAAA,UAClB,KAAA,EAAO,UAAA;AAAA,UACP;AAAA,SACD,CAAA,GACD,MAAA;AACJ,QAAA,OAAO,qBAAA;AAAA,UACL,MAAA;AAAA,UACA;AAAA,YACE,SAAA,EAAW,QAAA;AAAA,YACX,QAAA,EAAU,iBAAA;AAAA,YACV,KAAA,EAAO,iBAAA;AAAA,YACP,GAAA;AAAA,YACA,OAAA;AAAA,YACA,GAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS;AAAA,WACX;AAAA,UACA,YAAY;AACV,YAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,aAAA,CAA0B,SAAS,aAAa,CAAA;AAC9E,YAAA,OAAO,oBAAoB,QAAA,EAAU,EAAE,OAAO,iBAAA,EAAmB,SAAA,EAAW,UAAU,CAAA;AAAA,UACxF,CAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF,CAAA;AACA,MAAA,OAAO,mBAAA,CAAgC,aAAA,EAAe,IAAA,EAAM,MAAA,EAAQ,gBAAgB,CAAA;AAAA,IACtF,CAAA;AAAA,IACA,MAAM,MAAA,CAAgB,OAAA,EAA6B,OAAA,EAAoC;AACrF,MAAA,MAAM,WAAW,MAAM,SAAA;AAAA,QACrB,OAAA,IAAW,eAAA;AAAA,QACX,OAAA;AAAA,QACA,aAAA,EAAc;AAAA,QACd,qBAAqB,MAAM;AAAA,OAC7B;AACA,MAAA,OAAO,eAAe,QAAQ,CAAA;AAAA,IAChC,CAAA;AAAA,IACA,MAAM,WAAA,CAAqB,OAAA,EAA6B,OAAA,EAAoC;AAC1F,MAAA,OAAO,OAAA,CAAQ,MAAA,CAA6B,OAAA,EAAS,OAAO,CAAA;AAAA,IAC9D;AAAA,GACD,CAAA;AAED,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,kBAAA,CACP,MAAA,EACA,mBAAA,EACA,YAAA,EACA,MAAA,EACA;AACA,EAAA,MAAM,eAAA,GAAkB,OAAA,CAAQ,YAAA,EAAc,QAAQ,CAAA;AACtD,EAAA,OAAO,eAAe,KAAA,CACpB,KAAA,EACA,OAAA,EAC8B;AAC9B,IAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,EAAK;AACnC,IAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,MAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAAA,IACrD;AACA,IAAA,MAAM,OAAA,GAAU,EAAE,KAAA,EAAO,eAAA,EAAgB;AACzC,IAAA,MAAM,QAAA,GAAW,qBAAqB,MAAM,CAAA;AAC5C,IAAA,OAAO,uBAAA;AAAA,MAAwB,YAAA;AAAA,MAAc,MAC3C,qBAAA;AAAA,QACE,MAAA;AAAA,QACA;AAAA,UACE,SAAA,EAAW,OAAA;AAAA,UACX,QAAA,EAAU,gBAAA;AAAA,UACV,GAAA,EAAK,eAAA;AAAA,UACL,OAAA;AAAA,UACA,GAAA,EAAK,eAAA,GAAkB,qBAAA,CAAsB,eAAe,CAAA,GAAI,MAAA;AAAA,UAChE;AAAA,SACF;AAAA,QACA,YAAY;AACV,UAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,YAAA,CAAoB,SAAS,OAAO,CAAA;AAClE,UAAA,OAAO,mBAAA,CAAoB,QAAA,EAAU,EAAE,SAAA,EAAW,SAAS,CAAA;AAAA,QAC7D,CAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,EACF,CAAA;AACF;AA6MA,IAAM,mBAAA,GAAsB,CAAC,YAAA,EAAc,wBAAwB,CAAA;AACnE,IAAM,2BAAA,GAA8B;AAAA,EAClC,eAAA;AAAA,EACA,oBAAA;AAAA,EACA;AACF,CAAA;AACA,IAAM,wBAAA,GAA2B,CAAC,iBAAA,EAAmB,6BAA6B,CAAA;AAClF,IAAM,wBAAA,GAA2B,CAAC,iBAAA,EAAmB,6BAA6B,CAAA;AAClF,IAAM,2BAAA,GAA8B,CAAC,oBAAA,EAAsB,gCAAgC,CAAA;AAC3F,IAAM,2BAAA,GAA8B,CAAC,oBAAA,EAAsB,gCAAgC,CAAA;AAC3F,IAAM,mBAAA,GAAsB;AAAA,EAC1B,gBAAA;AAAA,EACA,4BAAA;AAAA,EACA,wBAAA;AAAA,EACA;AACF,CAAA;AACA,IAAM,sBAAA,GAAyB,CAAC,eAAA,EAAiB,2BAA2B,CAAA;AAE5E,SAAS,wBAAwB,KAAA,EAAsD;AACrF,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,EAAK;AACnC,EAAA,OAAO,kBAAkB,eAAA,GAAkB,MAAA;AAC7C;AAEA,SAAS,iBAAA,CACP,KACA,IAAA,EACoB;AACpB,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,KAAA,GAAQ,uBAAA,CAAwB,GAAA,CAAI,GAAG,CAAC,CAAA;AAC9C,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,kBAAA,CACP,SACA,SAAA,EACoB;AACpB,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAQ,OAAA,CAA4B,GAAA,KAAQ,UAAA,EAAY;AAC1D,IAAA,OAAO,uBAAA,CAAyB,OAAA,CAA4B,GAAA,CAAI,SAAS,CAAC,CAAA;AAAA,EAC5E;AAEA,EAAA,MAAM,mBAAA,GAAsB,UAAU,WAAA,EAAY;AAClD,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AAClD,IAAA,IAAI,GAAA,CAAI,WAAA,EAAY,KAAM,mBAAA,EAAqB;AAC7C,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,OAAO,wBAAwB,KAAK,CAAA;AAAA,IACtC;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,4BAAA,CACP,SACA,OAAA,EACwC;AACxC,EAAA,MAAM,YAAA,GAAe,uBAAA,CAAwB,OAAA,EAAS,OAAA,EAAS,KAAK,CAAA;AACpE,EAAA,MAAM,aAAA,GACJ,mBAAmB,OAAA,EAAS,cAAA,EAAgB,QAAQ,CAAA,IACpD,kBAAA,CAAmB,OAAA,EAAS,OAAA,EAAS,QAAQ,CAAA;AAE/C,EAAA,MAAM,YAAY,OAAA,EAAS,IAAA;AAC3B,EAAA,MAAM,iBACJ,OAAA,EAAS,MAAA,KAAW,SAAY,OAAA,CAAQ,MAAA,GAAS,SAAS,IAAA,EAAM,EAAA;AAClE,EAAA,MAAM,yBACJ,OAAA,EAAS,cAAA,KAAmB,SACxB,OAAA,CAAQ,cAAA,GACR,SAAS,OAAA,EAAS,oBAAA;AACxB,EAAA,MAAM,mBAAA,GACJ,SAAA,EAAW,WAAA,KAAgB,MAAA,GAAY,UAAU,WAAA,GAAc,YAAA;AACjE,EAAA,MAAM,oBAAA,GACJ,SAAA,EAAW,YAAA,KAAiB,MAAA,GAAY,UAAU,YAAA,GAAe,YAAA;AACnE,EAAA,MAAM,cAAA,GACJ,SAAA,EAAW,MAAA,KAAW,MAAA,GAAY,UAAU,MAAA,GAAS,aAAA;AAEvD,EAAA,MAAM,IAAA,GACJ,cAAc,MAAA,IACd,mBAAA,KAAwB,UACxB,oBAAA,KAAyB,MAAA,IACzB,mBAAmB,MAAA,GACf;AAAA,IACE,GAAI,aAAa,EAAC;AAAA,IAClB,GAAI,mBAAA,KAAwB,MAAA,GACxB,EAAE,WAAA,EAAa,mBAAA,KACf,EAAC;AAAA,IACL,GAAI,oBAAA,KAAyB,MAAA,GACzB,EAAE,YAAA,EAAc,oBAAA,KAChB,EAAC;AAAA,IACL,GAAI,cAAA,KAAmB,MAAA,GAAY,EAAE,MAAA,EAAQ,cAAA,KAAmB,EAAC;AAAA,IACjE,SAAS,SAAA,EAAW,OAAA,GAAU,EAAE,GAAG,SAAA,CAAU,SAAQ,GAAI;AAAA,GAC3D,GACA,MAAA;AAEN,EAAA,IACE,cAAA,KAAmB,MAAA,IACnB,sBAAA,KAA2B,MAAA,IAC3B,OAAA,EAAS,YAAA,KAAiB,MAAA,IAC1B,CAAC,OAAA,EAAS,OAAA,IACV,CAAC,IAAA,EACD;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,cAAA;AAAA,IACR,cAAA,EAAgB,sBAAA;AAAA,IAChB,cAAc,OAAA,EAAS,YAAA;AAAA,IACvB,SAAS,OAAA,EAAS,OAAA,GAAU,EAAE,GAAG,OAAA,CAAQ,SAAQ,GAAI,MAAA;AAAA,IACrD;AAAA,GACF;AACF;AAEA,SAAS,2BAAA,CACP,OACA,KAAA,EACoB;AACpB,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM;AACzC,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,6BAAA,CAA8B,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA;AACvD;AAEA,SAAS,iBAAA,CAAkB,SAAiB,OAAA,EAAyB;AACnE,EAAA,MAAM,oBAAoB,6BAAA,CAA8B,OAAA,EAAS,EAAE,KAAA,EAAO,0BAA0B,CAAA;AACpG,EAAA,OAAO,GAAG,iBAAiB,CAAA,CAAA,EAAI,QAAQ,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAC,CAAA,CAAA;AAC5D;AAEA,SAAS,0BAA0B,OAAA,EAAyB;AAC1D,EAAA,MAAM,oBAAoB,6BAAA,CAA8B,OAAA,EAAS,EAAE,KAAA,EAAO,0BAA0B,CAAA;AACpG,EAAA,MAAM,KAAA,GAAQ,IAAI,GAAA,CAAI,iBAAiB,CAAA;AACvC,EAAA,KAAA,CAAM,QAAA,GAAW,KAAA,CAAM,QAAA,KAAa,QAAA,GAAW,MAAA,GAAS,KAAA;AACxD,EAAA,KAAA,CAAM,WAAW,CAAA,EAAG,KAAA,CAAM,SAAS,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAC,CAAA,YAAA,CAAA;AACtD,EAAA,KAAA,CAAM,MAAA,GAAS,EAAA;AACf,EAAA,KAAA,CAAM,IAAA,GAAO,EAAA;AACb,EAAA,OAAO,MAAM,QAAA,EAAS;AACxB;AAEA,SAAS,yBAAA,CACP,OACA,KAAA,EACoB;AACpB,EAAA,OAAO,2BAAA,CAA4B,OAAO,KAAK,CAAA;AACjD;AAEA,SAAS,mBAAmB,MAAA,EAAkC;AAC5D,EAAA,MAAM,OAAA,GAAU,2BAAA,CAA4B,MAAA,CAAO,GAAA,EAAK,wBAAwB,CAAA;AAEhF,EAAA,OAAO;AAAA,IACL,KAAA,EACE,yBAAA,CAA0B,MAAA,CAAO,EAAA,EAAI,GAAA,EAAK,oBAAoB,CAAA,IAC9D,yBAAA,CAA0B,MAAA,CAAO,OAAA,EAAS,GAAA,EAAK,yBAAyB,CAAA,IACxE,yBAAA,CAA0B,MAAA,CAAO,KAAA,EAAO,oBAAoB,CAAA,IAC5D,yBAAA,CAA0B,MAAA,CAAO,UAAA,EAAY,yBAAyB,CAAA,KACrE,OAAA,GAAU,iBAAA,CAAkB,OAAA,EAAS,IAAI,CAAA,GAAI,MAAA,CAAA;AAAA,IAChD,OAAA,EACE,0BAA0B,MAAA,CAAO,IAAA,EAAM,KAAK,sBAAsB,CAAA,IAClE,yBAAA,CAA0B,MAAA,CAAO,IAAA,EAAM,OAAA,EAAS,sBAAsB,CAAA,IACtE,yBAAA,CAA0B,OAAO,OAAA,EAAS,sBAAsB,MAC/D,OAAA,GAAU,iBAAA,CAAkB,OAAA,EAAS,MAAM,CAAA,GAAI,MAAA,CAAA;AAAA,IAClD,SACE,yBAAA,CAA0B,MAAA,CAAO,IAAA,EAAM,GAAA,EAAK,sBAAsB,CAAA,IAClE,yBAAA,CAA0B,MAAA,CAAO,OAAA,EAAS,sBAAsB,CAAA,KAC/D,OAAA,GAAU,iBAAA,CAAkB,OAAA,EAAS,MAAM,CAAA,GAAI,MAAA,CAAA;AAAA,IAClD,SAAA,EACE,uBAAA,CAAwB,MAAA,CAAO,IAAA,EAAM,KAAK,CAAA,IAC1C,uBAAA,CAAwB,MAAA,CAAO,SAAS,CAAA,KACvC,OAAA,GAAU,yBAAA,CAA0B,OAAO,CAAA,GAAI,MAAA,CAAA;AAAA,IAClD,YACE,yBAAA,CAA0B,MAAA,CAAO,OAAA,EAAS,GAAA,EAAK,yBAAyB,CAAA,IACxE,yBAAA,CAA0B,MAAA,CAAO,UAAA,EAAY,yBAAyB,CAAA,KACrE,OAAA,GAAU,iBAAA,CAAkB,OAAA,EAAS,SAAS,CAAA,GAAI,MAAA;AAAA,GACvD;AACF;AAEA,SAAS,0BAA0B,KAAA,EAAsD;AACvF,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM;AACzC,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,EAAK;AACnC,EAAA,OAAO,kBAAkB,eAAA,GAAkB,MAAA;AAC7C;AAEA,SAAS,4BAA4B,KAAA,EAA0C;AAC7E,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM;AACzC,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,EAAK;AACnC,EAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO,eAAA;AACT;AAEA,SAAS,mBAAA,CAAoB,SAAiC,SAAA,EAA4B;AACxF,EAAA,MAAM,mBAAA,GAAsB,UAAU,WAAA,EAAY;AAClD,EAAA,OAAO,MAAA,CAAO,KAAK,OAAO,CAAA,CAAE,KAAK,CAAA,GAAA,KAAO,GAAA,CAAI,WAAA,EAAY,KAAM,mBAAmB,CAAA;AACnF;AAEA,SAAS,kBAAA,CACP,SACA,IAAA,EACoC;AACpC,EAAA,IAAI,CAAC,OAAA,IAAW,CAAC,IAAA,EAAM;AACrB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO;AAAA,IACL,GAAI,WAAW,EAAC;AAAA,IAChB,GAAI,QAAQ;AAAC,GACf;AACF;AAEA,SAAS,kBAAA,CACP,SACA,IAAA,EACe;AACf,EAAA,IAAI,CAAC,OAAA,IAAW,CAAC,IAAA,EAAM;AACrB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,GAAI,WAAW;AAAC,GAClB;AACA,EAAA,MAAM,aAAA,GAAgB,MAAA;AACtB,EAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAA,IAAQ,EAAE,CAAA,EAAG;AACrD,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA,aAAA,CAAc,GAAG,CAAA,GAAI,KAAA;AAAA,IACvB;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,sBAAA,CACP,SACA,IAAA,EAC2C;AAC3C,EAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,OAAA,EAAS,IAAI,CAAA;AAC/C,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,aAAA,GAAgB,kBAAA,CAAmB,OAAA,EAAS,OAAA,EAAS,MAAM,OAAO,CAAA;AACxE,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,MAAA,CAAO,OAAA,GAAU,aAAA;AAAA,EACnB;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,wBAAA,CACP,SACA,IAAA,EACgD;AAChD,EAAA,OAAO,kBAAA,CAAmB,SAAS,IAAI,CAAA;AACzC;AAEA,SAAS,yBACP,OAAA,EACyC;AACzC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,gBAAgB,OAAA,CAAQ,cAAA;AAAA,IACxB,cAAc,OAAA,CAAQ,YAAA;AAAA,IACtB,SAAS,OAAA,CAAQ,OAAA;AAAA,IACjB,IAAA,EAAM,QAAQ,IAAA,GACV;AAAA,MACE,GAAG,OAAA,CAAQ,IAAA;AAAA,MACX,OAAA,EAAS,QAAQ,IAAA,CAAK,OAAA,GAAU,EAAE,GAAG,OAAA,CAAQ,IAAA,CAAK,OAAA,EAAQ,GAAI;AAAA,KAChE,GACA;AAAA,GACN;AACF;AAEA,SAAS,0BAAA,CACP,MACA,SAAA,EAC0B;AAC1B,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAO;AAAA,MACL,GAAG,IAAA;AAAA,MACH,SAAS,IAAA,CAAK,OAAA,GAAU,EAAE,GAAG,IAAA,CAAK,SAAQ,GAAI,MAAA;AAAA,MAC9C,IAAA,EAAM,KAAK,IAAA,GACP;AAAA,QACE,GAAG,IAAA,CAAK,IAAA;AAAA,QACR,OAAA,EAAS,KAAK,IAAA,CAAK,OAAA,GAAU,EAAE,GAAG,IAAA,CAAK,IAAA,CAAK,OAAA,EAAQ,GAAI;AAAA,OAC1D,GACA,MAAA;AAAA,MACJ,IAAI,IAAA,CAAK,EAAA,GAAK,EAAE,GAAG,IAAA,CAAK,IAAG,GAAI,MAAA;AAAA,MAC/B,SAAS,IAAA,CAAK,OAAA,GAAU,EAAE,GAAG,IAAA,CAAK,SAAQ,GAAI,MAAA;AAAA,MAC9C,MAAM,IAAA,CAAK,IAAA,GAAO,EAAE,GAAG,IAAA,CAAK,MAAK,GAAI,MAAA;AAAA,MACrC,SAAS,IAAA,CAAK,OAAA,GAAU,EAAE,GAAG,IAAA,CAAK,SAAQ,GAAI;AAAA,KAChD;AAAA,EACF;AAEA,EAAA,MAAM,SAAS,kBAAA,CAAmB,IAAA,EAAM,SAAS,CAAA,IAAK,EAAE,GAAG,IAAA,EAAK;AAChE,EAAA,OAAO;AAAA,IACL,GAAG,MAAA;AAAA,IACH,OAAA,EAAS,kBAAA,CAAmB,IAAA,CAAK,OAAA,EAAS,UAAU,OAAO,CAAA;AAAA,IAC3D,IAAA,EAAM,sBAAA,CAAuB,IAAA,CAAK,IAAA,EAAM,UAAU,IAAI,CAAA;AAAA,IACtD,EAAA,EAAI,wBAAA,CAAyB,IAAA,CAAK,EAAA,EAAI,UAAU,EAAE,CAAA;AAAA,IAClD,OAAA,EAAS,wBAAA,CAAyB,IAAA,CAAK,OAAA,EAAS,UAAU,OAAO,CAAA;AAAA,IACjE,IAAA,EAAM,wBAAA,CAAyB,IAAA,CAAK,IAAA,EAAM,UAAU,IAAI,CAAA;AAAA,IACxD,OAAA,EAAS,wBAAA,CAAyB,IAAA,CAAK,OAAA,EAAS,UAAU,OAAO;AAAA,GACnE;AACF;AAEA,SAAS,yBAAA,CACP,MACA,cAAA,EACoC;AACpC,EAAA,IAAI,CAAC,IAAA,IAAQ,cAAA,KAAmB,MAAA,EAAW;AACzC,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM;AAAA,IACJ,GAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAA;AAAA,IACA,GAAG;AAAA,GACL,GAAI,QAAQ,EAAC;AACb,EAAA,MAAM,UAAA,GAAqC;AAAA,IACzC,GAAG;AAAA,GACL;AACA,EAAA,MAAM,eAAA,GAAkB,2BAAA;AAAA,IACtB,OAAO,OAAA,IAAW,cAAA;AAAA,IAClB;AAAA,GACF;AAEA,EAAA,IAAI,oBAAoB,MAAA,EAAW;AACjC,IAAA,UAAA,CAAW,OAAA,GAAU,eAAA;AAAA,EACvB;AACA,EAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,IAAA,UAAA,CAAW,MAAA,GAAS,MAAA;AAAA,EACtB;AACA,EAAA,IAAI,OAAO,gBAAgB,QAAA,EAAU;AACnC,IAAA,UAAA,CAAW,WAAA,GAAc,WAAA;AAAA,EAC3B;AACA,EAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,IAAA,UAAA,CAAW,MAAA,GAAS,MAAA;AAAA,EACtB;AACA,EAAA,IAAI,OAAO,iBAAiB,QAAA,EAAU;AACpC,IAAA,UAAA,CAAW,YAAA,GAAe,YAAA;AAAA,EAC5B;AAEA,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,0BACP,MAAA,EACoB;AACpB,EAAA,MAAM,YAAA,GAAe,mBAAmB,MAAM,CAAA;AAC9C,EAAA,IAAI,CAAC,aAAa,KAAA,EAAO;AACvB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,SAAS,YAAA,CAAa,KAAA;AAAA,IACtB,MAAA,EAAQ,2BAAA,CAA4B,MAAA,CAAO,GAAG,CAAA;AAAA,IAC9C,MAAA,EAAQ,yBAAA,CAA0B,MAAA,CAAO,MAAM,CAAA;AAAA,IAC/C,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,gBAAgB,MAAA,CAAO,cAAA;AAAA,IACvB,cAAc,MAAA,CAAO,YAAA;AAAA,IACrB,OAAA,EAAS,eAAA,CAAgB,MAAA,CAAO,OAAO,CAAA;AAAA,IACvC,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,MAAM,MAAA,CAAO,IAAA;AAAA,IACb,SAAS,YAAA,CAAa,OAAA;AAAA,IACtB,MAAM,MAAA,CAAO,IAAA;AAAA,IACb,SAAS,YAAA,CAAa,OAAA;AAAA,IACtB,WAAW,YAAA,CAAa,SAAA;AAAA,IACxB,YAAY,YAAA,CAAa,UAAA;AAAA,IACzB,cAAc,MAAA,CAAO;AAAA,GACvB;AACF;AAEA,SAAS,sBACP,YAAA,EACkC;AAClC,EAAA,OAAO,sBAAA,CAAuB,yBAAA,CAA0B,YAAY,CAAA,EAAG,YAAY,CAAA;AACrF;AAEA,SAAS,sBAAA,CACP,QACA,YAAA,EACkC;AAClC,EAAA,MAAM,oBAAA,GAAuB,yBAAA,CAA0B,MAAA,CAAO,IAAA,EAAM,OAAO,OAAO,CAAA;AAClF,EAAA,MAAM,cAAA,GAAyC;AAAA,IAC7C,GAAI,MAAA,CAAO,OAAA,IAAW;AAAC,GACzB;AACA,EAAA,IACE,sBAAsB,WAAA,IACtB,CAAC,mBAAA,CAAoB,cAAA,EAAgB,4BAA4B,CAAA,EACjE;AACA,IAAA,cAAA,CAAe,4BAA4B,IAAI,oBAAA,CAAqB,WAAA;AAAA,EACtE;AACA,EAAA,IACE,sBAAsB,MAAA,IACtB,CAAC,mBAAA,CAAoB,cAAA,EAAgB,QAAQ,CAAA,EAC7C;AACA,IAAA,cAAA,CAAe,SAAS,oBAAA,CAAqB,MAAA;AAAA,EAC/C;AACA,EAAA,IACE,sBAAsB,YAAA,IACtB,CAAC,mBAAA,CAAoB,cAAA,EAAgB,6BAA6B,CAAA,EAClE;AACA,IAAA,cAAA,CAAe,6BAA6B,IAAI,oBAAA,CAAqB,YAAA;AAAA,EACvE;AAEA,EAAA,MAAM,UAAU,yBAAA,CAA0B;AAAA,IACxC,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,gBAAgB,MAAA,CAAO,cAAA;AAAA,IACvB,cAAc,MAAA,CAAO,YAAA;AAAA,IACrB,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,OAAA,EAAS;AAAA,GACV,CAAA;AACD,EAAA,MAAM,mBAAA,GAAsB,qBAAA,CAAsB,MAAA,CAAO,YAAY,CAAA;AACrE,EAAA,MAAM,WAAA,GAAc,iBAAA,CAAkB,MAAA,CAAO,YAAY,CAAA;AACzD,EAAA,MAAM,OAAO,gBAAA,CAAiB;AAAA,IAC5B,GAAI,wBAAwB,EAAC;AAAA,IAC7B,GAAI,MAAA,CAAO,YAAA,GAAe,EAAE,YAAA,EAAc,IAAA,KAAS;AAAC,GACrD,CAAA;AAYD,EAAA,SAAS,IAAA,CAKP,cACA,OAAA,EAC0D;AAC1D,IAAA,IAAI,mBAAA,CAAoB,YAAY,CAAA,EAAG;AACrC,MAAA,IAAI,OAAA,EAAS,WAAW,MAAA,EAAW;AACjC,QAAA,MAAM,IAAI,KAAA;AAAA,UACR;AAAA,SACF;AAAA,MACF;AACA,MAAA,OAAO,kBAAA;AAAA,QACL,kCAAkC,YAAY,CAAA;AAAA,QAC9C,OAAA;AAAA,QACA,mBAAA;AAAA,QACA,WAAA;AAAA,QACA,MAAA,CAAO;AAAA,OACT;AAAA,IACF;AAEA,IAAA,MAAM,iBAAA,GAAoB,uBAAA,CAAwB,YAAA,EAAwB,OAAA,EAAS,MAAM,CAAA;AACzF,IAAA,OAAO,kBAAA;AAAA,MACL,iBAAA;AAAA,MACA,OAAA;AAAA,MACA,mBAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAA,CAAO;AAAA,KACT;AAAA,EACF;AACA,EAAA,MAAM,GAAA,GAAuC,CAC3C,EAAA,EACA,IAAA,EACA,OAAA,KACG;AACH,IAAA,MAAM,YAAA,GAAe,GAAG,IAAA,EAAK;AAC7B,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA,IAChD;AACA,IAAA,OAAO,gBAAA;AAAA,MACL,YAAA;AAAA,MACA,IAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,mBAAA;AAAA,MACA,WAAA;AAAA,MACA,qBAAqB,WAAW,CAAA;AAAA,MAChC,OAAA,CAAQ,MAAA,CAAO,YAAA,EAAc,QAAQ;AAAA,KACvC;AAAA,EACF,CAAA;AACA,EAAA,MAAM,KAAA,GAAQ,kBAAA;AAAA,IACZ,OAAA;AAAA,IACA,mBAAA;AAAA,IACA,MAAA,CAAO,YAAA;AAAA,IACP;AAAA,GACF;AACA,EAAA,MAAM,KAAK,cAAA,CAAe,EAAE,IAAA,EAAM,GAAA,EAAK,OAAO,CAAA;AAC9C,EAAA,MAAM,OAAO,gBAAA,CAAiB;AAAA,IAC5B,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,aAAa,oBAAA,EAAsB,WAAA;AAAA,IACnC,QAAQ,oBAAA,EAAsB,MAAA;AAAA,IAC9B,cAAc,oBAAA,EAAsB,YAAA;AAAA,IACpC,cAAc,MAAA,CAAO,YAAA;AAAA,IACrB,OAAO,MAAA,CAAO,SAAA;AAAA,IACd,gBAAA,EAAkB,MAAA,CAAO,IAAA,EAAM,gBAAA,IAAoB;AAAA,GACpD,CAAA;AACD,EAAA,MAAMzB,QAAAA,GAA+C,OACnD,OAAA,KACsC;AACtC,IAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,IAAU,KAAA;AACjC,IAAA,MAAM,YAAA,GAAe,QAAQ,YAAA,IAAgB,MAAA;AAC7C,IAAA,MAAM,OAAA,GAAU,QAAQ,OAAA,IAAW,IAAA;AACnC,IAAA,MAAM,gBAAA,GAAqE;AAAA,MACzE,IAAI,MAAA,CAAO,OAAA;AAAA,MACX,MAAM,MAAA,CAAO,OAAA;AAAA,MACb,MAAM,MAAA,CAAO,OAAA;AAAA,MACb,SAAS,MAAA,CAAO;AAAA,KAClB;AAEA,IAAA,MAAM,eAAA,GAAkB,OAAA,CAAQ,GAAA,IAAO,gBAAA,CAAiB,OAAO,CAAA;AAC/D,IAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,UAAU,OAAO,CAAA,kHAAA;AAAA,OACnB;AAAA,IACF;AAEA,IAAA,MAAM,iBAAA,GAAoB,8BAA8B,eAAA,EAAiB;AAAA,MACvE,KAAA,EAAO,UAAU,OAAO,CAAA,SAAA;AAAA,KACzB,CAAA;AACD,IAAA,MAAM,cAAA,GAAiB,OAAA,CAAQ,GAAA,GAC3B,EAAA,GAAA,CACC,MAAM;AACL,MAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,IAAA,EAAM,IAAA,EAAK;AAChC,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,MAAM,IAAI,MAAM,0EAA0E,CAAA;AAAA,MAC5F;AACA,MAAA,OAAO,KAAK,UAAA,CAAW,GAAG,CAAA,GAAI,IAAA,GAAO,IAAI,IAAI,CAAA,CAAA;AAAA,IAC/C,CAAA,GAAG;AACP,IAAA,MAAM,YAAY,OAAA,CAAQ,GAAA,GACtB,GAAG,iBAAiB,CAAA,EAAG,qBAAqB,OAAA,CAAQ,KAAK,CAAC,CAAA,CAAA,GAC1D,CAAA,EAAG,iBAAiB,CAAA,EAAG,cAAc,GAAG,oBAAA,CAAqB,OAAA,CAAQ,KAAK,CAAC,CAAA,CAAA;AAE/E,IAAA,MAAM,OAAA,GAAkC;AAAA,MACtC,cAAA,EAAgB,oBAAoBK,SAAQ,CAAA;AAAA,MAC5C,GAAI,MAAA,CAAO,OAAA,IAAW,EAAC;AAAA,MACvB,GAAI,OAAA,CAAQ,OAAA,IAAW;AAAC,KAC1B;AAEA,IAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,MAAA,OAAA,CAAQ,MAAA,GAAS,OAAA,CAAQ,MAAA,IAAU,MAAA,CAAO,MAAA;AAC1C,MAAA,OAAA,CAAQ,WAAW,CAAA,GAAI,OAAA,CAAQ,WAAW,KAAK,MAAA,CAAO,MAAA;AACtD,MAAA,IAAI,OAAO,MAAA,IAAU,CAAC,mBAAA,CAAoB,OAAA,EAAS,iBAAiB,CAAA,EAAG;AACrE,QAAA,OAAA,CAAQ,iBAAiB,IAAI,MAAA,CAAO,MAAA;AAAA,MACtC;AACA,MAAA,IAAI,OAAO,MAAA,IAAU,CAAC,mBAAA,CAAoB,OAAA,EAAS,WAAW,CAAA,EAAG;AAC/D,QAAA,OAAA,CAAQ,WAAW,IAAI,MAAA,CAAO,MAAA;AAAA,MAChC;AACA,MAAA,IAAI,OAAO,cAAA,IAAkB,CAAC,mBAAA,CAAoB,OAAA,EAAS,mBAAmB,CAAA,EAAG;AAC/E,QAAA,OAAA,CAAQ,mBAAmB,IAAI,MAAA,CAAO,cAAA;AAAA,MACxC;AACA,MAAA,IAAI,sBAAsB,YAAA,IAAgB,CAAC,mBAAA,CAAoB,OAAA,EAAS,6BAA6B,CAAA,EAAG;AACtG,QAAA,OAAA,CAAQ,6BAA6B,IAAI,oBAAA,CAAqB,YAAA;AAAA,MAChE;AACA,MAAA,IAAI,sBAAsB,WAAA,IAAe,CAAC,mBAAA,CAAoB,OAAA,EAAS,4BAA4B,CAAA,EAAG;AACpG,QAAA,OAAA,CAAQ,4BAA4B,IAAI,oBAAA,CAAqB,WAAA;AAAA,MAC/D;AACA,MAAA,IAAI,sBAAsB,MAAA,IAAU,CAAC,mBAAA,CAAoB,OAAA,EAAS,QAAQ,CAAA,EAAG;AAC3E,QAAA,OAAA,CAAQ,SAAS,oBAAA,CAAqB,MAAA;AAAA,MACxC;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAM,UAAA,GAAa,oBAAA,EAAsB,MAAA,IAAU,MAAA,CAAO,MAAA;AAC1D,MAAA,IAAI,UAAA,IAAc,CAAC,mBAAA,CAAoB,OAAA,EAAS,WAAW,CAAA,EAAG;AAC5D,QAAA,OAAA,CAAQ,MAAA,GAAS,QAAQ,MAAA,IAAU,UAAA;AACnC,QAAA,OAAA,CAAQ,WAAW,CAAA,GAAI,OAAA,CAAQ,WAAW,CAAA,IAAK,UAAA;AAAA,MACjD;AACA,MAAA,IAAI,sBAAsB,WAAA,IAAe,CAAC,mBAAA,CAAoB,OAAA,EAAS,eAAe,CAAA,EAAG;AACvF,QAAA,OAAA,CAAQ,aAAA,GAAgB,CAAA,OAAA,EAAU,oBAAA,CAAqB,WAAW,CAAA,CAAA;AAAA,MACpE;AACA,MAAA,IAAI,sBAAsB,MAAA,IAAU,CAAC,mBAAA,CAAoB,OAAA,EAAS,QAAQ,CAAA,EAAG;AAC3E,QAAA,OAAA,CAAQ,SAAS,oBAAA,CAAqB,MAAA;AAAA,MACxC;AACA,MAAA,IAAI,sBAAsB,YAAA,IAAgB,CAAC,mBAAA,CAAoB,OAAA,EAAS,6BAA6B,CAAA,EAAG;AACtG,QAAA,OAAA,CAAQ,6BAA6B,IAAI,oBAAA,CAAqB,YAAA;AAAA,MAChE;AAAA,IACF;AAEA,IAAA,MAAM,kBAAA,GACJ,OAAA,CAAQ,IAAA,KAAS,MAAA,IACjB,OAAA,CAAQ,IAAA,KAAS,IAAA,IACjB,EAAE,OAAA,CAAQ,IAAA,YAAgB,QAAA,CAAA,IAC1B,EAAE,QAAQ,IAAA,YAAgB,IAAA,CAAA,IAC1B,EAAE,OAAA,CAAQ,IAAA,YAAgB,eAAA,CAAA,IAC1B,EAAE,OAAA,CAAQ,gBAAgB,WAAA,CAAA,IAC1B,CAAC,WAAA,CAAY,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,IAChC,OAAO,QAAQ,IAAA,KAAS,QAAA;AAE1B,IAAA,IAAI,kBAAA,IAAsB,CAAC,mBAAA,CAAoB,OAAA,EAAS,cAAc,CAAA,EAAG;AACvE,MAAA,OAAA,CAAQ,cAAc,CAAA,GAAI,kBAAA;AAAA,IAC5B;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,SAAA,EAAW;AAAA,MACtC,MAAA;AAAA,MACA,OAAA;AAAA,MACA,IAAA,EACE,OAAA,CAAQ,IAAA,KAAS,MAAA,IAAa,QAAQ,IAAA,KAAS,IAAA,GAC3C,MAAA,GACA,kBAAA,GACE,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,IAAI,IAC1B,OAAA,CAAQ,IAAA;AAAA,MACjB,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,aAAa,OAAA,CAAQ;AAAA,KACtB,CAAA;AAED,IAAA,IAAI,iBAAiB,UAAA,EAAY;AAC/B,MAAA,OAAO;AAAA,QACL,IAAI,QAAA,CAAS,EAAA;AAAA,QACb,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,YAAY,QAAA,CAAS,UAAA;AAAA,QACrB,SAAS,QAAA,CAAS,OAAA;AAAA,QAClB,IAAA,EAAM,IAAA;AAAA,QACN,GAAA,EAAK;AAAA,OACP;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,IAAA,EAAK;AACpC,IAAA,MAAM,MAAA,GACJ,YAAA,KAAiB,MAAA,GACb,OAAA,GACA,0BAAA,CAA2B,SAAS,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAC,CAAA;AAE9E,IAAA,OAAO;AAAA,MACL,IAAI,QAAA,CAAS,EAAA;AAAA,MACb,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,YAAY,QAAA,CAAS,UAAA;AAAA,MACrB,SAAS,QAAA,CAAS,OAAA;AAAA,MAClB,IAAA,EAAM,MAAA;AAAA,MACN,GAAA,EAAK;AAAA,KACP;AAAA,EACF,CAAA;AACA,EAAA,MAAM,cAA+D,CAAA,OAAA,KACnE,qBAAA;AAAA,IACE,0BAAA,CAA2B,YAAA,EAAc,wBAAA,CAAyB,OAAO,CAAC;AAAA,GAC5E;AACF,EAAA,MAAM,WAAA,GAA+D,CAAC,OAAA,EAAS,OAAA,KAC7E,qBAAA;AAAA,IACE,0BAAA;AAAA,MACE,YAAA;AAAA,MACA,wBAAA,CAAyB,4BAAA,CAA6B,OAAA,EAAS,OAAO,CAAC;AAAA;AACzE,GACF;AACF,EAAA,MAAM,kBAAmE,CAAA,OAAA,KACvE,qBAAA,CAA+B,0BAAA,CAA2B,YAAA,EAAc,OAAO,CAAC,CAAA;AAElF,EAAA,MAAM,SAAA,GAA8C;AAAA,IAClD,IAAA;AAAA,IACA,EAAA;AAAA,IACA,GAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA,EAAAL,QAAAA;AAAA,IACA,kBAAkB,OAAA,CAAQ,gBAAA;AAAA,IAC1B,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,IAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA,EAAa;AAAA,GACf;AAEA,EAAA,IAAI,MAAA,CAAO,cAAc,oBAAA,EAAsB;AAC7C,IAAA,MAAM,qBAAyE,CAAA,OAAA,KAC7E,qBAAA;AAAA,MACE,0BAAA,CAA2B,YAAA,EAAc,wBAAA,CAAyB,OAAO,CAAC;AAAA,KAC5E;AACF,IAAA,MAAM,kBAAA,GAAyE,CAAC,OAAA,EAAS,OAAA,KACvF,qBAAA;AAAA,MACE,0BAAA;AAAA,QACE,YAAA;AAAA,QACA,wBAAA,CAAyB,4BAAA,CAA6B,OAAA,EAAS,OAAO,CAAC;AAAA;AACzE,KACF;AACF,IAAA,MAAM,qBAAyE,CAAA,OAAA,KAC7E,qBAAA;AAAA,MACE,0BAAA,CAA2B,cAAc,OAAO;AAAA,KAClD;AACF,IAAA,MAAM,aAAA,GAAqD;AAAA,MACzD,GAAG,SAAA;AAAA,MACH,WAAA,EAAa,kBAAA;AAAA,MACb,WAAA,EAAa,kBAAA;AAAA,MACb,WAAA,EAAa,kBAAA;AAAA,MACb,OAAA,EAAS,oBAAoB,OAAA,EAAS;AAAA,QACpC,GAAG,OAAO,YAAA,CAAa,OAAA;AAAA,QACvB,GAAI,OAAO,UAAA,GACP;AAAA,UACE,SAAS,MAAA,CAAO,UAAA;AAAA,UAChB,aAAA,EAAe;AAAA,YAEjB;AAAC,OACuB;AAAA,KAChC;AACA,IAAA,OAAO,aAAA;AAAA,EACT;AAEA,EAAA,OAAO,SAAA;AACT;AAuCO,IAAM,eAAN,MAAmB;AAAA;AAAA,EAExB,OAAO,OAAA,GAA6C;AAClD,IAAA,OAAO,yBAAA,CAA0B,CAAA,MAAA,KAAU,qBAAA,CAAsB,MAAM,CAAC,CAAA;AAAA,EAC1E;AAAA,EAeA,OAAO,eAAA,CACL,OAAA,GAA8C,EAAC,EACf;AAChC,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,IAAO,OAAA,CAAQ,GAAA;AACnC,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,IAAO,iBAAA,CAAkB,KAAK,mBAAmB,CAAA;AACrE,IAAA,MAAM,UAAA,GACJ,OAAA,CAAQ,UAAA,IAAc,iBAAA,CAAkB,KAAK,2BAA2B,CAAA;AAC1E,IAAA,MAAM,OAAA,GACJ,OAAA,CAAQ,OAAA,IAAW,iBAAA,CAAkB,KAAK,wBAAwB,CAAA;AACpE,IAAA,MAAM,OAAA,GACJ,OAAA,CAAQ,OAAA,IAAW,iBAAA,CAAkB,KAAK,wBAAwB,CAAA;AACpE,IAAA,MAAM,SAAA,GACJ,OAAA,CAAQ,SAAA,IAAa,iBAAA,CAAkB,KAAK,2BAA2B,CAAA;AACzE,IAAA,MAAM,UAAA,GACJ,OAAA,CAAQ,UAAA,IAAc,iBAAA,CAAkB,KAAK,2BAA2B,CAAA;AAC1E,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,IAAO,iBAAA,CAAkB,KAAK,mBAAmB,CAAA;AACrE,IAAA,MAAM,MAAA,GACJ,OAAA,CAAQ,MAAA,IAAU,iBAAA,CAAkB,KAAK,sBAAsB,CAAA;AAEjE,IAAA,IAAK,CAAC,GAAA,IAAO,CAAC,UAAA,IAAe,CAAC,GAAA,EAAK;AACjC,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAEA,IAAA,MAAM,EAAE,GAAA,EAAK,IAAA,EAAM,GAAG,eAAc,GAAI,OAAA;AAGxC,IAAA,OAAO,YAAA,CAAa;AAAA,MAClB,GAAG,aAAA;AAAA,MACH,GAAA;AAAA,MACA,UAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA;AAAA,MACA,GAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AACF;AAmCO,SAAS,YAAA,CACd,WAAA,EACA,MAAA,EACA,OAAA,EACgC;AAChC,EAAA,IAAI,OAAO,WAAA,KAAgB,QAAA,IAAY,WAAA,KAAgB,IAAA,IAAQ,gBAAgB,MAAA,EAAW;AACxF,IAAA,OAAO,qBAAA,CAAsB;AAAA,MAC3B,GAAA,EAAK,WAAA;AAAA,MACL,KAAK,MAAA,IAAU,EAAA;AAAA,MACf,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,sBAAsB,WAAW,CAAA;AAC1C;;;ACtpGO,IAAM,OAAA,GAAU;AAAA,EACrB,MAAA,EAAQ,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,EACzB,SAAA,EAAW,EAAE,IAAA,EAAM,WAAA,EAAY;AAAA,EAC/B,UAAA,EAAY,EAAE,IAAA,EAAM,YAAA,EAAa;AAAA,EACjC,QAAA,EAAU,EAAE,IAAA,EAAM,UAAA;AACpB;;;AC3KO,SAAS,YAKd,KAAA,EAA4D;AAC5D,EAAA,OAAO,KAAA;AACT;AAKO,SAAS,aAEd,MAAA,EAAmC;AACnC,EAAA,OAAO,EAAE,MAAA,EAAO;AAClB;AAKO,SAAS,eAEd,OAAA,EAAwC;AACxC,EAAA,OAAO,EAAE,OAAA,EAAQ;AACnB;AAKO,SAAS,eAEd,SAAA,EAA8C;AAC9C,EAAA,OAAO,SAAA;AACT;;;ACiBA,SAAS,oBAAoB,IAAA,EAAmD;AAC9E,EAAA,IAAI,IAAA,KAAS,aAAa,OAAO,MAAA;AACjC,EAAA,IAAI,IAAA,KAAS,QAAQ,OAAO,IAAA;AAC5B,EAAA,OAAO,EAAA;AACT;AAEA,SAASI,WAAS,KAAA,EAA2C;AAC3D,EAAA,OAAO,OAAA,CAAQ,KAAK,CAAA,IAAK,OAAO,UAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,gBAAA,CAAiB,OAAoB,GAAA,EAAsB;AAClE,EAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,QAAA;AAC5B,EAAA,OAAO,QAAA,GAAW,GAAG,CAAA,KAAM,IAAA;AAC7B;AAKO,SAAS,mBAAA,CAId,KAAA,EACA,MAAA,EACA,OAAA,EACkC;AAClC,EAAA,MAAM,MAAA,GAAS,MAAA;AACf,EAAA,IAAI,CAACA,UAAAA,CAAS,MAAM,CAAA,EAAG;AACrB,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,MAAM,IAAA,GAAO,SAAS,WAAA,IAAgB,cAAA;AACtC,EAAA,MAAM,YAAA,GAAe,oBAAoB,IAAI,CAAA;AAC7C,EAAA,MAAM,SAA2B,EAAC;AAElC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AACjD,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,gBAAA,CAAiB,KAAA,EAAO,GAAG,CAAA,EAAG;AAClD,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,YAAA;AACd,MAAA;AAAA,IACF;AACA,IAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AAAA,EAChB;AAEA,EAAA,OAAO,MAAA;AACT;AAKO,SAAS,cAAA,CACd,KAAA,EACA,UAAA,EACA,OAAA,EAC2B;AAC3B,EAAA,MAAM,iBAAA,GAAoB,SAAS,iBAAA,IAAqB,IAAA;AACxD,EAAA,MAAM,cAAA,GAAiB,SAAS,cAAA,IAAkB,IAAA;AAClD,EAAA,MAAM,SAA2B,EAAC;AAElC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,QAAQ,KAAK,MAAA,CAAO,OAAA,CAAQ,UAA8B,CAAA,EAAG;AAC5E,IAAA,IAAI,QAAA,KAAa,UAAa,cAAA,EAAgB;AAC5C,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,qBAAqB,QAAA,KAAa,EAAA,IAAM,gBAAA,CAAiB,KAAA,EAAO,GAAG,CAAA,EAAG;AACxE,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,IAAA;AACd,MAAA;AAAA,IACF;AAEA,IAAA,MAAA,CAAO,GAAG,CAAA,GAAI,QAAA;AAAA,EAChB;AAEA,EAAA,OAAO,MAAA;AACT;AAwBO,SAAS,uBAAmD,KAAA,EAAyC;AAC1G,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,UAAA,CAAW,QAAQ,OAAA,EAAS;AAC1B,MAAA,OAAO,mBAAA,CAAoB,KAAA,EAAO,MAAA,EAAQ,OAAO,CAAA;AAAA,IACnD,CAAA;AAAA,IACA,QAAA,CAAS,QAAQ,OAAA,EAAS;AACxB,MAAA,OAAO,cAAA,CAAe,KAAA,EAAO,MAAA,EAAQ,OAAO,CAAA;AAAA,IAC9C,CAAA;AAAA,IACA,QAAA,CAAS,QAAQ,OAAA,EAAS;AACxB,MAAA,OAAO,cAAA,CAAe,KAAA,EAAO,MAAA,EAAQ,OAAO,CAAA;AAAA,IAC9C;AAAA,GACF;AACF;;;AC7KO,IAAM,aAAA,0BAAuB,sBAAsB,CAAA;AAqD1D,SAAS,oBAQP,MAAA,EAQqF;AACrF,EAAA,OAAO;AAAA,IACL,CAAC,aAAa,GAAG,MAAA;AAAA,IACjB,QAAA,GAAW;AACT,MAAA,OAAO,mBAAA,CAAoB;AAAA,QACzB,GAAG,MAAA;AAAA,QACH,QAAA,EAAU;AAAA,OACX,CAAA;AAAA,IACH,CAAA;AAAA,IACA,KAAqC,UAAA,EAA6B;AAChE,MAAA,OAAO,mBAAA,CAAoB;AAAA,QACzB,GAAG,MAAA;AAAA,QACH;AAAA,OACD,CAAA;AAAA,IACH,CAAA;AAAA,IACA,SAAA,GAAY;AACV,MAAA,OAAO,mBAAA,CAAoB;AAAA,QACzB,GAAG,MAAA;AAAA,QACH,UAAA,EAAY;AAAA,OACb,CAAA;AAAA,IACH,CAAA;AAAA,IACA,SAAA,GAAY;AACV,MAAA,OAAO,mBAAA,CAAoB;AAAA,QACzB,GAAG,MAAA;AAAA,QACH,WAAA,EAAa;AAAA,OACd,CAAA;AAAA,IACH;AAAA,GACF;AACF;AAEO,SAAS,gBAAgB,KAAA,EAA2C;AACzE,EAAA,OAAO,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,YAAY,aAAA,IAAiB,KAAA;AACzE;AAEO,SAAS,gBACd,MAAA,EAC+B;AAC/B,EAAA,OAAO,OAAO,aAAa,CAAA;AAC7B;AAEO,SAAS,MAAA,GAAgF;AAC9F,EAAA,OAAO,mBAAA,CAAoB;AAAA,IACzB,IAAA,EAAM,QAAA;AAAA,IACN,QAAA,EAAU,KAAA;AAAA,IACV,UAAA,EAAY,KAAA;AAAA,IACZ,WAAA,EAAa;AAAA,GACd,CAAA;AACH;AAEO,SAAS,MAAA,GAAgF;AAC9F,EAAA,OAAO,mBAAA,CAAoB;AAAA,IACzB,IAAA,EAAM,QAAA;AAAA,IACN,QAAA,EAAU,KAAA;AAAA,IACV,UAAA,EAAY,KAAA;AAAA,IACZ,WAAA,EAAa;AAAA,GACd,CAAA;AACH;AAEO,SAAS,OAAA,GAAmF;AACjG,EAAA,OAAO,mBAAA,CAAoB;AAAA,IACzB,IAAA,EAAM,SAAA;AAAA,IACN,QAAA,EAAU,KAAA;AAAA,IACV,UAAA,EAAY,KAAA;AAAA,IACZ,WAAA,EAAa;AAAA,GACd,CAAA;AACH;AAEO,SAAS,KACd,MAAA,EACqE;AACrE,EAAA,OAAO,mBAAA,CAAoB;AAAA,IACzB,IAAA,EAAM,MAAA;AAAA,IACN,QAAA,EAAU,KAAA;AAAA,IACV,UAAA,EAAY,KAAA;AAAA,IACZ,WAAA,EAAa,KAAA;AAAA,IACb,UAAA,EAAY;AAAA,GACb,CAAA;AACH;AAEO,SAAS,YACd,MAAA,EACqF;AACrF,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,IAAA,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAAA,EAC7D;AAEA,EAAA,OAAO,mBAAA,CAAoB;AAAA,IACzB,IAAA,EAAM,aAAA;AAAA,IACN,QAAA,EAAU,KAAA;AAAA,IACV,UAAA,EAAY,KAAA;AAAA,IACZ,WAAA,EAAa,KAAA;AAAA,IACb,UAAA,EAAY;AAAA,GACb,CAAA;AACH;;;ACzJA,SAAS,iBAAiB,IAAA,EAAgC;AACxD,EAAA,OAAO,SAAS,QAAA,IAAY,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,aAAa,IAAA,KAAS,aAAA;AAClF;AAEA,SAAS,iBAAiB,MAAA,EAAsC;AAC9D,EAAA,MAAM,MAAA,GAAS,gBAAgB,MAAM,CAAA;AAErC,EAAA,QAAQ,OAAO,IAAA;AAAM,IACnB,KAAK,SAAA;AACH,MAAA,OAAOsB,MAAE,OAAA,EAAQ;AAAA,IACnB,KAAK,QAAA;AACH,MAAA,OAAOA,MAAE,MAAA,EAAO;AAAA,IAClB,KAAK,MAAA;AACH,MAAA,OAAQ,MAAA,CAAO,UAAA,IAAcA,KAAA,CAAE,OAAA,EAAQ;AAAA,IACzC,KAAK,aAAA;AACH,MAAA,IAAI,CAAC,MAAA,CAAO,UAAA,IAAc,MAAA,CAAO,UAAA,CAAW,WAAW,CAAA,EAAG;AACxD,QAAA,OAAOA,MAAE,MAAA,EAAO;AAAA,MAClB;AACA,MAAA,OAAOA,KAAA,CAAE,IAAA,CAAK,MAAA,CAAO,UAAmC,CAAA;AAAA,IAC1D,KAAK,QAAA;AAAA,IACL;AACE,MAAA,OAAOA,MAAE,MAAA,EAAO;AAAA;AAEtB;AAEA,SAAS,aAAA,CAAc,QAAoB,MAAA,EAAsC;AAC/E,EAAA,MAAM,MAAA,GAAS,gBAAgB,MAAM,CAAA;AACrC,EAAA,OAAO,MAAA,CAAO,QAAA,GAAW,MAAA,CAAO,QAAA,EAAS,GAAI,MAAA;AAC/C;AAEA,SAAS,mBAAA,CAAoB,QAAoB,MAAA,EAAsC;AACrF,EAAA,MAAM,MAAA,GAAS,gBAAgB,MAAM,CAAA;AACrC,EAAA,OAAO,OAAO,QAAA,IAAY,MAAA,CAAO,UAAA,GAAa,MAAA,CAAO,UAAS,GAAI,MAAA;AACpE;AAEA,SAAS,sBAAsB,MAAA,EAAsC;AACnE,EAAA,MAAM,MAAA,GAAS,gBAAgB,MAAM,CAAA;AACrC,EAAA,MAAM,IAAA,GAAO,iBAAiB,MAAM,CAAA;AAEpC,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,MAAA,CAAO,QAAA,IAAY,gBAAA,CAAiB,MAAA,CAAO,IAAI,CAAA,EAAG;AACpD,IAAA,MAAA,GAASA,KAAA,CACN,KAAA,CAAM,CAAC,IAAA,EAAMA,MAAE,OAAA,CAAQ,EAAE,CAAC,CAAC,EAC3B,SAAA,CAAU,CAAA,KAAA,KAAS,KAAA,KAAU,EAAA,GAAK,OAAO,KAAK,CAAA;AAAA,EACnD,CAAA,MAAO;AACL,IAAA,MAAA,GAAS,aAAA,CAAc,MAAM,MAAM,CAAA;AAAA,EACrC;AAEA,EAAA,IAAI,MAAA,CAAO,QAAA,IAAY,MAAA,CAAO,UAAA,EAAY;AACxC,IAAA,MAAA,GAAS,OAAO,QAAA,EAAS;AAAA,EAC3B;AAEA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,sBAAA,CACd,OACA,OAAA,EAC8C;AAC9C,EAAA,MAAM,WAAuC,EAAC;AAC9C,EAAA,MAAM,cAA0C,EAAC;AACjD,EAAA,MAAM,cAA0C,EAAC;AACjD,EAAA,MAAM,YAAwC,EAAC;AAE/C,EAAA,KAAA,MAAW,CAAC,UAAA,EAAY,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1D,IAAA,MAAM,MAAA,GAAS,gBAAgB,MAAM,CAAA;AACrC,IAAA,MAAM,IAAA,GAAO,iBAAiB,MAAM,CAAA;AAEpC,IAAA,QAAA,CAAS,UAAU,CAAA,GAAI,aAAA,CAAc,IAAA,EAAM,MAAM,CAAA;AAEjD,IAAA,IAAI,OAAO,WAAA,EAAa;AACtB,MAAA;AAAA,IACF;AAEA,IAAA,WAAA,CAAY,UAAU,CAAA,GAAI,mBAAA,CAAoB,cAAc,IAAA,EAAM,MAAM,GAAG,MAAM,CAAA;AACjF,IAAA,WAAA,CAAY,UAAU,CAAA,GAAI,aAAA,CAAc,IAAA,EAAM,MAAM,EAAE,QAAA,EAAS;AAC/D,IAAA,SAAA,CAAU,UAAU,CAAA,GAAI,qBAAA,CAAsB,MAAM,CAAA;AAAA,EACtD;AAEA,EAAA,MAAM,SAAA,GAAYA,KAAA,CAAE,MAAA,CAAO,QAAQ,CAAA;AACnC,EAAA,MAAM,YAAA,GAAeA,KAAA,CAAE,MAAA,CAAO,WAAW,CAAA;AACzC,EAAA,MAAM,YAAA,GAAeA,KAAA,CAAE,MAAA,CAAO,WAAW,CAAA;AACzC,EAAA,MAAM,UAAA,GAAaA,KAAA,CAChB,MAAA,CAAO,SAAS,CAAA,CAChB,UAAU,CAAA,KAAA,KAAS,cAAA,CAAe,KAAA,EAAO,KAAc,CAAW,CAAA;AAErE,EAAA,OAAO;AAAA,IACL,GAAA,EAAK,SAAA;AAAA,IACL,MAAA,EAAQ,YAAA;AAAA,IACR,MAAA,EAAQ,YAAA;AAAA,IACR,IAAA,EAAM;AAAA,GACR;AACF;;;ACiEA,SAAS,mBAAmB,OAAA,EAAiD;AAC3E,EAAA,KAAA,MAAW,CAAC,UAAA,EAAY,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1D,IAAA,IAAI,CAAC,eAAA,CAAgB,MAAM,CAAA,EAAG;AAC5B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,+BAAA,EAAkC,UAAU,CAAA,CAAA,CAAG,CAAA;AAAA,IACjE;AAAA,EACF;AACF;AAEA,SAAS,yBAAyB,UAAA,EAA4B;AAC5D,EAAA,MAAM,UAAA,GAAa,WAAW,IAAA,EAAK;AACnC,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,MAAM,IAAI,MAAM,8CAA8C,CAAA;AAAA,EAChE;AACA,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,yBAAyB,UAAA,EAA4B;AAC5D,EAAA,MAAM,UAAA,GAAa,WAAW,IAAA,EAAK;AACnC,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,MAAM,IAAI,MAAM,iDAAiD,CAAA;AAAA,EACnE;AACA,EAAA,IAAI,UAAA,CAAW,QAAA,CAAS,GAAG,CAAA,EAAG;AAC5B,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,kBAAA,CAAmB,WAAA,EAAqB,UAAA,EAAqB,kBAAA,EAIpE;AACA,EAAA,MAAM,YAAA,GAAA,CAAgB,UAAA,IAAc,WAAA,EAAa,IAAA,EAAK;AACtD,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAAA,EACrD;AAEA,EAAA,MAAM,QAAA,GAAW,YAAA,CAAa,OAAA,CAAQ,GAAG,CAAA;AACzC,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,WAAA,CAAY,GAAG,CAAA;AAC5C,EAAA,IAAI,QAAA,GAAW,CAAA,IAAK,QAAA,KAAa,OAAA,EAAS;AACxC,IAAA,MAAM,eAAe,YAAA,CAAa,KAAA,CAAM,CAAA,EAAG,QAAQ,EAAE,IAAA,EAAK;AAC1D,IAAA,MAAM,cAAc,YAAA,CAAa,KAAA,CAAM,QAAA,GAAW,CAAC,EAAE,IAAA,EAAK;AAC1D,IAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,WAAA,EAAa;AACjC,MAAA,MAAM,IAAI,MAAM,mEAAmE,CAAA;AAAA,IACrF;AACA,IAAA,IAAI,kBAAA,IAAsB,uBAAuB,YAAA,EAAc;AAC7D,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,cAAA,EAAiB,kBAAkB,CAAA,+BAAA,EAAkC,YAAY,CAAA,CAAA;AAAA,OACnF;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,QAAQ,kBAAA,IAAsB,YAAA;AAAA,MAC9B,KAAA,EAAO,WAAA;AAAA,MACP,aAAA,EAAe,CAAA,EAAG,kBAAA,IAAsB,YAAY,IAAI,WAAW,CAAA;AAAA,KACrE;AAAA,EACF;AAEA,EAAA,IAAI,kBAAA,EAAoB;AACtB,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,kBAAA;AAAA,MACR,KAAA,EAAO,YAAA;AAAA,MACP,aAAA,EAAe,CAAA,EAAG,kBAAkB,CAAA,CAAA,EAAI,YAAY,CAAA;AAAA,KACtD;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,YAAA;AAAA,IACP,aAAA,EAAe;AAAA,GACjB;AACF;AAEA,SAAS,iBAAiB,MAAA,EAA+C;AACvE,EAAA,MAAM,MAAA,GAAS,gBAAgB,MAAM,CAAA;AACrC,EAAA,OAAO;AAAA,IACL,MAAM,MAAA,CAAO,IAAA;AAAA,IACb,YAAY,MAAA,CAAO,UAAA;AAAA,IACnB,UAAU,MAAA,CAAO,QAAA;AAAA,IACjB,YAAY,MAAA,CAAO,UAAA;AAAA,IACnB,aAAa,MAAA,CAAO,WAAA;AAAA,IACpB,YAAY,MAAA,CAAO;AAAA,GACrB;AACF;AAEA,SAAS,iBAAiB,OAAA,EAAoE;AAC5F,EAAA,OAAO,MAAA,CAAO,WAAA;AAAA,IACZ,OAAO,OAAA,CAAQ,OAAO,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,UAAA,EAAY,MAAM,CAAA,KAAM,CAAC,UAAA,EAAY,eAAA,CAAgB,MAAM,CAAA,CAAE,QAAQ,CAAC;AAAA,GACtG;AACF;AAEA,SAAS,uBAAuB,OAAA,EAAgF;AAC9G,EAAA,OAAO,MAAA,CAAO,WAAA;AAAA,IACZ,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,CAAE,IAAI,CAAC,CAAC,UAAA,EAAY,MAAM,MAAM,CAAC,UAAA,EAAY,gBAAA,CAAiB,MAAM,CAAC,CAAC;AAAA,GAC9F;AACF;AAEA,SAAS,aAAA,CAMP,IAAA,EACA,UAAA,EACA,UAAA,EACA,SACA,UAAA,EAC2D;AAC3D,EAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,IAAA,EAAM,UAAA,EAAY,UAAU,CAAA;AAC9D,EAAA,MAAM,QAAQ,WAAA,CAIZ;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,UAAA,EAAY,CAAC,GAAG,UAAU,CAAA;AAAA,MAC1B,QAAA,EAAU,iBAAiB,OAAO,CAAA;AAAA,MAClC,OAAA,EAAS,uBAAuB,OAAO;AAAA;AACzC,GACD,CAAA;AAED,EAAA,MAAM,OAAA,GAAU,sBAAA,CAId,KAAA,EAAsB,OAAO,CAAA;AAE/B,EAAA,OAAO,MAAA,CAAO,OAAO,KAAA,EAAO;AAAA,IAC1B,IAAA,EAAM,OAAA;AAAA,IACN,IAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAY,MAAA,CAAO,MAAA;AAAA,IACnB,WAAW,MAAA,CAAO,KAAA;AAAA,IAClB,eAAe,MAAA,CAAO,aAAA;AAAA,IACtB,OAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH;AAEA,SAAS,oBAAA,CAMP,IAAA,EACA,UAAA,EACA,UAAA,EACA,OAAA,EACsE;AACtE,EAAA,kBAAA,CAAmB,OAAO,CAAA;AAE1B,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAqC,SAAA,EAA4B;AAC/D,MAAA,MAAM,mBAAA,GAAsB,yBAAyB,SAAS,CAAA;AAC9D,MAAA,kBAAA,CAAmB,IAAA,EAAM,qBAAqB,UAAU,CAAA;AACxD,MAAA,OAAO,oBAAA,CAAqB,IAAA,EAAM,mBAAA,EAAwC,UAAA,EAAY,OAAO,CAAA;AAAA,IAC/F,CAAA;AAAA,IACA,OAAuC,cAAA,EAAiC;AACtE,MAAA,MAAM,oBAAA,GAAuB,yBAAyB,cAAc,CAAA;AACpE,MAAA,kBAAA,CAAmB,IAAA,EAAM,YAAY,oBAAoB,CAAA;AACzD,MAAA,OAAO,oBAAA,CAAqB,IAAA,EAAM,UAAA,EAAY,oBAAA,EAAyC,OAAO,CAAA;AAAA,IAChG,CAAA;AAAA,IACA,iBAAA,GAAoB;AAClB,MAAA,OAAO,cAAc,IAAA,EAAM,UAAA,EAAY,UAAA,EAAY,OAAA,EAAS,EAAE,CAAA;AAAA,IAChE,CAAA;AAAA,IACA,cAAc,IAAA,EAA8C;AAC1D,MAAA,OAAO,aAAA,CAAc,IAAA,EAAM,UAAA,EAAY,UAAA,EAAY,SAAS,IAAI,CAAA;AAAA,IAClE;AAAA,GACF;AACF;AAEA,SAASC,mBAAAA,CAKP,IAAA,EACA,UAAA,EACA,UAAA,EACqD;AACrD,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAqC,SAAA,EAA4B;AAC/D,MAAA,MAAM,mBAAA,GAAsB,yBAAyB,SAAS,CAAA;AAC9D,MAAA,kBAAA,CAAmB,IAAA,EAAM,qBAAqB,UAAU,CAAA;AACxD,MAAA,OAAOA,mBAAAA,CAAmB,IAAA,EAAM,mBAAA,EAAwC,UAAU,CAAA;AAAA,IACpF,CAAA;AAAA,IACA,OAAuC,cAAA,EAAiC;AACtE,MAAA,MAAM,oBAAA,GAAuB,yBAAyB,cAAc,CAAA;AACpE,MAAA,kBAAA,CAAmB,IAAA,EAAM,YAAY,oBAAoB,CAAA;AACzD,MAAA,OAAOA,mBAAAA,CAAmB,IAAA,EAAM,UAAA,EAAY,oBAAuC,CAAA;AAAA,IACrF,CAAA;AAAA,IACA,QAA2D,OAAA,EAAmB;AAC5E,MAAA,OAAO,oBAAA,CAAqB,IAAA,EAAM,UAAA,EAAY,UAAA,EAAY,OAAO,CAAA;AAAA,IACnE;AAAA,GACF;AACF;AAEO,SAAS,MAA4B,IAAA,EAAmD;AAC7F,EAAA,IAAI,CAAC,IAAA,CAAK,IAAA,EAAK,EAAG;AAChB,IAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAAA,EACrD;AAEA,EAAA,OAAOA,mBAAAA,CAAmB,IAAA,EAAM,MAAA,EAAW,MAAS,CAAA;AACtD;;;ACzRA,IAAM,qBAAN,MAAoD;AAAA,EAClD,YAA6B,YAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA;AAAA,EAAqB;AAAA,EAElD,KAAA,CACE,aACA,aAAA,EACoC;AACpC,IAAA,MAAM,OAAA,GAAkC;AAAA,MACtC,GAAI,eAAe;AAAC,KACtB;AAEA,IAAA,KAAA,MAAW,CAAC,WAAW,UAAU,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,YAAY,CAAA,EAAG;AACvE,MAAA,MAAM,WAAA,GAAc,cAAc,SAAuB,CAAA;AACzD,MAAA,IAAI,WAAA,KAAgB,MAAA,IAAa,WAAA,KAAgB,IAAA,EAAM;AACrD,QAAA;AAAA,MACF;AACA,MAAA,OAAA,CAAQ,UAAU,CAAA,GAAI,MAAA,CAAO,WAAW,CAAA;AAAA,IAC1C;AAEA,IAAA,OAAO,OAAO,IAAA,CAAK,OAAO,CAAA,CAAE,MAAA,GAAS,IAAI,OAAA,GAAU,MAAA;AAAA,EACrD;AACF,CAAA;AAEA,SAASC,yBAAwB,KAAA,EAAsD;AACrF,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,EAAK;AACnC,EAAA,OAAO,kBAAkB,eAAA,GAAkB,MAAA;AAC7C;AAEA,SAASC,mBAAAA,CACP,SACA,SAAA,EACoB;AACpB,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAQ,OAAA,CAA4B,GAAA,KAAQ,UAAA,EAAY;AAC1D,IAAA,OAAOD,wBAAAA,CAAyB,OAAA,CAA4B,GAAA,CAAI,SAAS,CAAC,CAAA;AAAA,EAC5E;AAEA,EAAA,MAAM,mBAAA,GAAsB,UAAU,WAAA,EAAY;AAClD,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AAClD,IAAA,IAAI,GAAA,CAAI,WAAA,EAAY,KAAM,mBAAA,EAAqB;AAC7C,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,OAAOA,yBAAwB,KAAK,CAAA;AAAA,IACtC;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,SAASE,6BAAAA,CACP,SACA,OAAA,EACwC;AACxC,EAAA,MAAM,YAAA,GAAeF,wBAAAA,CAAwB,OAAA,EAAS,OAAA,EAAS,KAAK,CAAA;AACpE,EAAA,MAAM,aAAA,GACJC,oBAAmB,OAAA,EAAS,cAAA,EAAgB,QAAQ,CAAA,IACpDA,mBAAAA,CAAmB,OAAA,EAAS,OAAA,EAAS,QAAQ,CAAA;AAC/C,EAAA,MAAM,YAAY,OAAA,EAAS,IAAA;AAC3B,EAAA,MAAM,iBACJ,OAAA,EAAS,MAAA,KAAW,SAAY,OAAA,CAAQ,MAAA,GAAS,SAAS,IAAA,EAAM,EAAA;AAClE,EAAA,MAAM,yBACJ,OAAA,EAAS,cAAA,KAAmB,SACxB,OAAA,CAAQ,cAAA,GACR,SAAS,OAAA,EAAS,oBAAA;AACxB,EAAA,MAAM,mBAAA,GACJ,SAAA,EAAW,WAAA,KAAgB,MAAA,GAAY,UAAU,WAAA,GAAc,YAAA;AACjE,EAAA,MAAM,oBAAA,GACJ,SAAA,EAAW,YAAA,KAAiB,MAAA,GAAY,UAAU,YAAA,GAAe,YAAA;AACnE,EAAA,MAAM,cAAA,GACJ,SAAA,EAAW,MAAA,KAAW,MAAA,GAAY,UAAU,MAAA,GAAS,aAAA;AAEvD,EAAA,MAAM,IAAA,GACJ,cAAc,MAAA,IACd,mBAAA,KAAwB,UACxB,oBAAA,KAAyB,MAAA,IACzB,mBAAmB,MAAA,GACf;AAAA,IACE,GAAI,aAAa,EAAC;AAAA,IAClB,GAAI,mBAAA,KAAwB,MAAA,GACxB,EAAE,WAAA,EAAa,mBAAA,KACf,EAAC;AAAA,IACL,GAAI,oBAAA,KAAyB,MAAA,GACzB,EAAE,YAAA,EAAc,oBAAA,KAChB,EAAC;AAAA,IACL,GAAI,cAAA,KAAmB,MAAA,GAAY,EAAE,MAAA,EAAQ,cAAA,KAAmB,EAAC;AAAA,IACjE,SAAS,SAAA,EAAW,OAAA,GAAU,EAAE,GAAG,SAAA,CAAU,SAAQ,GAAI;AAAA,GAC3D,GACA,MAAA;AAEN,EAAA,IACE,cAAA,KAAmB,MAAA,IACnB,sBAAA,KAA2B,MAAA,IAC3B,OAAA,EAAS,YAAA,KAAiB,MAAA,IAC1B,CAAC,OAAA,EAAS,OAAA,IACV,CAAC,IAAA,EACD;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,cAAA;AAAA,IACR,cAAA,EAAgB,sBAAA;AAAA,IAChB,cAAc,OAAA,EAAS,YAAA;AAAA,IACvB,SAAS,OAAA,EAAS,OAAA,GAAU,EAAE,GAAG,OAAA,CAAQ,SAAQ,GAAI,MAAA;AAAA,IACrD;AAAA,GACF;AACF;AAEA,IAAM,oBAAN,MAA8D;AAAA,EAC5D,YAA6B,QAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA,EAAsB;AAAA,EAEnD,YAAA,CAKE,QAAA,EACA,MAAA,EACA,KAAA,EACgD;AAChD,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA;AAC1C,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,QAAQ,CAAA,CAAA,CAAG,CAAA;AAAA,IAClD;AAEA,IAAA,MAAM,SAAA,GAAY,WAAA,CAAY,OAAA,CAAQ,MAAM,CAAA;AAC5C,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmB,MAAM,CAAA,eAAA,EAAkB,QAAQ,CAAA,CAAA,CAAG,CAAA;AAAA,IACxE;AAEA,IAAA,MAAM,QAAA,GAAW,SAAA,CAAU,MAAA,CAAO,KAAK,CAAA;AACvC,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,eAAA,EAAkB,KAAK,CAAA,aAAA,EAAgB,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,IAClE;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEA,gBAAA,CACE,MAAA,EACA,KAAA,EACA,QAAA,EACQ;AACR,IAAA,OAAO,kCAAkC,QAAA,EAAU;AAAA,MACjD,cAAA,EAAgB,MAAA;AAAA,MAChB,aAAA,EAAe;AAAA,KAChB,CAAA;AAAA,EACH;AACF,CAAA;AAEA,IAAM,qBAAA,GAAN,MAAM,sBAAA,CAIyD;AAAA,EACpD,QAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,EAAA;AAAA,EAEQ,UAAA;AAAA,EACA,iBAAA;AAAA,EACA,kBAAA;AAAA,EACA,aAAA;AAAA,EACA,GAAA;AAAA,EACA,MAAA;AAAA,EAEjB,YAAY,KAAA,EAKT;AACD,IAAA,IAAA,CAAK,WAAW,KAAA,CAAM,QAAA;AACtB,IAAA,IAAA,CAAK,MAAM,KAAA,CAAM,GAAA;AACjB,IAAA,IAAA,CAAK,SAAS,KAAA,CAAM,MAAA;AAEpB,IAAA,MAAM,YAAA,GAAgB,KAAA,CAAM,OAAA,EAAS,YAAA,IAAiB,EAAC;AACvD,IAAA,MAAM,aAAA,GAAiB,KAAA,CAAM,OAAA,EAAS,aAAA,IAAiB,EAAC;AAExD,IAAA,IAAA,CAAK,YAAA,GAAe,YAAA;AACpB,IAAA,IAAA,CAAK,aAAA,GAAgB,aAAA;AACrB,IAAA,IAAA,CAAK,kBAAA,GAAqB,IAAI,kBAAA,CAAmB,YAAY,CAAA;AAC7D,IAAA,IAAA,CAAK,iBAAA,GAAoB,IAAI,iBAAA,CAAkB,KAAA,CAAM,QAAQ,CAAA;AAE7D,IAAA,IAAA,CAAK,aAAA,GAAgB;AAAA,MACnB,OAAA,EAAS,MAAM,OAAA,EAAS,OAAA;AAAA,MACxB,MAAA,EAAQ,MAAM,OAAA,EAAS,MAAA;AAAA,MACvB,OAAA,EAAS,MAAM,OAAA,EAAS,OAAA;AAAA,MACxB,YAAA,EAAc,MAAM,OAAA,EAAS,YAAA;AAAA,MAC7B,MAAA,EAAQ,MAAM,OAAA,EAAS,MAAA;AAAA,MACvB,cAAA,EAAgB,MAAM,OAAA,EAAS,cAAA;AAAA,MAC/B,IAAA,EAAM,MAAM,OAAA,EAAS,IAAA;AAAA,MACrB,YAAA;AAAA,MACA,aAAA;AAAA,MACA,YAAA,EAAc,MAAM,OAAA,EAAS;AAAA,KAC/B;AAEA,IAAA,IAAA,CAAK,UAAA,GAAa,YAAA,CAAa,IAAA,CAAK,GAAA,EAAK,KAAK,MAAA,EAAQ;AAAA,MACpD,OAAA,EAAS,KAAK,aAAA,CAAc,OAAA;AAAA,MAC5B,MAAA,EAAQ,KAAK,aAAA,CAAc,MAAA;AAAA,MAC3B,SAAS,IAAA,CAAK,kBAAA,CAAmB,MAAM,IAAA,CAAK,aAAA,CAAc,SAAS,aAAa,CAAA;AAAA,MAChF,YAAA,EAAc,KAAK,aAAA,CAAc,YAAA;AAAA,MACjC,MAAA,EAAQ,KAAK,aAAA,CAAc,MAAA;AAAA,MAC3B,cAAA,EAAgB,KAAK,aAAA,CAAc,cAAA;AAAA,MACnC,IAAA,EAAM,KAAK,aAAA,CAAc,IAAA;AAAA,MACzB,YAAA,EAAc,KAAK,aAAA,CAAc;AAAA,KAClC,CAAA;AACD,IAAA,IAAA,CAAK,EAAA,GAAK,KAAK,UAAA,CAAW,EAAA;AAAA,EAC5B;AAAA,EAaA,IAAA,CAKE,cACA,OAAA,EAC0D;AAC1D,IAAA,MAAM,IAAA,GAAO,KAAK,UAAA,CAAW,IAAA;AAI7B,IAAA,OAAO,IAAA,CAAK,cAAc,OAAO,CAAA;AAAA,EACnC;AAAA,EAEA,GAAA,CACE,EAAA,EACA,IAAA,EACA,OAAA,EAC+B;AAC/B,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,GAAA,CAAe,EAAA,EAAI,MAAM,OAAO,CAAA;AAAA,EACzD;AAAA,EAEA,KAAA,CACE,OACA,OAAA,EAC8B;AAC9B,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,KAAA,CAAW,KAAA,EAAO,OAAO,CAAA;AAAA,EAClD;AAAA,EAEA,QACE,OAAA,EACmC;AACnC,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,OAAA,CAAW,OAAO,CAAA;AAAA,EAC3C;AAAA,EAEA,iBACE,OAAA,EACwC;AACxC,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,gBAAA,CAAiB,OAAO,CAAA;AAAA,EACjD;AAAA,EAEA,YAAY,OAAA,EAAyF;AACnG,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,GAAI,IAAA,CAAK,aAAA,CAAc,OAAA,IAAW,EAAC;AAAA,MACnC,GAAI,OAAA,EAAS,OAAA,IAAW;AAAC,KAC3B;AACA,IAAA,MAAM,IAAA,GACJ,IAAA,CAAK,aAAA,CAAc,IAAA,IAAQ,SAAS,IAAA,GAChC;AAAA,MACE,GAAI,IAAA,CAAK,aAAA,CAAc,IAAA,IAAQ,EAAC;AAAA,MAChC,GAAI,OAAA,EAAS,IAAA,IAAQ,EAAC;AAAA,MACtB,SACE,IAAA,CAAK,aAAA,CAAc,MAAM,OAAA,IAAW,OAAA,EAAS,MAAM,OAAA,GAC/C;AAAA,QACE,GAAI,IAAA,CAAK,aAAA,CAAc,IAAA,EAAM,WAAW,EAAC;AAAA,QACzC,GAAI,OAAA,EAAS,IAAA,EAAM,OAAA,IAAW;AAAC,OACjC,GACA;AAAA,KACR,GACA,MAAA;AAEN,IAAA,OAAO,IAAI,sBAAA,CAAsB;AAAA,MAC/B,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,KAAK,IAAA,CAAK,GAAA;AAAA,MACV,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,OAAA,EAAS;AAAA,QACP,GAAG,IAAA,CAAK,aAAA;AAAA,QACR,SAAS,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,MAAA,GAAS,IAAI,OAAA,GAAU,MAAA;AAAA,QACrD,IAAA;AAAA,QACA,cAAc,IAAA,CAAK,YAAA;AAAA,QACnB,aAAA,EAAe;AAAA,UACb,GAAG,IAAA,CAAK;AAAA,SACV;AAAA,QACA,GAAI,SAAS,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,EAAQ,OAAA,CAAQ,MAAA,EAAO,GAAI,EAAC;AAAA,QAClE,GAAI,SAAS,cAAA,KAAmB,MAAA,GAC5B,EAAE,cAAA,EAAgB,OAAA,CAAQ,cAAA,EAAe,GACzC,EAAC;AAAA,QACL,GAAI,SAAS,YAAA,KAAiB,MAAA,GAC1B,EAAE,YAAA,EAAc,OAAA,CAAQ,YAAA,EAAa,GACrC;AAAC;AACP,KACD,CAAA;AAAA,EACH;AAAA,EAEA,WAAA,CACE,SACA,OAAA,EACmD;AACnD,IAAA,OAAO,IAAA,CAAK,WAAA,CAAYC,6BAAAA,CAA6B,OAAA,EAAS,OAAO,CAAC,CAAA;AAAA,EACxE;AAAA,EAEA,kBAAkB,OAAA,EAAuF;AACvG,IAAA,OAAO,IAAI,sBAAA,CAAsB;AAAA,MAC/B,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,KAAK,IAAA,CAAK,GAAA;AAAA,MACV,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,OAAA,EAAS;AAAA,QACP,GAAG,IAAA,CAAK,aAAA;AAAA,QACR,cAAc,IAAA,CAAK,YAAA;AAAA,QACnB,aAAA,EAAe;AAAA,UACb,GAAG,IAAA,CAAK,aAAA;AAAA,UACR,GAAI,WAAW;AAAC,SAClB;AAAA,QACA,YAAA,EAAc,KAAK,aAAA,CAAc;AAAA;AACnC,KACD,CAAA;AAAA,EACH;AAAA,EAEA,SAAA,CAKE,QAAA,EACA,MAAA,EACA,KAAA,EAYA;AACA,IAAA,MAAM,WAAW,IAAA,CAAK,iBAAA,CAAkB,YAAA,CAAa,QAAA,EAAU,QAAQ,KAAK,CAAA;AAC5E,IAAA,MAAM,YAAY,IAAA,CAAK,iBAAA,CAAkB,gBAAA,CAAiB,MAAA,EAAQ,OAAO,QAAuB,CAAA;AAChG,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAIrB,SAAS,CAAA;AAAA,EAYb;AACF,CAAA;AAuBO,SAAS,iBAAA,CAId,QAAA,EACA,GAAA,EACA,MAAA,EACA,OAAA,EACiD;AACjD,EAAA,OAAO,IAAI,qBAAA,CAAsB;AAAA,IAC/B,QAAA;AAAA,IACA,GAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH;;;ACxgBO,IAAM,wBAAA,GAA2B,CAAC,QAAQ;AAEjD,SAAS,mBAAmB,KAAA,EAAuD;AACjF,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,MAAM,SAAS,OAAO,KAAA,KAAU,QAAA,GAAW,CAAC,KAAK,CAAA,GAAI,KAAA;AACrD,EAAA,OAAO,MAAA,CAAO,QAAQ,CAAA,KAAA,KAAS,MAAA,CAAO,KAAK,CAAA,CAAE,KAAA,CAAM,GAAG,CAAC,CAAA;AACzD;AAMO,SAAS,yBACd,KAAA,EACU;AACV,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAE7B,EAAA,KAAA,MAAW,KAAA,IAAS,kBAAA,CAAmB,KAAK,CAAA,EAAG;AAC7C,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,EAAK;AAC1B,IAAA,IAAI,CAAC,MAAA,IAAU,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,EAAG;AAC/B,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,IAAI,MAAM,CAAA;AACf,IAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AAAA,EACrB;AAEA,EAAA,OAAO,QAAQ,MAAA,GAAS,CAAA,GAAI,OAAA,GAAU,CAAC,GAAG,wBAAwB,CAAA;AACpE;AAKO,SAAS,uBAAuB,cAAA,EAAmD;AACxF,EAAA,IAAI,cAAA,CAAe,SAAS,UAAA,EAAY;AACtC,IAAA,OAAO,wBAAA,CAAyB,eAAe,OAAO,CAAA;AAAA,EACxD;AAEA,EAAA,OAAO,CAAC,GAAG,wBAAwB,CAAA;AACrC;;;ACtCA,SAAS,uBAAuB,KAAA,EAAmC;AACjE,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,OAAO,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI,OAAA,GAAU,MAAA;AACxC;AAEO,SAAS,wBACd,KAAA,EACU;AACV,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,KAAA,CAAM,IAAA;AAAA,MACX,IAAI,GAAA;AAAA,QACF,KAAA,CACG,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,sBAAsB,CAAA,CAC1B,MAAA,CAAO,CAAC,KAAA,KAA2B,OAAA,CAAQ,KAAK,CAAC;AAAA;AACtD,KACF;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,KAAA,CAAM,IAAA;AAAA,MACX,IAAI,GAAA;AAAA,QACF,MACG,GAAA,CAAI,CAAA,KAAA,KAAS,OAAO,KAAA,KAAU,WAAW,sBAAA,CAAuB,KAAK,CAAA,GAAI,MAAS,EAClF,MAAA,CAAO,CAAC,KAAA,KAA2B,OAAA,CAAQ,KAAK,CAAC;AAAA;AACtD,KACF;AAAA,EACF;AAEA,EAAA,OAAO,EAAC;AACV;AAEA,SAAS,oBAAA,CACP,UAAA,EACA,SAAA,EACA,QAAA,EACS;AACT,EAAA,MAAM,cAAA,GAAiB,QAAA,CAAS,OAAA,CAAQ,GAAG,CAAA;AAC3C,EAAA,IAAI,iBAAiB,CAAA,EAAG;AACtB,IAAA,OAAO,SAAA,KAAc,QAAA;AAAA,EACvB;AAEA,EAAA,MAAM,iBAAiB,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,cAAc,EAAE,IAAA,EAAK;AAC9D,EAAA,MAAM,gBAAgB,QAAA,CAAS,KAAA,CAAM,cAAA,GAAiB,CAAC,EAAE,IAAA,EAAK;AAC9D,EAAA,OAAO,cAAA,KAAmB,cAAc,aAAA,KAAkB,SAAA;AAC5D;AAEA,SAAS,eAAA,CACP,UAAA,EACA,SAAA,EACA,MAAA,EACS;AACT,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,aAAA,CAAc,MAAA,KAAW,CAAA,IAC5C,MAAA,CAAO,aAAA,CAAc,IAAA,CAAK,CAAA,QAAA,KAAY,oBAAA,CAAqB,UAAA,EAAY,SAAA,EAAW,QAAQ,CAAC,CAAA;AAChG,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAO,CAAC,OAAO,aAAA,CAAc,IAAA,CAAK,cAAY,oBAAA,CAAqB,UAAA,EAAY,SAAA,EAAW,QAAQ,CAAC,CAAA;AACrG;AAEA,SAAS,gBAAgB,MAAA,EAAkD;AACzE,EAAA,OAAO,OAAO,aAAA,CAAc,MAAA,GAAS,CAAA,IAAK,MAAA,CAAO,cAAc,MAAA,GAAS,CAAA;AAC1E;AAEO,SAAS,2BAAA,CACd,UACA,MAAA,EACuB;AACvB,EAAA,IAAI,CAAC,eAAA,CAAgB,MAAM,CAAA,EAAG;AAC5B,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,MAAM,UAA+C,EAAC;AAEtD,EAAA,KAAA,MAAW,CAAC,YAAY,MAAM,CAAA,IAAK,OAAO,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,EAAG;AACnE,IAAA,MAAM,SAAS,MAAA,CAAO,WAAA;AAAA,MACpB,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,MAAM,EAAE,MAAA,CAAO,CAAC,CAAC,SAAS,CAAA,KAAM,eAAA,CAAgB,UAAA,EAAY,SAAA,EAAW,MAAM,CAAC;AAAA,KACtG;AAEA,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,WAAW,CAAA,EAAG;AACpC,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,UAAU,CAAA,GAAI;AAAA,MACpB,GAAG,MAAA;AAAA,MACH;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,WAAW,CAAA,EAAG;AACrC,IAAA,MAAM,YAAA,GAAe,MAAA,CAAO,aAAA,CAAc,MAAA,GAAS,CAAA,GAC/C,CAAA,eAAA,EAAkB,MAAA,CAAO,aAAA,CAAc,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,GACjD,EAAA;AACJ,IAAA,MAAM,YAAA,GAAe,MAAA,CAAO,aAAA,CAAc,MAAA,GAAS,CAAA,GAC/C,CAAA,eAAA,EAAkB,MAAA,CAAO,aAAA,CAAc,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,GACjD,EAAA;AACJ,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,iEAAA,EAAoE,YAAY,CAAA,EAAG,YAAY,CAAA;AAAA,KACjG;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,GAAG,QAAA;AAAA,IACH;AAAA,GACF;AACF;;;ACxEA,SAAS,mBAAmB,GAAA,EAAiC;AAC3D,EAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,CAAC,QAAQ,GAAA,EAAK;AAClD,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AAC7B,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,OAAO,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI,OAAA,GAAU,MAAA;AACxC;AAEA,SAAS,mBAAmB,GAAA,EAAoB;AAC9C,EAAA,MAAM,IAAI,KAAA;AAAA,IACR,CAAA,yBAAA,EAA4B,GAAG,CAAA,0BAAA,EAA6B,GAAG,CAAA,4BAAA;AAAA,GACjE;AACF;AAEA,SAAS,eAAA,CACP,GAAA,EACA,OAAA,EACA,QAAA,EACe;AACf,EAAA,MAAM,QAAA,GAAW,mBAAmB,GAAG,CAAA;AACvC,EAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,IAAA,IAAI,OAAA,EAAS,YAAY,MAAA,EAAW;AAClC,MAAA,OAAO,OAAA,CAAQ,OAAA;AAAA,IACjB;AACA,IAAA,IAAI,SAAS,QAAA,EAAU;AACrB,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,OAAO,mBAAmB,GAAG,CAAA;AAAA,EAC/B;AAEA,EAAA,OAAO,SAAS,QAAQ,CAAA;AAC1B;AAEA,SAAS,gBAAA,CAAiB,KAAa,OAAA,EAAyD;AAC9F,EAAA,OAAO,eAAA,CAAgB,GAAA,EAAK,OAAA,EAAS,CAAA,KAAA,KAAS,KAAK,CAAA;AACrD;AAEA,SAAS,iBAAA,CAAkB,KAAa,OAAA,EAA2D;AACjG,EAAA,OAAO,gBAAgB,GAAA,EAAK,OAAA,EAAS,WAASd,iBAAAA,CAAiB,KAAA,EAAO,KAAK,CAAC,CAAA;AAC9E;AAEA,SAAS,cAAA,CAAe,KAAa,OAAA,EAAyD;AAC5F,EAAA,OAAO,eAAA,CAAgB,GAAA,EAAK,OAAA,EAAS,CAAA,KAAA,KAAS;AAC5C,IAAA,MAAM,SAAA,GAAY,SAAS,SAAA,IAAa,GAAA;AACxC,IAAA,OAAO,KAAA,CACJ,MAAM,SAAS,CAAA,CACf,IAAI,CAAA,KAAA,KAAS,KAAA,CAAM,IAAA,EAAM,CAAA,CACzB,MAAA,CAAO,CAAC,KAAA,EAAO,KAAA,EAAO,YAAY,KAAA,CAAM,MAAA,GAAS,KAAK,OAAA,CAAQ,OAAA,CAAQ,KAAK,CAAA,KAAM,KAAK,CAAA;AAAA,EAC3F,CAAC,GAAG,KAAA,EAAM;AACZ;AAEA,SAAS,cAAA,CAAkB,KAAa,OAAA,EAAqD;AAC3F,EAAA,OAAO,eAAA,CAAgB,GAAA,EAAK,OAAA,EAAS,CAAA,KAAA,KAAS;AAC5C,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,IACzB,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,GAAG,CAAA,0BAAA,EAA6B,OAAO,CAAA,CAAE,CAAA;AAAA,IACvF;AAAA,EACF,CAAC,CAAA;AACH;AAEA,SAAS,eAAA,CACP,GAAA,EACA,aAAA,EACA,OAAA,EACe;AACf,EAAA,OAAO,eAAA,CAAgB,GAAA,EAAK,OAAA,EAAS,CAAA,KAAA,KAAS;AAC5C,IAAA,IAAI,aAAA,CAAc,QAAA,CAAS,KAAU,CAAA,EAAG;AACtC,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,yBAAA,EAA4B,GAAG,CAAA,iBAAA,EAAoB,aAAA,CAAc,KAAK,IAAI,CAAC,eAAe,KAAK,CAAA,CAAA;AAAA,KACjG;AAAA,EACF,CAAC,CAAA;AACH;AAOA,SAAS,kBAAA,CACP,KACA,OAAA,EACoB;AACpB,EAAA,OAAO,gBAAA,CAAiB,KAAK,OAAO,CAAA;AACtC;AAOA,SAAS,mBAAA,CACP,KACA,OAAA,EACqB;AACrB,EAAA,OAAO,iBAAA,CAAkB,KAAK,OAAO,CAAA;AACvC;AAOA,SAAS,gBAAA,CACP,KACA,OAAA,EACsB;AACtB,EAAA,OAAO,cAAA,CAAe,KAAK,OAAO,CAAA;AACpC;AAOA,SAAS,gBAAA,CACP,KACA,OAAA,EACe;AACf,EAAA,OAAO,cAAA,CAAe,KAAK,OAAO,CAAA;AACpC;AAYA,SAAS,iBAAA,CACP,GAAA,EACA,aAAA,EACA,OAAA,EACe;AACf,EAAA,OAAO,eAAA,CAAgB,GAAA,EAAK,aAAA,EAAe,OAAO,CAAA;AACpD;AAOO,IAAM,YAAA,GAAe,MAAA,CAAO,MAAA,CAAO,kBAAA,EAAoB;AAAA,EAC5D,OAAA,EAAS,mBAAA;AAAA,EACT,IAAA,EAAM,gBAAA;AAAA,EACN,IAAA,EAAM,gBAAA;AAAA,EACN,KAAA,EAAO;AACT,CAAC;;;ACtMD,IAAM,YAAA,uBAAmB,GAAA,CAAI;AAAA,EAC3B,MAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,IAAM,oBAAA,uBAA2B,GAAA,CAAI;AAAA,EACnC,MAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,IAAM,UAAA,uBAAiB,GAAA,CAAI;AAAA,EACzB,MAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,mBAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,SAAS,mBAAmB,MAAA,EAAqC;AAC/D,EAAA,MAAM,aAAa,MAAA,CAAO,OAAA,IAAW,OAAO,QAAA,EAAU,WAAA,GAAc,IAAA,EAAK;AACzE,EAAA,IAAI,OAAO,eAAA,GAAkB,CAAA,IAAK,SAAA,CAAU,UAAA,CAAW,GAAG,CAAA,EAAG;AAC3D,IAAA,OAAO,SAAA,CAAU,MAAM,CAAC,CAAA;AAAA,EAC1B;AACA,EAAA,OAAO,SAAA;AACT;AAEA,SAAS,aAAA,CAAc,UAAkB,KAAA,EAAuB;AAC9D,EAAA,IAAI,OAAA,GAAU,QAAA;AACd,EAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,KAAA,EAAO,SAAS,CAAA,EAAG;AAC7C,IAAA,OAAA,GAAU,SAAS,OAAO,CAAA,CAAA,CAAA;AAAA,EAC5B;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,kBAAkB,MAAA,EAAqC;AAC9D,EAAA,MAAM,KAAA,GAAQ,mBAAmB,MAAM,CAAA;AAEvC,EAAA,IAAI,YAAA,CAAa,GAAA,CAAI,KAAK,CAAA,EAAG;AAC3B,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,IAAI,oBAAA,CAAqB,GAAA,CAAI,KAAK,CAAA,EAAG;AACnC,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,KAAU,MAAA,IAAU,KAAA,KAAU,SAAA,EAAW;AAC3C,IAAA,OAAO,SAAA;AAAA,EACT;AAEA,EAAA,IAAI,UAAU,OAAA,EAAS;AACrB,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,KAAU,MAAA,IAAU,KAAA,KAAU,OAAA,EAAS;AACzC,IAAA,OAAO,yBAAA;AAAA,EACT;AAEA,EAAA,IAAI,UAAA,CAAW,GAAA,CAAI,KAAK,CAAA,EAAG;AACzB,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,IAAI,MAAM,QAAA,CAAS,OAAO,KAAK,KAAA,CAAM,QAAA,CAAS,YAAY,CAAA,EAAG;AAC3D,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,OAAO,SAAA;AACT;AAEA,SAAS,qBAAqB,MAAA,EAAqC;AACjE,EAAA,IAAI,MAAA,CAAO,aAAa,MAAA,EAAQ;AAC9B,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,UAAA,IAAc,EAAC;AACrC,IAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,MAAA,OAAO,QAAA;AAAA,IACT;AACA,IAAA,OAAO,OAAO,GAAA,CAAI,CAAA,KAAA,KAAS,CAAA,CAAA,EAAI,KAAA,CAAM,QAAQ,KAAA,EAAO,MAAM,CAAA,CAAE,OAAA,CAAQ,MAAM,KAAK,CAAC,CAAA,CAAA,CAAG,CAAA,CAAE,KAAK,KAAK,CAAA;AAAA,EACjG;AAEA,EAAA,IAAI,MAAA,CAAO,aAAa,WAAA,EAAa;AACnC,IAAA,OAAO,yBAAA;AAAA,EACT;AAEA,EAAA,IAAI,MAAA,CAAO,aAAa,QAAA,IAAY,MAAA,CAAO,aAAa,OAAA,IAAW,MAAA,CAAO,aAAa,YAAA,EAAc;AACnG,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,OAAO,kBAAkB,MAAM,CAAA;AACjC;AAEO,SAAS,0BAA0B,MAAA,EAAqC;AAC7E,EAAA,MAAM,QAAA,GAAW,qBAAqB,MAAM,CAAA;AAC5C,EAAA,IAAI,CAAC,MAAA,CAAO,eAAA,IAAmB,MAAA,CAAO,mBAAmB,CAAA,EAAG;AAC1D,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,OAAO,aAAA,CAAc,QAAA,EAAU,MAAA,CAAO,eAAe,CAAA;AACvD;;;ACpHA,IAAM,sBAAA,GAAyB,WAAA;AAExB,IAAM,4BAAA,GAA+B;AAAA,EAC1C,sBAAA,EAAwB,wBAAA;AAAA,EACxB,gBAAA,EAAkB,kBAAA;AAAA,EAClB,cAAA,EAAgB;AAClB;AAwLA,SAAS,WAAW,KAAA,EAAuB;AACzC,EAAA,OAAO,KAAA,CAAM,MAAA,GAAS,CAAA,GAAI,CAAA,EAAG,MAAM,CAAC,CAAA,EAAG,WAAA,EAAa,CAAA,EAAG,KAAA,CAAM,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,GAAK,KAAA;AAC5E;AAEA,SAAS,uBAAA,CACP,IAAA,EACA,KAAA,EACA,UAAA,EACQ;AACR,EAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,EAAG,IAAI,IAAI,kBAAA,CAAmB,KAAK,CAAC,CAAA,CAAE,CAAA;AACrD,EAAA,MAAM,SAAA,uBAAgB,GAAA,CAAI;AAAA,IACxB,QAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,IAAI,UAAA,CAAW,WAAW,MAAA,EAAW;AACnC,IAAA,KAAA,CAAM,KAAK,CAAA,QAAA,EAAW,IAAA,CAAK,MAAM,UAAA,CAAW,MAAM,CAAC,CAAA,CAAE,CAAA;AAAA,EACvD;AACA,EAAA,IAAI,UAAA,CAAW,mBAAmB,IAAA,EAAM;AACtC,IAAA,KAAA,CAAM,KAAK,CAAA,QAAA,EAAW,UAAA,CAAW,OAAA,CAAQ,WAAA,EAAa,CAAA,CAAE,CAAA;AAAA,EAC1D;AACA,EAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,OAAA,EAAU,UAAA,CAAW,MAAM,CAAA,CAAE,CAAA;AAAA,EAC1C;AACA,EAAA,IAAI,WAAW,IAAA,EAAM;AACnB,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,KAAA,EAAQ,UAAA,CAAW,IAAI,CAAA,CAAE,CAAA;AAAA,EACtC;AACA,EAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,IAAA,KAAA,CAAM,KAAK,QAAQ,CAAA;AAAA,EACrB;AACA,EAAA,IAAI,WAAW,QAAA,EAAU;AACvB,IAAA,KAAA,CAAM,KAAK,UAAU,CAAA;AAAA,EACvB;AACA,EAAA,IAAI,WAAW,WAAA,EAAa;AAC1B,IAAA,KAAA,CAAM,KAAK,aAAa,CAAA;AAAA,EAC1B;AACA,EAAA,IAAI,WAAW,QAAA,EAAU;AACvB,IAAA,KAAA,CAAM,KAAK,CAAA,SAAA,EAAY,UAAA,CAAW,UAAA,CAAW,QAAQ,CAAC,CAAA,CAAE,CAAA;AAAA,EAC1D;AAEA,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,QAAQ,KAAK,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,EAAG;AACxD,IAAA,IAAI,SAAA,CAAU,IAAI,GAAG,CAAA,IAAK,aAAa,MAAA,IAAa,QAAA,KAAa,IAAA,IAAQ,QAAA,KAAa,KAAA,EAAO;AAC3F,MAAA;AAAA,IACF;AACA,IAAA,IAAI,aAAa,IAAA,EAAM;AACrB,MAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AACd,MAAA;AAAA,IACF;AACA,IAAA,KAAA,CAAM,KAAK,CAAA,EAAG,GAAG,IAAI,MAAA,CAAO,QAAQ,CAAC,CAAA,CAAE,CAAA;AAAA,EACzC;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAEA,SAAS,qBAAA,CAAsB,SAA8B,IAAA,EAAkC;AAC7F,EAAA,MAAM,YAAA,GAAe,OAAA,EAAS,GAAA,CAAI,QAAQ,CAAA;AAC1C,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,YAAA,CAAa,YAAY,CAAA,CAAE,GAAA,CAAI,IAAI,CAAA;AAC5C;AAEA,SAASZ,WAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAA,CAAQ,KAAK,CAAA,IAAK,OAAO,UAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,wBAAwB,KAAA,EAA0C;AACzE,EAAA,IAAI,CAACA,UAAAA,CAAS,KAAK,CAAA,EAAG;AACpB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,UAAUA,UAAAA,CAAS,KAAA,CAAM,OAAO,CAAA,GAAI,MAAM,OAAA,GAAU,MAAA;AAC1D,EAAA,MAAM,OAAOA,UAAAA,CAAS,KAAA,CAAM,IAAI,CAAA,GAAI,MAAM,IAAA,GAAO,MAAA;AACjD,EAAA,IAAI,OAAA,IAAW,OAAO,OAAA,CAAQ,KAAA,KAAU,YAAY,OAAA,CAAQ,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,IAAA,EAAM;AACpF,IAAA,OAAO;AAAA,MACL,OAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,iBAAiB,QAAA,EAA6C;AACrE,EAAA,OACE,wBAAwB,QAAQ,CAAA,KAC/BA,UAAAA,CAAS,QAAQ,IAAI,uBAAA,CAAwB,QAAA,CAAS,IAAI,CAAA,GAAI,UAC9DA,UAAAA,CAAS,QAAQ,IAAI,uBAAA,CAAwB,QAAA,CAAS,OAAO,CAAA,GAAI,IAAA,CAAA;AAEtE;AAEA,SAAS,uBAAuB,GAAA,EAAuC;AACrE,EAAA,IAAI,GAAA,CAAI,OAAA,CAAQ,eAAA,YAA2B,OAAA,EAAS;AAClD,IAAA,OAAO,IAAI,OAAA,CAAQ,eAAA;AAAA,EACrB;AAEA,EAAA,MAAM,OAAA,GAAU,IAAI,OAAA,EAAQ;AAC5B,EAAA,GAAA,CAAI,QAAQ,eAAA,GAAkB,OAAA;AAC9B,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,iBAAiB,OAAA,EAAyB;AACjD,EAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAClC;AAEA,SAAS,kBAAkB,QAAA,EAAsC;AAC/D,EAAA,IAAI,CAAC,QAAA,IAAY,QAAA,KAAa,GAAA,EAAK;AACjC,IAAA,OAAO,sBAAA;AAAA,EACT;AAEA,EAAA,MAAM,aAAa,QAAA,CAAS,UAAA,CAAW,GAAG,CAAA,GAAI,QAAA,GAAW,IAAI,QAAQ,CAAA,CAAA;AACrE,EAAA,OAAO,UAAA,CAAW,QAAA,CAAS,GAAG,CAAA,IAAK,UAAA,CAAW,MAAA,GAAS,CAAA,GACnD,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GACtB,UAAA;AACN;AAEA,SAAS2B,wBACP,OAAA,EACiE;AACjE,EAAA,OACE,OAAO,OAAA,KAAY,QAAA,IACnB,OAAA,KAAY,IAAA,IACZ,kBAAkB,OAAA,IAClB,KAAA,CAAM,OAAA,CAAS,OAAA,CAAuC,YAAY,CAAA;AAEtE;AAEA,SAAS,cAAc/B,QAAAA,EAAuB;AAC5C,EAAA,IAAI;AACF,IAAA,OAAO,IAAI,GAAA,CAAIA,QAAAA,CAAQ,GAAG,CAAA;AAAA,EAC5B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAI,IAAI,kBAAkB,CAAA;AAAA,EACnC;AACF;AAEA,SAAS,cAAA,CAAeA,UAAkB,GAAA,EAAyB;AACjE,EAAA,MAAM,aAAA,GAAgBA,QAAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,kBAAkB,CAAA,EAAG,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,EAAG,IAAA,EAAK;AACnF,EAAA,MAAM,OAAO,aAAA,IAAiBA,QAAAA,CAAQ,QAAQ,GAAA,CAAI,MAAM,KAAK,GAAA,CAAI,IAAA;AACjE,EAAA,OAAO,IAAA,IAAQ,IAAA;AACjB;AAEA,SAAS,kBAAA,CACPA,QAAAA,EACA,kBAAA,EACA,GAAA,EACkB;AAClB,EAAA,IAAI,kBAAA,KAAuB,MAAA,IAAU,kBAAA,KAAuB,OAAA,EAAS;AACnE,IAAA,OAAO,kBAAA;AAAA,EACT;AAEA,EAAA,MAAM,cAAA,GAAiBA,QAAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,mBAAmB,CAAA,EAAG,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,EAAG,IAAA,EAAK;AACrF,EAAA,IAAI,cAAA,KAAmB,MAAA,IAAU,cAAA,KAAmB,OAAA,EAAS;AAC3D,IAAA,OAAO,cAAA;AAAA,EACT;AAEA,EAAA,IAAI,GAAA,CAAI,QAAA,KAAa,OAAA,IAAW,GAAA,CAAI,aAAa,QAAA,EAAU;AACzD,IAAA,OAAO,GAAA,CAAI,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,EACjC;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,qBAAA,CACP,SACAA,QAAAA,EACe;AACf,EAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,IAAA,OAAO,iBAAiB,OAAO,CAAA;AAAA,EACjC;AAEA,EAAA,MAAM,UAAA,GAAa,cAAcA,QAAO,CAAA;AACxC,EAAA,MAAM,IAAA,GAAO,cAAA,CAAeA,QAAAA,EAAS,UAAU,CAAA;AAC/C,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI+B,uBAAAA,CAAuB,OAAO,CAAA,EAAG;AACnC,IAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,YAAA,IAAgB,EAAC;AAC9C,IAAA,IAAI,aAAa,MAAA,GAAS,CAAA,IAAK,CAAC,YAAA,CAAa,QAAA,CAAS,IAAI,CAAA,EAAG;AAC3D,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GACJ,OAAO,OAAA,KAAY,QAAA,IAAY,YAAY,IAAA,GACvC,kBAAA,CAAmB/B,QAAAA,EAAS,OAAA,CAAQ,UAAU,UAAU,CAAA,GACxD,kBAAA,CAAmBA,QAAAA,EAAS,QAAW,UAAU,CAAA;AAEvD,EAAA,OAAO,CAAA,EAAG,QAAQ,CAAA,GAAA,EAAM,IAAI,CAAA,CAAA;AAC9B;AAEA,SAAS,UAAU,OAAA,EAAiD;AAClE,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI;AACF,IAAA,OAAO,IAAI,GAAA,CAAI,OAAO,CAAA,CAAE,MAAA;AAAA,EAC1B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAEA,eAAe,qBAAA,CACb,MAAA,EACA,OAAA,EACAA,QAAAA,EACmB;AACnB,EAAA,MAAM,QAAA,GACJ,OAAO,MAAA,CAAO,cAAA,KAAmB,UAAA,GAC7B,MAAM,MAAA,CAAO,cAAA,CAAeA,QAAO,CAAA,GAClC,MAAA,CAAO,cAAA,IAAkB,EAAC;AAEjC,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,UAAU,OAAO,CAAA;AAAA,IACjB,GAAG;AAAA,GACL;AAEA,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,GAAA,CAAI,OAAO,MAAA,CAAO,CAAC,KAAA,KAA2B,OAAO,UAAU,QAAA,IAAY,KAAA,CAAM,MAAA,GAAS,CAAC,CAAC,CAAC,CAAA;AACrH;AAEA,eAAe,uBAAA,CACb,QACAA,QAAAA,EACmB;AACnB,EAAA,MAAM,UAAA,GACJ,OAAO,MAAA,CAAO,gBAAA,KAAqB,UAAA,GAC/B,MAAM,MAAA,CAAO,gBAAA,CAAiBA,QAAO,CAAA,GACpC,MAAA,CAAO,gBAAA,IAAoB,EAAC;AAEnC,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,GAAG,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,eAAA,IAAmB,EAAE,CAAA;AAAA,IAC3C,GAAG;AAAA,GACL;AAEA,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,GAAA,CAAI,OAAO,MAAA,CAAO,CAAC,KAAA,KAA2B,OAAO,UAAU,QAAA,IAAY,KAAA,CAAM,MAAA,GAAS,CAAC,CAAC,CAAC,CAAA;AACrH;AAEA,SAAS,kBAAA,CAAmB,SAAkB,IAAA,EAA+B;AAC3E,EAAA,MAAM,OAAA,GAAU,IAAI,OAAA,CAAQ,IAAA,EAAM,OAAO,CAAA;AACzC,EAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,EAAG;AAChC,IAAA,OAAA,CAAQ,GAAA,CAAI,gBAAgB,iCAAiC,CAAA;AAAA,EAC/D;AACA,EAAA,OAAO,IAAI,QAAA,CAAS,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA,EAAG;AAAA,IAC3C,GAAG,IAAA;AAAA,IACH;AAAA,GACD,CAAA;AACH;AAEA,SAAS,oBAAA,CAAqB,UAAoB,OAAA,EAA4B;AAC5E,EAAA,OAAO,IAAI,QAAA,CAAS,QAAA,CAAS,IAAA,EAAM;AAAA,IACjC,QAAQ,QAAA,CAAS,MAAA;AAAA,IACjB,YAAY,QAAA,CAAS,UAAA;AAAA,IACrB;AAAA,GACD,CAAA;AACH;AAEO,SAAS,uBACd,MAAA,EACS;AACT,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,WACd,MAAA,EAC2B;AAC3B,EAAA,MAAM,kBAAA,GAAqB,iBAAA,CAAkB,MAAA,CAAO,QAAQ,CAAA;AAC5D,EAAA,MAAM,aAAA,GACJ,OAAO,MAAA,CAAO,OAAA,KAAY,WAAW,gBAAA,CAAiB,MAAA,CAAO,OAAO,CAAA,GAAI,MAAA;AAC1E,EAAA,MAAM,OAAA,GAA0C;AAAA,IAC9C,OAAA,EAAS,aAAA;AAAA,IACT,QAAA,EAAU,kBAAA;AAAA,IACV,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,OAAA,EAAS;AAAA,MACP,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,UAAU,MAAA,CAAO;AAAA;AACnB,GACF;AACA,EAAA,MAAM,gBAAA,GACJ,OAAO,MAAA,CAAO,QAAA,KAAa,aACvB,MAAA,CAAO,QAAA,CAAS,OAAO,CAAA,GACvB,MAAA,CAAO,QAAA;AAEb,EAAA,MAAM,UAAU,UAAA,CAAW;AAAA,IACzB,OAAA,EAAS,iBAAiB,MAAA,CAAO,OAAA;AAAA,IACjC,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,UAAU,MAAA,CAAO;AAAA,GAClB,CAAA;AAED,EAAA,MAAM,OAAO,EAAC;AAEd,EAAA,MAAM,mBAAA,GAAwE,CAAC,KAAA,GAAQ,EAAC,KAAM;AAC5F,IAAA,MAAM,eAAA,GAAkB,KAAA,CAAM,eAAA,IAAmB,IAAI,OAAA,EAAQ;AAC7D,IAAA,MAAM,iBAAiB,KAAA,CAAM,OAAA;AAC7B,IAAA,MAAM,WAAA,GAAc,KAAA,CAAM,OAAA,IAAW,IAAA,CAAK,OAAA;AAE1C,IAAA,MAAM,YAAY,KAAA,CAAM,SAAA,KAAc,CAAC,IAAA,EAAM,OAAO,UAAA,KAAe;AACjE,MAAA,eAAA,CAAgB,MAAA;AAAA,QACd,YAAA;AAAA,QACA,uBAAA,CAAwB,IAAA,EAAM,KAAA,EAAO,UAAU;AAAA,OACjD;AAAA,IACF,CAAA,CAAA;AAEA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,cAAA;AAAA,MACT,WAAW,KAAA,CAAM,SAAA,KAAc,CAAA,IAAA,KAAQ,qBAAA,CAAsB,gBAAgB,IAAI,CAAA,CAAA;AAAA,MACjF,SAAA;AAAA,MACA,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,iBAAiB,KAAA,CAAM,eAAA;AAAA,MACvB,iBAAiB,KAAA,CAAM,eAAA;AAAA,MACvB,OAAA,EAAS;AAAA,QACP,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,WAAA;AAAA,QACA,aAAA,EAAe;AAAA,UACb,SAAA,EAAW,OAAO,OAAA,EAAS;AAAA,SAC7B;AAAA,QACA,OAAA,EAAS;AAAA,UACP,OAAA,EAAS;AAAA,YACP,WAAA,EAAa,OAAO,OAAA,EAAS;AAAA,WAC/B;AAAA,UACA,OAAA,EAAS;AAAA,YACP,kBAAA,EAAoB;AAAA;AACtB,SACF;AAAA,QACA,eAAe,KAAA,CAAM;AAAA;AACvB,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,UAAA,GAAsD,OAC1D,KAAA,EACA,OAAA,EACA,gBACA,SAAA,KACG;AACH,IAAA,MAAM,aAAA,GAAgB,oBAAoB,KAAK,CAAA;AAC/C,IAAA,MAAM,gBAAA,CAAiB,aAAA,EAAe,OAAA,EAAS,cAAA,EAAgB,SAAS,CAAA;AAAA,EAC1E,CAAA;AAEA,EAAA,MAAM,YAAA,GAA0D,CAC9D,KAAA,EACA,kBAAA,KACG;AACH,IAAA,MAAM,aAAA,GAAgB,oBAAoB,KAAK,CAAA;AAC/C,IAAA,mBAAA,CAAoB,eAAe,kBAAkB,CAAA;AAAA,EACvD,CAAA;AAEA,EAAA,MAAM,oBAAA,GAA0E,OAAM,GAAA,KAAO;AAC3F,IAAA,MAAM,eAAA,GAAkB,uBAAuB,GAAG,CAAA;AAClD,IAAA,MAAM,UACJ,GAAA,CAAI,OAAA,CAAQ,cACZ,gBAAA,CAAiB,GAAA,CAAI,QAAQ,QAAQ,CAAA;AAEvC,IAAA,IAAI,GAAA,CAAI,QAAQ,YAAA,EAAc;AAC5B,MAAA,YAAA,CAAa;AAAA,QACX,SAAS,GAAA,CAAI,OAAA;AAAA,QACb;AAAA,OACD,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,MAAM,UAAA;AAAA,QACJ;AAAA,UACE,SAAS,GAAA,CAAI,OAAA;AAAA,UACb;AAAA,SACF;AAAA,QACA,OAAA;AAAA,QACA,IAAI,OAAA,CAAQ,cAAA;AAAA,QACZ,IAAI,OAAA,CAAQ;AAAA,OACd;AAAA,IACF;AAEA,IAAA,OAAO,eAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,aAAA,GAA4D,OAAM,GAAA,KAAO;AAC7E,IAAA,KAAA,MAAW,MAAA,IAAU,KAAK,OAAA,EAAS;AACjC,MAAA,KAAA,MAAW,IAAA,IAAQ,MAAA,CAAO,KAAA,EAAO,KAAA,IAAS,EAAC,EAAG;AAC5C,QAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtB,UAAA;AAAA,QACF;AACA,QAAA,MAAM,KAAK,OAAA,CAAQ;AAAA,UACjB,GAAG,GAAA;AAAA,UACH;AAAA,SACD,CAAA;AAAA,MACH;AAAA,IACF;AACA,IAAA,OAAO,GAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,qBAAA,GAA4E,OAAMA,QAAAA,KAAW;AACjG,IAAA,MAAM,UAAA,GAAa,cAAcA,QAAO,CAAA;AACxC,IAAA,MAAM,eAAA,GAAkB,qBAAA,CAAsB,MAAA,CAAO,OAAA,EAASA,QAAO,CAAA;AACrE,IAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR+B,uBAAAA,CAAuB,MAAA,CAAO,OAAO,CAAA,GACjC,sEAAA,GACA;AAAA,OACN;AAAA,IACF;AAEA,IAAA,MAAM,iBAAiB,UAAA,CAAW;AAAA,MAChC,OAAA,EAAS,eAAA;AAAA,MACT,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,UAAU,MAAA,CAAO;AAAA,KAClB,CAAA;AACD,IAAA,MAAM,cAAA,GAAiB,MAAM,qBAAA,CAAsB,MAAA,EAAQ,iBAAiB/B,QAAO,CAAA;AACnF,IAAA,MAAM,gBAAA,GAAmB,MAAM,uBAAA,CAAwB,MAAA,EAAQA,QAAO,CAAA;AAEtE,IAAA,OAAO;AAAA,MACL,IAAA;AAAA,MACA,OAAA,EAAAA,QAAAA;AAAA,MACA,GAAA,EAAK,UAAA;AAAA,MACL,MAAM,UAAA,CAAW,QAAA;AAAA,MACjB,QAAA,EAAU,kBAAA;AAAA,MACV,OAAA,EAAS,eAAA;AAAA,MACT,MAAA,EAAQ,SAAA,CAAU,eAAe,CAAA,IAAK,eAAA;AAAA,MACtC,SAASA,QAAAA,CAAQ,OAAA;AAAA,MACjB,OAAA,EAAS,cAAA;AAAA,MACT,cAAA;AAAA,MACA,gBAAA;AAAA,MACA,OAAA,EAAS,MAAA;AAAA,MACT,OAAA,EAAS;AAAA,QACP,GAAG,OAAA;AAAA,QACH,OAAA,EAAS;AAAA,OACX;AAAA,MACA,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,iBAAiB,IAAA,CAAK;AAAA,KACxB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,OAAA,GAAgD,OAAMA,QAAAA,KAAW;AACrE,IAAA,MAAM,cAAA,GAAiB,MAAM,qBAAA,CAAsBA,QAAO,CAAA;AAE1D,IAAA,IAAI,OAAO,MAAA,CAAO,OAAA,KAAY,UAAA,EAAY;AACxC,MAAA,OAAO,kBAAA;AAAA,QACL;AAAA,UACE,EAAA,EAAI,KAAA;AAAA,UACJ,MAAM,4BAAA,CAA6B,sBAAA;AAAA,UACnC,KAAA,EAAO,sEAAA;AAAA,UACP,MAAM,cAAA,CAAe,IAAA;AAAA,UACrB,UAAU,cAAA,CAAe;AAAA,SAC3B;AAAA,QACA,EAAE,QAAQ,GAAA;AAAI,OAChB;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,OAAA,CAAQ,cAAc,CAAA;AAClD,IAAA,IAAI,kBAAkB,QAAA,EAAU;AAC9B,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,MAAM,WACJ,MAAA,CAAO,QAAA,KACN,MAAA,CAAO,QAAA,KAAa,SACjB,kBAAA,CAAmB,MAAA,CAAO,QAAQ,CAAA,GAClC,IAAI,QAAA,CAAS,IAAA,EAAM,EAAE,MAAA,EAAQ,KAAK,CAAA,CAAA;AAExC,IAAA,MAAM,eAAA,GAAkB,IAAI,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA;AACpD,IAAA,MAAM,aAAA,CAAc;AAAA,MAClB,MAAM,cAAA,CAAe,IAAA;AAAA,MACrB,SAASA,QAAAA,CAAQ,OAAA;AAAA,MACjB,OAAA,EAAS;AAAA,QACP,eAAA;AAAA,QACA,UAAU,MAAA,CAAO,QAAA;AAAA,QACjB,YAAY,MAAA,CAAO,UAAA;AAAA,QACnB,cAAc,MAAA,CAAO,YAAA;AAAA,QACrB,gBAAgB,MAAA,CAAO,cAAA;AAAA,QACvB,iBAAiB,MAAA,CAAO;AAAA;AAC1B,KACD,CAAA;AAED,IAAA,OAAO,oBAAA,CAAqB,UAAU,eAAe,CAAA;AAAA,EACvD,CAAA;AAEA,EAAA,MAAM,MAAwC,MAAA,CAAO,MAAA;AAAA,IACnD;AAAA,MACE,oBAAA;AAAA,MACA,YAAA;AAAA,MACA,mBAAA;AAAA,MACA,cAAA;AAAA,MACA,gBAAA;AAAA,MACA,qBAAA;AAAA,MACA,aAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,CAAO,OAAO;AAAC,GACjB;AAEA,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,GAAG,IAAA,CAAK,OAAA,EAAS,MAAA,CAA+B,CAAC,KAAK,MAAA,KAAW;AAC/D,MAAA,IAAI,OAAO,YAAA,EAAc;AACvB,QAAA,OAAO;AAAA,UACL,GAAG,GAAA;AAAA,UACH,GAAG,MAAA,CAAO;AAAA,SACZ;AAAA,MACF;AACA,MAAA,OAAO,GAAA;AAAA,IACT,CAAA,EAAG,EAAE,CAAA;AAAA,IACL,GAAI,MAAA,CAAO,UAAA,IAAc,EAAC;AAAA,IAC1B,GAAG;AAAA,GACL;AAEA,EAAA,MAAA,CAAO,OAAO,IAAA,EAAM;AAAA,IAClB,MAAA;AAAA,IACA,OAAA,EAAS,MAAA;AAAA,IACT,OAAA;AAAA,IACA,QAAA,EAAU,gBAAA;AAAA,IACV,eAAA,EAAkB,MAAA,CAAO,eAAA,IAAmB,EAAC;AAAA,IAC7C,SAAS,CAAC,GAAI,MAAA,CAAO,OAAA,IAAW,EAAG,CAAA;AAAA,IACnC,OAAA;AAAA,IACA,GAAA;AAAA,IACA,YAAA;AAAA,IACA,mBAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA,oBAAA;AAAA,IACA,aAAA;AAAA,IACA,qBAAA;AAAA,IACA;AAAA,GACqD,CAAA;AAEvD,EAAA,IAAA,CAAK,QAAA,GAAW,QAAQ,GAAA,CAAI;AAAA,IAC1B,qBAAA,CAAsB,QAAQ,aAAa,CAAA;AAAA,IAC3C,wBAAwB,MAAM;AAAA,GAC/B,CAAA,CAAE,IAAA,CAAK,CAAC,CAAC,cAAA,EAAgB,gBAAgB,CAAA,MAAO;AAAA,IAC/C,IAAA;AAAA,IACA,OAAA,EAAS,MAAA;AAAA,IACT,OAAA;AAAA,IACA,QAAA,EAAU,kBAAA;AAAA,IACV,OAAA,EAAS,aAAA;AAAA,IACT,MAAA,EAAQ,UAAU,aAAa,CAAA;AAAA,IAC/B,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,iBAAiB,IAAA,CAAK,eAAA;AAAA,IACtB,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,cAAA;AAAA,IACA;AAAA,GACF,CAAE,CAAA;AAEF,EAAA,OAAO,IAAA;AACT;;;ACtoBA,SAAS,wBAAwB,OAAA,EAAwB;AACvD,EAAA,MAAM,IAAI,KAAA;AAAA,IACR,wBAAwB,OAAO,CAAA,wEAAA;AAAA,GACjC;AACF;AAEO,SAAS,oCACd,OAAA,EAC6B;AAE7B,EAAA,OAAO,wBAAwB,qCAAqC,CAAA;AACtE;AAEO,SAAS,sBACd,MAAA,EACS;AACT,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,wBAAwB,GAAA,EAAkC;AAExE,EAAA,OAAO,wBAAwB,yBAAyB,CAAA;AAC1D;AAEA,eAAsB,mBAAA,CACpB,OAAA,GAAsC,EAAC,EACP;AAEhC,EAAA,OAAO,wBAAwB,qBAAqB,CAAA;AACtD;AAEO,SAAS,yBACd,KAAA,EACiC;AAEjC,EAAA,OAAO,wBAAwB,0BAA0B,CAAA;AAC3D;AAEO,SAAS,6BAAA,CACd,UACA,MAAA,EACoB;AAGpB,EAAA,OAAO,wBAAwB,+BAA+B,CAAA;AAChE;AAEO,SAAS,wBAAA,CACd,gBACA,iBAAA,EAC6B;AAG7B,EAAA,OAAO,wBAAwB,0BAA0B,CAAA;AAC3D;AAEA,eAAsB,kBAAA,CACpB,OAAA,GAA+B,EAAC,EACH;AAE7B,EAAA,OAAO,wBAAwB,oBAAoB,CAAA;AACrD","file":"browser.cjs","sourcesContent":["import type {\n AthenaGatewayEndpointPath,\n AthenaGatewayErrorCode,\n AthenaGatewayErrorDetails,\n AthenaGatewayMethod,\n AthenaGatewayResponse,\n} from './types.js'\n\nexport interface AthenaGatewayErrorInput {\n code: AthenaGatewayErrorCode\n message: string\n status?: number\n endpoint?: AthenaGatewayEndpointPath\n method?: AthenaGatewayMethod\n requestId?: string\n hint?: string\n cause?: string\n}\n\n/**\n * Canonical error for gateway failures.\n * Holds request context and machine-readable classification.\n */\nexport class AthenaGatewayError extends Error {\n readonly code: AthenaGatewayErrorCode\n readonly status: number\n readonly endpoint?: AthenaGatewayEndpointPath\n readonly method?: AthenaGatewayMethod\n readonly requestId?: string\n readonly hint?: string\n readonly causeDetail?: string\n\n constructor(input: AthenaGatewayErrorInput) {\n super(input.message)\n this.name = 'AthenaGatewayError'\n this.code = input.code\n this.status = input.status ?? 0\n this.endpoint = input.endpoint\n this.method = input.method\n this.requestId = input.requestId\n this.hint = input.hint\n this.causeDetail = input.cause\n }\n\n toDetails(): AthenaGatewayErrorDetails {\n return {\n code: this.code,\n message: this.message,\n status: this.status,\n endpoint: this.endpoint,\n method: this.method,\n requestId: this.requestId,\n hint: this.hint,\n cause: this.causeDetail,\n }\n }\n\n static fromResponse<T>(\n response: AthenaGatewayResponse<T>,\n fallback: Omit<AthenaGatewayErrorInput, 'code' | 'message' | 'status'>,\n ) {\n const details = response.errorDetails\n if (details) {\n return new AthenaGatewayError({\n code: details.code,\n message: details.message,\n status: details.status,\n endpoint: details.endpoint ?? fallback.endpoint,\n method: details.method ?? fallback.method,\n requestId: details.requestId ?? fallback.requestId,\n hint: details.hint,\n cause: details.cause,\n })\n }\n\n return new AthenaGatewayError({\n code: 'HTTP_ERROR',\n message: response.error ?? 'Gateway request failed',\n status: response.status,\n endpoint: fallback.endpoint,\n method: fallback.method,\n requestId: fallback.requestId,\n })\n }\n}\n\nexport function isAthenaGatewayError(error: unknown): error is AthenaGatewayError {\n return error instanceof AthenaGatewayError\n}\n","import { AthenaGatewayError } from './errors.ts'\n\nexport const ATHENA_DEFAULT_BASE_URL = 'https://athena-db.com'\n\nfunction describeReceivedValue(value: unknown): string {\n if (value === undefined) return 'undefined'\n if (value === null) return 'null'\n if (typeof value === 'string') {\n return value.trim().length > 0 ? JSON.stringify(value) : 'an empty string'\n }\n return `${typeof value} ${JSON.stringify(value)}`\n}\n\nfunction invalidBaseUrlError(message: string, hint: string): AthenaGatewayError {\n return new AthenaGatewayError({\n code: 'INVALID_URL',\n message,\n status: 0,\n hint,\n })\n}\n\nexport interface NormalizeAthenaGatewayBaseUrlOptions {\n defaultBaseUrl?: string\n label?: string\n}\n\nexport function normalizeAthenaGatewayBaseUrl(\n input: string | null | undefined,\n options: NormalizeAthenaGatewayBaseUrlOptions = {},\n): string {\n const label = options.label ?? 'Athena gateway base URL'\n const candidate = input ?? options.defaultBaseUrl\n\n if (candidate === undefined || candidate === null) {\n throw invalidBaseUrlError(\n `${label} must be a non-empty absolute http(s) URL. Received ${describeReceivedValue(input)}.`,\n 'Set ATHENA_URL (or pass createClient(url, ...)) to a full URL such as \"https://mirror3.athena-db.com\".',\n )\n }\n\n const trimmed = candidate.trim()\n if (!trimmed) {\n throw invalidBaseUrlError(\n `${label} must be a non-empty absolute http(s) URL. Received ${describeReceivedValue(candidate)}.`,\n 'Set ATHENA_URL (or pass createClient(url, ...)) to a full URL such as \"https://mirror3.athena-db.com\".',\n )\n }\n\n let parsed: URL\n try {\n parsed = new URL(trimmed)\n } catch {\n throw invalidBaseUrlError(\n `${label} must be a valid absolute http(s) URL. Received ${describeReceivedValue(candidate)}.`,\n 'Use a full URL including the protocol, for example \"https://mirror3.athena-db.com\".',\n )\n }\n\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n throw invalidBaseUrlError(\n `${label} must use http or https. Received ${JSON.stringify(trimmed)}.`,\n 'Use an Athena gateway URL such as \"https://mirror3.athena-db.com\".',\n )\n }\n\n if (parsed.search || parsed.hash) {\n throw invalidBaseUrlError(\n `${label} must not include query parameters or hash fragments. Received ${JSON.stringify(trimmed)}.`,\n 'Pass only the base URL. Endpoint paths such as \"/gateway/fetch\" are appended by the SDK.',\n )\n }\n\n return parsed.toString().replace(/\\/+$/, '')\n}\n\nexport function buildAthenaGatewayUrl(baseUrl: string, path: string): string {\n if (!path.startsWith('/')) {\n throw invalidBaseUrlError(\n `Athena gateway path must start with \"/\". Received ${JSON.stringify(path)}.`,\n 'Use a leading slash such as \"/gateway/fetch\" or \"/\".',\n )\n }\n\n return `${baseUrl}${path}`\n}\n","function getAtob(): ((input: string) => string) | undefined {\n const candidate = (globalThis as { atob?: unknown }).atob\n return typeof candidate === 'function' ? (candidate as (input: string) => string) : undefined\n}\n\nfunction getBtoa(): ((input: string) => string) | undefined {\n const candidate = (globalThis as { btoa?: unknown }).btoa\n return typeof candidate === 'function' ? (candidate as (input: string) => string) : undefined\n}\n\nfunction bytesToBinaryString(bytes: Uint8Array): string {\n let result = ''\n for (const byte of bytes) {\n result += String.fromCharCode(byte)\n }\n return result\n}\n\nfunction binaryStringToBytes(binary: string): Uint8Array {\n const bytes = new Uint8Array(binary.length)\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i)\n }\n return bytes\n}\n\nfunction encodeBase64(bytes: Uint8Array): string {\n const btoaFn = getBtoa()\n if (btoaFn) {\n return btoaFn(bytesToBinaryString(bytes))\n }\n return Buffer.from(bytes).toString('base64')\n}\n\nfunction decodeBase64(base64: string): Uint8Array {\n const atobFn = getAtob()\n if (atobFn) {\n return binaryStringToBytes(atobFn(base64))\n }\n return new Uint8Array(Buffer.from(base64, 'base64'))\n}\n\nexport function encodeBytesToBase64Url(bytes: Uint8Array): string {\n return encodeBase64(bytes).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/g, '')\n}\n\nexport function encodeStringToBase64Url(value: string): string {\n const bytes = new TextEncoder().encode(value)\n return encodeBytesToBase64Url(bytes)\n}\n\nexport function decodeBase64UrlToBytes(value: string): Uint8Array {\n const normalized = value.replace(/-/g, '+').replace(/_/g, '/')\n const paddingLength = normalized.length % 4\n const padded = paddingLength === 0 ? normalized : `${normalized}${'='.repeat(4 - paddingLength)}`\n return decodeBase64(padded)\n}\n\nexport function decodeBase64UrlToString(value: string): string {\n return new TextDecoder().decode(decodeBase64UrlToBytes(value))\n}\n","import type { AthenaCookieOptions } from './types.ts'\n\nfunction tryDecode(str: string): string {\n if (str.indexOf('%') === -1) {\n return str\n }\n try {\n return decodeURIComponent(str)\n } catch {\n return str\n }\n}\n\nexport interface CookieAttributes {\n value: string\n 'max-age'?: number\n expires?: Date\n domain?: string\n path?: string\n secure?: boolean\n httponly?: boolean\n partitioned?: boolean\n samesite?: 'strict' | 'lax' | 'none'\n [key: string]: unknown\n}\n\nexport const SECURE_COOKIE_PREFIX = '__Secure-'\nexport const HOST_COOKIE_PREFIX = '__Host-'\n\n/**\n * Remove __Secure- or __Host- prefix from cookie name.\n */\nexport function stripSecureCookiePrefix(cookieName: string): string {\n if (cookieName.startsWith(SECURE_COOKIE_PREFIX)) {\n return cookieName.slice(SECURE_COOKIE_PREFIX.length)\n }\n if (cookieName.startsWith(HOST_COOKIE_PREFIX)) {\n return cookieName.slice(HOST_COOKIE_PREFIX.length)\n }\n return cookieName\n}\n\n/**\n * Split a comma-joined `Set-Cookie` header string into individual cookies.\n */\nexport function splitSetCookieHeader(setCookie: string): string[] {\n if (!setCookie) {\n return []\n }\n\n const result: string[] = []\n let start = 0\n let i = 0\n\n while (i < setCookie.length) {\n if (setCookie[i] === ',') {\n let j = i + 1\n while (j < setCookie.length && setCookie[j] === ' ') {\n j++\n }\n while (j < setCookie.length && setCookie[j] !== '=' && setCookie[j] !== ';' && setCookie[j] !== ',') {\n j++\n }\n\n if (j < setCookie.length && setCookie[j] === '=') {\n const part = setCookie.slice(start, i).trim()\n if (part) {\n result.push(part)\n }\n start = i + 1\n while (start < setCookie.length && setCookie[start] === ' ') {\n start++\n }\n i = start\n continue\n }\n }\n i++\n }\n\n const last = setCookie.slice(start).trim()\n if (last) {\n result.push(last)\n }\n\n return result\n}\n\nexport function parseSetCookieHeader(setCookie: string): Map<string, CookieAttributes> {\n const cookies = new Map<string, CookieAttributes>()\n const cookieArray = splitSetCookieHeader(setCookie)\n\n for (const cookieString of cookieArray) {\n const parts = cookieString.split(';').map((part) => part.trim())\n const [nameValue, ...attributes] = parts\n const [name, ...valueParts] = (nameValue || '').split('=')\n if (!name) {\n continue\n }\n\n const value = unquoteCookieValue(valueParts.join('='))\n const decodedValue = tryDecode(value)\n const attrObj: CookieAttributes = { value: decodedValue }\n\n for (const attribute of attributes) {\n const [attrName, ...attrValueParts] = attribute.split('=')\n const attrValue = attrValueParts.join('=')\n const normalizedAttrName = attrName.trim().toLowerCase()\n switch (normalizedAttrName) {\n case 'max-age':\n attrObj['max-age'] = attrValue ? parseInt(attrValue.trim(), 10) : undefined\n break\n case 'expires':\n attrObj.expires = attrValue ? new Date(attrValue.trim()) : undefined\n break\n case 'domain':\n attrObj.domain = attrValue ? attrValue.trim() : undefined\n break\n case 'path':\n attrObj.path = attrValue ? attrValue.trim() : undefined\n break\n case 'secure':\n attrObj.secure = true\n break\n case 'httponly':\n attrObj.httponly = true\n break\n case 'samesite':\n attrObj.samesite = attrValue ? (attrValue.trim().toLowerCase() as 'strict' | 'lax' | 'none') : undefined\n break\n case 'partitioned':\n attrObj.partitioned = true\n break\n default:\n attrObj[normalizedAttrName] = attrValue ? attrValue.trim() : true\n break\n }\n }\n\n cookies.set(name, attrObj)\n }\n\n return cookies\n}\n\nexport function toCookieOptions(attributes: CookieAttributes): AthenaCookieOptions {\n return {\n maxAge: attributes['max-age'],\n expires: attributes.expires,\n domain: attributes.domain,\n path: attributes.path,\n secure: attributes.secure,\n httpOnly: attributes.httponly,\n sameSite: attributes.samesite,\n partitioned: attributes.partitioned,\n }\n}\n\n/**\n * Cookie-name token char set per RFC 7230 §3.2.6.\n */\nexport const cookieNameRegex = /^[\\w!#$%&'*.^`|~+-]+$/\n\nfunction unquoteCookieValue(value: string): string {\n if (value.length < 2 || !value.startsWith('\"') || !value.endsWith('\"')) {\n return value\n }\n return value.slice(1, -1)\n}\n\n/**\n * Parse a `Cookie` header into a key/value map.\n */\nexport function parseCookies(cookieHeader: string): Map<string, string> {\n const cookies = cookieHeader.split('; ')\n const cookieMap = new Map<string, string>()\n cookies.forEach((cookie) => {\n const [name, value] = cookie.split(/=(.*)/s)\n cookieMap.set(name as string, value as string)\n })\n return cookieMap\n}\n\n/**\n * Add or replace a cookie in the request `Cookie` header.\n */\nexport function setRequestCookie(headers: Headers, name: string, value: string): void {\n const cookieMap = parseCookies(headers.get('cookie') || '')\n if (cookieNameRegex.test(name)) {\n cookieMap.set(name, value)\n }\n headers.set(\n 'cookie',\n Array.from(cookieMap, ([key, currentValue]) => `${key}=${encodeURIComponent(currentValue)}`).join('; '),\n )\n}\n\n/**\n * Merge `Set-Cookie` values into a `Cookie` header.\n */\nexport function applySetCookies(target: Headers, setCookieValues: Iterable<string>): void {\n const cookieMap = parseCookies(target.get('cookie') || '')\n for (const setCookie of setCookieValues) {\n for (const [name, attr] of parseSetCookieHeader(setCookie)) {\n if (cookieNameRegex.test(name)) {\n cookieMap.set(name, attr.value)\n }\n }\n }\n target.set(\n 'cookie',\n Array.from(cookieMap, ([key, currentValue]) => `${key}=${encodeURIComponent(currentValue)}`).join('; '),\n )\n}\n\nexport function setCookieToHeader(headers: Headers) {\n return (context: { response: Response }) => {\n const setCookieHeader = context.response.headers.get('set-cookie')\n if (!setCookieHeader) {\n return\n }\n applySetCookies(headers, [setCookieHeader])\n }\n}\n","import { decodeBase64UrlToString, encodeBytesToBase64Url, encodeStringToBase64Url } from './base64.ts'\n\ntype JwtPayload = Record<string, unknown>\n\nconst HS256_ALG = 'HS256'\n\ninterface SubtleCryptoLike {\n importKey: (\n format: 'raw',\n keyData: Uint8Array,\n algorithm: { name: 'HMAC'; hash: 'SHA-256' },\n extractable: boolean,\n keyUsages: Array<'sign' | 'verify'>,\n ) => Promise<unknown>\n sign: (algorithm: 'HMAC', key: unknown, data: Uint8Array) => Promise<ArrayBuffer>\n}\n\ninterface WebCryptoLike {\n subtle?: SubtleCryptoLike\n}\n\nasync function getSubtleCrypto(): Promise<SubtleCryptoLike> {\n const globalCrypto = (globalThis as { crypto?: WebCryptoLike }).crypto\n if (globalCrypto?.subtle) {\n return globalCrypto.subtle\n }\n const { webcrypto } = await import('node:crypto')\n const subtle = (webcrypto as unknown as WebCryptoLike).subtle\n if (!subtle) {\n throw new Error('Web Crypto subtle API is unavailable.')\n }\n return subtle\n}\n\nasync function importHmacKey(secret: string, usage: 'sign' | 'verify'): Promise<unknown> {\n const subtle = await getSubtleCrypto()\n return subtle.importKey(\n 'raw',\n new TextEncoder().encode(secret),\n {\n name: 'HMAC',\n hash: 'SHA-256',\n },\n false,\n [usage] as Array<'sign' | 'verify'>,\n )\n}\n\nfunction bufferToBytes(buffer: ArrayBuffer): Uint8Array {\n return new Uint8Array(buffer)\n}\n\nfunction parseJwtPayload(payloadSegment: string): JwtPayload | null {\n try {\n const decoded = decodeBase64UrlToString(payloadSegment)\n const payload = JSON.parse(decoded) as unknown\n if (!payload || typeof payload !== 'object') {\n return null\n }\n return payload as JwtPayload\n } catch {\n return null\n }\n}\n\nfunction isJwtExpired(payload: JwtPayload): boolean {\n const exp = payload.exp\n if (typeof exp !== 'number') {\n return false\n }\n return exp < Math.floor(Date.now() / 1000)\n}\n\nexport async function signHmacBase64Url(secret: string, value: string): Promise<string> {\n const subtle = await getSubtleCrypto()\n const key = await importHmacKey(secret, 'sign')\n const signature = await subtle.sign('HMAC', key, new TextEncoder().encode(value))\n return encodeBytesToBase64Url(bufferToBytes(signature))\n}\n\nexport async function signJwtHS256(\n payload: JwtPayload,\n secret: string,\n expiresIn = 60 * 5,\n): Promise<string> {\n const now = Math.floor(Date.now() / 1000)\n const header = { alg: HS256_ALG, typ: 'JWT' }\n const fullPayload = {\n ...payload,\n iat: now,\n exp: now + expiresIn,\n }\n const headerPart = encodeStringToBase64Url(JSON.stringify(header))\n const payloadPart = encodeStringToBase64Url(JSON.stringify(fullPayload))\n const message = `${headerPart}.${payloadPart}`\n const signature = await signHmacBase64Url(secret, message)\n return `${message}.${signature}`\n}\n\nexport async function verifyJwtHS256<TPayload extends JwtPayload = JwtPayload>(\n token: string,\n secret: string,\n): Promise<TPayload | null> {\n const parts = token.split('.')\n if (parts.length !== 3) {\n return null\n }\n\n const [headerPart, payloadPart, signaturePart] = parts\n if (!headerPart || !payloadPart || !signaturePart) {\n return null\n }\n\n let header: { alg?: string } | null = null\n try {\n header = JSON.parse(decodeBase64UrlToString(headerPart)) as { alg?: string }\n } catch {\n return null\n }\n\n if (!header || header.alg !== HS256_ALG) {\n return null\n }\n\n const payload = parseJwtPayload(payloadPart)\n if (!payload) {\n return null\n }\n\n const expectedSignature = await signHmacBase64Url(secret, `${headerPart}.${payloadPart}`)\n if (expectedSignature !== signaturePart) {\n return null\n }\n\n if (isJwtExpired(payload)) {\n return null\n }\n\n return payload as TPayload\n}\n","import { decodeBase64UrlToString } from './base64.ts'\nimport { parseCookies } from './cookie-utils.ts'\nimport type { AthenaCookieContextRuntime, AthenaCookieOptions } from './types.ts'\n\nconst ALLOWED_COOKIE_SIZE = 4096\nconst ESTIMATED_EMPTY_COOKIE_SIZE = 200\nconst CHUNK_SIZE = ALLOWED_COOKIE_SIZE - ESTIMATED_EMPTY_COOKIE_SIZE\n\ninterface StoreCookie {\n name: string\n value: string\n attributes: AthenaCookieOptions\n}\n\ntype Chunks = Record<string, string>\n\nfunction getChunkIndex(cookieName: string): number {\n const parts = cookieName.split('.')\n const lastPart = parts[parts.length - 1]\n const index = parseInt(lastPart || '0', 10)\n return Number.isNaN(index) ? 0 : index\n}\n\nfunction readExistingChunks(cookieName: string, ctx: AthenaCookieContextRuntime): Chunks {\n const chunks: Chunks = {}\n const cookies = parseCookies(ctx.headers?.get('cookie') || '')\n for (const [name, value] of cookies) {\n if (name.startsWith(cookieName)) {\n chunks[name] = value\n }\n }\n return chunks\n}\n\nfunction joinChunks(chunks: Chunks): string {\n const sortedKeys = Object.keys(chunks).sort((left, right) => getChunkIndex(left) - getChunkIndex(right))\n return sortedKeys.map((key) => chunks[key]).join('')\n}\n\nfunction chunkCookie(storeName: string, cookie: StoreCookie, chunks: Chunks, ctx: AthenaCookieContextRuntime): StoreCookie[] {\n const chunkCount = Math.ceil(cookie.value.length / CHUNK_SIZE)\n if (chunkCount === 1) {\n chunks[cookie.name] = cookie.value\n return [cookie]\n }\n\n const cookies: StoreCookie[] = []\n for (let index = 0; index < chunkCount; index++) {\n const name = `${cookie.name}.${index}`\n const start = index * CHUNK_SIZE\n const value = cookie.value.substring(start, start + CHUNK_SIZE)\n cookies.push({\n ...cookie,\n name,\n value,\n })\n chunks[name] = value\n }\n\n ctx.logger?.debug?.(`CHUNKING_${storeName.toUpperCase()}_COOKIE`, {\n message: `${storeName} cookie exceeds allowed ${ALLOWED_COOKIE_SIZE} bytes.`,\n emptyCookieSize: ESTIMATED_EMPTY_COOKIE_SIZE,\n valueSize: cookie.value.length,\n chunkCount,\n chunks: cookies.map((entry) => entry.value.length + ESTIMATED_EMPTY_COOKIE_SIZE),\n })\n\n return cookies\n}\n\nfunction getCleanCookies(chunks: Chunks, cookieOptions: AthenaCookieOptions): Record<string, StoreCookie> {\n const cleanedChunks: Record<string, StoreCookie> = {}\n for (const name in chunks) {\n cleanedChunks[name] = {\n name,\n value: '',\n attributes: {\n ...cookieOptions,\n maxAge: 0,\n },\n }\n }\n return cleanedChunks\n}\n\nconst storeFactory =\n (storeName: string) =>\n (cookieName: string, cookieOptions: AthenaCookieOptions, ctx: AthenaCookieContextRuntime) => {\n const chunks = readExistingChunks(cookieName, ctx)\n\n return {\n getValue(): string {\n return joinChunks(chunks)\n },\n hasChunks(): boolean {\n return Object.keys(chunks).length > 0\n },\n chunk(value: string, options?: Partial<AthenaCookieOptions>): StoreCookie[] {\n const cleanedChunks = getCleanCookies(chunks, cookieOptions)\n for (const name in chunks) {\n delete chunks[name]\n }\n\n const cookies: Record<string, StoreCookie> = cleanedChunks\n const chunked = chunkCookie(\n storeName,\n {\n name: cookieName,\n value,\n attributes: {\n ...cookieOptions,\n ...options,\n },\n },\n chunks,\n ctx,\n )\n for (const chunk of chunked) {\n cookies[chunk.name] = chunk\n }\n return Object.values(cookies)\n },\n clean(): StoreCookie[] {\n const cleanedChunks = getCleanCookies(chunks, cookieOptions)\n for (const name in chunks) {\n delete chunks[name]\n }\n return Object.values(cleanedChunks)\n },\n setCookies(cookies: StoreCookie[]): void {\n for (const cookie of cookies) {\n ctx.setCookie(cookie.name, cookie.value, cookie.attributes)\n }\n },\n }\n }\n\nexport const createSessionStore = storeFactory('Session')\nexport const createAccountStore = storeFactory('Account')\n\nexport function getChunkedCookie(ctx: AthenaCookieContextRuntime, cookieName: string): string | null {\n const value = ctx.getCookie?.(cookieName)\n if (value) {\n return value\n }\n\n const chunks: Array<{ index: number; value: string }> = []\n const cookieHeader = ctx.headers?.get('cookie')\n if (!cookieHeader) {\n return null\n }\n\n for (const [name, parsedValue] of parseCookies(cookieHeader)) {\n if (!name.startsWith(`${cookieName}.`)) {\n continue\n }\n const parts = name.split('.')\n const indexStr = parts.at(-1)\n const index = parseInt(indexStr || '0', 10)\n if (!Number.isNaN(index)) {\n chunks.push({ index, value: parsedValue })\n }\n }\n\n if (chunks.length === 0) {\n return null\n }\n\n chunks.sort((left, right) => left.index - right.index)\n return chunks.map((entry) => entry.value).join('')\n}\n\n/**\n * SDK helper to read an account cookie value.\n * - If plain JSON: returns parsed value.\n * - If base64url-encoded JSON: returns parsed value.\n * - Otherwise: returns the raw cookie string.\n */\nexport async function getAccountCookie(\n ctx: AthenaCookieContextRuntime,\n cookieName = ctx.context.authCookies.accountData.name,\n): Promise<unknown | null> {\n const value = getChunkedCookie(ctx, cookieName)\n if (!value) {\n return null\n }\n\n try {\n return JSON.parse(value) as unknown\n } catch {\n // Fall through and try base64url payload parsing.\n }\n\n try {\n return JSON.parse(decodeBase64UrlToString(value)) as unknown\n } catch {\n return value\n }\n}\n","import { decodeBase64UrlToString, encodeStringToBase64Url } from './base64.ts'\r\nimport {\r\n HOST_COOKIE_PREFIX,\r\n SECURE_COOKIE_PREFIX,\r\n parseCookies,\r\n parseSetCookieHeader,\r\n setCookieToHeader,\r\n setRequestCookie,\r\n splitSetCookieHeader,\r\n stripSecureCookiePrefix,\r\n toCookieOptions,\r\n} from './cookie-utils.ts'\r\nimport { signHmacBase64Url, signJwtHS256, verifyJwtHS256 } from './crypto.ts'\r\nimport { createAccountStore, createSessionStore, getAccountCookie, getChunkedCookie } from './session-store.ts'\r\nimport type {\r\n AthenaAuthCookie,\r\n AthenaAuthCookies,\r\n AthenaCookieContextRuntime,\r\n AthenaCookieOptions,\r\n AthenaCookiesOptions,\r\n AthenaCookieVersionResolver,\r\n AthenaGetCookieCacheConfig,\r\n AthenaSessionPair,\r\n} from './types.ts'\r\n\r\nconst DEFAULT_COOKIE_PREFIX = 'athena-auth'\r\nconst LEGACY_COOKIE_PREFIX = 'better-auth'\r\nconst DEFAULT_SESSION_MAX_AGE = 7 * 24 * 60 * 60\r\nconst DEFAULT_CACHE_MAX_AGE = 60 * 5\r\n\r\nfunction isProductionRuntime(): boolean {\r\n return typeof process !== 'undefined' && process.env?.NODE_ENV === 'production'\r\n}\r\n\r\nfunction getEnvironmentSecret(): string | undefined {\r\n if (typeof process === 'undefined') {\r\n return undefined\r\n }\r\n return process.env?.ATHENA_AUTH_SECRET || process.env?.BETTER_AUTH_SECRET || process.env?.AUTH_SECRET\r\n}\r\n\r\nfunction isDynamicBaseURLConfig(baseURL: AthenaCookiesOptions['baseURL']): boolean {\r\n return (\r\n typeof baseURL === 'object' &&\r\n baseURL !== null &&\r\n 'allowedHosts' in baseURL &&\r\n Array.isArray((baseURL as { allowedHosts?: unknown }).allowedHosts)\r\n )\r\n}\r\n\r\nfunction resolveCookiePrefixes(primaryPrefix: string): string[] {\r\n const prefixes = [primaryPrefix]\r\n if (!prefixes.includes(DEFAULT_COOKIE_PREFIX)) {\r\n prefixes.push(DEFAULT_COOKIE_PREFIX)\r\n }\r\n if (!prefixes.includes(LEGACY_COOKIE_PREFIX)) {\r\n prefixes.push(LEGACY_COOKIE_PREFIX)\r\n }\r\n return prefixes\r\n}\r\n\r\nfunction createError(message: string): Error {\r\n return new Error(`@xylex-group/athena/cookies: ${message}`)\r\n}\r\n\r\nfunction getSecretOrThrow(secret?: string): string {\r\n const resolved = secret || getEnvironmentSecret()\r\n if (!resolved) {\r\n throw createError(\r\n 'getCookieCache requires a secret. Pass `secret` or set ATHENA_AUTH_SECRET/BETTER_AUTH_SECRET/AUTH_SECRET.',\r\n )\r\n }\r\n return resolved\r\n}\r\n\r\nfunction asObject(value: unknown): Record<string, unknown> | null {\r\n if (!value || typeof value !== 'object') {\r\n return null\r\n }\r\n return value as Record<string, unknown>\r\n}\r\n\r\nfunction getSessionTokenFromPair(session: AthenaSessionPair): string {\r\n const token = session.session?.token\r\n if (typeof token !== 'string' || token.length === 0) {\r\n throw createError('setSessionCookie requires `session.session.token` to be a non-empty string.')\r\n }\r\n return token\r\n}\r\n\r\nasync function resolveCookieVersion(\r\n versionConfig: AthenaCookieVersionResolver | undefined,\r\n session: Record<string, unknown>,\r\n user: Record<string, unknown>,\r\n): Promise<string> {\r\n if (!versionConfig) {\r\n return '1'\r\n }\r\n if (typeof versionConfig === 'string') {\r\n return versionConfig\r\n }\r\n return versionConfig(session, user)\r\n}\r\n\r\nfunction getSessionCookieCacheName(cookiePrefix: string, cookieName: string, isSecure: boolean): string {\r\n return isSecure ? `${SECURE_COOKIE_PREFIX}${cookiePrefix}.${cookieName}` : `${cookiePrefix}.${cookieName}`\r\n}\r\n\r\nasync function setCookieValue(\r\n ctx: AthenaCookieContextRuntime,\r\n name: string,\r\n value: string,\r\n attributes: AthenaCookieOptions,\r\n): Promise<void> {\r\n const secret = ctx.context.secret\r\n if (secret && typeof ctx.setSignedCookie === 'function') {\r\n await ctx.setSignedCookie(name, value, secret, attributes)\r\n return\r\n }\r\n ctx.setCookie(name, value, attributes)\r\n}\r\n\r\nfunction parseJsonSafely<T>(value: string): T | null {\r\n try {\r\n return JSON.parse(value) as T\r\n } catch {\r\n return null\r\n }\r\n}\r\n\r\nfunction getIsSecureCookie(config: { isSecure?: boolean } | undefined): boolean {\r\n if (config?.isSecure !== undefined) {\r\n return config.isSecure\r\n }\r\n return isProductionRuntime()\r\n}\r\n\r\nexport function createCookieGetter(options: AthenaCookiesOptions) {\r\n const baseURLString = typeof options.baseURL === 'string' ? options.baseURL : undefined\r\n const dynamicProtocol =\r\n typeof options.baseURL === 'object' && options.baseURL !== null ? options.baseURL.protocol : undefined\r\n\r\n const secure =\r\n options.advanced?.useSecureCookies !== undefined\r\n ? options.advanced.useSecureCookies\r\n : dynamicProtocol === 'https'\r\n ? true\r\n : dynamicProtocol === 'http'\r\n ? false\r\n : baseURLString\r\n ? baseURLString.startsWith('https://')\r\n : isProductionRuntime()\r\n\r\n const secureCookiePrefix = secure ? SECURE_COOKIE_PREFIX : ''\r\n const crossSubdomainEnabled = !!options.advanced?.crossSubDomainCookies?.enabled\r\n const domain = crossSubdomainEnabled\r\n ? options.advanced?.crossSubDomainCookies?.domain || (baseURLString ? new URL(baseURLString).hostname : undefined)\r\n : undefined\r\n\r\n if (crossSubdomainEnabled && !domain && !isDynamicBaseURLConfig(options.baseURL)) {\r\n throw createError('baseURL is required when `crossSubDomainCookies.enabled` is true.')\r\n }\r\n\r\n function createCookie(cookieName: string, overrideAttributes: Partial<AthenaCookieOptions> = {}): AthenaAuthCookie {\r\n const prefix = options.advanced?.cookiePrefix || DEFAULT_COOKIE_PREFIX\r\n const name = options.advanced?.cookies?.[cookieName]?.name || `${prefix}.${cookieName}`\r\n const attributes = options.advanced?.cookies?.[cookieName]?.attributes || {}\r\n\r\n return {\r\n name: `${secureCookiePrefix}${name}`,\r\n attributes: {\r\n secure: !!secureCookiePrefix,\r\n sameSite: 'lax',\r\n path: '/',\r\n httpOnly: true,\r\n ...(crossSubdomainEnabled ? { domain } : {}),\r\n ...options.advanced?.defaultCookieAttributes,\r\n ...overrideAttributes,\r\n ...attributes,\r\n },\r\n }\r\n }\r\n\r\n return createCookie\r\n}\r\n\r\nexport function getCookies(options: AthenaCookiesOptions): AthenaAuthCookies {\r\n const createCookie = createCookieGetter(options)\r\n const sessionToken = createCookie('session_token', { maxAge: options.session?.expiresIn || DEFAULT_SESSION_MAX_AGE })\r\n const sessionData = createCookie('session_data', { maxAge: options.session?.cookieCache?.maxAge || DEFAULT_CACHE_MAX_AGE })\r\n const accountData = createCookie('account_data', { maxAge: options.session?.cookieCache?.maxAge || DEFAULT_CACHE_MAX_AGE })\r\n const dontRememberToken = createCookie('dont_remember')\r\n\r\n return {\r\n sessionToken: {\r\n name: sessionToken.name,\r\n attributes: sessionToken.attributes,\r\n },\r\n sessionData: {\r\n name: sessionData.name,\r\n attributes: sessionData.attributes,\r\n },\r\n dontRememberToken: {\r\n name: dontRememberToken.name,\r\n attributes: dontRememberToken.attributes,\r\n },\r\n accountData: {\r\n name: accountData.name,\r\n attributes: accountData.attributes,\r\n },\r\n }\r\n}\r\n\r\nexport async function setCookieCache(\r\n ctx: AthenaCookieContextRuntime,\r\n session: AthenaSessionPair,\r\n dontRememberMe: boolean,\r\n): Promise<void> {\r\n const cookieCacheConfig = ctx.context.options?.session?.cookieCache\r\n if (!cookieCacheConfig?.enabled) {\r\n return\r\n }\r\n\r\n const version = await resolveCookieVersion(\r\n cookieCacheConfig.version,\r\n session.session as Record<string, unknown>,\r\n session.user as Record<string, unknown>,\r\n )\r\n\r\n const sessionData = {\r\n session: session.session,\r\n user: session.user,\r\n updatedAt: Date.now(),\r\n version,\r\n }\r\n\r\n const baseAttributes = ctx.context.authCookies.sessionData.attributes\r\n const maxAge = dontRememberMe ? undefined : baseAttributes.maxAge\r\n const options: AthenaCookieOptions = {\r\n ...baseAttributes,\r\n maxAge,\r\n }\r\n const expiresAt = Date.now() + ((options.maxAge || 60) * 1000)\r\n const strategy = cookieCacheConfig.strategy || 'compact'\r\n const secret = getSecretOrThrow(ctx.context.secret)\r\n\r\n let encoded: string\r\n if (strategy === 'jwt') {\r\n encoded = await signJwtHS256(sessionData, secret, options.maxAge || DEFAULT_CACHE_MAX_AGE)\r\n } else if (strategy === 'jwe') {\r\n throw createError('`jwe` strategy is not supported by the SDK cookie helper.')\r\n } else {\r\n const signature = await signHmacBase64Url(\r\n secret,\r\n JSON.stringify({\r\n ...sessionData,\r\n expiresAt,\r\n }),\r\n )\r\n encoded = encodeStringToBase64Url(\r\n JSON.stringify({\r\n session: sessionData,\r\n expiresAt,\r\n signature,\r\n }),\r\n )\r\n }\r\n\r\n if (encoded.length > 4093) {\r\n const store = createSessionStore(ctx.context.authCookies.sessionData.name, options, ctx)\r\n const cookies = store.chunk(encoded, options)\r\n store.setCookies(cookies)\r\n } else {\r\n const store = createSessionStore(ctx.context.authCookies.sessionData.name, options, ctx)\r\n if (store.hasChunks()) {\r\n store.setCookies(store.clean())\r\n }\r\n ctx.setCookie(ctx.context.authCookies.sessionData.name, encoded, options)\r\n }\r\n}\r\n\r\nexport async function setSessionCookie(\r\n ctx: AthenaCookieContextRuntime,\r\n session: AthenaSessionPair,\r\n dontRememberMe?: boolean,\r\n overrides?: Partial<AthenaCookieOptions>,\r\n): Promise<void> {\r\n if (dontRememberMe === undefined && typeof ctx.getSignedCookie === 'function' && ctx.context.secret) {\r\n const existingFlag = await ctx.getSignedCookie(ctx.context.authCookies.dontRememberToken.name, ctx.context.secret)\r\n dontRememberMe = !!existingFlag\r\n }\r\n\r\n const resolvedDontRememberMe = dontRememberMe ?? false\r\n const token = getSessionTokenFromPair(session)\r\n const options = ctx.context.authCookies.sessionToken.attributes\r\n const maxAge = resolvedDontRememberMe ? undefined : ctx.context.sessionConfig?.expiresIn\r\n await setCookieValue(ctx, ctx.context.authCookies.sessionToken.name, token, {\r\n ...options,\r\n maxAge,\r\n ...overrides,\r\n })\r\n\r\n if (resolvedDontRememberMe) {\r\n await setCookieValue(\r\n ctx,\r\n ctx.context.authCookies.dontRememberToken.name,\r\n 'true',\r\n ctx.context.authCookies.dontRememberToken.attributes,\r\n )\r\n }\r\n\r\n await setCookieCache(ctx, session, resolvedDontRememberMe)\r\n ctx.context.setNewSession?.(session)\r\n}\r\n\r\n/**\r\n * Expires a cookie by setting `maxAge: 0` while preserving attributes.\r\n */\r\nexport function expireCookie(ctx: AthenaCookieContextRuntime, cookie: AthenaAuthCookie): void {\r\n ctx.setCookie(cookie.name, '', {\r\n ...cookie.attributes,\r\n maxAge: 0,\r\n })\r\n}\r\n\r\nexport function deleteSessionCookie(ctx: AthenaCookieContextRuntime, skipDontRememberMe?: boolean): void {\r\n expireCookie(ctx, ctx.context.authCookies.sessionToken)\r\n expireCookie(ctx, ctx.context.authCookies.sessionData)\r\n\r\n if (ctx.context.options?.account?.storeAccountCookie) {\r\n expireCookie(ctx, ctx.context.authCookies.accountData)\r\n const accountStore = createAccountStore(\r\n ctx.context.authCookies.accountData.name,\r\n ctx.context.authCookies.accountData.attributes,\r\n ctx,\r\n )\r\n accountStore.setCookies(accountStore.clean())\r\n }\r\n\r\n const sessionStore = createSessionStore(\r\n ctx.context.authCookies.sessionData.name,\r\n ctx.context.authCookies.sessionData.attributes,\r\n ctx,\r\n )\r\n sessionStore.setCookies(sessionStore.clean())\r\n\r\n if (!skipDontRememberMe) {\r\n expireCookie(ctx, ctx.context.authCookies.dontRememberToken)\r\n }\r\n}\r\n\r\nexport const getSessionCookie = (\r\n request: Request | Headers,\r\n config?:\r\n | {\r\n cookiePrefix?: string\r\n cookieName?: string\r\n path?: string\r\n }\r\n | undefined,\r\n): string | null => {\r\n const cookies = (request instanceof Headers || !('headers' in request) ? request : request.headers).get('cookie')\r\n if (!cookies) {\r\n return null\r\n }\r\n\r\n const { cookieName = 'session_token', cookiePrefix = 'athena-auth' } = config || {}\r\n const parsedCookie = parseCookies(cookies)\r\n const getCookie = (name: string): string | undefined =>\r\n parsedCookie.get(name) || parsedCookie.get(`${SECURE_COOKIE_PREFIX}${name}`)\r\n const candidateCookieNames = Array.from(new Set([\r\n cookieName,\r\n cookieName.replace(/_/g, '-'),\r\n cookieName.replace(/-/g, '_'),\r\n ])).filter(Boolean)\r\n for (const candidateName of candidateCookieNames) {\r\n const sessionToken =\r\n getCookie(`${cookiePrefix}.${candidateName}`) || getCookie(`${cookiePrefix}-${candidateName}`)\r\n if (sessionToken) {\r\n return sessionToken\r\n }\r\n }\r\n return null\r\n}\r\n\r\nexport const getCookieCache = async <\r\n SessionShape extends Record<string, unknown> = Record<string, unknown>,\r\n UserShape extends Record<string, unknown> = Record<string, unknown>,\r\n>(\r\n request: Request | Headers,\r\n config?: AthenaGetCookieCacheConfig<SessionShape, UserShape>,\r\n): Promise<{\r\n session: SessionShape\r\n user: UserShape\r\n updatedAt: number\r\n version?: string\r\n} | null> => {\r\n const headers = request instanceof Headers || !('headers' in request) ? request : request.headers\r\n const cookieHeader = headers.get('cookie')\r\n if (!cookieHeader) {\r\n return null\r\n }\r\n\r\n const parsedCookie = parseCookies(cookieHeader)\r\n const cookieName = config?.cookieName || 'session_data'\r\n const requestedPrefix = config?.cookiePrefix || DEFAULT_COOKIE_PREFIX\r\n const strategy = config?.strategy || 'compact'\r\n const cookiePrefixes = resolveCookiePrefixes(requestedPrefix)\r\n const isSecure = getIsSecureCookie(config)\r\n const secret = getSecretOrThrow(config?.secret)\r\n\r\n let sessionData: string | undefined\r\n\r\n for (const prefix of cookiePrefixes) {\r\n const candidate = getSessionCookieCacheName(prefix, cookieName, isSecure)\r\n const cookieValue = parsedCookie.get(candidate)\r\n if (cookieValue) {\r\n sessionData = cookieValue\r\n break\r\n }\r\n }\r\n\r\n if (!sessionData) {\r\n const reconstructedChunks: Array<{ index: number; value: string }> = []\r\n for (const prefix of cookiePrefixes) {\r\n const candidate = getSessionCookieCacheName(prefix, cookieName, isSecure)\r\n for (const [name, value] of parsedCookie.entries()) {\r\n if (!name.startsWith(`${candidate}.`)) {\r\n continue\r\n }\r\n const parts = name.split('.')\r\n const indexStr = parts[parts.length - 1]\r\n const index = parseInt(indexStr || '0', 10)\r\n if (!Number.isNaN(index)) {\r\n reconstructedChunks.push({ index, value })\r\n }\r\n }\r\n if (reconstructedChunks.length > 0) {\r\n break\r\n }\r\n }\r\n\r\n if (reconstructedChunks.length > 0) {\r\n reconstructedChunks.sort((left, right) => left.index - right.index)\r\n sessionData = reconstructedChunks.map((chunk) => chunk.value).join('')\r\n }\r\n }\r\n\r\n if (!sessionData) {\r\n return null\r\n }\r\n\r\n if (strategy === 'jwe') {\r\n throw createError(\r\n '`jwe` strategy is not supported by the SDK cookie helper. Use compact/jwt or pass cookie data through the auth server.',\r\n )\r\n }\r\n\r\n if (strategy === 'jwt') {\r\n const payload = await verifyJwtHS256<Record<string, unknown>>(sessionData, secret)\r\n if (!payload) {\r\n return null\r\n }\r\n const sessionRecord = asObject(payload.session)\r\n const userRecord = asObject(payload.user)\r\n const updatedAt = payload.updatedAt\r\n if (!sessionRecord || !userRecord || typeof updatedAt !== 'number') {\r\n return null\r\n }\r\n\r\n if (config?.version) {\r\n const cookieVersion = typeof payload.version === 'string' ? payload.version : '1'\r\n const expectedVersion =\r\n typeof config.version === 'string'\r\n ? config.version\r\n : await config.version(sessionRecord as SessionShape, userRecord as UserShape)\r\n if (cookieVersion !== expectedVersion) {\r\n return null\r\n }\r\n }\r\n\r\n return {\r\n session: sessionRecord as SessionShape,\r\n user: userRecord as UserShape,\r\n updatedAt,\r\n version: typeof payload.version === 'string' ? payload.version : undefined,\r\n }\r\n }\r\n\r\n const compactPayload = parseJsonSafely<{\r\n session: {\r\n session: SessionShape\r\n user: UserShape\r\n updatedAt: number\r\n version?: string\r\n }\r\n expiresAt: number\r\n signature: string\r\n }>(decodeBase64UrlToString(sessionData))\r\n\r\n if (!compactPayload) {\r\n return null\r\n }\r\n\r\n const expectedSignature = await signHmacBase64Url(\r\n secret,\r\n JSON.stringify({\r\n ...compactPayload.session,\r\n expiresAt: compactPayload.expiresAt,\r\n }),\r\n )\r\n\r\n if (expectedSignature !== compactPayload.signature) {\r\n return null\r\n }\r\n\r\n if (compactPayload.expiresAt <= Date.now()) {\r\n return null\r\n }\r\n\r\n const resolvedSession = compactPayload.session\r\n if (config?.version) {\r\n const cookieVersion = resolvedSession.version || '1'\r\n const expectedVersion =\r\n typeof config.version === 'string'\r\n ? config.version\r\n : await config.version(resolvedSession.session, resolvedSession.user)\r\n if (cookieVersion !== expectedVersion) {\r\n return null\r\n }\r\n }\r\n\r\n const sessionObject = asObject(resolvedSession.session)\r\n const userObject = asObject(resolvedSession.user)\r\n if (!sessionObject || !userObject) {\r\n return null\r\n }\r\n\r\n return {\r\n session: sessionObject as SessionShape,\r\n user: userObject as UserShape,\r\n updatedAt: resolvedSession.updatedAt,\r\n version: resolvedSession.version,\r\n }\r\n}\r\n\r\nexport {\r\n HOST_COOKIE_PREFIX,\r\n SECURE_COOKIE_PREFIX,\r\n createSessionStore,\r\n getAccountCookie,\r\n getChunkedCookie,\r\n parseCookies,\r\n parseSetCookieHeader,\r\n setCookieToHeader,\r\n setRequestCookie,\r\n splitSetCookieHeader,\r\n stripSecureCookiePrefix,\r\n toCookieOptions,\r\n}\r\n\r\nexport type {\r\n AthenaAuthCookie,\r\n AthenaAuthCookies,\r\n AthenaCookieContextRuntime,\r\n AthenaCookieOptions,\r\n AthenaCookiesOptions,\r\n AthenaGetCookieCacheConfig,\r\n}\r\n","{\n \"author\": \"floris@xylex.group\",\n \"bin\": {\n \"athena-js\": \"./bin/athena-js.js\"\n },\n \"dependencies\": {\n \"blessed\": \"^0.1.81\",\n \"chalk\": \"^4.1.2\",\n \"cron-parser\": \"^4.9.0\",\n \"pg\": \"^8.16.0\",\n \"use-sync-external-store\": \"^1.5.0\",\n \"uuid\": \"^9.0.1\",\n \"zod\": \"^4.0.1\"\n },\n \"description\": \"Athena JS SDK\",\n \"devDependencies\": {\n \"@react-email/components\": \"^1.0.12\",\n \"@react-email/render\": \"^2.0.8\",\n \"@types/blessed\": \"^0.1.25\",\n \"@types/node\": \"^20.10.5\",\n \"@types/pg\": \"^8.15.1\",\n \"@types/react\": \"^18.3.12\",\n \"@types/react-test-renderer\": \"^18.3.1\",\n \"@types/uuid\": \"^9.0.7\",\n \"@typescript-eslint/eslint-plugin\": \"^8.57.0\",\n \"@typescript-eslint/parser\": \"^8.57.0\",\n \"eslint\": \"^8.57.1\",\n \"express\": \"^4.22.2\",\n \"react\": \"^18.3.1\",\n \"react-dom\": \"^18.3.1\",\n \"react-test-renderer\": \"^18.3.1\",\n \"tsup\": \"^8.5.1\",\n \"tsx\": \"^4.7.0\",\n \"typescript\": \"^5.3.3\"\n },\n \"engines\": {\n \"node\": \">=18.0.0\"\n },\n \"exports\": {\n \".\": {\n \"browser\": {\n \"default\": \"./dist/browser.js\",\n \"import\": \"./dist/browser.js\",\n \"require\": \"./dist/browser.cjs\",\n \"types\": \"./dist/browser.d.ts\"\n },\n \"default\": \"./dist/index.js\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\",\n \"types\": \"./dist/index.d.ts\"\n },\n \"./browser\": {\n \"default\": \"./dist/browser.js\",\n \"import\": \"./dist/browser.js\",\n \"require\": \"./dist/browser.cjs\",\n \"types\": \"./dist/browser.d.ts\"\n },\n \"./cookies\": {\n \"default\": \"./dist/cookies.js\",\n \"import\": \"./dist/cookies.js\",\n \"require\": \"./dist/cookies.cjs\",\n \"types\": \"./dist/cookies.d.ts\"\n },\n \"./next/client\": {\n \"default\": \"./dist/next/client.js\",\n \"import\": \"./dist/next/client.js\",\n \"require\": \"./dist/next/client.cjs\",\n \"types\": \"./dist/next/client.d.ts\"\n },\n \"./next/server\": {\n \"default\": \"./dist/next/server.js\",\n \"import\": \"./dist/next/server.js\",\n \"require\": \"./dist/next/server.cjs\",\n \"types\": \"./dist/next/server.d.ts\"\n },\n \"./package.json\": \"./package.json\",\n \"./react\": {\n \"default\": \"./dist/react.js\",\n \"import\": \"./dist/react.js\",\n \"require\": \"./dist/react.cjs\",\n \"types\": \"./dist/react.d.ts\"\n },\n \"./utils\": {\n \"default\": \"./dist/utils.js\",\n \"import\": \"./dist/utils.js\",\n \"require\": \"./dist/utils.cjs\",\n \"types\": \"./dist/utils.d.ts\"\n }\n },\n \"files\": [\n \"dist\",\n \"bin\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"keywords\": [\n \"database\",\n \"driver\",\n \"api-gateway\",\n \"sdk\",\n \"react\",\n \"hooks\",\n \"http\",\n \"postgres\",\n \"query-builder\"\n ],\n \"license\": \"MIT\",\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"name\": \"@xylex-group/athena\",\n \"peerDependencies\": {\n \"@react-email/components\": \">=1.0.0\",\n \"@react-email/render\": \">=2.0.0\",\n \"react\": \">=17.0.0\"\n },\n \"peerDependenciesMeta\": {\n \"@react-email/components\": {\n \"optional\": true\n },\n \"@react-email/render\": {\n \"optional\": true\n },\n \"react\": {\n \"optional\": true\n }\n },\n \"publisher\": \"XYLEX Group\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/xylex-group/athena-js.git\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"check:all\": \"pnpm lint && pnpm typecheck && pnpm test && pnpm build\",\n \"dev\": \"tsup --watch\",\n \"docs:methods\": \"node scripts/generate-sdk-method-reference.mjs\",\n \"example:api-call\": \"cd examples/api-call && bun run start\",\n \"example:email-resend\": \"cd examples/email-resend && bun run start\",\n \"example:express-api\": \"cd examples/express-api && bun run start\",\n \"example:order-saga\": \"cd examples/order-saga && bun run start\",\n \"example:postgres-connection\": \"cd examples/postgres-connection && bun run start\",\n \"example:recurring-invoice\": \"cd examples/recurring-invoice && bun run start\",\n \"example:retry-patterns\": \"cd examples/retry-patterns && bun run start\",\n \"lint\": \"eslint \\\"src/**/*.ts\\\" \\\"test/**/*.ts\\\"\",\n \"lint:fix\": \"pnpm lint -- --fix\",\n \"prepublishOnly\": \"pnpm typecheck && pnpm build\",\n \"publish:token\": \"node scripts/publish.js\",\n \"test\": \"node --import tsx --test --test-force-exit test/*.test.ts\",\n \"test:integration:postgres\": \"node scripts/run-postgres-introspection-test.mjs\",\n \"test:watch\": \"node --import tsx --test --watch test/*.test.ts\",\n \"typecheck\": \"tsc -p tsconfig.typecheck.json\"\n },\n \"sideEffects\": false,\n \"type\": \"module\",\n \"types\": \"./dist/index.d.ts\",\n \"typesVersions\": {\n \"*\": {\n \"*\": [\n \"dist/index.d.ts\"\n ],\n \"browser\": [\n \"dist/browser.d.ts\"\n ],\n \"cookies\": [\n \"dist/cookies.d.ts\"\n ],\n \"next/client\": [\n \"dist/next/client.d.ts\"\n ],\n \"next/server\": [\n \"dist/next/server.d.ts\"\n ],\n \"react\": [\n \"dist/react.d.ts\"\n ],\n \"utils\": [\n \"dist/utils.d.ts\"\n ]\n }\n },\n \"version\": \"2.10.0\"\n}","import packageJson from '../package.json' with { type: 'json' }\n\nexport const PACKAGE_VERSION = packageJson.version\n\nexport function buildSdkHeaderValue(sdkName: string): string {\n return `${sdkName} ${PACKAGE_VERSION}`\n}\n","import type {\r\n AthenaGatewayBaseOptions,\r\n AthenaGatewayCallOptions,\r\n AthenaGatewayConnectionOptions,\r\n AthenaGatewayConnectionResult,\r\n AthenaGatewayEndpointPath,\r\n AthenaGatewayErrorDetails,\r\n AthenaGatewayMethod,\r\n AthenaRpcCallOptions,\r\n AthenaRpcPayload,\r\n AthenaGatewayResponse,\r\n} from \"./types.js\";\r\nimport type {\r\n AthenaDeletePayload,\r\n AthenaFetchPayload,\r\n AthenaInsertPayload,\r\n AthenaRpcFilter,\r\n AthenaUpdatePayload,\r\n AthenaQueryPayload,\r\n} from \"./types.js\";\r\nimport { AthenaGatewayError } from \"./errors.ts\";\r\nimport {\r\n ATHENA_DEFAULT_BASE_URL,\r\n buildAthenaGatewayUrl,\r\n normalizeAthenaGatewayBaseUrl,\r\n} from \"./url.ts\";\r\nimport { getSessionCookie } from \"../cookies/index.ts\";\r\nimport { buildSdkHeaderValue } from \"../sdk-version.ts\";\r\n\r\nconst DEFAULT_CLIENT = \"railway_direct\";\nconst SDK_NAME = \"xylex-group/athena\";\nconst SDK_HEADER_VALUE = buildSdkHeaderValue(SDK_NAME);\nconst NO_CACHE_HEADER_VALUE = 'no-cache'\n\r\nfunction parseResponseBody(rawText: string, contentType: string | null) {\r\n if (!rawText) {\r\n return { parsed: null as unknown, parseFailed: false };\r\n }\r\n\r\n const contentTypeSuggestsJson =\r\n contentType?.toLowerCase().includes(\"application/json\") ?? false;\r\n const looksJson =\r\n contentTypeSuggestsJson || rawText.startsWith(\"{\") || rawText.startsWith(\"[\");\r\n\r\n if (!looksJson) {\r\n return { parsed: rawText as unknown, parseFailed: false };\r\n }\r\n\r\n try {\r\n return { parsed: JSON.parse(rawText) as unknown, parseFailed: false };\r\n } catch {\r\n return { parsed: rawText as unknown, parseFailed: true };\r\n }\r\n}\r\n\r\nfunction normalizeHeaderValue(value?: string | null) {\n return value ? value : undefined;\n}\n\nfunction isCacheControlHeaderName(name: string) {\n return name.toLowerCase() === 'cache-control'\n}\n\r\nfunction resolveHeaderValue(\r\n headers: Record<string, string>,\r\n candidates: string[],\r\n): string | undefined {\r\n for (const candidate of candidates) {\r\n const direct = normalizeHeaderValue(headers[candidate]);\r\n if (direct) return direct;\r\n }\r\n\r\n const loweredCandidates = new Set(candidates.map(candidate => candidate.toLowerCase()));\r\n for (const [key, value] of Object.entries(headers)) {\r\n if (!loweredCandidates.has(key.toLowerCase())) {\r\n continue;\r\n }\r\n const normalized = normalizeHeaderValue(value);\r\n if (normalized) return normalized;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nfunction resolveBearerTokenFromAuthorizationHeader(\r\n headers: Record<string, string>,\r\n): string | undefined {\r\n const authorization = resolveHeaderValue(headers, [\"Authorization\"]);\r\n if (!authorization) {\r\n return undefined;\r\n }\r\n\r\n const match = authorization.match(/^Bearer\\s+(.+)$/i);\r\n const token = match?.[1]?.trim();\r\n return token ? token : undefined;\r\n}\r\n\r\nfunction resolveSessionTokenFromCookieHeader(\r\n headers: Record<string, string>,\r\n): string | undefined {\r\n const cookie = resolveHeaderValue(headers, [\"Cookie\"]);\r\n if (!cookie) {\r\n return undefined;\r\n }\r\n\r\n return getSessionCookie(new Headers({ cookie })) ?? undefined;\r\n}\r\n\r\nfunction isRecord(value: unknown): value is Record<string, unknown> {\r\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\r\n}\r\n\r\nfunction nonEmptyString(value: unknown): string | undefined {\r\n return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : undefined;\r\n}\r\n\r\nfunction resolveStructuredErrorPayload(payload: unknown): Record<string, unknown> | null {\r\n if (!isRecord(payload)) return null;\r\n return isRecord(payload.error) ? payload.error : payload;\r\n}\r\n\r\nfunction resolveRequestId(headers: Headers): string | undefined {\r\n return (\r\n headers.get(\"x-request-id\") ??\r\n headers.get(\"x-correlation-id\") ??\r\n headers.get(\"x-athena-request-id\") ??\r\n undefined\r\n );\r\n}\r\n\r\nfunction resolveErrorMessage(payload: unknown, fallback: string) {\r\n const structuredPayload = resolveStructuredErrorPayload(payload);\r\n if (structuredPayload) {\r\n const messageCandidates = [structuredPayload.message, structuredPayload.error, structuredPayload.details];\r\n for (const candidate of messageCandidates) {\r\n const resolved = nonEmptyString(candidate);\r\n if (resolved) return resolved;\r\n }\r\n }\r\n\r\n const rawMessage = nonEmptyString(payload);\r\n if (rawMessage) return rawMessage;\r\n\r\n return fallback;\r\n}\r\n\r\nfunction resolveErrorHint(payload: unknown): string | undefined {\r\n const structuredPayload = resolveStructuredErrorPayload(payload);\r\n return structuredPayload ? nonEmptyString(structuredPayload.hint) : undefined;\r\n}\r\n\r\nfunction resolveStatusText(response: Response, payload: unknown): string | null {\r\n const rawStatusText = nonEmptyString(response.statusText);\r\n if (rawStatusText) return rawStatusText;\r\n const payloadRecord = isRecord(payload) ? payload : null;\r\n return payloadRecord ? nonEmptyString(payloadRecord.statusText) ?? null : null;\r\n}\r\n\r\nfunction detailsFromError(error: AthenaGatewayError): AthenaGatewayErrorDetails {\r\n return error.toDetails();\r\n}\r\n\r\ninterface AthenaFindManyAstPayload {\r\n table_name: string;\r\n select: Record<string, unknown>;\r\n where?: Record<string, unknown>;\r\n orderBy?: Record<string, unknown>;\r\n limit?: number;\r\n}\r\n\r\nfunction toQueryScalar(value: unknown): string {\r\n if (value === null || value === undefined) return \"null\";\r\n if (typeof value === \"boolean\") return value ? \"true\" : \"false\";\r\n if (typeof value === \"number\") return Number.isFinite(value) ? String(value) : \"null\";\r\n return String(value);\r\n}\r\n\r\nfunction toQueryArray(values: unknown[]): string {\r\n return `{${values.map(toQueryScalar).join(\",\")}}`;\r\n}\r\n\r\nfunction toRpcArgumentQueryValue(value: unknown): string {\r\n if (Array.isArray(value)) return toQueryArray(value);\r\n if (value && typeof value === \"object\") return JSON.stringify(value);\r\n return toQueryScalar(value);\r\n}\r\n\r\nfunction toRpcFilterQueryValue(filter: AthenaRpcFilter): string {\r\n const value = filter.value;\r\n switch (filter.operator) {\r\n case \"in\": {\r\n if (!Array.isArray(value)) {\r\n throw new AthenaGatewayError({\r\n code: \"UNKNOWN_ERROR\",\r\n message: `RPC filter \"${filter.column}\" with operator \"in\" requires an array value`,\r\n status: 0,\r\n });\r\n }\r\n return `in.${toQueryArray(value)}`;\r\n }\r\n case \"is\":\r\n return `is.${toQueryScalar(value)}`;\r\n case \"eq\":\r\n case \"neq\":\r\n case \"gt\":\r\n case \"gte\":\r\n case \"lt\":\r\n case \"lte\":\r\n case \"like\":\r\n case \"ilike\":\r\n return `${filter.operator}.${toQueryScalar(value)}`;\r\n }\r\n}\r\n\r\nfunction buildRpcGetEndpoint(payload: AthenaRpcPayload): AthenaGatewayEndpointPath {\r\n const functionName = (payload.function_name ?? payload.function).trim();\r\n if (!functionName) {\r\n throw new AthenaGatewayError({\r\n code: \"UNKNOWN_ERROR\",\r\n message: \"rpc requires a function name\",\r\n status: 0,\r\n endpoint: \"/gateway/rpc\",\r\n method: \"GET\",\r\n });\r\n }\r\n\r\n const query = new URLSearchParams();\r\n if (payload.schema) query.set(\"schema\", payload.schema);\r\n if (payload.select) query.set(\"select\", payload.select);\r\n if (payload.count) query.set(\"count\", payload.count);\r\n if (payload.head) query.set(\"head\", \"true\");\r\n if (typeof payload.limit === \"number\") query.set(\"limit\", String(payload.limit));\r\n if (typeof payload.offset === \"number\") query.set(\"offset\", String(payload.offset));\r\n if (payload.order?.column) {\r\n query.set(\r\n \"order\",\r\n payload.order.ascending === false\r\n ? `${payload.order.column}.desc`\r\n : payload.order.column,\r\n );\r\n }\r\n\r\n if (payload.args) {\r\n for (const [key, value] of Object.entries(payload.args)) {\r\n query.set(key, toRpcArgumentQueryValue(value));\r\n }\r\n }\r\n\r\n if (payload.filters?.length) {\r\n for (const filter of payload.filters) {\r\n if (payload.args && Object.prototype.hasOwnProperty.call(payload.args, filter.column)) {\r\n throw new AthenaGatewayError({\r\n code: \"UNKNOWN_ERROR\",\r\n message: `RPC filter \"${filter.column}\" conflicts with RPC argument \"${filter.column}\" in GET mode`,\r\n status: 0,\r\n });\r\n }\r\n query.append(filter.column, toRpcFilterQueryValue(filter));\r\n }\r\n }\r\n\r\n const endpoint = `/rpc/${encodeURIComponent(functionName)}`;\r\n const queryText = query.toString();\r\n const withQuery = queryText ? `${endpoint}?${queryText}` : endpoint;\r\n return withQuery as AthenaGatewayEndpointPath;\r\n}\r\n\r\nfunction buildHeaders(\n config: AthenaGatewayBaseOptions,\n options?: AthenaGatewayCallOptions,\n): Record<string, string> {\n const mergedStripNulls = options?.stripNulls ?? true;\n const forceNoCache = Boolean(config.forceNoCache || options?.forceNoCache)\n const extraHeaders = {\n ...(config.headers ?? {}),\n ...(options?.headers ?? {}),\n };\n const headerClient =\r\n extraHeaders[\"x-athena-client\"] ?? extraHeaders[\"X-Athena-Client\"];\r\n const finalClient =\r\n options?.client ??\r\n config.client ??\r\n (typeof headerClient === \"string\" ? headerClient : undefined) ??\r\n DEFAULT_CLIENT;\r\n const finalApiKey = options?.apiKey ?? config.apiKey;\r\n const finalPublishEvent = options?.publishEvent ?? config.publishEvent;\r\n\r\n const headers: Record<string, string> = {\r\n \"Content-Type\": \"application/json\",\r\n \"X-Athena-Sdk\": SDK_HEADER_VALUE,\r\n };\r\n\r\n if (options?.userId ?? config.userId) {\r\n headers[\"X-User-Id\"] = options?.userId ?? config.userId ?? \"\";\r\n }\r\n\r\n if (options?.organizationId ?? config.organizationId) {\r\n headers[\"X-Organization-Id\"] =\r\n options?.organizationId ?? config.organizationId ?? \"\";\r\n }\r\n\r\n if (finalClient) {\r\n headers[\"X-Athena-Client\"] = finalClient;\r\n }\r\n\r\n const finalBackend = options?.backend ?? config.backend;\r\n if (finalBackend) {\r\n const type =\r\n typeof finalBackend === \"string\" ? finalBackend : finalBackend.type;\r\n if (type) headers[\"X-Backend-Type\"] = type;\r\n }\r\n\r\n if (typeof mergedStripNulls === \"boolean\") {\r\n headers[\"X-Strip-Nulls\"] = mergedStripNulls ? \"true\" : \"false\";\r\n }\r\n\r\n if (finalPublishEvent) {\r\n headers[\"X-Publish-Event\"] = finalPublishEvent;\r\n }\r\n\r\n if (finalApiKey) {\r\n headers[\"apikey\"] = finalApiKey;\r\n headers[\"x-api-key\"] = headers[\"x-api-key\"] ?? finalApiKey;\r\n }\r\n\r\n const explicitSessionToken = resolveHeaderValue(extraHeaders, [\r\n \"X-Athena-Auth-Session-Token\",\r\n ]);\r\n const derivedSessionToken =\r\n explicitSessionToken ?? resolveSessionTokenFromCookieHeader(extraHeaders);\r\n if (derivedSessionToken) {\r\n headers[\"X-Athena-Auth-Session-Token\"] = derivedSessionToken;\r\n }\r\n\r\n const explicitBearerToken = resolveHeaderValue(extraHeaders, [\r\n \"X-Athena-Auth-Bearer-Token\",\r\n ]);\r\n const derivedBearerToken =\r\n explicitBearerToken ?? resolveBearerTokenFromAuthorizationHeader(extraHeaders);\r\n if (derivedBearerToken) {\r\n headers[\"X-Athena-Auth-Bearer-Token\"] = derivedBearerToken;\r\n }\r\n\r\n const athenaClientKeys = [\"x-athena-client\", \"X-Athena-Client\"];\n Object.entries(extraHeaders).forEach(([key, value]) => {\n if (athenaClientKeys.includes(key)) return;\n if (forceNoCache && isCacheControlHeaderName(key)) return;\n const normalized = normalizeHeaderValue(value);\n if (normalized) {\n headers[key] = normalized;\n }\n });\n\n if (forceNoCache) {\n headers['Cache-Control'] = NO_CACHE_HEADER_VALUE\n }\n\n return headers;\n}\n\r\nfunction toInvalidUrlResponse<T>(\r\n error: unknown,\r\n endpoint: AthenaGatewayEndpointPath,\r\n method: AthenaGatewayMethod,\r\n): AthenaGatewayResponse<T> {\r\n const message = error instanceof Error ? error.message : String(error);\r\n const gatewayError =\r\n error instanceof AthenaGatewayError\r\n ? error\r\n : new AthenaGatewayError({\r\n code: \"INVALID_URL\",\r\n message,\r\n status: 0,\r\n endpoint,\r\n method,\r\n cause: message,\r\n hint: \"Set ATHENA_URL to a full http(s) URL before running queries.\",\r\n });\r\n\r\n return {\r\n ok: false,\r\n status: 0,\r\n statusText: null,\r\n data: null,\r\n error: gatewayError.message,\r\n errorDetails: detailsFromError(\r\n new AthenaGatewayError({\r\n code: gatewayError.code,\r\n message: gatewayError.message,\r\n status: gatewayError.status,\r\n endpoint,\r\n method,\r\n requestId: gatewayError.requestId,\r\n hint: gatewayError.hint,\r\n cause: gatewayError.causeDetail,\r\n }),\r\n ),\r\n raw: null,\r\n };\r\n}\r\n\r\nfunction resolveGatewayBaseUrl(input?: string | null) {\r\n return normalizeAthenaGatewayBaseUrl(input, {\r\n defaultBaseUrl: ATHENA_DEFAULT_BASE_URL,\r\n });\r\n}\r\n\r\nfunction resolveProbePath(path?: string) {\r\n if (!path) return \"/\";\r\n if (!path.startsWith(\"/\")) {\r\n throw new AthenaGatewayError({\r\n code: \"INVALID_URL\",\r\n message: `Athena gateway probe path must start with \"/\". Received ${JSON.stringify(path)}.`,\r\n status: 0,\r\n hint: 'Use a leading slash such as \"/\" or \"/health\".',\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nfunction mergeConnectionHeaders(\r\n baseHeaders: Record<string, string>,\r\n headers?: Record<string, string>,\r\n): Record<string, string> {\r\n const merged = {\r\n ...baseHeaders,\r\n ...(headers ?? {}),\r\n };\r\n\r\n if (!merged[\"X-Athena-Sdk\"] && !merged[\"x-athena-sdk\"]) {\r\n merged[\"X-Athena-Sdk\"] = SDK_HEADER_VALUE;\r\n }\r\n\r\n return merged;\r\n}\r\n\r\nasync function performConnectionCheck(\r\n baseUrl: string,\r\n requestHeaders: Record<string, string>,\r\n options?: AthenaGatewayConnectionOptions,\r\n): Promise<AthenaGatewayConnectionResult> {\r\n const path = resolveProbePath(options?.path);\r\n const url = buildAthenaGatewayUrl(baseUrl, path);\r\n\r\n try {\r\n const response = await fetch(url, {\r\n method: \"GET\",\r\n headers: mergeConnectionHeaders(requestHeaders, options?.headers),\r\n signal: options?.signal,\r\n });\r\n const rawText = await response.text();\r\n const requestId = resolveRequestId(response.headers);\r\n const parsedBody = parseResponseBody(\r\n rawText ?? \"\",\r\n response.headers.get(\"content-type\"),\r\n );\r\n\r\n if (parsedBody.parseFailed) {\r\n const invalidJsonError = new AthenaGatewayError({\r\n code: \"INVALID_JSON\",\r\n message: \"Gateway probe returned malformed JSON\",\r\n status: response.status,\r\n method: \"GET\",\r\n requestId,\r\n hint: \"Verify the gateway response body is valid JSON.\",\r\n cause: rawText.slice(0, 300),\r\n });\r\n return {\r\n ok: false,\r\n reachable: true,\r\n status: response.status,\r\n statusText: resolveStatusText(response, parsedBody.parsed),\r\n baseUrl,\r\n url,\r\n error: invalidJsonError.message,\r\n errorDetails: detailsFromError(invalidJsonError),\r\n raw: parsedBody.parsed,\r\n };\r\n }\r\n\r\n const parsed = parsedBody.parsed;\r\n if (!response.ok) {\r\n const httpError = new AthenaGatewayError({\r\n code: \"HTTP_ERROR\",\r\n message: resolveErrorMessage(\r\n parsed,\r\n `Athena gateway GET ${path} failed with status ${response.status}`,\r\n ),\r\n status: response.status,\r\n method: \"GET\",\r\n requestId,\r\n hint: resolveErrorHint(parsed),\r\n });\r\n\r\n return {\r\n ok: false,\r\n reachable: true,\r\n status: response.status,\r\n statusText: resolveStatusText(response, parsed),\r\n baseUrl,\r\n url,\r\n error: httpError.message,\r\n errorDetails: detailsFromError(httpError),\r\n raw: parsed,\r\n };\r\n }\r\n\r\n return {\r\n ok: true,\r\n reachable: true,\r\n status: response.status,\r\n statusText: resolveStatusText(response, parsed),\r\n baseUrl,\r\n url,\r\n error: undefined,\r\n errorDetails: null,\r\n raw: parsed,\r\n };\r\n } catch (callError) {\r\n const message = callError instanceof Error ? callError.message : String(callError);\r\n const networkError = new AthenaGatewayError({\r\n code: \"NETWORK_ERROR\",\r\n message: `Network error while probing Athena gateway ${url}: ${message}`,\r\n method: \"GET\",\r\n cause: message,\r\n hint: \"Check gateway URL, DNS, and network reachability.\",\r\n });\r\n return {\r\n ok: false,\r\n reachable: false,\r\n status: 0,\r\n statusText: null,\r\n baseUrl,\r\n url,\r\n error: networkError.message,\r\n errorDetails: detailsFromError(networkError),\r\n raw: null,\r\n };\r\n }\r\n}\r\n\r\nexport async function verifyAthenaGatewayUrl(\r\n baseUrl: string,\r\n options?: AthenaGatewayConnectionOptions,\r\n): Promise<AthenaGatewayConnectionResult> {\r\n const normalizedBaseUrl = normalizeAthenaGatewayBaseUrl(baseUrl);\r\n return performConnectionCheck(normalizedBaseUrl, { \"X-Athena-Sdk\": SDK_HEADER_VALUE }, options);\r\n}\r\n\r\nasync function callAthena<T>(\r\n config: AthenaGatewayBaseOptions,\r\n endpoint: AthenaGatewayEndpointPath,\r\n method: AthenaGatewayMethod,\r\n payload: unknown,\r\n options?: AthenaGatewayCallOptions,\r\n): Promise<AthenaGatewayResponse<T>> {\r\n let baseUrl: string;\r\n try {\r\n baseUrl = resolveGatewayBaseUrl(options?.baseUrl ?? config.baseUrl);\r\n } catch (error) {\r\n return toInvalidUrlResponse<T>(error, endpoint, method);\r\n }\r\n\r\n const url = buildAthenaGatewayUrl(baseUrl, endpoint);\r\n const headers = buildHeaders(config, options);\r\n\r\n try {\r\n const requestInit: RequestInit = {\r\n method,\r\n headers,\r\n };\r\n if (method !== \"GET\") {\r\n requestInit.body = JSON.stringify(payload);\r\n }\r\n\r\n const response = await fetch(url, requestInit);\r\n\r\n const rawText = await response.text();\r\n const requestId = resolveRequestId(response.headers);\r\n const parsedBody = parseResponseBody(\r\n rawText ?? \"\",\r\n response.headers.get(\"content-type\"),\r\n );\r\n\r\n if (parsedBody.parseFailed) {\r\n const invalidJsonError = new AthenaGatewayError({\r\n code: \"INVALID_JSON\",\r\n message: \"Gateway returned malformed JSON\",\r\n status: response.status,\r\n endpoint,\r\n method,\r\n requestId,\r\n hint: \"Verify the gateway response body is valid JSON.\",\r\n cause: rawText.slice(0, 300),\r\n });\r\n return {\r\n ok: false,\r\n status: response.status,\r\n statusText: resolveStatusText(response, parsedBody.parsed),\r\n data: null,\r\n error: invalidJsonError.message,\r\n errorDetails: detailsFromError(invalidJsonError),\r\n raw: parsedBody.parsed,\r\n };\r\n }\r\n\r\n const parsed = parsedBody.parsed;\r\n const parsedPayload = isRecord(parsed) ? parsed : null;\r\n\r\n if (!response.ok) {\r\n const httpError = new AthenaGatewayError({\r\n code: \"HTTP_ERROR\",\r\n message: resolveErrorMessage(\r\n parsed,\r\n `Athena gateway ${method} ${endpoint} failed with status ${response.status}`,\r\n ),\r\n status: response.status,\r\n endpoint,\r\n method,\r\n requestId,\r\n hint: resolveErrorHint(parsed),\r\n });\r\n\r\n return {\r\n ok: false,\r\n status: response.status,\r\n statusText: resolveStatusText(response, parsed),\r\n data: null,\r\n error: httpError.message,\r\n errorDetails: detailsFromError(httpError),\r\n raw: parsed,\r\n };\r\n }\r\n\r\n // Unwrap envelope: API may return { data: [...], error: null } (e.g. when cached)\r\n // vs raw array when uncached. Use inner data when present to avoid double nesting.\r\n const payloadData =\r\n parsedPayload && \"data\" in parsedPayload\r\n ? (parsedPayload.data as T)\r\n : (parsed as T);\r\n const payloadCount =\r\n parsedPayload && \"count\" in parsedPayload\r\n ? typeof parsedPayload.count === \"number\" || parsedPayload.count === null\r\n ? (parsedPayload.count as number | null)\r\n : undefined\r\n : undefined;\r\n\r\n return {\r\n ok: true,\r\n status: response.status,\r\n statusText: resolveStatusText(response, parsed),\r\n data: payloadData ?? null,\r\n count: payloadCount,\r\n error: undefined,\r\n errorDetails: null,\r\n raw: parsed,\r\n };\r\n } catch (callError) {\r\n const message = callError instanceof Error ? callError.message : String(callError);\r\n const networkError = new AthenaGatewayError({\r\n code: \"NETWORK_ERROR\",\r\n message: `Network error while calling ${method} ${endpoint}: ${message}`,\r\n endpoint,\r\n method,\r\n cause: message,\r\n hint: \"Check gateway URL, DNS, and network reachability.\",\r\n });\r\n return {\r\n ok: false,\r\n status: 0,\r\n statusText: null,\r\n data: null,\r\n error: networkError.message,\r\n errorDetails: detailsFromError(networkError),\r\n raw: null,\r\n };\r\n }\r\n}\r\n\r\nexport interface AthenaGatewayClient {\r\n baseUrl: string;\r\n buildHeaders(options?: AthenaGatewayCallOptions): Record<string, string>;\r\n verifyConnection(\r\n options?: AthenaGatewayConnectionOptions,\r\n ): Promise<AthenaGatewayConnectionResult>;\r\n fetchGateway<T>(\r\n payload: AthenaFetchPayload | AthenaFindManyAstPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n insertGateway<T>(\r\n payload: AthenaInsertPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n updateGateway<T>(\r\n payload: AthenaUpdatePayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n deleteGateway<T>(\r\n payload: AthenaDeletePayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n rpcGateway<T>(\r\n payload: AthenaRpcPayload,\r\n options?: AthenaRpcCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n queryGateway<T>(\r\n payload: AthenaQueryPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n}\r\n\r\nexport function createAthenaGatewayClient(\r\n config: AthenaGatewayBaseOptions = {},\r\n): AthenaGatewayClient {\r\n const normalizedBaseUrl = resolveGatewayBaseUrl(config.baseUrl);\r\n const normalizedConfig: AthenaGatewayBaseOptions = {\r\n ...config,\r\n baseUrl: normalizedBaseUrl,\r\n };\r\n\r\n return {\r\n baseUrl: normalizedBaseUrl,\r\n buildHeaders(options) {\r\n return buildHeaders(normalizedConfig, options);\r\n },\r\n verifyConnection(options) {\r\n return performConnectionCheck(\r\n normalizedBaseUrl,\r\n buildHeaders(normalizedConfig),\r\n options,\r\n );\r\n },\r\n fetchGateway(payload, options) {\r\n return callAthena(normalizedConfig, \"/gateway/fetch\", \"POST\", payload, options);\r\n },\r\n insertGateway(payload, options) {\r\n return callAthena(normalizedConfig, \"/gateway/insert\", \"PUT\", payload, options);\r\n },\r\n updateGateway(payload, options) {\r\n return callAthena(normalizedConfig, \"/gateway/update\", \"POST\", payload, options);\r\n },\r\n deleteGateway(payload, options) {\r\n return callAthena(normalizedConfig, \"/gateway/delete\", \"DELETE\", payload, options);\r\n },\r\n rpcGateway(payload, options) {\r\n if (options?.get) {\r\n const endpoint = buildRpcGetEndpoint(payload);\r\n return callAthena(normalizedConfig, endpoint, \"GET\", null, options);\r\n }\r\n return callAthena(normalizedConfig, \"/gateway/rpc\", \"POST\", payload, options);\r\n },\r\n queryGateway(payload, options) {\r\n return callAthena(normalizedConfig, \"/gateway/query\", \"POST\", payload, options);\r\n },\r\n };\r\n}\r\n","const SIMPLE_IDENTIFIER_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/\nconst COMPOSITE_IDENTIFIER_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$/\nconst SQL_ALIAS_PATTERN = /^([A-Za-z_][A-Za-z0-9_.]*)\\s+(?:as\\s+)?([A-Za-z_][A-Za-z0-9_]*)$/i\nconst RESPONSE_ALIAS_PATTERN = /^([A-Za-z_][A-Za-z0-9_]*)\\s*:\\s*([A-Za-z_][A-Za-z0-9_.]*)$/i\n\r\nfunction quoteIdentifierSegment(identifier: string): string {\n return `\"${identifier.replace(/\"/g, '\"\"')}\"`\n}\n\nfunction parseAliasedIdentifierToken(\n token: string,\n): { baseIdentifier: string; aliasIdentifier: string } | null {\n const responseAliasMatch = RESPONSE_ALIAS_PATTERN.exec(token)\n if (responseAliasMatch) {\n const [, aliasIdentifier, baseIdentifier] = responseAliasMatch\n if (COMPOSITE_IDENTIFIER_PATTERN.test(baseIdentifier) && SIMPLE_IDENTIFIER_PATTERN.test(aliasIdentifier)) {\n return { baseIdentifier, aliasIdentifier }\n }\n }\n\n const sqlAliasMatch = SQL_ALIAS_PATTERN.exec(token)\n if (!sqlAliasMatch) {\n return null\n }\n\n const [, baseIdentifier, aliasIdentifier] = sqlAliasMatch\n if (!COMPOSITE_IDENTIFIER_PATTERN.test(baseIdentifier) || !SIMPLE_IDENTIFIER_PATTERN.test(aliasIdentifier)) {\n return null\n }\n\n return { baseIdentifier, aliasIdentifier }\n}\n\r\n/**\r\n * Quotes a `schema.table.column`-style identifier path safely for SQL.\r\n */\r\nexport function quoteQualifiedIdentifier(identifier: string): string {\r\n return identifier\r\n .split('.')\r\n .map(segment => quoteIdentifierSegment(segment))\r\n .join('.')\r\n}\r\n\r\nfunction quoteSelectToken(token: string): string {\n if (token === '*') return token\n if (COMPOSITE_IDENTIFIER_PATTERN.test(token)) {\n return quoteQualifiedIdentifier(token)\n }\n\n const aliasedIdentifier = parseAliasedIdentifierToken(token)\n if (!aliasedIdentifier) {\n return token\n }\n const { baseIdentifier, aliasIdentifier } = aliasedIdentifier\n return `${quoteQualifiedIdentifier(baseIdentifier)} AS ${quoteIdentifierSegment(aliasIdentifier)}`\n}\n\nexport function quoteSelectColumnToken(token: string): string {\n const trimmed = token.trim()\n if (!trimmed || trimmed === '*') return trimmed || '*'\n\n const responseAliasMatch = RESPONSE_ALIAS_PATTERN.exec(trimmed)\n if (responseAliasMatch) {\n const [, aliasIdentifier, baseIdentifier] = responseAliasMatch\n return `${quoteQualifiedIdentifier(baseIdentifier)} AS ${quoteIdentifierSegment(aliasIdentifier)}`\n }\n\n return quoteQualifiedIdentifier(trimmed)\n}\n\nfunction canAutoQuoteToken(token: string): boolean {\n if (token === '*') return true\n if (COMPOSITE_IDENTIFIER_PATTERN.test(token)) return true\n return parseAliasedIdentifierToken(token) != null\n}\n\r\nfunction splitTopLevelCommaSeparated(input: string): string[] | null {\r\n const parts: string[] = []\r\n let buffer = ''\r\n let singleQuoted = false\r\n let doubleQuoted = false\r\n let depth = 0\r\n\r\n for (let index = 0; index < input.length; index += 1) {\r\n const char = input[index]\r\n const next = index + 1 < input.length ? input[index + 1] : ''\r\n\r\n if (singleQuoted) {\r\n buffer += char\r\n if (char === \"'\" && next === \"'\") {\r\n buffer += next\r\n index += 1\r\n continue\r\n }\r\n if (char === \"'\") {\r\n singleQuoted = false\r\n }\r\n continue\r\n }\r\n\r\n if (doubleQuoted) {\r\n buffer += char\r\n if (char === '\"' && next === '\"') {\r\n buffer += next\r\n index += 1\r\n continue\r\n }\r\n if (char === '\"') {\r\n doubleQuoted = false\r\n }\r\n continue\r\n }\r\n\r\n if (char === \"'\") {\r\n singleQuoted = true\r\n buffer += char\r\n continue\r\n }\r\n if (char === '\"') {\r\n doubleQuoted = true\r\n buffer += char\r\n continue\r\n }\r\n\r\n if (char === '(') {\r\n depth += 1\r\n buffer += char\r\n continue\r\n }\r\n if (char === ')') {\r\n depth -= 1\r\n if (depth < 0) return null\r\n buffer += char\r\n continue\r\n }\r\n\r\n if (char === ',' && depth === 0) {\r\n parts.push(buffer.trim())\r\n buffer = ''\r\n continue\r\n }\r\n\r\n buffer += char\r\n }\r\n\r\n if (singleQuoted || doubleQuoted || depth !== 0) {\r\n return null\r\n }\r\n\r\n if (buffer.trim().length > 0) {\r\n parts.push(buffer.trim())\r\n }\r\n\r\n return parts\r\n}\r\n\r\n/**\r\n * Quotes identifier lists while preserving raw SQL expressions.\r\n *\r\n * Examples:\r\n * - `\"table, user\"` -> `\"\\\"table\\\", \\\"user\\\"\"`\r\n * - `concat(name, ',') as label, id` -> unchanged\r\n */\r\nexport function quoteSelectColumnsExpression(columns: string): string {\r\n const trimmed = columns.trim()\r\n if (!trimmed || trimmed === '*') return trimmed || '*'\r\n\r\n const tokens = splitTopLevelCommaSeparated(trimmed)\r\n if (!tokens || tokens.length === 0) {\r\n return trimmed\r\n }\r\n\r\n if (!tokens.every(canAutoQuoteToken)) {\r\n return trimmed\r\n }\r\n\r\n return tokens.map(quoteSelectToken).join(', ')\r\n}\r\n\r\n/**\r\n * Immutable identifier object with consistent SQL rendering.\r\n */\r\nexport interface SqlIdentifier {\r\n readonly segments: string[]\r\n toSql(): string\r\n toString(): string\r\n}\r\n\r\nclass SqlIdentifierPath implements SqlIdentifier {\r\n readonly segments: string[]\r\n\r\n constructor(segments: string[]) {\r\n this.segments = segments\r\n }\r\n\r\n toSql(): string {\r\n return this.segments.map(quoteIdentifierSegment).join('.')\r\n }\r\n\r\n toString(): string {\r\n return this.toSql()\r\n }\r\n}\r\n\r\n/**\r\n * Creates a quoted identifier object from segment or dotted inputs.\r\n */\r\nexport function identifier(...segments: string[]): SqlIdentifier {\r\n const expandedSegments = segments\r\n .flatMap(segment => segment.split('.'))\r\n .map(segment => segment.trim())\r\n .filter(segment => segment.length > 0)\r\n\r\n return new SqlIdentifierPath(expandedSegments)\r\n}\r\n\r\n","export interface AthenaAuthAdminLimits {\n maxAdminJsonBytes: number\n maxAdminJsonDepth: number\n maxTemplateVariables: number\n maxTemplateVariableLength: number\n}\n\nexport const ATHENA_AUTH_MAX_ADMIN_JSON_BYTES = 32 * 1024\nexport const ATHENA_AUTH_MAX_ADMIN_JSON_DEPTH = 8\nexport const ATHENA_AUTH_MAX_TEMPLATE_VARIABLES = 64\nexport const ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH = 128\n\nexport const ATHENA_AUTH_ADMIN_LIMITS = {\n maxAdminJsonBytes: ATHENA_AUTH_MAX_ADMIN_JSON_BYTES,\n maxAdminJsonDepth: ATHENA_AUTH_MAX_ADMIN_JSON_DEPTH,\n maxTemplateVariables: ATHENA_AUTH_MAX_TEMPLATE_VARIABLES,\n maxTemplateVariableLength: ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH,\n} as const satisfies AthenaAuthAdminLimits\n\nfunction describeTemplateVariableTarget(target?: string) {\n const normalized = target?.trim()\n return normalized && normalized.length > 0\n ? normalized\n : 'Athena auth admin email template variables'\n}\n\nexport function assertAthenaAuthTemplateVariables(\n variables: unknown,\n target?: string,\n): asserts variables is string[] {\n const label = describeTemplateVariableTarget(target)\n if (!Array.isArray(variables)) {\n throw new Error(`${label} must be an array of strings.`)\n }\n\n if (variables.length > ATHENA_AUTH_MAX_TEMPLATE_VARIABLES) {\n throw new Error(\n `${label} cannot contain more than ${ATHENA_AUTH_MAX_TEMPLATE_VARIABLES} entries.`,\n )\n }\n\n variables.forEach((variable, index) => {\n if (typeof variable !== 'string') {\n throw new Error(\n `${label} must contain only strings. Received ${typeof variable} at index ${index}.`,\n )\n }\n\n if (variable.length > ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH) {\n throw new Error(\n `${label} cannot contain entries longer than ${ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH} characters. Received ${variable.length} characters at index ${index}.`,\n )\n }\n })\n}\n","import type {\r\n AthenaAuthEmailTemplateBuilder,\r\n AthenaAuthEmailTemplateCreateFromDefinitionInput,\r\n AthenaAuthEmailTemplateDefinition,\r\n AthenaAuthEmailTemplateUpdateFromDefinitionInput,\r\n AthenaAuthLooseRecord,\r\n AthenaAuthReactEmailComponent,\r\n AthenaAuthReactEmailConfig,\r\n AthenaAuthReactEmailEventPhase,\r\n AthenaAuthReactEmailProps,\r\n AthenaAuthReactEmailRenderEvent,\r\n AthenaAuthReactEmailRenderInput,\r\n AthenaAuthReactEmailRenderOptions,\r\n} from './types.ts'\r\n\r\ntype ReactEmailRenderModule = {\r\n render: (element: unknown) => string | Promise<string>\r\n toPlainText?: (html: string) => string | Promise<string>\r\n pretty?: (html: string) => string | Promise<string>\r\n}\r\n\r\nexport interface AthenaAuthRenderedReactEmail {\r\n html: string\r\n text?: string\r\n}\r\n\r\nexport interface AthenaAuthReactEmailPayload {\r\n react?: AthenaAuthReactEmailRenderInput\r\n}\r\n\r\nexport interface AthenaAuthReactEmailRuntimeOptions {\r\n route?: string\r\n defaults?: AthenaAuthReactEmailRenderOptions\r\n observe?: (event: AthenaAuthReactEmailRenderEvent) => void\r\n}\r\n\r\ninterface ResolvePayloadFieldsInput {\r\n htmlField: string\r\n textField: string\r\n variablesField?: string\r\n}\r\n\r\nlet reactEmailRenderModulePromise: Promise<ReactEmailRenderModule> | undefined\r\n\r\nfunction isRecord(value: unknown): value is AthenaAuthLooseRecord {\r\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\r\n}\r\n\r\nfunction isFunction(value: unknown): value is (...args: unknown[]) => unknown {\r\n return typeof value === 'function'\r\n}\r\n\r\nfunction toStringOrUndefined(value: unknown): string | undefined {\r\n if (typeof value !== 'string') return undefined\r\n return value\r\n}\r\n\r\nfunction nowIsoString() {\r\n return new Date().toISOString()\r\n}\r\n\r\nfunction emitReactEmailEvent(\r\n observe: ((event: AthenaAuthReactEmailRenderEvent) => void) | undefined,\r\n phase: AthenaAuthReactEmailEventPhase,\r\n input: Omit<AthenaAuthReactEmailRenderEvent, 'phase' | 'timestamp'> = {},\r\n) {\r\n if (!observe) return\r\n try {\r\n observe({\r\n phase,\r\n timestamp: nowIsoString(),\r\n ...input,\r\n })\r\n } catch {\r\n // Observability hooks are non-blocking.\r\n }\r\n}\r\n\r\nfunction mergeRenderDefaults(\r\n input: AthenaAuthReactEmailRenderInput,\r\n defaults?: AthenaAuthReactEmailRenderOptions,\r\n): AthenaAuthReactEmailRenderInput {\r\n return {\r\n ...input,\r\n pretty: input.pretty ?? defaults?.pretty,\r\n includePlainText: input.includePlainText ?? defaults?.includePlainText,\r\n }\r\n}\r\n\r\nfunction mergeRuntimeOptions(\r\n options?: AthenaAuthReactEmailRuntimeOptions | AthenaAuthReactEmailConfig,\r\n): AthenaAuthReactEmailRuntimeOptions | undefined {\r\n if (!options) return undefined\r\n return {\r\n defaults: options.defaults,\r\n observe: options.observe,\r\n route: 'route' in options ? options.route : undefined,\r\n }\r\n}\r\n\r\nasync function resolveReactEmailRenderModule(): Promise<ReactEmailRenderModule> {\r\n if (!reactEmailRenderModulePromise) {\r\n reactEmailRenderModulePromise = (async () => {\r\n try {\r\n const loaded = await import('@react-email/render')\r\n if (!isFunction(loaded.render)) {\r\n throw new Error('missing render(...) export')\r\n }\r\n return {\r\n render: loaded.render as ReactEmailRenderModule['render'],\r\n toPlainText: isFunction(loaded.toPlainText)\r\n ? (loaded.toPlainText as ReactEmailRenderModule['toPlainText'])\r\n : undefined,\r\n pretty: isFunction(loaded.pretty)\r\n ? (loaded.pretty as ReactEmailRenderModule['pretty'])\r\n : undefined,\r\n }\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : String(error)\r\n throw new Error(\r\n `React Email rendering requires @react-email/render. Install it in your project (for example: pnpm add @react-email/render). Loader error: ${message}`,\r\n )\r\n }\r\n })()\r\n }\r\n\r\n if (!reactEmailRenderModulePromise) {\r\n throw new Error('React Email renderer module failed to initialize')\r\n }\r\n\r\n return reactEmailRenderModulePromise\r\n}\r\n\r\nasync function resolveReactEmailElement(input: AthenaAuthReactEmailRenderInput): Promise<unknown> {\r\n if (input.element != null) {\r\n return input.element\r\n }\r\n if (!input.component) {\r\n throw new Error('react email payload requires either `element` or `component`')\r\n }\r\n\r\n try {\r\n const reactModule = await import('react')\r\n if (typeof reactModule.createElement !== 'function') {\r\n throw new Error('react createElement(...) export is unavailable')\r\n }\r\n return reactModule.createElement(\r\n input.component as Parameters<typeof reactModule.createElement>[0],\r\n input.props ?? {},\r\n )\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : String(error)\r\n throw new Error(\r\n `React Email component rendering requires react runtime support. Install react in your project. Loader error: ${message}`,\r\n )\r\n }\r\n}\r\n\r\nexport function createAuthReactEmailInput<\r\n TProps extends AthenaAuthReactEmailProps = AthenaAuthReactEmailProps,\r\n>(\r\n component: AthenaAuthReactEmailComponent<TProps>,\r\n props: TProps,\r\n overrides: Omit<AthenaAuthReactEmailRenderInput, 'component' | 'props' | 'element'> = {},\r\n): AthenaAuthReactEmailRenderInput {\r\n return {\r\n ...overrides,\r\n component: component as AthenaAuthReactEmailComponent,\r\n props,\r\n }\r\n}\r\n\r\nexport function defineAuthEmailTemplate<\r\n TProps extends AthenaAuthReactEmailProps = AthenaAuthReactEmailProps,\r\n>(\r\n definition: AthenaAuthEmailTemplateDefinition<TProps>,\r\n): AthenaAuthEmailTemplateBuilder<TProps> {\r\n const react: AthenaAuthEmailTemplateBuilder<TProps>['react'] = (props, overrides) =>\r\n createAuthReactEmailInput(definition.component, props, {\r\n ...definition.defaults,\r\n ...overrides,\r\n })\r\n\r\n return {\r\n component: definition.component,\r\n react,\r\n toTemplateCreate: (input: AthenaAuthEmailTemplateCreateFromDefinitionInput<TProps>) => {\r\n const templateKey = input.templateKey ?? definition.templateKey\r\n const subjectTemplate = input.subjectTemplate ?? definition.subjectTemplate\r\n if (!templateKey) {\r\n throw new Error('defineAuthEmailTemplate.toTemplateCreate requires templateKey')\r\n }\r\n if (!subjectTemplate) {\r\n throw new Error('defineAuthEmailTemplate.toTemplateCreate requires subjectTemplate')\r\n }\r\n\r\n const { props, react: reactOverrides, ...rest } = input\r\n return {\r\n ...rest,\r\n templateKey,\r\n subjectTemplate,\r\n react: react(props, reactOverrides),\r\n }\r\n },\r\n toTemplateUpdate: (input: AthenaAuthEmailTemplateUpdateFromDefinitionInput<TProps>) => {\r\n const { props, react: reactOverrides, ...rest } = input\r\n return {\r\n ...rest,\r\n react: react(props, reactOverrides),\r\n }\r\n },\r\n }\r\n}\r\n\r\nexport async function renderAthenaReactEmail(\r\n input: AthenaAuthReactEmailRenderInput,\r\n options?: AthenaAuthReactEmailRuntimeOptions | AthenaAuthReactEmailConfig,\r\n): Promise<AthenaAuthRenderedReactEmail> {\r\n if (!isRecord(input)) {\r\n throw new Error('react email payload must be an object')\r\n }\r\n\r\n const runtimeOptions = mergeRuntimeOptions(options)\r\n const start = Date.now()\r\n emitReactEmailEvent(runtimeOptions?.observe, 'render:start', {\r\n route: runtimeOptions?.route,\r\n message: 'Rendering react email payload',\r\n })\r\n\r\n try {\r\n const normalizedInput = mergeRenderDefaults(input, runtimeOptions?.defaults)\r\n const element = await resolveReactEmailElement(normalizedInput)\r\n const renderModule = await resolveReactEmailRenderModule()\r\n const htmlValue = await renderModule.render(element)\r\n const renderedHtml = typeof htmlValue === 'string' ? htmlValue : String(htmlValue ?? '')\r\n if (!renderedHtml.trim()) {\r\n throw new Error('react email renderer returned an empty HTML string')\r\n }\r\n\r\n let html = renderedHtml\r\n if (normalizedInput.pretty && renderModule.pretty) {\r\n const prettyValue = await renderModule.pretty(renderedHtml)\r\n if (typeof prettyValue === 'string' && prettyValue.trim().length > 0) {\r\n html = prettyValue\r\n }\r\n }\r\n\r\n const explicitText = toStringOrUndefined(normalizedInput.text)\r\n if (explicitText !== undefined) {\r\n emitReactEmailEvent(runtimeOptions?.observe, 'render:success', {\r\n route: runtimeOptions?.route,\r\n durationMs: Date.now() - start,\r\n message: 'Rendered react email with explicit text',\r\n })\r\n return {\r\n html,\r\n text: explicitText,\r\n }\r\n }\r\n\r\n if (normalizedInput.includePlainText === false || !renderModule.toPlainText) {\r\n emitReactEmailEvent(runtimeOptions?.observe, 'render:success', {\r\n route: runtimeOptions?.route,\r\n durationMs: Date.now() - start,\r\n message: 'Rendered react email without plain-text derivation',\r\n })\r\n return { html }\r\n }\r\n\r\n const plainTextValue = await renderModule.toPlainText(html)\r\n const plainText = toStringOrUndefined(plainTextValue)\r\n emitReactEmailEvent(runtimeOptions?.observe, 'render:success', {\r\n route: runtimeOptions?.route,\r\n durationMs: Date.now() - start,\r\n message: plainText ? 'Rendered react email with derived plain text' : 'Rendered react email HTML only',\r\n })\r\n if (plainText === undefined) {\r\n return { html }\r\n }\r\n\r\n return {\r\n html,\r\n text: plainText,\r\n }\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : String(error)\r\n emitReactEmailEvent(runtimeOptions?.observe, 'render:error', {\r\n route: runtimeOptions?.route,\r\n durationMs: Date.now() - start,\r\n error: message,\r\n message: 'Failed to render react email payload',\r\n })\r\n throw error\r\n }\r\n}\r\n\r\nexport async function resolveReactEmailPayloadFields<\r\n TInput extends AthenaAuthReactEmailPayload,\r\n>(\r\n input: TInput,\r\n fields: ResolvePayloadFieldsInput,\r\n options?: AthenaAuthReactEmailRuntimeOptions | AthenaAuthReactEmailConfig,\r\n): Promise<Omit<TInput, 'react'>> {\r\n const { react, ...payloadWithoutReact } = input\r\n if (!react) {\r\n return payloadWithoutReact as Omit<TInput, 'react'>\r\n }\r\n\r\n const rendered = await renderAthenaReactEmail(react, options)\r\n const payload: AthenaAuthLooseRecord = {\r\n ...(payloadWithoutReact as AthenaAuthLooseRecord),\r\n }\r\n\r\n payload[fields.htmlField] = rendered.html\r\n\r\n const currentTextValue = payload[fields.textField]\r\n if (\r\n rendered.text !== undefined &&\r\n (currentTextValue === undefined || currentTextValue === null || currentTextValue === '')\r\n ) {\r\n payload[fields.textField] = rendered.text\r\n }\r\n\r\n if (\r\n fields.variablesField &&\r\n (payload[fields.variablesField] === undefined || payload[fields.variablesField] === null) &&\r\n isRecord(react.props)\r\n ) {\r\n const derivedVariables = Object.keys(react.props)\r\n if (derivedVariables.length > 0) {\r\n payload[fields.variablesField] = derivedVariables\r\n }\r\n }\r\n\r\n return payload as Omit<TInput, 'react'>\r\n}\r\n","import type {\n AthenaAdminHasPermissionRequest,\n AthenaAdminRevokeUserSessionRequest,\n AthenaAdminRevokeUserSessionsRequest,\n AthenaAdminSuccessResponse,\n AthenaAdminHasPermissionResponse,\n AthenaApiKeyDeleteAllExpiredResponse,\n AthenaAuthCallOptions,\r\n AthenaAuthClientConfig,\r\n AthenaAuthEndpointPath,\r\n AthenaAuthErrorCode,\r\n AthenaAuthErrorDetails,\r\n AthenaAuthFetchCompatibleInput,\n AthenaAuthGetUserResponse,\n AthenaAuthGenericInput,\n AthenaAuthGenericQueryInput,\n AthenaAuthBindings,\n AthenaAuthEmailListQuery,\n AthenaAuthEmailListResponse,\n AthenaAuthGuardResult,\n AthenaAuthHealthResponse,\n AthenaAuthOkResponse,\n AthenaAuthLinkedAccount,\r\n AthenaAuthOrganizationBindings,\r\n AthenaAuthOrganization,\r\n AthenaAuthOrganizationCheckSlugRequest,\r\n AthenaAuthOrganizationCreateRequest,\r\n AthenaAuthOrganizationDeleteRequest,\r\n AthenaAuthOrganizationGetFullQuery,\r\n AthenaAuthOrganizationGetInvitationQuery,\r\n AthenaAuthOrganizationInvitation,\r\n AthenaAuthOrganizationInvitationActionRequest,\r\n AthenaAuthOrganizationInviteMemberRequest,\r\n AthenaAuthOrganizationLeaveRequest,\r\n AthenaAuthOrganizationListInvitationsQuery,\r\n AthenaAuthOrganizationListMembersQuery,\r\n AthenaAuthOrganizationListUserInvitationsQuery,\r\n AthenaAuthOrganizationMember,\r\n AthenaAuthOrganizationRemoveMemberRequest,\r\n AthenaAuthOrganizationSetActiveRequest,\r\n AthenaAuthOrganizationUpdateMemberRoleRequest,\r\n AthenaAuthOrganizationUpdateRequest,\r\n AthenaAuthMethod,\r\n AthenaAuthQueryValue,\r\n AthenaAuthRequestInput,\r\n AthenaAuthReactEmailRenderInput,\r\n AthenaAuthResult,\r\n AthenaAuthSdkClient,\r\n AthenaAuthSession,\r\n AthenaAuthSessionResponse,\r\n AthenaAuthSignInResponse,\r\n AthenaAuthSignOutResponse,\r\n AthenaAuthSocialRedirectResponse,\r\n AthenaAuthStatusResponse,\r\n AthenaAuthUser,\r\n AthenaChangeEmailRequest,\r\n AthenaChangePasswordRequest,\r\n AthenaDeleteUserCallbackRequest,\r\n AthenaDeleteUserRequest,\r\n AthenaDeleteUserResponse,\r\n AthenaEmailSignInRequest,\r\n AthenaEmailSignUpRequest,\r\n AthenaForgetPasswordRequest,\r\n AthenaLinkSocialRequest,\r\n AthenaOAuthAccountTokenRequest,\r\n AthenaOAuthTokenBundle,\r\n AthenaResetPasswordRequest,\r\n AthenaSendVerificationEmailRequest,\r\n AthenaSocialSignInRequest,\r\n AthenaTwoFactorGenerateBackupCodesRequest,\r\n AthenaTwoFactorGenerateBackupCodesResponse,\r\n AthenaUnlinkAccountRequest,\r\n AthenaUpdateUserRequest,\r\n AthenaVerifyEmailRequest,\r\n AthenaUsernameSignInRequest,\r\n} from './types.ts'\nimport { assertAthenaAuthTemplateVariables } from './limits.ts'\nimport { resolveReactEmailPayloadFields } from './react-email.ts'\nimport { buildSdkHeaderValue } from '../sdk-version.ts'\n\nconst DEFAULT_AUTH_BASE_URL = 'http://localhost:3001/api/auth'\nconst SDK_NAME = 'xylex-group/athena-auth'\nconst SDK_HEADER_VALUE = buildSdkHeaderValue(SDK_NAME)\nconst NO_CACHE_HEADER_VALUE = 'no-cache'\n\r\ntype AuthRequestContext = {\r\n endpoint: AthenaAuthEndpointPath\r\n method: AthenaAuthMethod\r\n}\r\n\r\ntype InternalErrorInput = AuthRequestContext & {\n code: AthenaAuthErrorCode\n status: number\n message: string\n requestId?: string\r\n hint?: string\r\n cause?: string\r\n}\r\n\r\nfunction normalizeBaseUrl(baseUrl?: string): string {\r\n return (baseUrl ?? DEFAULT_AUTH_BASE_URL).replace(/\\/$/, '')\r\n}\r\n\r\nfunction isRecord(value: unknown): value is Record<string, unknown> {\r\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\r\n}\r\n\r\nfunction normalizeHeaderValue(value?: string | null): string | undefined {\n return value ? value : undefined\n}\n\nfunction isCacheControlHeaderName(name: string): boolean {\n return name.toLowerCase() === 'cache-control'\n}\n\r\nfunction parseResponseBody(rawText: string, contentType: string | null) {\r\n if (!rawText) {\r\n return { parsed: null as unknown, parseFailed: false }\r\n }\r\n\r\n const contentTypeSuggestsJson =\r\n contentType?.toLowerCase().includes('application/json') ?? false\r\n const looksJson =\r\n contentTypeSuggestsJson || rawText.startsWith('{') || rawText.startsWith('[')\r\n\r\n if (!looksJson) {\r\n return { parsed: rawText as unknown, parseFailed: false }\r\n }\r\n\r\n try {\r\n return { parsed: JSON.parse(rawText) as unknown, parseFailed: false }\r\n } catch {\r\n return { parsed: rawText as unknown, parseFailed: true }\r\n }\r\n}\r\n\r\nfunction resolveRequestId(headers: Headers): string | undefined {\r\n return (\r\n headers.get('x-request-id') ??\r\n headers.get('x-correlation-id') ??\r\n headers.get('x-athena-request-id') ??\r\n undefined\r\n )\r\n}\r\n\r\nfunction resolveErrorMessage(payload: unknown, fallback: string) {\r\n if (isRecord(payload)) {\r\n const messageCandidates = [payload.error, payload.message, payload.details]\r\n for (const candidate of messageCandidates) {\r\n if (typeof candidate === 'string' && candidate.trim().length > 0) {\r\n return candidate.trim()\r\n }\r\n }\r\n }\r\n\r\n if (typeof payload === 'string' && payload.trim().length > 0) {\r\n return payload.trim()\r\n }\r\n\r\n return fallback\r\n}\r\n\r\nfunction toErrorDetails(input: InternalErrorInput): AthenaAuthErrorDetails {\r\n return {\r\n code: input.code,\r\n message: input.message,\r\n status: input.status,\r\n endpoint: input.endpoint,\r\n method: input.method,\r\n requestId: input.requestId,\r\n hint: input.hint,\r\n cause: input.cause,\r\n }\r\n}\r\n\r\nfunction mergeCallOptions(\n base?: AthenaAuthCallOptions,\n override?: AthenaAuthCallOptions,\n): AthenaAuthCallOptions | undefined {\n if (!base && !override) return undefined\r\n return {\r\n ...base,\r\n ...override,\r\n headers: {\r\n ...(base?.headers ?? {}),\r\n ...(override?.headers ?? {}),\r\n },\r\n }\n}\n\nfunction copyDefinedField(\n target: Record<string, unknown>,\n source: Record<string, unknown>,\n targetKey: string,\n sourceKey: string,\n): void {\n if (!(sourceKey in source)) {\n return\n }\n const value = source[sourceKey]\n if (value !== undefined) {\n target[targetKey] = value\n }\n}\n\nfunction normalizeAdminEmailTemplatePayload(payload: Record<string, unknown>): Record<string, unknown> {\n const normalized = { ...payload }\n\n copyDefinedField(normalized, payload, 'template_key', 'templateKey')\n copyDefinedField(normalized, payload, 'event_type', 'eventType')\n copyDefinedField(normalized, payload, 'subject_template', 'subjectTemplate')\n copyDefinedField(normalized, payload, 'text_template', 'textTemplate')\n copyDefinedField(normalized, payload, 'html_template', 'htmlTemplate')\n copyDefinedField(normalized, payload, 'variable_bindings', 'variableBindings')\n copyDefinedField(normalized, payload, 'attachment_failure_mode', 'attachmentFailureMode')\n copyDefinedField(normalized, payload, 'is_active', 'isActive')\n\n return normalized\n}\n\nfunction toReactEmailTemplateCompatibilityInput<TInput extends AthenaAuthFetchCompatibleInput & {\n react?: AthenaAuthReactEmailRenderInput\n}>(input: TInput): TInput {\n const payload = input as Record<string, unknown>\n const compatibility = { ...payload }\n\n copyDefinedField(compatibility, payload, 'templateKey', 'template_key')\n copyDefinedField(compatibility, payload, 'eventType', 'event_type')\n copyDefinedField(compatibility, payload, 'subjectTemplate', 'subject_template')\n copyDefinedField(compatibility, payload, 'textTemplate', 'text_template')\n copyDefinedField(compatibility, payload, 'htmlTemplate', 'html_template')\n copyDefinedField(compatibility, payload, 'variableBindings', 'variable_bindings')\n copyDefinedField(compatibility, payload, 'attachmentFailureMode', 'attachment_failure_mode')\n copyDefinedField(compatibility, payload, 'isActive', 'is_active')\n\n return compatibility as unknown as TInput\n}\n\nfunction normalizeAdminEmailTemplateSendPayload(payload: Record<string, unknown>): Record<string, unknown> {\n const normalized = { ...payload }\n\n copyDefinedField(normalized, payload, 'template_id', 'templateId')\n copyDefinedField(normalized, payload, 'recipient_email', 'recipientEmail')\n copyDefinedField(normalized, payload, 'render_variables', 'renderVariables')\n copyDefinedField(normalized, payload, 'user_id', 'userId')\n copyDefinedField(normalized, payload, 'organization_id', 'organizationId')\n copyDefinedField(normalized, payload, 'session_token', 'sessionToken')\n\n return normalized\n}\n\nfunction toSessionGuardFailure(\n sessionResult: AthenaAuthResult<AthenaAuthSessionResponse>,\n): AthenaAuthGuardResult {\n if (sessionResult.status === 401 || sessionResult.data == null) {\n return {\n ok: false,\n reason: 'unauthorized',\n status: 401,\n error: sessionResult.error ?? 'Unauthorized',\n sessionResult,\n }\n }\n\n return {\n ok: false,\n reason: 'upstream_error',\n status: sessionResult.status,\n error: sessionResult.error ?? 'Failed to resolve current session',\n sessionResult,\n }\n}\n\nfunction toPermissionGuardFailure(\n permissionResult: AthenaAuthResult<AthenaAdminHasPermissionResponse>,\n sessionResult: AthenaAuthResult<AthenaAuthSessionResponse>,\n): AthenaAuthGuardResult {\n if (permissionResult.status === 401) {\n return {\n ok: false,\n reason: 'unauthorized',\n status: 401,\n error: permissionResult.error ?? 'Unauthorized',\n sessionResult,\n permissionResult,\n }\n }\n\n if (permissionResult.status === 403) {\n return {\n ok: false,\n reason: 'forbidden',\n status: 403,\n error: permissionResult.error ?? 'Forbidden',\n sessionResult,\n permissionResult,\n }\n }\n\n return {\n ok: false,\n reason: 'upstream_error',\n status: permissionResult.status,\n error: permissionResult.error ?? 'Failed to resolve permission check',\n sessionResult,\n permissionResult,\n }\n}\n\r\nfunction extractFetchOptions<T extends AthenaAuthFetchCompatibleInput | undefined>(input: T) {\r\n if (!input) {\r\n return {\r\n payload: undefined,\r\n fetchOptions: undefined,\r\n }\r\n }\r\n\r\n const { fetchOptions, ...rest } = input\r\n const hasPayloadKeys = Object.keys(rest).length > 0\r\n return {\r\n payload: hasPayloadKeys ? rest : undefined,\r\n fetchOptions,\r\n }\r\n}\r\n\r\nfunction buildHeaders(\n config: AthenaAuthClientConfig,\n options?: AthenaAuthCallOptions,\n): Record<string, string> {\n const forceNoCache = Boolean(config.forceNoCache || options?.forceNoCache)\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'X-Athena-Sdk': SDK_HEADER_VALUE,\n }\n\r\n const apiKey = options?.apiKey ?? config.apiKey\r\n if (apiKey) {\r\n headers.apikey = apiKey\r\n headers['x-api-key'] = apiKey\r\n }\r\n\r\n const bearerToken = options?.bearerToken ?? config.bearerToken\n if (bearerToken) {\n headers.Authorization = `Bearer ${bearerToken}`\n }\n\n const cookie = options?.cookie ?? config.cookie\n if (cookie) {\n headers.Cookie = cookie\n }\n\n const sessionToken = options?.sessionToken ?? config.sessionToken\n if (sessionToken) {\n headers['X-Athena-Auth-Session-Token'] = sessionToken\n }\n\n const mergedExtraHeaders = {\n ...(config.headers ?? {}),\n ...(options?.headers ?? {}),\n }\n\n Object.entries(mergedExtraHeaders).forEach(([key, value]) => {\n if (forceNoCache && isCacheControlHeaderName(key)) {\n return\n }\n const normalized = normalizeHeaderValue(value)\n if (normalized) {\n headers[key] = normalized\n }\n })\n\n if (forceNoCache) {\n headers['Cache-Control'] = NO_CACHE_HEADER_VALUE\n }\n\n return headers\n}\n\r\nfunction appendQueryParam(searchParams: URLSearchParams, key: string, value: AthenaAuthQueryValue) {\r\n if (value === undefined || value === null) return\r\n if (Array.isArray(value)) {\r\n value.forEach(item => {\r\n searchParams.append(key, String(item))\r\n })\r\n return\r\n }\r\n searchParams.append(key, String(value))\r\n}\r\n\r\nfunction buildRequestUrl(\r\n baseUrl: string,\r\n endpoint: AthenaAuthEndpointPath,\r\n query?: Record<string, AthenaAuthQueryValue>,\r\n) {\r\n const url = `${baseUrl}${endpoint}`\r\n if (!query || Object.keys(query).length === 0) return url\r\n const searchParams = new URLSearchParams()\r\n Object.entries(query).forEach(([key, value]) => appendQueryParam(searchParams, key, value))\r\n const queryText = searchParams.toString()\r\n return queryText ? `${url}?${queryText}` : url\r\n}\r\n\r\nfunction inferDefaultMethod(endpoint: AthenaAuthEndpointPath): AthenaAuthMethod {\r\n if (endpoint.startsWith('/reset-password/')) {\r\n return 'GET'\r\n }\r\n\r\n switch (endpoint) {\r\n case '/get-session':\r\n case '/list-sessions':\r\n case '/verify-email':\r\n case '/change-email/verify':\r\n case '/delete-user/verify':\r\n case '/email-list':\r\n case '/email/list':\r\n case '/delete-user/callback':\r\n case '/list-accounts':\r\n case '/passkey/generate-register-options':\r\n case '/passkey/list-user-passkeys':\r\n case '/.well-known/webauthn':\r\n case '/admin/list-users':\r\n case '/admin/athena-client/list':\r\n case '/admin/audit-log/list':\r\n case '/admin/email/get':\r\n case '/admin/email-failure/list':\r\n case '/admin/email-failure/get':\r\n case '/admin/email-template/get':\r\n case '/admin/email-template/list':\r\n case '/admin/email/list':\r\n case '/api-key/get':\r\n case '/api-key/list':\r\n case '/organization/get-full-organization':\r\n case '/organization/list':\r\n case '/organization/get-invitation':\r\n case '/organization/list-invitations':\r\n case '/organization/list-user-invitations':\r\n case '/organization/list-members':\r\n case '/organization/get-active-member':\r\n case '/health':\r\n case '/ok':\r\n case '/error':\r\n return 'GET'\r\n default:\r\n return 'POST'\r\n }\r\n}\r\n\r\nasync function callAuthEndpoint<T>(\r\n config: AthenaAuthClientConfig,\r\n context: AuthRequestContext,\r\n body?: unknown,\r\n query?: Record<string, AthenaAuthQueryValue>,\r\n options?: AthenaAuthCallOptions,\r\n): Promise<AthenaAuthResult<T>> {\r\n const baseUrl = normalizeBaseUrl(options?.baseUrl ?? config.baseUrl)\r\n const url = buildRequestUrl(baseUrl, context.endpoint, query)\r\n const headers = buildHeaders(config, options)\r\n const credentials = options?.credentials ?? config.credentials ?? 'include'\r\n const requestInit: RequestInit = {\r\n method: context.method,\r\n headers,\r\n credentials,\r\n signal: options?.signal,\r\n }\r\n\r\n if (context.method !== 'GET') {\r\n requestInit.body = JSON.stringify(body ?? {})\r\n }\r\n\r\n const fetcher = config.fetch ?? globalThis.fetch\r\n if (!fetcher) {\r\n const details = toErrorDetails({\r\n code: 'UNKNOWN_ERROR',\r\n message: 'No fetch implementation available for auth client',\r\n status: 0,\r\n endpoint: context.endpoint,\r\n method: context.method,\r\n hint: 'Use Node 18+ or provide `fetch` via createClient(..., { auth: { fetch } }) or createAuthClient({ fetch })',\r\n })\r\n return {\r\n ok: false,\r\n status: 0,\r\n data: null,\r\n error: details.message,\r\n errorDetails: details,\r\n raw: null,\r\n }\r\n }\r\n\r\n try {\r\n const response = await fetcher(url, requestInit)\r\n const rawText = await response.text()\r\n const requestId = resolveRequestId(response.headers)\r\n const parsedBody = parseResponseBody(rawText ?? '', response.headers.get('content-type'))\r\n\r\n if (parsedBody.parseFailed) {\r\n const details = toErrorDetails({\r\n code: 'INVALID_JSON',\r\n message: 'Auth server returned malformed JSON',\r\n status: response.status,\r\n endpoint: context.endpoint,\r\n method: context.method,\r\n requestId,\r\n hint: 'Verify the auth endpoint response body is valid JSON.',\r\n cause: rawText.slice(0, 300),\r\n })\r\n return {\r\n ok: false,\r\n status: response.status,\r\n data: null,\r\n error: details.message,\r\n errorDetails: details,\r\n raw: parsedBody.parsed,\r\n }\r\n }\r\n\r\n const parsed = parsedBody.parsed\r\n\r\n if (!response.ok) {\r\n const details = toErrorDetails({\r\n code: 'HTTP_ERROR',\r\n message: resolveErrorMessage(\r\n parsed,\r\n `Auth endpoint ${context.method} ${context.endpoint} failed with status ${response.status}`,\r\n ),\r\n status: response.status,\r\n endpoint: context.endpoint,\r\n method: context.method,\r\n requestId,\r\n })\r\n return {\r\n ok: false,\r\n status: response.status,\r\n data: null,\r\n error: details.message,\r\n errorDetails: details,\r\n raw: parsed,\r\n }\r\n }\r\n\r\n return {\r\n ok: true,\r\n status: response.status,\r\n data: (parsed as T) ?? null,\r\n error: null,\r\n errorDetails: null,\r\n raw: parsed,\r\n }\r\n } catch (callError) {\r\n const message = callError instanceof Error ? callError.message : String(callError)\r\n const details = toErrorDetails({\r\n code: 'NETWORK_ERROR',\r\n message: `Network error while calling ${context.method} ${context.endpoint}: ${message}`,\r\n status: 0,\r\n endpoint: context.endpoint,\r\n method: context.method,\r\n cause: message,\r\n hint: 'Check auth server URL, DNS, and network reachability.',\r\n })\r\n return {\r\n ok: false,\r\n status: 0,\r\n data: null,\r\n error: details.message,\r\n errorDetails: details,\r\n raw: null,\r\n }\r\n }\r\n}\r\n\r\nfunction executePostWithCompatibleInput<TPayload extends AthenaAuthFetchCompatibleInput, TResult>(\r\n config: AthenaAuthClientConfig,\r\n context: AuthRequestContext,\r\n input: TPayload,\r\n options?: AthenaAuthCallOptions,\r\n) {\r\n const { payload, fetchOptions } = extractFetchOptions(input)\r\n const mergedOptions = mergeCallOptions(fetchOptions, options)\r\n return callAuthEndpoint<TResult>(config, context, payload ?? {}, undefined, mergedOptions)\r\n}\r\n\r\nfunction executePostWithOptionalInput<TResult>(\r\n config: AthenaAuthClientConfig,\r\n context: AuthRequestContext,\r\n input?: AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n) {\r\n const { fetchOptions } = extractFetchOptions(input)\r\n const mergedOptions = mergeCallOptions(fetchOptions, options)\r\n return callAuthEndpoint<TResult>(config, context, {}, undefined, mergedOptions)\r\n}\r\n\r\nfunction executeGetWithCompatibleInput<TResult>(\r\n config: AthenaAuthClientConfig,\r\n context: AuthRequestContext,\r\n input?: AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n) {\r\n const { fetchOptions } = extractFetchOptions(input)\r\n const mergedOptions = mergeCallOptions(fetchOptions, options)\r\n return callAuthEndpoint<TResult>(config, context, undefined, undefined, mergedOptions)\r\n}\r\n\r\nfunction executeGetWithQueryCompatibleInput<\r\n TQuery extends object,\r\n TResult,\r\n>(\r\n config: AthenaAuthClientConfig,\r\n context: AuthRequestContext,\r\n input?: { query?: TQuery } & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n) {\r\n const { payload, fetchOptions } = extractFetchOptions(input)\r\n const mergedOptions = mergeCallOptions(fetchOptions, options)\r\n const query = (payload as { query?: Record<string, AthenaAuthQueryValue> } | undefined)?.query\r\n return callAuthEndpoint<TResult>(\r\n config,\r\n context,\r\n undefined,\r\n query,\r\n mergedOptions,\r\n )\r\n}\r\n\r\n/**\r\n * @deprecated Prefer `createClient(...).auth` from `@xylex-group/athena`.\r\n */\r\nexport function createAuthClient(config: AthenaAuthClientConfig = {}): AthenaAuthSdkClient {\r\n const normalizedBaseUrl = normalizeBaseUrl(config.baseUrl)\r\n const resolvedConfig: AthenaAuthClientConfig = {\r\n ...config,\r\n baseUrl: normalizedBaseUrl,\r\n }\r\n\r\n const request = <T = unknown>(\r\n input: AthenaAuthRequestInput,\r\n options?: AthenaAuthCallOptions,\r\n ): Promise<AthenaAuthResult<T>> => {\r\n const method = input.method ?? (input.body !== undefined ? 'POST' : inferDefaultMethod(input.endpoint))\r\n const mergedOptions = mergeCallOptions(input.fetchOptions, options)\r\n return callAuthEndpoint<T>(\r\n resolvedConfig,\r\n { endpoint: input.endpoint, method },\r\n input.body,\r\n input.query,\r\n mergedOptions,\r\n )\r\n }\r\n\r\n const postGeneric = <T = unknown>(\r\n endpoint: AthenaAuthEndpointPath,\r\n input?: (AthenaAuthFetchCompatibleInput & object),\r\n options?: AthenaAuthCallOptions,\r\n ) => {\r\n const { payload, fetchOptions } = extractFetchOptions(input)\r\n return request<T>(\r\n {\r\n endpoint,\r\n method: 'POST',\r\n body: payload ?? {},\r\n fetchOptions,\r\n },\r\n options,\r\n )\r\n }\r\n\r\n const getGeneric = <T = unknown>(\r\n endpoint: AthenaAuthEndpointPath,\r\n input?: AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) => {\r\n const { fetchOptions } = extractFetchOptions(input)\r\n return request<T>(\r\n {\r\n endpoint,\r\n method: 'GET',\r\n fetchOptions,\r\n },\r\n options,\r\n )\r\n }\r\n\r\n const getWithQuery = <\r\n T = unknown,\r\n TQuery extends object = Record<string, AthenaAuthQueryValue>,\r\n >(\r\n endpoint: AthenaAuthEndpointPath,\r\n input?: AthenaAuthFetchCompatibleInput & {\r\n query?: TQuery\r\n },\r\n options?: AthenaAuthCallOptions,\r\n ) => {\r\n const { payload, fetchOptions } = extractFetchOptions(input)\r\n const query = (payload as { query?: TQuery } | undefined)?.query as\r\n | Record<string, AthenaAuthQueryValue>\r\n | undefined\r\n return request<T>(\r\n {\r\n endpoint,\r\n method: 'GET',\r\n query,\r\n fetchOptions,\r\n },\r\n options,\r\n )\r\n }\r\n\r\n const withReactEmailRoute = (route: AthenaAuthEndpointPath) => ({\r\n ...resolvedConfig.reactEmail,\r\n route,\r\n })\r\n\r\n const resolveAdminEmailPayload = <TInput extends AthenaAuthFetchCompatibleInput & {\r\n react?: AthenaAuthReactEmailRenderInput\r\n }>(\r\n route: '/admin/email/create' | '/admin/email/update',\r\n input: TInput,\r\n ) =>\r\n resolveReactEmailPayloadFields(input, {\r\n htmlField: 'htmlBody',\r\n textField: 'textBody',\r\n }, withReactEmailRoute(route))\r\n\r\n const resolveAdminEmailTemplatePayload = <TInput extends AthenaAuthFetchCompatibleInput & {\n react?: AthenaAuthReactEmailRenderInput\n }>(\n route: '/admin/email-template/create' | '/admin/email-template/update',\n input: TInput,\n ) =>\n resolveReactEmailPayloadFields(toReactEmailTemplateCompatibilityInput(input), {\n htmlField: 'htmlTemplate',\n textField: 'textTemplate',\n variablesField: 'variables',\n }, withReactEmailRoute(route)).then(payload => {\n const normalizedPayload = normalizeAdminEmailTemplatePayload(payload as Record<string, unknown>)\n if ('variables' in payload && payload.variables !== undefined && payload.variables !== null) {\n assertAthenaAuthTemplateVariables(\n payload.variables,\n `${route} variables`,\n )\n }\n return normalizedPayload\n })\n\n const requireSession: AthenaAuthBindings['requireSession'] = async (input, options) => {\n const sessionInput = input?.fetchOptions\n ? { fetchOptions: input.fetchOptions }\n : undefined\n const sessionResult = await getGeneric<AthenaAuthSessionResponse>(\n '/get-session',\n sessionInput,\n options,\n )\n\n if (!sessionResult.ok || sessionResult.data == null) {\n return toSessionGuardFailure(sessionResult)\n }\n\n return {\n ok: true,\n session: sessionResult.data,\n }\n }\n\n const getUser: AthenaAuthBindings['getUser'] = async (input, options) => {\n const sessionResult = await getGeneric<AthenaAuthSessionResponse>(\n '/get-session',\n input,\n options,\n )\n\n if (!sessionResult.ok) {\n return {\n ...sessionResult,\n data: null,\n }\n }\n\n return {\n ...sessionResult,\n data: {\n user: sessionResult.data?.user ?? null,\n } satisfies AthenaAuthGetUserResponse,\n }\n }\n\n const requirePermission = async (\n endpoint: '/admin/has-permission' | '/organization/has-permission',\n input: AthenaAdminHasPermissionRequest & AthenaAuthFetchCompatibleInput,\n options?: AthenaAuthCallOptions,\n ): Promise<AthenaAuthGuardResult> => {\n const sessionGuard = await requireSession(\n input?.fetchOptions ? { fetchOptions: input.fetchOptions } : undefined,\n options,\n )\n\n if (!sessionGuard.ok) {\n return sessionGuard\n }\n\n const permissionResult = await postGeneric<AthenaAdminHasPermissionResponse>(\n endpoint,\n input,\n options,\n )\n\n if (!permissionResult.ok) {\n return toPermissionGuardFailure(permissionResult, {\n ok: true,\n status: 200,\n data: sessionGuard.session,\n error: null,\n errorDetails: null,\n raw: sessionGuard.session,\n })\n }\n\n if (!permissionResult.data?.success) {\n return {\n ok: false,\n reason: 'forbidden',\n status: 403,\n error: permissionResult.data?.error ?? 'Forbidden',\n sessionResult: {\n ok: true,\n status: 200,\n data: sessionGuard.session,\n error: null,\n errorDetails: null,\n raw: sessionGuard.session,\n },\n permissionResult,\n }\n }\n\n return sessionGuard\n }\n\n const listUserEmailsWithFallback: AthenaAuthBindings['user']['email']['list'] = async (input, options) => {\n const primary = await getWithQuery<AthenaAuthEmailListResponse, AthenaAuthEmailListQuery>(\r\n '/email/list',\r\n input,\r\n options,\r\n )\r\n if (primary.ok || primary.status !== 404 || primary.errorDetails?.code !== 'HTTP_ERROR') {\r\n return primary\r\n }\r\n return getWithQuery<AthenaAuthEmailListResponse, AthenaAuthEmailListQuery>(\r\n '/email-list',\r\n input,\r\n options,\r\n )\r\n }\r\n\r\n const healthWithFallback: AthenaAuthBindings['health'] = async (input, options) => {\r\n const primary = await getGeneric<AthenaAuthHealthResponse>('/health', input, options)\r\n if (primary.ok || primary.status !== 404 || primary.errorDetails?.code !== 'HTTP_ERROR') {\r\n return primary\r\n }\r\n\r\n const fallback = await getGeneric<AthenaAuthOkResponse>('/ok', input, options)\r\n if (!fallback.ok) {\r\n return {\r\n ...fallback,\r\n data: null,\r\n }\r\n }\r\n\r\n const fallbackStatus =\r\n isRecord(fallback.data) && typeof fallback.data.ok === 'boolean'\r\n ? (fallback.data.ok ? 'ok' : 'error')\r\n : 'ok'\r\n\r\n return {\r\n ...fallback,\r\n data: {\r\n status: fallbackStatus,\r\n },\r\n }\r\n }\r\n\r\n const signOut = (\r\n input?: AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithOptionalInput<AthenaAuthSignOutResponse>(\r\n resolvedConfig,\r\n { endpoint: '/sign-out', method: 'POST' },\r\n input,\r\n options,\r\n )\r\n\r\n const revokeSessions = (\r\n input?: AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithOptionalInput<AthenaAuthStatusResponse>(\r\n resolvedConfig,\r\n { endpoint: '/revoke-sessions', method: 'POST' },\r\n input,\r\n options,\r\n )\r\n\r\n const revokeOtherSessions = (\r\n input?: AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithOptionalInput<AthenaAuthStatusResponse>(\r\n resolvedConfig,\r\n { endpoint: '/revoke-other-sessions', method: 'POST' },\r\n input,\r\n options,\r\n )\r\n\r\n const revokeSession = (\r\n input: { token: string } & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<typeof input, AthenaAuthStatusResponse>(\r\n resolvedConfig,\r\n { endpoint: '/revoke-session', method: 'POST' },\r\n input,\r\n options,\r\n )\r\n\r\n const deleteUser = (\r\n input?: AthenaDeleteUserRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) => {\r\n const { payload, fetchOptions } = extractFetchOptions(input)\r\n const mergedOptions = mergeCallOptions(fetchOptions, options)\r\n return callAuthEndpoint<AthenaDeleteUserResponse>(\r\n resolvedConfig,\r\n { endpoint: '/delete-user', method: 'POST' },\r\n payload ?? {},\r\n undefined,\r\n mergedOptions,\r\n )\r\n }\r\n\r\n const deleteUserCallback = (\r\n input?: AthenaDeleteUserCallbackRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) => {\r\n const { payload, fetchOptions } = extractFetchOptions(input)\r\n const mergedOptions = mergeCallOptions(fetchOptions, options)\r\n const query = (payload ?? {}) as AthenaDeleteUserCallbackRequest\r\n return callAuthEndpoint<AthenaDeleteUserResponse>(\r\n resolvedConfig,\r\n { endpoint: '/delete-user/callback', method: 'GET' },\r\n undefined,\r\n {\r\n token: query.token,\r\n callbackURL: query.callbackURL,\r\n },\r\n mergedOptions,\r\n )\r\n }\r\n\r\n const resolveResetPasswordToken = (\r\n input: { token: string; callbackURL?: string } & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) => {\r\n const { payload, fetchOptions } = extractFetchOptions(input)\r\n const mergedOptions = mergeCallOptions(fetchOptions, options)\r\n const query = payload as { token?: string; callbackURL?: string } | undefined\r\n const token = query?.token?.trim()\r\n if (!token) {\r\n throw new Error('resolveResetPasswordToken requires a non-empty token')\r\n }\r\n const endpoint = `/reset-password/${encodeURIComponent(token)}` as AthenaAuthEndpointPath\r\n return callAuthEndpoint<{ token?: string }>(\r\n resolvedConfig,\r\n { endpoint, method: 'GET' },\r\n undefined,\r\n query?.callbackURL ? { callbackURL: query.callbackURL } : undefined,\r\n mergedOptions,\r\n )\r\n }\r\n\r\n const organization: AthenaAuthOrganizationBindings = {\r\n create: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationCreateRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthOrganization\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/create', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n update: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationUpdateRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthOrganization\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/update', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n delete: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationDeleteRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/delete', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n setActive: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationSetActiveRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/set-active', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n list: (input, options) =>\r\n getGeneric<AthenaAuthOrganization[]>(\r\n '/organization/list',\r\n input,\r\n options,\r\n ),\r\n getFull: (input, options) =>\r\n executeGetWithQueryCompatibleInput<AthenaAuthOrganizationGetFullQuery, {\r\n organization: AthenaAuthOrganization\r\n members?: AthenaAuthOrganizationMember[]\r\n invitations?: AthenaAuthOrganizationInvitation[]\r\n }>(\r\n resolvedConfig,\r\n { endpoint: '/organization/get-full-organization', method: 'GET' },\r\n input,\r\n options,\r\n ),\r\n checkSlug: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationCheckSlugRequest & AthenaAuthFetchCompatibleInput,\r\n { available: boolean }\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/check-slug', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n leave: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationLeaveRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/leave', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n listUserInvitations: (input, options) =>\r\n executeGetWithQueryCompatibleInput<\r\n AthenaAuthOrganizationListUserInvitationsQuery,\r\n AthenaAuthOrganizationInvitation[]\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/list-user-invitations', method: 'GET' },\r\n input,\r\n options,\r\n ),\r\n hasPermission: (input, options) =>\n postGeneric<AthenaAdminHasPermissionResponse>(\n '/organization/has-permission',\n input,\n options,\n ),\n requirePermission: (input, options) =>\n requirePermission('/organization/has-permission', input, options),\n invitation: {\n cancel: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationInvitationActionRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/cancel-invitation', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n accept: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationInvitationActionRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/accept-invitation', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n get: (input, options) =>\r\n executeGetWithQueryCompatibleInput<\r\n AthenaAuthOrganizationGetInvitationQuery,\r\n AthenaAuthOrganizationInvitation\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/get-invitation', method: 'GET' },\r\n input,\r\n options,\r\n ),\r\n reject: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationInvitationActionRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/reject-invitation', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n list: (input, options) =>\r\n executeGetWithQueryCompatibleInput<\r\n AthenaAuthOrganizationListInvitationsQuery,\r\n AthenaAuthOrganizationInvitation[]\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/list-invitations', method: 'GET' },\r\n input,\r\n options,\r\n ),\r\n },\r\n member: {\r\n remove: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationRemoveMemberRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/remove-member', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n updateRole: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationUpdateMemberRoleRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/update-member-role', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n invite: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationInviteMemberRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthOrganizationInvitation\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/invite-member', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n getActive: (input, options) =>\r\n executeGetWithCompatibleInput<AthenaAuthOrganizationMember>(\r\n resolvedConfig,\r\n { endpoint: '/organization/get-active-member', method: 'GET' },\r\n input,\r\n options,\r\n ),\r\n list: (input, options) =>\r\n executeGetWithQueryCompatibleInput<\r\n AthenaAuthOrganizationListMembersQuery,\r\n AthenaAuthOrganizationMember[]\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/list-members', method: 'GET' },\r\n input,\r\n options,\r\n ),\r\n },\r\n }\r\n\r\n const authResetPassword = Object.assign(\r\n (\r\n input: AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/reset-password', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n {\r\n token: resolveResetPasswordToken,\r\n },\r\n )\r\n\r\n const sessionRevokeBinding: AthenaAuthBindings['session']['revoke'] = (\r\n input,\r\n options,\r\n ) => {\r\n if (Array.isArray(input)) {\r\n if (input.length === 0) {\r\n throw new Error('session.revoke requires at least one session token')\r\n }\r\n if (input.length === 1) {\r\n return revokeSession(input[0], options)\r\n }\r\n return revokeSessions(undefined, options)\r\n }\r\n\r\n const parsed = input as AthenaAuthGenericInput & {\r\n token?: string\r\n tokens?: string[]\r\n }\r\n const tokens = Array.isArray(parsed.tokens)\r\n ? parsed.tokens.filter(token => token.trim().length > 0)\r\n : undefined\r\n\r\n if (tokens && tokens.length > 1) {\r\n return revokeSessions(\r\n parsed.fetchOptions ? { fetchOptions: parsed.fetchOptions } : undefined,\r\n options,\r\n )\r\n }\r\n\r\n if (tokens && tokens.length === 1) {\r\n return revokeSession(\r\n { token: tokens[0], fetchOptions: parsed.fetchOptions },\r\n options,\r\n )\r\n }\r\n\r\n const token = parsed.token?.trim()\r\n if (!token) {\r\n throw new Error('session.revoke requires a non-empty token or a non-empty token list')\r\n }\r\n\r\n return revokeSession(\r\n {\r\n token,\r\n fetchOptions: parsed.fetchOptions,\r\n },\r\n options,\r\n )\r\n }\r\n\r\n const adminUserSessionRevokeBinding: AthenaAuthBindings['admin']['user']['session']['revoke'] = (\r\n input,\r\n options,\r\n ) => {\r\n const requireUserId = (userId: string | undefined): string => {\r\n const trimmed = String(userId ?? '').trim()\r\n if (!trimmed) {\r\n throw new Error('admin.user.session.revoke requires a non-empty userId')\r\n }\r\n return trimmed\r\n }\r\n\r\n const requireSinglePluralUserId = (\r\n sessions: AthenaAdminRevokeUserSessionRequest[],\r\n ): AthenaAdminRevokeUserSessionsRequest => {\r\n const uniqueUserIds = [...new Set(sessions.map(session => requireUserId(session.userId)))]\r\n if (uniqueUserIds.length !== 1) {\r\n throw new Error('admin.user.session.revoke requires the same userId across plural payloads')\r\n }\r\n return { userId: uniqueUserIds[0] }\r\n }\r\n\r\n if (Array.isArray(input)) {\r\n if (input.length === 0) {\r\n throw new Error('admin.user.session.revoke requires at least one payload item')\r\n }\r\n if (input.length === 1) {\r\n return postGeneric<AthenaAdminSuccessResponse>(\r\n '/admin/revoke-user-session',\r\n {\r\n ...input[0],\r\n userId: requireUserId(input[0].userId),\r\n } as AthenaAuthGenericInput,\r\n options,\r\n )\r\n }\r\n return postGeneric<AthenaAdminSuccessResponse>(\r\n '/admin/revoke-user-sessions',\r\n requireSinglePluralUserId(input),\r\n options,\r\n )\r\n }\r\n\r\n const parsed = input as AthenaAuthGenericInput & {\r\n sessions?: AthenaAdminRevokeUserSessionRequest[]\r\n sessionToken?: string\r\n userId?: string\r\n }\r\n const sessions = parsed.sessions\r\n\r\n if (sessions && sessions.length === 0) {\r\n throw new Error('admin.user.session.revoke requires at least one payload item')\r\n }\r\n\r\n if (sessions && sessions.length === 1) {\r\n return postGeneric<AthenaAdminSuccessResponse>(\r\n '/admin/revoke-user-session',\r\n {\r\n ...sessions[0],\r\n userId: requireUserId(sessions[0].userId),\r\n fetchOptions: parsed.fetchOptions,\r\n } as AthenaAuthGenericInput,\r\n options,\r\n )\r\n }\r\n\r\n if (sessions && sessions.length > 1) {\r\n return postGeneric<AthenaAdminSuccessResponse>(\r\n '/admin/revoke-user-sessions',\r\n {\r\n ...requireSinglePluralUserId(sessions),\r\n fetchOptions: parsed.fetchOptions,\r\n } as AthenaAuthGenericInput,\r\n options,\r\n )\r\n }\r\n\r\n const normalizedUserId = requireUserId(parsed.userId)\r\n\r\n if (!parsed.sessionToken) {\r\n return postGeneric<AthenaAdminSuccessResponse>(\r\n '/admin/revoke-user-sessions',\r\n {\r\n userId: normalizedUserId,\r\n fetchOptions: parsed.fetchOptions,\r\n } as AthenaAuthGenericInput,\r\n options,\r\n )\r\n }\r\n return postGeneric<AthenaAdminSuccessResponse>(\r\n '/admin/revoke-user-session',\r\n {\r\n ...parsed,\r\n userId: normalizedUserId,\r\n } as AthenaAuthGenericInput,\r\n options,\r\n )\r\n }\r\n\r\n const auth: AthenaAuthBindings = {\n getSession: (input, options) => getGeneric('/get-session', input, options),\n getUser,\n requireSession,\n signOut,\n forgetPassword: (input, options) => postGeneric('/forget-password', input, options),\r\n resetPassword: authResetPassword,\r\n setPassword: (input, options) => postGeneric('/set-password', input, options),\r\n verifyEmail: (input, options) => {\r\n const queryInput: AthenaAuthGenericQueryInput = {\r\n query: {\r\n token: input.token,\r\n callbackURL: input.callbackURL,\r\n },\r\n fetchOptions: input.fetchOptions,\r\n }\r\n return getWithQuery<{ user: AthenaAuthUser; status: boolean }>(\r\n '/verify-email',\r\n queryInput,\r\n options,\r\n )\r\n },\r\n sendVerificationEmail: (input, options) => postGeneric('/send-verification-email', input, options),\r\n changeEmail: (input, options) => postGeneric('/change-email', input, options),\r\n changeEmailVerify: (input, options) => getWithQuery('/change-email/verify', input, options),\r\n deleteUserVerify: (input, options) => getWithQuery('/delete-user/verify', input, options),\r\n changePassword: (input, options) => postGeneric('/change-password', input, options),\r\n user: {\r\n update: (input, options) => postGeneric('/update-user', input, options),\r\n delete: (input, options) => postGeneric('/delete-user', input, options),\r\n email: {\r\n list: listUserEmailsWithFallback,\r\n },\r\n },\r\n session: {\r\n list: (input, options) => getGeneric('/list-sessions', input, options),\r\n revoke: sessionRevokeBinding,\r\n revokeOther: revokeOtherSessions,\r\n },\r\n social: {\r\n link: (input, options) => postGeneric('/link-social', input, options),\r\n },\r\n account: {\r\n list: (input, options) => getGeneric('/list-accounts', input, options),\r\n unlink: (input, options) => postGeneric('/unlink-account', input, options),\r\n },\r\n deleteUser: {\r\n callback: deleteUserCallback,\r\n },\r\n refreshToken: (input, options) => postGeneric('/refresh-token', input, options),\r\n getAccessToken: (input, options) => postGeneric('/get-access-token', input, options),\r\n health: healthWithFallback,\r\n ok: (input, options) => getGeneric('/ok', input, options),\r\n error: (input, options) => getGeneric('/error', input, options),\r\n twoFactor: {\r\n getTotpUri: (input, options) => postGeneric('/two-factor/get-totp-uri', input, options),\r\n verifyTotp: (input, options) => postGeneric('/two-factor/verify-totp', input, options),\r\n sendOtp: (input, options) => postGeneric('/two-factor/send-otp', input, options),\r\n verifyOtp: (input, options) => postGeneric('/two-factor/verify-otp', input, options),\r\n verifyBackupCode: (input, options) => postGeneric('/two-factor/verify-backup-code', input, options),\r\n generateBackupCodes: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaTwoFactorGenerateBackupCodesRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaTwoFactorGenerateBackupCodesResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/two-factor/generate-backup-codes', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n enable: (input, options) => postGeneric('/two-factor/enable', input, options),\r\n disable: (input, options) => postGeneric('/two-factor/disable', input, options),\r\n },\r\n passkey: {\r\n generateRegisterOptions: (input, options) =>\r\n getGeneric('/passkey/generate-register-options', input, options),\r\n generateAuthenticateOptions: (input, options) =>\r\n postGeneric('/passkey/generate-authenticate-options', input, options),\r\n verifyRegistration: (input, options) =>\r\n postGeneric('/passkey/verify-registration', input, options),\r\n verifyAuthentication: (input, options) =>\r\n postGeneric('/passkey/verify-authentication', input, options),\r\n listUserPasskeys: (input, options) => getGeneric('/passkey/list-user-passkeys', input, options),\r\n deletePasskey: (input, options) => postGeneric('/passkey/delete-passkey', input, options),\r\n updatePasskey: (input, options) => postGeneric('/passkey/update-passkey', input, options),\r\n getRelatedOrigins: (input, options) => getGeneric('/.well-known/webauthn', input, options),\r\n },\r\n admin: {\n role: {\r\n set: (input, options) => postGeneric('/admin/set-role', input, options),\r\n },\r\n user: {\r\n list: (input, options) => getWithQuery('/admin/list-users', input, options),\r\n create: (input, options) => postGeneric('/admin/create-user', input, options),\r\n unban: (input, options) => postGeneric('/admin/unban-user', input, options),\r\n ban: (input, options) => postGeneric('/admin/ban-user', input, options),\r\n impersonate: (input, options) => postGeneric('/admin/impersonate-user', input, options),\r\n stopImpersonating: (input, options) => postGeneric('/admin/stop-impersonating', input, options),\r\n remove: (input, options) => postGeneric('/admin/remove-user', input, options),\r\n setPassword: (input, options) => postGeneric('/admin/set-user-password', input, options),\r\n session: {\r\n list: (input, options) => postGeneric('/admin/list-user-sessions', input, options),\r\n revoke: adminUserSessionRevokeBinding,\r\n },\r\n },\r\n hasPermission: (input, options) =>\n postGeneric<AthenaAdminHasPermissionResponse>('/admin/has-permission', input, options),\n requirePermission: (input, options) =>\n requirePermission('/admin/has-permission', input, options),\n apiKey: {\n create: (input, options) => postGeneric('/admin/api-key/create', input, options),\r\n },\r\n athenaClient: {\r\n create: (input, options) => postGeneric('/admin/athena-client/create', input, options),\r\n list: (input, options) => getWithQuery('/admin/athena-client/list', input, options),\r\n },\r\n auditLog: {\r\n list: (input, options) => getWithQuery('/admin/audit-log/list', input, options),\r\n },\r\n email: {\r\n list: (input, options) => getWithQuery('/admin/email/list', input, options),\r\n get: (input, options) => getWithQuery('/admin/email/get', input, options),\r\n create: async (input, options) =>\r\n postGeneric(\r\n '/admin/email/create',\r\n await resolveAdminEmailPayload('/admin/email/create', input),\r\n options,\r\n ),\r\n update: async (input, options) =>\r\n postGeneric(\r\n '/admin/email/update',\r\n await resolveAdminEmailPayload('/admin/email/update', input),\r\n options,\r\n ),\r\n delete: (input, options) => postGeneric('/admin/email/delete', input, options),\r\n failure: {\r\n list: (input, options) => getWithQuery('/admin/email-failure/list', input, options),\r\n get: (input, options) => getWithQuery('/admin/email-failure/get', input, options),\r\n create: (input, options) => postGeneric('/admin/email-failure/create', input, options),\r\n update: (input, options) => postGeneric('/admin/email-failure/update', input, options),\r\n delete: (input, options) => postGeneric('/admin/email-failure/delete', input, options),\r\n },\r\n template: {\n list: (input, options) => getWithQuery('/admin/email-template/list', input, options),\n get: (input, options) => getWithQuery('/admin/email-template/get', input, options),\n create: async (input, options) =>\r\n postGeneric(\r\n '/admin/email-template/create',\r\n await resolveAdminEmailTemplatePayload('/admin/email-template/create', input),\r\n options,\r\n ),\r\n update: async (input, options) =>\n postGeneric(\n '/admin/email-template/update',\n await resolveAdminEmailTemplatePayload('/admin/email-template/update', input),\n options,\n ),\n delete: (input, options) => postGeneric('/admin/email-template/delete', input, options),\n send: (input, options) =>\n postGeneric(\n '/admin/email-template/send',\n normalizeAdminEmailTemplateSendPayload(extractFetchOptions(input).payload as Record<string, unknown>),\n options,\n ),\n },\n eventType: {\n list: (input, options) => getWithQuery('/admin/email-event-type/list', input, options),\n },\n },\n emailTemplate: {\n get: (input, options) => getWithQuery('/admin/email-template/get', input, options),\r\n create: async (input, options) =>\r\n postGeneric(\r\n '/admin/email-template/create',\r\n await resolveAdminEmailTemplatePayload('/admin/email-template/create', input),\r\n options,\r\n ),\r\n delete: (input, options) => postGeneric('/admin/email-template/delete', input, options),\r\n list: (input, options) => getWithQuery('/admin/email-template/list', input, options),\r\n update: async (input, options) =>\n postGeneric(\n '/admin/email-template/update',\n await resolveAdminEmailTemplatePayload('/admin/email-template/update', input),\n options,\n ),\n send: (input, options) =>\n postGeneric(\n '/admin/email-template/send',\n normalizeAdminEmailTemplateSendPayload(extractFetchOptions(input).payload as Record<string, unknown>),\n options,\n ),\n },\n emailEventType: {\n list: (input, options) => getWithQuery('/admin/email-event-type/list', input, options),\n },\n },\n apiKey: {\r\n create: (input, options) => postGeneric('/api-key/create', input, options),\r\n get: (input, options) => getWithQuery('/api-key/get', input, options),\r\n update: (input, options) => postGeneric('/api-key/update', input, options),\r\n delete: (input, options) => postGeneric('/api-key/delete', input, options),\r\n list: (input, options) => getWithQuery('/api-key/list', input, options),\r\n verify: (input, options) => postGeneric('/api-key/verify', input, options),\r\n deleteAllExpired: (input, options) =>\r\n executePostWithOptionalInput<AthenaApiKeyDeleteAllExpiredResponse>(\r\n resolvedConfig,\r\n { endpoint: '/api-key/delete-all-expired-api-keys', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n },\r\n signIn: {\r\n email: (input, options) => postGeneric('/sign-in/email', input, options),\r\n username: (input, options) => postGeneric('/sign-in/username', input, options),\r\n social: (input, options) => postGeneric('/sign-in/social', input, options),\r\n },\r\n signUp: {\r\n email: (input, options) => postGeneric('/sign-up/email', input, options),\r\n },\n organization,\n callback: {\r\n provider: (input, options) => {\r\n const { payload, fetchOptions } = extractFetchOptions(input)\r\n const parsed = payload as {\r\n provider?: string\r\n code?: string\r\n state?: string\r\n } | undefined\r\n const provider = String(parsed?.provider ?? '').trim()\r\n if (!provider) {\r\n throw new Error('callback.provider requires a non-empty provider value')\r\n }\r\n const code = String(parsed?.code ?? '').trim()\r\n const state = String(parsed?.state ?? '').trim()\r\n if (!code || !state) {\r\n throw new Error('callback.provider requires non-empty code and state values')\r\n }\r\n const endpoint = `/callback/${encodeURIComponent(provider)}` as AthenaAuthEndpointPath\r\n return request({\r\n endpoint,\r\n method: 'GET',\r\n query: {\r\n code,\r\n state,\r\n },\r\n fetchOptions,\r\n }, options)\r\n },\r\n },\r\n }\r\n\r\n return {\n baseUrl: normalizedBaseUrl,\n request,\n signIn: {\r\n email: (\r\n input: AthenaEmailSignInRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaEmailSignInRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthSignInResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/sign-in/email', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n username: (\r\n input: AthenaUsernameSignInRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaUsernameSignInRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthSignInResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/sign-in/username', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n social: (\r\n input: AthenaSocialSignInRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaSocialSignInRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthSocialRedirectResponse | AthenaAuthSignInResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/sign-in/social', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n },\r\n signUp: {\r\n email: (\r\n input: AthenaEmailSignUpRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaEmailSignUpRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthSignInResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/sign-up/email', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n },\r\n signOut,\r\n logout: signOut,\r\n getSession: (input?: AthenaAuthFetchCompatibleInput, options?: AthenaAuthCallOptions) =>\n executeGetWithCompatibleInput<AthenaAuthSessionResponse>(\n resolvedConfig,\n { endpoint: '/get-session', method: 'GET' },\n input,\n options,\n ),\n getUser,\n requireSession,\n listSessions: (input?: AthenaAuthFetchCompatibleInput, options?: AthenaAuthCallOptions) =>\n executeGetWithCompatibleInput<AthenaAuthSession[]>(\n resolvedConfig,\r\n { endpoint: '/list-sessions', method: 'GET' },\r\n input,\r\n options,\r\n ),\r\n revokeSession,\r\n clearSession: revokeSession,\r\n revokeSessions,\r\n clearSessions: revokeSessions,\r\n revokeOtherSessions,\r\n clearOtherSessions: revokeOtherSessions,\r\n forgetPassword: (\r\n input: AthenaForgetPasswordRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaForgetPasswordRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/forget-password', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n resetPassword: (\r\n input: AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/reset-password', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n resolveResetPasswordToken,\r\n verifyEmail: (\r\n input: AthenaVerifyEmailRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) => {\r\n const { payload, fetchOptions } = extractFetchOptions(input)\r\n const mergedOptions = mergeCallOptions(fetchOptions, options)\r\n const query = payload as AthenaVerifyEmailRequest | undefined\r\n return callAuthEndpoint<{ user: AthenaAuthUser; status: boolean }>(\r\n resolvedConfig,\r\n { endpoint: '/verify-email', method: 'GET' },\r\n undefined,\r\n query\r\n ? {\r\n token: query.token,\r\n callbackURL: query.callbackURL,\r\n }\r\n : undefined,\r\n mergedOptions,\r\n )\r\n },\r\n sendVerificationEmail: (\r\n input: AthenaSendVerificationEmailRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaSendVerificationEmailRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/send-verification-email', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n changeEmail: (\r\n input: AthenaChangeEmailRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaChangeEmailRequest & AthenaAuthFetchCompatibleInput,\r\n { status: boolean; message?: string | null }\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/change-email', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n changePassword: (\r\n input: AthenaChangePasswordRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaChangePasswordRequest & AthenaAuthFetchCompatibleInput,\r\n { token?: string | null; user: AthenaAuthUser }\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/change-password', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n updateUser: (\r\n input: AthenaUpdateUserRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaUpdateUserRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/update-user', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n deleteUser,\r\n deleteUserCallback,\r\n linkSocial: (\r\n input: AthenaLinkSocialRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaLinkSocialRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthSocialRedirectResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/link-social', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n listAccounts: (input?: AthenaAuthFetchCompatibleInput, options?: AthenaAuthCallOptions) =>\r\n executeGetWithCompatibleInput<AthenaAuthLinkedAccount[]>(\r\n resolvedConfig,\r\n { endpoint: '/list-accounts', method: 'GET' },\r\n input,\r\n options,\r\n ),\r\n unlinkAccount: (\r\n input: AthenaUnlinkAccountRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaUnlinkAccountRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/unlink-account', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n refreshToken: (\r\n input: AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaOAuthTokenBundle\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/refresh-token', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n getAccessToken: (\r\n input: AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaOAuthTokenBundle\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/get-access-token', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n organization,\r\n auth,\r\n }\r\n}\r\n","export function parseBooleanFlag(\n rawValue: string | undefined,\n fallback: boolean,\n): boolean {\n if (!rawValue) return fallback\n\n const normalized = rawValue.trim().toLowerCase()\n\n if (\n normalized === '1' ||\n normalized === 'true' ||\n normalized === 'yes' ||\n normalized === 'on'\n ) {\n return true\n }\n\n if (\n normalized === '0' ||\n normalized === 'false' ||\n normalized === 'no' ||\n normalized === 'off'\n ) {\n return false\n }\n\n return fallback\n}\n","import type { AthenaResult } from './client.ts'\r\nimport { AthenaGatewayError, isAthenaGatewayError } from './gateway/errors.ts'\r\nimport type { AthenaGatewayErrorCode, AthenaGatewayErrorDetails } from './gateway/types.ts'\r\nimport { parseBooleanFlag as parseBooleanFlagUtil } from './utils/parse-boolean-flag.ts'\r\n\r\nexport type AthenaErrorKind =\r\n | 'unique_violation'\r\n | 'not_found'\r\n | 'validation'\r\n | 'auth'\r\n | 'rate_limit'\r\n | 'transient'\r\n | 'unknown'\r\n\r\nexport const AthenaErrorKind = {\r\n UniqueViolation: 'unique_violation',\r\n NotFound: 'not_found',\r\n Validation: 'validation',\r\n Auth: 'auth',\r\n RateLimit: 'rate_limit',\r\n Transient: 'transient',\r\n Unknown: 'unknown',\r\n} as const\r\n\r\nexport type AthenaErrorCode =\r\n | 'UNIQUE_VIOLATION'\r\n | 'NOT_FOUND'\r\n | 'VALIDATION_FAILED'\r\n | 'AUTH_UNAUTHORIZED'\r\n | 'AUTH_FORBIDDEN'\r\n | 'RATE_LIMITED'\r\n | 'NETWORK_UNAVAILABLE'\r\n | 'TRANSIENT_FAILURE'\r\n | 'HTTP_FAILURE'\r\n | 'UNKNOWN'\r\n\r\nexport const AthenaErrorCode = {\r\n UniqueViolation: 'UNIQUE_VIOLATION',\r\n NotFound: 'NOT_FOUND',\r\n ValidationFailed: 'VALIDATION_FAILED',\r\n AuthUnauthorized: 'AUTH_UNAUTHORIZED',\r\n AuthForbidden: 'AUTH_FORBIDDEN',\r\n RateLimited: 'RATE_LIMITED',\r\n NetworkUnavailable: 'NETWORK_UNAVAILABLE',\r\n TransientFailure: 'TRANSIENT_FAILURE',\r\n HttpFailure: 'HTTP_FAILURE',\r\n Unknown: 'UNKNOWN',\r\n} as const satisfies Record<string, AthenaErrorCode>\r\n\r\nexport type AthenaErrorCategory = 'transport' | 'client' | 'server' | 'database' | 'unknown'\r\n\r\nexport const AthenaErrorCategory = {\r\n Transport: 'transport',\r\n Client: 'client',\r\n Server: 'server',\r\n Database: 'database',\r\n Unknown: 'unknown',\r\n} as const satisfies Record<string, AthenaErrorCategory>\r\n\r\nexport interface AthenaOperationContext {\r\n table?: string\r\n operation?: string\r\n identity?: string | Record<string, unknown>\r\n}\r\n\r\nexport interface NormalizedAthenaError {\r\n kind: AthenaErrorKind\r\n code: AthenaErrorCode\r\n category: AthenaErrorCategory\r\n retryable: boolean\r\n status?: number\r\n constraint?: string\r\n table?: string\r\n operation?: string\r\n message: string\r\n raw: unknown\r\n}\r\n\r\nexport interface AthenaErrorInput {\r\n code: AthenaErrorCode\r\n kind: AthenaErrorKind\r\n category: AthenaErrorCategory\r\n message: string\r\n status?: number\r\n retryable?: boolean\r\n requestId?: string\r\n context?: AthenaOperationContext\r\n raw?: unknown\r\n}\r\n\r\nexport interface UnwrapOptions {\r\n allowNull?: boolean\r\n context?: AthenaOperationContext\r\n}\r\n\r\nexport interface UnwrapOneOptions extends UnwrapOptions {\r\n requireExactlyOne?: boolean\r\n}\r\n\r\nexport interface IntCoercionOptions {\r\n strictBigInt?: boolean\r\n min?: number\r\n max?: number\r\n}\r\n\r\nexport type RetryBackoffStrategy =\r\n | 'linear'\r\n | 'exponential'\r\n | ((attempt: number, error: unknown) => number)\r\n\r\nexport interface RetryConfig {\r\n retries: number\r\n baseDelayMs?: number\r\n maxDelayMs?: number\r\n backoff?: RetryBackoffStrategy\r\n jitter?: boolean | number\r\n shouldRetry?: (error: unknown, attempt: number) => boolean | Promise<boolean>\r\n}\r\n\r\nexport interface RequireAffectedOptions {\r\n min?: number\r\n}\r\n\r\n/**\r\n * Parses a string-based boolean flag with a deterministic fallback.\r\n *\r\n * Accepts common truthy/falsey token variants used by env vars and CLI flags.\r\n */\r\nexport function parseBooleanFlag(\r\n rawValue: string | undefined,\r\n fallback: boolean,\r\n): boolean {\r\n return parseBooleanFlagUtil(rawValue, fallback)\r\n}\r\n\r\nexport class AthenaError extends Error {\r\n readonly code: AthenaErrorCode\r\n readonly kind: AthenaErrorKind\r\n readonly category: AthenaErrorCategory\r\n readonly status?: number\r\n readonly retryable: boolean\r\n readonly requestId?: string\r\n readonly context?: AthenaOperationContext\r\n readonly raw?: unknown\r\n\r\n constructor(input: AthenaErrorInput) {\r\n super(input.message)\r\n this.name = 'AthenaError'\r\n this.code = input.code\r\n this.kind = input.kind\r\n this.category = input.category\r\n this.status = input.status\r\n this.retryable = input.retryable ?? false\r\n this.requestId = input.requestId\r\n this.context = input.context\r\n this.raw = input.raw\r\n }\r\n}\r\n\r\nfunction isRecord(value: unknown): value is Record<string, unknown> {\r\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\r\n}\r\n\r\nfunction firstNonEmptyString(...values: unknown[]): string | undefined {\r\n for (const value of values) {\r\n if (typeof value === 'string' && value.trim().length > 0) {\r\n return value.trim()\r\n }\r\n }\r\n return undefined\r\n}\r\n\r\nfunction messageFromUnknownError(error: unknown): string | undefined {\r\n if (typeof error === 'string' && error.trim().length > 0) {\r\n return error.trim()\r\n }\r\n if (error instanceof Error && error.message.trim().length > 0) {\r\n return error.message.trim()\r\n }\r\n if (!isRecord(error)) {\r\n return undefined\r\n }\r\n return firstNonEmptyString(error.message, error.error, error.details)\r\n}\r\n\r\nfunction gatewayCodeFromUnknownError(error: unknown): AthenaGatewayErrorCode | undefined {\r\n if (!isRecord(error) || typeof error.gatewayCode !== 'string') {\r\n return undefined\r\n }\r\n return error.gatewayCode as AthenaGatewayErrorCode\r\n}\r\n\r\nfunction isAthenaResultErrorLike(\r\n value: unknown,\r\n): value is {\r\n message: string\r\n athenaCode?: AthenaErrorCode\r\n kind?: AthenaErrorKind\r\n category?: AthenaErrorCategory\r\n retryable?: boolean\r\n status?: number\r\n constraint?: string\r\n table?: string\r\n operation?: string\r\n raw?: unknown\r\n} {\r\n return (\r\n isRecord(value) &&\r\n typeof value.message === 'string' &&\r\n (value.athenaCode === undefined || isAthenaErrorCode(value.athenaCode)) &&\r\n (value.kind === undefined || isAthenaErrorKind(value.kind)) &&\r\n (value.category === undefined || isAthenaErrorCategory(value.category)) &&\r\n (value.retryable === undefined || typeof value.retryable === 'boolean') &&\r\n (value.status === undefined || typeof value.status === 'number')\r\n )\r\n}\r\n\r\nfunction isAthenaErrorKind(value: unknown): value is AthenaErrorKind {\r\n return (\r\n value === 'unique_violation' ||\r\n value === 'not_found' ||\r\n value === 'validation' ||\r\n value === 'auth' ||\r\n value === 'rate_limit' ||\r\n value === 'transient' ||\r\n value === 'unknown'\r\n )\r\n}\r\n\r\nfunction isAthenaErrorCode(value: unknown): value is AthenaErrorCode {\r\n return (\r\n value === 'UNIQUE_VIOLATION' ||\r\n value === 'NOT_FOUND' ||\r\n value === 'VALIDATION_FAILED' ||\r\n value === 'AUTH_UNAUTHORIZED' ||\r\n value === 'AUTH_FORBIDDEN' ||\r\n value === 'RATE_LIMITED' ||\r\n value === 'NETWORK_UNAVAILABLE' ||\r\n value === 'TRANSIENT_FAILURE' ||\r\n value === 'HTTP_FAILURE' ||\r\n value === 'UNKNOWN'\r\n )\r\n}\r\n\r\nfunction isAthenaErrorCategory(value: unknown): value is AthenaErrorCategory {\r\n return (\r\n value === 'transport' ||\r\n value === 'client' ||\r\n value === 'server' ||\r\n value === 'database' ||\r\n value === 'unknown'\r\n )\r\n}\r\n\r\nfunction isNormalizedAthenaError(value: unknown): value is NormalizedAthenaError {\r\n return (\r\n isRecord(value) &&\r\n isAthenaErrorKind(value.kind) &&\r\n isAthenaErrorCode(value.code) &&\r\n isAthenaErrorCategory(value.category) &&\r\n typeof value.retryable === 'boolean' &&\r\n typeof value.message === 'string' &&\r\n 'raw' in value\r\n )\r\n}\r\n\r\nfunction withContextOverrides(\r\n normalized: NormalizedAthenaError,\r\n context?: AthenaOperationContext,\r\n): NormalizedAthenaError {\r\n if (!context?.table && !context?.operation) {\r\n return normalized\r\n }\r\n\r\n return {\r\n ...normalized,\r\n table: context.table ?? normalized.table,\r\n operation: context.operation ?? normalized.operation,\r\n }\r\n}\r\n\r\nfunction resolveAttachedNormalizedError(resultOrError: unknown): NormalizedAthenaError | undefined {\r\n if (!isRecord(resultOrError)) return undefined\r\n if (!('__athenaNormalizedError' in resultOrError)) return undefined\r\n const candidate = resultOrError.__athenaNormalizedError\r\n return isNormalizedAthenaError(candidate) ? candidate : undefined\r\n}\r\n\r\nfunction safeStringify(value: unknown): string {\r\n try {\r\n const serialized = JSON.stringify(value)\r\n return serialized ?? String(value)\r\n } catch {\r\n return '[unserializable]'\r\n }\r\n}\r\n\r\nfunction contextHint(context?: AthenaOperationContext): string | undefined {\r\n if (!context?.identity) return undefined\r\n const identity =\r\n typeof context.identity === 'string' ? context.identity : safeStringify(context.identity)\r\n return `Identity: ${identity}`\r\n}\r\n\r\nfunction isAthenaResultLike(value: unknown): value is AthenaResult<unknown> {\r\n return (\r\n isRecord(value) &&\r\n 'status' in value &&\r\n 'error' in value &&\r\n 'data' in value &&\r\n typeof value.status === 'number'\r\n )\r\n}\r\n\r\nfunction operationFromDetails(details?: AthenaGatewayErrorDetails | null): string | undefined {\r\n if (!details?.endpoint) return undefined\r\n if (details.endpoint === '/gateway/fetch' || details.endpoint === '/gateway/query') return 'select'\r\n if (details.endpoint === '/gateway/insert') return 'insert'\r\n if (details.endpoint === '/gateway/update') return 'update'\r\n if (details.endpoint === '/gateway/delete') return 'delete'\r\n if (details.endpoint === '/gateway/rpc' || details.endpoint.startsWith('/rpc/')) return 'rpc'\r\n return undefined\r\n}\r\n\r\nfunction matchRegex(input: string, patterns: RegExp[]): string | undefined {\r\n for (const pattern of patterns) {\r\n const match = pattern.exec(input)\r\n if (match?.[1]) return match[1]\r\n }\r\n return undefined\r\n}\r\n\r\nfunction extractConstraint(message: string): string | undefined {\r\n return matchRegex(message, [\r\n /unique constraint\\s+[\"'`]([^\"'`]+)[\"'`]/i,\r\n /constraint\\s+[\"'`]([^\"'`]+)[\"'`]/i,\r\n ])\r\n}\r\n\r\nfunction extractTable(message: string): string | undefined {\r\n return matchRegex(message, [\r\n /(?:table|relation)\\s+[\"'`]([^\"'`]+)[\"'`]/i,\r\n /on\\s+table\\s+([a-zA-Z0-9_.]+)/i,\r\n ])\r\n}\r\n\r\nfunction classifyKind(status: number | undefined, code: AthenaGatewayErrorCode | undefined, message: string): AthenaErrorKind {\r\n const lower = message.toLowerCase()\r\n const hasUniquePattern =\r\n lower.includes('unique constraint') ||\r\n lower.includes('duplicate key') ||\r\n lower.includes('already exists') ||\r\n lower.includes('duplicate')\r\n const hasNotFoundPattern = lower.includes('not found') || lower.includes('no rows')\r\n const hasValidationPattern =\r\n lower.includes('validation') || lower.includes('invalid') || lower.includes('malformed')\r\n const hasAuthPattern =\r\n lower.includes('unauthorized') || lower.includes('forbidden') || lower.includes('auth')\r\n const hasRateLimitPattern = lower.includes('rate limit') || lower.includes('too many requests')\r\n const hasTransientPattern =\r\n lower.includes('timeout') ||\r\n lower.includes('temporar') ||\r\n lower.includes('connection reset') ||\r\n lower.includes('socket') ||\r\n lower.includes('deadlock')\r\n\r\n if (status === 409 || hasUniquePattern) return 'unique_violation'\r\n if (status === 404 || hasNotFoundPattern) return 'not_found'\r\n if (status === 401 || status === 403 || hasAuthPattern) return 'auth'\r\n if (status === 429 || hasRateLimitPattern) return 'rate_limit'\r\n if (code === 'INVALID_URL') return 'validation'\r\n if (status === 400 || status === 422 || hasValidationPattern) return 'validation'\r\n if (code === 'NETWORK_ERROR' || status === 0 || (status !== undefined && status >= 500) || hasTransientPattern) {\r\n return 'transient'\r\n }\r\n return 'unknown'\r\n}\r\n\r\nfunction toAthenaErrorCode(\r\n kind: AthenaErrorKind,\r\n status: number | undefined,\r\n gatewayCode?: AthenaGatewayErrorCode,\r\n): AthenaErrorCode {\r\n if (gatewayCode === 'INVALID_URL') {\r\n return AthenaErrorCode.ValidationFailed\r\n }\r\n\r\n if (gatewayCode === 'NETWORK_ERROR' || (kind === 'transient' && status === 0)) {\r\n return AthenaErrorCode.NetworkUnavailable\r\n }\r\n\r\n switch (kind) {\r\n case 'unique_violation':\r\n return AthenaErrorCode.UniqueViolation\r\n case 'not_found':\r\n return AthenaErrorCode.NotFound\r\n case 'validation':\r\n return AthenaErrorCode.ValidationFailed\r\n case 'rate_limit':\r\n return AthenaErrorCode.RateLimited\r\n case 'auth':\r\n if (status === 403) {\r\n return AthenaErrorCode.AuthForbidden\r\n }\r\n return AthenaErrorCode.AuthUnauthorized\r\n case 'transient':\r\n return status !== undefined && status >= 500\r\n ? AthenaErrorCode.HttpFailure\r\n : AthenaErrorCode.TransientFailure\r\n case 'unknown':\r\n default:\r\n return status !== undefined && status >= 400\r\n ? AthenaErrorCode.HttpFailure\r\n : AthenaErrorCode.Unknown\r\n }\r\n}\r\n\r\nfunction toAthenaErrorCategory(kind: AthenaErrorKind, status: number | undefined): AthenaErrorCategory {\r\n if (kind === 'transient' && (status === 0 || status === undefined)) {\r\n return AthenaErrorCategory.Transport\r\n }\r\n if (kind === 'unique_violation') return AthenaErrorCategory.Database\r\n if (kind === 'validation' || kind === 'auth' || kind === 'not_found') return AthenaErrorCategory.Client\r\n if (kind === 'rate_limit' || kind === 'transient') return AthenaErrorCategory.Server\r\n return AthenaErrorCategory.Unknown\r\n}\r\n\r\nfunction isRetryable(kind: AthenaErrorKind, status: number | undefined): boolean {\r\n if (kind === 'rate_limit' || kind === 'transient') return true\r\n return status !== undefined && status >= 500\r\n}\r\n\r\nfunction toGatewayCode(kind: AthenaErrorKind, status?: number): AthenaGatewayErrorCode {\r\n if (kind === 'transient' && (status === 0 || status === undefined)) return 'NETWORK_ERROR'\r\n if (kind === 'validation') return 'INVALID_JSON'\r\n if (status !== undefined && status >= 400) return 'HTTP_ERROR'\r\n return 'UNKNOWN_ERROR'\r\n}\r\n\r\nfunction toAthenaGatewayError(\r\n source: unknown,\r\n fallbackMessage: string,\r\n context?: AthenaOperationContext,\r\n): AthenaGatewayError {\r\n if (isAthenaGatewayError(source)) {\r\n return source\r\n }\r\n\r\n if (isAthenaResultLike(source) && source.errorDetails) {\r\n const message =\r\n messageFromUnknownError(source.error) ??\r\n source.errorDetails.message ??\r\n fallbackMessage\r\n return new AthenaGatewayError({\r\n code: source.errorDetails.code,\r\n message,\r\n status: source.status,\r\n endpoint: source.errorDetails.endpoint,\r\n method: source.errorDetails.method,\r\n requestId: source.errorDetails.requestId,\r\n hint:\r\n (isRecord(source.error) ? firstNonEmptyString(source.error.hint) : undefined) ??\r\n source.errorDetails.hint,\r\n cause:\r\n (isRecord(source.error) ? firstNonEmptyString(source.error.cause) : undefined) ??\r\n source.errorDetails.cause,\r\n })\r\n }\r\n\r\n const normalized = normalizeAthenaError(source, context)\r\n const message =\r\n isAthenaResultLike(source) && source.error == null && source.errorDetails == null\r\n ? fallbackMessage\r\n : normalized.message || fallbackMessage\r\n\r\n return new AthenaGatewayError({\r\n code: toGatewayCode(normalized.kind, normalized.status),\r\n message,\r\n status: normalized.status ?? 0,\r\n hint:\r\n normalized.constraint != null\r\n ? `Constraint: ${normalized.constraint}`\r\n : contextHint(context),\r\n cause: typeof normalized.raw === 'string' ? normalized.raw : safeStringify(normalized.raw),\r\n })\r\n}\r\n\r\n/**\r\n * Returns `true` when a result is successful (`2xx` status and no `error`).\r\n */\r\nexport function isOk<T>(result: AthenaResult<T>): boolean {\r\n return result.error == null && result.status >= 200 && result.status < 300\r\n}\r\n\r\n/**\r\n * @deprecated Prefer `result.error` on failed `AthenaResult` values and the\r\n * structured fields already attached to thrown SDK errors. This helper is\r\n * retained for compatibility with mixed unknown inputs.\r\n *\r\n * Normalizes any Athena failure shape into a stable, typed error envelope.\r\n *\r\n * Accepts `AthenaResult`, `AthenaGatewayError`, native `Error`, or unknown values.\r\n * Optional `context` can override inferred table/operation metadata for clearer diagnostics.\r\n */\r\nexport function normalizeAthenaError(\r\n resultOrError: unknown,\r\n context?: AthenaOperationContext,\r\n): NormalizedAthenaError {\r\n const attached = resolveAttachedNormalizedError(resultOrError)\r\n if (attached) {\r\n return withContextOverrides(attached, context)\r\n }\r\n\r\n if (isAthenaResultLike(resultOrError)) {\r\n if (isAthenaResultErrorLike(resultOrError.error)) {\r\n return {\r\n kind: resultOrError.error.kind ?? classifyKind(resultOrError.status, gatewayCodeFromUnknownError(resultOrError.error), resultOrError.error.message),\r\n code:\r\n resultOrError.error.athenaCode ??\r\n toAthenaErrorCode(\r\n resultOrError.error.kind ??\r\n classifyKind(\r\n resultOrError.status,\r\n gatewayCodeFromUnknownError(resultOrError.error),\r\n resultOrError.error.message,\r\n ),\r\n resultOrError.error.status ?? resultOrError.status,\r\n gatewayCodeFromUnknownError(resultOrError.error),\r\n ),\r\n category:\r\n resultOrError.error.category ??\r\n toAthenaErrorCategory(\r\n resultOrError.error.kind ??\r\n classifyKind(\r\n resultOrError.status,\r\n gatewayCodeFromUnknownError(resultOrError.error),\r\n resultOrError.error.message,\r\n ),\r\n resultOrError.error.status ?? resultOrError.status,\r\n ),\r\n retryable:\r\n resultOrError.error.retryable ??\r\n isRetryable(\r\n resultOrError.error.kind ??\r\n classifyKind(\r\n resultOrError.status,\r\n gatewayCodeFromUnknownError(resultOrError.error),\r\n resultOrError.error.message,\r\n ),\r\n resultOrError.error.status ?? resultOrError.status,\r\n ),\r\n status: resultOrError.error.status ?? resultOrError.status,\r\n constraint: resultOrError.error.constraint,\r\n table: context?.table ?? resultOrError.error.table,\r\n operation: context?.operation ?? resultOrError.error.operation,\r\n message: resultOrError.error.message,\r\n raw: resultOrError.error.raw ?? resultOrError.raw,\r\n }\r\n }\r\n\r\n const details = resultOrError.errorDetails\r\n const message =\r\n messageFromUnknownError(resultOrError.error) ??\r\n details?.message ??\r\n `Athena ${context?.operation ?? operationFromDetails(details) ?? 'request'} failed`\r\n const operation = context?.operation ?? operationFromDetails(details)\r\n const table = context?.table ?? extractTable(message)\r\n const constraint = extractConstraint(message)\r\n const gatewayCode = details?.code ?? gatewayCodeFromUnknownError(resultOrError.error)\r\n const kind = classifyKind(resultOrError.status, gatewayCode, message)\r\n const code = toAthenaErrorCode(kind, resultOrError.status, gatewayCode)\r\n const category = toAthenaErrorCategory(kind, resultOrError.status)\r\n return {\r\n kind,\r\n code,\r\n category,\r\n retryable: isRetryable(kind, resultOrError.status),\r\n status: resultOrError.status,\r\n constraint,\r\n table,\r\n operation,\r\n message,\r\n raw: resultOrError.raw,\r\n }\r\n }\r\n\r\n if (isAthenaGatewayError(resultOrError)) {\r\n const details = resultOrError.toDetails()\r\n const operation = context?.operation ?? operationFromDetails(details)\r\n const table = context?.table ?? extractTable(resultOrError.message)\r\n const constraint = extractConstraint(resultOrError.message)\r\n const kind = classifyKind(resultOrError.status, resultOrError.code, resultOrError.message)\r\n const code = toAthenaErrorCode(kind, resultOrError.status, resultOrError.code)\r\n const category = toAthenaErrorCategory(kind, resultOrError.status)\r\n return {\r\n kind,\r\n code,\r\n category,\r\n retryable: isRetryable(kind, resultOrError.status),\r\n status: resultOrError.status,\r\n constraint,\r\n table,\r\n operation,\r\n message: resultOrError.message,\r\n raw: resultOrError,\r\n }\r\n }\r\n\r\n if (resultOrError instanceof Error) {\r\n const maybeStatus =\r\n isRecord(resultOrError) && typeof resultOrError.status === 'number'\r\n ? resultOrError.status\r\n : undefined\r\n const kind = classifyKind(maybeStatus, undefined, resultOrError.message)\r\n return {\r\n kind,\r\n code: toAthenaErrorCode(kind, maybeStatus),\r\n category: toAthenaErrorCategory(kind, maybeStatus),\r\n retryable: isRetryable(kind, maybeStatus),\r\n status: maybeStatus,\r\n constraint: extractConstraint(resultOrError.message),\r\n table: context?.table ?? extractTable(resultOrError.message),\r\n operation: context?.operation,\r\n message: resultOrError.message,\r\n raw: resultOrError,\r\n }\r\n }\r\n\r\n const message = typeof resultOrError === 'string' ? resultOrError : 'Unknown Athena error'\r\n const kind = classifyKind(undefined, undefined, message)\r\n return {\r\n kind,\r\n code: toAthenaErrorCode(kind, undefined),\r\n category: toAthenaErrorCategory(kind, undefined),\r\n retryable: isRetryable(kind, undefined),\r\n status: undefined,\r\n constraint: extractConstraint(message),\r\n table: context?.table ?? extractTable(message),\r\n operation: context?.operation,\r\n message,\r\n raw: resultOrError,\r\n }\r\n}\r\n\r\n/**\r\n * Unwraps a successful result into a row array.\r\n *\r\n * - Throws on failed results.\r\n * - Converts `null` data to an empty array.\r\n * - Wraps scalar data in a single-element array.\r\n */\r\nexport function unwrapRows<T>(\r\n result: AthenaResult<T[] | T | null>,\r\n options?: UnwrapOptions,\r\n): T[] {\r\n if (!isOk(result)) {\r\n throw toAthenaGatewayError(result, 'Athena request failed', options?.context)\r\n }\r\n if (result.data == null) return []\r\n return Array.isArray(result.data) ? result.data : [result.data]\r\n}\r\n\r\n/**\r\n * Unwraps successful result data from `AthenaResult<T | null>`.\r\n *\r\n * By default, `null` data throws. Pass `{ allowNull: true }` to permit nullable payloads.\r\n */\r\nexport function unwrap<T>(\r\n result: AthenaResult<T | null>,\r\n options: UnwrapOptions & { allowNull: true },\r\n): T | null\r\nexport function unwrap<T>(result: AthenaResult<T | null>, options?: UnwrapOptions): T\r\nexport function unwrap<T>(\r\n result: AthenaResult<T | null>,\r\n options?: UnwrapOptions,\r\n): T | null {\r\n if (!isOk(result)) {\r\n throw toAthenaGatewayError(result, 'Athena request failed', options?.context)\r\n }\r\n if (result.data == null && !options?.allowNull) {\r\n throw toAthenaGatewayError(result, 'Expected data but received null', options?.context)\r\n }\r\n return result.data\r\n}\r\n\r\n/**\r\n * Unwraps the first row from a successful result that may contain arrays/scalars/null.\r\n *\r\n * - Throws on failed results.\r\n * - Throws when no row exists unless `allowNull: true` is provided.\r\n * - Optionally enforces exact cardinality via `requireExactlyOne`.\r\n */\r\nexport function unwrapOne<T>(\r\n result: AthenaResult<T[] | T | null>,\r\n options: UnwrapOneOptions & { allowNull: true },\r\n): T | null\r\nexport function unwrapOne<T>(result: AthenaResult<T[] | T | null>, options?: UnwrapOneOptions): T\r\nexport function unwrapOne<T>(\r\n result: AthenaResult<T[] | T | null>,\r\n options?: UnwrapOneOptions,\r\n): T | null {\r\n const rows = unwrapRows(result, options)\r\n if (!rows.length) {\r\n if (options?.allowNull) return null\r\n throw toAthenaGatewayError(result, 'Expected one row but received none', options?.context)\r\n }\r\n if (options?.requireExactlyOne && rows.length !== 1) {\r\n throw toAthenaGatewayError(\r\n result,\r\n `Expected exactly one row but received ${rows.length}`,\r\n options.context,\r\n )\r\n }\r\n return rows[0]\r\n}\r\n\r\n/**\r\n * Asserts that an Athena result is successful.\r\n *\r\n * Returns the original result for fluent composition and throws `AthenaGatewayError` on failure.\r\n */\r\nexport function requireSuccess<T>(\r\n result: AthenaResult<T>,\r\n context?: AthenaOperationContext,\r\n): AthenaResult<T> {\r\n if (!isOk(result)) {\r\n throw toAthenaGatewayError(\r\n result,\r\n `Athena ${context?.operation ?? 'request'} failed`,\r\n context,\r\n )\r\n }\r\n return result\r\n}\r\n\r\n/**\r\n * Enforces mutation postconditions based on `result.count`.\r\n *\r\n * - Validates success first.\r\n * - Requires a non-null count in the response.\r\n * - Validates `count >= min` (default: `1`).\r\n *\r\n * Useful for guaranteeing that critical writes actually affected rows.\r\n */\r\nexport function requireAffected<T>(\r\n result: AthenaResult<T>,\r\n options?: RequireAffectedOptions,\r\n context?: AthenaOperationContext,\r\n): number {\r\n requireSuccess(result, context)\r\n\r\n const minimum = options?.min ?? 1\r\n const count = result.count\r\n if (count == null) {\r\n throw new AthenaGatewayError({\r\n code: 'UNKNOWN_ERROR',\r\n status: result.status,\r\n message: 'Expected affected row count but response.count is missing',\r\n hint: 'Set call option { count: \"exact\" } for mutation postcondition checks.',\r\n cause: safeStringify(result.raw),\r\n })\r\n }\r\n\r\n if (count < minimum) {\r\n throw new AthenaGatewayError({\r\n code: 'UNKNOWN_ERROR',\r\n status: result.status,\r\n message: `Expected at least ${minimum} affected rows but received ${count}`,\r\n hint: contextHint(context),\r\n cause: safeStringify(result.raw),\r\n })\r\n }\r\n\r\n return count\r\n}\r\n\r\nfunction applyBounds(value: number, options?: IntCoercionOptions): number | null {\r\n if (options?.min !== undefined && value < options.min) return null\r\n if (options?.max !== undefined && value > options.max) return null\r\n return value\r\n}\r\n\r\nfunction parseIntegerString(value: string): number | null {\r\n const normalized = value.trim()\r\n if (!/^[-+]?\\d+$/.test(normalized)) return null\r\n const parsed = Number(normalized)\r\n if (!Number.isFinite(parsed) || !Number.isInteger(parsed)) return null\r\n return parsed\r\n}\r\n\r\n/**\r\n * Safely coerces `unknown` values into finite integers.\r\n *\r\n * Returns `null` when coercion fails or bounds/strict bigint checks are violated.\r\n */\r\nexport function coerceInt(value: unknown, options?: IntCoercionOptions): number | null {\r\n if (value == null) return null\r\n\r\n if (typeof value === 'number') {\r\n if (!Number.isFinite(value) || !Number.isInteger(value)) return null\r\n return applyBounds(value, options)\r\n }\r\n\r\n if (typeof value === 'string') {\r\n const parsed = parseIntegerString(value)\r\n if (parsed == null) return null\r\n return applyBounds(parsed, options)\r\n }\r\n\r\n if (typeof value === 'bigint') {\r\n if (options?.strictBigInt) {\r\n if (value > BigInt(Number.MAX_SAFE_INTEGER) || value < BigInt(Number.MIN_SAFE_INTEGER)) {\r\n return null\r\n }\r\n }\r\n const parsed = Number(value)\r\n if (!Number.isFinite(parsed) || !Number.isInteger(parsed)) return null\r\n return applyBounds(parsed, options)\r\n }\r\n\r\n return null\r\n}\r\n\r\n/**\r\n * Strict integer assertion wrapper around `coerceInt`.\r\n *\r\n * Throws a `TypeError` with the provided label when coercion fails.\r\n */\r\nexport function assertInt(value: unknown, label = 'value', options?: IntCoercionOptions): number {\r\n const parsed = coerceInt(value, options)\r\n if (parsed == null) {\r\n throw new TypeError(`${label} must be a finite integer`)\r\n }\r\n return parsed\r\n}\r\n\r\nfunction defaultShouldRetry(error: unknown): boolean {\r\n const normalized = normalizeAthenaError(error)\r\n return normalized.kind === 'transient' || normalized.kind === 'rate_limit'\r\n}\r\n\r\nfunction computeDelayMs(\r\n attempt: number,\r\n error: unknown,\r\n config: Required<Pick<RetryConfig, 'baseDelayMs' | 'backoff' | 'maxDelayMs' | 'jitter'>>,\r\n): number {\r\n const baseDelay = config.baseDelayMs\r\n const rawDelay =\r\n typeof config.backoff === 'function'\r\n ? config.backoff(attempt, error)\r\n : config.backoff === 'linear'\r\n ? baseDelay * attempt\r\n : baseDelay * Math.pow(2, attempt - 1)\r\n\r\n const safeDelay = Number.isFinite(rawDelay) ? Math.max(0, rawDelay) : 0\r\n const clamped = Math.min(config.maxDelayMs, safeDelay)\r\n const jitterFactor =\r\n typeof config.jitter === 'number'\r\n ? Math.max(0, Math.min(1, config.jitter))\r\n : config.jitter\r\n ? 0.2\r\n : 0\r\n\r\n if (!jitterFactor) return clamped\r\n const deviation = clamped * jitterFactor\r\n const offset = (Math.random() * 2 - 1) * deviation\r\n return Math.max(0, clamped + offset)\r\n}\r\n\r\nfunction sleep(ms: number): Promise<void> {\r\n if (ms <= 0) return Promise.resolve()\r\n return new Promise(resolve => {\r\n setTimeout(resolve, ms)\r\n })\r\n}\r\n\r\n/**\n * @deprecated Prefer `experimental.retryReads` for standard SDK-managed read\n * retries, or a call-site retry policy when you need custom write/replay\n * behavior. This helper is retained for compatibility.\n *\n * Retries an async operation with configurable backoff and retry policy.\n *\n * `retries` represents additional attempts after the first failure.\n * By default, transient and rate-limit errors are retried.\n */\nexport async function withRetry<T>(config: RetryConfig, fn: () => Promise<T>): Promise<T> {\n const retries = Math.max(0, Math.trunc(config.retries))\r\n const shouldRetry = config.shouldRetry ?? defaultShouldRetry\r\n const resolvedConfig = {\r\n baseDelayMs: config.baseDelayMs ?? 100,\r\n maxDelayMs: config.maxDelayMs ?? 10_000,\r\n backoff: config.backoff ?? 'exponential',\r\n jitter: config.jitter ?? false,\r\n } satisfies Required<Pick<RetryConfig, 'baseDelayMs' | 'backoff' | 'maxDelayMs' | 'jitter'>>\r\n\r\n for (let attempts = 0; attempts <= retries; attempts += 1) {\r\n try {\r\n return await fn()\r\n } catch (error) {\r\n if (attempts >= retries) {\r\n throw error\r\n }\r\n\r\n const currentAttempt = attempts + 1\r\n const retry = await shouldRetry(error, currentAttempt)\r\n if (!retry) {\r\n throw error\r\n }\r\n\r\n const delay = computeDelayMs(currentAttempt, error, resolvedConfig)\r\n await sleep(delay)\r\n }\r\n }\r\n\r\n throw new Error('withRetry reached an unexpected state')\r\n}\r\n","import type {\r\n AthenaGatewayCallOptions,\r\n AthenaJsonObject,\r\n AthenaJsonValue,\r\n AthenaRpcCallOptions,\r\n} from '../gateway/types.ts'\r\nimport type {\r\n AthenaFromOptions,\r\n AthenaResult,\r\n AthenaSdkClient,\r\n MutationQuery,\r\n RpcQueryBuilder,\r\n SelectChain,\r\n TableQueryBuilder,\r\n UpdateChain,\r\n} from '../client.ts'\r\nimport type {\r\n AthenaModelTarget,\r\n InsertOf,\r\n RowOf,\r\n UpdateOf,\r\n} from '../schema/types.ts'\r\nimport type {\r\n AthenaSelectInput,\r\n} from '../select-column-types.ts'\r\n\r\ntype AthenaRowShape = Record<string, AthenaJsonValue | undefined>\r\n\r\ntype AthenaUpsertOptions<Update> = AthenaGatewayCallOptions & {\r\n updateBody?: Update\r\n onConflict?: string | string[]\r\n}\r\n\r\nexport interface AthenaDbModule<TStrict extends boolean = false> {\r\n from<TModel extends AthenaModelTarget>(\r\n model: TModel,\r\n ): TableQueryBuilder<RowOf<TModel>, InsertOf<TModel>, UpdateOf<TModel>, unknown, TStrict>\r\n from<\r\n Row = AthenaRowShape,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n >(table: string, options?: AthenaFromOptions): TableQueryBuilder<Row, Insert, Update, unknown, TStrict>\r\n\r\n select<\r\n Row = AthenaRowShape,\r\n >(\r\n table: string,\r\n options?: AthenaGatewayCallOptions,\r\n ): SelectChain<Row, Row, TStrict>\r\n select(\r\n table: string,\r\n columns: AthenaSelectInput,\r\n options?: AthenaGatewayCallOptions,\r\n ): SelectChain<AthenaRowShape, AthenaRowShape, TStrict>\r\n\r\n insert<\r\n Row = AthenaRowShape,\r\n Insert = Partial<Row>,\r\n >(table: string, values: Insert, options?: AthenaGatewayCallOptions): MutationQuery<Row, Row, TStrict>\r\n insert<\r\n Row = AthenaRowShape,\r\n Insert = Partial<Row>,\r\n >(table: string, values: Insert[], options?: AthenaGatewayCallOptions): MutationQuery<Row[], Row, TStrict>\r\n\r\n upsert<\r\n Row = AthenaRowShape,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n >(\r\n table: string,\r\n values: Insert,\r\n options?: AthenaUpsertOptions<Update>,\r\n ): MutationQuery<Row, Row, TStrict>\r\n upsert<\r\n Row = AthenaRowShape,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n >(\r\n table: string,\r\n values: Insert[],\r\n options?: AthenaUpsertOptions<Update>,\r\n ): MutationQuery<Row[], Row, TStrict>\r\n\r\n update<\r\n Row = AthenaRowShape,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n >(table: string, values: Update, options?: AthenaGatewayCallOptions): UpdateChain<Row, TStrict>\r\n\r\n delete<Row = AthenaRowShape>(\r\n table: string,\r\n options?: AthenaGatewayCallOptions & { resourceId?: string },\r\n ): MutationQuery<Row | null, Row, TStrict>\r\n\r\n rpc<Row = unknown, Args extends AthenaJsonObject = AthenaJsonObject>(\r\n fn: string,\r\n args?: Args,\r\n options?: AthenaRpcCallOptions,\r\n ): RpcQueryBuilder<Row, TStrict>\r\n\r\n query<Row = unknown>(\r\n query: string,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<Row[]>>\r\n}\r\n\r\ninterface AthenaDbModuleFactoryInput<TStrict extends boolean = false> {\r\n from: AthenaSdkClient<TStrict>['from']\r\n rpc: AthenaSdkClient<TStrict>['rpc']\r\n query: AthenaSdkClient<TStrict>['query']\r\n}\r\n\r\nexport function createDbModule<TStrict extends boolean = false>(\r\n input: AthenaDbModuleFactoryInput<TStrict>,\r\n): AthenaDbModule<TStrict> {\r\n const db: AthenaDbModule<TStrict> = {\r\n from: input.from,\r\n select<Row = AthenaRowShape>(\r\n table: string,\r\n first?: AthenaGatewayCallOptions | AthenaSelectInput,\r\n second?: AthenaGatewayCallOptions,\r\n ) {\r\n if (first && typeof first === 'object' && !Array.isArray(first)) {\r\n return input.from<Row>(table).select(undefined, first as AthenaGatewayCallOptions)\r\n }\r\n return input.from<Row>(table).select(first, second)\r\n },\r\n insert<Row = AthenaRowShape, Insert = Partial<Row>>(\r\n table: string,\r\n values: Insert | Insert[],\r\n options?: AthenaGatewayCallOptions,\r\n ): MutationQuery<Row> | MutationQuery<Row[]> {\r\n return Array.isArray(values)\r\n ? input.from<Row, Insert, Partial<Insert>>(table).insert(values, options)\r\n : input.from<Row, Insert, Partial<Insert>>(table).insert(values, options)\r\n },\r\n upsert<Row = AthenaRowShape, Insert = Partial<Row>, Update = Partial<Insert>>(\r\n table: string,\r\n values: Insert | Insert[],\r\n options?: AthenaUpsertOptions<Update>,\r\n ): MutationQuery<Row> | MutationQuery<Row[]> {\r\n return Array.isArray(values)\r\n ? input.from<Row, Insert, Update>(table).upsert(values, options)\r\n : input.from<Row, Insert, Update>(table).upsert(values, options)\r\n },\r\n update<Row = AthenaRowShape, Insert = Partial<Row>, Update = Partial<Insert>>(\r\n table: string,\r\n values: Update,\r\n options?: AthenaGatewayCallOptions,\r\n ) {\r\n return input.from<Row, Insert, Update>(table).update(values, options)\r\n },\r\n delete<Row = AthenaRowShape>(\r\n table: string,\r\n options?: AthenaGatewayCallOptions & { resourceId?: string },\r\n ) {\r\n return input.from<Row>(table).delete(options)\r\n },\r\n rpc<Row = unknown, Args extends AthenaJsonObject = AthenaJsonObject>(\r\n fn: string,\r\n args?: Args,\r\n options?: AthenaRpcCallOptions,\r\n ) {\r\n return input.rpc<Row, Args>(fn, args, options)\r\n },\r\n query<Row = unknown>(query: string, options?: AthenaGatewayCallOptions) {\r\n return input.query<Row>(query, options)\r\n },\r\n }\r\n\r\n return db\r\n}\r\n","import type {\n AthenaStorageBinaryCallOptions,\n AthenaStorageCallOptions,\n CreateStorageUploadUrlRequest,\n GetStorageFileUrlQuery,\n ListStorageFilesRequest,\n ManagedFileRecord,\n StorageBatchUploadUrlResponse,\n StorageFileMutationResponse,\n StorageListFilesResponse,\n StorageServerSideEncryptionOptions,\n StorageUploadUrlResponse,\n} from './module.ts'\n\nexport type AthenaStorageTemplateValue = string | number | boolean | null | undefined\nexport type AthenaStorageTemplateVars = Record<string, AthenaStorageTemplateValue>\nexport type AthenaStorageEnv = Record<string, string | undefined>\nexport type AthenaStorageUploadHeaders = ConstructorParameters<typeof Headers>[0]\nexport type AthenaStoragePrefixPath =\n | string\n | ((context: AthenaStoragePathContext) => string | null | undefined)\n\nexport interface AthenaStoragePathContext {\n vars: AthenaStorageTemplateVars\n env: AthenaStorageEnv\n organizationId?: string\n organization_id?: string\n userId?: string\n user_id?: string\n resourceId?: string\n resource_id?: string\n}\n\nexport interface AthenaStorageFileConfig {\n /**\n * Prefix applied by high-level file helpers before storage keys are sent to Athena.\n * Supports tokens such as `{organization_id}`, `{organizationId}`, `{env.NODE_ENV}`,\n * and `${ATHENA_STORAGE_PREFIX}`.\n */\n prefixPath?: AthenaStoragePrefixPath\n vars?: AthenaStorageTemplateVars\n env?: AthenaStorageEnv\n}\n\nexport type AthenaStorageUploadSource = Blob | ArrayBuffer | Uint8Array\n\nexport interface AthenaStorageUploadConstraints {\n maxFiles?: number\n allowedExtensions?: readonly string[]\n extensions?: readonly string[]\n maxFileSizeMb?: number\n maxFileSizeBytes?: number\n}\n\nexport interface AthenaStorageUploadProgress {\n phase: 'preparing' | 'uploading' | 'complete'\n fileIndex: number\n fileCount: number\n fileName: string\n loaded: number\n total: number\n percent: number\n aggregateLoaded: number\n aggregateTotal: number\n aggregatePercent: number\n}\n\nexport type AthenaStorageUploadProgressHandler = (progress: AthenaStorageUploadProgress) => void\n\nexport interface AthenaStorageFileUploadInput extends AthenaStorageUploadConstraints, StorageServerSideEncryptionOptions {\n s3_id: string\n bucket?: string\n files: AthenaStorageUploadSource | ArrayLike<AthenaStorageUploadSource> | readonly AthenaStorageUploadSource[]\n storage_key?: string\n storageKey?: string\n storageKeyTemplate?: string\n prefixPath?: AthenaStoragePrefixPath\n fileName?: string\n name?: string\n original_name?: string\n resource_id?: string\n resourceId?: string\n organization_id?: string\n organizationId?: string\n user_id?: string\n userId?: string\n mime_type?: string\n content_type?: string\n public?: boolean\n metadata?: Record<string, unknown>\n vars?: AthenaStorageTemplateVars\n env?: AthenaStorageEnv\n uploadHeaders?: AthenaStorageUploadHeaders\n onProgress?: AthenaStorageUploadProgressHandler\n}\n\nexport interface AthenaStorageUploadedFile {\n file: ManagedFileRecord\n upload: StorageUploadUrlResponse['upload']\n source: AthenaStorageUploadSource\n fileName: string\n storage_key: string\n response: Response\n}\n\nexport interface AthenaStorageFileUploadResult {\n files: AthenaStorageUploadedFile[]\n count: number\n}\n\nexport interface AthenaStorageFileListInput extends Omit<ListStorageFilesRequest, 'prefix'> {\n prefix?: string\n prefixPath?: AthenaStoragePrefixPath\n vars?: AthenaStorageTemplateVars\n env?: AthenaStorageEnv\n organization_id?: string\n organizationId?: string\n user_id?: string\n userId?: string\n resource_id?: string\n resourceId?: string\n}\n\nexport interface AthenaStorageFileDownloadInput extends GetStorageFileUrlQuery {\n fileId?: string\n fileIds?: readonly string[]\n}\n\nexport type AthenaStorageFileDeleteInput = string | readonly string[]\n\nexport interface AthenaStorageFileModule {\n upload(\n input: AthenaStorageFileUploadInput,\n options?: AthenaStorageCallOptions,\n ): Promise<AthenaStorageFileUploadResult>\n download(\n fileId: string,\n query?: GetStorageFileUrlQuery,\n options?: AthenaStorageBinaryCallOptions,\n ): Promise<Response>\n download(\n fileIds: readonly string[],\n query?: GetStorageFileUrlQuery,\n options?: AthenaStorageBinaryCallOptions,\n ): Promise<Response[]>\n download(\n input: AthenaStorageFileDownloadInput,\n options?: AthenaStorageBinaryCallOptions,\n ): Promise<Response | Response[]>\n list(\n input: AthenaStorageFileListInput,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageListFilesResponse>\n delete(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\n delete(fileIds: readonly string[], options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse[]>\n}\n\nexport interface AthenaStorageFileBaseModule {\n createStorageUploadUrl(\n input: CreateStorageUploadUrlRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageUploadUrlResponse>\n createStorageUploadUrls(\n input: { files: CreateStorageUploadUrlRequest[] },\n options?: AthenaStorageCallOptions,\n ): Promise<StorageBatchUploadUrlResponse>\n listStorageFiles(input: ListStorageFilesRequest, options?: AthenaStorageCallOptions): Promise<StorageListFilesResponse>\n getStorageFileProxy(\n fileId: string,\n query?: GetStorageFileUrlQuery,\n options?: AthenaStorageBinaryCallOptions,\n ): Promise<Response>\n deleteStorageFile(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\n}\n\ninterface NormalizedUploadSource {\n source: AthenaStorageUploadSource\n fileName: string\n sizeBytes: number\n contentType?: string\n}\n\ninterface ResolvedUploadRequest {\n uploadRequest: CreateStorageUploadUrlRequest\n source: NormalizedUploadSource\n}\n\ninterface AthenaStorageXhrProgressEvent {\n loaded: number\n}\n\ninterface AthenaStorageXhr {\n readonly upload: {\n onprogress: ((event: AthenaStorageXhrProgressEvent) => void) | null\n }\n readonly status: number\n readonly statusText: string\n readonly response: unknown\n onload: (() => void) | null\n onerror: (() => void) | null\n onabort: (() => void) | null\n open(method: string, url: string): void\n setRequestHeader(key: string, value: string): void\n getAllResponseHeaders(): string\n send(body: unknown): void\n abort(): void\n}\n\ndeclare const XMLHttpRequest: (new () => AthenaStorageXhr) | undefined\n\nexport function createStorageFileModule(\n base: AthenaStorageFileBaseModule,\n config: AthenaStorageFileConfig = {},\n): AthenaStorageFileModule {\n const upload: AthenaStorageFileModule['upload'] = async (input, options) => {\n const sources = normalizeUploadSources(input)\n validateUploadConstraints(sources, input)\n\n const uploadRequests = sources.map((source, index): ResolvedUploadRequest => {\n const storageKey = resolveUploadStorageKey(input, source, index, options, config)\n return {\n source,\n uploadRequest: {\n s3_id: input.s3_id,\n bucket: input.bucket,\n storage_key: storageKey,\n name: input.name ?? source.fileName,\n original_name: input.original_name ?? source.fileName,\n resource_id: input.resource_id ?? input.resourceId,\n mime_type: input.mime_type ?? source.contentType,\n content_type: input.content_type ?? source.contentType,\n size_bytes: source.sizeBytes,\n public: input.public,\n metadata: input.metadata,\n server_side_encryption: input.server_side_encryption,\n sse: input.sse,\n ssekms_key_id: input.ssekms_key_id,\n kms_key_id: input.kms_key_id,\n bucket_key_enabled: input.bucket_key_enabled,\n },\n }\n })\n\n input.onProgress?.(createProgressSnapshot('preparing', sources, 0, 0, 0))\n\n const uploadUrls =\n uploadRequests.length === 1\n ? [await base.createStorageUploadUrl(uploadRequests[0].uploadRequest, options)]\n : (await base.createStorageUploadUrls({ files: uploadRequests.map(request => request.uploadRequest) }, options)).files\n\n const aggregateLoaded = new Array(uploadRequests.length).fill(0) as number[]\n const uploaded: AthenaStorageUploadedFile[] = []\n\n for (let index = 0; index < uploadRequests.length; index += 1) {\n const request = uploadRequests[index]\n const uploadUrl = uploadUrls[index]\n const response = await putUploadBody(\n uploadUrl.upload.url,\n uploadUrl.upload.headers ?? {},\n request.source,\n input,\n options,\n progress => {\n aggregateLoaded[index] = progress.loaded\n input.onProgress?.(createProgressSnapshot('uploading', sources, index, progress.loaded, sum(aggregateLoaded)))\n },\n )\n uploaded.push({\n file: uploadUrl.file,\n upload: uploadUrl.upload,\n source: request.source.source,\n fileName: request.source.fileName,\n storage_key: request.uploadRequest.storage_key,\n response,\n })\n aggregateLoaded[index] = request.source.sizeBytes\n input.onProgress?.(createProgressSnapshot('complete', sources, index, request.source.sizeBytes, sum(aggregateLoaded)))\n }\n\n return {\n files: uploaded,\n count: uploaded.length,\n }\n }\n\n const download = ((\n input: string | readonly string[] | AthenaStorageFileDownloadInput,\n queryOrOptions?: GetStorageFileUrlQuery | AthenaStorageBinaryCallOptions,\n maybeOptions?: AthenaStorageBinaryCallOptions,\n ): Promise<Response | Response[]> => {\n const { fileIds, query, options } = normalizeDownloadArgs(input, queryOrOptions, maybeOptions)\n const downloads = fileIds.map(fileId => base.getStorageFileProxy(fileId, query, options))\n return Array.isArray(input) || (isRecord(input) && Array.isArray(input.fileIds))\n ? Promise.all(downloads)\n : downloads[0]\n }) as AthenaStorageFileModule['download']\n\n const deleteFile = ((\n input: string | readonly string[],\n options?: AthenaStorageCallOptions,\n ): Promise<StorageFileMutationResponse | StorageFileMutationResponse[]> => {\n if (Array.isArray(input)) {\n return Promise.all(input.map(fileId => base.deleteStorageFile(fileId, options)))\n }\n return base.deleteStorageFile(input as string, options)\n }) as AthenaStorageFileModule['delete']\n\n return {\n upload,\n download,\n\n list(input, options) {\n const prefix = resolveStoragePath(input.prefix ?? '', input, options, config)\n return base.listStorageFiles(\n {\n s3_id: input.s3_id,\n prefix,\n },\n options,\n )\n },\n\n delete: deleteFile,\n }\n}\n\nexport function resolveStoragePath(\n path: string,\n input: {\n prefixPath?: AthenaStoragePrefixPath\n vars?: AthenaStorageTemplateVars\n env?: AthenaStorageEnv\n organization_id?: string\n organizationId?: string\n user_id?: string\n userId?: string\n resource_id?: string\n resourceId?: string\n },\n options: AthenaStorageCallOptions | undefined,\n config: AthenaStorageFileConfig = {},\n): string {\n const context = createPathContext(input, options, config)\n const prefixPath = input.prefixPath ?? config.prefixPath\n const prefix = typeof prefixPath === 'function'\n ? prefixPath(context)\n : prefixPath\n return joinStoragePath(renderStorageTemplate(prefix ?? '', context), renderStorageTemplate(path, context))\n}\n\nfunction resolveUploadStorageKey(\n input: AthenaStorageFileUploadInput,\n source: NormalizedUploadSource,\n index: number,\n options: AthenaStorageCallOptions | undefined,\n config: AthenaStorageFileConfig,\n): string {\n const explicitKey = input.storage_key ?? input.storageKey\n const keyTemplate = input.storageKeyTemplate\n const fallbackName = source.fileName\n const context = createPathContext(input, options, config)\n const key = keyTemplate\n ? renderStorageTemplate(keyTemplate, {\n ...context,\n vars: {\n ...context.vars,\n index,\n fileName: source.fileName,\n name: source.fileName,\n },\n })\n : explicitKey ?? fallbackName\n return resolveStoragePath(key, input, options, config)\n}\n\nfunction normalizeUploadSources(input: AthenaStorageFileUploadInput): NormalizedUploadSource[] {\n const files = toArray(input.files)\n if (files.length === 0) {\n throw new Error('athena.storage.file.upload requires at least one file')\n }\n return files.map((source, index) => {\n const fileName = input.fileName ?? sourceName(source) ?? `file-${index + 1}`\n const sizeBytes = sourceSize(source)\n const contentType = input.content_type ?? input.mime_type ?? sourceContentType(source)\n return {\n source,\n fileName,\n sizeBytes,\n contentType,\n }\n })\n}\n\nfunction validateUploadConstraints(sources: readonly NormalizedUploadSource[], input: AthenaStorageFileUploadInput): void {\n const maxFiles = input.maxFiles ?? 1\n if (sources.length > maxFiles) {\n throw new Error(`athena.storage.file.upload accepts at most ${maxFiles} file${maxFiles === 1 ? '' : 's'} for this call`)\n }\n\n const maxFileSizeBytes = input.maxFileSizeBytes ?? (\n input.maxFileSizeMb === undefined ? undefined : Math.floor(input.maxFileSizeMb * 1024 * 1024)\n )\n if (maxFileSizeBytes !== undefined) {\n const tooLarge = sources.find(source => source.sizeBytes > maxFileSizeBytes)\n if (tooLarge) {\n throw new Error(`athena.storage.file.upload rejected ${tooLarge.fileName}: file exceeds ${maxFileSizeBytes} bytes`)\n }\n }\n\n const allowedExtensions = normalizeExtensions(input.allowedExtensions ?? input.extensions)\n if (allowedExtensions.size > 0) {\n const invalid = sources.find(source => !allowedExtensions.has(fileExtension(source.fileName)))\n if (invalid) {\n throw new Error(`athena.storage.file.upload rejected ${invalid.fileName}: extension is not allowed`)\n }\n }\n}\n\nasync function putUploadBody(\n url: string,\n uploadHeaders: Record<string, string>,\n source: NormalizedUploadSource,\n input: AthenaStorageFileUploadInput,\n options: AthenaStorageCallOptions | undefined,\n onProgress: (progress: { loaded: number }) => void,\n): Promise<Response> {\n const headers = new Headers(uploadHeaders)\n new Headers(input.uploadHeaders).forEach((value, key) => headers.set(key, value))\n if (source.contentType && !headers.has('Content-Type')) {\n headers.set('Content-Type', source.contentType)\n }\n if (typeof XMLHttpRequest !== 'undefined') {\n return putUploadBodyWithXhr(url, source, headers, options, onProgress)\n }\n onProgress({ loaded: 0 })\n const response = await fetch(url, {\n method: 'PUT',\n headers,\n body: source.source as RequestInit['body'],\n signal: options?.signal,\n })\n if (!response.ok) {\n throw new Error(`athena.storage.file.upload failed with status ${response.status}`)\n }\n onProgress({ loaded: source.sizeBytes })\n return response\n}\n\nfunction putUploadBodyWithXhr(\n url: string,\n source: NormalizedUploadSource,\n headers: Headers,\n options: AthenaStorageCallOptions | undefined,\n onProgress: (progress: { loaded: number }) => void,\n): Promise<Response> {\n const Xhr = XMLHttpRequest\n if (Xhr === undefined) {\n return Promise.reject(new Error('athena.storage.file.upload requires XMLHttpRequest in this runtime'))\n }\n return new Promise((resolve, reject) => {\n const xhr = new Xhr()\n const abort = () => xhr.abort()\n xhr.open('PUT', url)\n headers.forEach((value, key) => xhr.setRequestHeader(key, value))\n xhr.upload.onprogress = (event: AthenaStorageXhrProgressEvent) => {\n onProgress({ loaded: event.loaded })\n }\n xhr.onload = () => {\n if (options?.signal) {\n options.signal.removeEventListener('abort', abort)\n }\n if (xhr.status < 200 || xhr.status >= 300) {\n reject(new Error(`athena.storage.file.upload failed with status ${xhr.status}`))\n return\n }\n onProgress({ loaded: source.sizeBytes })\n resolve(new Response(xhr.response as ConstructorParameters<typeof Response>[0], {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseXhrHeaders(xhr.getAllResponseHeaders()),\n }))\n }\n xhr.onerror = () => {\n if (options?.signal) {\n options.signal.removeEventListener('abort', abort)\n }\n reject(new Error('athena.storage.file.upload failed with a network error'))\n }\n xhr.onabort = () => {\n if (options?.signal) {\n options.signal.removeEventListener('abort', abort)\n }\n reject(new DOMException('Upload aborted', 'AbortError'))\n }\n if (options?.signal) {\n if (options.signal.aborted) {\n abort()\n return\n }\n options.signal.addEventListener('abort', abort, { once: true })\n }\n xhr.send(source.source)\n })\n}\n\nfunction normalizeDownloadArgs(\n input: string | readonly string[] | AthenaStorageFileDownloadInput,\n queryOrOptions?: GetStorageFileUrlQuery | AthenaStorageBinaryCallOptions,\n maybeOptions?: AthenaStorageBinaryCallOptions,\n): {\n fileIds: string[]\n query?: GetStorageFileUrlQuery\n options?: AthenaStorageBinaryCallOptions\n} {\n if (typeof input === 'string') {\n return { fileIds: [input], query: queryOrOptions as GetStorageFileUrlQuery | undefined, options: maybeOptions }\n }\n if (Array.isArray(input)) {\n return { fileIds: [...input], query: queryOrOptions as GetStorageFileUrlQuery | undefined, options: maybeOptions }\n }\n const downloadInput = input as AthenaStorageFileDownloadInput\n const { fileId, fileIds, ...query } = downloadInput\n return {\n fileIds: fileIds ? [...fileIds] : fileId ? [fileId] : [],\n query,\n options: queryOrOptions as AthenaStorageBinaryCallOptions | undefined,\n }\n}\n\nfunction createPathContext(\n input: {\n vars?: AthenaStorageTemplateVars\n env?: AthenaStorageEnv\n organization_id?: string\n organizationId?: string\n user_id?: string\n userId?: string\n resource_id?: string\n resourceId?: string\n },\n options: AthenaStorageCallOptions | undefined,\n config: AthenaStorageFileConfig,\n): AthenaStoragePathContext {\n const organizationId = input.organizationId ?? input.organization_id ?? options?.organizationId ?? undefined\n const userId = input.userId ?? input.user_id ?? options?.userId ?? undefined\n const resourceId = input.resourceId ?? input.resource_id ?? undefined\n const vars = {\n ...(config.vars ?? {}),\n ...(input.vars ?? {}),\n }\n if (organizationId !== undefined) {\n vars.organizationId = organizationId\n vars.organization_id = organizationId\n }\n if (userId !== undefined) {\n vars.userId = userId\n vars.user_id = userId\n }\n if (resourceId !== undefined) {\n vars.resourceId = resourceId\n vars.resource_id = resourceId\n }\n return {\n vars,\n env: {\n ...readProcessEnv(),\n ...(config.env ?? {}),\n ...(input.env ?? {}),\n },\n organizationId,\n organization_id: organizationId,\n userId,\n user_id: userId,\n resourceId,\n resource_id: resourceId,\n }\n}\n\nfunction renderStorageTemplate(template: string, context: AthenaStoragePathContext): string {\n return template.replace(/\\$\\{([^}]+)\\}|\\{([^}]+)\\}/g, (_match, shellToken: string | undefined, braceToken: string | undefined) => {\n const token = (shellToken ?? braceToken ?? '').trim()\n if (!token) return ''\n const value = resolveTemplateToken(token, context)\n return value === undefined || value === null ? '' : String(value)\n })\n}\n\nfunction resolveTemplateToken(token: string, context: AthenaStoragePathContext): AthenaStorageTemplateValue {\n if (token.startsWith('env.')) {\n return context.env[token.slice(4)]\n }\n if (token in context.vars) {\n return context.vars[token]\n }\n return context.env[token]\n}\n\nfunction joinStoragePath(...parts: readonly string[]): string {\n return parts\n .map(part => part.trim().replace(/^\\/+|\\/+$/g, ''))\n .filter(Boolean)\n .join('/')\n}\n\nfunction toArray(files: AthenaStorageFileUploadInput['files']): AthenaStorageUploadSource[] {\n if (isUploadSource(files)) return [files]\n return Array.from(files)\n}\n\nfunction isUploadSource(value: unknown): value is AthenaStorageUploadSource {\n return value instanceof Blob || value instanceof ArrayBuffer || value instanceof Uint8Array\n}\n\nfunction sourceName(source: AthenaStorageUploadSource): string | undefined {\n return isRecord(source) && typeof source.name === 'string' && source.name.trim()\n ? source.name.trim()\n : undefined\n}\n\nfunction sourceSize(source: AthenaStorageUploadSource): number {\n if (source instanceof Blob) return source.size\n return source.byteLength\n}\n\nfunction sourceContentType(source: AthenaStorageUploadSource): string | undefined {\n return source instanceof Blob && source.type.trim() ? source.type.trim() : undefined\n}\n\nfunction normalizeExtensions(extensions: readonly string[] | undefined): Set<string> {\n return new Set((extensions ?? []).map(extension => extension.replace(/^\\./, '').toLowerCase()).filter(Boolean))\n}\n\nfunction fileExtension(fileName: string): string {\n const lastDot = fileName.lastIndexOf('.')\n return lastDot === -1 ? '' : fileName.slice(lastDot + 1).toLowerCase()\n}\n\nfunction createProgressSnapshot(\n phase: AthenaStorageUploadProgress['phase'],\n sources: readonly NormalizedUploadSource[],\n fileIndex: number,\n loaded: number,\n aggregateLoaded: number,\n): AthenaStorageUploadProgress {\n const total = sources[fileIndex]?.sizeBytes ?? 0\n const aggregateTotal = sources.reduce((totalBytes, source) => totalBytes + source.sizeBytes, 0)\n return {\n phase,\n fileIndex,\n fileCount: sources.length,\n fileName: sources[fileIndex]?.fileName ?? '',\n loaded,\n total,\n percent: total > 0 ? Math.round((loaded / total) * 100) : 100,\n aggregateLoaded,\n aggregateTotal,\n aggregatePercent: aggregateTotal > 0 ? Math.round((aggregateLoaded / aggregateTotal) * 100) : 100,\n }\n}\n\nfunction sum(values: readonly number[]): number {\n return values.reduce((total, value) => total + value, 0)\n}\n\nfunction parseXhrHeaders(raw: string): Headers {\n const headers = new Headers()\n for (const line of raw.trim().split(/[\\r\\n]+/)) {\n const index = line.indexOf(':')\n if (index === -1) continue\n headers.set(line.slice(0, index).trim(), line.slice(index + 1).trim())\n }\n return headers\n}\n\nfunction readProcessEnv(): AthenaStorageEnv {\n const processLike = (globalThis as { process?: { env?: AthenaStorageEnv } }).process\n return processLike?.env ?? {}\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object'\n}\n","import type { AthenaGatewayClient } from '../gateway/client.ts'\r\nimport type {\r\n AthenaGatewayCallOptions,\r\n AthenaGatewayEndpointPath,\r\n AthenaGatewayErrorCode,\r\n AthenaGatewayMethod,\r\n} from '../gateway/types.ts'\r\nimport type {\r\n AthenaErrorCategory,\r\n AthenaErrorCode,\r\n AthenaErrorKind,\r\n NormalizedAthenaError,\r\n} from '../auxiliaries.ts'\r\nimport { normalizeAthenaError } from '../auxiliaries.ts'\r\nimport { isAthenaGatewayError } from '../gateway/errors.ts'\r\nimport { buildAthenaGatewayUrl, normalizeAthenaGatewayBaseUrl } from '../gateway/url.ts'\r\nimport { createStorageFileModule } from './file.ts'\r\nimport type { AthenaStorageFileConfig, AthenaStorageFileModule } from './file.ts'\r\n\r\nexport const storageSdkManifest = {\r\n namespace: 'storage',\r\n basePath: '/storage',\r\n envelopeKinds: {\r\n raw: 'response body is the payload',\r\n athena: 'response body is { status, message, data }',\r\n },\r\n methods: [\r\n {\r\n name: 'listStorageCatalogs',\r\n method: 'GET',\r\n path: '/storage/catalogs',\r\n responseEnvelope: 'raw',\r\n responseType: '{ data: S3CatalogItem[] }',\r\n },\r\n {\r\n name: 'createStorageCatalog',\r\n method: 'POST',\r\n path: '/storage/catalogs',\r\n requestType: 'CreateStorageCatalogRequest',\r\n responseEnvelope: 'raw',\r\n responseType: 'S3CatalogItem',\r\n },\r\n {\r\n name: 'updateStorageCatalog',\r\n method: 'PATCH',\r\n path: '/storage/catalogs/{id}',\r\n pathParams: ['id'],\r\n requestType: 'UpdateStorageCatalogRequest',\r\n responseEnvelope: 'raw',\r\n responseType: 'S3CatalogItem',\r\n },\r\n {\r\n name: 'deleteStorageCatalog',\r\n method: 'DELETE',\r\n path: '/storage/catalogs/{id}',\r\n pathParams: ['id'],\r\n responseEnvelope: 'raw',\r\n responseType: '{ id: string; deleted: boolean }',\r\n },\r\n {\r\n name: 'listStorageCredentials',\r\n method: 'GET',\r\n path: '/storage/credentials',\r\n responseEnvelope: 'raw',\r\n responseType: '{ data: S3CredentialListItem[] }',\r\n },\r\n {\r\n name: 'createStorageUploadUrl',\r\n method: 'POST',\r\n path: '/storage/files/upload-url',\r\n requestType: 'CreateStorageUploadUrlRequest',\r\n responseEnvelope: 'athena',\r\n responseType: 'StorageUploadUrlResponse',\r\n },\r\n {\r\n name: 'createStorageUploadUrls',\r\n method: 'POST',\r\n path: '/storage/files/upload-urls',\r\n requestType: 'CreateStorageUploadUrlsRequest',\r\n responseEnvelope: 'athena',\r\n responseType: 'StorageBatchUploadUrlResponse',\r\n },\r\n {\r\n name: 'listStorageFiles',\r\n method: 'POST',\r\n path: '/storage/files/list',\r\n requestType: 'ListStorageFilesRequest',\r\n responseEnvelope: 'athena',\r\n responseType: 'StorageListFilesResponse',\r\n },\r\n {\r\n name: 'getStorageFile',\r\n method: 'GET',\r\n path: '/storage/files/{file_id}',\r\n pathParams: ['file_id'],\r\n responseEnvelope: 'athena',\r\n responseType: 'StorageFileMutationResponse',\r\n },\r\n {\r\n name: 'getStorageFileUrl',\r\n method: 'GET',\r\n path: '/storage/files/{file_id}/url',\r\n pathParams: ['file_id'],\r\n queryParams: ['purpose'],\r\n responseEnvelope: 'athena',\r\n responseType: 'PresignedFileUrlResponse',\r\n },\r\n {\r\n name: 'getStorageFileProxy',\r\n method: 'GET',\r\n path: '/storage/files/{file_id}/proxy',\r\n pathParams: ['file_id'],\r\n queryParams: ['purpose'],\r\n responseEnvelope: 'raw',\r\n responseType: 'Response',\r\n binary: true,\r\n },\r\n {\r\n name: 'updateStorageFile',\r\n method: 'PATCH',\r\n path: '/storage/files/{file_id}',\r\n pathParams: ['file_id'],\r\n requestType: 'UpdateStorageFileRequest',\r\n responseEnvelope: 'athena',\r\n responseType: 'StorageFileMutationResponse',\r\n },\r\n {\r\n name: 'deleteStorageFile',\r\n method: 'DELETE',\r\n path: '/storage/files/{file_id}',\r\n pathParams: ['file_id'],\r\n responseEnvelope: 'athena',\r\n responseType: 'StorageFileMutationResponse',\r\n },\r\n {\n name: 'setStorageFileVisibility',\n method: 'PATCH',\n path: '/storage/files/{file_id}/visibility',\n pathParams: ['file_id'],\n requestType: 'SetStorageFileVisibilityRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationResponse',\n },\n {\n name: 'postStorageFileVisibility',\n method: 'POST',\n path: '/storage/files/{file_id}/visibility',\n pathParams: ['file_id'],\n requestType: 'SetStorageFileVisibilityRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationResponse',\n },\n {\n name: 'setManyStorageFileVisibility',\n method: 'POST',\n path: '/storage/files/visibility-many',\n requestType: 'SetManyStorageFileVisibilityRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationManyResponse',\n },\n {\n name: 'deleteStorageFolder',\n method: 'POST',\n path: '/storage/folders/delete',\n requestType: 'DeleteStorageFolderRequest',\n responseEnvelope: 'athena',\r\n responseType: 'StorageFolderMutationResponse',\r\n },\r\n {\n name: 'moveStorageFolder',\n method: 'POST',\n path: '/storage/folders/move',\n requestType: 'MoveStorageFolderRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageFolderMutationResponse',\n },\n {\n name: 'searchStorageFiles',\n method: 'POST',\n path: '/storage/files/search',\n requestType: 'SearchStorageFilesRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageListFilesResponse',\n },\n {\n name: 'confirmStorageUpload',\n method: 'POST',\n path: '/storage/files/{file_id}/confirm-upload',\n pathParams: ['file_id'],\n requestType: 'ConfirmStorageUploadRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationResponse',\n },\n {\n name: 'uploadStorageFileBinary',\n method: 'PUT',\n path: '/storage/files/{file_id}/upload',\n pathParams: ['file_id'],\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationResponse',\n binary: true,\n },\n {\n name: 'copyStorageFile',\n method: 'POST',\n path: '/storage/files/{file_id}/copy',\n pathParams: ['file_id'],\n requestType: 'CopyStorageFileRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationResponse',\n },\n {\n name: 'deleteManyStorageFiles',\n method: 'POST',\n path: '/storage/files/delete-many',\n requestType: 'DeleteManyStorageFilesRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationManyResponse',\n },\n {\n name: 'updateManyStorageFiles',\n method: 'POST',\n path: '/storage/files/update-many',\n requestType: 'UpdateManyStorageFilesRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationManyResponse',\n },\n {\n name: 'restoreStorageFile',\n method: 'POST',\n path: '/storage/files/{file_id}/restore',\n pathParams: ['file_id'],\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationResponse',\n },\n {\n name: 'purgeStorageFile',\n method: 'DELETE',\n path: '/storage/files/{file_id}/purge',\n pathParams: ['file_id'],\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationResponse',\n },\n {\n name: 'getStorageFilePublicUrl',\n method: 'GET',\n path: '/storage/files/{file_id}/public-url',\n pathParams: ['file_id'],\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'getStorageFileProxyUrl',\n method: 'GET',\n path: '/storage/files/{file_id}/proxy-url',\n pathParams: ['file_id'],\n queryParams: ['purpose'],\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'listStorageFileVersions',\n method: 'GET',\n path: '/storage/files/{file_id}/versions',\n pathParams: ['file_id'],\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'restoreStorageFileVersion',\n method: 'POST',\n path: '/storage/files/{file_id}/versions/{version_id}/restore',\n pathParams: ['file_id', 'version_id'],\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'deleteStorageFileVersion',\n method: 'DELETE',\n path: '/storage/files/{file_id}/versions/{version_id}',\n pathParams: ['file_id', 'version_id'],\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'getStorageFileRetention',\n method: 'GET',\n path: '/storage/files/{file_id}/retention',\n pathParams: ['file_id'],\n queryParams: ['version_id'],\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'setStorageFileRetention',\n method: 'POST',\n path: '/storage/files/{file_id}/retention',\n pathParams: ['file_id'],\n requestType: 'StorageFileRetentionRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'listStorageFolders',\n method: 'POST',\n path: '/storage/folders/list',\n requestType: 'ListStorageFoldersRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'treeStorageFolders',\n method: 'POST',\n path: '/storage/folders/tree',\n requestType: 'TreeStorageFoldersRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'listStoragePermissions',\n method: 'POST',\n path: '/storage/permissions/list',\n requestType: 'StoragePermissionListRequest',\n responseEnvelope: 'athena',\n responseType: 'StoragePermissionListResponse',\n },\n {\n name: 'grantStoragePermission',\n method: 'POST',\n path: '/storage/permissions/grant',\n requestType: 'StoragePermissionGrantRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'revokeStoragePermission',\n method: 'POST',\n path: '/storage/permissions/revoke',\n requestType: 'StoragePermissionRevokeRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'checkStoragePermission',\n method: 'POST',\n path: '/storage/permissions/check',\n requestType: 'StoragePermissionCheckRequest',\n responseEnvelope: 'athena',\n responseType: 'StoragePermissionCheckResponse',\n },\n {\n name: 'listStorageObjects',\n method: 'POST',\n path: '/storage/objects',\n requestType: 'StorageListObjectsRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'headStorageObject',\n method: 'POST',\n path: '/storage/objects/head',\n requestType: 'StorageObjectRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'existsStorageObject',\n method: 'POST',\n path: '/storage/objects/exists',\n requestType: 'StorageObjectRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'validateStorageObject',\n method: 'POST',\n path: '/storage/objects/validate',\n requestType: 'StorageObjectValidateRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'updateStorageObject',\n method: 'POST',\n path: '/storage/objects/update',\n requestType: 'StorageUpdateObjectRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'copyStorageObject',\n method: 'POST',\n path: '/storage/objects/copy',\n requestType: 'StorageObjectCopyRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'getStorageObjectUrl',\n method: 'POST',\n path: '/storage/objects/url',\n requestType: 'StorageObjectRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'getStorageObjectPublicUrl',\n method: 'POST',\n path: '/storage/objects/public-url',\n requestType: 'StorageObjectPublicUrlRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'deleteStorageObject',\n method: 'POST',\n path: '/storage/objects/delete',\n requestType: 'StorageObjectRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'createStorageObjectUploadUrl',\n method: 'POST',\n path: '/storage/objects/upload-url',\n requestType: 'StoragePresignUploadRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'createStorageObjectPostPolicy',\n method: 'POST',\n path: '/storage/objects/post-policy',\n requestType: 'StorageSignedPostPolicyRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'listStorageObjectVersions',\n method: 'POST',\n path: '/storage/objects/versions',\n requestType: 'StorageObjectVersionListRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'restoreStorageObjectVersion',\n method: 'POST',\n path: '/storage/objects/versions/restore',\n requestType: 'StorageObjectVersionMutationRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'deleteStorageObjectVersion',\n method: 'POST',\n path: '/storage/objects/versions/delete',\n requestType: 'StorageObjectVersionMutationRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'createStorageObjectFolder',\n method: 'POST',\n path: '/storage/objects/folder',\n requestType: 'StorageObjectFolderCreateRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'deleteStorageObjectFolder',\n method: 'POST',\n path: '/storage/objects/folder/delete',\n requestType: 'StorageObjectFolderDeleteRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'renameStorageObjectFolder',\n method: 'POST',\n path: '/storage/objects/folder/rename',\n requestType: 'StorageObjectFolderRenameRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'listStorageBuckets',\n method: 'POST',\n path: '/storage/buckets/list',\n requestType: \"Omit<StorageObjectBaseRequest, 'bucket'>\",\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'createStorageBucket',\n method: 'POST',\n path: '/storage/buckets/create',\n requestType: 'StorageObjectBaseRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'deleteStorageBucket',\n method: 'POST',\n path: '/storage/buckets/delete',\n requestType: 'StorageObjectBaseRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'getStorageBucketLifecycle',\n method: 'POST',\n path: '/storage/buckets/lifecycle',\n requestType: 'StorageBucketLifecycleRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'setStorageBucketLifecycle',\n method: 'POST',\n path: '/storage/buckets/lifecycle/set',\n requestType: 'StorageSetBucketLifecycleRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'deleteStorageBucketLifecycle',\n method: 'POST',\n path: '/storage/buckets/lifecycle/delete',\n requestType: 'StorageBucketLifecycleRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'getStorageBucketPolicy',\n method: 'POST',\n path: '/storage/buckets/policy',\n requestType: 'StorageBucketPolicyRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'setStorageBucketPolicy',\n method: 'POST',\n path: '/storage/buckets/policy/set',\n requestType: 'StorageSetBucketPolicyRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'deleteStorageBucketPolicy',\n method: 'POST',\n path: '/storage/buckets/policy/delete',\n requestType: 'StorageBucketPolicyRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'getStorageBucketPublicAccess',\n method: 'POST',\n path: '/storage/buckets/public-access',\n requestType: 'StoragePublicAccessBlockRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'setStorageBucketPublicAccess',\n method: 'POST',\n path: '/storage/buckets/public-access/set',\n requestType: 'StorageSetPublicAccessBlockRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'deleteStorageBucketPublicAccess',\n method: 'POST',\n path: '/storage/buckets/public-access/delete',\n requestType: 'StoragePublicAccessBlockRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'getStorageBucketCors',\n method: 'POST',\n path: '/storage/buckets/cors',\n requestType: 'StorageBucketCorsRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'setStorageBucketCors',\n method: 'POST',\n path: '/storage/buckets/cors/set',\n requestType: 'StorageSetBucketCorsRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'deleteStorageBucketCors',\n method: 'POST',\n path: '/storage/buckets/cors/delete',\n requestType: 'StorageBucketCorsRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'createStorageMultipartUpload',\n method: 'POST',\n path: '/storage/multipart/create',\n requestType: 'StorageMultipartCreateRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'signStorageMultipartPart',\n method: 'POST',\n path: '/storage/multipart/sign-part',\n requestType: 'StorageMultipartSignPartRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'completeStorageMultipartUpload',\n method: 'POST',\n path: '/storage/multipart/complete',\n requestType: 'StorageMultipartCompleteRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationResponse',\n },\n {\n name: 'abortStorageMultipartUpload',\n method: 'POST',\n path: '/storage/multipart/abort',\n requestType: 'StorageMultipartAbortRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'listStorageMultipartParts',\n method: 'POST',\n path: '/storage/multipart/list-parts',\n requestType: 'StorageMultipartListPartsRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'listStorageAuditEvents',\n method: 'POST',\n path: '/storage/audit/list',\n requestType: 'StorageAuditQueryRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageAuditListResponse',\n },\n ],\n} as const\n\r\nexport interface S3CatalogItem {\r\n id: string\r\n name: string\r\n endpoint?: string | null\r\n region?: string | null\r\n bucket: string\r\n provider: string\r\n force_path_style: boolean\r\n default_prefix?: string | null\r\n public_base_url?: string | null\r\n is_active: boolean\r\n metadata: Record<string, unknown>\r\n created_at: string\r\n updated_at: string\r\n}\r\n\r\nexport interface S3CredentialListItem {\r\n id: string\r\n s3_id: string\r\n name: string\r\n endpoint?: string | null\r\n region?: string | null\r\n bucket: string\r\n provider: string\r\n access_key: string\r\n is_active: boolean\r\n created_at: string\r\n rotated_at?: string | null\r\n}\r\n\r\nexport interface ManagedFileRecord {\r\n id: string\r\n name: string\r\n original_name?: string | null\r\n file_name?: string | null\r\n url?: string | null\r\n bucket: string\r\n s3_id?: string | null\r\n prefix_path?: string | null\r\n size_bytes?: number | null\r\n mime_type?: string | null\r\n content_type?: string | null\r\n resource_id?: string | null\r\n organization_id?: string | null\r\n created_by_user_id?: string | null\r\n uploaded_by_user_id?: string | null\r\n checksum_sha256?: string | null\r\n metadata: Record<string, unknown>\r\n created_at: string\r\n updated_at: string\r\n storage_key: string\r\n extension?: string | null\r\n visibility?: 'private' | 'organization' | 'public'\r\n is_public: boolean\r\n status: string\r\n deleted_at?: string | null\r\n}\r\n\r\nexport interface PresignedFileUrlResponse {\n file_id: string\n bucket: string\n storage_key: string\n purpose: string\n url: string\n headers?: Record<string, string>\n expires_at: string\n expires_at_epoch_seconds: number\n expires_in: number\n cache_hit: boolean\n cache_layer: string\n}\n\nexport interface StorageServerSideEncryptionOptions {\n server_side_encryption?: 'AES256' | 'aws:kms' | 'aws:kms:dsse' | (string & {})\n sse?: 'AES256' | 'aws:kms' | 'aws:kms:dsse' | (string & {})\n ssekms_key_id?: string\n kms_key_id?: string\n bucket_key_enabled?: boolean\n}\n\nexport interface CreateStorageCatalogRequest {\n name: string\r\n endpoint: string\r\n region: string\r\n bucket: string\r\n provider?: string\r\n force_path_style?: boolean\r\n default_prefix?: string\r\n public_base_url?: string\r\n access_key_id: string\r\n secret_key: string\r\n session_token?: string\r\n metadata?: Record<string, unknown>\r\n}\r\n\r\nexport interface UpdateStorageCatalogRequest {\r\n name?: string\r\n endpoint?: string\r\n region?: string\r\n bucket?: string\r\n provider?: string\r\n force_path_style?: boolean\r\n default_prefix?: string | null\r\n public_base_url?: string | null\r\n access_key_id?: string\r\n secret_key?: string\r\n session_token?: string\r\n is_active?: boolean\r\n metadata?: Record<string, unknown>\r\n}\r\n\r\nexport interface CreateStorageUploadUrlRequest extends StorageServerSideEncryptionOptions {\n s3_id: string\n bucket?: string\n storage_key: string\n name?: string\r\n original_name?: string\r\n resource_id?: string\r\n mime_type?: string\r\n content_type?: string\r\n size_bytes?: number\r\n file_id?: string\r\n public?: boolean\r\n visibility?: 'private' | 'organization' | 'public'\r\n metadata?: Record<string, unknown>\r\n}\r\n\r\nexport interface CreateStorageUploadUrlsRequest {\r\n files: CreateStorageUploadUrlRequest[]\r\n}\r\n\r\nexport interface StorageUploadUrlResponse {\r\n file: ManagedFileRecord\r\n upload: PresignedFileUrlResponse\r\n}\r\n\r\nexport interface StorageBatchUploadUrlResponse {\r\n files: StorageUploadUrlResponse[]\r\n}\r\n\r\nexport interface ListStorageFilesRequest {\n s3_id: string\n prefix?: string\n limit?: number\n offset?: number\n metadata?: Record<string, unknown>\n name?: string\n resource_id?: string\n mime_type?: string\n content_type?: string\n status?: string\n visibility?: 'private' | 'organization' | 'public' | (string & {})\n bucket?: string\n key_prefix?: string\n}\n\nexport interface StorageListFilesResponse {\n files: ManagedFileRecord[]\n count: number\n total?: number\n limit?: number\n offset?: number\n next_offset?: number | null\n has_more?: boolean\n}\n\nexport interface UpdateStorageFileRequest {\n storage_key?: string\n bucket?: string\n name?: string\n file_name?: string\n original_name?: string\n resource_id?: string\n mime_type?: string\n content_type?: string\n size_bytes?: number\n checksum_sha256?: string\n visibility?: 'private' | 'organization' | 'public' | (string & {})\n status?: string\n metadata?: Record<string, unknown>\n}\n\r\nexport interface SetStorageFileVisibilityRequest {\r\n public?: boolean\r\n visibility?: 'private' | 'organization' | 'public'\r\n}\r\n\r\nexport interface DeleteStorageFolderRequest {\r\n s3_id: string\r\n prefix: string\r\n}\r\n\r\nexport interface MoveStorageFolderRequest {\r\n s3_id: string\r\n from_prefix: string\r\n to_prefix: string\r\n}\r\n\r\nexport interface StorageFileMutationResponse {\r\n file: ManagedFileRecord\r\n}\r\n\r\nexport interface StorageFolderMutationResponse {\r\n s3_id: string\r\n prefix: string\r\n processed_files: number\r\n}\r\n\r\nexport interface StorageFileMutationManyResponse {\r\n files: ManagedFileRecord[]\r\n count: number\r\n}\r\n\r\nexport interface StorageFilePermissionRecord {\r\n id: string\r\n file_id: string\r\n principal_type: 'user' | 'organization' | 'team' | 'role'\r\n principal_id: string\r\n permission: 'read' | 'write' | 'delete' | 'share' | 'owner'\r\n granted_by_user_id?: string | null\r\n created_at: string\r\n expires_at?: string | null\r\n revoked_at?: string | null\r\n metadata: Record<string, unknown>\r\n}\r\n\r\nexport interface StoragePermissionListResponse {\r\n permissions: StorageFilePermissionRecord[]\r\n count: number\r\n}\r\n\r\nexport interface StoragePermissionCheckResponse {\r\n allowed: boolean\r\n permission: string\r\n}\r\n\r\nexport interface StorageAuditEventRecord {\r\n id: string\r\n operation: string\r\n file_id?: string | null\r\n s3_id?: string | null\r\n bucket?: string | null\r\n storage_key?: string | null\r\n actor_user_id?: string | null\r\n organization_id?: string | null\r\n status: 'success' | 'error'\r\n error?: string | null\r\n metadata: Record<string, unknown>\r\n created_at: string\r\n}\r\n\r\nexport interface StorageAuditListResponse {\r\n events: StorageAuditEventRecord[]\r\n count: number\r\n}\r\n\r\nexport interface ConfirmStorageUploadRequest {\r\n size_bytes?: number\r\n content_type?: string\r\n checksum_sha256?: string\r\n metadata?: Record<string, unknown>\r\n}\r\n\r\nexport interface SearchStorageFilesRequest {\n query?: string\n limit?: number\n offset?: number\n s3_id?: string\n prefix?: string\n metadata?: Record<string, unknown>\n name?: string\n resource_id?: string\n mime_type?: string\n content_type?: string\n status?: string\n visibility?: 'private' | 'organization' | 'public' | (string & {})\n bucket?: string\n key_prefix?: string\n}\n\r\nexport interface DeleteManyStorageFilesRequest {\r\n file_ids: string[]\r\n}\r\n\r\nexport interface UpdateManyStorageFilesRequest {\n file_ids: string[]\n storage_key?: string\n bucket?: string\n name?: string\n file_name?: string\n original_name?: string\n resource_id?: string\n mime_type?: string\n content_type?: string\n size_bytes?: number\n checksum_sha256?: string\n visibility?: 'private' | 'organization' | 'public' | (string & {})\n status?: string\n metadata?: Record<string, unknown>\n}\n\r\nexport interface SetManyStorageFileVisibilityRequest {\r\n file_ids: string[]\r\n public?: boolean\r\n visibility?: 'private' | 'organization' | 'public'\r\n}\r\n\r\nexport interface CopyStorageFileRequest extends StorageServerSideEncryptionOptions {\n storage_key: string\n bucket?: string\n file_name?: string\r\n visibility?: 'private' | 'organization' | 'public'\r\n metadata?: Record<string, unknown>\r\n}\r\n\r\nexport interface ListStorageFoldersRequest {\r\n s3_id: string\r\n prefix: string\r\n}\r\n\r\nexport interface TreeStorageFoldersRequest {\r\n s3_id: string\r\n prefix: string\r\n}\r\n\r\nexport interface StoragePermissionListRequest {\r\n file_id: string\r\n}\r\n\r\nexport interface StoragePermissionGrantRequest {\r\n file_id: string\r\n principal_type: 'user' | 'organization' | 'team' | 'role'\r\n principal_id: string\r\n permission: 'read' | 'write' | 'delete' | 'share' | 'owner'\r\n expires_at?: string\r\n metadata?: Record<string, unknown>\r\n}\r\n\r\nexport interface StoragePermissionRevokeRequest {\r\n file_id: string\r\n principal_type: 'user' | 'organization' | 'team' | 'role'\r\n principal_id: string\r\n permission: 'read' | 'write' | 'delete' | 'share' | 'owner'\r\n}\r\n\r\nexport interface StoragePermissionCheckRequest {\r\n file_id: string\r\n permission: 'read' | 'write' | 'delete' | 'share' | 'owner'\r\n}\r\n\r\nexport interface StorageMultipartCreateRequest extends StorageServerSideEncryptionOptions {\n file_id: string\n content_type?: string\n}\n\r\nexport interface StorageMultipartSignPartRequest {\r\n file_id: string\r\n upload_id: string\r\n part_number: number\r\n}\r\n\r\nexport interface StorageMultipartCompletePartInput {\r\n part_number: number\r\n etag: string\r\n}\r\n\r\nexport interface StorageMultipartCompleteRequest {\r\n file_id: string\r\n upload_id: string\r\n parts: StorageMultipartCompletePartInput[]\r\n}\r\n\r\nexport interface StorageMultipartAbortRequest {\r\n file_id: string\r\n upload_id: string\r\n}\r\n\r\nexport interface StorageMultipartListPartsRequest {\r\n file_id: string\r\n upload_id: string\r\n}\r\n\r\nexport interface StorageObjectFolderCreateRequest {\r\n endpoint: string\r\n region: string\r\n access_key_id: string\r\n secret_key: string\r\n bucket: string\r\n prefix: string\r\n}\r\n\r\nexport type StorageObjectFolderDeleteRequest = StorageObjectFolderCreateRequest\r\n\r\nexport interface StorageObjectFolderRenameRequest extends Omit<StorageObjectFolderCreateRequest, 'prefix'> {\r\n from_prefix: string\r\n to_prefix: string\r\n}\r\n\r\nexport interface StorageObjectBaseRequest {\r\n endpoint: string\r\n region: string\r\n access_key_id: string\r\n secret_key: string\r\n bucket: string\r\n}\r\n\r\nexport interface StorageObjectRequest extends StorageObjectBaseRequest {\n key: string\n}\n\nexport interface StorageObjectValidateRequest extends StorageObjectRequest {\n checksum_sha256?: string\n etag?: string\n}\n\nexport interface StorageObjectCopyRequest extends StorageObjectBaseRequest, StorageServerSideEncryptionOptions {\n source_key: string\n destination_key: string\n destination_bucket?: string\n}\n\r\nexport interface StorageObjectPublicUrlRequest extends StorageObjectRequest {\r\n public_base_url?: string\r\n force_path_style?: boolean\r\n}\r\n\r\nexport interface StorageListObjectsRequest extends StorageObjectBaseRequest {\r\n prefix?: string\r\n delimiter?: string\r\n continuation_token?: string\r\n max_keys?: number\r\n}\r\n\r\nexport interface StorageUpdateObjectRequest extends StorageObjectRequest {\r\n acl?: string\r\n content_type?: string\r\n cache_control?: string\r\n content_disposition?: string\r\n content_encoding?: string\r\n content_language?: string\r\n metadata?: Record<string, string>\r\n}\r\n\r\nexport interface StorageObjectVersionListRequest extends StorageObjectBaseRequest {\n key?: string\n max_keys?: number\n key_marker?: string\n version_id_marker?: string\n delimiter?: string\n}\n\nexport interface StorageObjectVersionMutationRequest extends StorageObjectRequest {\n version_id: string\n}\n\nexport interface StorageSignedPostPolicyRequest extends StorageObjectRequest, StorageServerSideEncryptionOptions {\n content_type?: string\n min_size?: number\n max_size?: number\n expires_in?: number\n public_base_url?: string\n force_path_style?: boolean\n success_action_status?: string\n}\n\nexport interface StoragePresignUploadRequest extends StorageObjectRequest, StorageServerSideEncryptionOptions {\n content_type?: string\n}\n\r\nexport type StorageBucketCorsRequest = StorageObjectBaseRequest\r\n\r\nexport interface StorageBucketCorsRuleInput {\r\n allowed_origins: string[]\r\n allowed_methods: string[]\r\n allowed_headers?: string[]\r\n expose_headers?: string[]\r\n max_age_seconds?: number\r\n}\r\n\r\nexport interface StorageSetBucketCorsRequest extends StorageBucketCorsRequest {\n rules: StorageBucketCorsRuleInput[]\n}\n\nexport type StorageBucketLifecycleRequest = StorageObjectBaseRequest\n\nexport interface StorageBucketLifecycleRuleInput {\n id?: string\n prefix?: string\n status?: 'Enabled' | 'Disabled' | 'enabled' | 'disabled' | (string & {})\n expiration_days?: number\n expired_object_delete_marker?: boolean\n noncurrent_version_expiration_days?: number\n abort_incomplete_multipart_upload_days?: number\n}\n\nexport interface StorageSetBucketLifecycleRequest extends StorageBucketLifecycleRequest {\n rules: StorageBucketLifecycleRuleInput[]\n}\n\nexport type StorageBucketPolicyRequest = StorageObjectBaseRequest\n\nexport interface StorageSetBucketPolicyRequest extends StorageBucketPolicyRequest {\n policy: Record<string, unknown> | string\n}\n\nexport type StoragePublicAccessBlockRequest = StorageObjectBaseRequest\n\nexport interface StorageSetPublicAccessBlockRequest extends StoragePublicAccessBlockRequest {\n block_public_acls?: boolean\n ignore_public_acls?: boolean\n block_public_policy?: boolean\n restrict_public_buckets?: boolean\n}\n\nexport interface StorageFileVersionPathRequest {\n file_id: string\n version_id: string\n}\n\nexport interface StorageFileRetentionRequest {\n mode?: 'GOVERNANCE' | 'COMPLIANCE' | (string & {})\n retain_until?: string\n retain_until_date?: string\n version_id?: string\n bypass_governance?: boolean\n}\n\nexport interface StorageAuditQueryRequest {\n file_id?: string\n limit?: number\n offset?: number\r\n}\r\n\r\nexport interface AthenaEnvelope<T> {\r\n status: string\r\n message: string\r\n data: T\r\n}\r\n\r\nexport type StorageFileAccessPurpose = 'read' | 'download' | 'stream'\r\n\r\nexport interface GetStorageFileUrlQuery {\r\n purpose?: StorageFileAccessPurpose | (string & {})\r\n}\r\n\r\nexport type AthenaStorageErrorHandler = (error: AthenaStorageError) => void | Promise<void>\r\n\r\nexport interface AthenaStorageClientConfig extends AthenaStorageFileConfig {\r\n onError?: AthenaStorageErrorHandler\r\n}\r\n\r\nexport interface AthenaStorageCallOptions extends AthenaGatewayCallOptions {\r\n signal?: AbortSignal\r\n onError?: AthenaStorageErrorHandler\r\n}\r\n\r\nexport type AthenaStorageBinaryCallOptions = AthenaStorageCallOptions\r\n\r\nexport type AthenaStorageErrorCode =\r\n | 'INVALID_URL'\r\n | 'NETWORK_ERROR'\r\n | 'HTTP_ERROR'\r\n | 'INVALID_JSON'\r\n | 'INVALID_ATHENA_ENVELOPE'\r\n | 'UNKNOWN_ERROR'\r\n\r\nexport const AthenaStorageErrorCode = {\r\n InvalidUrl: 'INVALID_URL',\r\n NetworkError: 'NETWORK_ERROR',\r\n HttpError: 'HTTP_ERROR',\r\n InvalidJson: 'INVALID_JSON',\r\n InvalidAthenaEnvelope: 'INVALID_ATHENA_ENVELOPE',\r\n UnknownError: 'UNKNOWN_ERROR',\r\n} as const satisfies Record<string, AthenaStorageErrorCode>\r\n\r\nexport interface AthenaStorageErrorDetails {\r\n code: AthenaStorageErrorCode\r\n athenaCode: AthenaErrorCode\r\n kind: AthenaErrorKind\r\n category: AthenaErrorCategory\r\n retryable: boolean\r\n message: string\r\n status: number\r\n endpoint: AthenaGatewayEndpointPath\r\n method: AthenaGatewayMethod\r\n requestId?: string\r\n hint?: string\r\n cause?: string\r\n raw: unknown\r\n}\r\n\r\nexport interface AthenaStorageErrorInput {\r\n code: AthenaStorageErrorCode\r\n message: string\r\n status: number\r\n endpoint: AthenaGatewayEndpointPath\r\n method: AthenaGatewayMethod\r\n raw?: unknown\r\n requestId?: string\r\n hint?: string\r\n cause?: unknown\r\n}\r\n\r\nexport class AthenaStorageError extends Error {\r\n readonly code: AthenaStorageErrorCode\r\n readonly athenaCode: AthenaErrorCode\r\n readonly kind: AthenaErrorKind\r\n readonly category: AthenaErrorCategory\r\n readonly retryable: boolean\r\n readonly status: number\r\n readonly endpoint: AthenaGatewayEndpointPath\r\n readonly method: AthenaGatewayMethod\r\n readonly requestId?: string\r\n readonly hint?: string\r\n readonly causeDetail?: string\r\n readonly raw: unknown\r\n readonly normalized: NormalizedAthenaError\r\n readonly __athenaNormalizedError: NormalizedAthenaError\r\n\r\n constructor(input: AthenaStorageErrorInput) {\r\n super(input.message, { cause: input.cause })\r\n this.name = 'AthenaStorageError'\r\n this.code = input.code\r\n this.status = input.status\r\n this.endpoint = input.endpoint\r\n this.method = input.method\r\n this.requestId = input.requestId\r\n this.hint = input.hint\r\n this.causeDetail = causeToString(input.cause)\r\n this.raw = input.raw ?? null\r\n this.normalized = normalizeStorageErrorInput(input)\r\n this.__athenaNormalizedError = this.normalized\r\n this.athenaCode = this.normalized.code\r\n this.kind = this.normalized.kind\r\n this.category = this.normalized.category\r\n this.retryable = this.normalized.retryable\r\n Object.defineProperty(this, '__athenaNormalizedError', {\r\n value: this.normalized,\r\n enumerable: false,\r\n configurable: false,\r\n writable: false,\r\n })\r\n }\r\n\r\n toDetails(): AthenaStorageErrorDetails {\r\n return {\r\n code: this.code,\r\n athenaCode: this.athenaCode,\r\n kind: this.kind,\r\n category: this.category,\r\n retryable: this.retryable,\r\n message: this.message,\r\n status: this.status,\r\n endpoint: this.endpoint,\r\n method: this.method,\r\n requestId: this.requestId,\r\n hint: this.hint,\r\n cause: this.causeDetail,\r\n raw: this.raw,\r\n }\r\n }\r\n}\r\n\r\nexport interface AthenaStorageBaseModule {\r\n listStorageCatalogs(options?: AthenaStorageCallOptions): Promise<{ data: S3CatalogItem[] }>\r\n createStorageCatalog(\r\n input: CreateStorageCatalogRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<S3CatalogItem>\r\n updateStorageCatalog(\r\n id: string,\r\n input: UpdateStorageCatalogRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<S3CatalogItem>\r\n deleteStorageCatalog(\r\n id: string,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<{ id: string; deleted: boolean }>\r\n listStorageCredentials(options?: AthenaStorageCallOptions): Promise<{ data: S3CredentialListItem[] }>\r\n createStorageUploadUrl(\r\n input: CreateStorageUploadUrlRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageUploadUrlResponse>\r\n createStorageUploadUrls(\r\n input: CreateStorageUploadUrlsRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageBatchUploadUrlResponse>\r\n listStorageFiles(\r\n input: ListStorageFilesRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageListFilesResponse>\r\n getStorageFile(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\r\n getStorageFileUrl(\r\n fileId: string,\r\n query?: GetStorageFileUrlQuery,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<PresignedFileUrlResponse>\r\n getStorageFileProxy(\r\n fileId: string,\r\n query?: GetStorageFileUrlQuery,\r\n options?: AthenaStorageBinaryCallOptions,\r\n ): Promise<Response>\r\n updateStorageFile(\r\n fileId: string,\r\n input: UpdateStorageFileRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageFileMutationResponse>\r\n deleteStorageFile(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\r\n setStorageFileVisibility(\r\n fileId: string,\r\n input: SetStorageFileVisibilityRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageFileMutationResponse>\r\n deleteStorageFolder(\r\n input: DeleteStorageFolderRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageFolderMutationResponse>\r\n moveStorageFolder(\r\n input: MoveStorageFolderRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageFolderMutationResponse>\r\n}\r\n\r\nexport type AthenaStoragePutBody =\r\n | Blob\r\n | ArrayBuffer\r\n | Uint8Array\r\n | ReadableStream<Uint8Array>\r\n\r\nexport interface AthenaStoragePutOptions {\r\n headers?: Record<string, string>\r\n signal?: AbortSignal\r\n}\r\n\r\nexport interface AthenaStorageManagedUpload extends PresignedFileUrlResponse {\r\n method: 'PUT'\r\n headers: Record<string, string>\r\n expiresAt: string\r\n put(body: AthenaStoragePutBody, options?: AthenaStoragePutOptions): Promise<Response>\r\n}\r\n\r\nexport interface StorageUploadUrlResponseWithPut extends Omit<StorageUploadUrlResponse, 'upload'> {\r\n upload: AthenaStorageManagedUpload\r\n}\r\n\r\nexport interface StorageBatchUploadUrlResponseWithPut {\r\n files: StorageUploadUrlResponseWithPut[]\r\n}\r\n\r\nexport interface AthenaStorageFileUploadRequest extends StorageServerSideEncryptionOptions {\n s3_id?: string\r\n s3Id?: string\r\n bucket?: string\r\n storage_key?: string\r\n storageKey?: string\r\n name?: string\r\n fileName?: string\r\n original_name?: string\r\n originalName?: string\r\n resource_id?: string\r\n resourceId?: string\r\n mime_type?: string\r\n mimeType?: string\r\n content_type?: string\r\n contentType?: string\r\n size_bytes?: number\r\n sizeBytes?: number\r\n file_id?: string\r\n fileId?: string\r\n public?: boolean\r\n visibility?: 'private' | 'organization' | 'public'\r\n metadata?: Record<string, unknown>\r\n}\r\n\r\nexport interface AthenaStorageFileUploadManyRequest {\r\n files: AthenaStorageFileUploadRequest[]\r\n}\r\n\r\nexport interface AthenaStorageFileNamespace extends AthenaStorageFileModule {\r\n upload(\r\n input: AthenaStorageFileUploadRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageUploadUrlResponseWithPut>\r\n upload(\r\n input: Parameters<AthenaStorageFileModule['upload']>[0],\r\n options?: AthenaStorageCallOptions,\r\n ): ReturnType<AthenaStorageFileModule['upload']>\r\n uploadMany(\r\n input: AthenaStorageFileUploadManyRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageBatchUploadUrlResponseWithPut>\r\n confirmUpload(\r\n fileId: string,\r\n input?: ConfirmStorageUploadRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageFileMutationResponse>\r\n uploadBinary(\r\n fileId: string,\r\n body: AthenaStoragePutBody,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageFileMutationResponse>\r\n search(\r\n input: SearchStorageFilesRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageListFilesResponse>\r\n get(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\r\n update(\r\n fileId: string,\r\n input: UpdateStorageFileRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageFileMutationResponse>\r\n deleteMany(\r\n input: DeleteManyStorageFilesRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageFileMutationManyResponse>\r\n updateMany(\r\n input: UpdateManyStorageFilesRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageFileMutationManyResponse>\r\n restore(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\r\n purge(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\r\n copy(\r\n fileId: string,\r\n input: CopyStorageFileRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageFileMutationResponse>\r\n url(\r\n fileId: string,\r\n query?: GetStorageFileUrlQuery,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<PresignedFileUrlResponse>\r\n publicUrl(fileId: string, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n proxyUrl(\n fileId: string,\n query?: GetStorageFileUrlQuery,\n options?: AthenaStorageCallOptions,\n ): Promise<Record<string, unknown>>\n proxy(\n fileId: string,\n query?: GetStorageFileUrlQuery,\n options?: AthenaStorageBinaryCallOptions,\n ): Promise<Response>\n versions(fileId: string, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n restoreVersion(\n fileId: string,\n versionId: string,\n options?: AthenaStorageCallOptions,\n ): Promise<Record<string, unknown>>\n deleteVersion(\n fileId: string,\n versionId: string,\n options?: AthenaStorageCallOptions,\n ): Promise<Record<string, unknown>>\n retention: {\n get(\n fileId: string,\n query?: Pick<StorageFileRetentionRequest, 'version_id'>,\n options?: AthenaStorageCallOptions,\n ): Promise<Record<string, unknown>>\n set(\n fileId: string,\n input: StorageFileRetentionRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<Record<string, unknown>>\n }\n visibility: {\n update(\n fileId: string,\n input: SetStorageFileVisibilityRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageFileMutationResponse>\n set(\n fileId: string,\n input: SetStorageFileVisibilityRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageFileMutationResponse>\n setMany(\r\n input: SetManyStorageFileVisibilityRequest,\r\n options?: AthenaStorageCallOptions,\r\n ): Promise<StorageFileMutationManyResponse>\r\n }\r\n}\r\n\r\nexport interface AthenaStorageCredentialsNamespace {\r\n list(options?: AthenaStorageCallOptions): Promise<{ data: S3CredentialListItem[] }>\r\n}\r\n\r\nexport interface AthenaStorageCatalogNamespace {\r\n list(options?: AthenaStorageCallOptions): Promise<{ data: S3CatalogItem[] }>\r\n create(input: CreateStorageCatalogRequest, options?: AthenaStorageCallOptions): Promise<S3CatalogItem>\r\n update(id: string, input: UpdateStorageCatalogRequest, options?: AthenaStorageCallOptions): Promise<S3CatalogItem>\r\n delete(id: string, options?: AthenaStorageCallOptions): Promise<{ id: string; deleted: boolean }>\r\n}\r\n\r\nexport interface AthenaStorageFolderNamespace {\r\n list(input: ListStorageFoldersRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\r\n tree(input: TreeStorageFoldersRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\r\n delete(input: DeleteStorageFolderRequest, options?: AthenaStorageCallOptions): Promise<StorageFolderMutationResponse>\r\n move(input: MoveStorageFolderRequest, options?: AthenaStorageCallOptions): Promise<StorageFolderMutationResponse>\r\n}\r\n\r\nexport interface AthenaStoragePermissionNamespace {\r\n list(input: StoragePermissionListRequest, options?: AthenaStorageCallOptions): Promise<StoragePermissionListResponse>\r\n grant(input: StoragePermissionGrantRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\r\n revoke(input: StoragePermissionRevokeRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\r\n check(input: StoragePermissionCheckRequest, options?: AthenaStorageCallOptions): Promise<StoragePermissionCheckResponse>\r\n}\r\n\r\nexport interface AthenaStorageObjectFolderNamespace {\r\n create(input: StorageObjectFolderCreateRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\r\n delete(input: StorageObjectFolderDeleteRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\r\n rename(input: StorageObjectFolderRenameRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\r\n}\r\n\r\nexport interface AthenaStorageObjectNamespace {\n list(input: StorageListObjectsRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n head(input: StorageObjectRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n exists(input: StorageObjectRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n validate(input: StorageObjectValidateRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n update(input: StorageUpdateObjectRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n copy(input: StorageObjectCopyRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n url(input: StorageObjectRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n publicUrl(input: StorageObjectPublicUrlRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n delete(input: StorageObjectRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n uploadUrl(input: StoragePresignUploadRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n versions(input: StorageObjectVersionListRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n restoreVersion(\n input: StorageObjectVersionMutationRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<Record<string, unknown>>\n deleteVersion(\n input: StorageObjectVersionMutationRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<Record<string, unknown>>\n postPolicy(input: StorageSignedPostPolicyRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n folder: AthenaStorageObjectFolderNamespace\n}\n\r\nexport interface AthenaStorageBucketCorsNamespace {\r\n get(input: StorageBucketCorsRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\r\n set(input: StorageSetBucketCorsRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\r\n delete(input: StorageBucketCorsRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\r\n}\r\n\r\nexport interface AthenaStorageBucketNamespace {\n list(input: Omit<StorageObjectBaseRequest, 'bucket'>, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n create(input: StorageObjectBaseRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n delete(input: StorageObjectBaseRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n lifecycle: {\n get(input: StorageBucketLifecycleRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n set(input: StorageSetBucketLifecycleRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n delete(input: StorageBucketLifecycleRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n }\n policy: {\n get(input: StorageBucketPolicyRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n set(input: StorageSetBucketPolicyRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n delete(input: StorageBucketPolicyRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n }\n publicAccess: {\n get(input: StoragePublicAccessBlockRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n set(input: StorageSetPublicAccessBlockRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n delete(input: StoragePublicAccessBlockRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n }\n cors: AthenaStorageBucketCorsNamespace\n}\n\r\nexport interface AthenaStorageMultipartNamespace {\r\n create(input: StorageMultipartCreateRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\r\n signPart(input: StorageMultipartSignPartRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\r\n complete(input: StorageMultipartCompleteRequest, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\r\n abort(input: StorageMultipartAbortRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\r\n listParts(input: StorageMultipartListPartsRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\r\n}\r\n\r\nexport interface AthenaStorageAuditNamespace {\r\n list(input: StorageAuditQueryRequest, options?: AthenaStorageCallOptions): Promise<StorageAuditListResponse>\r\n}\r\n\r\nexport interface AthenaStorageModule extends AthenaStorageBaseModule {\r\n credentials: AthenaStorageCredentialsNamespace\r\n catalog: AthenaStorageCatalogNamespace\r\n file: AthenaStorageFileNamespace\r\n folder: AthenaStorageFolderNamespace\r\n permission: AthenaStoragePermissionNamespace\r\n object: AthenaStorageObjectNamespace\r\n bucket: AthenaStorageBucketNamespace\r\n multipart: AthenaStorageMultipartNamespace\r\n audit: AthenaStorageAuditNamespace\r\n delete: AthenaStorageFileModule['delete']\r\n}\r\n\r\ntype StorageEnvelopeKind = 'raw' | 'athena'\r\n\r\ninterface StorageModuleRuntimeOptions {\r\n baseUrl?: string\r\n onError?: AthenaStorageErrorHandler\r\n stripBasePath?: boolean\r\n}\r\n\r\nfunction isRecord(value: unknown): value is Record<string, unknown> {\r\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\r\n}\r\n\r\nfunction causeToString(cause: unknown): string | undefined {\r\n if (cause === undefined || cause === null) return undefined\r\n if (typeof cause === 'string') return cause\r\n if (cause instanceof Error && cause.message.trim()) return cause.message.trim()\r\n try {\r\n return JSON.stringify(cause)\r\n } catch {\r\n return String(cause)\r\n }\r\n}\r\n\r\nfunction storageGatewayCode(code: AthenaStorageErrorCode): AthenaGatewayErrorCode {\r\n if (code === 'INVALID_URL') return 'INVALID_URL'\r\n if (code === 'NETWORK_ERROR') return 'NETWORK_ERROR'\r\n if (code === 'INVALID_JSON' || code === 'INVALID_ATHENA_ENVELOPE') return 'INVALID_JSON'\r\n if (code === 'HTTP_ERROR') return 'HTTP_ERROR'\r\n return 'UNKNOWN_ERROR'\r\n}\r\n\r\nfunction headerValue(headers: Headers, names: readonly string[]): string | undefined {\r\n for (const name of names) {\r\n const value = headers.get(name)\r\n if (value?.trim()) return value.trim()\r\n }\r\n return undefined\r\n}\r\n\r\nfunction storageOperationFromEndpoint(\r\n endpoint: AthenaGatewayEndpointPath,\r\n method: AthenaGatewayMethod,\r\n): string {\r\n const endpointPath = String(endpoint).split('?')[0]\r\n for (const candidate of storageSdkManifest.methods) {\r\n if (candidate.method !== method) continue\r\n const pattern = `^${candidate.path.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&').replace(/\\\\\\{[^/]+\\\\\\}/g, '[^/]+')}$`\r\n if (new RegExp(pattern).test(endpointPath)) {\r\n return candidate.name\r\n }\r\n }\r\n return `storage:${method.toLowerCase()}`\r\n}\r\n\r\nfunction normalizeStorageErrorInput(input: AthenaStorageErrorInput): NormalizedAthenaError {\r\n return normalizeAthenaError(\r\n {\r\n data: null,\r\n error: {\r\n message: input.message,\r\n gatewayCode: storageGatewayCode(input.code),\r\n status: input.status,\r\n raw: input.raw ?? input.cause ?? null,\r\n },\r\n errorDetails: {\r\n code: storageGatewayCode(input.code),\r\n message: input.message,\r\n status: input.status,\r\n endpoint: input.endpoint,\r\n method: input.method,\r\n requestId: input.requestId,\r\n hint: input.hint,\r\n cause: causeToString(input.cause),\r\n },\r\n raw: input.raw ?? input.cause ?? null,\r\n status: input.status,\r\n },\r\n { operation: storageOperationFromEndpoint(input.endpoint, input.method) },\r\n )\r\n}\r\n\r\nexport function createAthenaStorageError(input: AthenaStorageErrorInput): AthenaStorageError {\r\n return new AthenaStorageError(input)\r\n}\r\n\r\nasync function notifyStorageError(\r\n error: AthenaStorageError,\r\n options: AthenaStorageCallOptions | undefined,\r\n runtimeOptions: StorageModuleRuntimeOptions | undefined,\r\n): Promise<void> {\r\n const handlers = [runtimeOptions?.onError, options?.onError].filter(\r\n (handler): handler is AthenaStorageErrorHandler => typeof handler === 'function',\r\n )\r\n for (const handler of handlers) {\r\n try {\r\n await handler(error)\r\n } catch {\r\n // Error observers must not mask the original storage failure.\r\n }\r\n }\r\n}\r\n\r\nasync function rejectStorageError(\r\n input: AthenaStorageErrorInput,\r\n options: AthenaStorageCallOptions | undefined,\r\n runtimeOptions: StorageModuleRuntimeOptions | undefined,\r\n): Promise<never> {\r\n const error = createAthenaStorageError(input)\r\n await notifyStorageError(error, options, runtimeOptions)\r\n throw error\r\n}\r\n\r\nfunction parseResponseBody(rawText: string, contentType: string | null) {\r\n if (!rawText) {\r\n return { parsed: null as unknown, parseFailed: false }\r\n }\r\n\r\n const contentTypeSuggestsJson =\r\n contentType?.toLowerCase().includes('application/json') ?? false\r\n const looksJson =\r\n contentTypeSuggestsJson || rawText.startsWith('{') || rawText.startsWith('[')\r\n\r\n if (!looksJson) {\r\n return { parsed: rawText as unknown, parseFailed: false }\r\n }\r\n\r\n try {\r\n return { parsed: JSON.parse(rawText) as unknown, parseFailed: false }\r\n } catch {\r\n return { parsed: rawText as unknown, parseFailed: true }\r\n }\r\n}\r\n\r\nfunction appendQuery(path: string, query?: object): string {\r\n if (!query) return path\r\n const params = new URLSearchParams()\r\n for (const [key, value] of Object.entries(query)) {\r\n if (value === undefined || value === null) continue\r\n params.set(key, String(value))\r\n }\r\n const queryText = params.toString()\r\n return queryText ? `${path}?${queryText}` : path\r\n}\r\n\r\nfunction storagePath(path: string): AthenaGatewayEndpointPath {\r\n return path as AthenaGatewayEndpointPath\r\n}\r\n\r\nfunction resolveStorageEndpointPath(\r\n endpoint: AthenaGatewayEndpointPath,\r\n runtimeOptions?: StorageModuleRuntimeOptions,\r\n): AthenaGatewayEndpointPath {\r\n if (!runtimeOptions?.stripBasePath) {\r\n return endpoint\r\n }\r\n\r\n const [pathname, queryText] = String(endpoint).split('?', 2)\r\n const trimmedPathname = pathname.startsWith('/storage/')\r\n ? pathname.slice('/storage'.length)\r\n : pathname === '/storage'\r\n ? '/'\r\n : pathname\r\n const resolvedPath = trimmedPathname.startsWith('/') ? trimmedPathname : `/${trimmedPathname}`\r\n return storagePath(queryText ? `${resolvedPath}?${queryText}` : resolvedPath)\r\n}\r\n\r\nfunction withPathParam(path: string, name: string, value: string): string {\r\n return path.replace(`{${name}}`, encodeURIComponent(value))\r\n}\r\n\r\nfunction resolveErrorMessage(payload: unknown, fallback: string): string {\r\n if (isRecord(payload)) {\r\n const message = payload.message ?? payload.error ?? payload.details\r\n if (typeof message === 'string' && message.trim()) {\r\n return message.trim()\r\n }\r\n }\r\n if (typeof payload === 'string' && payload.trim()) {\r\n return payload.trim()\r\n }\r\n return fallback\r\n}\r\n\r\nfunction resolveErrorHint(payload: unknown): string | undefined {\r\n if (!isRecord(payload)) return undefined\r\n const hint = payload.hint ?? payload.suggestion\r\n return typeof hint === 'string' && hint.trim() ? hint.trim() : undefined\r\n}\r\n\r\nfunction resolveErrorCause(payload: unknown): string | undefined {\r\n if (!isRecord(payload)) return undefined\r\n const cause = payload.cause ?? payload.reason\r\n return typeof cause === 'string' && cause.trim() ? cause.trim() : undefined\r\n}\r\n\r\nfunction storageCodeFromUnknown(error: unknown): AthenaStorageErrorCode {\r\n if (isAthenaGatewayError(error)) {\r\n if (error.code === 'INVALID_URL') return 'INVALID_URL'\r\n if (error.code === 'NETWORK_ERROR') return 'NETWORK_ERROR'\r\n if (error.code === 'INVALID_JSON') return 'INVALID_JSON'\r\n if (error.code === 'HTTP_ERROR') return 'HTTP_ERROR'\r\n }\r\n return 'UNKNOWN_ERROR'\r\n}\r\n\r\nasync function callStorageEndpoint<T>(\r\n gateway: AthenaGatewayClient,\r\n endpoint: AthenaGatewayEndpointPath,\r\n method: AthenaGatewayMethod,\r\n envelope: StorageEnvelopeKind,\r\n payload?: unknown,\r\n options?: AthenaStorageCallOptions,\r\n runtimeOptions?: StorageModuleRuntimeOptions,\r\n): Promise<T> {\r\n let url: string\r\n let headers: Record<string, string>\r\n try {\r\n const baseUrl = options?.baseUrl\r\n ? normalizeAthenaGatewayBaseUrl(options.baseUrl)\r\n : runtimeOptions?.baseUrl\r\n ? normalizeAthenaGatewayBaseUrl(runtimeOptions.baseUrl)\r\n : gateway.baseUrl\r\n url = buildAthenaGatewayUrl(baseUrl, resolveStorageEndpointPath(endpoint, runtimeOptions))\r\n headers = gateway.buildHeaders(options)\r\n } catch (error) {\r\n return rejectStorageError(\r\n {\r\n code: storageCodeFromUnknown(error),\r\n message: error instanceof Error\r\n ? error.message\r\n : `Athena storage ${method} ${endpoint} failed before sending the request`,\r\n status: isAthenaGatewayError(error) ? error.status : 0,\r\n endpoint,\r\n method,\r\n raw: error,\r\n requestId: isAthenaGatewayError(error) ? error.requestId : undefined,\r\n hint: isAthenaGatewayError(error) ? error.hint : undefined,\r\n cause: error,\r\n },\r\n options,\r\n runtimeOptions,\r\n )\r\n }\r\n const requestInit: RequestInit = {\r\n method,\r\n headers,\r\n signal: options?.signal,\r\n }\r\n if (payload !== undefined && method !== 'GET') {\r\n requestInit.body = JSON.stringify(payload)\r\n }\r\n\r\n let response: Response\r\n try {\r\n response = await fetch(url, requestInit)\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : String(error)\r\n return rejectStorageError(\r\n {\r\n code: 'NETWORK_ERROR',\r\n message: `Network error while calling Athena storage ${method} ${endpoint}: ${message}`,\r\n status: 0,\r\n endpoint,\r\n method,\r\n cause: error,\r\n },\r\n options,\r\n runtimeOptions,\r\n )\r\n }\r\n\r\n let rawText: string\r\n try {\r\n rawText = await response.text()\r\n } catch (error) {\r\n return rejectStorageError(\r\n {\r\n code: 'NETWORK_ERROR',\r\n message: `Athena storage ${method} ${endpoint} response body could not be read`,\r\n status: response.status,\r\n endpoint,\r\n method,\r\n requestId: headerValue(response.headers, ['x-athena-request-id', 'x-request-id', 'request-id']),\r\n cause: error,\r\n },\r\n options,\r\n runtimeOptions,\r\n )\r\n }\r\n const parsedBody = parseResponseBody(rawText ?? '', response.headers.get('content-type'))\r\n const requestId = headerValue(response.headers, ['x-athena-request-id', 'x-request-id', 'request-id'])\r\n if (parsedBody.parseFailed) {\r\n return rejectStorageError(\r\n {\r\n code: 'INVALID_JSON',\r\n message: `Athena storage ${method} ${endpoint} returned malformed JSON`,\r\n status: response.status,\r\n endpoint,\r\n method,\r\n requestId,\r\n raw: parsedBody.parsed,\r\n },\r\n options,\r\n runtimeOptions,\r\n )\r\n }\r\n\r\n if (!response.ok) {\r\n return rejectStorageError(\r\n {\r\n code: 'HTTP_ERROR',\r\n message: resolveErrorMessage(\r\n parsedBody.parsed,\r\n `Athena storage ${method} ${endpoint} failed with status ${response.status}`,\r\n ),\r\n status: response.status,\r\n endpoint,\r\n method,\r\n requestId,\r\n hint: resolveErrorHint(parsedBody.parsed),\r\n cause: resolveErrorCause(parsedBody.parsed),\r\n raw: parsedBody.parsed,\r\n },\r\n options,\r\n runtimeOptions,\r\n )\r\n }\r\n\r\n if (envelope === 'athena') {\r\n if (!isRecord(parsedBody.parsed) || !('data' in parsedBody.parsed)) {\r\n return rejectStorageError(\r\n {\r\n code: 'INVALID_ATHENA_ENVELOPE',\r\n message: `Athena storage ${method} ${endpoint} returned an invalid Athena envelope`,\r\n status: response.status,\r\n endpoint,\r\n method,\r\n requestId,\r\n raw: parsedBody.parsed,\r\n },\r\n options,\r\n runtimeOptions,\r\n )\r\n }\r\n return parsedBody.parsed.data as T\r\n }\r\n\r\n return parsedBody.parsed as T\r\n}\r\n\r\nasync function callStorageBinaryEndpoint(\r\n gateway: AthenaGatewayClient,\r\n endpoint: AthenaGatewayEndpointPath,\r\n method: AthenaGatewayMethod,\r\n options?: AthenaStorageBinaryCallOptions,\r\n runtimeOptions?: StorageModuleRuntimeOptions,\r\n): Promise<Response> {\r\n let url: string\r\n let headers: Record<string, string>\r\n try {\r\n const baseUrl = options?.baseUrl\r\n ? normalizeAthenaGatewayBaseUrl(options.baseUrl)\r\n : runtimeOptions?.baseUrl\r\n ? normalizeAthenaGatewayBaseUrl(runtimeOptions.baseUrl)\r\n : gateway.baseUrl\r\n url = buildAthenaGatewayUrl(baseUrl, resolveStorageEndpointPath(endpoint, runtimeOptions))\r\n headers = gateway.buildHeaders(options)\r\n } catch (error) {\r\n return rejectStorageError(\r\n {\r\n code: storageCodeFromUnknown(error),\r\n message: error instanceof Error\r\n ? error.message\r\n : `Athena storage ${method} ${endpoint} failed before sending the request`,\r\n status: isAthenaGatewayError(error) ? error.status : 0,\r\n endpoint,\r\n method,\r\n raw: error,\r\n requestId: isAthenaGatewayError(error) ? error.requestId : undefined,\r\n hint: isAthenaGatewayError(error) ? error.hint : undefined,\r\n cause: error,\r\n },\r\n options,\r\n runtimeOptions,\r\n )\r\n }\r\n\r\n let response: Response\r\n try {\r\n response = await fetch(url, {\r\n method,\r\n headers,\r\n signal: options?.signal,\r\n })\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : String(error)\r\n return rejectStorageError(\r\n {\r\n code: 'NETWORK_ERROR',\r\n message: `Network error while calling Athena storage ${method} ${endpoint}: ${message}`,\r\n status: 0,\r\n endpoint,\r\n method,\r\n cause: error,\r\n },\r\n options,\r\n runtimeOptions,\r\n )\r\n }\r\n\r\n if (response.ok) {\r\n return response\r\n }\r\n\r\n const requestId = headerValue(response.headers, ['x-athena-request-id', 'x-request-id', 'request-id'])\r\n let rawErrorBody: unknown = null\r\n try {\r\n const rawText = await response.text()\r\n const parsedBody = parseResponseBody(rawText ?? '', response.headers.get('content-type'))\r\n rawErrorBody = parsedBody.parsed\r\n } catch (error) {\r\n return rejectStorageError(\r\n {\r\n code: 'NETWORK_ERROR',\r\n message: `Athena storage ${method} ${endpoint} error response body could not be read`,\r\n status: response.status,\r\n endpoint,\r\n method,\r\n requestId,\r\n cause: error,\r\n },\r\n options,\r\n runtimeOptions,\r\n )\r\n }\r\n\r\n return rejectStorageError(\r\n {\r\n code: 'HTTP_ERROR',\r\n message: resolveErrorMessage(\r\n rawErrorBody,\r\n `Athena storage ${method} ${endpoint} failed with status ${response.status}`,\r\n ),\r\n status: response.status,\r\n endpoint,\r\n method,\r\n requestId,\r\n hint: resolveErrorHint(rawErrorBody),\r\n cause: resolveErrorCause(rawErrorBody),\r\n raw: rawErrorBody,\r\n },\r\n options,\r\n runtimeOptions,\r\n )\r\n}\r\n\r\nfunction isBlobBody(body: AthenaStoragePutBody): body is Blob {\r\n return typeof Blob !== 'undefined' && body instanceof Blob\r\n}\r\n\r\nfunction isReadableStreamBody(body: AthenaStoragePutBody): body is ReadableStream<Uint8Array> {\r\n return typeof ReadableStream !== 'undefined' && body instanceof ReadableStream\r\n}\r\n\r\nasync function putPresignedUploadBody(\r\n uploadUrl: string,\r\n uploadHeaders: Record<string, string>,\r\n body: AthenaStoragePutBody,\r\n options?: AthenaStoragePutOptions,\r\n): Promise<Response> {\r\n const headers = new Headers(uploadHeaders)\r\n Object.entries(options?.headers ?? {}).forEach(([key, value]) => headers.set(key, value))\r\n if (!headers.has('Content-Type') && isBlobBody(body) && body.type) {\r\n headers.set('Content-Type', body.type)\r\n }\r\n\r\n const init: RequestInit & { duplex?: 'half' } = {\r\n method: 'PUT',\r\n headers,\r\n body: body as RequestInit['body'],\r\n signal: options?.signal,\r\n }\r\n if (isReadableStreamBody(body)) {\r\n init.duplex = 'half'\r\n }\r\n return fetch(uploadUrl, init)\r\n}\r\n\r\nfunction attachManagedUpload(upload: PresignedFileUrlResponse): AthenaStorageManagedUpload {\n const headers: Record<string, string> = { ...(upload.headers ?? {}) }\n return {\r\n ...upload,\r\n method: 'PUT',\r\n headers,\r\n expiresAt: upload.expires_at,\r\n put(body, options) {\r\n return putPresignedUploadBody(upload.url, headers, body, options)\r\n },\r\n }\r\n}\r\n\r\nfunction attachUploadHelper(response: StorageUploadUrlResponse): StorageUploadUrlResponseWithPut {\r\n return {\r\n ...response,\r\n upload: attachManagedUpload(response.upload),\r\n }\r\n}\r\n\r\nfunction attachUploadHelpers(\r\n response: StorageBatchUploadUrlResponse,\r\n): StorageBatchUploadUrlResponseWithPut {\r\n return {\r\n files: response.files.map(attachUploadHelper),\r\n }\r\n}\r\n\r\nfunction normalizeUploadUrlRequest(input: AthenaStorageFileUploadRequest): CreateStorageUploadUrlRequest {\r\n const s3_id = input.s3_id ?? input.s3Id\r\n const storage_key = input.storage_key ?? input.storageKey\r\n if (!s3_id?.trim()) {\r\n throw new Error('athena.storage.file.upload requires s3_id or s3Id')\r\n }\r\n if (!storage_key?.trim()) {\r\n throw new Error('athena.storage.file.upload requires storage_key or storageKey')\r\n }\r\n const fileName = input.fileName?.trim()\r\n const originalName = input.originalName?.trim()\r\n return {\r\n s3_id,\r\n bucket: input.bucket,\r\n storage_key,\r\n name: input.name ?? fileName,\r\n original_name: input.original_name ?? originalName ?? fileName,\r\n resource_id: input.resource_id ?? input.resourceId,\r\n mime_type: input.mime_type ?? input.mimeType,\r\n content_type: input.content_type ?? input.contentType,\r\n size_bytes: input.size_bytes ?? input.sizeBytes,\r\n file_id: input.file_id ?? input.fileId,\r\n public: input.public,\r\n visibility: input.visibility,\n metadata: input.metadata,\n server_side_encryption: input.server_side_encryption,\n sse: input.sse,\n ssekms_key_id: input.ssekms_key_id,\n kms_key_id: input.kms_key_id,\n bucket_key_enabled: input.bucket_key_enabled,\n }\n}\n\r\nasync function callStorageUploadBinaryEndpoint<T>(\r\n gateway: AthenaGatewayClient,\r\n endpoint: AthenaGatewayEndpointPath,\r\n body: AthenaStoragePutBody,\r\n options?: AthenaStorageCallOptions,\r\n runtimeOptions?: StorageModuleRuntimeOptions,\r\n): Promise<T> {\r\n let url: string\r\n let headers: Record<string, string>\r\n try {\r\n const baseUrl = options?.baseUrl\r\n ? normalizeAthenaGatewayBaseUrl(options.baseUrl)\r\n : runtimeOptions?.baseUrl\r\n ? normalizeAthenaGatewayBaseUrl(runtimeOptions.baseUrl)\r\n : gateway.baseUrl\r\n url = buildAthenaGatewayUrl(baseUrl, resolveStorageEndpointPath(endpoint, runtimeOptions))\r\n headers = gateway.buildHeaders(options)\r\n } catch (error) {\r\n return rejectStorageError(\r\n {\r\n code: storageCodeFromUnknown(error),\r\n message: error instanceof Error\r\n ? error.message\r\n : `Athena storage PUT ${endpoint} failed before sending the request`,\r\n status: isAthenaGatewayError(error) ? error.status : 0,\r\n endpoint,\r\n method: 'PUT',\r\n raw: error,\r\n requestId: isAthenaGatewayError(error) ? error.requestId : undefined,\r\n hint: isAthenaGatewayError(error) ? error.hint : undefined,\r\n cause: error,\r\n },\r\n options,\r\n runtimeOptions,\r\n )\r\n }\r\n\r\n delete headers['Content-Type']\r\n delete headers['content-type']\r\n if (isBlobBody(body) && body.type) {\r\n headers['Content-Type'] = body.type\r\n }\r\n\r\n const requestInit: RequestInit & { duplex?: 'half' } = {\r\n method: 'PUT',\r\n headers,\r\n body: body as RequestInit['body'],\r\n signal: options?.signal,\r\n }\r\n if (isReadableStreamBody(body)) {\r\n requestInit.duplex = 'half'\r\n }\r\n\r\n let response: Response\r\n try {\r\n response = await fetch(url, requestInit)\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : String(error)\r\n return rejectStorageError(\r\n {\r\n code: 'NETWORK_ERROR',\r\n message: `Network error while calling Athena storage PUT ${endpoint}: ${message}`,\r\n status: 0,\r\n endpoint,\r\n method: 'PUT',\r\n cause: error,\r\n },\r\n options,\r\n runtimeOptions,\r\n )\r\n }\r\n\r\n let rawText: string\r\n try {\r\n rawText = await response.text()\r\n } catch (error) {\r\n return rejectStorageError(\r\n {\r\n code: 'NETWORK_ERROR',\r\n message: `Athena storage PUT ${endpoint} response body could not be read`,\r\n status: response.status,\r\n endpoint,\r\n method: 'PUT',\r\n requestId: headerValue(response.headers, ['x-athena-request-id', 'x-request-id', 'request-id']),\r\n cause: error,\r\n },\r\n options,\r\n runtimeOptions,\r\n )\r\n }\r\n\r\n const parsedBody = parseResponseBody(rawText ?? '', response.headers.get('content-type'))\r\n const requestId = headerValue(response.headers, ['x-athena-request-id', 'x-request-id', 'request-id'])\r\n if (parsedBody.parseFailed) {\r\n return rejectStorageError(\r\n {\r\n code: 'INVALID_JSON',\r\n message: `Athena storage PUT ${endpoint} returned malformed JSON`,\r\n status: response.status,\r\n endpoint,\r\n method: 'PUT',\r\n requestId,\r\n raw: parsedBody.parsed,\r\n },\r\n options,\r\n runtimeOptions,\r\n )\r\n }\r\n if (!response.ok) {\r\n return rejectStorageError(\r\n {\r\n code: 'HTTP_ERROR',\r\n message: resolveErrorMessage(\r\n parsedBody.parsed,\r\n `Athena storage PUT ${endpoint} failed with status ${response.status}`,\r\n ),\r\n status: response.status,\r\n endpoint,\r\n method: 'PUT',\r\n requestId,\r\n hint: resolveErrorHint(parsedBody.parsed),\r\n cause: resolveErrorCause(parsedBody.parsed),\r\n raw: parsedBody.parsed,\r\n },\r\n options,\r\n runtimeOptions,\r\n )\r\n }\r\n if (!isRecord(parsedBody.parsed) || !('data' in parsedBody.parsed)) {\r\n return rejectStorageError(\r\n {\r\n code: 'INVALID_ATHENA_ENVELOPE',\r\n message: `Athena storage PUT ${endpoint} returned an invalid Athena envelope`,\r\n status: response.status,\r\n endpoint,\r\n method: 'PUT',\r\n requestId,\r\n raw: parsedBody.parsed,\r\n },\r\n options,\r\n runtimeOptions,\r\n )\r\n }\r\n return parsedBody.parsed.data as T\r\n}\r\n\r\nexport function createStorageModule(\r\n gateway: AthenaGatewayClient,\r\n runtimeOptions?: AthenaStorageClientConfig,\r\n): AthenaStorageModule {\r\n const resolvedRuntimeOptions = runtimeOptions as StorageModuleRuntimeOptions | undefined\r\n const callRaw = <T>(\r\n path: string,\r\n method: AthenaGatewayMethod,\r\n payload?: unknown,\r\n options?: AthenaStorageCallOptions,\r\n ) => callStorageEndpoint<T>(\r\n gateway,\r\n storagePath(path),\r\n method,\r\n 'raw',\r\n payload,\r\n options,\r\n resolvedRuntimeOptions,\r\n )\r\n const callAthena = <T>(\n path: string,\n method: AthenaGatewayMethod,\n payload?: unknown,\n options?: AthenaStorageCallOptions,\n ) => callStorageEndpoint<T>(\r\n gateway,\r\n storagePath(path),\r\n method,\r\n 'athena',\r\n payload,\r\n options,\n resolvedRuntimeOptions,\n )\n const callStorageFileVisibility = (\n fileId: string,\n method: Extract<AthenaGatewayMethod, 'PATCH' | 'POST'>,\n input: SetStorageFileVisibilityRequest,\n options?: AthenaStorageCallOptions,\n ) => callAthena<StorageFileMutationResponse>(\n withPathParam('/storage/files/{file_id}/visibility', 'file_id', fileId),\n method,\n input,\n options,\n )\n const base: AthenaStorageBaseModule = {\n listStorageCatalogs(options) {\r\n return callRaw('/storage/catalogs', 'GET', undefined, options)\r\n },\r\n createStorageCatalog(input, options) {\r\n return callRaw('/storage/catalogs', 'POST', input, options)\r\n },\r\n updateStorageCatalog(id, input, options) {\r\n return callRaw(withPathParam('/storage/catalogs/{id}', 'id', id), 'PATCH', input, options)\r\n },\r\n deleteStorageCatalog(id, options) {\r\n return callRaw(withPathParam('/storage/catalogs/{id}', 'id', id), 'DELETE', undefined, options)\r\n },\r\n listStorageCredentials(options) {\r\n return callRaw('/storage/credentials', 'GET', undefined, options)\r\n },\r\n createStorageUploadUrl(input, options) {\r\n return callAthena('/storage/files/upload-url', 'POST', input, options)\r\n },\r\n createStorageUploadUrls(input, options) {\r\n return callAthena('/storage/files/upload-urls', 'POST', input, options)\r\n },\r\n listStorageFiles(input, options) {\r\n return callAthena('/storage/files/list', 'POST', input, options)\r\n },\r\n getStorageFile(fileId, options) {\r\n return callAthena(withPathParam('/storage/files/{file_id}', 'file_id', fileId), 'GET', undefined, options)\r\n },\r\n getStorageFileUrl(fileId, query, options) {\r\n const path = appendQuery(\r\n withPathParam('/storage/files/{file_id}/url', 'file_id', fileId),\r\n query,\r\n )\r\n return callAthena(path, 'GET', undefined, options)\r\n },\r\n getStorageFileProxy(fileId, query, options) {\r\n const path = appendQuery(\r\n withPathParam('/storage/files/{file_id}/proxy', 'file_id', fileId),\r\n query,\r\n )\r\n return callStorageBinaryEndpoint(gateway, storagePath(path), 'GET', options, resolvedRuntimeOptions)\r\n },\r\n updateStorageFile(fileId, input, options) {\r\n return callAthena(withPathParam('/storage/files/{file_id}', 'file_id', fileId), 'PATCH', input, options)\r\n },\r\n deleteStorageFile(fileId, options) {\n return callAthena(withPathParam('/storage/files/{file_id}', 'file_id', fileId), 'DELETE', undefined, options)\n },\n setStorageFileVisibility(fileId, input, options) {\n return callStorageFileVisibility(fileId, 'PATCH', input, options)\n },\n deleteStorageFolder(input, options) {\n return callAthena('/storage/folders/delete', 'POST', input, options)\n },\n moveStorageFolder(input, options) {\r\n return callAthena('/storage/folders/move', 'POST', input, options)\r\n },\r\n }\r\n const fileFacade = createStorageFileModule(base, runtimeOptions)\r\n const fileUpload = ((\r\n input: AthenaStorageFileUploadRequest | Parameters<AthenaStorageFileModule['upload']>[0],\r\n options?: AthenaStorageCallOptions,\r\n ) => {\r\n if (isRecord(input) && 'files' in input) {\r\n return fileFacade.upload(input as unknown as Parameters<AthenaStorageFileModule['upload']>[0], options)\r\n }\r\n return base.createStorageUploadUrl(\r\n normalizeUploadUrlRequest(input as AthenaStorageFileUploadRequest),\r\n options,\r\n ).then(attachUploadHelper)\r\n }) as AthenaStorageFileNamespace['upload']\r\n const fileDelete = ((input: string | readonly string[], options?: AthenaStorageCallOptions) =>\r\n fileFacade.delete(input as unknown as Parameters<AthenaStorageFileModule['delete']>[0], options)\r\n ) as AthenaStorageFileNamespace['delete']\r\n\r\n const file: AthenaStorageFileNamespace = {\r\n ...fileFacade,\r\n upload: fileUpload,\r\n uploadMany(input, options) {\r\n return base.createStorageUploadUrls(\r\n { files: input.files.map(normalizeUploadUrlRequest) },\r\n options,\r\n ).then(attachUploadHelpers)\r\n },\r\n confirmUpload(fileId, input, options) {\r\n return callAthena(withPathParam('/storage/files/{file_id}/confirm-upload', 'file_id', fileId), 'POST', input ?? {}, options)\r\n },\r\n uploadBinary(fileId, body, options) {\r\n return callStorageUploadBinaryEndpoint(\r\n gateway,\r\n storagePath(withPathParam('/storage/files/{file_id}/upload', 'file_id', fileId)),\r\n body,\r\n options,\r\n resolvedRuntimeOptions,\r\n )\r\n },\r\n search(input, options) {\r\n return callAthena('/storage/files/search', 'POST', input, options)\r\n },\r\n get(fileId, options) {\r\n return base.getStorageFile(fileId, options)\r\n },\r\n update(fileId, input, options) {\r\n return base.updateStorageFile(fileId, input, options)\r\n },\r\n delete: fileDelete,\r\n deleteMany(input, options) {\r\n return callAthena('/storage/files/delete-many', 'POST', input, options)\r\n },\r\n updateMany(input, options) {\r\n return callAthena('/storage/files/update-many', 'POST', input, options)\r\n },\r\n restore(fileId, options) {\r\n return callAthena(withPathParam('/storage/files/{file_id}/restore', 'file_id', fileId), 'POST', {}, options)\r\n },\r\n purge(fileId, options) {\r\n return callAthena(withPathParam('/storage/files/{file_id}/purge', 'file_id', fileId), 'DELETE', undefined, options)\r\n },\r\n copy(fileId, input, options) {\r\n return callAthena(withPathParam('/storage/files/{file_id}/copy', 'file_id', fileId), 'POST', input, options)\r\n },\r\n url(fileId, query, options) {\r\n return base.getStorageFileUrl(fileId, query, options)\r\n },\r\n publicUrl(fileId, options) {\n return callAthena(withPathParam('/storage/files/{file_id}/public-url', 'file_id', fileId), 'GET', undefined, options)\n },\n proxyUrl(fileId, query, options) {\n const path = appendQuery(\n withPathParam('/storage/files/{file_id}/proxy-url', 'file_id', fileId),\n query,\n )\n return callAthena(path, 'GET', undefined, options)\n },\n proxy(fileId, query, options) {\n return base.getStorageFileProxy(fileId, query, options)\n },\n versions(fileId, options) {\n return callAthena(withPathParam('/storage/files/{file_id}/versions', 'file_id', fileId), 'GET', undefined, options)\n },\n restoreVersion(fileId, versionId, options) {\n return callAthena(\n withPathParam(\n withPathParam('/storage/files/{file_id}/versions/{version_id}/restore', 'file_id', fileId),\n 'version_id',\n versionId,\n ),\n 'POST',\n {},\n options,\n )\n },\n deleteVersion(fileId, versionId, options) {\n return callAthena(\n withPathParam(\n withPathParam('/storage/files/{file_id}/versions/{version_id}', 'file_id', fileId),\n 'version_id',\n versionId,\n ),\n 'DELETE',\n undefined,\n options,\n )\n },\n retention: {\n get(fileId, query, options) {\n const path = appendQuery(\n withPathParam('/storage/files/{file_id}/retention', 'file_id', fileId),\n query,\n )\n return callAthena(path, 'GET', undefined, options)\n },\n set(fileId, input, options) {\n return callAthena(withPathParam('/storage/files/{file_id}/retention', 'file_id', fileId), 'POST', input, options)\n },\n },\n visibility: {\n update(fileId, input, options) {\n return base.setStorageFileVisibility(fileId, input, options)\n },\n set(fileId, input, options) {\n return callStorageFileVisibility(fileId, 'POST', input, options)\n },\n setMany(input, options) {\n return callAthena('/storage/files/visibility-many', 'POST', input, options)\n },\n },\r\n }\r\n const credentials: AthenaStorageCredentialsNamespace = {\r\n list(options) {\r\n return base.listStorageCredentials(options)\r\n },\r\n }\r\n const catalog: AthenaStorageCatalogNamespace = {\r\n list(options) {\r\n return base.listStorageCatalogs(options)\r\n },\r\n create(input, options) {\r\n return base.createStorageCatalog(input, options)\r\n },\r\n update(id, input, options) {\r\n return base.updateStorageCatalog(id, input, options)\r\n },\r\n delete(id, options) {\r\n return base.deleteStorageCatalog(id, options)\r\n },\r\n }\r\n const folder: AthenaStorageFolderNamespace = {\r\n list(input, options) {\r\n return callAthena('/storage/folders/list', 'POST', input, options)\r\n },\r\n tree(input, options) {\r\n return callAthena('/storage/folders/tree', 'POST', input, options)\r\n },\r\n delete(input, options) {\r\n return base.deleteStorageFolder(input, options)\r\n },\r\n move(input, options) {\r\n return base.moveStorageFolder(input, options)\r\n },\r\n }\r\n const permission: AthenaStoragePermissionNamespace = {\r\n list(input, options) {\r\n return callAthena('/storage/permissions/list', 'POST', input, options)\r\n },\r\n grant(input, options) {\r\n return callAthena('/storage/permissions/grant', 'POST', input, options)\r\n },\r\n revoke(input, options) {\r\n return callAthena('/storage/permissions/revoke', 'POST', input, options)\r\n },\r\n check(input, options) {\r\n return callAthena('/storage/permissions/check', 'POST', input, options)\r\n },\r\n }\r\n const objectFolder: AthenaStorageObjectFolderNamespace = {\r\n create(input, options) {\r\n return callAthena('/storage/objects/folder', 'POST', input, options)\r\n },\r\n delete(input, options) {\r\n return callAthena('/storage/objects/folder/delete', 'POST', input, options)\r\n },\r\n rename(input, options) {\r\n return callAthena('/storage/objects/folder/rename', 'POST', input, options)\r\n },\r\n }\r\n const object: AthenaStorageObjectNamespace = {\r\n list(input, options) {\r\n return callAthena('/storage/objects', 'POST', input, options)\r\n },\r\n head(input, options) {\r\n return callAthena('/storage/objects/head', 'POST', input, options)\r\n },\r\n exists(input, options) {\r\n return callAthena('/storage/objects/exists', 'POST', input, options)\r\n },\r\n validate(input, options) {\r\n return callAthena('/storage/objects/validate', 'POST', input, options)\r\n },\r\n update(input, options) {\r\n return callAthena('/storage/objects/update', 'POST', input, options)\r\n },\r\n copy(input, options) {\r\n return callAthena('/storage/objects/copy', 'POST', input, options)\r\n },\r\n url(input, options) {\r\n return callAthena('/storage/objects/url', 'POST', input, options)\r\n },\r\n publicUrl(input, options) {\r\n return callAthena('/storage/objects/public-url', 'POST', input, options)\r\n },\r\n delete(input, options) {\r\n return callAthena('/storage/objects/delete', 'POST', input, options)\r\n },\r\n uploadUrl(input, options) {\n return callAthena('/storage/objects/upload-url', 'POST', input, options)\n },\n versions(input, options) {\n return callAthena('/storage/objects/versions', 'POST', input, options)\n },\n restoreVersion(input, options) {\n return callAthena('/storage/objects/versions/restore', 'POST', input, options)\n },\n deleteVersion(input, options) {\n return callAthena('/storage/objects/versions/delete', 'POST', input, options)\n },\n postPolicy(input, options) {\n return callAthena('/storage/objects/post-policy', 'POST', input, options)\n },\n folder: objectFolder,\n }\n const bucket: AthenaStorageBucketNamespace = {\r\n list(input, options) {\r\n return callAthena('/storage/buckets/list', 'POST', input, options)\r\n },\r\n create(input, options) {\r\n return callAthena('/storage/buckets/create', 'POST', input, options)\r\n },\r\n delete(input, options) {\n return callAthena('/storage/buckets/delete', 'POST', input, options)\n },\n lifecycle: {\n get(input, options) {\n return callAthena('/storage/buckets/lifecycle', 'POST', input, options)\n },\n set(input, options) {\n return callAthena('/storage/buckets/lifecycle/set', 'POST', input, options)\n },\n delete(input, options) {\n return callAthena('/storage/buckets/lifecycle/delete', 'POST', input, options)\n },\n },\n policy: {\n get(input, options) {\n return callAthena('/storage/buckets/policy', 'POST', input, options)\n },\n set(input, options) {\n return callAthena('/storage/buckets/policy/set', 'POST', input, options)\n },\n delete(input, options) {\n return callAthena('/storage/buckets/policy/delete', 'POST', input, options)\n },\n },\n publicAccess: {\n get(input, options) {\n return callAthena('/storage/buckets/public-access', 'POST', input, options)\n },\n set(input, options) {\n return callAthena('/storage/buckets/public-access/set', 'POST', input, options)\n },\n delete(input, options) {\n return callAthena('/storage/buckets/public-access/delete', 'POST', input, options)\n },\n },\n cors: {\n get(input, options) {\r\n return callAthena('/storage/buckets/cors', 'POST', input, options)\r\n },\r\n set(input, options) {\r\n return callAthena('/storage/buckets/cors/set', 'POST', input, options)\r\n },\r\n delete(input, options) {\r\n return callAthena('/storage/buckets/cors/delete', 'POST', input, options)\r\n },\r\n },\r\n }\r\n const multipart: AthenaStorageMultipartNamespace = {\r\n create(input, options) {\r\n return callAthena('/storage/multipart/create', 'POST', input, options)\r\n },\r\n signPart(input, options) {\r\n return callAthena('/storage/multipart/sign-part', 'POST', input, options)\r\n },\r\n complete(input, options) {\r\n return callAthena('/storage/multipart/complete', 'POST', input, options)\r\n },\r\n abort(input, options) {\r\n return callAthena('/storage/multipart/abort', 'POST', input, options)\r\n },\r\n listParts(input, options) {\r\n return callAthena('/storage/multipart/list-parts', 'POST', input, options)\r\n },\r\n }\r\n const audit: AthenaStorageAuditNamespace = {\r\n list(input, options) {\r\n return callAthena('/storage/audit/list', 'POST', input, options)\r\n },\r\n }\r\n return {\r\n ...base,\r\n credentials,\r\n catalog,\r\n file,\r\n folder,\r\n permission,\r\n object,\r\n bucket,\r\n multipart,\r\n audit,\r\n delete: file.delete,\r\n }\r\n}\r\n","import { buildSdkHeaderValue } from '../sdk-version.ts'\nimport type {\n AthenaChatAddMembersRequest,\n AthenaChatAddReactionRequest,\n AthenaChatCallOptions,\n AthenaChatConnectOptions,\n AthenaChatCreateRoomRequest,\n AthenaChatDeleteResult,\n AthenaChatEditMessageRequest,\n AthenaChatMarkReadUpToRequest,\n AthenaChatMember,\n AthenaChatMessage,\n AthenaChatMessageCreatedResponse,\n AthenaChatMessagePage,\n AthenaChatModule,\n AthenaChatReactionSummary,\n AthenaChatReadCursor,\n AthenaChatRealtimeConnection,\n AthenaChatRealtimeInfoResponse,\n AthenaChatRealtimeModule,\n AthenaChatRemoveResult,\n AthenaChatResumeRoomCursor,\n AthenaChatRoom,\n AthenaChatRoomCreatedResponse,\n AthenaChatRoomPage,\n AthenaChatSearchMessagesRequest,\n AthenaChatSearchPage,\n AthenaChatSendMessageRequest,\n AthenaChatUpdateRoomRequest,\n AthenaChatWebSocketFactory,\n AthenaChatWebSocketLike,\n AthenaChatWsClientCommand,\n AthenaChatWsServerEvent,\n AthenaChatListMessagesQuery,\n AthenaChatListRoomsQuery,\n} from './types.ts'\n\nconst SDK_NAME = 'xylex-group/athena-chat'\nconst SDK_HEADER_VALUE = buildSdkHeaderValue(SDK_NAME)\nconst NO_CACHE_HEADER_VALUE = 'no-cache'\n\nexport class AthenaChatError extends Error {\n status: number\n endpoint: string\n method: string\n requestId?: string\n body: unknown\n\n constructor(input: {\n message: string\n status: number\n endpoint: string\n method: string\n requestId?: string\n body: unknown\n }) {\n super(input.message)\n this.name = 'AthenaChatError'\n this.status = input.status\n this.endpoint = input.endpoint\n this.method = input.method\n this.requestId = input.requestId\n this.body = input.body\n }\n}\n\nexport interface AthenaChatClientConfig {\n baseUrl?: string\n realtimeInfoUrl?: string\n apiKey: string\n client?: string\n headers?: Record<string, string>\n bearerToken?: string\n cookie?: string\n sessionToken?: string\n forceNoCache?: boolean\n wsUrl?: string\n webSocketFactory?: AthenaChatWebSocketFactory\n}\n\nfunction deriveRealtimeInfoUrl(wsUrl?: string): string | undefined {\n if (!wsUrl) {\n return undefined\n }\n\n const parsed = new URL(normalizeWsUrl(wsUrl, 'Athena chat WebSocket URL'))\n parsed.protocol = parsed.protocol === 'wss:' ? 'https:' : 'http:'\n parsed.pathname = parsed.pathname.replace(/\\/wss\\/gateway$/, '/wss/info')\n return parsed.toString()\n}\n\nfunction normalizeWsUrl(value: string, label: string): string {\n const normalized = value.trim()\n if (!normalized) {\n throw new Error(`${label} is required.`)\n }\n\n let parsed: URL\n try {\n parsed = new URL(normalized)\n } catch {\n throw new Error(`${label} must be a valid absolute ws(s) URL.`)\n }\n\n if (parsed.protocol !== 'ws:' && parsed.protocol !== 'wss:') {\n throw new Error(`${label} must use ws or wss.`)\n }\n\n parsed.pathname = parsed.pathname.replace(/\\/+$/, '')\n return parsed.toString().replace(/\\/$/, '')\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction normalizeHeaderValue(value?: string | null): string | undefined {\n return value ? value : undefined\n}\n\nfunction parseResponseBody(rawText: string, contentType: string | null) {\n if (!rawText) {\n return { parsed: null as unknown, parseFailed: false }\n }\n\n const contentTypeSuggestsJson =\n contentType?.toLowerCase().includes('application/json') ?? false\n const looksJson =\n contentTypeSuggestsJson || rawText.startsWith('{') || rawText.startsWith('[')\n\n if (!looksJson) {\n return { parsed: rawText as unknown, parseFailed: false }\n }\n\n try {\n return { parsed: JSON.parse(rawText) as unknown, parseFailed: false }\n } catch {\n return { parsed: rawText as unknown, parseFailed: true }\n }\n}\n\nfunction resolveRequestId(headers: Headers): string | undefined {\n return (\n headers.get('x-request-id') ??\n headers.get('x-correlation-id') ??\n headers.get('x-athena-request-id') ??\n undefined\n )\n}\n\nfunction resolveErrorMessage(payload: unknown, fallback: string): string {\n if (isRecord(payload)) {\n for (const candidate of [payload.error, payload.message, payload.details]) {\n if (typeof candidate === 'string' && candidate.trim().length > 0) {\n return candidate.trim()\n }\n }\n }\n\n if (typeof payload === 'string' && payload.trim().length > 0) {\n return payload.trim()\n }\n\n return fallback\n}\n\nfunction encodePathSegment(value: string, label: string): string {\n const normalized = value.trim()\n if (!normalized) {\n throw new Error(`${label} is required.`)\n }\n return encodeURIComponent(normalized)\n}\n\nfunction encodeQuery(query?: Record<string, unknown>): string {\n if (!query) {\n return ''\n }\n\n const params = new URLSearchParams()\n for (const [key, value] of Object.entries(query)) {\n if (value === undefined || value === null) {\n continue\n }\n if (Array.isArray(value)) {\n for (const item of value) {\n if (item !== undefined && item !== null) {\n params.append(key, String(item))\n }\n }\n continue\n }\n params.set(key, String(value))\n }\n\n const encoded = params.toString()\n return encoded ? `?${encoded}` : ''\n}\n\nfunction createSocket(\n factory: AthenaChatWebSocketFactory,\n url: string,\n protocols?: string | string[],\n): AthenaChatWebSocketLike {\n try {\n return new (factory as new (\n socketUrl: string,\n socketProtocols?: string | string[],\n ) => AthenaChatWebSocketLike)(url, protocols)\n } catch (error) {\n if (error instanceof TypeError) {\n return (factory as (\n socketUrl: string,\n socketProtocols?: string | string[],\n ) => AthenaChatWebSocketLike)(url, protocols)\n }\n throw error\n }\n}\n\nfunction buildHeaders(\n config: AthenaChatClientConfig,\n options?: AthenaChatCallOptions,\n): Record<string, string> {\n const headers: Record<string, string> = {\n Accept: 'application/json',\n apikey: config.apiKey,\n 'x-api-key': config.apiKey,\n 'X-Athena-Sdk': SDK_HEADER_VALUE,\n }\n\n if (config.client || options?.client) {\n headers['X-Athena-Client'] = options?.client ?? config.client ?? ''\n }\n\n const bearerToken = options?.bearerToken ?? config.bearerToken\n if (typeof bearerToken === 'string' && bearerToken.trim()) {\n headers.Authorization = bearerToken.startsWith('Bearer ')\n ? bearerToken\n : `Bearer ${bearerToken}`\n }\n\n const cookie = options?.cookie ?? config.cookie\n if (typeof cookie === 'string' && cookie.trim()) {\n headers.Cookie = cookie\n }\n\n const sessionToken = options?.sessionToken ?? config.sessionToken\n if (typeof sessionToken === 'string' && sessionToken.trim()) {\n headers['X-Athena-Auth-Session-Token'] = sessionToken\n }\n\n if (config.forceNoCache || options?.forceNoCache) {\n headers['Cache-Control'] = NO_CACHE_HEADER_VALUE\n }\n\n for (const source of [config.headers, options?.headers]) {\n for (const [key, value] of Object.entries(source ?? {})) {\n const normalized = normalizeHeaderValue(value)\n if (normalized) {\n headers[key] = normalized\n }\n }\n }\n\n return headers\n}\n\nfunction withJsonBody(init: RequestInit, body: unknown): RequestInit {\n return {\n ...init,\n body: body === undefined ? undefined : JSON.stringify(body),\n headers: {\n 'Content-Type': 'application/json',\n ...(init.headers as Record<string, string>),\n },\n }\n}\n\nasync function request<T>(\n config: AthenaChatClientConfig,\n method: string,\n endpoint: string,\n options?: AthenaChatCallOptions,\n body?: unknown,\n): Promise<T> {\n if (!config.baseUrl) {\n throw new Error(\n 'Athena chat base URL is not configured. Pass createClient({ url }) for unified routing or set chat.url / chatUrl explicitly.',\n )\n }\n const url = `${config.baseUrl}${endpoint}`\n const init: RequestInit = {\n method,\n headers: buildHeaders(config, options),\n signal: options?.signal,\n }\n const finalInit =\n body === undefined || method === 'GET'\n ? init\n : withJsonBody(init, body)\n\n const response = await fetch(url, finalInit)\n const rawText = await response.text()\n const { parsed } = parseResponseBody(rawText, response.headers.get('content-type'))\n\n if (!response.ok) {\n throw new AthenaChatError({\n message: resolveErrorMessage(parsed, `Athena chat ${method} ${endpoint} failed with ${response.status}`),\n status: response.status,\n endpoint,\n method,\n requestId: resolveRequestId(response.headers),\n body: parsed,\n })\n }\n\n return parsed as T\n}\n\nfunction unwrapEnvelopeData<T extends { data: unknown }>(payload: T): T['data'] {\n return payload.data\n}\n\nfunction createRealtimeConnection(\n config: AthenaChatClientConfig,\n options?: AthenaChatConnectOptions,\n): AthenaChatRealtimeConnection {\n if (!config.wsUrl) {\n throw new Error(\n 'Athena chat WebSocket URL is not configured. Pass createClient({ url }) for unified routing or set chat.wsUrl / chatWsUrl explicitly.',\n )\n }\n\n const wsFactory =\n config.webSocketFactory ??\n ((globalThis as unknown as { WebSocket?: AthenaChatWebSocketFactory }).WebSocket)\n\n if (!wsFactory) {\n throw new Error(\n 'No WebSocket implementation is available. Provide chat.webSocketFactory in createClient(...) or run in a runtime with global WebSocket support.',\n )\n }\n\n const socket = createSocket(wsFactory, config.wsUrl, options?.protocols)\n\n const send = (command: AthenaChatWsClientCommand) => {\n socket.send(JSON.stringify(command))\n }\n\n if (options?.onMessage) {\n const listener = (event: unknown) => {\n const messageEvent = event as { data?: unknown }\n const raw = messageEvent?.data\n if (typeof raw !== 'string') {\n return\n }\n try {\n options.onMessage?.(JSON.parse(raw) as AthenaChatWsServerEvent | Record<string, unknown>)\n } catch {\n options.onMessage?.({ type: 'error', error: 'Invalid JSON message from Athena chat realtime gateway.' })\n }\n }\n\n if (typeof socket.addEventListener === 'function') {\n socket.addEventListener('message', listener)\n } else {\n socket.onmessage = listener as AthenaChatWebSocketLike['onmessage']\n }\n }\n\n const hello = (command?: { token?: string | null; room_subscriptions?: string[] | null }) => {\n send({\n type: 'auth.hello',\n token: command?.token,\n room_subscriptions: command?.room_subscriptions,\n })\n }\n\n if (options?.hello) {\n const onOpen = () => hello({\n token: options.hello?.token ?? undefined,\n room_subscriptions: options.hello?.room_subscriptions ?? undefined,\n })\n if (typeof socket.addEventListener === 'function') {\n socket.addEventListener('open', onOpen)\n } else {\n socket.onopen = onOpen\n }\n }\n\n return {\n socket,\n send,\n hello,\n subscribe(roomId, fromSeq) {\n send({\n type: 'chat.subscribe',\n room_id: roomId,\n from_seq: fromSeq ?? undefined,\n })\n },\n unsubscribe(roomId) {\n send({\n type: 'chat.unsubscribe',\n room_id: roomId,\n })\n },\n resume(rooms: AthenaChatResumeRoomCursor[]) {\n send({\n type: 'chat.resume',\n rooms,\n })\n },\n typingStart(roomId) {\n send({\n type: 'chat.typing.start',\n room_id: roomId,\n })\n },\n typingStop(roomId) {\n send({\n type: 'chat.typing.stop',\n room_id: roomId,\n })\n },\n presenceHeartbeat(activeRoomId) {\n send({\n type: 'chat.presence.heartbeat',\n active_room_id: activeRoomId ?? undefined,\n })\n },\n readUpTo(roomId, input) {\n send({\n type: 'chat.read.up_to',\n room_id: roomId,\n message_id: input?.message_id ?? undefined,\n seq: input?.seq ?? undefined,\n })\n },\n ping(at = new Date().toISOString()) {\n send({\n type: 'ping',\n at,\n })\n },\n close(code, reason) {\n socket.close(code, reason)\n },\n }\n}\n\nexport function createChatModule(config: AthenaChatClientConfig): AthenaChatModule {\n const realtime: AthenaChatRealtimeModule = {\n info(options) {\n const realtimeInfoUrl = config.realtimeInfoUrl ?? deriveRealtimeInfoUrl(config.wsUrl)\n if (!realtimeInfoUrl) {\n throw new Error(\n 'Athena chat realtime info URL is not configured. Pass createClient({ url }) for unified routing or set chat.wsUrl / chatWsUrl explicitly.',\n )\n }\n\n return request<AthenaChatRealtimeInfoResponse>(\n {\n ...config,\n baseUrl: realtimeInfoUrl,\n },\n 'GET',\n '',\n options,\n )\n },\n connect(options) {\n return createRealtimeConnection(config, options)\n },\n }\n\n return {\n room: {\n list(query?: AthenaChatListRoomsQuery, options?: AthenaChatCallOptions) {\n return request<AthenaChatRoomPage>(\n config,\n 'GET',\n `/rooms${encodeQuery(query as Record<string, unknown> | undefined)}`,\n options,\n )\n },\n create(input: AthenaChatCreateRoomRequest, options?: AthenaChatCallOptions) {\n return request<AthenaChatRoomCreatedResponse>(config, 'POST', '/rooms', options, input)\n },\n get(roomId: string, options?: AthenaChatCallOptions) {\n return request<AthenaChatRoom>(\n config,\n 'GET',\n `/rooms/${encodePathSegment(roomId, 'chat room ID')}`,\n options,\n )\n },\n update(roomId: string, input: AthenaChatUpdateRoomRequest, options?: AthenaChatCallOptions) {\n return request<AthenaChatRoom>(\n config,\n 'PATCH',\n `/rooms/${encodePathSegment(roomId, 'chat room ID')}`,\n options,\n input,\n )\n },\n archive(roomId: string, options?: AthenaChatCallOptions) {\n return request<AthenaChatRoom>(\n config,\n 'POST',\n `/rooms/${encodePathSegment(roomId, 'chat room ID')}/archive`,\n options,\n )\n },\n readCursor: {\n upTo(roomId: string, input?: AthenaChatMarkReadUpToRequest, options?: AthenaChatCallOptions) {\n return request<AthenaChatReadCursor>(\n config,\n 'POST',\n `/rooms/${encodePathSegment(roomId, 'chat room ID')}/read-cursor`,\n options,\n input ?? {},\n )\n },\n },\n member: {\n list(roomId: string, options?: AthenaChatCallOptions) {\n return request<AthenaChatMember[]>(\n config,\n 'GET',\n `/rooms/${encodePathSegment(roomId, 'chat room ID')}/members`,\n options,\n )\n },\n add(roomId: string, input: AthenaChatAddMembersRequest, options?: AthenaChatCallOptions) {\n return request<AthenaChatMember[]>(\n config,\n 'POST',\n `/rooms/${encodePathSegment(roomId, 'chat room ID')}/members`,\n options,\n input,\n )\n },\n remove(roomId: string, userId: string, options?: AthenaChatCallOptions) {\n return request<AthenaChatRemoveResult>(\n config,\n 'DELETE',\n `/rooms/${encodePathSegment(roomId, 'chat room ID')}/members/${encodePathSegment(userId, 'chat user ID')}`,\n options,\n )\n },\n },\n message: {\n list(roomId: string, query?: AthenaChatListMessagesQuery, options?: AthenaChatCallOptions) {\n return request<AthenaChatMessagePage>(\n config,\n 'GET',\n `/rooms/${encodePathSegment(roomId, 'chat room ID')}/messages${encodeQuery(query as Record<string, unknown> | undefined)}`,\n options,\n )\n },\n send(roomId: string, input: AthenaChatSendMessageRequest, options?: AthenaChatCallOptions) {\n return request<AthenaChatMessageCreatedResponse>(\n config,\n 'POST',\n `/rooms/${encodePathSegment(roomId, 'chat room ID')}/messages`,\n options,\n input,\n )\n },\n update(roomId: string, messageId: string, input: AthenaChatEditMessageRequest, options?: AthenaChatCallOptions) {\n return request<AthenaChatMessage>(\n config,\n 'PATCH',\n `/rooms/${encodePathSegment(roomId, 'chat room ID')}/messages/${encodePathSegment(messageId, 'chat message ID')}`,\n options,\n input,\n )\n },\n delete(roomId: string, messageId: string, options?: AthenaChatCallOptions) {\n return request<AthenaChatDeleteResult>(\n config,\n 'DELETE',\n `/rooms/${encodePathSegment(roomId, 'chat room ID')}/messages/${encodePathSegment(messageId, 'chat message ID')}`,\n options,\n )\n },\n },\n },\n message: {\n reaction: {\n add(messageId: string, input: AthenaChatAddReactionRequest, options?: AthenaChatCallOptions) {\n return request<AthenaChatReactionSummary>(\n config,\n 'POST',\n `/messages/${encodePathSegment(messageId, 'chat message ID')}/reactions`,\n options,\n input,\n )\n },\n remove(messageId: string, emoji: string, options?: AthenaChatCallOptions) {\n return request<AthenaChatReactionSummary>(\n config,\n 'DELETE',\n `/messages/${encodePathSegment(messageId, 'chat message ID')}/reactions/${encodePathSegment(emoji, 'reaction emoji')}`,\n options,\n )\n },\n },\n search(input: AthenaChatSearchMessagesRequest, options?: AthenaChatCallOptions) {\n return request<AthenaChatSearchPage>(\n config,\n 'POST',\n '/messages/search',\n options,\n input,\n )\n },\n },\n realtime,\n }\n}\n\nexport const chatSdkManifest = {\n namespace: 'chat',\n basePath: '/chat',\n methods: [\n { name: 'listRooms', method: 'GET', path: '/chat/rooms' },\n { name: 'createRoom', method: 'POST', path: '/chat/rooms' },\n { name: 'getRoom', method: 'GET', path: '/chat/rooms/{room_id}' },\n { name: 'updateRoom', method: 'PATCH', path: '/chat/rooms/{room_id}' },\n { name: 'archiveRoom', method: 'POST', path: '/chat/rooms/{room_id}/archive' },\n { name: 'listRoomMessages', method: 'GET', path: '/chat/rooms/{room_id}/messages' },\n { name: 'sendRoomMessage', method: 'POST', path: '/chat/rooms/{room_id}/messages' },\n { name: 'updateRoomMessage', method: 'PATCH', path: '/chat/rooms/{room_id}/messages/{message_id}' },\n { name: 'deleteRoomMessage', method: 'DELETE', path: '/chat/rooms/{room_id}/messages/{message_id}' },\n { name: 'advanceReadCursor', method: 'POST', path: '/chat/rooms/{room_id}/read-cursor' },\n { name: 'listRoomMembers', method: 'GET', path: '/chat/rooms/{room_id}/members' },\n { name: 'addRoomMembers', method: 'POST', path: '/chat/rooms/{room_id}/members' },\n { name: 'removeRoomMember', method: 'DELETE', path: '/chat/rooms/{room_id}/members/{user_id}' },\n { name: 'addReaction', method: 'POST', path: '/chat/messages/{message_id}/reactions' },\n { name: 'removeReaction', method: 'DELETE', path: '/chat/messages/{message_id}/reactions/{emoji}' },\n { name: 'searchMessages', method: 'POST', path: '/chat/messages/search' },\n { name: 'getRealtimeInfo', method: 'GET', path: '/wss/info' },\n { name: 'connectRealtime', method: 'GET', path: '/wss/gateway' },\n ],\n} as const\n\nexport function unwrapChatRoom(payload: AthenaChatRoomCreatedResponse): AthenaChatRoom {\n return unwrapEnvelopeData(payload) as AthenaChatRoom\n}\n\nexport function unwrapChatMessage(payload: AthenaChatMessageCreatedResponse): AthenaChatMessage {\n return unwrapEnvelopeData(payload) as AthenaChatMessage\n}\n","import type { BackendConfig, BackendType } from './gateway/types.ts'\r\nimport type {\r\n AthenaClientBuilder,\r\n AthenaCreateClientAuthOptions,\r\n AthenaCreateClientConfig,\r\n AthenaClientExperimentalOptions,\r\n AthenaCreateClientOptions,\r\n AthenaCreateClientOptionsWithStorage,\r\n AthenaCreateClientOptionsWithStorageAndTypecheckedColumns,\r\n AthenaCreateClientOptionsWithTypecheckedColumns,\r\n AthenaSdkClientWithAuth,\r\n} from './client.ts'\r\n\r\nconst DEFAULT_BACKEND: BackendConfig = { type: 'athena' }\r\n\r\nexport function toBackendConfig(value: BackendConfig | BackendType | undefined): BackendConfig {\r\n if (!value) return DEFAULT_BACKEND\r\n return typeof value === 'string' ? { type: value } : value\r\n}\r\n\r\nfunction mergeHeaders(\r\n current: Record<string, string> | undefined,\r\n next: Record<string, string>,\r\n): Record<string, string> {\r\n return {\r\n ...(current ?? {}),\r\n ...next,\r\n }\r\n}\r\n\r\nfunction mergeAuthClientConfig(\r\n current: AthenaCreateClientAuthOptions | undefined,\r\n next: AthenaCreateClientAuthOptions,\r\n): AthenaCreateClientAuthOptions {\r\n const merged: AthenaCreateClientAuthOptions = {\r\n ...(current ?? {}),\r\n ...next,\r\n }\r\n if (current?.headers || next.headers) {\r\n merged.headers = mergeHeaders(current?.headers, next.headers ?? {})\r\n }\r\n return merged\r\n}\r\n\r\nfunction mergeExperimentalOptions(\r\n current: AthenaClientExperimentalOptions | undefined,\r\n next: AthenaClientExperimentalOptions,\r\n): AthenaClientExperimentalOptions {\r\n const merged: AthenaClientExperimentalOptions = {\r\n ...(current ?? {}),\r\n ...next,\r\n }\r\n if (\r\n current?.traceQueries &&\r\n typeof current.traceQueries === 'object' &&\r\n next.traceQueries &&\r\n typeof next.traceQueries === 'object'\r\n ) {\r\n merged.traceQueries = {\r\n ...current.traceQueries,\r\n ...next.traceQueries,\r\n }\r\n }\r\n if (current?.storage || next.storage) {\r\n merged.storage = {\r\n ...(current?.storage ?? {}),\r\n ...(next.storage ?? {}),\r\n }\r\n }\r\n return merged\r\n}\r\n\r\nfunction resolveBuilderReturn<\r\n TStorageEnabled extends boolean,\r\n TStrict extends boolean,\r\n>(\r\n builder: AthenaClientBuilder<false, false>,\r\n storageEnabled: TStorageEnabled,\r\n strictEnabled: TStrict,\r\n): AthenaClientBuilder<TStorageEnabled, TStrict> {\r\n void storageEnabled\r\n void strictEnabled\r\n return builder as unknown as AthenaClientBuilder<TStorageEnabled, TStrict>\r\n}\r\n\r\nclass AthenaClientBuilderImpl implements AthenaClientBuilder<false, false> {\n private rootUrl?: string | null\n private apiKey?: string | null\n private backendConfig: BackendConfig = DEFAULT_BACKEND\n private clientName?: string | null\n private defaultUserId?: string | null\n private defaultOrganizationId?: string | null\n private forceNoCacheEnabled = false\n private defaultHeaders?: Record<string, string>\n private authConfig?: AthenaCreateClientAuthOptions\n private dbUrlOverride?: string\r\n private gatewayUrlOverride?: string\r\n private authUrlOverride?: string\r\n private storageUrlOverride?: string\r\n private experimentalOptions?: AthenaClientExperimentalOptions\r\n\r\n constructor(\r\n private readonly buildClient: (config: AthenaCreateClientConfig) => AthenaSdkClientWithAuth<false>,\r\n ) {}\r\n\r\n url(url: string | null | undefined): AthenaClientBuilder<false, false> {\n this.rootUrl = url\n return this\n }\n\n key(apiKey: string | null | undefined): AthenaClientBuilder<false, false> {\n this.apiKey = apiKey\n return this\n }\n\r\n backend(backend: BackendConfig | BackendType): AthenaClientBuilder<false, false> {\r\n this.backendConfig = toBackendConfig(backend)\r\n return this\r\n }\r\n\r\n client(clientName: string | null | undefined): AthenaClientBuilder<false, false> {\n this.clientName = clientName\n return this\n }\n\r\n headers(headers: Record<string, string>): AthenaClientBuilder<false, false> {\r\n this.defaultHeaders = headers\r\n return this\r\n }\r\n\r\n auth(config: AthenaCreateClientAuthOptions): AthenaClientBuilder<false, false> {\r\n this.authConfig = mergeAuthClientConfig(this.authConfig, config)\r\n return this\r\n }\r\n\r\n experimental(\r\n options: AthenaClientExperimentalOptions & { athenaStorageBackend: true; typecheckColumns: true },\r\n ): AthenaClientBuilder<true, true>\r\n experimental(options: AthenaClientExperimentalOptions & { athenaStorageBackend: true }): AthenaClientBuilder<true, false>\r\n experimental(options: AthenaClientExperimentalOptions & { typecheckColumns: true }): AthenaClientBuilder<false, true>\r\n experimental(options: AthenaClientExperimentalOptions): AthenaClientBuilder<false, false>\r\n experimental(\r\n options: AthenaClientExperimentalOptions,\r\n ): AthenaClientBuilder<false, false> | AthenaClientBuilder<true, false> | AthenaClientBuilder<true, true> | AthenaClientBuilder<false, true> {\r\n this.experimentalOptions = mergeExperimentalOptions(this.experimentalOptions, options)\r\n if (options.athenaStorageBackend && options.typecheckColumns) {\r\n return resolveBuilderReturn(this, true, true)\r\n }\r\n if (options.athenaStorageBackend) {\r\n return resolveBuilderReturn(this, true, false)\r\n }\r\n if (options.typecheckColumns) {\r\n return resolveBuilderReturn(this, false, true)\r\n }\r\n return this\r\n }\r\n\r\n options(options: AthenaCreateClientOptionsWithStorageAndTypecheckedColumns): AthenaClientBuilder<true, true>\r\n options(options: AthenaCreateClientOptionsWithStorage): AthenaClientBuilder<true, false>\r\n options(options: AthenaCreateClientOptionsWithTypecheckedColumns): AthenaClientBuilder<false, true>\r\n options(options: AthenaCreateClientOptions): AthenaClientBuilder<false, false>\r\n options(\r\n options: AthenaCreateClientOptions,\r\n ): AthenaClientBuilder<false, false> | AthenaClientBuilder<true, false> | AthenaClientBuilder<true, true> | AthenaClientBuilder<false, true> {\r\n if (options.client !== undefined) {\n this.clientName = options.client\n }\n if (options.userId !== undefined) {\n this.defaultUserId = options.userId\n }\n if (options.organizationId !== undefined) {\n this.defaultOrganizationId = options.organizationId\n }\n if (options.forceNoCache !== undefined) {\n this.forceNoCacheEnabled = options.forceNoCache\n }\n if (options.backend !== undefined) {\n this.backendConfig = toBackendConfig(options.backend)\n }\n if (options.headers !== undefined) {\r\n this.defaultHeaders = mergeHeaders(this.defaultHeaders, options.headers)\r\n }\r\n if (options.auth !== undefined) {\r\n this.authConfig = mergeAuthClientConfig(this.authConfig, options.auth)\r\n }\r\n if (options.db?.url !== undefined && options.db.url !== null) {\r\n this.dbUrlOverride = options.db.url\r\n }\r\n if (options.gateway?.url !== undefined && options.gateway.url !== null) {\r\n this.gatewayUrlOverride = options.gateway.url\r\n }\r\n if (options.dbUrl !== undefined && options.dbUrl !== null) {\r\n this.dbUrlOverride = options.dbUrl\r\n }\r\n if (options.gatewayUrl !== undefined && options.gatewayUrl !== null) {\r\n this.gatewayUrlOverride = options.gatewayUrl\r\n }\r\n if (options.authUrl !== undefined && options.authUrl !== null) {\r\n this.authUrlOverride = options.authUrl\r\n }\r\n if (options.storage?.url !== undefined && options.storage.url !== null) {\r\n this.storageUrlOverride = options.storage.url\r\n }\r\n if (options.storageUrl !== undefined && options.storageUrl !== null) {\r\n this.storageUrlOverride = options.storageUrl\r\n }\r\n if (options.experimental !== undefined) {\r\n this.experimentalOptions = mergeExperimentalOptions(this.experimentalOptions, options.experimental)\r\n }\r\n if (options.experimental?.athenaStorageBackend && options.experimental.typecheckColumns) {\r\n return resolveBuilderReturn(this, true, true)\r\n }\r\n if (options.experimental?.athenaStorageBackend) {\r\n return resolveBuilderReturn(this, true, false)\r\n }\r\n if (options.experimental?.typecheckColumns) {\r\n return resolveBuilderReturn(this, false, true)\r\n }\r\n return this\r\n }\r\n\r\n build(): AthenaSdkClientWithAuth<false> {\r\n if ((!this.rootUrl && !this.dbUrlOverride && !this.gatewayUrlOverride) || !this.apiKey) {\r\n throw new Error(\r\n 'AthenaClient requires key plus either .url() or a db/gateway override before .build()',\r\n )\r\n }\r\n\r\n return this.buildClient({\r\n url: this.rootUrl,\n key: this.apiKey,\n client: this.clientName,\n userId: this.defaultUserId,\n organizationId: this.defaultOrganizationId,\n forceNoCache: this.forceNoCacheEnabled,\n backend: this.backendConfig,\n headers: this.defaultHeaders,\n db: this.dbUrlOverride ? { url: this.dbUrlOverride } : undefined,\n gateway: this.gatewayUrlOverride ? { url: this.gatewayUrlOverride } : undefined,\r\n auth: this.authConfig,\r\n authUrl: this.authUrlOverride,\r\n storage: this.storageUrlOverride ? { url: this.storageUrlOverride } : undefined,\r\n storageUrl: this.storageUrlOverride,\r\n experimental: this.experimentalOptions,\r\n })\r\n }\r\n}\r\n\r\nexport function createAthenaClientBuilder(\r\n buildClient: (config: AthenaCreateClientConfig) => AthenaSdkClientWithAuth<false>,\r\n): AthenaClientBuilder<false, false> {\r\n return new AthenaClientBuilderImpl(buildClient)\r\n}\r\n","import type {\n AthenaConditionArrayValue,\n AthenaConditionOperator,\n AthenaConditionValue,\n AthenaGatewayCondition,\n AthenaJsonValue,\n AthenaSortBy,\n} from './gateway/types.ts'\nimport type {\n AnyModelDef,\n DatabaseDef,\n ModelDef,\n ModelRelationMetadata,\n RegistryDef,\n SchemaDef,\n} from './schema/types.ts'\nimport type { RowOf } from './schema/types.ts'\n\ntype AthenaRowShape = Record<string, AthenaJsonValue | undefined>\ntype FilterColumnKey<Row> = Extract<keyof NonNullable<Row>, string>\ntype ResolvedFilterColumnKey<Row> = [FilterColumnKey<Row>] extends [never] ? string : FilterColumnKey<Row>\n\nconst UUID_PATTERN =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i\n\ntype AthenaFilterOperator =\n | 'eq'\n | 'neq'\n | 'gt'\n | 'gte'\n | 'lt'\n | 'lte'\n | 'like'\n | 'ilike'\n | 'is'\n | 'in'\n | 'contains'\n | 'containedBy'\n\ntype AthenaWherePrimitive = AthenaConditionValue\n\nexport type AthenaWhereOperatorInput = {\n eq?: AthenaConditionValue\n neq?: AthenaConditionValue\n gt?: AthenaConditionValue\n gte?: AthenaConditionValue\n lt?: AthenaConditionValue\n lte?: AthenaConditionValue\n like?: AthenaConditionValue\n ilike?: AthenaConditionValue\n is?: AthenaConditionValue\n in?: AthenaConditionArrayValue\n contains?: AthenaConditionArrayValue\n containedBy?: AthenaConditionArrayValue\n}\n\ntype AthenaWhereColumnInput<Row = AthenaRowShape> = Partial<\n Record<ResolvedFilterColumnKey<Row>, AthenaWherePrimitive | AthenaWhereOperatorInput>\n>\n\ntype AthenaBooleanSafeOperator = Exclude<AthenaFilterOperator, 'in' | 'contains' | 'containedBy'>\n\ntype AthenaWhereBooleanSafeOperatorInput = Partial<\n Record<AthenaBooleanSafeOperator, AthenaConditionValue>\n>\n\ntype AthenaWhereBooleanNotOperatorInput = {\n [K in AthenaBooleanSafeOperator]: {\n [P in K]: AthenaConditionValue\n } & Partial<Record<Exclude<AthenaBooleanSafeOperator, K>, never>>\n}[AthenaBooleanSafeOperator]\n\ntype AthenaStrictBooleanOperand<Keys extends string, Value> = {\n [K in Keys]: {\n [P in K]: Value\n } & Partial<Record<Exclude<Keys, K>, never>>\n}[Keys]\n\ntype AthenaNonEmptyArray<T> = [T, ...T[]]\n\nexport type AthenaWhereBooleanOperand<Row = AthenaRowShape> =\n string extends ResolvedFilterColumnKey<Row>\n ? AthenaWhereColumnInput<Row>\n : AthenaStrictBooleanOperand<\n ResolvedFilterColumnKey<Row>,\n AthenaWherePrimitive | AthenaWhereBooleanSafeOperatorInput\n >\n\ntype AthenaWhereNotOperand<Row = AthenaRowShape> =\n string extends ResolvedFilterColumnKey<Row>\n ? AthenaWhereColumnInput<Row>\n : AthenaStrictBooleanOperand<\n ResolvedFilterColumnKey<Row>,\n AthenaWherePrimitive | AthenaWhereBooleanNotOperatorInput\n >\n\nexport type AthenaWhere<Row = AthenaRowShape> = AthenaWhereColumnInput<Row> & {\n or?: string extends ResolvedFilterColumnKey<Row>\n ? Array<AthenaWhereColumnInput<Row>>\n : AthenaNonEmptyArray<AthenaWhereBooleanOperand<Row>>\n not?: AthenaWhereNotOperand<Row>\n}\n\nexport interface AthenaRelationSelectNode<TSelect extends AthenaSelectShape = AthenaSelectShape> {\n select: TSelect\n as?: string\n via?: string\n schema?: string\n}\n\nexport type AthenaSelectShape = Record<string, true | AthenaRelationSelectNode<AthenaSelectShape>>\n\ntype AthenaAllowedRelationSelectNodeKey = 'select' | 'as' | 'via' | 'schema'\n\ntype AthenaValidatedRelationSelectNode<TNode> =\n TNode extends { select: infer TChild }\n ? Exclude<keyof TNode, AthenaAllowedRelationSelectNodeKey> extends never\n ? TNode extends { schema: string; via: string }\n ? never\n : TChild extends Record<string, unknown>\n ? {\n [K in keyof TNode]:\n K extends 'select'\n ? AthenaValidatedSelectShape<TChild>\n : K extends AthenaAllowedRelationSelectNodeKey\n ? TNode[K]\n : never\n }\n : never\n : never\n : never\n\nexport type AthenaValidatedSelectShape<TSelect> = {\n [K in keyof TSelect]:\n TSelect[K] extends true\n ? true\n : AthenaValidatedRelationSelectNode<TSelect[K]>\n}\n\ntype GenericRegistryDef = RegistryDef<\n Record<string, DatabaseDef<Record<string, SchemaDef<Record<string, AnyModelDef>>>>>\n>\n\ntype AthenaOrderByDirectionInput =\n | 'asc'\n | 'desc'\n | 'ascending'\n | 'descending'\n | boolean\n | {\n ascending?: boolean\n }\n\nexport type AthenaOrderBy<Row = AthenaRowShape> =\n | {\n column: ResolvedFilterColumnKey<Row>\n ascending?: boolean\n }\n | Partial<Record<ResolvedFilterColumnKey<Row>, AthenaOrderByDirectionInput>>\n\nexport interface AthenaFindManyOptions<\n Row = AthenaRowShape,\n TSelect extends AthenaSelectShape = AthenaSelectShape,\n> {\n select: TSelect\n where?: AthenaWhere<Row>\n orderBy?: AthenaOrderBy<Row>\n limit?: number\n}\n\ntype AthenaModelContext<\n TRegistry extends GenericRegistryDef = GenericRegistryDef,\n TDatabase extends string = string,\n TSchema extends string = string,\n TModel extends AnyModelDef = AnyModelDef,\n> = {\n registry: TRegistry\n database: TDatabase\n schema: TSchema\n model: TModel\n}\n\ntype Simplify<T> = {\n [K in keyof T]: T[K]\n} & {}\n\ntype ContextRegistry<TContext> = TContext extends AthenaModelContext<infer TRegistry, string, string, AnyModelDef>\n ? TRegistry\n : never\n\ntype ContextDatabase<TContext> = TContext extends AthenaModelContext<GenericRegistryDef, infer TDatabase, string, AnyModelDef>\n ? TDatabase\n : never\n\ntype ContextModel<TContext> = TContext extends AthenaModelContext<GenericRegistryDef, string, string, infer TModel>\n ? TModel\n : never\n\ntype ModelMetaOf<TContext> = ContextModel<TContext> extends ModelDef<unknown, unknown, unknown, infer TMeta>\n ? TMeta\n : never\n\ntype ModelRelationsOf<TContext> = NonNullable<ModelMetaOf<TContext>['relations']>\n\ntype SelectedResultKey<\n TKey extends string,\n TValue,\n> = TValue extends { as: infer TAlias extends string } ? TAlias : TKey\n\ntype ScalarSelectionResult<Row, TSelect extends AthenaSelectShape> = {\n [TKey in Extract<keyof TSelect, string> as TSelect[TKey] extends true ? TKey : never]-?: TKey extends keyof NonNullable<Row>\n ? NonNullable<Row>[TKey]\n : unknown\n}\n\ntype RelationByKey<TContext, TKey extends string> = TKey extends keyof ModelRelationsOf<TContext>\n ? ModelRelationsOf<TContext>[TKey]\n : never\n\ntype RelationByVia<TContext, TVia extends string> = {\n [TKey in keyof ModelRelationsOf<TContext>]: ModelRelationsOf<TContext>[TKey] extends infer TRelation\n ? TRelation extends ModelRelationMetadata\n ? TVia extends TRelation['sourceColumns'][number]\n ? TRelation\n : never\n : never\n : never\n}[keyof ModelRelationsOf<TContext>]\n\ntype ResolvedRelation<TContext, TKey extends string, TValue> = RelationByKey<TContext, TKey> extends never\n ? TValue extends { via: infer TVia extends string }\n ? RelationByVia<TContext, TVia>\n : never\n : RelationByKey<TContext, TKey>\n\ntype TargetDatabaseName<TContext, TRelation extends ModelRelationMetadata> = TRelation['targetDatabase'] extends string\n ? TRelation['targetDatabase']\n : ContextDatabase<TContext>\n\ntype ResolveTargetModel<\n TContext,\n TRelation extends ModelRelationMetadata,\n> = ContextRegistry<TContext> extends infer TRegistry\n ? TRegistry extends GenericRegistryDef\n ? TargetDatabaseName<TContext, TRelation> extends keyof TRegistry & string\n ? TRelation['targetSchema'] extends keyof TRegistry[TargetDatabaseName<TContext, TRelation>]['schemas'] & string\n ? TRelation['targetModel'] extends keyof TRegistry[TargetDatabaseName<TContext, TRelation>]['schemas'][TRelation['targetSchema']]['models'] & string\n ? TRegistry[TargetDatabaseName<TContext, TRelation>]['schemas'][TRelation['targetSchema']]['models'][TRelation['targetModel']]\n : never\n : never\n : never\n : never\n : never\n\ntype RelationResultValue<\n TRelation extends ModelRelationMetadata,\n TValue,\n TContext,\n> = TValue extends AthenaRelationSelectNode<infer TChildSelect>\n ? ResolveTargetModel<TContext, TRelation> extends infer TTargetModel\n ? TTargetModel extends AnyModelDef\n ? TRelation['kind'] extends 'one-to-many' | 'many-to-many'\n ? Array<\n AthenaFindManyResult<\n RowOf<TTargetModel>,\n TChildSelect,\n AthenaModelContext<\n ContextRegistry<TContext>,\n TargetDatabaseName<TContext, TRelation>,\n TRelation['targetSchema'],\n TTargetModel\n >\n >\n >\n : AthenaFindManyResult<\n RowOf<TTargetModel>,\n TChildSelect,\n AthenaModelContext<\n ContextRegistry<TContext>,\n TargetDatabaseName<TContext, TRelation>,\n TRelation['targetSchema'],\n TTargetModel\n >\n > | null\n : unknown\n : unknown\n : never\n\ntype RelationSelectionResult<TContext, TSelect extends AthenaSelectShape> = {\n [TKey in Extract<keyof TSelect, string> as TSelect[TKey] extends AthenaRelationSelectNode<AthenaSelectShape>\n ? SelectedResultKey<TKey, TSelect[TKey]>\n : never]-?: ResolvedRelation<TContext, TKey, TSelect[TKey]> extends infer TRelation\n ? TRelation extends ModelRelationMetadata\n ? RelationResultValue<TRelation, TSelect[TKey], TContext>\n : unknown\n : unknown\n}\n\nexport type AthenaFindManyResult<\n Row,\n TSelect extends AthenaSelectShape,\n TContext = unknown,\n> = Simplify<ScalarSelectionResult<Row, TSelect> & RelationSelectionResult<TContext, TSelect>>\n\nconst FILTER_OPERATORS = new Set<AthenaFilterOperator>([\n 'eq',\n 'neq',\n 'gt',\n 'gte',\n 'lt',\n 'lte',\n 'like',\n 'ilike',\n 'is',\n 'in',\n 'contains',\n 'containedBy',\n])\n\nconst BOOLEAN_SAFE_OPERATORS = new Set<AthenaBooleanSafeOperator>([\n 'eq',\n 'neq',\n 'gt',\n 'gte',\n 'lt',\n 'lte',\n 'like',\n 'ilike',\n 'is',\n])\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction isUuidString(value: string): boolean {\n return UUID_PATTERN.test(value.trim())\n}\n\nfunction isUuidIdentifierColumn(column: string): boolean {\n return column === 'id' || /(?:^|_)uuid(?:_|$)/i.test(column) || /_id$/i.test(column)\n}\n\nexport function shouldUseUuidTextComparison(column: string, value: AthenaConditionValue): boolean {\n return typeof value === 'string' && isUuidString(value) && isUuidIdentifierColumn(column)\n}\n\nfunction isRelationSelectNode(value: unknown): value is AthenaRelationSelectNode {\n return isRecord(value) && isRecord(value.select)\n}\n\nfunction normalizeIdentifier(value: string, label: string): string {\n const normalized = value.trim()\n if (!normalized) {\n throw new Error(`${label} must be a non-empty string`)\n }\n return normalized\n}\n\nfunction stringifyFilterValue(value: AthenaConditionValue | AthenaConditionArrayValue | string): string {\n if (Array.isArray(value)) {\n return value.join(',')\n }\n return String(value)\n}\n\nfunction buildGatewayCondition(\n operator: AthenaConditionOperator,\n column?: string,\n value?: AthenaConditionValue | AthenaConditionArrayValue | string,\n): AthenaGatewayCondition {\n const condition: AthenaGatewayCondition = { operator }\n if (column) {\n condition.column = column\n if (operator === 'eq') {\n condition.eq_column = column\n }\n }\n if (value !== undefined) {\n condition.value = value\n if (operator === 'eq') {\n condition.eq_value = value\n }\n }\n if (operator === 'eq' && column && value !== undefined && shouldUseUuidTextComparison(column, value as AthenaConditionValue)) {\n condition.column_cast = 'text'\n condition.eq_column_cast = 'text'\n }\n return condition\n}\n\nfunction compileRelationToken(\n key: string,\n node: AthenaRelationSelectNode,\n): string {\n const nested = compileSelectShape(node.select)\n const propertyKey = normalizeIdentifier(key, 'select relation key')\n if (node.schema && node.via) {\n throw new Error(\n `findMany relation \"${propertyKey}\" cannot combine schema and via yet; use schema with the relation key, or use via without schema`,\n )\n }\n\n const relationTokenBase = normalizeIdentifier(node.via ?? propertyKey, 'select relation token')\n if (node.schema && relationTokenBase.includes('.')) {\n throw new Error(\n `findMany relation \"${propertyKey}\" already resolves to a qualified relation token; do not also set schema`,\n )\n }\n\n const relationSchema = node.schema?.trim()\n const relationToken = relationSchema\n ? `${normalizeIdentifier(relationSchema, 'select relation schema')}.${relationTokenBase}`\n : relationTokenBase\n const alias = node.as?.trim() || (relationToken !== propertyKey ? propertyKey : '')\n const prefix = alias ? `${alias}:` : ''\n return `${prefix}${relationToken}(${nested})`\n}\n\nexport function compileSelectShape(select: AthenaSelectShape): string {\n if (!isRecord(select)) {\n throw new Error('findMany select must be an object')\n }\n\n const tokens: string[] = []\n for (const [rawKey, rawValue] of Object.entries(select)) {\n if (rawValue === undefined) {\n continue\n }\n\n if (rawValue === true) {\n tokens.push(normalizeIdentifier(rawKey, 'select column'))\n continue\n }\n\n if (isRelationSelectNode(rawValue)) {\n tokens.push(compileRelationToken(rawKey, rawValue))\n continue\n }\n\n throw new Error(`Unsupported select node for \"${rawKey}\"`)\n }\n\n if (tokens.length === 0) {\n throw new Error('findMany select requires at least one field')\n }\n\n return tokens.join(',')\n}\n\nexport function selectShapeUsesRelationSchema(select: AthenaSelectShape): boolean {\n if (!isRecord(select)) {\n return false\n }\n\n for (const rawValue of Object.values(select)) {\n if (!isRelationSelectNode(rawValue)) {\n continue\n }\n if (typeof rawValue.schema === 'string' && rawValue.schema.trim().length > 0) {\n return true\n }\n if (selectShapeUsesRelationSchema(rawValue.select)) {\n return true\n }\n }\n\n return false\n}\n\nfunction compileColumnWhere(\n column: string,\n input: AthenaWherePrimitive | AthenaWhereOperatorInput,\n): AthenaGatewayCondition[] {\n const normalizedColumn = normalizeIdentifier(column, 'where column')\n if (!isRecord(input)) {\n return [buildGatewayCondition('eq', normalizedColumn, input)]\n }\n\n const conditions: AthenaGatewayCondition[] = []\n for (const [rawOperator, rawValue] of Object.entries(input)) {\n if (rawValue === undefined) {\n continue\n }\n if (!FILTER_OPERATORS.has(rawOperator as AthenaFilterOperator)) {\n throw new Error(`Unsupported where operator \"${rawOperator}\" on \"${normalizedColumn}\"`)\n }\n if (\n (rawOperator === 'in' || rawOperator === 'contains' || rawOperator === 'containedBy') &&\n !Array.isArray(rawValue)\n ) {\n throw new Error(`where.${normalizedColumn}.${rawOperator} requires an array value`)\n }\n conditions.push(\n buildGatewayCondition(\n rawOperator as AthenaFilterOperator,\n normalizedColumn,\n rawValue as AthenaConditionValue | AthenaConditionArrayValue,\n ),\n )\n }\n\n if (conditions.length === 0) {\n throw new Error(`where.${normalizedColumn} requires at least one operator`)\n }\n\n return conditions\n}\n\nfunction compileBooleanExpressionTerms(\n clause: AthenaWhereBooleanOperand,\n label: 'or' | 'not',\n): string[] {\n if (!isRecord(clause)) {\n throw new Error(`findMany where.${label} clauses must be objects`)\n }\n\n const entries = Object.entries(clause).filter(([, value]) => value !== undefined)\n if (entries.length !== 1) {\n throw new Error(`findMany where.${label} clauses must target exactly one column`)\n }\n\n const [rawColumn, rawValue] = entries[0]\n const column = normalizeIdentifier(rawColumn, `where.${label} column`)\n\n if (!isRecord(rawValue)) {\n return [`${column}.eq.${stringifyFilterValue(rawValue as AthenaConditionValue)}`]\n }\n\n const operatorEntries = Object.entries(rawValue).filter(([, value]) => value !== undefined)\n if (operatorEntries.length === 0) {\n throw new Error(`findMany where.${label}.${column} requires at least one operator`)\n }\n\n if (label === 'not' && operatorEntries.length > 1) {\n throw new Error('findMany where.not only supports a single lossless operator expression')\n }\n\n return operatorEntries.map(([rawOperator, rawOperand]) => {\n if (!BOOLEAN_SAFE_OPERATORS.has(rawOperator as AthenaBooleanSafeOperator)) {\n throw new Error(`findMany where.${label} only supports lossless scalar operators`)\n }\n if (Array.isArray(rawOperand)) {\n throw new Error(`findMany where.${label} does not support array-valued operators`)\n }\n return `${column}.${rawOperator}.${stringifyFilterValue(rawOperand as AthenaConditionValue)}`\n })\n}\n\nexport function compileWhere(where?: AthenaWhere): AthenaGatewayCondition[] | undefined {\n if (where === undefined) {\n return undefined\n }\n if (!isRecord(where)) {\n throw new Error('findMany where must be an object')\n }\n\n const conditions: AthenaGatewayCondition[] = []\n for (const [rawKey, rawValue] of Object.entries(where)) {\n if (rawValue === undefined) {\n continue\n }\n\n if (rawKey === 'or') {\n if (!Array.isArray(rawValue) || rawValue.length === 0) {\n throw new Error('findMany where.or must be a non-empty array')\n }\n const expressions = rawValue.flatMap(value =>\n compileBooleanExpressionTerms(value as AthenaWhereBooleanOperand, 'or'),\n )\n conditions.push(buildGatewayCondition('or', undefined, expressions.join(',')))\n continue\n }\n\n if (rawKey === 'not') {\n const expressions = compileBooleanExpressionTerms(rawValue as AthenaWhereBooleanOperand, 'not')\n if (expressions.length !== 1) {\n throw new Error('findMany where.not must compile to exactly one lossless expression')\n }\n conditions.push(buildGatewayCondition('not', undefined, expressions[0]))\n continue\n }\n\n conditions.push(...compileColumnWhere(rawKey, rawValue as AthenaWherePrimitive | AthenaWhereOperatorInput))\n }\n\n return conditions.length > 0 ? conditions : undefined\n}\n\nfunction resolveOrderDirection(input: AthenaOrderByDirectionInput): AthenaSortBy['direction'] {\n if (typeof input === 'boolean') {\n return input === false ? 'descending' : 'ascending'\n }\n if (typeof input === 'string') {\n const normalized = input.trim().toLowerCase()\n if (normalized === 'asc' || normalized === 'ascending') {\n return 'ascending'\n }\n if (normalized === 'desc' || normalized === 'descending') {\n return 'descending'\n }\n throw new Error(`Unsupported orderBy direction \"${input}\"`)\n }\n return input.ascending === false ? 'descending' : 'ascending'\n}\n\nexport function compileOrderBy<Row = AthenaRowShape>(orderBy?: AthenaOrderBy<Row>): AthenaSortBy | undefined {\n if (orderBy === undefined) {\n return undefined\n }\n if (!isRecord(orderBy)) {\n throw new Error('findMany orderBy must be an object')\n }\n\n if ('column' in orderBy) {\n return {\n field: normalizeIdentifier(String(orderBy.column), 'orderBy column'),\n direction: orderBy.ascending === false ? 'descending' : 'ascending',\n }\n }\n\n const entries = Object.entries(orderBy).filter(([, value]) => value !== undefined)\n if (entries.length === 0) {\n return undefined\n }\n if (entries.length > 1) {\n throw new Error('findMany orderBy only supports a single column in v1')\n }\n\n const [column, input] = entries[0]\n return {\n field: normalizeIdentifier(column, 'orderBy column'),\n direction: resolveOrderDirection(input as AthenaOrderByDirectionInput),\n }\n}\n","import type {\n AthenaFetchPayload,\n AthenaGatewayCondition,\n AthenaJsonArray,\n AthenaJsonObject,\n AthenaJsonValue,\n AthenaSortBy,\n} from './types.ts'\n\nconst IDENTIFIER_SEGMENT_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/\n\nfunction isIdentifierPath(value: string): boolean {\n const segments = value.split('.').map(segment => segment.trim())\n return segments.length > 1 && segments.every(segment => IDENTIFIER_SEGMENT_PATTERN.test(segment))\n}\n\nfunction extractRelationHead(raw: string): string {\n const trimmed = raw.trim()\n if (!trimmed) return ''\n\n const aliasIndex = trimmed.indexOf(':')\n const withoutAlias = aliasIndex >= 0 ? trimmed.slice(aliasIndex + 1).trim() : trimmed\n const modifierIndex = withoutAlias.indexOf('!')\n return (modifierIndex >= 0 ? withoutAlias.slice(0, modifierIndex) : withoutAlias).trim()\n}\n\nfunction hasSchemaQualifiedRelationToken(select: string): boolean {\n let singleQuoted = false\n let doubleQuoted = false\n let tokenStart = 0\n\n for (let index = 0; index < select.length; index += 1) {\n const char = select[index]\n const next = index + 1 < select.length ? select[index + 1] : ''\n\n if (singleQuoted) {\n if (char === \"'\" && next === \"'\") {\n index += 1\n continue\n }\n if (char === \"'\") {\n singleQuoted = false\n }\n continue\n }\n\n if (doubleQuoted) {\n if (char === '\"' && next === '\"') {\n index += 1\n continue\n }\n if (char === '\"') {\n doubleQuoted = false\n }\n continue\n }\n\n if (char === \"'\") {\n singleQuoted = true\n continue\n }\n\n if (char === '\"') {\n doubleQuoted = true\n continue\n }\n\n if (char === '(') {\n const relationHead = extractRelationHead(select.slice(tokenStart, index))\n if (isIdentifierPath(relationHead)) {\n return true\n }\n tokenStart = index + 1\n continue\n }\n\n if (char === ',' || char === ')') {\n tokenStart = index + 1\n }\n }\n\n return false\n}\n\nfunction toStructuredSelectString(columns: string | string[]): string {\n return Array.isArray(columns) ? columns.join(',') : columns\n}\n\ntype StructuredWhereOperand =\n | AthenaJsonValue\n | AthenaJsonArray\n | AthenaJsonObject\n\nfunction buildStructuredWhere(\n conditions: AthenaGatewayCondition[] | undefined,\n): AthenaJsonObject | null | undefined {\n if (!conditions?.length) return undefined\n\n const where: AthenaJsonObject = {}\n\n for (const condition of conditions) {\n if (!condition.column) {\n return null\n }\n if (condition.value_cast !== undefined) {\n return null\n }\n\n const operand = condition.value as StructuredWhereOperand | undefined\n const operator = condition.operator\n if (operator === 'eq') {\n if (operand === undefined) return null\n } else if (operator === 'neq' || operator === 'gt' || operator === 'lt') {\n if (operand === undefined) return null\n } else if (operator === 'in') {\n if (!Array.isArray(operand)) return null\n } else {\n return null\n }\n\n const existing = where[condition.column]\n if (existing !== undefined && (typeof existing !== 'object' || existing === null || Array.isArray(existing))) {\n return null\n }\n\n const next = (existing as AthenaJsonObject | undefined) ?? {}\n if (Object.prototype.hasOwnProperty.call(next, operator)) {\n return null\n }\n next[operator] = operand as AthenaJsonValue | AthenaJsonArray\n where[condition.column] = next\n }\n\n return where\n}\n\nfunction buildStructuredOrderBy(order: AthenaSortBy | undefined): AthenaJsonObject | undefined {\n if (!order?.field) return undefined\n return {\n [order.field]: order.direction === 'descending' ? 'desc' : 'asc',\n }\n}\n\nexport interface StructuredSelectTransportInput {\n tableName: string\n columns: string | string[]\n conditions?: AthenaGatewayCondition[]\n limit?: number\n offset?: number\n order?: AthenaSortBy\n stripNulls: boolean\n count?: 'exact' | 'planned' | 'estimated'\n head?: boolean\n}\n\nexport interface StructuredSelectTransportResult {\n payload: AthenaFetchPayload\n select: string\n}\n\nexport function buildStructuredSelectTransport(\n input: StructuredSelectTransportInput,\n): StructuredSelectTransportResult | null | { error: string } {\n const select = toStructuredSelectString(input.columns).trim()\n if (!select || select === '*') {\n return null\n }\n\n if (!hasSchemaQualifiedRelationToken(select)) {\n return null\n }\n\n if (input.count !== undefined || input.head !== undefined) {\n return {\n error:\n 'Schema-qualified nested select strings require structured select transport, which does not support count/head options in athena-js yet.',\n }\n }\n\n const where = buildStructuredWhere(input.conditions)\n if (where === null) {\n return {\n error:\n 'Schema-qualified nested select strings only support eq, neq, gt, lt, and in filters in athena-js structured select transport.',\n }\n }\n\n return {\n select,\n payload: {\n table_name: input.tableName,\n select,\n where,\n orderBy: buildStructuredOrderBy(input.order),\n limit: input.limit,\n offset: input.offset,\n strip_nulls: input.stripNulls,\n },\n }\n}\n","import { buildStructuredSelectTransport } from './gateway/structured-select.ts'\nimport type {\n AthenaFetchPayload,\n AthenaGatewayCallOptions,\n AthenaGatewayCondition,\n AthenaJsonObject,\n AthenaSortBy,\n} from './gateway/types.ts'\nimport { shouldUseUuidTextComparison } from './query-ast.ts'\nimport type {\n AthenaOrderBy,\n AthenaSelectShape,\n AthenaWhere,\n AthenaWhereBooleanOperand,\n AthenaWhereOperatorInput,\n} from './query-ast.ts'\n\r\ntype AthenaFindManyAstOrderColumn<Row> =\r\n [Extract<keyof NonNullable<Row>, string>] extends [never] ? string : Extract<keyof NonNullable<Row>, string>\r\n\r\nexport interface AthenaSelectExecutionState {\r\n conditions: AthenaGatewayCondition[]\r\n limit?: number\r\n offset?: number\r\n order?: AthenaSortBy\r\n currentPage?: number\r\n pageSize?: number\r\n totalPages?: number\r\n}\r\n\r\nexport type AthenaFindManyAstPayload<\r\n Row,\r\n TSelect extends AthenaSelectShape,\r\n> = {\r\n table_name: string\r\n select: TSelect\r\n where?: AthenaWhere<Row>\r\n orderBy?: AthenaOrderBy<Row>\r\n limit?: number\r\n}\r\n\r\nexport interface AthenaResolvedPagination {\r\n limit?: number\r\n offset?: number\r\n}\r\n\r\nexport interface AthenaTypedSelectQueryInput {\r\n tableName: string\r\n columns: string | string[]\r\n conditions: AthenaGatewayCondition[]\r\n limit?: number\r\n offset?: number\r\n currentPage?: number\r\n pageSize?: number\r\n order?: AthenaSortBy\r\n}\r\n\r\nexport interface AthenaSelectDebugPlan {\r\n columns: string | string[]\r\n conditions?: AthenaGatewayCondition[]\r\n limit?: number\r\n offset?: number\r\n currentPage?: number\r\n pageSize?: number\r\n order?: AthenaSortBy\r\n}\r\n\r\nexport type AthenaSelectTransportPlan =\n | {\r\n kind: 'query'\r\n query: string\r\n payload: {\r\n query: string\r\n }\r\n }\r\n | {\r\n kind: 'fetch'\r\n payload: AthenaFetchPayload\r\n debug: AthenaSelectDebugPlan\r\n }\n\nexport function canUseFindManyAstTransport(state: AthenaSelectExecutionState): boolean {\n return (\r\n state.conditions.length === 0 &&\r\n state.offset === undefined &&\r\n state.currentPage === undefined &&\r\n state.pageSize === undefined &&\r\n state.totalPages === undefined\r\n )\r\n}\r\n\r\nexport function toFindManyAstOrder<Row>(order?: AthenaSortBy): AthenaOrderBy<Row> | undefined {\r\n if (!order) {\r\n return undefined\r\n }\r\n return {\r\n column: order.field as AthenaFindManyAstOrderColumn<Row>,\r\n ascending: order.direction !== 'descending',\r\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction normalizeFindManyAstColumnPredicate(\n value: unknown,\n): AthenaWhereOperatorInput {\n if (!isRecord(value)) {\n return {\n eq: value as AthenaWhereOperatorInput['eq'],\n }\n }\n\n const normalized: AthenaWhereOperatorInput = {}\n for (const [key, operand] of Object.entries(value)) {\n if (operand !== undefined) {\n normalized[key as keyof AthenaWhereOperatorInput] = operand as never\n }\n }\n return normalized\n}\n\nfunction normalizeFindManyAstBooleanOperand<Row>(\n clause: AthenaWhereBooleanOperand<Row>,\n): AthenaWhereBooleanOperand<Row> {\n const normalized: Record<string, unknown> = {}\n for (const [column, value] of Object.entries(clause as Record<string, unknown>)) {\n if (value === undefined) {\n continue\n }\n normalized[column] = normalizeFindManyAstColumnPredicate(value)\n }\n return normalized as AthenaWhereBooleanOperand<Row>\n}\n\nexport function normalizeFindManyAstWhere<Row>(\n where?: AthenaWhere<Row>,\n): AthenaWhere<Row> | undefined {\n if (!where || !isRecord(where)) {\n return where\n }\n\n const normalized: AthenaJsonObject = {}\n for (const [key, value] of Object.entries(where as Record<string, unknown>)) {\n if (value === undefined) {\n continue\n }\n if (key === 'or' && Array.isArray(value)) {\n normalized.or = value.map(clause =>\n normalizeFindManyAstBooleanOperand(clause as AthenaWhereBooleanOperand<Row>),\n ) as unknown as AthenaJsonObject['or']\n continue\n }\n if (key === 'not' && isRecord(value)) {\n normalized.not = normalizeFindManyAstBooleanOperand(\n value as AthenaWhereBooleanOperand<Row>,\n ) as unknown as AthenaJsonObject['not']\n continue\n }\n normalized[key] = normalizeFindManyAstColumnPredicate(value)\n }\n\n return normalized as AthenaWhere<Row>\n}\n\nfunction predicateRequiresUuidQueryFallback(\n column: string,\n value: unknown,\n): boolean {\n if (!isRecord(value)) {\n return shouldUseUuidTextComparison(column, value as Parameters<typeof shouldUseUuidTextComparison>[1])\n }\n\n const eqValue = value.eq\n return eqValue !== undefined\n && shouldUseUuidTextComparison(column, eqValue as Parameters<typeof shouldUseUuidTextComparison>[1])\n}\n\nfunction booleanOperandRequiresUuidQueryFallback<Row>(\n clause: AthenaWhereBooleanOperand<Row>,\n): boolean {\n for (const [column, value] of Object.entries(clause as Record<string, unknown>)) {\n if (value === undefined) {\n continue\n }\n if (predicateRequiresUuidQueryFallback(column, value)) {\n return true\n }\n }\n return false\n}\n\nexport function findManyAstWhereRequiresLegacyTransport<Row>(\n where?: AthenaWhere<Row>,\n): boolean {\n if (!where || !isRecord(where)) {\n return false\n }\n\n for (const [key, value] of Object.entries(where as Record<string, unknown>)) {\n if (value === undefined) {\n continue\n }\n if (key === 'or' && Array.isArray(value)) {\n if (\n value.some(clause =>\n booleanOperandRequiresUuidQueryFallback(clause as AthenaWhereBooleanOperand<Row>),\n )\n ) {\n return true\n }\n continue\n }\n if (key === 'not' && isRecord(value)) {\n if (booleanOperandRequiresUuidQueryFallback(value as AthenaWhereBooleanOperand<Row>)) {\n return true\n }\n continue\n }\n if (predicateRequiresUuidQueryFallback(key, value)) {\n return true\n }\n }\n\n return false\n}\n\nexport function resolvePagination(input: {\n limit?: number\r\n offset?: number\r\n currentPage?: number\r\n pageSize?: number\r\n}): AthenaResolvedPagination {\r\n let limit = input.limit\r\n let offset = input.offset\r\n\r\n if (limit === undefined && input.pageSize !== undefined) {\r\n limit = Math.max(0, Math.trunc(input.pageSize))\r\n }\r\n if (\r\n offset === undefined &&\r\n input.pageSize !== undefined &&\r\n input.currentPage !== undefined &&\r\n input.currentPage > 0\r\n ) {\r\n offset = (Math.trunc(input.currentPage) - 1) * Math.max(0, Math.trunc(input.pageSize))\r\n }\r\n\r\n return { limit, offset }\r\n}\r\n\r\nfunction hasTypedEqualityComparison(conditions: AthenaGatewayCondition[] | undefined): boolean {\n return (\n conditions?.some(\r\n condition =>\r\n condition.operator === 'eq' &&\r\n (condition.value_cast !== undefined || condition.column_cast !== undefined),\r\n ) ?? false\r\n )\n}\n\nexport function createSelectTransportPlan(input: {\n tableName: string\n columns: string | string[]\n state: AthenaSelectExecutionState\r\n options?: AthenaGatewayCallOptions\r\n buildTypedSelectQuery: (input: AthenaTypedSelectQueryInput) => string | null\r\n}): AthenaSelectTransportPlan {\r\n const conditions = input.state.conditions.length\n ? input.state.conditions.map(condition => ({ ...condition }))\n : undefined\n\n const pagination = resolvePagination({\n limit: input.state.limit,\n offset: input.state.offset,\n currentPage: input.state.currentPage,\r\n pageSize: input.state.pageSize,\r\n })\r\n const stripNulls = input.options?.stripNulls ?? true\r\n const structuredSelectTransport = buildStructuredSelectTransport({\r\n tableName: input.tableName,\r\n columns: input.columns,\r\n conditions,\r\n limit: pagination.limit,\r\n offset: pagination.offset,\r\n order: input.state.order,\r\n stripNulls,\r\n count: input.options?.count,\r\n head: input.options?.head,\r\n })\r\n if (structuredSelectTransport && 'error' in structuredSelectTransport) {\r\n throw new Error(structuredSelectTransport.error)\r\n }\r\n if (structuredSelectTransport) {\n const { payload, select } = structuredSelectTransport\n return {\n kind: 'fetch',\r\n payload,\r\n debug: {\r\n columns: select,\r\n conditions,\r\n limit: pagination.limit,\r\n offset: pagination.offset,\r\n order: input.state.order,\r\n },\n }\n }\n\n if (hasTypedEqualityComparison(conditions) && !input.options?.head && !input.options?.count && conditions) {\n const query = input.buildTypedSelectQuery({\n tableName: input.tableName,\n columns: input.columns,\n conditions,\n limit: input.state.limit,\n offset: input.state.offset,\n currentPage: input.state.currentPage,\n pageSize: input.state.pageSize,\n order: input.state.order,\n })\n if (query) {\n return {\n kind: 'query',\n query,\n payload: { query },\n }\n }\n }\n\n return {\n kind: 'fetch',\r\n payload: {\r\n table_name: input.tableName,\r\n columns: input.columns,\r\n conditions,\r\n limit: input.state.limit,\r\n offset: input.state.offset,\r\n current_page: input.state.currentPage,\r\n page_size: input.state.pageSize,\r\n total_pages: input.state.totalPages,\r\n sort_by: input.state.order,\r\n strip_nulls: stripNulls,\r\n count: input.options?.count,\r\n head: input.options?.head,\r\n },\r\n debug: {\r\n columns: input.columns,\r\n conditions,\r\n limit: input.state.limit,\r\n offset: input.state.offset,\r\n currentPage: input.state.currentPage,\r\n pageSize: input.state.pageSize,\r\n order: input.state.order,\r\n },\r\n }\r\n}\r\n","import type {\r\n AthenaDeletePayload,\r\n AthenaFetchPayload,\r\n AthenaGatewayCondition,\r\n AthenaInsertPayload,\r\n AthenaJsonObject,\r\n AthenaRpcFilter,\r\n AthenaRpcPayload,\r\n AthenaSortBy,\r\n AthenaUpdatePayload,\r\n} from './gateway/types.ts'\r\nimport type {\r\n AthenaFindManyOptions,\r\n AthenaOrderBy,\r\n AthenaSelectShape,\r\n AthenaValidatedSelectShape,\r\n AthenaWhere,\r\n} from './query-ast.ts'\r\nimport type { AthenaFindManyAstPayload, AthenaSelectTransportPlan } from './query-transport.ts'\r\n\r\nconst ATHENA_DEBUG_AST_KEY = '__athenaDebugAst' as const\r\n\r\nexport interface AthenaTableBuilderStateAst {\r\n conditions: AthenaGatewayCondition[]\r\n limit?: number\r\n offset?: number\r\n order?: AthenaSortBy\r\n currentPage?: number\r\n pageSize?: number\r\n totalPages?: number\r\n}\r\n\r\nexport interface AthenaRpcBuilderStateAst {\r\n filters: AthenaRpcFilter[]\r\n limit?: number\r\n offset?: number\r\n order?: {\r\n column: string\r\n ascending?: boolean\r\n }\r\n}\r\n\r\nexport type AthenaDebugQueryEndpoint =\r\n | '/gateway/fetch'\r\n | '/gateway/insert'\r\n | '/gateway/update'\r\n | '/gateway/delete'\r\n | '/gateway/rpc'\r\n | '/gateway/query'\r\n | `/rpc/${string}`\r\n\r\ninterface AthenaDebugAstBase<TKind extends string> {\r\n version: 1\r\n kind: TKind\r\n}\r\n\r\nexport type AthenaSelectDebugTransport =\r\n | {\r\n mode: 'compiled-fetch' | 'structured-fetch'\r\n endpoint: '/gateway/fetch'\r\n payload: AthenaFetchPayload\r\n }\r\n | {\r\n mode: 'typed-query'\r\n endpoint: '/gateway/query'\r\n payload: {\r\n query: string\r\n }\r\n }\r\n\r\nexport interface AthenaSelectDebugAst extends AthenaDebugAstBase<'select'> {\r\n tableName: string\r\n input: {\r\n columns: string | string[]\r\n state: AthenaTableBuilderStateAst\r\n }\r\n transport: AthenaSelectDebugTransport\r\n}\r\n\r\nexport type AthenaFindManyDebugTransport<\r\n Row = Record<string, unknown>,\r\n TSelect extends AthenaSelectShape = AthenaSelectShape,\r\n> =\r\n | {\r\n mode: 'direct-ast-fetch'\r\n endpoint: '/gateway/fetch'\r\n payload: AthenaFindManyAstPayload<Row, TSelect>\r\n }\r\n | {\r\n mode: 'compiled-fetch' | 'structured-fetch'\r\n endpoint: '/gateway/fetch'\r\n payload: AthenaFetchPayload\r\n }\r\n | {\r\n mode: 'compiled-query'\r\n endpoint: '/gateway/query'\r\n payload: {\r\n query: string\r\n }\r\n }\r\n\r\nexport interface AthenaFindManyDebugAst<\r\n Row = Record<string, unknown>,\r\n TSelect extends AthenaSelectShape = AthenaSelectShape,\r\n> extends AthenaDebugAstBase<'findMany'> {\r\n tableName: string\r\n input: {\r\n select: AthenaValidatedSelectShape<TSelect>\r\n where?: AthenaWhere<Row>\r\n orderBy?: AthenaOrderBy<Row>\r\n limit?: number\r\n }\r\n compiled: {\r\n columns: string\r\n baseState: AthenaTableBuilderStateAst\r\n executionState: AthenaTableBuilderStateAst\r\n }\r\n transport: AthenaFindManyDebugTransport<Row, TSelect>\r\n}\r\n\r\nexport interface AthenaInsertDebugAst extends AthenaDebugAstBase<'insert'> {\r\n tableName: string\r\n input: {\r\n values: AthenaInsertPayload['insert_body']\r\n returning?: AthenaInsertPayload['columns']\r\n count?: AthenaInsertPayload['count']\r\n head?: boolean\r\n defaultToNull?: boolean\r\n }\r\n transport: {\r\n mode: 'insert'\r\n endpoint: '/gateway/insert'\r\n payload: AthenaInsertPayload\r\n }\r\n}\r\n\r\nexport interface AthenaUpsertDebugAst extends AthenaDebugAstBase<'upsert'> {\r\n tableName: string\r\n input: {\r\n values: AthenaInsertPayload['insert_body']\r\n updateBody?: AthenaInsertPayload['update_body']\r\n onConflict?: AthenaInsertPayload['on_conflict']\r\n returning?: AthenaInsertPayload['columns']\r\n count?: AthenaInsertPayload['count']\r\n head?: boolean\r\n defaultToNull?: boolean\r\n }\r\n transport: {\r\n mode: 'upsert'\r\n endpoint: '/gateway/insert'\r\n payload: AthenaInsertPayload\r\n }\r\n}\r\n\r\nexport interface AthenaUpdateDebugAst extends AthenaDebugAstBase<'update'> {\r\n tableName: string\r\n input: {\r\n values: AthenaUpdatePayload['set']\r\n state: AthenaTableBuilderStateAst\r\n returning?: AthenaUpdatePayload['columns']\r\n }\r\n transport: {\r\n mode: 'update'\r\n endpoint: '/gateway/update'\r\n payload: AthenaUpdatePayload\r\n }\r\n}\r\n\r\nexport interface AthenaDeleteDebugAst extends AthenaDebugAstBase<'delete'> {\r\n tableName: string\r\n input: {\r\n resourceId?: AthenaDeletePayload['resource_id']\r\n state: AthenaTableBuilderStateAst\r\n returning?: AthenaDeletePayload['columns']\r\n }\r\n transport: {\r\n mode: 'delete'\r\n endpoint: '/gateway/delete'\r\n payload: AthenaDeletePayload\r\n }\r\n}\r\n\r\nexport interface AthenaRpcDebugAst extends AthenaDebugAstBase<'rpc'> {\r\n functionName: string\r\n input: {\r\n args?: AthenaJsonObject\r\n select?: string | string[]\r\n state: AthenaRpcBuilderStateAst\r\n }\r\n transport: {\r\n mode: 'rpc-post' | 'rpc-get'\r\n endpoint: '/gateway/rpc' | `/rpc/${string}`\r\n payload: AthenaRpcPayload\r\n }\r\n}\r\n\r\nexport interface AthenaRawQueryDebugAst extends AthenaDebugAstBase<'query'> {\r\n input: {\r\n query: string\r\n }\r\n transport: {\r\n mode: 'raw-query'\r\n endpoint: '/gateway/query'\r\n payload: {\r\n query: string\r\n }\r\n }\r\n}\r\n\r\nexport type AthenaQueryDebugAst =\r\n | AthenaSelectDebugAst\r\n | AthenaFindManyDebugAst\r\n | AthenaInsertDebugAst\r\n | AthenaUpsertDebugAst\r\n | AthenaUpdateDebugAst\r\n | AthenaDeleteDebugAst\r\n | AthenaRpcDebugAst\r\n | AthenaRawQueryDebugAst\r\n\r\nfunction cloneConditions(conditions: AthenaGatewayCondition[]): AthenaGatewayCondition[] {\r\n return conditions.map(condition => ({ ...condition }))\r\n}\r\n\r\nexport function cloneTableBuilderStateAst(\r\n state: AthenaTableBuilderStateAst,\r\n): AthenaTableBuilderStateAst {\r\n return {\r\n conditions: cloneConditions(state.conditions),\r\n limit: state.limit,\r\n offset: state.offset,\r\n order: state.order ? { ...state.order } : undefined,\r\n currentPage: state.currentPage,\r\n pageSize: state.pageSize,\r\n totalPages: state.totalPages,\r\n }\r\n}\r\n\r\nexport function cloneRpcBuilderStateAst(\r\n state: AthenaRpcBuilderStateAst,\r\n): AthenaRpcBuilderStateAst {\r\n return {\r\n filters: state.filters.map(filter => ({ ...filter })),\r\n limit: state.limit,\r\n offset: state.offset,\r\n order: state.order ? { ...state.order } : undefined,\r\n }\r\n}\r\n\r\nfunction toSelectTransportAst(plan: AthenaSelectTransportPlan): AthenaSelectDebugTransport {\r\n if (plan.kind === 'query') {\r\n return {\r\n mode: 'typed-query',\r\n endpoint: '/gateway/query',\r\n payload: plan.payload,\r\n }\r\n }\r\n\r\n return {\r\n mode: plan.payload.select !== undefined ? 'structured-fetch' : 'compiled-fetch',\r\n endpoint: '/gateway/fetch',\r\n payload: plan.payload,\r\n }\r\n}\r\n\r\nfunction resolveDebugTableName(tableName: string | undefined): string {\r\n return tableName ?? '__unknown_table__'\r\n}\r\n\r\nexport function buildSelectDebugAst(input: {\r\n tableName: string\r\n columns: string | string[]\r\n state: AthenaTableBuilderStateAst\r\n plan: AthenaSelectTransportPlan\r\n}): AthenaSelectDebugAst {\r\n return {\r\n version: 1,\r\n kind: 'select',\r\n tableName: input.tableName,\r\n input: {\r\n columns: input.columns,\r\n state: cloneTableBuilderStateAst(input.state),\r\n },\r\n transport: toSelectTransportAst(input.plan),\r\n }\r\n}\r\n\r\nexport function buildFindManyCompiledDebugAst<\r\n Row,\r\n TSelect extends AthenaSelectShape,\r\n>(input: {\r\n tableName: string\r\n options: AthenaFindManyOptions<Row, TSelect> & {\r\n select: AthenaValidatedSelectShape<TSelect>\r\n }\r\n compiledColumns: string\r\n baseState: AthenaTableBuilderStateAst\r\n executionState: AthenaTableBuilderStateAst\r\n plan: AthenaSelectTransportPlan\r\n}): AthenaFindManyDebugAst<Row, TSelect> {\r\n return {\r\n version: 1,\r\n kind: 'findMany',\r\n tableName: input.tableName,\r\n input: {\r\n select: input.options.select,\r\n where: input.options.where,\r\n orderBy: input.options.orderBy,\r\n limit: input.options.limit,\r\n },\r\n compiled: {\r\n columns: input.compiledColumns,\r\n baseState: cloneTableBuilderStateAst(input.baseState),\r\n executionState: cloneTableBuilderStateAst(input.executionState),\r\n },\r\n transport: planToFindManyTransport<Row, TSelect>(input.plan),\r\n }\r\n}\r\n\r\nexport function buildFindManyDirectDebugAst<\r\n Row,\r\n TSelect extends AthenaSelectShape,\r\n>(input: {\r\n tableName: string\r\n options: AthenaFindManyOptions<Row, TSelect> & {\r\n select: AthenaValidatedSelectShape<TSelect>\r\n }\r\n compiledColumns: string\r\n baseState: AthenaTableBuilderStateAst\r\n executionState: AthenaTableBuilderStateAst\r\n payload: AthenaFindManyAstPayload<Row, TSelect>\r\n}): AthenaFindManyDebugAst<Row, TSelect> {\r\n return {\r\n version: 1,\r\n kind: 'findMany',\r\n tableName: input.tableName,\r\n input: {\r\n select: input.options.select,\r\n where: input.options.where,\r\n orderBy: input.options.orderBy,\r\n limit: input.options.limit,\r\n },\r\n compiled: {\r\n columns: input.compiledColumns,\r\n baseState: cloneTableBuilderStateAst(input.baseState),\r\n executionState: cloneTableBuilderStateAst(input.executionState),\r\n },\r\n transport: {\r\n mode: 'direct-ast-fetch',\r\n endpoint: '/gateway/fetch',\r\n payload: input.payload,\r\n },\r\n }\r\n}\r\n\r\nfunction planToFindManyTransport<\r\n Row,\r\n TSelect extends AthenaSelectShape,\r\n>(\r\n plan: AthenaSelectTransportPlan,\r\n): AthenaFindManyDebugTransport<Row, TSelect> {\r\n if (plan.kind === 'query') {\r\n return {\r\n mode: 'compiled-query',\r\n endpoint: '/gateway/query',\r\n payload: plan.payload,\r\n }\r\n }\r\n\r\n return {\r\n mode: plan.payload.select !== undefined ? 'structured-fetch' : 'compiled-fetch',\r\n endpoint: '/gateway/fetch',\r\n payload: plan.payload,\r\n }\r\n}\r\n\r\nexport function buildInsertDebugAst(payload: AthenaInsertPayload): AthenaInsertDebugAst {\r\n return {\r\n version: 1,\r\n kind: 'insert',\r\n tableName: payload.table_name,\r\n input: {\r\n values: payload.insert_body,\r\n returning: payload.columns,\r\n count: payload.count,\r\n head: payload.head,\r\n defaultToNull: payload.default_to_null,\r\n },\r\n transport: {\r\n mode: 'insert',\r\n endpoint: '/gateway/insert',\r\n payload,\r\n },\r\n }\r\n}\r\n\r\nexport function buildUpsertDebugAst(payload: AthenaInsertPayload): AthenaUpsertDebugAst {\r\n return {\r\n version: 1,\r\n kind: 'upsert',\r\n tableName: payload.table_name,\r\n input: {\r\n values: payload.insert_body,\r\n updateBody: payload.update_body,\r\n onConflict: payload.on_conflict,\r\n returning: payload.columns,\r\n count: payload.count,\r\n head: payload.head,\r\n defaultToNull: payload.default_to_null,\r\n },\r\n transport: {\r\n mode: 'upsert',\r\n endpoint: '/gateway/insert',\r\n payload,\r\n },\r\n }\r\n}\r\n\r\nexport function buildUpdateDebugAst(input: {\r\n state: AthenaTableBuilderStateAst\r\n payload: AthenaUpdatePayload\r\n}): AthenaUpdateDebugAst {\r\n return {\r\n version: 1,\r\n kind: 'update',\r\n tableName: resolveDebugTableName(input.payload.table_name),\r\n input: {\r\n values: input.payload.set,\r\n state: cloneTableBuilderStateAst(input.state),\r\n returning: input.payload.columns,\r\n },\r\n transport: {\r\n mode: 'update',\r\n endpoint: '/gateway/update',\r\n payload: input.payload,\r\n },\r\n }\r\n}\r\n\r\nexport function buildDeleteDebugAst(input: {\r\n state: AthenaTableBuilderStateAst\r\n payload: AthenaDeletePayload\r\n}): AthenaDeleteDebugAst {\r\n return {\r\n version: 1,\r\n kind: 'delete',\r\n tableName: input.payload.table_name,\r\n input: {\r\n resourceId: input.payload.resource_id,\r\n state: cloneTableBuilderStateAst(input.state),\r\n returning: input.payload.columns,\r\n },\r\n transport: {\r\n mode: 'delete',\r\n endpoint: '/gateway/delete',\r\n payload: input.payload,\r\n },\r\n }\r\n}\r\n\r\nexport function buildRpcDebugAst(input: {\r\n functionName: string\r\n args?: AthenaJsonObject\r\n selectedColumns?: string | string[]\r\n state: AthenaRpcBuilderStateAst\r\n payload: AthenaRpcPayload\r\n endpoint: '/gateway/rpc' | `/rpc/${string}`\r\n}): AthenaRpcDebugAst {\r\n return {\r\n version: 1,\r\n kind: 'rpc',\r\n functionName: input.functionName,\r\n input: {\r\n args: input.args,\r\n select: input.selectedColumns,\r\n state: cloneRpcBuilderStateAst(input.state),\r\n },\r\n transport: {\r\n mode: input.endpoint === '/gateway/rpc' ? 'rpc-post' : 'rpc-get',\r\n endpoint: input.endpoint,\r\n payload: input.payload,\r\n },\r\n }\r\n}\r\n\r\nexport function buildRawQueryDebugAst(query: string): AthenaRawQueryDebugAst {\r\n return {\r\n version: 1,\r\n kind: 'query',\r\n input: {\r\n query,\r\n },\r\n transport: {\r\n mode: 'raw-query',\r\n endpoint: '/gateway/query',\r\n payload: {\r\n query,\r\n },\r\n },\r\n }\r\n}\r\n\r\nexport function attachAthenaDebugAst(\r\n target: unknown,\r\n ast: AthenaQueryDebugAst | undefined,\r\n): void {\r\n if (!ast) {\r\n return\r\n }\r\n if (!target || (typeof target !== 'object' && typeof target !== 'function')) {\r\n return\r\n }\r\n Object.defineProperty(target, ATHENA_DEBUG_AST_KEY, {\r\n value: ast,\r\n enumerable: false,\r\n configurable: true,\r\n writable: false,\r\n })\r\n}\r\n\r\nexport function getAthenaDebugAst(\r\n value: unknown,\r\n): AthenaQueryDebugAst | null {\r\n if (!value || (typeof value !== 'object' && typeof value !== 'function')) {\r\n return null\r\n }\r\n return ((value as Record<string, unknown>)[ATHENA_DEBUG_AST_KEY] as AthenaQueryDebugAst | undefined) ?? null\r\n}\r\n","import { attachAthenaDebugAst } from './query-debug-ast.ts'\r\nimport type {\r\n AthenaClientExperimentalOptions,\r\n AthenaQueryTraceCallsite,\r\n AthenaQueryTraceEvent,\r\n AthenaResult,\r\n} from './client.ts'\r\nimport type {\r\n AthenaGatewayCallOptions,\r\n AthenaRpcCallOptions,\r\n} from './gateway/types.ts'\r\nimport type { AthenaQueryDebugAst } from './query-debug-ast.ts'\r\n\r\nconst QUERY_TRACE_STACK_SKIP_PATTERNS = [\r\n 'src\\\\client.ts',\r\n 'src/client.ts',\r\n 'src\\\\query-tracing.ts',\r\n 'src/query-tracing.ts',\r\n 'dist\\\\client.',\r\n 'dist/client.',\r\n 'dist\\\\query-tracing.',\r\n 'dist/query-tracing.',\r\n 'node_modules\\\\@xylex-group\\\\athena',\r\n 'node_modules/@xylex-group/athena',\r\n 'node:internal',\r\n 'internal/process',\r\n] as const\r\n\r\ntype AthenaTraceOperation = AthenaQueryTraceEvent['operation']\r\ntype AthenaTraceEndpoint = AthenaQueryTraceEvent['endpoint']\r\n\r\nexport interface AthenaTraceContext {\r\n operation: AthenaTraceOperation\r\n endpoint: AthenaTraceEndpoint\r\n table?: string\r\n functionName?: string\r\n sql: string\r\n payload: unknown\r\n ast?: AthenaQueryDebugAst\r\n options?: AthenaGatewayCallOptions | AthenaRpcCallOptions\r\n}\r\n\r\nexport type AthenaQueryTracer = {\r\n captureCallsite: () => AthenaQueryTraceCallsite | null\r\n publishSuccess: <T>(\r\n context: AthenaTraceContext,\r\n result: AthenaResult<T>,\r\n durationMs: number,\r\n callsite: AthenaQueryTraceCallsite | null,\r\n ) => void\r\n publishFailure: (\r\n context: AthenaTraceContext,\r\n error: unknown,\r\n durationMs: number,\r\n callsite: AthenaQueryTraceCallsite | null,\r\n ) => void\r\n}\r\n\r\nexport type AthenaTraceCallsiteStore = {\r\n resolve: (callsite?: AthenaQueryTraceCallsite | null) => AthenaQueryTraceCallsite | null\r\n}\r\n\r\nfunction parseQueryTraceCallsiteFrame(frame: string): AthenaQueryTraceCallsite | null {\r\n const trimmed = frame.trim()\r\n if (!trimmed) {\r\n return null\r\n }\r\n\r\n let body = trimmed.replace(/^at\\s+/, '')\r\n if (body.startsWith('async ')) {\r\n body = body.slice(6)\r\n }\r\n\r\n let functionName: string | undefined\r\n let location = body\r\n const wrappedMatch = body.match(/^(.*?)\\s+\\((.*)\\)$/)\r\n if (wrappedMatch) {\r\n functionName = wrappedMatch[1].trim() || undefined\r\n location = wrappedMatch[2].trim()\r\n }\r\n\r\n const locationMatch = location.match(/^(.*):(\\d+):(\\d+)$/)\r\n if (!locationMatch) {\r\n return null\r\n }\r\n\r\n const filePath = locationMatch[1].replace(/^file:\\/\\//, '')\r\n const line = Number(locationMatch[2])\r\n const column = Number(locationMatch[3])\r\n if (!Number.isFinite(line) || !Number.isFinite(column)) {\r\n return null\r\n }\r\n\r\n const normalizedPath = filePath.replace(/\\\\/g, '/')\r\n const fileName = normalizedPath.split('/').at(-1) ?? filePath\r\n return {\r\n filePath,\r\n fileName,\r\n line,\r\n column,\r\n frame: trimmed,\r\n functionName,\r\n }\r\n}\r\n\r\nfunction captureQueryTraceCallsite(): AthenaQueryTraceCallsite | null {\r\n const stack = new Error().stack\r\n if (!stack) return null\r\n const frames = stack\r\n .split('\\n')\r\n .slice(2)\r\n .map(frame => frame.trim())\r\n .filter(Boolean)\r\n\r\n for (const frame of frames) {\r\n if (QUERY_TRACE_STACK_SKIP_PATTERNS.some(pattern => frame.includes(pattern))) {\r\n continue\r\n }\r\n const callsite = parseQueryTraceCallsiteFrame(frame)\r\n if (callsite) return callsite\r\n }\r\n\r\n const fallback = frames.find(frame => !frame.includes('captureQueryTraceCallsite'))\r\n return fallback ? parseQueryTraceCallsiteFrame(fallback) : null\r\n}\r\n\r\nfunction defaultQueryTraceLogger(event: AthenaQueryTraceEvent): void {\r\n const target = event.table ?? event.functionName ?? 'gateway'\r\n const outcomeState = event.outcome?.error ? 'error' : 'ok'\r\n const banner = `[athena-js][trace] ${event.operation.toUpperCase()} ${event.endpoint} ${target} ${event.durationMs}ms ${outcomeState}`\r\n console.info(banner, event)\r\n}\r\n\r\nexport function captureTraceCallsite(tracer?: AthenaQueryTracer): AthenaQueryTraceCallsite | null {\r\n return tracer?.captureCallsite() ?? null\r\n}\r\n\r\nexport function createTraceCallsiteStore(\r\n tracer?: AthenaQueryTracer,\r\n initialCallsite?: AthenaQueryTraceCallsite | null,\r\n): AthenaTraceCallsiteStore {\r\n let storedCallsite = initialCallsite ?? undefined\r\n\r\n return {\r\n resolve(callsite) {\r\n if (callsite) {\r\n storedCallsite = callsite\r\n return callsite\r\n }\r\n if (storedCallsite !== undefined) {\r\n return storedCallsite\r\n }\r\n const capturedCallsite = captureTraceCallsite(tracer)\r\n if (capturedCallsite) {\r\n storedCallsite = capturedCallsite\r\n }\r\n return capturedCallsite\r\n },\r\n }\r\n}\r\n\r\nexport function createQueryTracer(\r\n experimental?: AthenaClientExperimentalOptions,\r\n): AthenaQueryTracer | undefined {\r\n const traceOption = experimental?.traceQueries\r\n if (!traceOption) {\r\n return undefined\r\n }\r\n\r\n const logger =\r\n typeof traceOption === 'object' && traceOption.logger ? traceOption.logger : defaultQueryTraceLogger\r\n\r\n const emit = (event: AthenaQueryTraceEvent) => {\r\n try {\r\n logger(event)\r\n } catch (error) {\r\n console.warn('[athena-js][trace] logger failed', error)\r\n }\r\n }\r\n\r\n return {\r\n captureCallsite: captureQueryTraceCallsite,\r\n publishSuccess<T>(\r\n context: AthenaTraceContext,\r\n result: AthenaResult<T>,\r\n durationMs: number,\r\n callsite: AthenaQueryTraceCallsite | null,\r\n ) {\r\n emit({\r\n timestamp: new Date().toISOString(),\r\n durationMs,\r\n operation: context.operation,\r\n endpoint: context.endpoint,\r\n table: context.table,\r\n functionName: context.functionName,\r\n sql: context.sql,\r\n payload: context.payload,\r\n ast: context.ast,\r\n options: context.options,\r\n callsite,\r\n outcome: {\r\n status: result.status,\r\n error: result.error,\r\n errorDetails: result.errorDetails ?? null,\r\n count: result.count ?? null,\r\n data: result.data,\r\n raw: result.raw,\r\n },\r\n })\r\n },\r\n publishFailure(\r\n context: AthenaTraceContext,\r\n error: unknown,\r\n durationMs: number,\r\n callsite: AthenaQueryTraceCallsite | null,\r\n ) {\r\n emit({\r\n timestamp: new Date().toISOString(),\r\n durationMs,\r\n operation: context.operation,\r\n endpoint: context.endpoint,\r\n table: context.table,\r\n functionName: context.functionName,\r\n sql: context.sql,\r\n payload: context.payload,\r\n ast: context.ast,\r\n options: context.options,\r\n callsite,\r\n thrownError: error,\r\n })\r\n },\r\n }\r\n}\r\n\r\nexport async function executeWithQueryTrace<T>(\r\n tracer: AthenaQueryTracer | undefined,\r\n context: AthenaTraceContext,\r\n runner: () => Promise<AthenaResult<T>>,\r\n callsiteOverride?: AthenaQueryTraceCallsite | null,\r\n): Promise<AthenaResult<T>> {\r\n const callsite = tracer ? (callsiteOverride ?? tracer.captureCallsite()) : null\r\n const startedAt = tracer ? Date.now() : 0\r\n try {\r\n const result = await runner()\r\n attachAthenaDebugAst(result, context.ast)\r\n if (tracer) {\r\n tracer.publishSuccess(context, result, Date.now() - startedAt, callsite)\r\n }\r\n return result\r\n } catch (error) {\r\n attachAthenaDebugAst(error, context.ast)\r\n if (tracer) {\r\n tracer.publishFailure(context, error, Date.now() - startedAt, callsite)\r\n }\r\n throw error\r\n }\r\n}\r\n","import type { AthenaModelTarget } from './types.ts'\r\n\r\ninterface ResolveAthenaModelTargetTableNameOptions {\r\n fallbackSchema?: string\r\n fallbackModel?: string\r\n}\r\n\r\nfunction normalizeOptionalName(value: string | undefined): string | undefined {\r\n const normalized = value?.trim()\r\n return normalized ? normalized : undefined\r\n}\r\n\r\nexport function isAthenaModelTarget(value: unknown): value is AthenaModelTarget {\r\n if (!value || typeof value !== 'object') {\r\n return false\r\n }\r\n\r\n const candidate = value as { meta?: { primaryKey?: unknown } }\r\n return Boolean(candidate.meta && Array.isArray(candidate.meta.primaryKey))\r\n}\r\n\r\nexport function resolveAthenaModelTargetTableName(\r\n target: AthenaModelTarget,\r\n options: ResolveAthenaModelTargetTableNameOptions = {},\r\n): string {\r\n const explicitTableName = normalizeOptionalName(target.meta.tableName)\r\n if (explicitTableName) {\r\n return explicitTableName\r\n }\r\n\r\n const schemaName = normalizeOptionalName(target.meta.schema ?? options.fallbackSchema)\r\n const modelName = normalizeOptionalName(target.meta.model ?? options.fallbackModel)\r\n\r\n if (!modelName) {\r\n throw new Error(\r\n 'Athena model target is missing meta.model or meta.tableName. Provide one of those before calling from(model).',\r\n )\r\n }\r\n\r\n return schemaName ? `${schemaName}.${modelName}` : modelName\r\n}\r\n","import type {\r\n AthenaConditionArrayValue,\r\n AthenaConditionCastType,\r\n AthenaConditionOperator,\r\n AthenaConditionValue,\r\n AthenaDeletePayload,\r\n AthenaGatewayCallOptions,\r\n AthenaGatewayConnectionOptions,\r\n AthenaGatewayConnectionResult,\r\n AthenaGatewayCondition,\r\n AthenaGatewayErrorDetails,\r\n AthenaGatewayResponse,\r\n AthenaInsertPayload,\r\n AthenaJsonObject,\r\n AthenaJsonValue,\r\n AthenaRpcCallOptions,\r\n AthenaRpcFilter,\r\n AthenaRpcFilterOperator,\r\n AthenaRpcPayload,\r\n AthenaSortBy,\r\n AthenaUpdatePayload,\r\n} from './gateway/types.ts'\r\nimport type { BackendConfig, BackendType } from './gateway/types.ts'\r\nimport { createAthenaGatewayClient } from './gateway/client.ts'\r\nimport { normalizeAthenaGatewayBaseUrl } from './gateway/url.ts'\r\nimport { quoteQualifiedIdentifier, quoteSelectColumnToken, quoteSelectColumnsExpression } from './sql-identifiers.ts'\r\nimport { createAuthClient } from './auth/client.ts'\r\nimport type { AthenaAuthBindings, AthenaAuthClientConfig } from './auth/types.ts'\r\nimport { normalizeAthenaError, withRetry } from './auxiliaries.ts'\r\nimport type { AthenaOperationContext, NormalizedAthenaError, RetryConfig } from './auxiliaries.ts'\r\nimport { createDbModule } from './db/module.ts'\nimport type { AthenaDbModule } from './db/module.ts'\nimport { createStorageModule } from './storage/module.ts'\nimport type { AthenaStorageClientConfig, AthenaStorageModule } from './storage/module.ts'\nimport { createChatModule } from './chat/module.ts'\nimport type { AthenaChatModule, AthenaChatWebSocketFactory } from './chat/types.ts'\nimport { createAthenaClientBuilder, toBackendConfig } from './client-builder.ts'\nimport { buildSdkHeaderValue } from './sdk-version.ts'\nimport {\r\n compileOrderBy,\r\n compileSelectShape,\r\n compileWhere,\r\n selectShapeUsesRelationSchema,\r\n shouldUseUuidTextComparison,\r\n} from './query-ast.ts'\r\nimport type {\r\n AthenaFindManyOptions,\r\n AthenaFindManyResult,\r\n AthenaSelectShape,\r\n AthenaValidatedSelectShape,\r\n} from './query-ast.ts'\r\nimport {\r\n canUseFindManyAstTransport,\r\n createSelectTransportPlan,\r\n findManyAstWhereRequiresLegacyTransport,\r\n normalizeFindManyAstWhere,\r\n resolvePagination,\r\n toFindManyAstOrder,\r\n} from './query-transport.ts'\r\nimport type { AthenaFindManyAstPayload } from './query-transport.ts'\r\nimport {\r\n buildDeleteDebugAst,\r\n buildFindManyCompiledDebugAst,\r\n buildFindManyDirectDebugAst,\r\n buildInsertDebugAst,\r\n buildRawQueryDebugAst,\r\n buildRpcDebugAst,\r\n buildSelectDebugAst,\r\n buildUpdateDebugAst,\r\n buildUpsertDebugAst,\r\n} from './query-debug-ast.ts'\r\nimport type { AthenaQueryDebugAst } from './query-debug-ast.ts'\r\nimport {\r\n captureTraceCallsite,\r\n createQueryTracer,\r\n createTraceCallsiteStore,\r\n executeWithQueryTrace,\r\n} from './query-tracing.ts'\r\nimport type {\r\n AthenaQueryTracer,\r\n} from './query-tracing.ts'\r\nimport {\r\n isAthenaModelTarget,\r\n resolveAthenaModelTargetTableName,\r\n} from './schema/model-target.ts'\r\nimport type {\r\n AthenaSelectInput,\r\n AthenaTypecheckedColumnKey,\r\n AthenaValidatedSelectInput,\r\n} from './select-column-types.ts'\r\nimport type {\r\n AthenaModelTarget,\r\n InsertOf,\r\n RowOf,\r\n UpdateOf,\r\n} from './schema/types.ts'\r\n\r\nexport interface AthenaResult<T> {\r\n data: T | null\r\n error: AthenaResultError | null\r\n statusText?: string | null\r\n /**\r\n * @deprecated Prefer `error?.gatewayCode`, `error?.hint`, and related fields on `error`.\r\n */\r\n errorDetails?: AthenaGatewayErrorDetails | null\r\n status: number\r\n count?: number | null\r\n raw: unknown\r\n}\r\n\r\nexport interface AthenaResultError {\n message: string\r\n code: string | null\r\n athenaCode: NormalizedAthenaError['code']\r\n gatewayCode?: AthenaGatewayErrorDetails['code'] | null\r\n kind: NormalizedAthenaError['kind']\r\n category: NormalizedAthenaError['category']\r\n retryable: boolean\r\n details: unknown | null\r\n hint: string | null\r\n status: number\r\n statusText: string | null\r\n constraint?: string\r\n table?: string\r\n operation?: string\r\n endpoint?: AthenaGatewayErrorDetails['endpoint']\r\n method?: AthenaGatewayErrorDetails['method']\r\n requestId?: string\r\n cause?: string\r\n raw: unknown\n}\n\nexport type AthenaRequestService = 'db' | 'auth' | 'chat' | 'storage'\nexport type AthenaRequestMethod =\n | 'GET'\n | 'POST'\n | 'PUT'\n | 'PATCH'\n | 'DELETE'\n | 'HEAD'\n | 'OPTIONS'\n\nexport interface AthenaRequestQueryValueMap {\n [key: string]:\n | string\n | number\n | boolean\n | null\n | undefined\n | Array<string | number | boolean | null | undefined>\n}\n\nexport interface AthenaRequestOptions {\n service?: AthenaRequestService\n url?: string\n path?: string\n method?: AthenaRequestMethod\n headers?: Record<string, string>\n query?: AthenaRequestQueryValueMap\n body?: RequestInit['body'] | Record<string, unknown> | unknown[] | null\n signal?: AbortSignal\n credentials?: RequestInit['credentials']\n responseType?: 'json' | 'text' | 'response'\n}\n\nexport interface AthenaRequestResponse<T = unknown> {\n ok: boolean\n status: number\n statusText: string\n headers: Headers\n data: T | string | null\n raw: Response\n}\n\r\nexport interface AthenaClientExperimentalOptions {\r\n /**\r\n * @deprecated Failed `AthenaResult` values now include normalized structured `error`\r\n * envelopes by default. This flag is retained as a no-op compatibility switch.\r\n */\r\n enableErrorNormalization?: boolean\r\n /**\r\n * Retry retryable read failures (`select`, `findMany`, `query`) with a fixed internal policy.\r\n *\r\n * Applies two additional attempts with exponential backoff and jitter.\r\n */\r\n retryReads?: boolean\r\n /**\r\n * Emit execution diagnostics for every query/mutation/RPC invocation.\r\n * Includes payload, synthesized SQL, full outcome, and best-effort callsite metadata.\r\n */\r\n traceQueries?: boolean | AthenaQueryTraceOptions\r\n /**\r\n * Build and attach a normalized operation AST for runtime debugging.\r\n *\r\n * When enabled, successful Athena results expose a non-enumerable debug AST\r\n * that can be read with `getAthenaDebugAst(...)`. If tracing is also enabled,\r\n * the same AST is included on emitted trace events.\r\n */\r\n debugAst?: boolean\r\n /**\r\n * Compile-time opt-in for validating simple `select(...)`, `order(...)`, and\r\n * RPC filter column names against known row keys.\r\n *\r\n * This flag is type-only. It does not change runtime request behavior.\r\n */\r\n typecheckColumns?: boolean\r\n /**\r\n * Send the original `findMany(...)` AST body for clean object-select reads.\r\n * This requires gateway support and falls back to legacy compiled transport\r\n * when a chain carries filter/pagination state that the AST payload cannot\r\n * represent losslessly yet.\r\n */\r\n findManyAst?: boolean\r\n /**\r\n * Expose the experimental `client.storage.*` bindings for Athena storage APIs.\r\n */\r\n athenaStorageBackend?: boolean\r\n /**\r\n * Optional storage SDK runtime hooks. Only used when `athenaStorageBackend` is enabled.\r\n */\r\n storage?: AthenaStorageClientConfig\r\n}\r\n\r\nexport interface AthenaQueryTraceOptions {\r\n /**\r\n * Custom sink for trace events. Defaults to console.info.\r\n */\r\n logger?: (event: AthenaQueryTraceEvent) => void\r\n}\r\n\r\nexport interface AthenaQueryTraceCallsite {\r\n filePath: string\r\n fileName: string\r\n line: number\r\n column: number\r\n frame?: string\r\n functionName?: string\r\n}\r\n\r\nexport interface AthenaQueryTraceEvent {\r\n timestamp: string\r\n durationMs: number\r\n operation: 'select' | 'insert' | 'upsert' | 'update' | 'delete' | 'rpc' | 'query'\r\n endpoint: '/gateway/fetch' | '/gateway/insert' | '/gateway/update' | '/gateway/delete' | '/gateway/rpc' | '/gateway/query' | `/rpc/${string}`\r\n table?: string\r\n functionName?: string\r\n sql: string\r\n payload: unknown\r\n ast?: AthenaQueryDebugAst\r\n options?: AthenaGatewayCallOptions | AthenaRpcCallOptions\r\n callsite: AthenaQueryTraceCallsite | null\r\n outcome?: {\r\n status: number\r\n error: AthenaResultError | null\r\n errorDetails?: AthenaGatewayErrorDetails | null\r\n count?: number | null\r\n data: unknown\r\n raw: unknown\r\n }\r\n thrownError?: unknown\r\n}\r\n\r\ntype TableBuilderState = {\r\n conditions: AthenaGatewayCondition[]\r\n limit?: number\r\n offset?: number\r\n order?: AthenaSortBy\r\n currentPage?: number\r\n pageSize?: number\r\n totalPages?: number\r\n}\r\n\r\ntype ConditionCastHints = {\r\n valueCast?: AthenaConditionCastType\r\n columnCast?: AthenaConditionCastType\r\n}\r\n\r\ntype MutationSingleResult<Result> = Result extends Array<infer Item> ? Item | null : Result | null\r\ntype MutationResultRow<Result> = Result extends Array<infer Item> ? Item : Result\r\ntype AthenaRowShape = Record<string, AthenaJsonValue | undefined>\r\ntype FilterColumnKey<Row> = Extract<keyof NonNullable<Row>, string>\r\ntype ResolvedFilterColumnKey<Row> = [FilterColumnKey<Row>] extends [never] ? string : FilterColumnKey<Row>\r\ntype SelectColumnsFor<\r\n Row,\r\n TStrict extends boolean,\r\n TValue extends AthenaSelectInput,\r\n> = TStrict extends true ? AthenaValidatedSelectInput<Row, TValue> : TValue\r\nconst DEFAULT_COLUMNS = '*'\nconst SAFE_CAST_PATTERN = /^[a-z_][a-z0-9_]*(?:\\[\\])?$/i\nconst ATHENA_NORMALIZED_ERROR_KEY = '__athenaNormalizedError' as const\nconst SDK_NAME = 'xylex-group/athena'\n\r\ntype SelectDebugAstFactory = (input: {\r\n tableName: string\r\n columns: string | string[]\r\n executionState: TableBuilderState\r\n plan: ReturnType<typeof createSelectTransportPlan>\r\n}) => AthenaQueryDebugAst\r\n\r\nexport interface MutationQuery<\r\n Result,\r\n Row = MutationResultRow<Result>,\r\n TStrict extends boolean = false,\r\n> extends PromiseLike<AthenaResult<Result>> {\r\n select<const TColumns extends AthenaSelectInput = string>(\r\n columns?: SelectColumnsFor<Row, TStrict, TColumns>,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<Result>>\r\n returning<const TColumns extends AthenaSelectInput = string>(\r\n columns?: SelectColumnsFor<Row, TStrict, TColumns>,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<Result>>\r\n single<const TColumns extends AthenaSelectInput = string>(\r\n columns?: SelectColumnsFor<Row, TStrict, TColumns>,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<MutationSingleResult<Result>>>\r\n maybeSingle<const TColumns extends AthenaSelectInput = string>(\r\n columns?: SelectColumnsFor<Row, TStrict, TColumns>,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<MutationSingleResult<Result>>>\r\n then<TResult1 = AthenaResult<Result>, TResult2 = never>(\r\n onfulfilled?: ((value: AthenaResult<Result>) => TResult1 | PromiseLike<TResult1>) | undefined | null,\r\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | undefined | null,\r\n ): Promise<TResult1 | TResult2>\r\n catch<TResult = never>(\r\n onrejected?: ((reason: unknown) => TResult | PromiseLike<TResult>) | undefined | null,\r\n ): Promise<AthenaResult<Result> | TResult>\r\n finally(onfinally?: (() => void) | undefined | null): Promise<AthenaResult<Result>>\r\n}\r\n\r\nfunction formatResult<T>(response: AthenaGatewayResponse<T>): AthenaResult<T> {\r\n const result: AthenaResult<T> = {\r\n data: response.data ?? null,\r\n error: null,\r\n errorDetails: response.errorDetails ?? null,\r\n status: response.status,\r\n statusText: response.statusText ?? null,\r\n raw: response.raw,\r\n }\r\n if (response.count !== undefined) {\r\n result.count = response.count\r\n }\r\n return result\r\n}\r\n\r\ntype AthenaResultFormatter = <T>(\r\n response: AthenaGatewayResponse<T>,\r\n context?: AthenaOperationContext,\r\n) => AthenaResult<T>\r\n\r\nconst EXPERIMENTAL_READ_RETRY_CONFIG: RetryConfig = {\r\n retries: 2,\r\n baseDelayMs: 100,\r\n maxDelayMs: 1_000,\r\n backoff: 'exponential',\r\n jitter: true,\r\n}\r\n\r\nfunction attachNormalizedError<T>(\r\n result: AthenaResult<T>,\r\n normalizedError: NormalizedAthenaError,\r\n): void {\r\n Object.defineProperty(result, ATHENA_NORMALIZED_ERROR_KEY, {\r\n value: normalizedError,\r\n enumerable: false,\r\n configurable: true,\r\n writable: false,\r\n })\r\n}\r\n\r\nfunction createResultFormatter(\r\n experimental?: AthenaClientExperimentalOptions,\r\n): AthenaResultFormatter {\r\n void experimental\r\n return <T>(response: AthenaGatewayResponse<T>, context?: AthenaOperationContext): AthenaResult<T> => {\r\n const result = formatResult(response)\r\n if (response.error == null && response.errorDetails == null) {\r\n return result\r\n }\r\n const normalizedError = normalizeAthenaError(\r\n {\r\n ...result,\r\n error: response.error ?? response.errorDetails?.message ?? null,\r\n },\r\n context,\r\n )\r\n result.error = createResultError(response, result, normalizedError)\r\n attachNormalizedError(result, normalizedError)\r\n return result\r\n }\r\n}\r\n\r\nasync function executeExperimentalRead<T>(\r\n experimental: AthenaClientExperimentalOptions | undefined,\r\n runner: () => Promise<AthenaResult<T>>,\r\n): Promise<AthenaResult<T>> {\r\n if (!experimental?.retryReads) {\r\n return runner()\r\n }\r\n\r\n let lastRetryableResult: AthenaResult<T> | undefined\r\n let lastRetrySignal: AthenaResultError | null = null\r\n try {\r\n return await withRetry(\r\n {\r\n ...EXPERIMENTAL_READ_RETRY_CONFIG,\r\n shouldRetry: error =>\r\n error === lastRetrySignal || normalizeAthenaError(error).retryable,\r\n },\r\n async () => {\r\n const result = await runner()\r\n if (result.error?.retryable) {\r\n lastRetryableResult = result\r\n lastRetrySignal = result.error\r\n throw lastRetrySignal\r\n }\r\n return result\r\n },\r\n )\r\n } catch (error) {\r\n if (lastRetryableResult && error === lastRetrySignal) {\r\n return lastRetryableResult\r\n }\r\n throw error\r\n }\r\n}\r\n\r\nfunction isRecord(value: unknown): value is Record<string, unknown> {\r\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\r\n}\r\n\r\nfunction firstNonEmptyString(...values: unknown[]): string | undefined {\r\n for (const value of values) {\r\n if (typeof value === 'string' && value.trim().length > 0) {\r\n return value.trim()\r\n }\r\n }\r\n return undefined\r\n}\r\n\r\nfunction resolveStructuredErrorPayload(raw: unknown): Record<string, unknown> | null {\r\n if (!isRecord(raw)) return null\r\n return isRecord(raw.error) ? raw.error : raw\r\n}\r\n\r\nfunction resolveStructuredErrorDetails(payload: Record<string, unknown> | null, message: string): unknown | null {\r\n if (!payload || !('details' in payload)) {\r\n return null\r\n }\r\n const details = payload.details\r\n if (details == null) {\r\n return null\r\n }\r\n if (typeof details === 'string' && details.trim() === message.trim()) {\r\n return null\r\n }\r\n return details\r\n}\r\n\r\nfunction createResultError<T>(\r\n response: AthenaGatewayResponse<T>,\r\n result: AthenaResult<T>,\r\n normalized: NormalizedAthenaError,\r\n): AthenaResultError {\r\n const rawRecord = isRecord(response.raw) ? response.raw : null\r\n const payload = resolveStructuredErrorPayload(response.raw)\r\n const message =\r\n firstNonEmptyString(\r\n response.error,\r\n payload?.message,\r\n payload?.error,\r\n payload?.details,\r\n response.errorDetails?.message,\r\n normalized.message,\r\n ) ?? normalized.message\r\n const statusText =\r\n firstNonEmptyString(response.statusText, rawRecord?.statusText) ?? null\r\n const hint =\r\n firstNonEmptyString(payload?.hint, response.errorDetails?.hint) ?? null\r\n const code =\r\n firstNonEmptyString(payload?.code) ??\r\n normalized.code\r\n const details =\r\n resolveStructuredErrorDetails(payload, message) ??\r\n response.errorDetails?.cause ??\r\n null\r\n\r\n return {\r\n message,\r\n code,\r\n athenaCode: normalized.code,\r\n gatewayCode: response.errorDetails?.code ?? null,\r\n kind: normalized.kind,\r\n category: normalized.category,\r\n retryable: normalized.retryable,\r\n details,\r\n hint,\r\n status: result.status,\r\n statusText,\r\n constraint: normalized.constraint,\r\n table: normalized.table,\r\n operation: normalized.operation,\r\n endpoint: response.errorDetails?.endpoint,\r\n method: response.errorDetails?.method,\r\n requestId: response.errorDetails?.requestId,\r\n cause: response.errorDetails?.cause,\r\n raw: result.raw,\r\n }\r\n}\r\n\r\n\r\nfunction toSingleResult<Result>(response: AthenaResult<Result>): AthenaResult<MutationSingleResult<Result>> {\r\n const payload = response.data\r\n const singleData =\r\n Array.isArray(payload) ? (payload.length ? payload[0] : null) : payload ?? null\r\n return {\r\n ...response,\r\n data: singleData as MutationSingleResult<Result>,\r\n }\r\n}\r\n\r\nfunction mergeOptions<T extends { headers?: Record<string, string> }>(\r\n ...options: Array<T | undefined>\r\n): T | undefined {\r\n return options.reduce<T | undefined>((acc, next) => {\r\n if (!next) return acc\r\n const merged = { ...(acc ?? {}), ...next } as T\r\n if (acc?.headers || next.headers) {\r\n merged.headers = {\r\n ...(acc?.headers ?? {}),\r\n ...(next.headers ?? {}),\r\n }\r\n }\r\n return merged\r\n }, undefined)\r\n}\r\n\r\nfunction asAthenaJsonObject(value: unknown): AthenaJsonObject {\r\n return value as unknown as AthenaJsonObject\r\n}\r\n\r\nfunction asAthenaJsonObjectArray(values: unknown[]): AthenaJsonObject[] {\n return values as unknown as AthenaJsonObject[]\n}\n\nfunction parseArbitraryResponseBody(rawText: string, contentType: string | null) {\n if (!rawText) {\n return null as unknown\n }\n\n const contentTypeSuggestsJson =\n contentType?.toLowerCase().includes('application/json') ?? false\n const looksJson =\n contentTypeSuggestsJson || rawText.startsWith('{') || rawText.startsWith('[')\n\n if (!looksJson) {\n return rawText as unknown\n }\n\n try {\n return JSON.parse(rawText) as unknown\n } catch {\n return rawText as unknown\n }\n}\n\nfunction toRequestQueryString(query?: AthenaRequestQueryValueMap): string {\n if (!query) {\n return ''\n }\n\n const params = new URLSearchParams()\n for (const [key, value] of Object.entries(query)) {\n if (value === undefined || value === null) {\n continue\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n if (item !== undefined && item !== null) {\n params.append(key, String(item))\n }\n }\n continue\n }\n\n params.set(key, String(value))\n }\n\n const encoded = params.toString()\n return encoded ? `?${encoded}` : ''\n}\n\r\nfunction normalizeSelectColumnsInput(columns?: AthenaSelectInput): string | string[] | undefined {\r\n if (columns === undefined) {\r\n return undefined\r\n }\r\n if (typeof columns === 'string') {\r\n return columns\r\n }\r\n return [...columns]\r\n}\r\n\r\nfunction createMutationQuery<\r\n Result,\r\n Row = MutationResultRow<Result>,\r\n TStrict extends boolean = false,\r\n>(\r\n executor: (\r\n columns?: string | string[],\r\n options?: AthenaGatewayCallOptions,\r\n callsite?: AthenaQueryTraceCallsite | null,\r\n ) => Promise<AthenaResult<Result>>,\r\n defaultColumns: AthenaSelectInput | null = DEFAULT_COLUMNS,\r\n tracer?: AthenaQueryTracer,\r\n initialCallsite?: AthenaQueryTraceCallsite | null,\r\n): MutationQuery<Result, Row, TStrict> {\r\n let selectedColumns: AthenaSelectInput | undefined = defaultColumns === null ? undefined : defaultColumns\r\n let selectedOptions: AthenaGatewayCallOptions | undefined\r\n let promise: Promise<AthenaResult<Result>> | null = null\r\n const callsiteStore = createTraceCallsiteStore(tracer, initialCallsite)\r\n\r\n const run = (\r\n columns?: AthenaSelectInput,\r\n options?: AthenaGatewayCallOptions,\r\n callsite?: AthenaQueryTraceCallsite | null,\r\n ) => {\r\n const payloadColumns = columns ?? selectedColumns\r\n const payloadOptions = options ?? selectedOptions\r\n if (!promise) {\r\n promise = executor(\r\n normalizeSelectColumnsInput(payloadColumns),\r\n payloadOptions,\r\n callsiteStore.resolve(callsite),\r\n )\r\n }\r\n return promise\r\n }\r\n\r\n const mutationQuery: MutationQuery<Result, Row, TStrict> = {\r\n select(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\r\n selectedColumns = columns\r\n selectedOptions = options ?? selectedOptions\r\n return run(columns, options, captureTraceCallsite(tracer))\r\n },\r\n returning(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\r\n return mutationQuery.select(columns, options)\r\n },\r\n single(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\r\n selectedColumns = columns\r\n selectedOptions = options ?? selectedOptions\r\n return run(columns, options, captureTraceCallsite(tracer)).then(toSingleResult)\r\n },\r\n maybeSingle(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\r\n return mutationQuery.single(columns, options)\r\n },\r\n then(onfulfilled, onrejected) {\r\n return run(selectedColumns, selectedOptions).then(onfulfilled, onrejected)\r\n },\r\n catch(onrejected) {\r\n return run(selectedColumns, selectedOptions).catch(onrejected)\r\n },\r\n finally(onfinally) {\r\n return run(selectedColumns, selectedOptions).finally(onfinally)\r\n },\r\n }\r\n\r\n return mutationQuery\r\n}\r\n\r\nexport interface OrderOptions {\r\n ascending?: boolean\r\n}\r\n\r\n/** Shared filter chain - supports eq, limit, etc. in any order relative to select/update */\r\ninterface FilterChain<Self, Row> {\r\n eq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n eqCast(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue, cast: AthenaConditionCastType): Self\r\n eqUuid(column: ResolvedFilterColumnKey<Row>, value: string): Self\r\n match(filters: Partial<Record<ResolvedFilterColumnKey<Row>, AthenaConditionValue>>): Self\r\n range(from: number, to: number): Self\r\n limit(count: number): Self\r\n offset(count: number): Self\r\n currentPage(value: number): Self\r\n pageSize(value: number): Self\r\n totalPages(value: number): Self\r\n order(column: ResolvedFilterColumnKey<Row>, options?: OrderOptions): Self\r\n gt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n gte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n lt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n lte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n neq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n like(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n ilike(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n is(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n in(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue): Self\r\n contains(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue): Self\r\n containedBy(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue): Self\r\n not(\r\n columnOrExpression: ResolvedFilterColumnKey<Row> | string,\r\n operator?: AthenaConditionOperator,\r\n value?: AthenaConditionValue,\r\n ): Self\r\n or(expression: string): Self\r\n}\r\n\r\n/** Chain returned by select() - supports filters and single/maybeSingle before execution */\r\nexport interface SelectChain<Row, SelectedRow = Row, TStrict extends boolean = false>\r\n extends FilterChain<SelectChain<Row, SelectedRow, TStrict>, Row>, PromiseLike<AthenaResult<SelectedRow[]>> {\r\n single<\r\n T = SelectedRow,\r\n const TColumns extends AthenaSelectInput = string,\r\n >(\r\n columns?: SelectColumnsFor<Row, TStrict, TColumns>,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<T | null>>\r\n maybeSingle<\r\n T = SelectedRow,\r\n const TColumns extends AthenaSelectInput = string,\r\n >(\r\n columns?: SelectColumnsFor<Row, TStrict, TColumns>,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<T | null>>\r\n}\r\n\r\n/** Chain returned by update() - supports filters before execution, plus select/returning */\r\nexport interface UpdateChain<Row, TStrict extends boolean = false>\r\n extends FilterChain<UpdateChain<Row, TStrict>, Row>, MutationQuery<Row[], Row, TStrict> {}\r\n\r\ninterface RpcFilterChain<Self, Row, TStrict extends boolean = false> {\r\n eq(column: AthenaTypecheckedColumnKey<Row, TStrict>, value: AthenaConditionValue): Self\r\n neq(column: AthenaTypecheckedColumnKey<Row, TStrict>, value: AthenaConditionValue): Self\r\n gt(column: AthenaTypecheckedColumnKey<Row, TStrict>, value: AthenaConditionValue): Self\r\n gte(column: AthenaTypecheckedColumnKey<Row, TStrict>, value: AthenaConditionValue): Self\r\n lt(column: AthenaTypecheckedColumnKey<Row, TStrict>, value: AthenaConditionValue): Self\r\n lte(column: AthenaTypecheckedColumnKey<Row, TStrict>, value: AthenaConditionValue): Self\r\n like(column: AthenaTypecheckedColumnKey<Row, TStrict>, value: AthenaConditionValue): Self\r\n ilike(column: AthenaTypecheckedColumnKey<Row, TStrict>, value: AthenaConditionValue): Self\r\n is(column: AthenaTypecheckedColumnKey<Row, TStrict>, value: AthenaConditionValue): Self\r\n in(column: AthenaTypecheckedColumnKey<Row, TStrict>, values: AthenaConditionArrayValue): Self\r\n}\r\n\r\nexport interface RpcOrderOptions {\r\n ascending?: boolean\r\n}\r\n\r\nexport interface RpcQueryBuilder<Row, TStrict extends boolean = false>\r\n extends RpcFilterChain<RpcQueryBuilder<Row, TStrict>, Row, TStrict>, PromiseLike<AthenaResult<Row[]>> {\r\n select<const TColumns extends AthenaSelectInput = string>(\r\n columns?: SelectColumnsFor<Row, TStrict, TColumns>,\r\n options?: AthenaRpcCallOptions,\r\n ): Promise<AthenaResult<Row[]>>\r\n single<\r\n T = Row,\r\n const TColumns extends AthenaSelectInput = string,\r\n >(\r\n columns?: SelectColumnsFor<Row, TStrict, TColumns>,\r\n options?: AthenaRpcCallOptions,\r\n ): Promise<AthenaResult<T | null>>\r\n maybeSingle<\r\n T = Row,\r\n const TColumns extends AthenaSelectInput = string,\r\n >(\r\n columns?: SelectColumnsFor<Row, TStrict, TColumns>,\r\n options?: AthenaRpcCallOptions,\r\n ): Promise<AthenaResult<T | null>>\r\n order(column: AthenaTypecheckedColumnKey<Row, TStrict>, options?: RpcOrderOptions): RpcQueryBuilder<Row, TStrict>\r\n limit(count: number): RpcQueryBuilder<Row, TStrict>\r\n offset(count: number): RpcQueryBuilder<Row, TStrict>\r\n range(from: number, to: number): RpcQueryBuilder<Row, TStrict>\r\n}\r\n\r\nexport interface AthenaFromOptions {\r\n schema?: string\r\n}\r\n\r\nexport interface TableQueryBuilder<\r\n Row,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n TContext = unknown,\r\n TStrict extends boolean = false,\r\n> extends FilterChain<TableQueryBuilder<Row, Insert, Update, TContext, TStrict>, Row> {\r\n select<\r\n T = Row,\r\n const TColumns extends AthenaSelectInput = string,\r\n >(\r\n columns?: SelectColumnsFor<Row, TStrict, TColumns>,\r\n options?: AthenaGatewayCallOptions,\r\n ): SelectChain<Row, T, TStrict>\r\n findMany<const TSelect extends AthenaSelectShape>(\r\n options: AthenaFindManyOptions<Row, TSelect> & {\r\n select: AthenaValidatedSelectShape<TSelect>\r\n },\r\n ): Promise<AthenaResult<Array<AthenaFindManyResult<Row, TSelect, TContext>>>>\r\n insert(values: Insert, options?: AthenaGatewayCallOptions): MutationQuery<Row, Row, TStrict>\r\n insert(values: Insert[], options?: AthenaGatewayCallOptions): MutationQuery<Row[], Row, TStrict>\r\n upsert(\r\n values: Insert,\r\n options?: AthenaGatewayCallOptions & {\r\n updateBody?: Update\r\n onConflict?: string | string[]\r\n },\r\n ): MutationQuery<Row, Row, TStrict>\r\n upsert(\r\n values: Insert[],\r\n options?: AthenaGatewayCallOptions & {\r\n updateBody?: Update\r\n onConflict?: string | string[]\r\n },\r\n ): MutationQuery<Row[], Row, TStrict>\r\n update(values: Update, options?: AthenaGatewayCallOptions): UpdateChain<Row, TStrict>\r\n delete(options?: AthenaGatewayCallOptions & { resourceId?: string }): MutationQuery<Row | null, Row, TStrict>\r\n single<\r\n T = Row,\r\n const TColumns extends AthenaSelectInput = string,\r\n >(\r\n columns?: SelectColumnsFor<Row, TStrict, TColumns>,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<T | null>>\r\n maybeSingle<\r\n T = Row,\r\n const TColumns extends AthenaSelectInput = string,\r\n >(\r\n columns?: SelectColumnsFor<Row, TStrict, TColumns>,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<T | null>>\r\n reset(): TableQueryBuilder<Row, Insert, Update, TContext, TStrict>\r\n}\r\n\r\nfunction getResourceId(state: TableBuilderState): string | undefined {\r\n const candidate = state.conditions.find(\r\n condition =>\r\n condition.operator === 'eq' &&\r\n (condition.column === 'resource_id' || condition.column === 'id'),\r\n )\r\n return candidate?.value?.toString()\r\n}\r\n\r\nfunction stringifyFilterValue(value: AthenaConditionValue | AthenaConditionArrayValue | string): string {\r\n if (Array.isArray(value)) {\r\n return value.join(',')\r\n }\r\n return String(value)\r\n}\r\n\r\nfunction normalizeCast(cast: AthenaConditionCastType): string {\r\n const normalized = cast.trim().toLowerCase()\r\n if (!SAFE_CAST_PATTERN.test(normalized)) {\r\n throw new Error(`Invalid cast type \"${cast}\"`)\r\n }\r\n return normalized\r\n}\r\n\r\nfunction escapeSqlStringLiteral(value: string): string {\r\n return value.replace(/'/g, \"''\")\r\n}\r\n\r\nfunction toSqlLiteral(value: AthenaConditionValue): string {\r\n if (value === null) return 'NULL'\r\n if (typeof value === 'number') return Number.isFinite(value) ? String(value) : 'NULL'\r\n if (typeof value === 'boolean') return value ? 'TRUE' : 'FALSE'\r\n return `'${escapeSqlStringLiteral(value)}'`\r\n}\r\n\r\nfunction withCast(expression: string, cast?: AthenaConditionCastType): string {\r\n if (!cast) return expression\r\n return `${expression}::${normalizeCast(cast)}`\r\n}\r\n\r\nfunction buildSelectColumnsClause(columns: string | string[]): string {\r\n if (Array.isArray(columns)) {\r\n return columns.map(column => quoteSelectColumnToken(column)).join(', ')\r\n }\r\n return quoteSelectColumnsExpression(columns)\r\n}\r\n\r\ninterface ParsedIdentifierSegment {\r\n normalizedValue: string\r\n}\r\n\r\nfunction parseIdentifierSegment(input: string): ParsedIdentifierSegment | null {\r\n const trimmed = input.trim()\r\n if (!trimmed) return null\r\n\r\n if (!trimmed.startsWith('\"')) {\r\n return {\r\n normalizedValue: trimmed.toLowerCase(),\r\n }\r\n }\r\n\r\n let value = ''\r\n let index = 1\r\n let closed = false\r\n while (index < trimmed.length) {\r\n const char = trimmed[index]\r\n const next = index + 1 < trimmed.length ? trimmed[index + 1] : ''\r\n if (char === '\"' && next === '\"') {\r\n value += '\"'\r\n index += 2\r\n continue\r\n }\r\n if (char === '\"') {\r\n closed = true\r\n index += 1\r\n break\r\n }\r\n value += char\r\n index += 1\r\n }\r\n\r\n if (!closed || trimmed.slice(index).trim().length > 0 || !value.trim()) {\r\n return null\r\n }\r\n\r\n return {\r\n normalizedValue: value,\r\n }\r\n}\r\n\r\nfunction splitQualifiedTableName(tableName: string): { schemaSegment: string } | null {\r\n const trimmed = tableName.trim()\r\n let inQuotes = false\r\n for (let index = 0; index < trimmed.length; index += 1) {\r\n const char = trimmed[index]\r\n const next = index + 1 < trimmed.length ? trimmed[index + 1] : ''\r\n if (char === '\"') {\r\n if (inQuotes && next === '\"') {\r\n index += 1\r\n continue\r\n }\r\n inQuotes = !inQuotes\r\n continue\r\n }\r\n if (char === '.' && !inQuotes) {\r\n const schemaSegment = trimmed.slice(0, index).trim()\r\n const tableSegment = trimmed.slice(index + 1).trim()\r\n if (!schemaSegment || !tableSegment) {\r\n return null\r\n }\r\n return { schemaSegment }\r\n }\r\n }\r\n return null\r\n}\r\n\r\nfunction resolveTableNameForCall(tableName: string, schema: string | undefined): string {\r\n if (!schema) return tableName\r\n const normalizedSchema = schema.trim()\r\n if (!normalizedSchema) {\r\n throw new Error('schema option must be a non-empty string')\r\n }\r\n const normalizedTableName = tableName.trim()\r\n const parsedSchema = parseIdentifierSegment(normalizedSchema)\r\n if (!parsedSchema) {\r\n throw new Error('schema option must be a non-empty string')\r\n }\r\n const qualified = splitQualifiedTableName(normalizedTableName)\r\n if (qualified) {\r\n const parsedTableSchema = parseIdentifierSegment(qualified.schemaSegment)\r\n const sameSchema = parsedTableSchema\r\n ? parsedTableSchema.normalizedValue === parsedSchema.normalizedValue\r\n : normalizedTableName.startsWith(`${normalizedSchema}.`)\r\n if (sameSchema) {\r\n return normalizedTableName\r\n }\r\n throw new Error(\r\n `schema option \"${normalizedSchema}\" conflicts with schema-qualified table \"${normalizedTableName}\"`,\r\n )\r\n }\r\n return `${normalizedSchema}.${normalizedTableName}`\r\n}\r\n\r\nfunction conditionToSqlClause(condition: AthenaGatewayCondition): string | null {\r\n if (!condition.column) return null\r\n const column = withCast(quoteQualifiedIdentifier(condition.column), condition.column_cast)\r\n const value = condition.value\r\n const sqlOperator = {\r\n eq: '=',\r\n neq: '!=',\r\n gt: '>',\r\n gte: '>=',\r\n lt: '<',\r\n lte: '<=',\r\n like: 'LIKE',\r\n ilike: 'ILIKE',\r\n } as const\r\n\r\n switch (condition.operator) {\r\n case 'eq':\r\n case 'neq':\r\n case 'gt':\r\n case 'gte':\r\n case 'lt':\r\n case 'lte':\r\n case 'like':\r\n case 'ilike': {\r\n if (Array.isArray(value) || value === undefined) return null\r\n const rhs = withCast(toSqlLiteral(value), condition.value_cast)\r\n return `${column} ${sqlOperator[condition.operator]} ${rhs}`\r\n }\r\n case 'is': {\r\n if (value === null) return `${column} IS NULL`\r\n if (value === true) return `${column} IS TRUE`\r\n if (value === false) return `${column} IS FALSE`\r\n return null\r\n }\r\n case 'in': {\r\n if (!Array.isArray(value)) return null\r\n if (value.length === 0) return 'FALSE'\r\n const values = value.map(item => withCast(toSqlLiteral(item), condition.value_cast))\r\n return `${column} IN (${values.join(', ')})`\r\n }\r\n default:\r\n return null\r\n }\r\n}\r\n\r\nfunction buildTypedSelectQuery(input: {\r\n tableName: string\r\n columns: string | string[]\r\n conditions: AthenaGatewayCondition[]\r\n limit?: number\r\n offset?: number\r\n currentPage?: number\r\n pageSize?: number\r\n order?: AthenaSortBy\r\n}): string | null {\r\n const whereClauses: string[] = []\r\n for (const condition of input.conditions) {\r\n const clause = conditionToSqlClause(condition)\r\n if (!clause) return null\r\n whereClauses.push(clause)\r\n }\r\n\r\n let limit = input.limit\r\n let offset = input.offset\r\n if (limit === undefined && input.pageSize !== undefined) {\r\n limit = input.pageSize\r\n }\r\n if (\r\n offset === undefined &&\r\n input.pageSize !== undefined &&\r\n input.currentPage !== undefined &&\r\n input.currentPage > 0\r\n ) {\r\n offset = (input.currentPage - 1) * input.pageSize\r\n }\r\n\r\n const sqlParts = [\r\n `SELECT ${buildSelectColumnsClause(input.columns)} FROM ${quoteQualifiedIdentifier(input.tableName)}`,\r\n ]\r\n\r\n if (whereClauses.length > 0) {\r\n sqlParts.push(`WHERE ${whereClauses.join(' AND ')}`)\r\n }\r\n\r\n if (input.order?.field) {\r\n const direction = input.order.direction === 'descending' ? 'DESC' : 'ASC'\r\n sqlParts.push(`ORDER BY ${quoteQualifiedIdentifier(input.order.field)} ${direction}`)\r\n }\r\n\r\n if (limit !== undefined) {\r\n sqlParts.push(`LIMIT ${Math.max(0, Math.trunc(limit))}`)\r\n }\r\n\r\n if (offset !== undefined) {\r\n sqlParts.push(`OFFSET ${Math.max(0, Math.trunc(offset))}`)\r\n }\r\n\r\n return `${sqlParts.join(' ')};`\r\n}\r\n\r\nfunction sanitizeSqlComment(comment: string): string {\r\n return comment.replace(/\\*\\//g, '* /')\r\n}\r\n\r\nfunction toSqlJsonLiteral(value: AthenaJsonValue | undefined): string {\r\n if (value === undefined) return 'DEFAULT'\r\n if (\r\n value === null ||\r\n typeof value === 'string' ||\r\n typeof value === 'number' ||\r\n typeof value === 'boolean'\r\n ) {\r\n return toSqlLiteral(value)\r\n }\r\n return `'${escapeSqlStringLiteral(JSON.stringify(value))}'::jsonb`\r\n}\r\n\r\nfunction conditionToDebugSqlClause(condition: AthenaGatewayCondition): string {\r\n const exact = conditionToSqlClause(condition)\r\n if (exact) return exact\r\n\r\n const rawCondition = sanitizeSqlComment(JSON.stringify(condition))\r\n if (!condition.column) {\r\n return `TRUE /* unsupported condition: ${rawCondition} */`\r\n }\r\n\r\n const column = withCast(quoteQualifiedIdentifier(condition.column), condition.column_cast)\r\n const value = condition.value\r\n const rhs = withCast(toSqlJsonLiteral(value as AthenaJsonValue | undefined), condition.value_cast)\r\n\r\n switch (condition.operator) {\r\n case 'contains':\r\n return `${column} @> ${rhs}`\r\n case 'containedBy':\r\n return `${column} <@ ${rhs}`\r\n case 'not':\r\n return `TRUE /* NOT expression passthrough: ${rawCondition} */`\r\n case 'or':\r\n return `TRUE /* OR expression passthrough: ${rawCondition} */`\r\n default:\r\n return `TRUE /* unsupported condition: ${rawCondition} */`\r\n }\r\n}\r\n\r\nfunction appendOrderLimitOffset(\r\n sqlParts: string[],\r\n order?: AthenaSortBy,\r\n limit?: number,\r\n offset?: number,\r\n) {\r\n if (order?.field) {\r\n const direction = order.direction === 'descending' ? 'DESC' : 'ASC'\r\n sqlParts.push(`ORDER BY ${quoteQualifiedIdentifier(order.field)} ${direction}`)\r\n }\r\n if (limit !== undefined) {\r\n sqlParts.push(`LIMIT ${Math.max(0, Math.trunc(limit))}`)\r\n }\r\n if (offset !== undefined) {\r\n sqlParts.push(`OFFSET ${Math.max(0, Math.trunc(offset))}`)\r\n }\r\n}\r\n\r\nfunction buildDebugSelectQuery(input: {\r\n tableName: string\r\n columns: string | string[]\r\n conditions?: AthenaGatewayCondition[]\r\n limit?: number\r\n offset?: number\r\n currentPage?: number\r\n pageSize?: number\r\n order?: AthenaSortBy\r\n}): string {\r\n const sqlParts = [\r\n `SELECT ${buildSelectColumnsClause(input.columns)} FROM ${quoteQualifiedIdentifier(input.tableName)}`,\r\n ]\r\n if (input.conditions?.length) {\r\n const whereClauses = input.conditions.map(conditionToDebugSqlClause)\r\n sqlParts.push(`WHERE ${whereClauses.join(' AND ')}`)\r\n }\r\n const pagination = resolvePagination(input)\r\n appendOrderLimitOffset(sqlParts, input.order, pagination.limit, pagination.offset)\r\n return `${sqlParts.join(' ')};`\r\n}\r\n\r\nfunction resolveDebugTableIdentifier(tableName: string | undefined): string {\r\n if (!tableName?.trim()) {\r\n return '\"__unknown_table__\"'\r\n }\r\n return quoteQualifiedIdentifier(tableName)\r\n}\r\n\r\nfunction buildInsertDebugSql(payload: AthenaInsertPayload): string {\r\n const rows = Array.isArray(payload.insert_body)\r\n ? payload.insert_body\r\n : [payload.insert_body]\r\n const columns: string[] = []\r\n const seen = new Set<string>()\r\n for (const row of rows) {\r\n for (const column of Object.keys(row)) {\r\n if (seen.has(column)) continue\r\n seen.add(column)\r\n columns.push(column)\r\n }\r\n }\r\n\r\n const sqlParts = [`INSERT INTO ${quoteQualifiedIdentifier(payload.table_name)}`]\r\n\r\n if (!rows.length || !columns.length) {\r\n sqlParts.push('DEFAULT VALUES')\r\n if (rows.length > 1) {\r\n sqlParts.push(`/* trace: ${rows.length} rows collapsed to DEFAULT VALUES */`)\r\n }\r\n } else {\r\n const valuesClause = rows\r\n .map(row => {\r\n const values = columns.map(column => {\r\n const hasColumn = Object.prototype.hasOwnProperty.call(row, column)\r\n if (!hasColumn) {\r\n return payload.default_to_null ? 'NULL' : 'DEFAULT'\r\n }\r\n const rowValue = (row as Record<string, AthenaJsonValue | undefined>)[column]\r\n return toSqlJsonLiteral(rowValue)\r\n })\r\n return `(${values.join(', ')})`\r\n })\r\n .join(', ')\r\n const columnClause = columns.map(column => quoteQualifiedIdentifier(column)).join(', ')\r\n sqlParts.push(`(${columnClause})`)\r\n sqlParts.push(`VALUES ${valuesClause}`)\r\n }\r\n\r\n if (payload.on_conflict) {\r\n const conflictColumns = Array.isArray(payload.on_conflict)\r\n ? payload.on_conflict.map(column => quoteQualifiedIdentifier(column)).join(', ')\r\n : payload.on_conflict\r\n if (payload.update_body && Object.keys(payload.update_body).length > 0) {\r\n const assignments = Object.entries(payload.update_body).map(([column, value]) =>\r\n `${quoteQualifiedIdentifier(column)} = ${toSqlJsonLiteral(value as AthenaJsonValue)}`,\r\n )\r\n sqlParts.push(`ON CONFLICT (${conflictColumns}) DO UPDATE SET ${assignments.join(', ')}`)\r\n } else {\r\n sqlParts.push(`ON CONFLICT (${conflictColumns}) DO NOTHING`)\r\n }\r\n }\r\n\r\n if (payload.columns) {\r\n sqlParts.push(`RETURNING ${buildSelectColumnsClause(payload.columns)}`)\r\n }\r\n\r\n return `${sqlParts.join(' ')};`\r\n}\r\n\r\nfunction buildUpdateDebugSql(payload: AthenaUpdatePayload): string {\r\n const set = payload.set ?? payload.data ?? {}\r\n const assignments = Object.entries(set).map(([column, value]) =>\r\n `${quoteQualifiedIdentifier(column)} = ${toSqlJsonLiteral(value as AthenaJsonValue)}`,\r\n )\r\n const sqlParts = [\r\n `UPDATE ${resolveDebugTableIdentifier(payload.table_name)} SET ${assignments.length ? assignments.join(', ') : '/* empty set */'}`,\r\n ]\r\n if (payload.conditions?.length) {\r\n const whereClauses = payload.conditions.map(conditionToDebugSqlClause)\r\n sqlParts.push(`WHERE ${whereClauses.join(' AND ')}`)\r\n }\r\n const pagination = resolvePagination({\r\n currentPage: payload.current_page,\r\n pageSize: payload.page_size,\r\n })\r\n appendOrderLimitOffset(sqlParts, payload.sort_by, pagination.limit, pagination.offset)\r\n if (payload.columns) {\r\n sqlParts.push(`RETURNING ${buildSelectColumnsClause(payload.columns)}`)\r\n }\r\n return `${sqlParts.join(' ')};`\r\n}\r\n\r\nfunction buildDeleteDebugSql(payload: AthenaDeletePayload): string {\r\n const sqlParts = [`DELETE FROM ${quoteQualifiedIdentifier(payload.table_name)}`]\r\n const whereClauses: string[] = []\r\n if (payload.resource_id) {\r\n whereClauses.push(`\"resource_id\" = ${toSqlLiteral(payload.resource_id)}`)\r\n }\r\n if (payload.conditions?.length) {\r\n whereClauses.push(...payload.conditions.map(conditionToDebugSqlClause))\r\n }\r\n if (whereClauses.length) {\r\n sqlParts.push(`WHERE ${whereClauses.join(' AND ')}`)\r\n }\r\n const pagination = resolvePagination({\r\n currentPage: payload.current_page,\r\n pageSize: payload.page_size,\r\n })\r\n appendOrderLimitOffset(sqlParts, payload.sort_by, pagination.limit, pagination.offset)\r\n if (payload.columns) {\r\n sqlParts.push(`RETURNING ${buildSelectColumnsClause(payload.columns)}`)\r\n }\r\n return `${sqlParts.join(' ')};`\r\n}\r\n\r\nfunction rpcFilterToSqlClause(filter: AthenaRpcFilter): string {\r\n const column = quoteQualifiedIdentifier(filter.column)\r\n const value = filter.value\r\n switch (filter.operator) {\r\n case 'eq':\r\n case 'neq':\r\n case 'gt':\r\n case 'gte':\r\n case 'lt':\r\n case 'lte':\r\n case 'like':\r\n case 'ilike': {\r\n if (value === undefined || Array.isArray(value)) {\r\n return `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`\r\n }\r\n const operatorMap = {\r\n eq: '=',\r\n neq: '!=',\r\n gt: '>',\r\n gte: '>=',\r\n lt: '<',\r\n lte: '<=',\r\n like: 'LIKE',\r\n ilike: 'ILIKE',\r\n } as const\r\n return `${column} ${operatorMap[filter.operator]} ${toSqlLiteral(value)}`\r\n }\r\n case 'is':\r\n if (value === null) return `${column} IS NULL`\r\n if (value === true) return `${column} IS TRUE`\r\n if (value === false) return `${column} IS FALSE`\r\n return `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`\r\n case 'in':\r\n if (!Array.isArray(value)) {\r\n return `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`\r\n }\r\n if (value.length === 0) return 'FALSE'\r\n return `${column} IN (${value.map(item => toSqlLiteral(item)).join(', ')})`\r\n default:\r\n return `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`\r\n }\r\n}\r\n\r\nfunction buildRpcDebugSql(payload: AthenaRpcPayload): string {\r\n const argsEntries = payload.args ? Object.entries(payload.args) : []\r\n const argsClause = argsEntries\r\n .map(([key, value]) => `${quoteQualifiedIdentifier(key)} => ${toSqlJsonLiteral(value as AthenaJsonValue)}`)\r\n .join(', ')\r\n const functionRef = payload.schema\r\n ? `${quoteQualifiedIdentifier(payload.schema)}.${quoteQualifiedIdentifier(payload.function)}`\r\n : quoteQualifiedIdentifier(payload.function)\r\n const sqlParts = [\r\n `SELECT ${payload.select ? quoteSelectColumnsExpression(payload.select) : '*'} FROM ${functionRef}(${argsClause})`,\r\n ]\r\n if (payload.filters?.length) {\r\n sqlParts.push(`WHERE ${payload.filters.map(rpcFilterToSqlClause).join(' AND ')}`)\r\n }\r\n if (payload.order?.column) {\r\n const direction = payload.order.ascending === false ? 'DESC' : 'ASC'\r\n sqlParts.push(`ORDER BY ${quoteQualifiedIdentifier(payload.order.column)} ${direction}`)\r\n }\r\n if (payload.limit !== undefined) {\r\n sqlParts.push(`LIMIT ${Math.max(0, Math.trunc(payload.limit))}`)\r\n }\r\n if (payload.offset !== undefined) {\r\n sqlParts.push(`OFFSET ${Math.max(0, Math.trunc(payload.offset))}`)\r\n }\r\n return `${sqlParts.join(' ')};`\r\n}\r\n\r\nfunction createFilterMethods<Self, Row>(\r\n state: TableBuilderState,\r\n addCondition: (\r\n operator: AthenaConditionOperator,\r\n column?: string,\r\n value?: AthenaConditionValue | AthenaConditionArrayValue | string,\r\n hints?: ConditionCastHints,\r\n ) => void,\r\n self: Self,\r\n): FilterChain<Self, Row> {\r\n return {\r\n eq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n const columnName = String(column)\r\n if (shouldUseUuidTextComparison(columnName, value)) {\r\n addCondition('eq', columnName, value, { columnCast: 'text' })\r\n } else {\r\n addCondition('eq', columnName, value)\r\n }\r\n return self\r\n },\r\n eqCast(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue, cast: AthenaConditionCastType) {\r\n addCondition('eq', String(column), value, { valueCast: cast })\r\n return self\r\n },\r\n eqUuid(column: ResolvedFilterColumnKey<Row>, value: string) {\r\n addCondition('eq', String(column), value, { valueCast: 'uuid' })\r\n return self\r\n },\r\n match(filters: Partial<Record<ResolvedFilterColumnKey<Row>, AthenaConditionValue>>) {\r\n Object.entries(filters as Record<string, AthenaConditionValue | undefined>).forEach(([column, value]) => {\r\n if (value === undefined) {\r\n return\r\n }\r\n if (shouldUseUuidTextComparison(column, value)) {\r\n addCondition('eq', column, value, { columnCast: 'text' })\r\n } else {\r\n addCondition('eq', column, value)\r\n }\r\n })\r\n return self\r\n },\r\n range(from: number, to: number) {\r\n state.offset = from\r\n state.limit = to - from + 1\r\n return self\r\n },\r\n limit(count: number) {\r\n state.limit = count\r\n return self\r\n },\r\n offset(count: number) {\r\n state.offset = count\r\n return self\r\n },\r\n currentPage(value: number) {\r\n state.currentPage = value\r\n return self\r\n },\r\n pageSize(value: number) {\r\n state.pageSize = value\r\n return self\r\n },\r\n totalPages(value: number) {\r\n state.totalPages = value\r\n return self\r\n },\r\n order(column: ResolvedFilterColumnKey<Row>, options?: OrderOptions) {\r\n state.order = {\r\n field: String(column),\r\n direction: options?.ascending === false ? 'descending' : 'ascending',\r\n }\r\n return self\r\n },\r\n gt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n addCondition('gt', String(column), value)\r\n return self\r\n },\r\n gte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n addCondition('gte', String(column), value)\r\n return self\r\n },\r\n lt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n addCondition('lt', String(column), value)\r\n return self\r\n },\r\n lte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n addCondition('lte', String(column), value)\r\n return self\r\n },\r\n neq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n addCondition('neq', String(column), value)\r\n return self\r\n },\r\n like(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n addCondition('like', String(column), value)\r\n return self\r\n },\r\n ilike(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n addCondition('ilike', String(column), value)\r\n return self\r\n },\r\n is(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n addCondition('is', String(column), value)\r\n return self\r\n },\r\n in(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue) {\r\n addCondition('in', String(column), values)\r\n return self\r\n },\r\n contains(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue) {\r\n addCondition('contains', String(column), values)\r\n return self\r\n },\r\n containedBy(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue) {\r\n addCondition('containedBy', String(column), values)\r\n return self\r\n },\r\n not(\r\n columnOrExpression: ResolvedFilterColumnKey<Row> | string,\r\n operator?: AthenaConditionOperator,\r\n value?: AthenaConditionValue,\r\n ) {\r\n const expression = String(columnOrExpression)\r\n if (operator != null && value !== undefined) {\r\n addCondition('not', undefined, `${expression}.${operator}.${stringifyFilterValue(value)}`)\r\n } else {\r\n addCondition('not', undefined, expression)\r\n }\r\n return self\r\n },\r\n or(expression: string) {\r\n addCondition('or', undefined, expression)\r\n return self\r\n },\r\n }\r\n}\r\n\r\nfunction toRpcSelect(columns?: AthenaSelectInput) {\r\n if (!columns) return undefined\r\n if (typeof columns === 'string') {\r\n return columns\r\n }\r\n return columns.join(',')\r\n}\r\n\r\nfunction createRpcFilterMethods<Self>(\r\n filters: AthenaRpcFilter[],\r\n self: Self,\r\n) {\r\n const addFilter = (\r\n operator: AthenaRpcFilterOperator,\r\n column: string,\r\n value: AthenaConditionValue | AthenaConditionArrayValue | string,\r\n ) => {\r\n filters.push({ column, operator, value })\r\n }\r\n\r\n return {\r\n eq(column: string, value: AthenaConditionValue) {\r\n addFilter('eq', column, value)\r\n return self\r\n },\r\n neq(column: string, value: AthenaConditionValue) {\r\n addFilter('neq', column, value)\r\n return self\r\n },\r\n gt(column: string, value: AthenaConditionValue) {\r\n addFilter('gt', column, value)\r\n return self\r\n },\r\n gte(column: string, value: AthenaConditionValue) {\r\n addFilter('gte', column, value)\r\n return self\r\n },\r\n lt(column: string, value: AthenaConditionValue) {\r\n addFilter('lt', column, value)\r\n return self\r\n },\r\n lte(column: string, value: AthenaConditionValue) {\r\n addFilter('lte', column, value)\r\n return self\r\n },\r\n like(column: string, value: AthenaConditionValue) {\r\n addFilter('like', column, value)\r\n return self\r\n },\r\n ilike(column: string, value: AthenaConditionValue) {\r\n addFilter('ilike', column, value)\r\n return self\r\n },\r\n is(column: string, value: AthenaConditionValue) {\r\n addFilter('is', column, value)\r\n return self\r\n },\r\n in(column: string, values: AthenaConditionArrayValue) {\r\n addFilter('in', column, values)\r\n return self\r\n },\r\n }\r\n}\r\n\r\nfunction createRpcBuilder<Row, TStrict extends boolean = false>(\r\n functionName: string,\r\n args: AthenaJsonObject | undefined,\r\n baseOptions: AthenaRpcCallOptions | undefined,\r\n client: ReturnType<typeof createAthenaGatewayClient>,\r\n formatGatewayResult: AthenaResultFormatter,\r\n tracer?: AthenaQueryTracer,\r\n initialCallsite?: AthenaQueryTraceCallsite | null,\r\n debugAstEnabled = false,\r\n): RpcQueryBuilder<Row, TStrict> {\r\n const state: {\r\n filters: AthenaRpcFilter[]\r\n limit?: number\r\n offset?: number\r\n order?: { column: string; ascending?: boolean }\r\n } = {\r\n filters: [],\r\n }\r\n\r\n let selectedColumns: AthenaSelectInput | undefined\r\n let selectedOptions: AthenaRpcCallOptions | undefined\r\n let promise: Promise<AthenaResult<Row[]>> | null = null\r\n const callsiteStore = createTraceCallsiteStore(tracer, initialCallsite)\r\n\r\n const executeRpc = async <SelectedRow = Row>(\r\n columns?: AthenaSelectInput,\r\n options?: AthenaRpcCallOptions,\r\n callsite?: AthenaQueryTraceCallsite | null,\r\n ): Promise<AthenaResult<SelectedRow[]>> => {\r\n const mergedOptions = mergeOptions(baseOptions, options)\r\n const normalizedSelectedColumns = normalizeSelectColumnsInput(columns)\r\n const payload: AthenaRpcPayload = {\r\n function: functionName,\r\n args,\r\n schema: mergedOptions?.schema,\r\n select: toRpcSelect(columns),\r\n filters: state.filters.length ? [...state.filters] : undefined,\r\n count: mergedOptions?.count,\r\n head: mergedOptions?.head,\r\n limit: state.limit,\r\n offset: state.offset,\r\n order: state.order,\r\n }\r\n const endpoint: AthenaQueryTraceEvent['endpoint'] = mergedOptions?.get\r\n ? `/rpc/${functionName}`\r\n : '/gateway/rpc'\r\n const sql = buildRpcDebugSql(payload)\r\n const debugAst = debugAstEnabled\r\n ? buildRpcDebugAst({\r\n functionName,\r\n args,\r\n selectedColumns: normalizedSelectedColumns,\r\n state,\r\n payload,\r\n endpoint,\r\n })\r\n : undefined\r\n return executeWithQueryTrace(\r\n tracer,\r\n {\r\n operation: 'rpc',\r\n endpoint,\r\n functionName,\r\n sql,\r\n payload,\r\n ast: debugAst,\r\n options: mergedOptions,\r\n },\r\n async () => {\r\n const response = await client.rpcGateway<SelectedRow[]>(payload, mergedOptions)\r\n return formatGatewayResult(response, { operation: 'rpc' })\r\n },\r\n callsite,\r\n )\r\n }\r\n\r\n const run = (\r\n columns?: AthenaSelectInput,\r\n options?: AthenaRpcCallOptions,\r\n callsite?: AthenaQueryTraceCallsite | null,\r\n ) => {\r\n const payloadColumns = columns ?? selectedColumns\r\n const payloadOptions = options ?? selectedOptions\r\n if (!promise) {\r\n promise = executeRpc<Row>(payloadColumns, payloadOptions, callsiteStore.resolve(callsite))\r\n }\r\n return promise\r\n }\r\n\r\n const builder = {} as RpcQueryBuilder<Row, TStrict>\r\n const filterMethods = createRpcFilterMethods(state.filters, builder)\r\n\r\n Object.assign(builder, filterMethods, {\r\n select(columns?: AthenaSelectInput, options?: AthenaRpcCallOptions) {\r\n selectedColumns = columns\r\n selectedOptions = options ?? selectedOptions\r\n return run(columns, options, captureTraceCallsite(tracer))\r\n },\r\n async single<T = Row>(columns?: AthenaSelectInput, options?: AthenaRpcCallOptions) {\r\n const result = await run(columns, options, captureTraceCallsite(tracer))\r\n return toSingleResult(result) as AthenaResult<T | null>\r\n },\r\n maybeSingle<T = Row>(columns?: AthenaSelectInput, options?: AthenaRpcCallOptions) {\r\n return builder.single<T, AthenaSelectInput>(columns, options)\r\n },\r\n order(column: string, options?: RpcOrderOptions) {\r\n state.order = { column, ascending: options?.ascending ?? true }\r\n return builder\r\n },\r\n limit(count: number) {\r\n state.limit = count\r\n return builder\r\n },\r\n offset(count: number) {\r\n state.offset = count\r\n return builder\r\n },\r\n range(from: number, to: number) {\r\n state.offset = from\r\n state.limit = to - from + 1\r\n return builder\r\n },\r\n then<T1 = AthenaResult<Row[]>, T2 = never>(\r\n onfulfilled?: (v: AthenaResult<Row[]>) => T1 | PromiseLike<T1>,\r\n onrejected?: (reason: unknown) => T2 | PromiseLike<T2>,\r\n ) {\r\n return run(selectedColumns, selectedOptions).then(onfulfilled, onrejected)\r\n },\r\n catch<T = never>(onrejected?: (reason: unknown) => T | PromiseLike<T>) {\r\n return run(selectedColumns, selectedOptions).catch(onrejected)\r\n },\r\n finally(onfinally?: () => void) {\r\n return run(selectedColumns, selectedOptions).finally(onfinally)\r\n },\r\n })\r\n\r\n return builder\r\n}\r\n\r\nfunction createTableBuilder<\r\n Row,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n TContext = unknown,\r\n TStrict extends boolean = false,\r\n>(\r\n tableName: string,\r\n client: ReturnType<typeof createAthenaGatewayClient>,\r\n formatGatewayResult: AthenaResultFormatter,\r\n tracer?: AthenaQueryTracer,\r\n experimental?: AthenaClientExperimentalOptions,\r\n): TableQueryBuilder<Row, Insert, Update, TContext, TStrict> {\r\n const state: TableBuilderState = {\r\n conditions: [],\r\n }\r\n const debugAstEnabled = Boolean(experimental?.debugAst)\r\n\r\n const addCondition = (\r\n operator: AthenaConditionOperator,\r\n column?: string,\r\n value?: AthenaConditionValue | AthenaConditionArrayValue | string,\r\n hints?: ConditionCastHints,\r\n ) => {\r\n const condition: AthenaGatewayCondition = { operator }\r\n if (column) {\r\n condition.column = column\r\n if (operator === 'eq') {\r\n // include legacy gateway shape for compatibility\r\n condition.eq_column = column\r\n }\r\n }\r\n if (value !== undefined) {\r\n condition.value = value\r\n if (operator === 'eq') {\r\n condition.eq_value = value\r\n }\r\n }\r\n if (hints?.valueCast) {\r\n condition.value_cast = hints.valueCast\r\n if (operator === 'eq') {\r\n condition.eq_value_cast = hints.valueCast\r\n }\r\n }\r\n if (hints?.columnCast) {\r\n condition.column_cast = hints.columnCast\r\n if (operator === 'eq') {\r\n condition.eq_column_cast = hints.columnCast\r\n }\r\n }\r\n state.conditions.push(condition)\r\n }\r\n\r\n const snapshotState = (): TableBuilderState => ({\r\n conditions: state.conditions.map(condition => ({ ...condition })),\r\n limit: state.limit,\r\n offset: state.offset,\r\n order: state.order ? { ...state.order } : undefined,\r\n currentPage: state.currentPage,\r\n pageSize: state.pageSize,\r\n totalPages: state.totalPages,\r\n })\r\n\r\n const builder = {} as TableQueryBuilder<Row, Insert, Update, TContext, TStrict>\r\n\r\n const filterMethods = createFilterMethods<TableQueryBuilder<Row, Insert, Update, TContext, TStrict>, Row>(\r\n state,\r\n addCondition,\r\n builder,\r\n )\r\n\r\n const runSelect = async <T = Row>(\r\n columns: AthenaSelectInput = DEFAULT_COLUMNS,\r\n options?: AthenaGatewayCallOptions,\r\n executionState: TableBuilderState = snapshotState(),\r\n callsite?: AthenaQueryTraceCallsite | null,\r\n debugAstFactory?: SelectDebugAstFactory,\r\n ) => {\r\n const runtimeColumns = normalizeSelectColumnsInput(columns) ?? DEFAULT_COLUMNS\r\n const resolvedTableName = resolveTableNameForCall(tableName, options?.schema)\r\n const plan = createSelectTransportPlan({\r\n tableName: resolvedTableName,\r\n columns: runtimeColumns,\r\n state: executionState,\r\n options,\r\n buildTypedSelectQuery,\r\n })\r\n const debugAst = debugAstEnabled\r\n ? (debugAstFactory?.({\r\n tableName: resolvedTableName,\r\n columns: runtimeColumns,\r\n executionState,\r\n plan,\r\n }) ?? buildSelectDebugAst({\r\n tableName: resolvedTableName,\r\n columns: runtimeColumns,\r\n state: executionState,\r\n plan,\r\n }))\r\n : undefined\r\n\r\n if (plan.kind === 'query') {\r\n return executeExperimentalRead(experimental, () =>\r\n executeWithQueryTrace(\r\n tracer,\r\n {\r\n operation: 'select',\r\n endpoint: '/gateway/query',\r\n table: resolvedTableName,\r\n sql: plan.query,\r\n payload: plan.payload,\r\n ast: debugAst,\r\n options,\r\n },\r\n async () => {\r\n const queryResponse = await client.queryGateway<T>(plan.payload, options)\r\n return formatGatewayResult(queryResponse, { table: resolvedTableName, operation: 'select' })\r\n },\r\n callsite,\r\n ),\r\n )\r\n }\r\n\r\n const sql = buildDebugSelectQuery({\r\n tableName: resolvedTableName,\r\n ...plan.debug,\r\n })\r\n return executeExperimentalRead(experimental, () =>\r\n executeWithQueryTrace(\r\n tracer,\r\n {\r\n operation: 'select',\r\n endpoint: '/gateway/fetch',\r\n table: resolvedTableName,\r\n sql,\r\n payload: plan.payload,\r\n ast: debugAst,\r\n options,\r\n },\r\n async () => {\r\n const response = await client.fetchGateway<T>(plan.payload, options)\r\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'select' })\r\n },\r\n callsite,\r\n ),\r\n )\r\n }\r\n\r\n const createSelectChain = <SelectedRow>(\r\n columns: AthenaSelectInput,\r\n options?: AthenaGatewayCallOptions,\r\n initialCallsite?: AthenaQueryTraceCallsite | null,\r\n ): SelectChain<Row, SelectedRow, TStrict> => {\r\n const chain = {} as SelectChain<Row, SelectedRow, TStrict>\r\n const callsiteStore = createTraceCallsiteStore(tracer, initialCallsite)\r\n const filterMethods = createFilterMethods<SelectChain<Row, SelectedRow, TStrict>, Row>(\r\n state,\r\n addCondition,\r\n chain,\r\n )\r\n Object.assign(chain, filterMethods, {\r\n async single<T = SelectedRow>(cols?: AthenaSelectInput, opts?: AthenaGatewayCallOptions) {\r\n const r = await runSelect<T[]>(\r\n cols ?? columns,\r\n opts ?? options,\r\n snapshotState(),\r\n callsiteStore.resolve(captureTraceCallsite(tracer)),\r\n )\r\n return toSingleResult(r)\r\n },\r\n maybeSingle<T = SelectedRow>(cols?: AthenaSelectInput, opts?: AthenaGatewayCallOptions) {\r\n return chain.single<T, AthenaSelectInput>(cols, opts)\r\n },\r\n then<T1 = AthenaResult<SelectedRow[]>, T2 = never>(\r\n onfulfilled?: (v: AthenaResult<SelectedRow[]>) => T1 | PromiseLike<T1>,\r\n onrejected?: (reason: unknown) => T2 | PromiseLike<T2>,\r\n ) {\r\n return runSelect<SelectedRow[]>(\r\n columns,\r\n options,\r\n snapshotState(),\r\n callsiteStore.resolve(),\r\n ).then(onfulfilled, onrejected)\r\n },\r\n catch<T = never>(onrejected?: (reason: unknown) => T | PromiseLike<T>) {\r\n return runSelect<SelectedRow[]>(columns, options, snapshotState(), callsiteStore.resolve()).catch(\r\n onrejected,\r\n )\r\n },\r\n finally(onfinally?: () => void) {\r\n return runSelect<SelectedRow[]>(columns, options, snapshotState(), callsiteStore.resolve()).finally(\r\n onfinally,\r\n )\r\n },\r\n })\r\n return chain\r\n }\r\n\r\n Object.assign(builder, filterMethods, {\r\n reset() {\r\n state.conditions = []\r\n state.limit = undefined\r\n state.offset = undefined\r\n state.order = undefined\r\n state.currentPage = undefined\r\n state.pageSize = undefined\r\n state.totalPages = undefined\r\n return builder\r\n },\r\n select<T = Row>(columns: AthenaSelectInput = DEFAULT_COLUMNS, options?: AthenaGatewayCallOptions) {\r\n return createSelectChain<T>(columns, options, captureTraceCallsite(tracer))\r\n },\r\n async findMany<const TSelect extends AthenaSelectShape>(\r\n options: AthenaFindManyOptions<Row, TSelect> & {\r\n select: AthenaValidatedSelectShape<TSelect>\r\n },\r\n ) {\r\n const columns = compileSelectShape(options.select)\r\n const baseState = snapshotState()\r\n const executionState = snapshotState()\r\n const callsite = captureTraceCallsite(tracer)\r\n const compiledWhere = compileWhere(options.where)\r\n if (compiledWhere?.length) {\r\n executionState.conditions.push(...compiledWhere)\r\n }\r\n if (options.orderBy !== undefined) {\r\n executionState.order = compileOrderBy<Row>(options.orderBy)\r\n }\r\n if (options.limit !== undefined) {\r\n executionState.limit = options.limit\r\n }\r\n if (\r\n experimental?.findManyAst &&\r\n canUseFindManyAstTransport(baseState) &&\r\n !selectShapeUsesRelationSchema(options.select) &&\r\n !findManyAstWhereRequiresLegacyTransport(options.where)\r\n ) {\r\n const resolvedTableName = resolveTableNameForCall(tableName, undefined)\r\n const payload: AthenaFindManyAstPayload<Row, TSelect> = {\r\n table_name: resolvedTableName,\r\n select: options.select,\r\n }\r\n if (options.where !== undefined) {\r\n payload.where = normalizeFindManyAstWhere(options.where)\r\n }\r\n const astOrder = toFindManyAstOrder<Row>(executionState.order)\r\n if (astOrder !== undefined) {\r\n payload.orderBy = astOrder\r\n }\r\n if (executionState.limit !== undefined) {\r\n payload.limit = executionState.limit\r\n }\r\n const sql = buildDebugSelectQuery({\r\n tableName: resolvedTableName,\r\n columns,\r\n conditions: executionState.conditions,\r\n limit: executionState.limit,\r\n order: executionState.order,\r\n })\r\n const debugAst = debugAstEnabled\r\n ? buildFindManyDirectDebugAst({\r\n tableName: resolvedTableName,\r\n options,\r\n compiledColumns: columns,\r\n baseState,\r\n executionState,\r\n payload,\r\n })\r\n : undefined\r\n return executeExperimentalRead(experimental, () =>\r\n executeWithQueryTrace(\r\n tracer,\r\n {\r\n operation: 'select',\r\n endpoint: '/gateway/fetch',\r\n table: resolvedTableName,\r\n sql,\r\n payload,\r\n ast: debugAst,\r\n },\r\n async () => {\r\n const response = await client.fetchGateway<Array<AthenaFindManyResult<Row, TSelect, TContext>>>(\r\n payload,\r\n )\r\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'select' })\r\n },\r\n callsite,\r\n ),\r\n )\r\n }\r\n return runSelect<Array<AthenaFindManyResult<Row, TSelect, TContext>>>(\r\n columns,\r\n undefined,\r\n executionState,\r\n callsite,\r\n debugAstEnabled\r\n ? ({ tableName: resolvedTableName, executionState: tracedState, plan }) =>\r\n buildFindManyCompiledDebugAst({\r\n tableName: resolvedTableName,\r\n options,\r\n compiledColumns: columns,\r\n baseState,\r\n executionState: tracedState,\r\n plan,\r\n })\r\n : undefined,\r\n )\r\n },\r\n insert(values: Insert | Insert[], options?: AthenaGatewayCallOptions) {\r\n const mutationCallsite = captureTraceCallsite(tracer)\r\n if (Array.isArray(values)) {\r\n const executeInsertMany = async (\r\n columns?: string | string[],\r\n selectOptions?: AthenaGatewayCallOptions,\r\n callsite?: AthenaQueryTraceCallsite | null,\r\n ) => {\r\n const mergedOptions = mergeOptions(options, selectOptions)\r\n const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\r\n const payload: AthenaInsertPayload = {\r\n table_name: resolvedTableName,\r\n insert_body: asAthenaJsonObjectArray(values),\r\n }\r\n if (columns) payload.columns = columns\r\n if (mergedOptions?.count) payload.count = mergedOptions.count\r\n if (mergedOptions?.head) payload.head = mergedOptions.head\r\n if (mergedOptions?.defaultToNull !== undefined) {\r\n payload.default_to_null = mergedOptions.defaultToNull\r\n }\r\n const sql = buildInsertDebugSql(payload)\r\n const debugAst = debugAstEnabled ? buildInsertDebugAst(payload) : undefined\r\n return executeWithQueryTrace(\r\n tracer,\r\n {\r\n operation: 'insert',\r\n endpoint: '/gateway/insert',\r\n table: resolvedTableName,\r\n sql,\r\n payload,\r\n ast: debugAst,\r\n options: mergedOptions,\r\n },\r\n async () => {\r\n const response = await client.insertGateway<Row[]>(payload, mergedOptions)\r\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'insert' })\r\n },\r\n callsite,\r\n )\r\n }\r\n return createMutationQuery<Row[]>(executeInsertMany, DEFAULT_COLUMNS, tracer, mutationCallsite)\r\n }\r\n const executeInsertOne = async (\r\n columns?: string | string[],\r\n selectOptions?: AthenaGatewayCallOptions,\r\n callsite?: AthenaQueryTraceCallsite | null,\r\n ) => {\r\n const mergedOptions = mergeOptions(options, selectOptions)\r\n const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\r\n const payload: AthenaInsertPayload = {\r\n table_name: resolvedTableName,\r\n insert_body: asAthenaJsonObject(values),\r\n }\r\n if (columns) payload.columns = columns\r\n if (mergedOptions?.count) payload.count = mergedOptions.count\r\n if (mergedOptions?.head) payload.head = mergedOptions.head\r\n if (mergedOptions?.defaultToNull !== undefined) {\r\n payload.default_to_null = mergedOptions.defaultToNull\r\n }\r\n const sql = buildInsertDebugSql(payload)\r\n const debugAst = debugAstEnabled ? buildInsertDebugAst(payload) : undefined\r\n return executeWithQueryTrace(\r\n tracer,\r\n {\r\n operation: 'insert',\r\n endpoint: '/gateway/insert',\r\n table: resolvedTableName,\r\n sql,\r\n payload,\r\n ast: debugAst,\r\n options: mergedOptions,\r\n },\r\n async () => {\r\n const response = await client.insertGateway<Row>(payload, mergedOptions)\r\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'insert' })\r\n },\r\n callsite,\r\n )\r\n }\r\n return createMutationQuery<Row>(executeInsertOne, DEFAULT_COLUMNS, tracer, mutationCallsite)\r\n },\r\n upsert(\r\n values: Insert | Insert[],\r\n options?: AthenaGatewayCallOptions & { updateBody?: Update; onConflict?: string | string[] },\r\n ) {\r\n const mutationCallsite = captureTraceCallsite(tracer)\r\n if (Array.isArray(values)) {\r\n const executeUpsertMany = async (\r\n columns?: string | string[],\r\n selectOptions?: AthenaGatewayCallOptions,\r\n callsite?: AthenaQueryTraceCallsite | null,\r\n ) => {\r\n const mergedOptions = mergeOptions(options, selectOptions)\r\n const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\r\n const payload: AthenaInsertPayload = {\r\n table_name: resolvedTableName,\r\n insert_body: asAthenaJsonObjectArray(values),\r\n update_body: options?.updateBody ? asAthenaJsonObject(options.updateBody) : undefined,\r\n }\r\n if (columns) payload.columns = columns\r\n if (options?.onConflict) payload.on_conflict = options.onConflict\r\n if (mergedOptions?.count) payload.count = mergedOptions.count\r\n if (mergedOptions?.head) payload.head = mergedOptions.head\r\n if (mergedOptions?.defaultToNull !== undefined) {\r\n payload.default_to_null = mergedOptions.defaultToNull\r\n }\r\n const sql = buildInsertDebugSql(payload)\r\n const debugAst = debugAstEnabled ? buildUpsertDebugAst(payload) : undefined\r\n return executeWithQueryTrace(\r\n tracer,\r\n {\r\n operation: 'upsert',\r\n endpoint: '/gateway/insert',\r\n table: resolvedTableName,\r\n sql,\r\n payload,\r\n ast: debugAst,\r\n options: mergedOptions,\r\n },\r\n async () => {\r\n const response = await client.insertGateway<Row[]>(payload, mergedOptions)\r\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'insert' })\r\n },\r\n callsite,\r\n )\r\n }\r\n return createMutationQuery<Row[]>(executeUpsertMany, DEFAULT_COLUMNS, tracer, mutationCallsite)\r\n }\r\n const executeUpsertOne = async (\r\n columns?: string | string[],\r\n selectOptions?: AthenaGatewayCallOptions,\r\n callsite?: AthenaQueryTraceCallsite | null,\r\n ) => {\r\n const mergedOptions = mergeOptions(options, selectOptions)\r\n const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\r\n const payload: AthenaInsertPayload = {\r\n table_name: resolvedTableName,\r\n insert_body: asAthenaJsonObject(values),\r\n update_body: options?.updateBody ? asAthenaJsonObject(options.updateBody) : undefined,\r\n }\r\n if (columns) payload.columns = columns\r\n if (options?.onConflict) payload.on_conflict = options.onConflict\r\n if (mergedOptions?.count) payload.count = mergedOptions.count\r\n if (mergedOptions?.head) payload.head = mergedOptions.head\r\n if (mergedOptions?.defaultToNull !== undefined) {\r\n payload.default_to_null = mergedOptions.defaultToNull\r\n }\r\n const sql = buildInsertDebugSql(payload)\r\n const debugAst = debugAstEnabled ? buildUpsertDebugAst(payload) : undefined\r\n return executeWithQueryTrace(\r\n tracer,\r\n {\r\n operation: 'upsert',\r\n endpoint: '/gateway/insert',\r\n table: resolvedTableName,\r\n sql,\r\n payload,\r\n ast: debugAst,\r\n options: mergedOptions,\r\n },\r\n async () => {\r\n const response = await client.insertGateway<Row>(payload, mergedOptions)\r\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'insert' })\r\n },\r\n callsite,\r\n )\r\n }\r\n return createMutationQuery<Row>(executeUpsertOne, DEFAULT_COLUMNS, tracer, mutationCallsite)\r\n },\r\n update(values: Update, options?: AthenaGatewayCallOptions) {\r\n const mutationCallsite = captureTraceCallsite(tracer)\r\n const executeUpdate = async (\r\n columns?: string | string[],\r\n selectOptions?: AthenaGatewayCallOptions,\r\n callsite?: AthenaQueryTraceCallsite | null,\r\n ) => {\r\n const executionState = snapshotState()\r\n const filters = executionState.conditions.length ? [...executionState.conditions] : undefined\r\n const mergedOptions = mergeOptions(options, selectOptions)\r\n const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\r\n const payload: AthenaUpdatePayload = {\r\n table_name: resolvedTableName,\r\n set: asAthenaJsonObject(values),\r\n conditions: filters,\r\n strip_nulls: mergedOptions?.stripNulls ?? true,\r\n }\r\n if (executionState.order) payload.sort_by = executionState.order\r\n if (executionState.currentPage !== undefined) payload.current_page = executionState.currentPage\r\n if (executionState.pageSize !== undefined) payload.page_size = executionState.pageSize\r\n if (executionState.totalPages !== undefined) payload.total_pages = executionState.totalPages\r\n if (columns) payload.columns = columns\r\n const sql = buildUpdateDebugSql(payload)\r\n const debugAst = debugAstEnabled\r\n ? buildUpdateDebugAst({\r\n state: executionState,\r\n payload,\r\n })\r\n : undefined\r\n return executeWithQueryTrace(\r\n tracer,\r\n {\r\n operation: 'update',\r\n endpoint: '/gateway/update',\r\n table: resolvedTableName,\r\n sql,\r\n payload,\r\n ast: debugAst,\r\n options: mergedOptions,\r\n },\r\n async () => {\r\n const response = await client.updateGateway<Row[]>(payload, mergedOptions)\r\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'update' })\r\n },\r\n callsite,\r\n )\r\n }\r\n const mutation = createMutationQuery<Row[]>(executeUpdate, null, tracer, mutationCallsite)\r\n const updateChain = {} as UpdateChain<Row>\r\n const filterMethods = createFilterMethods<UpdateChain<Row>, Row>(state, addCondition, updateChain)\r\n Object.assign(updateChain, filterMethods, mutation)\r\n return updateChain\r\n },\r\n delete(options?: AthenaGatewayCallOptions & { resourceId?: string }) {\r\n const filters = state.conditions.length ? [...state.conditions] : undefined\r\n const resourceId = options?.resourceId ?? getResourceId(state)\r\n if (!resourceId && !filters?.length) {\r\n throw new Error('delete requires a resource_id either via eq(\"resource_id\", ...) or options.resourceId')\r\n }\r\n const mutationCallsite = captureTraceCallsite(tracer)\r\n const executeDelete = async (\r\n columns?: string | string[],\r\n selectOptions?: AthenaGatewayCallOptions,\r\n callsite?: AthenaQueryTraceCallsite | null,\r\n ) => {\r\n const executionState = snapshotState()\r\n const debugState: TableBuilderState = {\r\n ...executionState,\r\n conditions: filters ? filters.map(condition => ({ ...condition })) : [],\r\n }\r\n const mergedOptions = mergeOptions(options, selectOptions)\r\n const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\r\n const payload: AthenaDeletePayload = {\r\n table_name: resolvedTableName,\r\n resource_id: resourceId,\r\n conditions: filters,\r\n }\r\n if (executionState.order) payload.sort_by = executionState.order\r\n if (executionState.currentPage !== undefined) payload.current_page = executionState.currentPage\r\n if (executionState.pageSize !== undefined) payload.page_size = executionState.pageSize\r\n if (executionState.totalPages !== undefined) payload.total_pages = executionState.totalPages\r\n if (columns) payload.columns = columns\r\n const sql = buildDeleteDebugSql(payload)\r\n const debugAst = debugAstEnabled\r\n ? buildDeleteDebugAst({\r\n state: debugState,\r\n payload,\r\n })\r\n : undefined\r\n return executeWithQueryTrace(\r\n tracer,\r\n {\r\n operation: 'delete',\r\n endpoint: '/gateway/delete',\r\n table: resolvedTableName,\r\n sql,\r\n payload,\r\n ast: debugAst,\r\n options: mergedOptions,\r\n },\r\n async () => {\r\n const response = await client.deleteGateway<Row | null>(payload, mergedOptions)\r\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'delete' })\r\n },\r\n callsite,\r\n )\r\n }\r\n return createMutationQuery<Row | null>(executeDelete, null, tracer, mutationCallsite)\r\n },\r\n async single<T = Row>(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\r\n const response = await runSelect<T[]>(\r\n columns ?? DEFAULT_COLUMNS,\r\n options,\r\n snapshotState(),\r\n captureTraceCallsite(tracer),\r\n )\r\n return toSingleResult(response)\r\n },\r\n async maybeSingle<T = Row>(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\r\n return builder.single<T, AthenaSelectInput>(columns, options)\r\n },\r\n })\r\n\r\n return builder\r\n}\r\n\r\nfunction createQueryBuilder(\r\n client: ReturnType<typeof createAthenaGatewayClient>,\r\n formatGatewayResult: AthenaResultFormatter,\r\n experimental?: AthenaClientExperimentalOptions,\r\n tracer?: AthenaQueryTracer,\r\n) {\r\n const debugAstEnabled = Boolean(experimental?.debugAst)\r\n return async function query<Row = unknown>(\r\n query: string,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<Row[]>> {\r\n const normalizedQuery = query.trim()\r\n if (!normalizedQuery) {\r\n throw new Error('query requires a non-empty string')\r\n }\r\n const payload = { query: normalizedQuery }\r\n const callsite = captureTraceCallsite(tracer)\r\n return executeExperimentalRead(experimental, () =>\r\n executeWithQueryTrace(\r\n tracer,\r\n {\r\n operation: 'query',\r\n endpoint: '/gateway/query',\r\n sql: normalizedQuery,\r\n payload,\r\n ast: debugAstEnabled ? buildRawQueryDebugAst(normalizedQuery) : undefined,\r\n options,\r\n },\r\n async () => {\r\n const response = await client.queryGateway<Row[]>(payload, options)\r\n return formatGatewayResult(response, { operation: 'query' })\r\n },\r\n callsite,\r\n ),\r\n )\r\n }\r\n}\r\n\r\nexport interface AthenaSdkClient<TStrict extends boolean = false> {\n from<TModel extends AthenaModelTarget>(\n model: TModel,\n ): TableQueryBuilder<RowOf<TModel>, InsertOf<TModel>, UpdateOf<TModel>, unknown, TStrict>\n from<\r\n Row = AthenaRowShape,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n >(table: string, options?: AthenaFromOptions): TableQueryBuilder<Row, Insert, Update, unknown, TStrict>\r\n db: AthenaDbModule<TStrict>\n rpc<Row = unknown, Args extends AthenaJsonObject = AthenaJsonObject>(\n fn: string,\n args?: Args,\n options?: AthenaRpcCallOptions,\n ): RpcQueryBuilder<Row, TStrict>\n query<Row = unknown>(query: string, options?: AthenaGatewayCallOptions): Promise<AthenaResult<Row[]>>\n request<T = unknown>(options: AthenaRequestOptions): Promise<AthenaRequestResponse<T>>\n verifyConnection(options?: AthenaGatewayConnectionOptions): Promise<AthenaGatewayConnectionResult>\n withContext(context?: AthenaClientContextOptions): AthenaSdkClient<TStrict>\n withSession(\n session?: AthenaClientSessionLike | null,\n options?: AthenaClientSessionOptions,\n ): AthenaSdkClient<TStrict>\n}\n\nexport interface AthenaSdkClientWithAuth<TStrict extends boolean = false> extends AthenaSdkClient<TStrict> {\n auth: AthenaAuthBindings\n chat: AthenaChatModule\n withContext(context?: AthenaClientContextOptions): AthenaSdkClientWithAuth<TStrict>\n withSession(\n session?: AthenaClientSessionLike | null,\n options?: AthenaClientSessionOptions,\n ): AthenaSdkClientWithAuth<TStrict>\n withOptions(options?: AthenaClientOverrideOptions): AthenaSdkClientWithAuth<TStrict>\n}\n\nexport interface AthenaSdkClientWithStorage<TStrict extends boolean = false> extends AthenaSdkClientWithAuth<TStrict> {\n storage: AthenaStorageModule\n withContext(context?: AthenaClientContextOptions): AthenaSdkClientWithStorage<TStrict>\n withSession(\n session?: AthenaClientSessionLike | null,\n options?: AthenaClientSessionOptions,\n ): AthenaSdkClientWithStorage<TStrict>\n withOptions(options?: AthenaClientOverrideOptions): AthenaSdkClientWithStorage<TStrict>\n}\n\nexport interface AthenaHeaderBag {\n get(name: string): string | null\n}\n\nexport interface AthenaClientSessionLike {\n user?: {\n id?: string | null | undefined\n } | null | undefined\n session?: {\n token?: string | null | undefined\n activeOrganizationId?: string | null | undefined\n } | null | undefined\n}\n\nexport interface AthenaCreateClientServiceUrlConfig {\n url?: string | null | undefined\n}\n\nexport interface AthenaCreateClientChatOptions extends AthenaCreateClientServiceUrlConfig {\n wsUrl?: string | null | undefined\n webSocketFactory?: AthenaChatWebSocketFactory | null | undefined\n}\n\nexport interface AthenaCreateClientAuthOptions\n extends Omit<AthenaAuthClientConfig, 'baseUrl' | 'apiKey' | 'bearerToken' | 'cookie' | 'sessionToken'> {\n url?: string | null | undefined\n baseUrl?: string | null | undefined\n apiKey?: string | null | undefined\n bearerToken?: string | null | undefined\n cookie?: string | null | undefined\n sessionToken?: string | null | undefined\n}\n\nexport interface AthenaCreateClientOptions {\n client?: string | null | undefined\n userId?: string | null | undefined\n organizationId?: string | null | undefined\n forceNoCache?: boolean\n headers?: Record<string, string>\n backend?: BackendConfig | BackendType\n db?: AthenaCreateClientServiceUrlConfig\n gateway?: AthenaCreateClientServiceUrlConfig\n auth?: AthenaCreateClientAuthOptions\n chat?: AthenaCreateClientChatOptions\n storage?: AthenaCreateClientServiceUrlConfig\n dbUrl?: string | null | undefined\n gatewayUrl?: string | null | undefined\n authUrl?: string | null | undefined\n chatUrl?: string | null | undefined\n chatWsUrl?: string | null | undefined\n storageUrl?: string | null | undefined\n experimental?: AthenaClientExperimentalOptions\n}\n\r\nexport interface AthenaCreateClientOptionsWithStorage extends AthenaCreateClientOptions {\r\n experimental: AthenaClientExperimentalOptions & {\r\n athenaStorageBackend: true\r\n }\r\n}\r\n\r\nexport interface AthenaCreateClientOptionsWithTypecheckedColumns extends AthenaCreateClientOptions {\r\n experimental: AthenaClientExperimentalOptions & {\r\n typecheckColumns: true\r\n }\r\n}\r\n\r\nexport interface AthenaCreateClientOptionsWithStorageAndTypecheckedColumns extends AthenaCreateClientOptions {\r\n experimental: AthenaClientExperimentalOptions & {\r\n athenaStorageBackend: true\r\n typecheckColumns: true\r\n }\r\n}\r\n\r\nexport interface AthenaCreateClientConfig extends AthenaCreateClientOptions {\n url?: string | null | undefined\n key: string | null | undefined\n}\n\nexport interface AthenaCreateClientConfigWithStorage extends AthenaCreateClientOptionsWithStorage {\n url?: string | null | undefined\n key: string | null | undefined\n}\n\nexport interface AthenaCreateClientConfigWithTypecheckedColumns extends AthenaCreateClientOptionsWithTypecheckedColumns {\n url?: string | null | undefined\n key: string | null | undefined\n}\n\nexport interface AthenaCreateClientConfigWithStorageAndTypecheckedColumns extends AthenaCreateClientOptionsWithStorageAndTypecheckedColumns {\n url?: string | null | undefined\n key: string | null | undefined\n}\n\nexport interface AthenaClientOverrideOptions extends Omit<AthenaCreateClientOptions, 'experimental'> {\n url?: string | null | undefined\n key?: string | null | undefined\n}\n\nexport interface AthenaClientContextOptions {\n userId?: string | null | undefined\n organizationId?: string | null | undefined\n forceNoCache?: boolean\n headers?: Record<string, string>\n auth?: Omit<AthenaCreateClientAuthOptions, 'url' | 'baseUrl' | 'apiKey'>\n}\n\nexport interface AthenaClientSessionOptions extends AthenaClientContextOptions {\n requestHeaders?: AthenaHeaderBag | Record<string, string | null | undefined>\n}\n\nexport interface AthenaClientFromEnvironmentOptions extends AthenaCreateClientOptions {\n env?: Record<string, string | undefined>\n url?: string | null | undefined\n key?: string | null | undefined\n}\n\nexport interface AthenaClientFromEnvironmentOptionsWithStorage\n extends AthenaClientFromEnvironmentOptions {\n experimental: AthenaClientExperimentalOptions & {\n athenaStorageBackend: true\n }\n}\n\nexport interface AthenaClientFromEnvironmentOptionsWithTypecheckedColumns\n extends AthenaClientFromEnvironmentOptions {\n experimental: AthenaClientExperimentalOptions & {\n typecheckColumns: true\n }\n}\n\nexport interface AthenaClientFromEnvironmentOptionsWithStorageAndTypecheckedColumns\n extends AthenaClientFromEnvironmentOptions {\n experimental: AthenaClientExperimentalOptions & {\n athenaStorageBackend: true\n typecheckColumns: true\n }\n}\n\n/** Client config for builder */\nexport interface AthenaClientConfig {\n baseUrl: string\n apiKey: string\n client?: string\n userId?: string | null | undefined\n organizationId?: string | null | undefined\n forceNoCache?: boolean\n backend?: BackendConfig\n headers?: Record<string, string>\n auth?: AthenaCreateClientAuthOptions\n authUrl?: string\n chat?: AthenaCreateClientChatOptions\n chatUrl?: string\n chatWsUrl?: string\n storageUrl?: string\n experimental?: AthenaClientExperimentalOptions\n}\n\nconst ATHENA_ENV_URL_KEYS = ['ATHENA_URL', 'NEXT_PUBLIC_ATHENA_URL'] as const\nconst ATHENA_ENV_GATEWAY_URL_KEYS = [\n 'ATHENA_DB_URL',\n 'ATHENA_GATEWAY_URL',\n 'NEXT_PUBLIC_ATHENA_DB_API_URL',\n] as const\nconst ATHENA_ENV_AUTH_URL_KEYS = ['ATHENA_AUTH_URL', 'NEXT_PUBLIC_ATHENA_AUTH_URL'] as const\nconst ATHENA_ENV_CHAT_URL_KEYS = ['ATHENA_CHAT_URL', 'NEXT_PUBLIC_ATHENA_CHAT_URL'] as const\nconst ATHENA_ENV_CHAT_WS_URL_KEYS = ['ATHENA_CHAT_WS_URL', 'NEXT_PUBLIC_ATHENA_CHAT_WS_URL'] as const\nconst ATHENA_ENV_STORAGE_URL_KEYS = ['ATHENA_STORAGE_URL', 'NEXT_PUBLIC_ATHENA_STORAGE_URL'] as const\nconst ATHENA_ENV_KEY_KEYS = [\n 'ATHENA_API_KEY',\n 'NEXT_PUBLIC_ATHENA_API_KEY',\n 'ATHENA_GATEWAY_API_KEY',\n 'X_API_KEY',\n] as const\nconst ATHENA_ENV_CLIENT_KEYS = ['ATHENA_CLIENT', 'NEXT_PUBLIC_ATHENA_CLIENT'] as const\n\nfunction normalizeOptionalString(value: string | null | undefined): string | undefined {\n if (typeof value !== 'string') {\n return undefined\n }\n\n const normalizedValue = value.trim()\n return normalizedValue ? normalizedValue : undefined\n}\n\nfunction readFirstEnvValue(\n env: Record<string, string | undefined>,\n keys: readonly string[],\n): string | undefined {\n for (const key of keys) {\n const value = normalizeOptionalString(env[key])\n if (value) {\n return value\n }\n }\n\n return undefined\n}\n\nfunction readHeaderBagValue(\n headers: AthenaClientSessionOptions['requestHeaders'],\n targetKey: string,\n): string | undefined {\n if (!headers) {\n return undefined\n }\n\n if (typeof (headers as AthenaHeaderBag).get === 'function') {\n return normalizeOptionalString((headers as AthenaHeaderBag).get(targetKey))\n }\n\n const normalizedTargetKey = targetKey.toLowerCase()\n for (const [key, value] of Object.entries(headers)) {\n if (key.toLowerCase() !== normalizedTargetKey) {\n continue\n }\n\n if (typeof value === 'string') {\n return normalizeOptionalString(value)\n }\n\n return undefined\n }\n\n return undefined\n}\n\nfunction resolveSessionContextOptions(\n session?: AthenaClientSessionLike | null,\n options?: AthenaClientSessionOptions,\n): AthenaClientContextOptions | undefined {\n const sessionToken = normalizeOptionalString(session?.session?.token)\n const requestCookie =\n readHeaderBagValue(options?.requestHeaders, 'cookie') ??\n readHeaderBagValue(options?.headers, 'cookie')\n\n const authInput = options?.auth\n const resolvedUserId =\n options?.userId !== undefined ? options.userId : session?.user?.id\n const resolvedOrganizationId =\n options?.organizationId !== undefined\n ? options.organizationId\n : session?.session?.activeOrganizationId\n const resolvedBearerToken =\n authInput?.bearerToken !== undefined ? authInput.bearerToken : sessionToken\n const resolvedSessionToken =\n authInput?.sessionToken !== undefined ? authInput.sessionToken : sessionToken\n const resolvedCookie =\n authInput?.cookie !== undefined ? authInput.cookie : requestCookie\n\n const auth =\n authInput !== undefined ||\n resolvedBearerToken !== undefined ||\n resolvedSessionToken !== undefined ||\n resolvedCookie !== undefined\n ? {\n ...(authInput ?? {}),\n ...(resolvedBearerToken !== undefined\n ? { bearerToken: resolvedBearerToken }\n : {}),\n ...(resolvedSessionToken !== undefined\n ? { sessionToken: resolvedSessionToken }\n : {}),\n ...(resolvedCookie !== undefined ? { cookie: resolvedCookie } : {}),\n headers: authInput?.headers ? { ...authInput.headers } : undefined,\n }\n : undefined\n\n if (\n resolvedUserId === undefined &&\n resolvedOrganizationId === undefined &&\n options?.forceNoCache === undefined &&\n !options?.headers &&\n !auth\n ) {\n return undefined\n }\n\n return {\n userId: resolvedUserId,\n organizationId: resolvedOrganizationId,\n forceNoCache: options?.forceNoCache,\n headers: options?.headers ? { ...options.headers } : undefined,\n auth,\n }\n}\n\nfunction resolveClientServiceBaseUrl(\n value: string | null | undefined,\n label: string,\n): string | undefined {\r\n if (value === undefined || value === null) {\r\n return undefined\r\n }\r\n return normalizeAthenaGatewayBaseUrl(value, { label })\r\n}\r\n\r\nfunction appendServicePath(baseUrl: string, segment: string): string {\n const normalizedBaseUrl = normalizeAthenaGatewayBaseUrl(baseUrl, { label: 'Athena public base URL' })\n return `${normalizedBaseUrl}/${segment.replace(/^\\/+/, '')}`\n}\n\nfunction appendRealtimeGatewayPath(baseUrl: string): string {\n const normalizedBaseUrl = normalizeAthenaGatewayBaseUrl(baseUrl, { label: 'Athena public base URL' })\n const wsUrl = new URL(normalizedBaseUrl)\n wsUrl.protocol = wsUrl.protocol === 'https:' ? 'wss:' : 'ws:'\n wsUrl.pathname = `${wsUrl.pathname.replace(/\\/+$/, '')}/wss/gateway`\n wsUrl.search = ''\n wsUrl.hash = ''\n return wsUrl.toString()\n}\n\r\nfunction resolveServiceUrlOverride(\r\n value: string | null | undefined,\r\n label: string,\r\n): string | undefined {\r\n return resolveClientServiceBaseUrl(value, label)\r\n}\r\n\r\nfunction resolveServiceUrls(config: AthenaCreateClientConfig) {\n const baseUrl = resolveClientServiceBaseUrl(config.url, 'Athena public base URL')\n\n return {\n dbUrl:\r\n resolveServiceUrlOverride(config.db?.url, 'Athena DB base URL') ??\r\n resolveServiceUrlOverride(config.gateway?.url, 'Athena gateway base URL') ??\r\n resolveServiceUrlOverride(config.dbUrl, 'Athena DB base URL') ??\r\n resolveServiceUrlOverride(config.gatewayUrl, 'Athena gateway base URL') ??\r\n (baseUrl ? appendServicePath(baseUrl, 'db') : undefined),\r\n authUrl:\n resolveServiceUrlOverride(config.auth?.url, 'Athena auth base URL') ??\n resolveServiceUrlOverride(config.auth?.baseUrl, 'Athena auth base URL') ??\n resolveServiceUrlOverride(config.authUrl, 'Athena auth base URL') ??\n (baseUrl ? appendServicePath(baseUrl, 'auth') : undefined),\n chatUrl:\n resolveServiceUrlOverride(config.chat?.url, 'Athena chat base URL') ??\n resolveServiceUrlOverride(config.chatUrl, 'Athena chat base URL') ??\n (baseUrl ? appendServicePath(baseUrl, 'chat') : undefined),\n chatWsUrl:\n normalizeOptionalString(config.chat?.wsUrl) ??\n normalizeOptionalString(config.chatWsUrl) ??\n (baseUrl ? appendRealtimeGatewayPath(baseUrl) : undefined),\n storageUrl:\n resolveServiceUrlOverride(config.storage?.url, 'Athena storage base URL') ??\n resolveServiceUrlOverride(config.storageUrl, 'Athena storage base URL') ??\n (baseUrl ? appendServicePath(baseUrl, 'storage') : undefined),\n }\n}\n\nfunction resolveOptionalClientName(value: string | null | undefined): string | undefined {\n if (value === undefined || value === null) {\n return undefined\n }\n\n const normalizedValue = value.trim()\n return normalizedValue ? normalizedValue : undefined\n}\n\nfunction resolveRequiredClientApiKey(value: string | null | undefined): string {\n if (value === undefined || value === null) {\n throw new Error(\n 'Athena API key is required. Pass createClient(url, key) with a real API key, or set key in the config object.',\n )\n }\n\n const normalizedValue = value.trim()\n if (!normalizedValue) {\n throw new Error(\n 'Athena API key is required. Pass createClient(url, key) with a real API key, or set key in the config object.',\n )\n }\n\n return normalizedValue\n}\n\nfunction hasHeaderIgnoreCase(headers: Record<string, string>, targetKey: string): boolean {\n const normalizedTargetKey = targetKey.toLowerCase()\n return Object.keys(headers).some(key => key.toLowerCase() === normalizedTargetKey)\n}\n\nfunction mergeClientHeaders(\n current: Record<string, string> | undefined,\n next: Record<string, string> | undefined,\n): Record<string, string> | undefined {\n if (!current && !next) {\n return undefined\n }\n return {\n ...(current ?? {}),\n ...(next ?? {}),\n }\n}\n\nfunction mergeDefinedObject<T extends object>(\n current: T | undefined,\n next: Partial<T> | undefined,\n): T | undefined {\n if (!current && !next) {\n return undefined\n }\n\n const merged = {\n ...(current ?? {}),\n } as T\n const mutableMerged = merged as Record<string, unknown>\n for (const [key, value] of Object.entries(next ?? {})) {\n if (value !== undefined) {\n mutableMerged[key] = value\n }\n }\n return merged\n}\n\nfunction mergeAuthClientOptions(\n current: AthenaCreateClientAuthOptions | undefined,\n next: AthenaCreateClientAuthOptions | undefined,\n): AthenaCreateClientAuthOptions | undefined {\n const merged = mergeDefinedObject(current, next)\n if (!merged) {\n return undefined\n }\n\n const mergedHeaders = mergeClientHeaders(current?.headers, next?.headers)\n if (mergedHeaders) {\n merged.headers = mergedHeaders\n }\n return merged\n}\n\nfunction mergeServiceUrlOverrides(\n current: AthenaCreateClientServiceUrlConfig | undefined,\n next: AthenaCreateClientServiceUrlConfig | undefined,\n): AthenaCreateClientServiceUrlConfig | undefined {\n return mergeDefinedObject(current, next)\n}\n\nfunction toClientContextOverrides(\n context?: AthenaClientContextOptions,\n): AthenaClientOverrideOptions | undefined {\n if (!context) {\n return undefined\n }\n\n return {\n userId: context.userId,\n organizationId: context.organizationId,\n forceNoCache: context.forceNoCache,\n headers: context.headers,\n auth: context.auth\n ? {\n ...context.auth,\n headers: context.auth.headers ? { ...context.auth.headers } : undefined,\n }\n : undefined,\n }\n}\n\nfunction mergeClientOverrideOptions(\n base: AthenaCreateClientConfig,\n overrides?: AthenaClientOverrideOptions,\n): AthenaCreateClientConfig {\n if (!overrides) {\n return {\n ...base,\n headers: base.headers ? { ...base.headers } : undefined,\n auth: base.auth\n ? {\n ...base.auth,\n headers: base.auth.headers ? { ...base.auth.headers } : undefined,\n }\n : undefined,\n db: base.db ? { ...base.db } : undefined,\n gateway: base.gateway ? { ...base.gateway } : undefined,\n chat: base.chat ? { ...base.chat } : undefined,\n storage: base.storage ? { ...base.storage } : undefined,\n }\n }\n\n const merged = mergeDefinedObject(base, overrides) ?? { ...base }\n return {\n ...merged,\n headers: mergeClientHeaders(base.headers, overrides.headers),\n auth: mergeAuthClientOptions(base.auth, overrides.auth),\n db: mergeServiceUrlOverrides(base.db, overrides.db),\n gateway: mergeServiceUrlOverrides(base.gateway, overrides.gateway),\n chat: mergeServiceUrlOverrides(base.chat, overrides.chat) as AthenaCreateClientChatOptions | undefined,\n storage: mergeServiceUrlOverrides(base.storage, overrides.storage),\n }\n}\n\nfunction normalizeAuthClientConfig(\n auth: AthenaCreateClientAuthOptions | undefined,\n defaultBaseUrl?: string,\n): AthenaAuthClientConfig | undefined {\n if (!auth && defaultBaseUrl === undefined) {\n return undefined\n }\n\n const {\n url,\n baseUrl,\n apiKey,\n bearerToken,\n cookie,\n sessionToken,\n ...rest\n } = auth ?? {}\n const normalized: AthenaAuthClientConfig = {\n ...rest,\n }\n const resolvedBaseUrl = resolveClientServiceBaseUrl(\n url ?? baseUrl ?? defaultBaseUrl,\n 'Athena auth base URL',\n )\n\n if (resolvedBaseUrl !== undefined) {\n normalized.baseUrl = resolvedBaseUrl\n }\n if (typeof apiKey === 'string') {\n normalized.apiKey = apiKey\n }\n if (typeof bearerToken === 'string') {\n normalized.bearerToken = bearerToken\n }\n if (typeof cookie === 'string') {\n normalized.cookie = cookie\n }\n if (typeof sessionToken === 'string') {\n normalized.sessionToken = sessionToken\n }\n\n return normalized\n}\n\r\nfunction resolveCreateClientConfig(\n config: AthenaCreateClientConfig,\n): AthenaClientConfig {\n const resolvedUrls = resolveServiceUrls(config)\r\n if (!resolvedUrls.dbUrl) {\r\n throw new Error(\r\n 'Athena DB base URL is required. Pass createClient(url, key) for a unified root, or set db.url / gateway.url / gatewayUrl explicitly.',\r\n )\r\n }\r\n\r\n return {\n baseUrl: resolvedUrls.dbUrl,\n apiKey: resolveRequiredClientApiKey(config.key),\n client: resolveOptionalClientName(config.client),\n userId: config.userId,\n organizationId: config.organizationId,\n forceNoCache: config.forceNoCache,\n backend: toBackendConfig(config.backend),\n headers: config.headers,\n auth: config.auth,\n authUrl: resolvedUrls.authUrl,\n chat: config.chat,\n chatUrl: resolvedUrls.chatUrl,\n chatWsUrl: resolvedUrls.chatWsUrl,\n storageUrl: resolvedUrls.storageUrl,\n experimental: config.experimental,\n }\n}\n\nfunction createClientFromInput<TStrict extends boolean = false>(\n sourceConfig: AthenaCreateClientConfig,\n): AthenaSdkClientWithAuth<TStrict> {\n return createClientFromConfig(resolveCreateClientConfig(sourceConfig), sourceConfig)\n}\n\nfunction createClientFromConfig<TStrict extends boolean = false>(\n config: AthenaClientConfig,\n sourceConfig: AthenaCreateClientConfig,\n): AthenaSdkClientWithAuth<TStrict> {\n const normalizedAuthConfig = normalizeAuthClientConfig(config.auth, config.authUrl)\n const gatewayHeaders: Record<string, string> = {\n ...(config.headers ?? {}),\n }\n if (\n normalizedAuthConfig?.bearerToken &&\n !hasHeaderIgnoreCase(gatewayHeaders, 'X-Athena-Auth-Bearer-Token')\n ) {\n gatewayHeaders['X-Athena-Auth-Bearer-Token'] = normalizedAuthConfig.bearerToken\n }\n if (\n normalizedAuthConfig?.cookie &&\n !hasHeaderIgnoreCase(gatewayHeaders, 'Cookie')\n ) {\n gatewayHeaders.Cookie = normalizedAuthConfig.cookie\n }\n if (\n normalizedAuthConfig?.sessionToken &&\n !hasHeaderIgnoreCase(gatewayHeaders, 'X-Athena-Auth-Session-Token')\n ) {\n gatewayHeaders['X-Athena-Auth-Session-Token'] = normalizedAuthConfig.sessionToken\n }\n\n const gateway = createAthenaGatewayClient({\n baseUrl: config.baseUrl,\n apiKey: config.apiKey,\n client: config.client,\n userId: config.userId,\n organizationId: config.organizationId,\n forceNoCache: config.forceNoCache,\n backend: config.backend,\n headers: gatewayHeaders,\n })\n const formatGatewayResult = createResultFormatter(config.experimental)\n const queryTracer = createQueryTracer(config.experimental)\n const auth = createAuthClient({\n ...(normalizedAuthConfig ?? {}),\n ...(config.forceNoCache ? { forceNoCache: true } : {}),\n })\n function from<TModel extends AthenaModelTarget>(\r\n model: TModel,\r\n ): TableQueryBuilder<RowOf<TModel>, InsertOf<TModel>, UpdateOf<TModel>, unknown, TStrict>\r\n function from<\r\n Row = AthenaRowShape,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n >(\r\n table: string,\r\n options?: AthenaFromOptions,\r\n ): TableQueryBuilder<Row, Insert, Update, unknown, TStrict>\r\n function from<\r\n Row = AthenaRowShape,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n >(\r\n tableOrModel: string | AthenaModelTarget<Row, Insert, Update>,\r\n options?: AthenaFromOptions,\r\n ): TableQueryBuilder<Row, Insert, Update, unknown, TStrict> {\r\n if (isAthenaModelTarget(tableOrModel)) {\r\n if (options?.schema !== undefined) {\r\n throw new Error(\r\n 'from(model) does not accept a schema override because the model already defines its target.',\r\n )\r\n }\r\n return createTableBuilder<Row, Insert, Update, unknown, TStrict>(\r\n resolveAthenaModelTargetTableName(tableOrModel),\r\n gateway,\r\n formatGatewayResult,\r\n queryTracer,\r\n config.experimental,\r\n )\r\n }\r\n\r\n const resolvedTableName = resolveTableNameForCall(tableOrModel as string, options?.schema)\r\n return createTableBuilder<Row, Insert, Update, unknown, TStrict>(\r\n resolvedTableName,\r\n gateway,\r\n formatGatewayResult,\r\n queryTracer,\r\n config.experimental,\r\n )\r\n }\r\n const rpc: AthenaSdkClient<TStrict>['rpc'] = <Row = unknown, Args extends AthenaJsonObject = AthenaJsonObject>(\r\n fn: string,\r\n args?: Args,\r\n options?: AthenaRpcCallOptions,\r\n ) => {\r\n const normalizedFn = fn.trim()\r\n if (!normalizedFn) {\r\n throw new Error('rpc requires a function name')\r\n }\r\n return createRpcBuilder<Row, TStrict>(\r\n normalizedFn,\r\n args as AthenaJsonObject | undefined,\r\n options,\r\n gateway,\r\n formatGatewayResult,\r\n queryTracer,\r\n captureTraceCallsite(queryTracer),\r\n Boolean(config.experimental?.debugAst),\r\n )\r\n }\r\n const query = createQueryBuilder(\n gateway,\n formatGatewayResult,\n config.experimental,\n queryTracer,\n ) as AthenaSdkClient<TStrict>['query']\n const db = createDbModule({ from, rpc, query })\n const chat = createChatModule({\n baseUrl: config.chatUrl,\n apiKey: config.apiKey,\n client: config.client,\n headers: config.headers,\n bearerToken: normalizedAuthConfig?.bearerToken,\n cookie: normalizedAuthConfig?.cookie,\n sessionToken: normalizedAuthConfig?.sessionToken,\n forceNoCache: config.forceNoCache,\n wsUrl: config.chatWsUrl,\n webSocketFactory: config.chat?.webSocketFactory ?? undefined,\n })\n const request: AthenaSdkClient<TStrict>['request'] = async <T = unknown>(\n options: AthenaRequestOptions,\n ): Promise<AthenaRequestResponse<T>> => {\n const method = options.method ?? 'GET'\n const responseType = options.responseType ?? 'json'\n const service = options.service ?? 'db'\n const baseUrlByService: Record<AthenaRequestService, string | undefined> = {\n db: config.baseUrl,\n auth: config.authUrl,\n chat: config.chatUrl,\n storage: config.storageUrl,\n }\n\n const resolvedBaseUrl = options.url ?? baseUrlByService[service]\n if (!resolvedBaseUrl) {\n throw new Error(\n `Athena ${service} base URL is not configured. Pass createClient({ url }) for unified routing or set the service-specific URL first.`,\n )\n }\n\n const normalizedBaseUrl = normalizeAthenaGatewayBaseUrl(resolvedBaseUrl, {\n label: `Athena ${service} base URL`,\n })\n const normalizedPath = options.url\n ? ''\n : (() => {\n const path = options.path?.trim()\n if (!path) {\n throw new Error('client.request(...) requires either an absolute url or a non-empty path.')\n }\n return path.startsWith('/') ? path : `/${path}`\n })()\n const targetUrl = options.url\n ? `${normalizedBaseUrl}${toRequestQueryString(options.query)}`\n : `${normalizedBaseUrl}${normalizedPath}${toRequestQueryString(options.query)}`\n\n const headers: Record<string, string> = {\n 'X-Athena-Sdk': buildSdkHeaderValue(SDK_NAME),\n ...(config.headers ?? {}),\n ...(options.headers ?? {}),\n }\n\n if (service !== 'auth') {\n headers.apikey = headers.apikey ?? config.apiKey\n headers['x-api-key'] = headers['x-api-key'] ?? config.apiKey\n if (config.client && !hasHeaderIgnoreCase(headers, 'X-Athena-Client')) {\n headers['X-Athena-Client'] = config.client\n }\n if (config.userId && !hasHeaderIgnoreCase(headers, 'X-User-Id')) {\n headers['X-User-Id'] = config.userId\n }\n if (config.organizationId && !hasHeaderIgnoreCase(headers, 'X-Organization-Id')) {\n headers['X-Organization-Id'] = config.organizationId\n }\n if (normalizedAuthConfig?.sessionToken && !hasHeaderIgnoreCase(headers, 'X-Athena-Auth-Session-Token')) {\n headers['X-Athena-Auth-Session-Token'] = normalizedAuthConfig.sessionToken\n }\n if (normalizedAuthConfig?.bearerToken && !hasHeaderIgnoreCase(headers, 'X-Athena-Auth-Bearer-Token')) {\n headers['X-Athena-Auth-Bearer-Token'] = normalizedAuthConfig.bearerToken\n }\n if (normalizedAuthConfig?.cookie && !hasHeaderIgnoreCase(headers, 'Cookie')) {\n headers.Cookie = normalizedAuthConfig.cookie\n }\n } else {\n const authApiKey = normalizedAuthConfig?.apiKey ?? config.apiKey\n if (authApiKey && !hasHeaderIgnoreCase(headers, 'x-api-key')) {\n headers.apikey = headers.apikey ?? authApiKey\n headers['x-api-key'] = headers['x-api-key'] ?? authApiKey\n }\n if (normalizedAuthConfig?.bearerToken && !hasHeaderIgnoreCase(headers, 'Authorization')) {\n headers.Authorization = `Bearer ${normalizedAuthConfig.bearerToken}`\n }\n if (normalizedAuthConfig?.cookie && !hasHeaderIgnoreCase(headers, 'Cookie')) {\n headers.Cookie = normalizedAuthConfig.cookie\n }\n if (normalizedAuthConfig?.sessionToken && !hasHeaderIgnoreCase(headers, 'X-Athena-Auth-Session-Token')) {\n headers['X-Athena-Auth-Session-Token'] = normalizedAuthConfig.sessionToken\n }\n }\n\n const shouldSendJsonBody =\n options.body !== undefined &&\n options.body !== null &&\n !(options.body instanceof FormData) &&\n !(options.body instanceof Blob) &&\n !(options.body instanceof URLSearchParams) &&\n !(options.body instanceof ArrayBuffer) &&\n !ArrayBuffer.isView(options.body) &&\n typeof options.body !== 'string'\n\n if (shouldSendJsonBody && !hasHeaderIgnoreCase(headers, 'Content-Type')) {\n headers['Content-Type'] = 'application/json'\n }\n\n const response = await fetch(targetUrl, {\n method,\n headers,\n body:\n options.body === undefined || options.body === null\n ? undefined\n : shouldSendJsonBody\n ? JSON.stringify(options.body)\n : (options.body as RequestInit['body']),\n signal: options.signal,\n credentials: options.credentials,\n })\n\n if (responseType === 'response') {\n return {\n ok: response.ok,\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n data: null,\n raw: response,\n }\n }\n\n const rawText = await response.text()\n const parsed =\n responseType === 'text'\n ? rawText\n : parseArbitraryResponseBody(rawText, response.headers.get('content-type'))\n\n return {\n ok: response.ok,\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n data: parsed as T | string | null,\n raw: response,\n }\n }\n const withContext: AthenaSdkClientWithAuth<TStrict>['withContext'] = context =>\n createClientFromInput<TStrict>(\n mergeClientOverrideOptions(sourceConfig, toClientContextOverrides(context)),\n )\n const withSession: AthenaSdkClientWithAuth<TStrict>['withSession'] = (session, options) =>\n createClientFromInput<TStrict>(\n mergeClientOverrideOptions(\n sourceConfig,\n toClientContextOverrides(resolveSessionContextOptions(session, options)),\n ),\n )\n const authWithOptions: AthenaSdkClientWithAuth<TStrict>['withOptions'] = options =>\n createClientFromInput<TStrict>(mergeClientOverrideOptions(sourceConfig, options))\n\n const sdkClient: AthenaSdkClientWithAuth<TStrict> = {\n from,\n db,\n rpc,\n query,\n request,\n verifyConnection: gateway.verifyConnection,\n auth: auth.auth,\n chat,\n withContext,\n withSession,\n withOptions: authWithOptions,\n }\n\n if (config.experimental?.athenaStorageBackend) {\n const storageWithContext: AthenaSdkClientWithStorage<TStrict>['withContext'] = context =>\n createClientFromInput<TStrict>(\n mergeClientOverrideOptions(sourceConfig, toClientContextOverrides(context)),\n ) as AthenaSdkClientWithStorage<TStrict>\n const storageWithSession: AthenaSdkClientWithStorage<TStrict>['withSession'] = (session, options) =>\n createClientFromInput<TStrict>(\n mergeClientOverrideOptions(\n sourceConfig,\n toClientContextOverrides(resolveSessionContextOptions(session, options)),\n ),\n ) as AthenaSdkClientWithStorage<TStrict>\n const storageWithOptions: AthenaSdkClientWithStorage<TStrict>['withOptions'] = options =>\n createClientFromInput<TStrict>(\n mergeClientOverrideOptions(sourceConfig, options),\n ) as AthenaSdkClientWithStorage<TStrict>\n const storageClient: AthenaSdkClientWithStorage<TStrict> = {\n ...sdkClient,\n withContext: storageWithContext,\n withSession: storageWithSession,\n withOptions: storageWithOptions,\n storage: createStorageModule(gateway, {\n ...config.experimental.storage,\n ...(config.storageUrl\n ? {\n baseUrl: config.storageUrl,\r\n stripBasePath: true,\r\n }\r\n : {}),\r\n } as AthenaStorageClientConfig),\r\n }\r\n return storageClient\r\n }\r\n\r\n return sdkClient\r\n}\r\n\r\nexport interface AthenaClientBuilder<\n StorageEnabled extends boolean = false,\n TStrict extends boolean = false,\n> {\n /** Set the public Athena base URL. */\n url(url: string | null | undefined): AthenaClientBuilder<StorageEnabled, TStrict>\n /** Set the API key used for all requests. */\n key(apiKey: string | null | undefined): AthenaClientBuilder<StorageEnabled, TStrict>\n /** Set the default backend routing strategy. */\n backend(backend: BackendConfig | BackendType): AthenaClientBuilder<StorageEnabled, TStrict>\n /** Set the default Athena client routing key. */\n client(clientName: string | null | undefined): AthenaClientBuilder<StorageEnabled, TStrict>\n /** Attach static headers to every request. */\r\n headers(headers: Record<string, string>): AthenaClientBuilder<StorageEnabled, TStrict>\r\n /** Configure Athena Auth client behavior for `client.auth.*` methods. */\r\n auth(config: AthenaCreateClientAuthOptions): AthenaClientBuilder<StorageEnabled, TStrict>\r\n /** Configure experimental client options and narrow the built client when storage or strict column checks are enabled. */\r\n experimental(\r\n options: AthenaClientExperimentalOptions & { athenaStorageBackend: true; typecheckColumns: true },\r\n ): AthenaClientBuilder<true, true>\r\n experimental(\r\n options: AthenaClientExperimentalOptions & { athenaStorageBackend: true },\r\n ): AthenaClientBuilder<true, TStrict>\r\n experimental(\r\n options: AthenaClientExperimentalOptions & { typecheckColumns: true },\r\n ): AthenaClientBuilder<StorageEnabled, true>\r\n experimental(options: AthenaClientExperimentalOptions): AthenaClientBuilder<StorageEnabled, TStrict>\r\n /** Apply createClient options and narrow the built client when storage is enabled. */\r\n options(options: AthenaCreateClientOptionsWithStorageAndTypecheckedColumns): AthenaClientBuilder<true, true>\r\n options(options: AthenaCreateClientOptionsWithStorage): AthenaClientBuilder<true, TStrict>\r\n options(options: AthenaCreateClientOptionsWithTypecheckedColumns): AthenaClientBuilder<StorageEnabled, true>\r\n options(options: AthenaCreateClientOptions): AthenaClientBuilder<StorageEnabled, TStrict>\r\n /** Build the immutable Athena SDK client. */\r\n build(): StorageEnabled extends true ? AthenaSdkClientWithStorage<TStrict> : AthenaSdkClientWithAuth<TStrict>\r\n}\r\n\r\n/** Canonical Athena client factory with builder-based configuration. */\r\nexport class AthenaClient {\n /** Create a fluent builder for a strongly-typed Athena SDK client. */\n static builder(): AthenaClientBuilder<false, false> {\n return createAthenaClientBuilder(config => createClientFromInput(config))\n }\n\n /** Build a client from process environment variables. */\n static fromEnvironment(\n options: AthenaClientFromEnvironmentOptionsWithStorageAndTypecheckedColumns,\n ): AthenaSdkClientWithStorage<true>\n static fromEnvironment(\n options: AthenaClientFromEnvironmentOptionsWithStorage,\n ): AthenaSdkClientWithStorage<false>\n static fromEnvironment(\n options: AthenaClientFromEnvironmentOptionsWithTypecheckedColumns,\n ): AthenaSdkClientWithAuth<true>\n static fromEnvironment(\n options?: AthenaClientFromEnvironmentOptions,\n ): AthenaSdkClientWithAuth<false>\n static fromEnvironment(\n options: AthenaClientFromEnvironmentOptions = {},\n ): AthenaSdkClientWithAuth<false> {\n const env = options.env ?? process.env\n const url = options.url ?? readFirstEnvValue(env, ATHENA_ENV_URL_KEYS)\n const gatewayUrl =\n options.gatewayUrl ?? readFirstEnvValue(env, ATHENA_ENV_GATEWAY_URL_KEYS)\n const authUrl =\n options.authUrl ?? readFirstEnvValue(env, ATHENA_ENV_AUTH_URL_KEYS)\n const chatUrl =\n options.chatUrl ?? readFirstEnvValue(env, ATHENA_ENV_CHAT_URL_KEYS)\n const chatWsUrl =\n options.chatWsUrl ?? readFirstEnvValue(env, ATHENA_ENV_CHAT_WS_URL_KEYS)\n const storageUrl =\n options.storageUrl ?? readFirstEnvValue(env, ATHENA_ENV_STORAGE_URL_KEYS)\n const key = options.key ?? readFirstEnvValue(env, ATHENA_ENV_KEY_KEYS)\n const client =\n options.client ?? readFirstEnvValue(env, ATHENA_ENV_CLIENT_KEYS)\n\n if ((!url && !gatewayUrl) || !key) {\n throw new Error(\n 'AthenaClient.fromEnvironment() requires an API key plus a public or gateway URL. Supported aliases include ATHENA_API_KEY, NEXT_PUBLIC_ATHENA_API_KEY, ATHENA_GATEWAY_API_KEY, X_API_KEY, ATHENA_URL, NEXT_PUBLIC_ATHENA_URL, ATHENA_GATEWAY_URL, and ATHENA_DB_URL.',\n )\n }\n\n const { env: _env, ...clientOptions } = options\n void _env\n\n return createClient({\n ...clientOptions,\n url,\n gatewayUrl,\n authUrl,\n chatUrl,\n chatWsUrl,\n storageUrl,\n key,\n client,\n })\n }\n}\n\r\n/** Create client (convenience wrapper; use AthenaClient.builder() for full control) */\r\nexport function createClient(\r\n config: AthenaCreateClientConfigWithStorageAndTypecheckedColumns,\r\n): AthenaSdkClientWithStorage<true>\r\nexport function createClient(\r\n config: AthenaCreateClientConfigWithStorage,\r\n): AthenaSdkClientWithStorage<false>\r\nexport function createClient(\r\n config: AthenaCreateClientConfigWithTypecheckedColumns,\r\n): AthenaSdkClientWithAuth<true>\r\nexport function createClient(\r\n config: AthenaCreateClientConfig,\r\n): AthenaSdkClientWithAuth<false>\r\nexport function createClient(\n url: string | null | undefined,\n apiKey: string | null | undefined,\n options: AthenaCreateClientOptionsWithStorageAndTypecheckedColumns,\n): AthenaSdkClientWithStorage<true>\nexport function createClient(\n url: string | null | undefined,\n apiKey: string | null | undefined,\n options: AthenaCreateClientOptionsWithStorage,\n): AthenaSdkClientWithStorage<false>\nexport function createClient(\n url: string | null | undefined,\n apiKey: string | null | undefined,\n options: AthenaCreateClientOptionsWithTypecheckedColumns,\n): AthenaSdkClientWithAuth<true>\nexport function createClient(\n url: string | null | undefined,\n apiKey: string | null | undefined,\n options?: AthenaCreateClientOptions,\n): AthenaSdkClientWithAuth<false>\nexport function createClient(\n configOrUrl: AthenaCreateClientConfig | string | null | undefined,\n apiKey?: string | null,\n options?: AthenaCreateClientOptions,\n): AthenaSdkClientWithAuth<false> {\n if (typeof configOrUrl === 'string' || configOrUrl === null || configOrUrl === undefined) {\n return createClientFromInput({\n url: configOrUrl,\n key: apiKey ?? '',\n ...options,\n })\n }\n\n return createClientFromInput(configOrUrl)\n}\n","/**\r\n * athena gateway types\r\n *\r\n * type definitions for the athena gateway api client and react hook\r\n */\r\n\r\nexport type AthenaGatewayMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE'\r\nexport type AthenaGatewayEndpointPath =\r\n | '/gateway/fetch'\r\n | '/gateway/insert'\r\n | '/gateway/update'\r\n | '/gateway/delete'\r\n | '/gateway/rpc'\r\n | '/gateway/query'\r\n | `/rpc/${string}`\r\n | `/storage/${string}`\r\n\r\nexport type AthenaCountOption = 'exact' | 'planned' | 'estimated'\r\n\r\nexport type AthenaJsonPrimitive = string | number | boolean | null\r\nexport type AthenaJsonValue = AthenaJsonPrimitive | AthenaJsonObject | AthenaJsonArray\r\nexport interface AthenaJsonObject {\r\n [key: string]: AthenaJsonValue\r\n}\r\nexport type AthenaJsonArray = AthenaJsonValue[]\r\n\r\nexport type AthenaConditionValue = AthenaJsonPrimitive\r\nexport type AthenaConditionArrayValue = Array<AthenaConditionValue>\r\nexport type AthenaConditionCastType = string\r\n\r\nexport type AthenaConditionOperator =\r\n | 'eq'\r\n | 'neq'\r\n | 'gt'\r\n | 'gte'\r\n | 'lt'\r\n | 'lte'\r\n | 'like'\r\n | 'ilike'\r\n | 'is'\r\n | 'in'\r\n | 'contains'\r\n | 'containedBy'\r\n | 'not'\r\n | 'or'\r\n\r\nexport interface AthenaGatewayCondition {\r\n column?: string\r\n operator: AthenaConditionOperator\r\n value?: AthenaConditionValue | AthenaConditionArrayValue | string\r\n /**\r\n * Optional explicit cast for `value` (for example `\"uuid\"`).\r\n * Older gateways ignore unknown fields; newer gateways may use this hint.\r\n */\r\n value_cast?: AthenaConditionCastType\r\n /**\r\n * Optional explicit cast for `column` (for example `\"text\"`).\r\n * Used by SDK SQL fallback for typed comparisons.\r\n */\r\n column_cast?: AthenaConditionCastType\r\n /** Back-compat shape expected by older gateway implementations */\r\n eq_column?: string\r\n eq_value?: AthenaConditionValue | AthenaConditionArrayValue | string\r\n /** Optional cast hint aligned with legacy eq_* fields */\r\n eq_value_cast?: AthenaConditionCastType\r\n /** Optional cast hint aligned with legacy eq_* fields */\r\n eq_column_cast?: AthenaConditionCastType\r\n}\r\n\r\nexport type AthenaSortDirection = 'ascending' | 'descending'\r\n\r\nexport interface AthenaSortBy {\r\n field: string\r\n direction: AthenaSortDirection\r\n}\r\n\r\nexport interface AthenaFetchPayload {\r\n select?: string | AthenaJsonObject\r\n view_name?: string\r\n table_name?: string\r\n columns?: string[] | string\r\n where?: AthenaJsonObject\r\n orderBy?: AthenaJsonObject | AthenaJsonArray\r\n conditions?: AthenaGatewayCondition[]\r\n limit?: number\r\n offset?: number\r\n current_page?: number\r\n page_size?: number\r\n total_pages?: number\r\n strip_nulls?: boolean\r\n count?: AthenaCountOption\r\n head?: boolean\r\n group_by?: string\r\n time_granularity?: 'day' | 'hour' | 'minute'\r\n aggregation_column?: string\r\n aggregation_strategy?: 'cumulative_sum'\r\n aggregation_dedup?: boolean\r\n sort_by?: AthenaSortBy\r\n}\r\n\r\nexport interface AthenaInsertPayload<\r\n TInsertBody = AthenaJsonObject,\r\n TUpdateBody = AthenaJsonObject,\r\n> {\r\n table_name: string\r\n insert_body: TInsertBody | TInsertBody[]\r\n update_body?: TUpdateBody\r\n columns?: string[] | string\r\n count?: AthenaCountOption\r\n head?: boolean\r\n default_to_null?: boolean\r\n on_conflict?: string | string[]\r\n}\r\n\r\nexport interface AthenaDeletePayload {\r\n table_name: string\r\n resource_id?: string\r\n columns?: string[] | string\r\n conditions?: AthenaGatewayCondition[]\r\n sort_by?: AthenaSortBy\r\n current_page?: number\r\n page_size?: number\r\n total_pages?: number\r\n}\r\n\r\nexport interface AthenaUpdatePayload<TUpdateBody = AthenaJsonObject>\r\n extends AthenaFetchPayload {\r\n set?: TUpdateBody\r\n data?: TUpdateBody\r\n}\r\n\r\nexport type AthenaRpcFilterOperator =\r\n | 'eq'\r\n | 'neq'\r\n | 'gt'\r\n | 'gte'\r\n | 'lt'\r\n | 'lte'\r\n | 'like'\r\n | 'ilike'\r\n | 'is'\r\n | 'in'\r\n\r\nexport interface AthenaRpcFilter {\r\n column: string\r\n operator: AthenaRpcFilterOperator\r\n value?: AthenaConditionValue | AthenaConditionArrayValue | string\r\n}\r\n\r\nexport interface AthenaRpcOrder {\r\n column: string\r\n ascending?: boolean\r\n}\r\n\r\nexport interface AthenaRpcPayload<TArgs = AthenaJsonObject> {\r\n function: string\r\n function_name?: string\r\n schema?: string\r\n args?: TArgs\r\n select?: string\r\n filters?: AthenaRpcFilter[]\r\n count?: AthenaCountOption\r\n head?: boolean\r\n limit?: number\r\n offset?: number\r\n order?: AthenaRpcOrder\r\n}\r\n\r\nexport interface AthenaQueryPayload {\r\n query: string\r\n}\r\n\r\n/** Backend type for Athena client (aligns with athena-rs) */\r\nexport type BackendType = 'athena' | 'postgrest' | 'postgresql' | 'scylladb'\r\n\r\n/** Backend config: type from SDK + backend-scoped options */\r\nexport interface BackendConfig {\r\n type: BackendType\r\n options?: AthenaJsonObject\r\n}\r\n\r\n/** Pre-defined backends for lean usage: backend: Backend.Athena */\r\nexport const Backend = {\r\n Athena: { type: 'athena' } as const,\r\n Postgrest: { type: 'postgrest' } as const,\r\n PostgreSQL: { type: 'postgresql' } as const,\r\n ScyllaDB: { type: 'scylladb' } as const,\r\n} as const satisfies Record<string, BackendConfig>\r\n\r\nexport type BackendOption = BackendConfig | BackendType\r\n\r\nexport interface AthenaGatewayBaseOptions {\n baseUrl?: string\n apiKey?: string\n client?: string\n backend?: BackendOption\n publishEvent?: string\n forceNoCache?: boolean\n headers?: Record<string, string>\n userId?: string | null\n organizationId?: string | null\n}\n\r\nexport type AthenaGatewayHookConfig = AthenaGatewayBaseOptions\r\nexport interface AthenaGatewayCallOptions extends AthenaGatewayBaseOptions {\r\n schema?: string\r\n count?: AthenaCountOption\r\n head?: boolean\r\n defaultToNull?: boolean\r\n stripNulls?: boolean\r\n onConflict?: string | string[]\r\n updateBody?: AthenaJsonObject\r\n}\r\n\r\nexport interface AthenaRpcCallOptions extends AthenaGatewayCallOptions {\r\n count?: AthenaCountOption\r\n get?: boolean\r\n}\r\n\r\nexport interface AthenaGatewayResponse<T = unknown> {\r\n ok: boolean\r\n status: number\r\n statusText?: string | null\r\n data: T | null\r\n count?: number | null\r\n error?: string\r\n errorDetails?: AthenaGatewayErrorDetails | null\r\n raw: unknown\r\n}\r\n\r\nexport type AthenaGatewayErrorCode =\r\n | 'NETWORK_ERROR'\r\n | 'INVALID_URL'\r\n | 'HTTP_ERROR'\r\n | 'INVALID_JSON'\r\n | 'UNKNOWN_ERROR'\r\n\r\nexport interface AthenaGatewayErrorDetails {\r\n code: AthenaGatewayErrorCode\r\n message: string\r\n status: number\r\n endpoint?: AthenaGatewayEndpointPath\r\n method?: AthenaGatewayMethod\r\n requestId?: string\r\n hint?: string\r\n cause?: string\r\n}\r\n\r\nexport interface AthenaGatewayConnectionOptions {\r\n path?: `/${string}`\r\n headers?: Record<string, string>\r\n signal?: AbortSignal\r\n}\r\n\r\nexport interface AthenaGatewayConnectionResult {\r\n ok: boolean\r\n reachable: boolean\r\n status: number\r\n statusText?: string | null\r\n baseUrl: string\r\n url: string\r\n error?: string\r\n errorDetails?: AthenaGatewayErrorDetails | null\r\n raw: unknown\r\n}\r\n\r\nexport interface AthenaGatewayResponseLog extends AthenaGatewayResponse {\r\n timestamp: string\r\n}\r\n\r\nexport interface AthenaGatewayCallLog {\r\n endpoint: AthenaGatewayEndpointPath\r\n method: AthenaGatewayMethod\r\n payload: unknown\r\n headers: Record<string, string>\r\n timestamp: string\r\n}\r\n\r\nexport interface AthenaGatewayHookResult {\r\n fetchGateway: <T = unknown>(\r\n payload: AthenaFetchPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ) => Promise<AthenaGatewayResponse<T>>\r\n insertGateway: <T = unknown>(\r\n payload: AthenaInsertPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ) => Promise<AthenaGatewayResponse<T>>\r\n updateGateway: <T = unknown>(\r\n payload: AthenaUpdatePayload,\r\n options?: AthenaGatewayCallOptions,\r\n ) => Promise<AthenaGatewayResponse<T>>\r\n deleteGateway: <T = unknown>(\r\n payload: AthenaDeletePayload,\r\n options?: AthenaGatewayCallOptions,\r\n ) => Promise<AthenaGatewayResponse<T>>\r\n rpcGateway: <T = unknown>(\r\n payload: AthenaRpcPayload,\r\n options?: AthenaRpcCallOptions,\r\n ) => Promise<AthenaGatewayResponse<T>>\r\n isLoading: boolean\r\n error: string | null\r\n lastRequest: AthenaGatewayCallLog | null\r\n lastResponse: AthenaGatewayResponseLog | null\r\n baseUrl: string\r\n}\r\n","import type {\r\n AnyModelDef,\r\n DatabaseDef,\r\n ModelDef,\r\n ModelMetadata,\r\n RegistryDef,\r\n SchemaDef,\r\n} from './types.ts'\r\n\r\n/**\n * @deprecated Prefer `table(...).schema(...).columns(...).primaryKey(...)` for\n * new model contracts. `defineModel(...)` is retained for legacy compatibility,\n * manual low-level contracts, and legacy generator output.\n *\n * Declares a model contract with explicit metadata and typed row/insert/update shapes.\n */\nexport function defineModel<\n Row,\n Insert = Partial<Row>,\n Update = Partial<Insert>,\n Meta extends ModelMetadata<Row> = ModelMetadata<Row>,\n>(input: { meta: Meta }): ModelDef<Row, Insert, Update, Meta> {\r\n return input\r\n}\r\n\r\n/**\r\n * Declares a schema-level model map.\r\n */\r\nexport function defineSchema<\r\n Models extends Record<string, AnyModelDef>,\r\n>(models: Models): SchemaDef<Models> {\r\n return { models }\r\n}\r\n\r\n/**\r\n * Declares a database-level schema map.\r\n */\r\nexport function defineDatabase<\r\n Schemas extends Record<string, SchemaDef<Record<string, AnyModelDef>>>,\r\n>(schemas: Schemas): DatabaseDef<Schemas> {\r\n return { schemas }\r\n}\r\n\r\n/**\r\n * Declares a top-level multi-database registry.\r\n */\r\nexport function defineRegistry<\r\n Databases extends Record<string, DatabaseDef<Record<string, SchemaDef<Record<string, AnyModelDef>>>>>,\r\n>(databases: Databases): RegistryDef<Databases> {\r\n return databases\r\n}\r\n\r\n","import type { AnyModelDef, InsertOf, RowOf, UpdateOf } from './types.ts'\r\n\r\ntype ModelValueRecord = Record<string, unknown>\r\n\r\nexport type ModelFormNullishMode = 'empty-string' | 'undefined' | 'null'\r\n\r\ntype NullishValueByMode = {\r\n 'empty-string': ''\r\n undefined: undefined\r\n null: null\r\n}\r\n\r\ntype MapNullableToFormValue<TField, TMode extends ModelFormNullishMode> =\r\n null extends TField\r\n ? Exclude<TField, null> | NullishValueByMode[TMode]\r\n : TField\r\n\r\n/**\r\n * Form value shape derived from a model insert payload.\r\n * Nullable fields are remapped to the selected nullish representation.\r\n */\r\nexport type ModelFormValues<\r\n TModel extends AnyModelDef,\r\n TMode extends ModelFormNullishMode = 'empty-string',\r\n> = {\r\n [K in keyof InsertOf<TModel>]: MapNullableToFormValue<InsertOf<TModel>[K], TMode>\r\n}\r\n\r\n/**\r\n * Alias for deriving form value types from any model contract.\r\n */\r\nexport type FormValuesOf<\r\n TModel extends AnyModelDef,\r\n TMode extends ModelFormNullishMode = 'empty-string',\r\n> = ModelFormValues<TModel, TMode>\r\n\r\n/**\r\n * Default value shape for form initialization.\r\n */\r\nexport type ModelFormDefaults<\r\n TModel extends AnyModelDef,\r\n TMode extends ModelFormNullishMode = 'empty-string',\r\n> = Partial<ModelFormValues<TModel, TMode>>\r\n\r\nexport interface ToModelFormDefaultsOptions<TMode extends ModelFormNullishMode = 'empty-string'> {\r\n /**\r\n * Controls how nullable model values are represented in form defaults.\r\n * - `empty-string` (default): `null -> \"\"`\r\n * - `undefined`: `null -> undefined`\r\n * - `null`: keeps `null`\r\n */\r\n nullishMode?: TMode\r\n}\r\n\r\nexport interface ToModelPayloadOptions {\r\n /**\r\n * Converts `\"\"` into `null` for nullable model fields.\r\n * Defaults to `true`.\r\n */\r\n emptyStringAsNull?: boolean\r\n /**\r\n * Omits `undefined` keys from the outgoing payload.\r\n * Defaults to `true`.\r\n */\r\n stripUndefined?: boolean\r\n}\r\n\r\nfunction resolveNullishValue(mode: ModelFormNullishMode): '' | undefined | null {\r\n if (mode === 'undefined') return undefined\r\n if (mode === 'null') return null\r\n return ''\r\n}\r\n\r\nfunction isRecord(value: unknown): value is ModelValueRecord {\r\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\r\n}\r\n\r\nfunction isNullableColumn(model: AnyModelDef, key: string): boolean {\r\n const nullable = model.meta.nullable as Partial<Record<string, boolean>> | undefined\r\n return nullable?.[key] === true\r\n}\r\n\r\n/**\r\n * Normalizes model data into form-safe defaults using model nullability metadata.\r\n */\r\nexport function toModelFormDefaults<\r\n TModel extends AnyModelDef,\r\n TMode extends ModelFormNullishMode = 'empty-string',\r\n>(\r\n model: TModel,\r\n values?: Partial<RowOf<TModel>> | Partial<InsertOf<TModel>> | null,\r\n options?: ToModelFormDefaultsOptions<TMode>,\r\n): ModelFormDefaults<TModel, TMode> {\r\n const source = values as ModelValueRecord | null | undefined\r\n if (!isRecord(source)) {\r\n return {} as ModelFormDefaults<TModel, TMode>\r\n }\r\n\r\n const mode = options?.nullishMode ?? ('empty-string' as TMode)\r\n const nullishValue = resolveNullishValue(mode)\r\n const result: ModelValueRecord = {}\r\n\r\n for (const [key, value] of Object.entries(source)) {\r\n if (value === null && isNullableColumn(model, key)) {\r\n result[key] = nullishValue\r\n continue\r\n }\r\n result[key] = value\r\n }\r\n\r\n return result as ModelFormDefaults<TModel, TMode>\r\n}\r\n\r\n/**\r\n * Normalizes form values back into model-compatible insert/update payloads.\r\n */\r\nexport function toModelPayload<TModel extends AnyModelDef>(\r\n model: TModel,\r\n formValues: Partial<ModelFormValues<TModel, 'empty-string' | 'undefined' | 'null'>>,\r\n options?: ToModelPayloadOptions,\r\n): Partial<InsertOf<TModel>> {\r\n const emptyStringAsNull = options?.emptyStringAsNull ?? true\r\n const stripUndefined = options?.stripUndefined ?? true\r\n const result: ModelValueRecord = {}\r\n\r\n for (const [key, rawValue] of Object.entries(formValues as ModelValueRecord)) {\r\n if (rawValue === undefined && stripUndefined) {\r\n continue\r\n }\r\n\r\n if (emptyStringAsNull && rawValue === '' && isNullableColumn(model, key)) {\r\n result[key] = null\r\n continue\r\n }\r\n\r\n result[key] = rawValue\r\n }\r\n\r\n return result as Partial<InsertOf<TModel>>\r\n}\r\n\r\n/**\r\n * Runtime form adapter bound to a model contract.\r\n */\r\nexport interface ModelFormAdapter<TModel extends AnyModelDef> {\r\n model: TModel\r\n toDefaults<TMode extends ModelFormNullishMode = 'empty-string'>(\r\n values?: Partial<RowOf<TModel>> | Partial<InsertOf<TModel>> | null,\r\n options?: ToModelFormDefaultsOptions<TMode>,\r\n ): ModelFormDefaults<TModel, TMode>\r\n toInsert(\r\n values: Partial<ModelFormValues<TModel, 'empty-string' | 'undefined' | 'null'>>,\r\n options?: ToModelPayloadOptions,\r\n ): Partial<InsertOf<TModel>>\r\n toUpdate(\r\n values: Partial<ModelFormValues<TModel, 'empty-string' | 'undefined' | 'null'>>,\r\n options?: ToModelPayloadOptions,\r\n ): Partial<UpdateOf<TModel>>\r\n}\r\n\r\n/**\r\n * Creates a small model-aware adapter for form defaults and payload normalization.\r\n */\r\nexport function createModelFormAdapter<TModel extends AnyModelDef>(model: TModel): ModelFormAdapter<TModel> {\r\n return {\r\n model,\r\n toDefaults(values, options) {\r\n return toModelFormDefaults(model, values, options)\r\n },\r\n toInsert(values, options) {\r\n return toModelPayload(model, values, options) as Partial<InsertOf<TModel>>\r\n },\r\n toUpdate(values, options) {\r\n return toModelPayload(model, values, options) as Partial<UpdateOf<TModel>>\r\n },\r\n }\r\n}\r\n","import type { ZodType } from 'zod'\r\nimport type { ModelColumnKind } from './types.ts'\r\n\r\nexport const COLUMN_CONFIG = Symbol('athena.column.config')\r\n\r\nexport interface ColumnRuntimeConfig<\r\n TValue,\r\n TNullable extends boolean = false,\r\n THasDefault extends boolean = false,\r\n TGenerated extends boolean = false,\r\n TColumnName extends string | undefined = undefined,\r\n TKind extends ModelColumnKind = ModelColumnKind,\r\n> {\r\n readonly kind: TKind\r\n readonly columnName?: TColumnName\r\n readonly nullable: TNullable\r\n readonly hasDefault: THasDefault\r\n readonly isGenerated: TGenerated\r\n readonly enumValues?: readonly string[]\r\n readonly jsonSchema?: ZodType<TValue>\r\n readonly __value?: TValue\r\n}\r\n\r\nexport interface AthenaColumnBuilder<\r\n TValue,\r\n TNullable extends boolean = false,\r\n THasDefault extends boolean = false,\r\n TGenerated extends boolean = false,\r\n TColumnName extends string | undefined = undefined,\r\n TKind extends ModelColumnKind = ModelColumnKind,\r\n> {\r\n readonly [COLUMN_CONFIG]: ColumnRuntimeConfig<\r\n TValue,\r\n TNullable,\r\n THasDefault,\r\n TGenerated,\r\n TColumnName,\r\n TKind\r\n >\r\n optional(): AthenaColumnBuilder<TValue, true, THasDefault, TGenerated, TColumnName, TKind>\r\n from<TNextColumnName extends string>(\r\n columnName: TNextColumnName,\r\n ): AthenaColumnBuilder<TValue, TNullable, THasDefault, TGenerated, TNextColumnName, TKind>\r\n defaulted(): AthenaColumnBuilder<TValue, TNullable, true, TGenerated, TColumnName, TKind>\r\n generated(): AthenaColumnBuilder<TValue, TNullable, THasDefault, true, TColumnName, TKind>\r\n}\r\n\r\nexport type AnyColumnBuilder = AthenaColumnBuilder<\r\n unknown,\r\n boolean,\r\n boolean,\r\n boolean,\r\n string | undefined,\r\n ModelColumnKind\r\n>\r\n\r\nfunction createColumnBuilder<\r\n TValue,\r\n TNullable extends boolean,\r\n THasDefault extends boolean,\r\n TGenerated extends boolean,\r\n TColumnName extends string | undefined,\r\n TKind extends ModelColumnKind,\r\n>(\r\n config: ColumnRuntimeConfig<\r\n TValue,\r\n TNullable,\r\n THasDefault,\r\n TGenerated,\r\n TColumnName,\r\n TKind\r\n >,\r\n): AthenaColumnBuilder<TValue, TNullable, THasDefault, TGenerated, TColumnName, TKind> {\r\n return {\r\n [COLUMN_CONFIG]: config,\r\n optional() {\r\n return createColumnBuilder({\r\n ...config,\r\n nullable: true,\r\n })\r\n },\r\n from<TNextColumnName extends string>(columnName: TNextColumnName) {\r\n return createColumnBuilder({\r\n ...config,\r\n columnName,\r\n })\r\n },\r\n defaulted() {\r\n return createColumnBuilder({\r\n ...config,\r\n hasDefault: true,\r\n })\r\n },\r\n generated() {\r\n return createColumnBuilder({\r\n ...config,\r\n isGenerated: true,\r\n })\r\n },\r\n }\r\n}\r\n\r\nexport function isColumnBuilder(value: unknown): value is AnyColumnBuilder {\r\n return value !== null && typeof value === 'object' && COLUMN_CONFIG in value\r\n}\r\n\r\nexport function getColumnConfig<TColumn extends AnyColumnBuilder>(\r\n column: TColumn,\r\n): TColumn[typeof COLUMN_CONFIG] {\r\n return column[COLUMN_CONFIG]\r\n}\r\n\r\nexport function string(): AthenaColumnBuilder<string, false, false, false, undefined, 'string'> {\r\n return createColumnBuilder({\r\n kind: 'string',\r\n nullable: false,\r\n hasDefault: false,\r\n isGenerated: false,\r\n })\r\n}\r\n\r\nexport function number(): AthenaColumnBuilder<number, false, false, false, undefined, 'number'> {\r\n return createColumnBuilder({\r\n kind: 'number',\r\n nullable: false,\r\n hasDefault: false,\r\n isGenerated: false,\r\n })\r\n}\r\n\r\nexport function boolean(): AthenaColumnBuilder<boolean, false, false, false, undefined, 'boolean'> {\r\n return createColumnBuilder({\r\n kind: 'boolean',\r\n nullable: false,\r\n hasDefault: false,\r\n isGenerated: false,\r\n })\r\n}\r\n\r\nexport function json<TValue = unknown>(\r\n schema?: ZodType<TValue>,\r\n): AthenaColumnBuilder<TValue, false, false, false, undefined, 'json'> {\r\n return createColumnBuilder({\r\n kind: 'json',\r\n nullable: false,\r\n hasDefault: false,\r\n isGenerated: false,\r\n jsonSchema: schema,\r\n })\r\n}\r\n\r\nexport function enumeration<const TValues extends readonly [string, ...string[]]>(\r\n values: TValues,\r\n): AthenaColumnBuilder<TValues[number], false, false, false, undefined, 'enumeration'> {\r\n if (values.length === 0) {\r\n throw new Error('enumeration() requires at least one value')\r\n }\r\n\r\n return createColumnBuilder({\r\n kind: 'enumeration',\r\n nullable: false,\r\n hasDefault: false,\r\n isGenerated: false,\r\n enumValues: values,\r\n })\r\n}\r\n","import { z, type ZodType, type ZodTypeAny } from 'zod'\r\nimport { toModelPayload } from './model-form.ts'\r\nimport { getColumnConfig, type AnyColumnBuilder } from './table-columns.ts'\r\nimport type { AnyModelDef, ModelColumnKind } from './types.ts'\r\n\r\nexport interface AthenaTableSchemaBundle<Row, Insert, Update> {\r\n readonly row: ZodType<Row>\r\n readonly insert: ZodType<Insert>\r\n readonly update: ZodType<Update>\r\n readonly form: ZodType<Insert>\r\n}\r\n\r\nfunction isScalarFormKind(kind: ModelColumnKind): boolean {\r\n return kind === 'string' || kind === 'number' || kind === 'boolean' || kind === 'enumeration'\r\n}\r\n\r\nfunction createBaseSchema(column: AnyColumnBuilder): ZodTypeAny {\r\n const config = getColumnConfig(column)\r\n\r\n switch (config.kind) {\r\n case 'boolean':\r\n return z.boolean()\r\n case 'number':\r\n return z.number()\r\n case 'json':\r\n return (config.jsonSchema ?? z.unknown()) as ZodTypeAny\r\n case 'enumeration':\r\n if (!config.enumValues || config.enumValues.length === 0) {\r\n return z.string()\r\n }\r\n return z.enum(config.enumValues as [string, ...string[]])\r\n case 'string':\r\n default:\r\n return z.string()\r\n }\r\n}\r\n\r\nfunction applyNullable(schema: ZodTypeAny, column: AnyColumnBuilder): ZodTypeAny {\r\n const config = getColumnConfig(column)\r\n return config.nullable ? schema.nullable() : schema\r\n}\r\n\r\nfunction applyInsertOptional(schema: ZodTypeAny, column: AnyColumnBuilder): ZodTypeAny {\r\n const config = getColumnConfig(column)\r\n return config.nullable || config.hasDefault ? schema.optional() : schema\r\n}\r\n\r\nfunction createFormFieldSchema(column: AnyColumnBuilder): ZodTypeAny {\r\n const config = getColumnConfig(column)\r\n const base = createBaseSchema(column)\r\n\r\n let schema: ZodTypeAny\r\n if (config.nullable && isScalarFormKind(config.kind)) {\r\n schema = z\r\n .union([base, z.literal('')])\r\n .transform(value => value === '' ? null : value)\r\n } else {\r\n schema = applyNullable(base, column)\r\n }\r\n\r\n if (config.nullable || config.hasDefault) {\r\n schema = schema.optional()\r\n }\r\n\r\n return schema\r\n}\r\n\r\nexport function buildTableSchemaBundle<Row, Insert, Update>(\r\n model: AnyModelDef,\r\n columns: Record<string, AnyColumnBuilder>,\r\n): AthenaTableSchemaBundle<Row, Insert, Update> {\r\n const rowShape: Record<string, ZodTypeAny> = {}\r\n const insertShape: Record<string, ZodTypeAny> = {}\r\n const updateShape: Record<string, ZodTypeAny> = {}\r\n const formShape: Record<string, ZodTypeAny> = {}\r\n\r\n for (const [columnName, column] of Object.entries(columns)) {\r\n const config = getColumnConfig(column)\r\n const base = createBaseSchema(column)\r\n\r\n rowShape[columnName] = applyNullable(base, column)\r\n\r\n if (config.isGenerated) {\r\n continue\r\n }\r\n\r\n insertShape[columnName] = applyInsertOptional(applyNullable(base, column), column)\r\n updateShape[columnName] = applyNullable(base, column).optional()\r\n formShape[columnName] = createFormFieldSchema(column)\r\n }\r\n\r\n const rowSchema = z.object(rowShape) as ZodType<Row>\r\n const insertSchema = z.object(insertShape) as ZodType<Insert>\r\n const updateSchema = z.object(updateShape) as ZodType<Update>\r\n const formSchema = z\r\n .object(formShape)\r\n .transform(value => toModelPayload(model, value as never) as Insert) as ZodType<Insert>\r\n\r\n return {\r\n row: rowSchema,\r\n insert: insertSchema,\r\n update: updateSchema,\r\n form: formSchema,\r\n }\r\n}\r\n","import { defineModel } from './definitions.ts'\r\nimport type { ModelFormValues, ModelFormNullishMode } from './model-form.ts'\r\nimport { buildTableSchemaBundle, type AthenaTableSchemaBundle } from './table-schemas.ts'\r\nimport {\r\n COLUMN_CONFIG,\r\n getColumnConfig,\r\n isColumnBuilder,\r\n type AnyColumnBuilder,\r\n type AthenaColumnBuilder,\r\n} from './table-columns.ts'\r\nimport type { AnyModelDef, ModelColumnMetadata, ModelDef, ModelMetadata } from './types.ts'\r\n\r\ntype Simplify<T> = { [K in keyof T]: T[K] } & {}\r\ntype ExtractColumnConfig<TColumn extends AnyColumnBuilder> = TColumn[typeof COLUMN_CONFIG]\r\ntype ColumnValue<TColumn extends AnyColumnBuilder> =\r\n ExtractColumnConfig<TColumn> extends { __value?: infer TValue } ? TValue : never\r\ntype ColumnNullable<TColumn extends AnyColumnBuilder> =\r\n ExtractColumnConfig<TColumn> extends { nullable: infer TNullable extends boolean } ? TNullable : never\r\ntype ColumnHasDefault<TColumn extends AnyColumnBuilder> =\r\n ExtractColumnConfig<TColumn> extends { hasDefault: infer THasDefault extends boolean } ? THasDefault : never\r\ntype ColumnGenerated<TColumn extends AnyColumnBuilder> =\r\n ExtractColumnConfig<TColumn> extends { isGenerated: infer TGenerated extends boolean } ? TGenerated : never\r\n\r\ntype RowFieldType<TColumn extends AnyColumnBuilder> =\r\n ColumnNullable<TColumn> extends true ? ColumnValue<TColumn> | null : ColumnValue<TColumn>\r\n\r\ntype WritableColumnKeys<TColumns extends Record<string, AnyColumnBuilder>> = Extract<{\r\n [K in keyof TColumns]-?: ColumnGenerated<TColumns[K]> extends true ? never : K\r\n}[keyof TColumns], string>\r\n\r\ntype InsertRequiredKeys<TColumns extends Record<string, AnyColumnBuilder>> = Extract<{\r\n [K in keyof TColumns]-?: ColumnGenerated<TColumns[K]> extends true\r\n ? never\r\n : ColumnHasDefault<TColumns[K]> extends true\r\n ? never\r\n : ColumnNullable<TColumns[K]> extends true\r\n ? never\r\n : K\r\n}[keyof TColumns], string>\r\n\r\ntype InsertOptionalKeys<TColumns extends Record<string, AnyColumnBuilder>> = Exclude<\r\n WritableColumnKeys<TColumns>,\r\n InsertRequiredKeys<TColumns>\r\n>\r\n\r\ntype ExtractMappedSchemaName<TMappedName extends string | undefined> =\r\n TMappedName extends `${infer TSchema}.${string}` ? TSchema : undefined\r\n\r\ntype ExtractMappedTableName<TMappedName extends string | undefined> =\r\n TMappedName extends `${string}.${infer TTable}`\r\n ? TTable\r\n : TMappedName extends string\r\n ? TMappedName\r\n : undefined\r\n\r\ntype ResolvedSchemaName<\r\n TSchemaName extends string | undefined,\r\n TMappedName extends string | undefined,\r\n> = TSchemaName extends string ? TSchemaName : ExtractMappedSchemaName<TMappedName>\r\n\r\ntype ResolvedTableName<\r\n TName extends string,\r\n TMappedName extends string | undefined,\r\n> = ExtractMappedTableName<TMappedName> extends string ? ExtractMappedTableName<TMappedName> : TName\r\n\r\ntype QualifiedTableName<\r\n TName extends string,\r\n TMappedName extends string | undefined,\r\n TSchemaName extends string | undefined,\r\n> = ResolvedSchemaName<TSchemaName, TMappedName> extends infer TResolvedSchema extends string | undefined\r\n ? TResolvedSchema extends string\r\n ? `${TResolvedSchema}.${ResolvedTableName<TName, TMappedName>}`\r\n : ResolvedTableName<TName, TMappedName>\r\n : never\r\n\r\nexport type RowFromColumns<TColumns extends Record<string, AnyColumnBuilder>> = Simplify<{\r\n [K in keyof TColumns]: RowFieldType<TColumns[K]>\r\n}>\r\n\r\nexport type InsertFromColumns<TColumns extends Record<string, AnyColumnBuilder>> = Simplify<\r\n {\r\n [K in InsertRequiredKeys<TColumns>]: ColumnValue<TColumns[K]>\r\n } & {\r\n [K in InsertOptionalKeys<TColumns>]?: RowFieldType<TColumns[K]>\r\n }\r\n>\r\n\r\nexport type UpdateFromColumns<TColumns extends Record<string, AnyColumnBuilder>> = Simplify<{\r\n [K in WritableColumnKeys<TColumns>]?: RowFieldType<TColumns[K]>\r\n}>\r\n\r\nexport type FormValuesFromColumns<\r\n TColumns extends Record<string, AnyColumnBuilder>,\r\n TMode extends ModelFormNullishMode = 'empty-string',\r\n> = ModelFormValues<\r\n AthenaTableDef<TColumns>,\r\n TMode\r\n>\r\n\r\nexport interface AthenaTableDef<\r\n TColumns extends Record<string, AnyColumnBuilder>,\r\n TName extends string = string,\r\n TMappedName extends string | undefined = undefined,\r\n TSchemaName extends string | undefined = undefined,\r\n> extends ModelDef<\r\n RowFromColumns<TColumns>,\r\n InsertFromColumns<TColumns>,\r\n UpdateFromColumns<TColumns>,\r\n ModelMetadata<RowFromColumns<TColumns>>\r\n > {\r\n readonly kind: 'table'\r\n readonly name: TName\r\n readonly mappedName: TMappedName\r\n readonly schemaName: ResolvedSchemaName<TSchemaName, TMappedName>\r\n readonly tableName: ResolvedTableName<TName, TMappedName>\r\n readonly qualifiedName: QualifiedTableName<TName, TMappedName, TSchemaName>\r\n readonly columns: Readonly<TColumns>\r\n readonly schemas: AthenaTableSchemaBundle<\r\n RowFromColumns<TColumns>,\r\n InsertFromColumns<TColumns>,\r\n UpdateFromColumns<TColumns>\r\n >\r\n}\r\n\r\ninterface AthenaTableBuilder<\r\n TName extends string,\r\n TMappedName extends string | undefined = undefined,\r\n TSchemaName extends string | undefined = undefined,\r\n> {\r\n readonly name: TName\r\n readonly mappedName: TMappedName\r\n readonly schemaName: TSchemaName\r\n from<TNextMappedName extends string>(\r\n tableName: TNextMappedName,\r\n ): AthenaTableBuilder<TName, TNextMappedName, TSchemaName>\r\n schema<TNextSchemaName extends string>(\r\n schemaName: TNextSchemaName,\r\n ): AthenaTableBuilder<TName, TMappedName, TNextSchemaName>\r\n columns<TColumns extends Record<string, AnyColumnBuilder>>(\r\n columns: TColumns,\r\n ): AthenaTableColumnsBuilder<TName, TMappedName, TSchemaName, TColumns>\r\n}\r\n\r\ninterface AthenaTableColumnsBuilder<\r\n TName extends string,\r\n TMappedName extends string | undefined,\r\n TSchemaName extends string | undefined,\r\n TColumns extends Record<string, AnyColumnBuilder>,\r\n> {\r\n readonly name: TName\r\n readonly mappedName: TMappedName\r\n readonly schemaName: TSchemaName\r\n readonly columns: Readonly<TColumns>\r\n from<TNextMappedName extends string>(\n tableName: TNextMappedName,\n ): AthenaTableColumnsBuilder<TName, TNextMappedName, TSchemaName, TColumns>\n schema<TNextSchemaName extends string>(\n schemaName: TNextSchemaName,\n ): AthenaTableColumnsBuilder<TName, TMappedName, TNextSchemaName, TColumns>\n withoutPrimaryKey(): AthenaTableDef<TColumns, TName, TMappedName, TSchemaName>\n primaryKey(): AthenaTableDef<TColumns, TName, TMappedName, TSchemaName>\n primaryKey<\n TPrimaryKey extends readonly [\n Extract<keyof TColumns, string>,\n ...Array<Extract<keyof TColumns, string>>,\n ],\n >(...keys: TPrimaryKey): AthenaTableDef<TColumns, TName, TMappedName, TSchemaName>\r\n}\r\n\r\nfunction assertColumnRecord(columns: Record<string, AnyColumnBuilder>): void {\r\n for (const [columnName, column] of Object.entries(columns)) {\r\n if (!isColumnBuilder(column)) {\r\n throw new Error(`Invalid column definition for \"${columnName}\"`)\r\n }\r\n }\r\n}\r\n\r\nfunction normalizeMappedNameInput(mappedName: string): string {\r\n const normalized = mappedName.trim()\r\n if (!normalized) {\r\n throw new Error('table.from() requires a non-empty table name')\r\n }\r\n return normalized\r\n}\r\n\r\nfunction normalizeSchemaNameInput(schemaName: string): string {\r\n const normalized = schemaName.trim()\r\n if (!normalized) {\r\n throw new Error('table.schema() requires a non-empty schema name')\r\n }\r\n if (normalized.includes('.')) {\r\n throw new Error(\r\n 'table.schema() expects a schema name without dots. Use .schema(\"schema\").from(\"table\") or .from(\"schema.table\").',\r\n )\r\n }\r\n return normalized\r\n}\r\n\r\nfunction resolveTableTarget(logicalName: string, mappedName?: string, explicitSchemaName?: string): {\r\n schema?: string\r\n model: string\r\n qualifiedName: string\r\n} {\r\n const physicalName = (mappedName ?? logicalName).trim()\r\n if (!physicalName) {\r\n throw new Error('table() requires a non-empty name')\r\n }\r\n\r\n const firstDot = physicalName.indexOf('.')\r\n const lastDot = physicalName.lastIndexOf('.')\r\n if (firstDot > 0 && firstDot === lastDot) {\r\n const inlineSchema = physicalName.slice(0, firstDot).trim()\r\n const inlineModel = physicalName.slice(firstDot + 1).trim()\r\n if (!inlineSchema || !inlineModel) {\r\n throw new Error('table.from() schema-qualified names must look like \"schema.table\"')\r\n }\r\n if (explicitSchemaName && explicitSchemaName !== inlineSchema) {\r\n throw new Error(\r\n `table schema \"${explicitSchemaName}\" conflicts with mapped table \"${physicalName}\"`,\r\n )\r\n }\r\n\r\n return {\r\n schema: explicitSchemaName ?? inlineSchema,\r\n model: inlineModel,\r\n qualifiedName: `${explicitSchemaName ?? inlineSchema}.${inlineModel}`,\r\n }\r\n }\r\n\r\n if (explicitSchemaName) {\r\n return {\r\n schema: explicitSchemaName,\r\n model: physicalName,\r\n qualifiedName: `${explicitSchemaName}.${physicalName}`,\r\n }\r\n }\r\n\r\n return {\r\n model: physicalName,\r\n qualifiedName: physicalName,\r\n }\r\n}\r\n\r\nfunction toColumnMetadata(column: AnyColumnBuilder): ModelColumnMetadata {\r\n const config = getColumnConfig(column)\r\n return {\r\n kind: config.kind,\r\n columnName: config.columnName,\r\n nullable: config.nullable,\r\n hasDefault: config.hasDefault,\r\n isGenerated: config.isGenerated,\r\n enumValues: config.enumValues,\r\n }\r\n}\r\n\r\nfunction buildNullableMap(columns: Record<string, AnyColumnBuilder>): Record<string, boolean> {\r\n return Object.fromEntries(\r\n Object.entries(columns).map(([columnName, column]) => [columnName, getColumnConfig(column).nullable]),\r\n )\r\n}\r\n\r\nfunction buildColumnMetadataMap(columns: Record<string, AnyColumnBuilder>): Record<string, ModelColumnMetadata> {\r\n return Object.fromEntries(\r\n Object.entries(columns).map(([columnName, column]) => [columnName, toColumnMetadata(column)]),\r\n )\r\n}\r\n\r\nfunction finalizeTable<\r\n TName extends string,\r\n TMappedName extends string | undefined,\r\n TSchemaName extends string | undefined,\r\n TColumns extends Record<string, AnyColumnBuilder>,\r\n>(\n name: TName,\n mappedName: TMappedName,\n schemaName: TSchemaName,\n columns: TColumns,\n primaryKey: ReadonlyArray<Extract<keyof TColumns, string>>,\n): AthenaTableDef<TColumns, TName, TMappedName, TSchemaName> {\n const target = resolveTableTarget(name, mappedName, schemaName)\r\n const model = defineModel<\r\n RowFromColumns<TColumns>,\r\n InsertFromColumns<TColumns>,\r\n UpdateFromColumns<TColumns>\r\n >({\r\n meta: {\r\n schema: target.schema,\r\n model: target.model,\r\n primaryKey: [...primaryKey],\r\n nullable: buildNullableMap(columns),\r\n columns: buildColumnMetadataMap(columns),\r\n },\r\n })\r\n\r\n const schemas = buildTableSchemaBundle<\r\n RowFromColumns<TColumns>,\r\n InsertFromColumns<TColumns>,\r\n UpdateFromColumns<TColumns>\r\n >(model as AnyModelDef, columns)\r\n\r\n return Object.assign(model, {\r\n kind: 'table' as const,\r\n name,\r\n mappedName,\r\n schemaName: target.schema,\r\n tableName: target.model,\r\n qualifiedName: target.qualifiedName,\r\n columns,\r\n schemas,\r\n }) as AthenaTableDef<TColumns, TName, TMappedName, TSchemaName>\r\n}\r\n\r\nfunction createColumnsBuilder<\r\n TName extends string,\r\n TMappedName extends string | undefined,\r\n TSchemaName extends string | undefined,\r\n TColumns extends Record<string, AnyColumnBuilder>,\r\n>(\r\n name: TName,\r\n mappedName: TMappedName,\r\n schemaName: TSchemaName,\r\n columns: TColumns,\r\n): AthenaTableColumnsBuilder<TName, TMappedName, TSchemaName, TColumns> {\r\n assertColumnRecord(columns)\r\n\r\n return {\r\n name,\r\n mappedName,\r\n schemaName,\r\n columns,\r\n from<TNextMappedName extends string>(tableName: TNextMappedName) {\r\n const normalizedTableName = normalizeMappedNameInput(tableName)\r\n resolveTableTarget(name, normalizedTableName, schemaName)\r\n return createColumnsBuilder(name, normalizedTableName as TNextMappedName, schemaName, columns)\r\n },\r\n schema<TNextSchemaName extends string>(nextSchemaName: TNextSchemaName) {\n const normalizedSchemaName = normalizeSchemaNameInput(nextSchemaName)\n resolveTableTarget(name, mappedName, normalizedSchemaName)\n return createColumnsBuilder(name, mappedName, normalizedSchemaName as TNextSchemaName, columns)\n },\n withoutPrimaryKey() {\n return finalizeTable(name, mappedName, schemaName, columns, [])\n },\n primaryKey(...keys: Array<Extract<keyof TColumns, string>>) {\n return finalizeTable(name, mappedName, schemaName, columns, keys)\n },\n }\n}\n\r\nfunction createTableBuilder<\r\n TName extends string,\r\n TMappedName extends string | undefined,\r\n TSchemaName extends string | undefined,\r\n>(\r\n name: TName,\r\n mappedName: TMappedName,\r\n schemaName: TSchemaName,\r\n): AthenaTableBuilder<TName, TMappedName, TSchemaName> {\r\n return {\r\n name,\r\n mappedName,\r\n schemaName,\r\n from<TNextMappedName extends string>(tableName: TNextMappedName) {\r\n const normalizedTableName = normalizeMappedNameInput(tableName)\r\n resolveTableTarget(name, normalizedTableName, schemaName)\r\n return createTableBuilder(name, normalizedTableName as TNextMappedName, schemaName)\r\n },\r\n schema<TNextSchemaName extends string>(nextSchemaName: TNextSchemaName) {\r\n const normalizedSchemaName = normalizeSchemaNameInput(nextSchemaName)\r\n resolveTableTarget(name, mappedName, normalizedSchemaName)\r\n return createTableBuilder(name, mappedName, normalizedSchemaName as TNextSchemaName)\r\n },\r\n columns<TColumns extends Record<string, AnyColumnBuilder>>(columns: TColumns) {\r\n return createColumnsBuilder(name, mappedName, schemaName, columns)\r\n },\r\n }\r\n}\r\n\r\nexport function table<TName extends string>(name: TName): AthenaTableBuilder<TName, undefined> {\r\n if (!name.trim()) {\r\n throw new Error('table() requires a non-empty name')\r\n }\r\n\r\n return createTableBuilder(name, undefined, undefined)\r\n}\r\n\r\nexport type { AthenaColumnBuilder }\r\n","import {\n createClient,\n type AthenaCreateClientAuthOptions,\n type AthenaClientSessionLike,\n type AthenaClientSessionOptions,\n type AthenaClientContextOptions,\n type AthenaClientExperimentalOptions,\n type AthenaHeaderBag,\n type AthenaFromOptions,\n type AthenaRequestOptions,\n type AthenaRequestResponse,\n type AthenaResult,\n type AthenaSdkClient,\n type RpcQueryBuilder,\n type TableQueryBuilder,\n} from '../client.ts'\r\nimport type {\r\n AthenaGatewayCallOptions,\r\n AthenaGatewayConnectionOptions,\r\n AthenaGatewayConnectionResult,\r\n AthenaJsonObject,\r\n AthenaRpcCallOptions,\r\n} from '../gateway/types.ts'\r\nimport type {\r\n AthenaModelTarget,\r\n AnyModelDef,\r\n DatabaseDef,\r\n InsertOf,\r\n ModelAt,\r\n RegistryDef,\r\n RowOf,\r\n SchemaDef,\r\n TenantContext,\r\n TenantKeyMap,\r\n UpdateOf,\r\n} from './types.ts'\r\nimport { resolveAthenaModelTargetTableName } from './model-target.ts'\r\n\r\ntype RegistryConstraint = RegistryDef<\r\n Record<string, DatabaseDef<Record<string, SchemaDef<Record<string, AnyModelDef>>>>>\r\n>\r\n\r\n/**\r\n * Options for creating typed Athena clients.\r\n */\r\nexport interface TypedClientOptions<TMap extends TenantKeyMap = TenantKeyMap>\n extends Pick<\n AthenaGatewayCallOptions,\n 'backend' | 'client' | 'headers' | 'forceNoCache' | 'userId' | 'organizationId'\n > {\n auth?: Omit<AthenaCreateClientAuthOptions, 'url' | 'baseUrl' | 'apiKey'>\n tenantKeyMap?: TMap\n tenantContext?: TenantContext<TMap>\n experimental?: AthenaClientExperimentalOptions\n}\n\r\nexport interface TypedClientOptionsWithTypecheckedColumns<\r\n TMap extends TenantKeyMap = TenantKeyMap,\r\n> extends TypedClientOptions<TMap> {\r\n experimental: AthenaClientExperimentalOptions & {\r\n typecheckColumns: true\r\n }\r\n}\r\n\r\n/**\r\n * Typed Athena client with registry-driven model resolution and tenant-context propagation.\r\n */\r\nexport interface TypedAthenaClient<\n TRegistry extends RegistryConstraint,\n TTenantMap extends TenantKeyMap = Record<never, string>,\n TStrict extends boolean = false,\n> extends AthenaSdkClient<TStrict> {\n readonly registry: TRegistry\n readonly tenantKeyMap: Readonly<TTenantMap>\n readonly tenantContext: TenantContext<TTenantMap>\n withContext(context?: AthenaClientContextOptions): TypedAthenaClient<TRegistry, TTenantMap, TStrict>\n withSession(\n session?: AthenaClientSessionLike | null,\n options?: AthenaClientSessionOptions,\n ): TypedAthenaClient<TRegistry, TTenantMap, TStrict>\n withTenantContext(context: TenantContext<TTenantMap>): TypedAthenaClient<TRegistry, TTenantMap, TStrict>\n fromModel<\n TDatabase extends keyof TRegistry & string,\n TSchema extends keyof TRegistry[TDatabase]['schemas'] & string,\r\n TModel extends keyof TRegistry[TDatabase]['schemas'][TSchema]['models'] & string,\r\n >(\r\n database: TDatabase,\r\n schema: TSchema,\r\n model: TModel,\r\n ): TableQueryBuilder<\r\n RowOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n InsertOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n UpdateOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n {\r\n registry: TRegistry\r\n database: TDatabase\r\n schema: TSchema\r\n model: ModelAt<TRegistry, TDatabase, TSchema, TModel>\r\n },\r\n TStrict\r\n >\r\n}\r\n\r\nclass TenantHeaderMapper<TMap extends TenantKeyMap> {\n constructor(private readonly tenantKeyMap: TMap) {}\n\r\n apply(\r\n baseHeaders: Record<string, string> | undefined,\r\n tenantContext: TenantContext<TMap>,\r\n ): Record<string, string> | undefined {\r\n const headers: Record<string, string> = {\r\n ...(baseHeaders ?? {}),\r\n }\r\n\r\n for (const [tenantKey, headerName] of Object.entries(this.tenantKeyMap)) {\r\n const tenantValue = tenantContext[tenantKey as keyof TMap]\r\n if (tenantValue === undefined || tenantValue === null) {\r\n continue\r\n }\r\n headers[headerName] = String(tenantValue)\r\n }\r\n\r\n return Object.keys(headers).length > 0 ? headers : undefined\r\n }\n}\n\nfunction normalizeOptionalString(value: string | null | undefined): string | undefined {\n if (typeof value !== 'string') {\n return undefined\n }\n\n const normalizedValue = value.trim()\n return normalizedValue ? normalizedValue : undefined\n}\n\nfunction readHeaderBagValue(\n headers: AthenaClientSessionOptions['requestHeaders'],\n targetKey: string,\n): string | undefined {\n if (!headers) {\n return undefined\n }\n\n if (typeof (headers as AthenaHeaderBag).get === 'function') {\n return normalizeOptionalString((headers as AthenaHeaderBag).get(targetKey))\n }\n\n const normalizedTargetKey = targetKey.toLowerCase()\n for (const [key, value] of Object.entries(headers)) {\n if (key.toLowerCase() !== normalizedTargetKey) {\n continue\n }\n\n if (typeof value === 'string') {\n return normalizeOptionalString(value)\n }\n\n return undefined\n }\n\n return undefined\n}\n\nfunction resolveSessionContextOptions(\n session?: AthenaClientSessionLike | null,\n options?: AthenaClientSessionOptions,\n): AthenaClientContextOptions | undefined {\n const sessionToken = normalizeOptionalString(session?.session?.token)\n const requestCookie =\n readHeaderBagValue(options?.requestHeaders, 'cookie') ??\n readHeaderBagValue(options?.headers, 'cookie')\n const authInput = options?.auth\n const resolvedUserId =\n options?.userId !== undefined ? options.userId : session?.user?.id\n const resolvedOrganizationId =\n options?.organizationId !== undefined\n ? options.organizationId\n : session?.session?.activeOrganizationId\n const resolvedBearerToken =\n authInput?.bearerToken !== undefined ? authInput.bearerToken : sessionToken\n const resolvedSessionToken =\n authInput?.sessionToken !== undefined ? authInput.sessionToken : sessionToken\n const resolvedCookie =\n authInput?.cookie !== undefined ? authInput.cookie : requestCookie\n\n const auth =\n authInput !== undefined ||\n resolvedBearerToken !== undefined ||\n resolvedSessionToken !== undefined ||\n resolvedCookie !== undefined\n ? {\n ...(authInput ?? {}),\n ...(resolvedBearerToken !== undefined\n ? { bearerToken: resolvedBearerToken }\n : {}),\n ...(resolvedSessionToken !== undefined\n ? { sessionToken: resolvedSessionToken }\n : {}),\n ...(resolvedCookie !== undefined ? { cookie: resolvedCookie } : {}),\n headers: authInput?.headers ? { ...authInput.headers } : undefined,\n }\n : undefined\n\n if (\n resolvedUserId === undefined &&\n resolvedOrganizationId === undefined &&\n options?.forceNoCache === undefined &&\n !options?.headers &&\n !auth\n ) {\n return undefined\n }\n\n return {\n userId: resolvedUserId,\n organizationId: resolvedOrganizationId,\n forceNoCache: options?.forceNoCache,\n headers: options?.headers ? { ...options.headers } : undefined,\n auth,\n }\n}\n\nclass RegistryNavigator<TRegistry extends RegistryConstraint> {\n constructor(private readonly registry: TRegistry) {}\n\r\n resolveModel<\r\n TDatabase extends keyof TRegistry & string,\r\n TSchema extends keyof TRegistry[TDatabase]['schemas'] & string,\r\n TModel extends keyof TRegistry[TDatabase]['schemas'][TSchema]['models'] & string,\r\n >(\r\n database: TDatabase,\r\n schema: TSchema,\r\n model: TModel,\r\n ): ModelAt<TRegistry, TDatabase, TSchema, TModel> {\r\n const databaseDef = this.registry[database]\r\n if (!databaseDef) {\r\n throw new Error(`Unknown database \"${database}\"`)\r\n }\r\n\r\n const schemaDef = databaseDef.schemas[schema]\r\n if (!schemaDef) {\r\n throw new Error(`Unknown schema \"${schema}\" in database \"${database}\"`)\r\n }\r\n\r\n const modelDef = schemaDef.models[model]\r\n if (!modelDef) {\r\n throw new Error(`Unknown model \"${model}\" in schema \"${schema}\"`)\r\n }\r\n\r\n return modelDef as ModelAt<TRegistry, TDatabase, TSchema, TModel>\r\n }\r\n\r\n resolveTableName(\r\n schema: string,\r\n model: string,\r\n modelDef: AnyModelDef,\r\n ): string {\r\n return resolveAthenaModelTargetTableName(modelDef, {\r\n fallbackSchema: schema,\r\n fallbackModel: model,\r\n })\r\n }\r\n}\r\n\r\nclass TypedAthenaClientImpl<\r\n TRegistry extends RegistryConstraint,\r\n TTenantMap extends TenantKeyMap,\r\n TStrict extends boolean = false,\r\n> implements TypedAthenaClient<TRegistry, TTenantMap, TStrict> {\r\n readonly registry: TRegistry\r\n readonly tenantKeyMap: Readonly<TTenantMap>\r\n readonly tenantContext: TenantContext<TTenantMap>\r\n readonly db: AthenaSdkClient<TStrict>['db']\r\n\r\n private readonly baseClient: AthenaSdkClient<TStrict>\n private readonly registryNavigator: RegistryNavigator<TRegistry>\n private readonly tenantHeaderMapper: TenantHeaderMapper<TTenantMap>\n private readonly clientOptions: TypedClientOptions<TTenantMap>\n private readonly url: string\n private readonly apiKey: string\n\r\n constructor(input: {\r\n registry: TRegistry\r\n url: string\r\n apiKey: string\r\n options?: TypedClientOptions<TTenantMap>\r\n }) {\r\n this.registry = input.registry\r\n this.url = input.url\r\n this.apiKey = input.apiKey\r\n\r\n const tenantKeyMap = (input.options?.tenantKeyMap ?? ({} as TTenantMap)) as TTenantMap\r\n const tenantContext = (input.options?.tenantContext ?? {}) as TenantContext<TTenantMap>\r\n\r\n this.tenantKeyMap = tenantKeyMap\r\n this.tenantContext = tenantContext\r\n this.tenantHeaderMapper = new TenantHeaderMapper(tenantKeyMap)\n this.registryNavigator = new RegistryNavigator(input.registry)\n\n this.clientOptions = {\n backend: input.options?.backend,\n client: input.options?.client,\n headers: input.options?.headers,\n forceNoCache: input.options?.forceNoCache,\n userId: input.options?.userId,\n organizationId: input.options?.organizationId,\n auth: input.options?.auth,\n tenantKeyMap,\n tenantContext,\n experimental: input.options?.experimental,\n }\n\n this.baseClient = createClient(this.url, this.apiKey, {\n backend: this.clientOptions.backend,\n client: this.clientOptions.client,\n headers: this.tenantHeaderMapper.apply(this.clientOptions.headers, tenantContext),\n forceNoCache: this.clientOptions.forceNoCache,\n userId: this.clientOptions.userId,\n organizationId: this.clientOptions.organizationId,\n auth: this.clientOptions.auth,\n experimental: this.clientOptions.experimental,\n }) as AthenaSdkClient<TStrict>\n this.db = this.baseClient.db\n }\n\r\n from<TModel extends AthenaModelTarget>(\r\n model: TModel,\r\n ): TableQueryBuilder<RowOf<TModel>, InsertOf<TModel>, UpdateOf<TModel>, unknown, TStrict>\r\n from<\r\n Row = Record<string, unknown>,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n >(\r\n table: string,\r\n options?: AthenaFromOptions,\r\n ): TableQueryBuilder<Row, Insert, Update, unknown, TStrict>\r\n from<\r\n Row = Record<string, unknown>,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n >(\r\n tableOrModel: string | AthenaModelTarget<Row, Insert, Update>,\r\n options?: AthenaFromOptions,\r\n ): TableQueryBuilder<Row, Insert, Update, unknown, TStrict> {\r\n const from = this.baseClient.from as unknown as (\r\n target: string | AthenaModelTarget<Row, Insert, Update>,\r\n options?: AthenaFromOptions,\r\n ) => TableQueryBuilder<Row, Insert, Update, unknown, TStrict>\r\n return from(tableOrModel, options)\r\n }\r\n\r\n rpc<Row = unknown, Args extends AthenaJsonObject = AthenaJsonObject>(\r\n fn: string,\r\n args?: Args,\r\n options?: AthenaRpcCallOptions,\r\n ): RpcQueryBuilder<Row, TStrict> {\r\n return this.baseClient.rpc<Row, Args>(fn, args, options)\r\n }\r\n\r\n query<Row = unknown>(\n query: string,\n options?: AthenaGatewayCallOptions,\n ): Promise<AthenaResult<Row[]>> {\n return this.baseClient.query<Row>(query, options)\n }\n\n request<T = unknown>(\n options: AthenaRequestOptions,\n ): Promise<AthenaRequestResponse<T>> {\n return this.baseClient.request<T>(options)\n }\n\n verifyConnection(\n options?: AthenaGatewayConnectionOptions,\n ): Promise<AthenaGatewayConnectionResult> {\n return this.baseClient.verifyConnection(options)\n }\n\n withContext(context?: AthenaClientContextOptions): TypedAthenaClient<TRegistry, TTenantMap, TStrict> {\n const headers = {\n ...(this.clientOptions.headers ?? {}),\n ...(context?.headers ?? {}),\n }\n const auth =\n this.clientOptions.auth || context?.auth\n ? {\n ...(this.clientOptions.auth ?? {}),\n ...(context?.auth ?? {}),\n headers:\n this.clientOptions.auth?.headers || context?.auth?.headers\n ? {\n ...(this.clientOptions.auth?.headers ?? {}),\n ...(context?.auth?.headers ?? {}),\n }\n : undefined,\n }\n : undefined\n\n return new TypedAthenaClientImpl({\n registry: this.registry,\n url: this.url,\n apiKey: this.apiKey,\n options: {\n ...this.clientOptions,\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n auth,\n tenantKeyMap: this.tenantKeyMap as TTenantMap,\n tenantContext: {\n ...this.tenantContext,\n },\n ...(context?.userId !== undefined ? { userId: context.userId } : {}),\n ...(context?.organizationId !== undefined\n ? { organizationId: context.organizationId }\n : {}),\n ...(context?.forceNoCache !== undefined\n ? { forceNoCache: context.forceNoCache }\n : {}),\n },\n })\n }\n\n withSession(\n session?: AthenaClientSessionLike | null,\n options?: AthenaClientSessionOptions,\n ): TypedAthenaClient<TRegistry, TTenantMap, TStrict> {\n return this.withContext(resolveSessionContextOptions(session, options))\n }\n\n withTenantContext(context: TenantContext<TTenantMap>): TypedAthenaClient<TRegistry, TTenantMap, TStrict> {\n return new TypedAthenaClientImpl({\n registry: this.registry,\n url: this.url,\n apiKey: this.apiKey,\r\n options: {\r\n ...this.clientOptions,\r\n tenantKeyMap: this.tenantKeyMap as TTenantMap,\r\n tenantContext: {\r\n ...this.tenantContext,\r\n ...(context ?? {}),\r\n },\r\n experimental: this.clientOptions.experimental,\r\n },\r\n })\r\n }\r\n\r\n fromModel<\r\n TDatabase extends keyof TRegistry & string,\r\n TSchema extends keyof TRegistry[TDatabase]['schemas'] & string,\r\n TModel extends keyof TRegistry[TDatabase]['schemas'][TSchema]['models'] & string,\r\n >(\r\n database: TDatabase,\r\n schema: TSchema,\r\n model: TModel,\r\n ): TableQueryBuilder<\r\n RowOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n InsertOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n UpdateOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n {\r\n registry: TRegistry\r\n database: TDatabase\r\n schema: TSchema\r\n model: ModelAt<TRegistry, TDatabase, TSchema, TModel>\r\n },\r\n TStrict\r\n > {\r\n const modelDef = this.registryNavigator.resolveModel(database, schema, model)\r\n const tableName = this.registryNavigator.resolveTableName(schema, model, modelDef as AnyModelDef)\r\n return this.baseClient.from<\r\n RowOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n InsertOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n UpdateOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>\r\n >(tableName) as TableQueryBuilder<\r\n RowOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n InsertOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n UpdateOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n {\r\n registry: TRegistry\r\n database: TDatabase\r\n schema: TSchema\r\n model: ModelAt<TRegistry, TDatabase, TSchema, TModel>\r\n },\r\n TStrict\r\n >\r\n }\r\n}\r\n\r\n/**\r\n * Creates a typed client bound to a registry contract and optional tenant header mapping.\r\n */\r\nexport function createTypedClient<\r\n TRegistry extends RegistryConstraint,\r\n TTenantMap extends TenantKeyMap = Record<never, string>,\r\n>(\r\n registry: TRegistry,\r\n url: string,\r\n apiKey: string,\r\n options: TypedClientOptionsWithTypecheckedColumns<TTenantMap>,\r\n): TypedAthenaClient<TRegistry, TTenantMap, true>\r\nexport function createTypedClient<\r\n TRegistry extends RegistryConstraint,\r\n TTenantMap extends TenantKeyMap = Record<never, string>,\r\n>(\r\n registry: TRegistry,\r\n url: string,\r\n apiKey: string,\r\n options?: TypedClientOptions<TTenantMap>,\r\n): TypedAthenaClient<TRegistry, TTenantMap, false>\r\nexport function createTypedClient<\r\n TRegistry extends RegistryConstraint,\r\n TTenantMap extends TenantKeyMap = Record<never, string>,\r\n>(\r\n registry: TRegistry,\r\n url: string,\r\n apiKey: string,\r\n options?: TypedClientOptions<TTenantMap>,\r\n): TypedAthenaClient<TRegistry, TTenantMap, false> {\r\n return new TypedAthenaClientImpl({\r\n registry,\r\n url,\r\n apiKey,\r\n options,\r\n })\r\n}\r\n\r\n","import type { GeneratorProviderConfig, GeneratorSchemaSelection } from './types.ts'\r\n\r\nexport const DEFAULT_POSTGRES_SCHEMAS = ['public'] as const\r\n\r\nfunction collectSchemaNames(input: GeneratorSchemaSelection | undefined): string[] {\r\n if (!input) {\r\n return []\r\n }\r\n\r\n const values = typeof input === 'string' ? [input] : input\r\n return values.flatMap(value => String(value).split(','))\r\n}\r\n\r\n/**\r\n * Normalizes schema selection from config or env-backed strings into a stable,\r\n * deduplicated list. Empty selections fall back to PostgreSQL's public schema.\r\n */\r\nexport function normalizeSchemaSelection(\r\n input: GeneratorSchemaSelection | undefined,\r\n): string[] {\r\n const schemas: string[] = []\r\n const seen = new Set<string>()\r\n\r\n for (const value of collectSchemaNames(input)) {\r\n const schema = value.trim()\r\n if (!schema || seen.has(schema)) {\r\n continue\r\n }\r\n seen.add(schema)\r\n schemas.push(schema)\r\n }\r\n\r\n return schemas.length > 0 ? schemas : [...DEFAULT_POSTGRES_SCHEMAS]\r\n}\r\n\r\n/**\r\n * Resolves the effective schema list for provider-backed generator runs.\r\n */\r\nexport function resolveProviderSchemas(providerConfig: GeneratorProviderConfig): string[] {\r\n if (providerConfig.kind === 'postgres') {\r\n return normalizeSchemaSelection(providerConfig.schemas)\r\n }\r\n\r\n return [...DEFAULT_POSTGRES_SCHEMAS]\r\n}\r\n","import type { IntrospectionSchema, IntrospectionSnapshot } from '../schema/types.ts'\nimport type {\n GeneratorTableSelection,\n NormalizedGeneratorFilterConfig,\n} from './types.ts'\n\nfunction normalizeTableSelector(value: string): string | undefined {\n const trimmed = value.trim()\n return trimmed.length > 0 ? trimmed : undefined\n}\n\nexport function normalizeTableSelection(\n value: GeneratorTableSelection | undefined,\n): string[] {\n if (typeof value === 'string') {\n return Array.from(\n new Set(\n value\n .split(',')\n .map(normalizeTableSelector)\n .filter((entry): entry is string => Boolean(entry)),\n ),\n )\n }\n\n if (Array.isArray(value)) {\n return Array.from(\n new Set(\n value\n .map(entry => typeof entry === 'string' ? normalizeTableSelector(entry) : undefined)\n .filter((entry): entry is string => Boolean(entry)),\n ),\n )\n }\n\n return []\n}\n\nfunction matchesTableSelector(\n schemaName: string,\n tableName: string,\n selector: string,\n): boolean {\n const separatorIndex = selector.indexOf('.')\n if (separatorIndex < 0) {\n return tableName === selector\n }\n\n const selectorSchema = selector.slice(0, separatorIndex).trim()\n const selectorTable = selector.slice(separatorIndex + 1).trim()\n return selectorSchema === schemaName && selectorTable === tableName\n}\n\nfunction shouldKeepTable(\n schemaName: string,\n tableName: string,\n filter: NormalizedGeneratorFilterConfig,\n): boolean {\n const included = filter.includeTables.length === 0\n || filter.includeTables.some(selector => matchesTableSelector(schemaName, tableName, selector))\n if (!included) {\n return false\n }\n\n return !filter.excludeTables.some(selector => matchesTableSelector(schemaName, tableName, selector))\n}\n\nfunction hasTableFilters(filter: NormalizedGeneratorFilterConfig): boolean {\n return filter.includeTables.length > 0 || filter.excludeTables.length > 0\n}\n\nexport function filterIntrospectionSnapshot(\n snapshot: IntrospectionSnapshot,\n filter: NormalizedGeneratorFilterConfig,\n): IntrospectionSnapshot {\n if (!hasTableFilters(filter)) {\n return snapshot\n }\n\n const schemas: Record<string, IntrospectionSchema> = {}\n\n for (const [schemaName, schema] of Object.entries(snapshot.schemas)) {\n const tables = Object.fromEntries(\n Object.entries(schema.tables).filter(([tableName]) => shouldKeepTable(schemaName, tableName, filter)),\n )\n\n if (Object.keys(tables).length === 0) {\n continue\n }\n\n schemas[schemaName] = {\n ...schema,\n tables,\n }\n }\n\n if (Object.keys(schemas).length === 0) {\n const includeLabel = filter.includeTables.length > 0\n ? ` includeTables=${filter.includeTables.join(', ')}`\n : ''\n const excludeLabel = filter.excludeTables.length > 0\n ? ` excludeTables=${filter.excludeTables.join(', ')}`\n : ''\n throw new Error(\n `Generator table filters matched no tables after schema selection.${includeLabel}${excludeLabel}`,\n )\n }\n\n return {\n ...snapshot,\n schemas,\n }\n}\n","import { parseBooleanFlag } from '../auxiliaries.ts'\n\ninterface GeneratorEnvBaseOptions<T> {\n default?: T\n optional?: boolean\n}\n\nexport type GeneratorEnvStringOptions = GeneratorEnvBaseOptions<string>\n\nexport type GeneratorEnvBooleanOptions = GeneratorEnvBaseOptions<boolean>\n\nexport interface GeneratorEnvListOptions extends GeneratorEnvBaseOptions<readonly string[]> {\n separator?: string\n}\n\nexport type GeneratorEnvJsonOptions<T> = GeneratorEnvBaseOptions<T>\n\nexport type GeneratorEnvOneOfOptions<T extends string> = GeneratorEnvBaseOptions<T>\n\ntype GeneratorEnvHelper = {\n (key: string, options?: GeneratorEnvStringOptions): string\n (key: string, options: GeneratorEnvStringOptions & { optional: true }): string | undefined\n boolean(key: string, options?: GeneratorEnvBooleanOptions): boolean\n boolean(key: string, options: GeneratorEnvBooleanOptions & { optional: true }): boolean | undefined\n list(key: string, options?: GeneratorEnvListOptions): string[]\n list(key: string, options: GeneratorEnvListOptions & { optional: true }): string[] | undefined\n json<T>(key: string, options?: GeneratorEnvJsonOptions<T>): T\n json<T>(key: string, options: GeneratorEnvJsonOptions<T> & { optional: true }): T | undefined\n oneOf<const T extends string>(\n key: string,\n allowedValues: readonly T[],\n options?: GeneratorEnvOneOfOptions<T>,\n ): T\n oneOf<const T extends string>(\n key: string,\n allowedValues: readonly T[],\n options: GeneratorEnvOneOfOptions<T> & { optional: true },\n ): T | undefined\n}\n\nfunction readEnvStringValue(key: string): string | undefined {\n if (typeof process === 'undefined' || !process.env) {\n return undefined\n }\n\n const value = process.env[key]\n if (typeof value !== 'string') {\n return undefined\n }\n\n const trimmed = value.trim()\n return trimmed.length > 0 ? trimmed : undefined\n}\n\nfunction throwMissingEnvVar(key: string): never {\n throw new Error(\n `Generator config env var ${key} is missing or empty. Set ${key} or provide a default value.`,\n )\n}\n\nfunction resolveEnvValue<T>(\n key: string,\n options: GeneratorEnvBaseOptions<T> | undefined,\n resolver: (rawValue: string) => T,\n): T | undefined {\n const rawValue = readEnvStringValue(key)\n if (rawValue === undefined) {\n if (options?.default !== undefined) {\n return options.default\n }\n if (options?.optional) {\n return undefined\n }\n return throwMissingEnvVar(key)\n }\n\n return resolver(rawValue)\n}\n\nfunction resolveStringEnv(key: string, options?: GeneratorEnvStringOptions): string | undefined {\n return resolveEnvValue(key, options, value => value)\n}\n\nfunction resolveBooleanEnv(key: string, options?: GeneratorEnvBooleanOptions): boolean | undefined {\n return resolveEnvValue(key, options, value => parseBooleanFlag(value, false))\n}\n\nfunction resolveListEnv(key: string, options?: GeneratorEnvListOptions): string[] | undefined {\n return resolveEnvValue(key, options, value => {\n const separator = options?.separator ?? ','\n return value\n .split(separator)\n .map(entry => entry.trim())\n .filter((entry, index, entries) => entry.length > 0 && entries.indexOf(entry) === index)\n })?.slice()\n}\n\nfunction resolveJsonEnv<T>(key: string, options?: GeneratorEnvJsonOptions<T>): T | undefined {\n return resolveEnvValue(key, options, value => {\n try {\n return JSON.parse(value) as T\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n throw new Error(`Generator config env var ${key} must contain valid JSON. ${message}`)\n }\n })\n}\n\nfunction resolveOneOfEnv<T extends string>(\n key: string,\n allowedValues: readonly T[],\n options?: GeneratorEnvOneOfOptions<T>,\n): T | undefined {\n return resolveEnvValue(key, options, value => {\n if (allowedValues.includes(value as T)) {\n return value as T\n }\n\n throw new Error(\n `Generator config env var ${key} must be one of: ${allowedValues.join(', ')}. Received: ${value}.`,\n )\n })\n}\n\nfunction generatorEnvString(key: string, options?: GeneratorEnvStringOptions): string\nfunction generatorEnvString(\n key: string,\n options: GeneratorEnvStringOptions & { optional: true },\n): string | undefined\nfunction generatorEnvString(\n key: string,\n options?: GeneratorEnvStringOptions,\n): string | undefined {\n return resolveStringEnv(key, options)\n}\n\nfunction generatorEnvBoolean(key: string, options?: GeneratorEnvBooleanOptions): boolean\nfunction generatorEnvBoolean(\n key: string,\n options: GeneratorEnvBooleanOptions & { optional: true },\n): boolean | undefined\nfunction generatorEnvBoolean(\n key: string,\n options?: GeneratorEnvBooleanOptions,\n): boolean | undefined {\n return resolveBooleanEnv(key, options)\n}\n\nfunction generatorEnvList(key: string, options?: GeneratorEnvListOptions): string[]\nfunction generatorEnvList(\n key: string,\n options: GeneratorEnvListOptions & { optional: true },\n): string[] | undefined\nfunction generatorEnvList(\n key: string,\n options?: GeneratorEnvListOptions,\n): string[] | undefined {\n return resolveListEnv(key, options)\n}\n\nfunction generatorEnvJson<T>(key: string, options?: GeneratorEnvJsonOptions<T>): T\nfunction generatorEnvJson<T>(\n key: string,\n options: GeneratorEnvJsonOptions<T> & { optional: true },\n): T | undefined\nfunction generatorEnvJson<T>(\n key: string,\n options?: GeneratorEnvJsonOptions<T>,\n): T | undefined {\n return resolveJsonEnv(key, options)\n}\n\nfunction generatorEnvOneOf<const T extends string>(\n key: string,\n allowedValues: readonly T[],\n options?: GeneratorEnvOneOfOptions<T>,\n): T\nfunction generatorEnvOneOf<const T extends string>(\n key: string,\n allowedValues: readonly T[],\n options: GeneratorEnvOneOfOptions<T> & { optional: true },\n): T | undefined\nfunction generatorEnvOneOf<const T extends string>(\n key: string,\n allowedValues: readonly T[],\n options?: GeneratorEnvOneOfOptions<T>,\n): T | undefined {\n return resolveOneOfEnv(key, allowedValues, options)\n}\n\n/**\n * Typed env reader for generator configs. This keeps `athena.config.*` files\n * declarative while preserving exact field types for booleans, lists, unions,\n * and JSON-backed objects.\n */\nexport const generatorEnv = Object.assign(generatorEnvString, {\n boolean: generatorEnvBoolean,\n list: generatorEnvList,\n json: generatorEnvJson,\n oneOf: generatorEnvOneOf,\n}) as GeneratorEnvHelper\n","import type { IntrospectionColumn } from '../schema/types.ts'\r\n\r\nconst NUMBER_TYPES = new Set([\r\n 'int2',\r\n 'int4',\r\n 'float4',\r\n 'float8',\r\n 'smallint',\r\n 'integer',\r\n 'real',\r\n 'double precision',\r\n])\r\n\r\nconst STRING_NUMERIC_TYPES = new Set([\r\n 'int8',\r\n 'bigint',\r\n 'serial8',\r\n 'bigserial',\r\n 'numeric',\r\n 'decimal',\r\n 'money',\r\n])\r\n\r\nconst TEXT_TYPES = new Set([\r\n 'char',\r\n 'bpchar',\r\n 'varchar',\r\n 'character varying',\r\n 'text',\r\n 'citext',\r\n 'name',\r\n 'uuid',\r\n 'date',\r\n 'time',\r\n 'timetz',\r\n 'timestamp',\r\n 'timestamptz',\r\n 'interval',\r\n 'inet',\r\n 'cidr',\r\n 'macaddr',\r\n 'macaddr8',\r\n 'point',\r\n 'line',\r\n 'lseg',\r\n 'box',\r\n 'path',\r\n 'polygon',\r\n 'circle',\r\n 'bit',\r\n 'varbit',\r\n 'xml',\r\n 'tsvector',\r\n 'tsquery',\r\n 'jsonpath',\r\n])\r\n\r\nfunction normalizeTypeLabel(column: IntrospectionColumn): string {\r\n const preferred = (column.udtName || column.dataType).toLowerCase().trim()\r\n if (column.arrayDimensions > 0 && preferred.startsWith('_')) {\r\n return preferred.slice(1)\r\n }\r\n return preferred\r\n}\r\n\r\nfunction wrapArrayType(baseType: string, depth: number): string {\r\n let wrapped = baseType\r\n for (let index = 0; index < depth; index += 1) {\r\n wrapped = `Array<${wrapped}>`\r\n }\r\n return wrapped\r\n}\r\n\r\nfunction resolveScalarType(column: IntrospectionColumn): string {\r\n const label = normalizeTypeLabel(column)\r\n\r\n if (NUMBER_TYPES.has(label)) {\r\n return 'number'\r\n }\r\n\r\n if (STRING_NUMERIC_TYPES.has(label)) {\r\n return 'string'\r\n }\r\n\r\n if (label === 'bool' || label === 'boolean') {\r\n return 'boolean'\r\n }\r\n\r\n if (label === 'bytea') {\r\n return 'Buffer'\r\n }\r\n\r\n if (label === 'json' || label === 'jsonb') {\r\n return 'Record<string, unknown>'\r\n }\r\n\r\n if (TEXT_TYPES.has(label)) {\r\n return 'string'\r\n }\r\n\r\n if (label.endsWith('range') || label.endsWith('multirange')) {\r\n return 'string'\r\n }\r\n\r\n return 'unknown'\r\n}\r\n\r\nfunction resolveKindAwareType(column: IntrospectionColumn): string {\r\n if (column.typeKind === 'enum') {\r\n const values = column.enumValues ?? []\r\n if (values.length === 0) {\r\n return 'string'\r\n }\r\n return values.map(value => `'${value.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\")}'`).join(' | ')\r\n }\r\n\r\n if (column.typeKind === 'composite') {\r\n return 'Record<string, unknown>'\r\n }\r\n\r\n if (column.typeKind === 'domain' || column.typeKind === 'range' || column.typeKind === 'multirange') {\r\n return 'string'\r\n }\r\n\r\n return resolveScalarType(column)\r\n}\r\n\r\nexport function resolvePostgresColumnType(column: IntrospectionColumn): string {\r\n const baseType = resolveKindAwareType(column)\r\n if (!column.arrayDimensions || column.arrayDimensions <= 0) {\r\n return baseType\r\n }\r\n return wrapArrayType(baseType, column.arrayDimensions)\r\n}\r\n","import {\n deleteSessionCookie,\n getCookieCache,\n getCookies,\n getSessionCookie,\n parseCookies,\n setSessionCookie,\n type AthenaAuthCookies,\n type AthenaCookieContextRuntime,\n type AthenaCookieOptions,\n type AthenaCookiesOptions,\n} from '../cookies/index.ts'\nimport type { AthenaSessionPair } from '../cookies/types.ts'\n\ntype AthenaMaybePromise<T> = T | Promise<T>\ntype AthenaAuthServerCookieOptions = Pick<AthenaCookiesOptions, 'session' | 'advanced'>\n\nconst DEFAULT_AUTH_BASE_PATH = '/api/auth'\n\nexport const ATHENA_AUTH_BASE_ERROR_CODES = {\n HANDLER_NOT_CONFIGURED: 'HANDLER_NOT_CONFIGURED',\n INVALID_BASE_URL: 'INVALID_BASE_URL',\n UNTRUSTED_HOST: 'UNTRUSTED_HOST',\n} as const\n\nexport interface AthenaAuthSocialProviderConfig {\n clientId: string\n clientSecret: string\n scope?: string[]\n [key: string]: unknown\n}\n\nexport interface AthenaAuthPluginContext {\n path?: string\n headers?: Headers\n context: {\n returned?: unknown\n responseHeaders?: Headers\n setSession?: AthenaSessionPair | null\n clearSession?: boolean\n dontRememberMe?: boolean\n cookieOverrides?: Partial<AthenaCookieOptions>\n [key: string]: unknown\n }\n}\n\nexport interface AthenaAuthPluginHandlerContext extends AthenaAuthPluginContext {\n auth: AthenaAuthServer\n}\n\nexport interface AthenaAuthPlugin {\n id: string\n version: string\n $ERROR_CODES?: Record<string, string>\n hooks?: {\n after?: Array<{\n matcher: (ctx: AthenaAuthPluginContext) => boolean\n handler: (ctx: AthenaAuthPluginHandlerContext) => Promise<void> | void\n }>\n }\n}\n\nexport interface AthenaAuthCookieRuntimeInput {\n headers?: Headers\n responseHeaders?: Headers\n cookies?: AthenaAuthCookies\n getCookie?: (name: string) => string | null | undefined\n setCookie?: (name: string, value: string, attributes: AthenaCookieOptions) => void\n logger?: AthenaCookieContextRuntime['logger']\n setSignedCookie?: AthenaCookieContextRuntime['setSignedCookie']\n getSignedCookie?: AthenaCookieContextRuntime['getSignedCookie']\n setNewSession?: AthenaCookieContextRuntime['context']['setNewSession']\n}\n\nexport interface AthenaAuthServerRuntimeOptions {\n baseURL?: string\n basePath: string\n secret: string\n cookies: AthenaAuthServerCookieOptions\n}\n\nexport type AthenaAuthDatabaseFactory<TDatabase = unknown> = (\n options: AthenaAuthServerRuntimeOptions,\n) => TDatabase\n\nexport type AthenaAuthBaseURLConfig = AthenaCookiesOptions['baseURL']\n\nexport type AthenaAuthTrustedOrigins =\n | string[]\n | ((request?: Request) => AthenaMaybePromise<string[]>)\n\nexport type AthenaAuthTrustedProviders =\n | string[]\n | ((request?: Request) => AthenaMaybePromise<string[]>)\n\nexport interface AthenaAuthHandlerResult {\n response?: Response\n returned?: unknown\n setSession?: AthenaSessionPair | null\n clearSession?: boolean\n dontRememberMe?: boolean\n cookieOverrides?: Partial<AthenaCookieOptions>\n}\n\nexport interface AthenaAuthServerConfig<\n TDatabase = unknown,\n> extends AthenaAuthServerCookieOptions {\n baseURL?: AthenaAuthBaseURLConfig\n basePath?: string\n secret: string\n database: TDatabase | AthenaAuthDatabaseFactory<TDatabase>\n socialProviders?: Record<string, AthenaAuthSocialProviderConfig>\n trustedOrigins?: AthenaAuthTrustedOrigins\n trustedProviders?: AthenaAuthTrustedProviders\n api?: Record<string, unknown>\n errorCodes?: Record<string, string>\n handler?: (\n ctx: AthenaAuthRequestContext,\n ) => AthenaMaybePromise<Response | AthenaAuthHandlerResult>\n plugins?: AthenaAuthPlugin[]\n}\n\ntype ResolveAthenaAuthDatabase<TConfig extends AthenaAuthServerConfig> =\n TConfig['database'] extends (...args: never[]) => infer TResult\n ? TResult\n : TConfig['database']\n\nexport interface AthenaAuthRequestContext<\n TConfig extends AthenaAuthServerConfig = AthenaAuthServerConfig,\n> {\n auth: AthenaAuthServer<TConfig>\n request: Request\n url: URL\n path: string\n basePath: string\n baseURL: string\n origin: string\n headers: Headers\n cookies: AthenaAuthCookies\n trustedOrigins: string[]\n trustedProviders: string[]\n options: TConfig\n runtime: AthenaAuthServerRuntimeOptions\n database: ResolveAthenaAuthDatabase<TConfig>\n socialProviders: NonNullable<TConfig['socialProviders']>\n}\n\nexport interface AthenaAuthContext<\n TConfig extends AthenaAuthServerConfig = AthenaAuthServerConfig,\n> {\n auth: AthenaAuthServer<TConfig>\n options: TConfig\n runtime: AthenaAuthServerRuntimeOptions\n basePath: string\n baseURL?: string\n origin?: string\n database: ResolveAthenaAuthDatabase<TConfig>\n socialProviders: NonNullable<TConfig['socialProviders']>\n plugins: AthenaAuthPlugin[]\n cookies: AthenaAuthCookies\n trustedOrigins: string[]\n trustedProviders: string[]\n}\n\nexport interface AthenaAuthServerApi<\n TConfig extends AthenaAuthServerConfig = AthenaAuthServerConfig,\n> {\n applyResponseCookies: AthenaAuthServer<TConfig>['applyResponseCookies']\n clearSession: AthenaAuthServer<TConfig>['clearSession']\n createCookieContext: AthenaAuthServer<TConfig>['createCookieContext']\n getCookieCache: typeof getCookieCache\n getSessionCookie: typeof getSessionCookie\n resolveRequestContext: AthenaAuthServer<TConfig>['resolveRequestContext']\n runAfterHooks: AthenaAuthServer<TConfig>['runAfterHooks']\n setSession: AthenaAuthServer<TConfig>['setSession']\n}\n\nexport interface AthenaAuthServer<\n TConfig extends AthenaAuthServerConfig = AthenaAuthServerConfig,\n> {\n config: TConfig\n options: TConfig\n runtime: AthenaAuthServerRuntimeOptions\n database: ResolveAthenaAuthDatabase<TConfig>\n socialProviders: NonNullable<TConfig['socialProviders']>\n plugins: AthenaAuthPlugin[]\n cookies: AthenaAuthCookies\n api: AthenaAuthServerApi<TConfig> & Record<string, unknown>\n $context: Promise<AthenaAuthContext<TConfig>>\n $ERROR_CODES: Record<string, string>\n createCookieContext: (input?: AthenaAuthCookieRuntimeInput) => AthenaCookieContextRuntime\n setSession: (\n input: AthenaAuthCookieRuntimeInput | undefined,\n session: AthenaSessionPair,\n dontRememberMe?: boolean,\n overrides?: Partial<AthenaCookieOptions>,\n ) => Promise<void>\n clearSession: (\n input?: AthenaAuthCookieRuntimeInput,\n skipDontRememberMe?: boolean,\n ) => void\n applyResponseCookies: (ctx: AthenaAuthPluginContext) => Promise<Headers>\n runAfterHooks: (ctx: AthenaAuthPluginContext) => Promise<AthenaAuthPluginContext>\n resolveRequestContext: (request: Request) => Promise<AthenaAuthRequestContext<TConfig>>\n handler: (request: Request) => Promise<Response>\n}\n\nfunction capitalize(value: string): string {\n return value.length > 0 ? `${value[0]?.toUpperCase()}${value.slice(1)}` : value\n}\n\nfunction serializeSetCookieValue(\n name: string,\n value: string,\n attributes: AthenaCookieOptions,\n): string {\n const parts = [`${name}=${encodeURIComponent(value)}`]\n const knownKeys = new Set([\n 'maxAge',\n 'expires',\n 'domain',\n 'path',\n 'secure',\n 'httpOnly',\n 'partitioned',\n 'sameSite',\n ])\n\n if (attributes.maxAge !== undefined) {\n parts.push(`Max-Age=${Math.trunc(attributes.maxAge)}`)\n }\n if (attributes.expires instanceof Date) {\n parts.push(`Expires=${attributes.expires.toUTCString()}`)\n }\n if (attributes.domain) {\n parts.push(`Domain=${attributes.domain}`)\n }\n if (attributes.path) {\n parts.push(`Path=${attributes.path}`)\n }\n if (attributes.secure) {\n parts.push('Secure')\n }\n if (attributes.httpOnly) {\n parts.push('HttpOnly')\n }\n if (attributes.partitioned) {\n parts.push('Partitioned')\n }\n if (attributes.sameSite) {\n parts.push(`SameSite=${capitalize(attributes.sameSite)}`)\n }\n\n for (const [key, rawValue] of Object.entries(attributes)) {\n if (knownKeys.has(key) || rawValue === undefined || rawValue === null || rawValue === false) {\n continue\n }\n if (rawValue === true) {\n parts.push(key)\n continue\n }\n parts.push(`${key}=${String(rawValue)}`)\n }\n\n return parts.join('; ')\n}\n\nfunction readCookieFromHeaders(headers: Headers | undefined, name: string): string | undefined {\n const cookieHeader = headers?.get('cookie')\n if (!cookieHeader) {\n return undefined\n }\n return parseCookies(cookieHeader).get(name)\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction resolveSessionCandidate(value: unknown): AthenaSessionPair | null {\n if (!isRecord(value)) {\n return null\n }\n\n const session = isRecord(value.session) ? value.session : undefined\n const user = isRecord(value.user) ? value.user : undefined\n if (session && typeof session.token === 'string' && session.token.length > 0 && user) {\n return {\n session: session as Record<string, unknown> & { token: string },\n user: user as Record<string, unknown>,\n }\n }\n\n return null\n}\n\nfunction inferSessionPair(returned: unknown): AthenaSessionPair | null {\n return (\n resolveSessionCandidate(returned) ??\n (isRecord(returned) ? resolveSessionCandidate(returned.data) : null) ??\n (isRecord(returned) ? resolveSessionCandidate(returned.session) : null)\n )\n}\n\nfunction resolveResponseHeaders(ctx: AthenaAuthPluginContext): Headers {\n if (ctx.context.responseHeaders instanceof Headers) {\n return ctx.context.responseHeaders\n }\n\n const headers = new Headers()\n ctx.context.responseHeaders = headers\n return headers\n}\n\nfunction normalizeBaseURL(baseURL: string): string {\n return baseURL.replace(/\\/$/, '')\n}\n\nfunction normalizeBasePath(basePath: string | undefined): string {\n if (!basePath || basePath === '/') {\n return DEFAULT_AUTH_BASE_PATH\n }\n\n const normalized = basePath.startsWith('/') ? basePath : `/${basePath}`\n return normalized.endsWith('/') && normalized.length > 1\n ? normalized.slice(0, -1)\n : normalized\n}\n\nfunction isDynamicBaseURLConfig(\n baseURL: AthenaAuthBaseURLConfig | undefined,\n): baseURL is Exclude<AthenaAuthBaseURLConfig, string | undefined> {\n return (\n typeof baseURL === 'object' &&\n baseURL !== null &&\n 'allowedHosts' in baseURL &&\n Array.isArray((baseURL as { allowedHosts?: unknown }).allowedHosts)\n )\n}\n\nfunction getRequestUrl(request: Request): URL {\n try {\n return new URL(request.url)\n } catch {\n return new URL('http://localhost')\n }\n}\n\nfunction getRequestHost(request: Request, url: URL): string | null {\n const forwardedHost = request.headers.get('x-forwarded-host')?.split(',')[0]?.trim()\n const host = forwardedHost || request.headers.get('host') || url.host\n return host || null\n}\n\nfunction getRequestProtocol(\n request: Request,\n configuredProtocol: 'http' | 'https' | 'auto' | undefined,\n url: URL,\n): 'http' | 'https' {\n if (configuredProtocol === 'http' || configuredProtocol === 'https') {\n return configuredProtocol\n }\n\n const forwardedProto = request.headers.get('x-forwarded-proto')?.split(',')[0]?.trim()\n if (forwardedProto === 'http' || forwardedProto === 'https') {\n return forwardedProto\n }\n\n if (url.protocol === 'http:' || url.protocol === 'https:') {\n return url.protocol.slice(0, -1) as 'http' | 'https'\n }\n\n return 'http'\n}\n\nfunction resolveRequestBaseURL(\n baseURL: AthenaAuthBaseURLConfig | undefined,\n request: Request,\n): string | null {\n if (typeof baseURL === 'string') {\n return normalizeBaseURL(baseURL)\n }\n\n const requestUrl = getRequestUrl(request)\n const host = getRequestHost(request, requestUrl)\n if (!host) {\n return null\n }\n\n if (isDynamicBaseURLConfig(baseURL)) {\n const allowedHosts = baseURL.allowedHosts ?? []\n if (allowedHosts.length > 0 && !allowedHosts.includes(host)) {\n return null\n }\n }\n\n const protocol =\n typeof baseURL === 'object' && baseURL !== null\n ? getRequestProtocol(request, baseURL.protocol, requestUrl)\n : getRequestProtocol(request, undefined, requestUrl)\n\n return `${protocol}://${host}`\n}\n\nfunction getOrigin(baseURL: string | undefined): string | undefined {\n if (!baseURL) {\n return undefined\n }\n\n try {\n return new URL(baseURL).origin\n } catch {\n return undefined\n }\n}\n\nasync function resolveTrustedOrigins(\n config: AthenaAuthServerConfig,\n baseURL: string | undefined,\n request?: Request,\n): Promise<string[]> {\n const resolved =\n typeof config.trustedOrigins === 'function'\n ? await config.trustedOrigins(request)\n : (config.trustedOrigins ?? [])\n\n const values = [\n getOrigin(baseURL),\n ...resolved,\n ]\n\n return Array.from(new Set(values.filter((value): value is string => typeof value === 'string' && value.length > 0)))\n}\n\nasync function resolveTrustedProviders(\n config: AthenaAuthServerConfig,\n request?: Request,\n): Promise<string[]> {\n const configured =\n typeof config.trustedProviders === 'function'\n ? await config.trustedProviders(request)\n : (config.trustedProviders ?? [])\n\n const values = [\n ...Object.keys(config.socialProviders ?? {}),\n ...configured,\n ]\n\n return Array.from(new Set(values.filter((value): value is string => typeof value === 'string' && value.length > 0)))\n}\n\nfunction createJsonResponse(payload: unknown, init?: ResponseInit): Response {\n const headers = new Headers(init?.headers)\n if (!headers.has('content-type')) {\n headers.set('content-type', 'application/json; charset=utf-8')\n }\n return new Response(JSON.stringify(payload), {\n ...init,\n headers,\n })\n}\n\nfunction mergeResponseHeaders(response: Response, headers: Headers): Response {\n return new Response(response.body, {\n status: response.status,\n statusText: response.statusText,\n headers,\n })\n}\n\nexport function defineAthenaAuthConfig<TConfig extends AthenaAuthServerConfig>(\n config: TConfig,\n): TConfig {\n return config\n}\n\nexport function athenaAuth<TConfig extends AthenaAuthServerConfig>(\n config: TConfig,\n): AthenaAuthServer<TConfig> {\n const normalizedBasePath = normalizeBasePath(config.basePath)\n const staticBaseURL =\n typeof config.baseURL === 'string' ? normalizeBaseURL(config.baseURL) : undefined\n const runtime: AthenaAuthServerRuntimeOptions = {\n baseURL: staticBaseURL,\n basePath: normalizedBasePath,\n secret: config.secret,\n cookies: {\n session: config.session,\n advanced: config.advanced,\n },\n }\n const resolvedDatabase = (\n typeof config.database === 'function'\n ? config.database(runtime)\n : config.database\n ) as ResolveAthenaAuthDatabase<TConfig>\n const cookies = getCookies({\n baseURL: staticBaseURL ?? config.baseURL,\n session: config.session,\n advanced: config.advanced,\n })\n\n const auth = {} as AthenaAuthServer<TConfig>\n\n const createCookieContext: AthenaAuthServer<TConfig>['createCookieContext'] = (input = {}) => {\n const responseHeaders = input.responseHeaders ?? new Headers()\n const runtimeHeaders = input.headers\n const authCookies = input.cookies ?? auth.cookies\n\n const setCookie = input.setCookie ?? ((name, value, attributes) => {\n responseHeaders.append(\n 'set-cookie',\n serializeSetCookieValue(name, value, attributes),\n )\n })\n\n return {\n headers: runtimeHeaders,\n getCookie: input.getCookie ?? (name => readCookieFromHeaders(runtimeHeaders, name)),\n setCookie,\n logger: input.logger,\n setSignedCookie: input.setSignedCookie,\n getSignedCookie: input.getSignedCookie,\n context: {\n secret: runtime.secret,\n authCookies,\n sessionConfig: {\n expiresIn: config.session?.expiresIn,\n },\n options: {\n session: {\n cookieCache: config.session?.cookieCache,\n },\n account: {\n storeAccountCookie: true,\n },\n },\n setNewSession: input.setNewSession,\n },\n }\n }\n\n const setSession: AthenaAuthServer<TConfig>['setSession'] = async (\n input,\n session,\n dontRememberMe,\n overrides,\n ) => {\n const cookieContext = createCookieContext(input)\n await setSessionCookie(cookieContext, session, dontRememberMe, overrides)\n }\n\n const clearSession: AthenaAuthServer<TConfig>['clearSession'] = (\n input,\n skipDontRememberMe,\n ) => {\n const cookieContext = createCookieContext(input)\n deleteSessionCookie(cookieContext, skipDontRememberMe)\n }\n\n const applyResponseCookies: AthenaAuthServer<TConfig>['applyResponseCookies'] = async ctx => {\n const responseHeaders = resolveResponseHeaders(ctx)\n const session =\n ctx.context.setSession ??\n inferSessionPair(ctx.context.returned)\n\n if (ctx.context.clearSession) {\n clearSession({\n headers: ctx.headers,\n responseHeaders,\n })\n }\n\n if (session) {\n await setSession(\n {\n headers: ctx.headers,\n responseHeaders,\n },\n session,\n ctx.context.dontRememberMe,\n ctx.context.cookieOverrides,\n )\n }\n\n return responseHeaders\n }\n\n const runAfterHooks: AthenaAuthServer<TConfig>['runAfterHooks'] = async ctx => {\n for (const plugin of auth.plugins) {\n for (const hook of plugin.hooks?.after ?? []) {\n if (!hook.matcher(ctx)) {\n continue\n }\n await hook.handler({\n ...ctx,\n auth,\n })\n }\n }\n return ctx\n }\n\n const resolveRequestContext: AthenaAuthServer<TConfig>['resolveRequestContext'] = async request => {\n const requestUrl = getRequestUrl(request)\n const resolvedBaseURL = resolveRequestBaseURL(config.baseURL, request)\n if (!resolvedBaseURL) {\n throw new Error(\n isDynamicBaseURLConfig(config.baseURL)\n ? 'Could not resolve base URL from request. Check allowedHosts/baseURL.'\n : 'Could not resolve base URL from request.',\n )\n }\n\n const requestCookies = getCookies({\n baseURL: resolvedBaseURL,\n session: config.session,\n advanced: config.advanced,\n })\n const trustedOrigins = await resolveTrustedOrigins(config, resolvedBaseURL, request)\n const trustedProviders = await resolveTrustedProviders(config, request)\n\n return {\n auth,\n request,\n url: requestUrl,\n path: requestUrl.pathname,\n basePath: normalizedBasePath,\n baseURL: resolvedBaseURL,\n origin: getOrigin(resolvedBaseURL) ?? resolvedBaseURL,\n headers: request.headers,\n cookies: requestCookies,\n trustedOrigins,\n trustedProviders,\n options: config,\n runtime: {\n ...runtime,\n baseURL: resolvedBaseURL,\n },\n database: auth.database,\n socialProviders: auth.socialProviders,\n }\n }\n\n const handler: AthenaAuthServer<TConfig>['handler'] = async request => {\n const requestContext = await resolveRequestContext(request)\n\n if (typeof config.handler !== 'function') {\n return createJsonResponse(\n {\n ok: false,\n code: ATHENA_AUTH_BASE_ERROR_CODES.HANDLER_NOT_CONFIGURED,\n error: 'No native auth handler was configured for this Athena auth instance.',\n path: requestContext.path,\n basePath: requestContext.basePath,\n },\n { status: 501 },\n )\n }\n\n const result = await config.handler(requestContext)\n if (result instanceof Response) {\n return result\n }\n\n const response =\n result.response ??\n (result.returned !== undefined\n ? createJsonResponse(result.returned)\n : new Response(null, { status: 204 }))\n\n const responseHeaders = new Headers(response.headers)\n await runAfterHooks({\n path: requestContext.path,\n headers: request.headers,\n context: {\n responseHeaders,\n returned: result.returned,\n setSession: result.setSession,\n clearSession: result.clearSession,\n dontRememberMe: result.dontRememberMe,\n cookieOverrides: result.cookieOverrides,\n },\n })\n\n return mergeResponseHeaders(response, responseHeaders)\n }\n\n const api: AthenaAuthServer<TConfig>['api'] = Object.assign(\n {\n applyResponseCookies,\n clearSession,\n createCookieContext,\n getCookieCache,\n getSessionCookie,\n resolveRequestContext,\n runAfterHooks,\n setSession,\n } satisfies AthenaAuthServerApi<TConfig>,\n config.api ?? {},\n )\n\n const $ERROR_CODES = {\n ...auth.plugins?.reduce<Record<string, string>>((acc, plugin) => {\n if (plugin.$ERROR_CODES) {\n return {\n ...acc,\n ...plugin.$ERROR_CODES,\n }\n }\n return acc\n }, {}),\n ...(config.errorCodes ?? {}),\n ...ATHENA_AUTH_BASE_ERROR_CODES,\n }\n\n Object.assign(auth, {\n config,\n options: config,\n runtime,\n database: resolvedDatabase,\n socialProviders: (config.socialProviders ?? {}) as NonNullable<TConfig['socialProviders']>,\n plugins: [...(config.plugins ?? [])],\n cookies,\n api,\n $ERROR_CODES,\n createCookieContext,\n setSession,\n clearSession,\n applyResponseCookies,\n runAfterHooks,\n resolveRequestContext,\n handler,\n } satisfies Omit<AthenaAuthServer<TConfig>, '$context'>)\n\n auth.$context = Promise.all([\n resolveTrustedOrigins(config, staticBaseURL),\n resolveTrustedProviders(config),\n ]).then(([trustedOrigins, trustedProviders]) => ({\n auth,\n options: config,\n runtime,\n basePath: normalizedBasePath,\n baseURL: staticBaseURL,\n origin: getOrigin(staticBaseURL),\n database: auth.database,\n socialProviders: auth.socialProviders,\n plugins: auth.plugins,\n cookies: auth.cookies,\n trustedOrigins,\n trustedProviders,\n }))\n\n return auth\n}\n","/**\r\n * athena-js browser entry\r\n *\r\n * Keeps the root package import browser-safe by avoiding Node-only modules\r\n * while preserving the existing export surface.\r\n */\r\n\r\n// Athena client\r\nexport { createClient, AthenaClient } from './client.js'\r\nexport { Backend } from './gateway/types.js'\r\nexport { AthenaGatewayError, isAthenaGatewayError } from './gateway/errors.ts'\r\nexport { verifyAthenaGatewayUrl } from './gateway/client.ts'\r\nexport { normalizeAthenaGatewayBaseUrl } from './gateway/url.ts'\r\nexport {\r\n isOk,\r\n unwrap,\r\n unwrapRows,\r\n unwrapOne,\r\n requireSuccess,\r\n requireAffected,\r\n parseBooleanFlag,\r\n normalizeAthenaError,\r\n coerceInt,\r\n assertInt,\r\n withRetry,\r\n AthenaError,\r\n AthenaErrorCode,\r\n AthenaErrorKind,\r\n AthenaErrorCategory,\r\n} from './auxiliaries.js'\r\nexport { identifier } from './sql-identifiers.ts'\r\nexport {\r\n defineDatabase,\r\n defineModel,\r\n defineRegistry,\r\n defineSchema,\r\n} from './schema/definitions.ts'\r\nexport {\r\n table,\r\n} from './schema/table-builder.ts'\r\nexport {\r\n boolean,\r\n enumeration,\r\n json,\r\n number,\r\n string,\r\n} from './schema/table-columns.ts'\r\nexport { createTypedClient } from './schema/typed-client.ts'\r\nexport {\r\n createModelFormAdapter,\r\n toModelFormDefaults,\r\n toModelPayload,\r\n} from './schema/model-form.ts'\r\nexport {\n DEFAULT_POSTGRES_SCHEMAS,\n normalizeSchemaSelection,\n resolveProviderSchemas,\n} from './generator/schema-selection.ts'\nexport {\n filterIntrospectionSnapshot,\n normalizeTableSelection,\n} from './generator/table-selection.ts'\nexport { generatorEnv } from './generator/env.ts'\nexport { resolvePostgresColumnType } from './generator/postgres-type-mapping.ts'\nexport {\n ATHENA_AUTH_ADMIN_LIMITS,\n ATHENA_AUTH_MAX_ADMIN_JSON_BYTES,\n ATHENA_AUTH_MAX_ADMIN_JSON_DEPTH,\n ATHENA_AUTH_MAX_TEMPLATE_VARIABLES,\n ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH,\n ATHENA_AUTH_BASE_ERROR_CODES,\n athenaAuth,\n createAuthClient,\n defineAthenaAuthConfig,\n renderAthenaReactEmail,\n createAuthReactEmailInput,\r\n defineAuthEmailTemplate,\r\n} from './auth/index.ts'\r\nexport {\n chatSdkManifest,\n AthenaChatError,\n unwrapChatMessage,\n unwrapChatRoom,\n} from './chat/module.ts'\nexport {\n storageSdkManifest,\n AthenaStorageError,\n AthenaStorageErrorCode,\n createAthenaStorageError,\r\n} from './storage/module.ts'\r\nexport { getAthenaDebugAst } from './query-debug-ast.ts'\r\n\r\nimport type {\r\n PostgresIntrospectionProviderOptions,\r\n} from './schema/postgres-provider.ts'\r\nimport type { IntrospectionSnapshot, SchemaIntrospectionProvider } from './schema/types.ts'\r\nimport type {\n AthenaGeneratorConfig,\n GeneratedArtifacts,\n GeneratorExperimentalFlags,\n GeneratorProviderConfig,\n LoadGeneratorConfigOptions,\n LoadedGeneratorConfig,\n NormalizedAthenaGeneratorConfig,\n RunGeneratorOptions,\n RunGeneratorResult,\n} from './generator/types.ts'\r\n\r\nfunction throwBrowserUnsupported(apiName: string): never {\r\n throw new Error(\r\n `@xylex-group/athena: ${apiName} is not available in browser bundles. Use this API in a Node.js runtime.`,\r\n )\r\n}\r\n\r\nexport function createPostgresIntrospectionProvider(\r\n options: PostgresIntrospectionProviderOptions,\r\n): SchemaIntrospectionProvider {\r\n void options\r\n return throwBrowserUnsupported('createPostgresIntrospectionProvider')\r\n}\r\n\r\nexport function defineGeneratorConfig<TConfig extends AthenaGeneratorConfig>(\r\n config: TConfig,\r\n): TConfig {\r\n return config\r\n}\r\n\r\nexport function findGeneratorConfigPath(cwd?: string): string | undefined {\r\n void cwd\r\n return throwBrowserUnsupported('findGeneratorConfigPath')\r\n}\r\n\r\nexport async function loadGeneratorConfig(\r\n options: LoadGeneratorConfigOptions = {},\r\n): Promise<LoadedGeneratorConfig> {\r\n void options\r\n return throwBrowserUnsupported('loadGeneratorConfig')\r\n}\r\n\r\nexport function normalizeGeneratorConfig(\r\n input: AthenaGeneratorConfig,\r\n): NormalizedAthenaGeneratorConfig {\r\n void input\r\n return throwBrowserUnsupported('normalizeGeneratorConfig')\r\n}\r\n\r\nexport function generateArtifactsFromSnapshot(\r\n snapshot: IntrospectionSnapshot,\r\n config: AthenaGeneratorConfig | NormalizedAthenaGeneratorConfig,\r\n): GeneratedArtifacts {\r\n void snapshot\r\n void config\r\n return throwBrowserUnsupported('generateArtifactsFromSnapshot')\r\n}\r\n\r\nexport function resolveGeneratorProvider(\r\n providerConfig: GeneratorProviderConfig,\r\n experimentalFlags: GeneratorExperimentalFlags,\r\n): SchemaIntrospectionProvider {\r\n void providerConfig\r\n void experimentalFlags\r\n return throwBrowserUnsupported('resolveGeneratorProvider')\r\n}\r\n\r\nexport async function runSchemaGenerator(\r\n options: RunGeneratorOptions = {},\r\n): Promise<RunGeneratorResult> {\r\n void options\r\n return throwBrowserUnsupported('runSchemaGenerator')\r\n}\r\n\r\nexport type {\r\n AthenaClientExperimentalOptions,\r\n AthenaFromOptions,\n AthenaRequestMethod,\n AthenaRequestOptions,\n AthenaRequestQueryValueMap,\n AthenaRequestResponse,\n AthenaRequestService,\n RpcQueryBuilder,\n RpcOrderOptions,\n AthenaCreateClientAuthOptions,\n AthenaCreateClientConfig,\n AthenaCreateClientConfigWithStorage,\n AthenaCreateClientConfigWithStorageAndTypecheckedColumns,\n AthenaCreateClientConfigWithTypecheckedColumns,\n AthenaCreateClientOptions,\n AthenaClientContextOptions,\n AthenaClientFromEnvironmentOptions,\n AthenaClientFromEnvironmentOptionsWithStorage,\n AthenaClientFromEnvironmentOptionsWithStorageAndTypecheckedColumns,\n AthenaClientFromEnvironmentOptionsWithTypecheckedColumns,\n AthenaClientSessionLike,\n AthenaClientSessionOptions,\n AthenaHeaderBag,\n AthenaClientOverrideOptions,\n AthenaCreateClientChatOptions,\n AthenaCreateClientServiceUrlConfig,\n AthenaCreateClientOptionsWithTypecheckedColumns,\n AthenaSdkClient,\n AthenaSdkClientWithAuth,\r\n AthenaSdkClientWithStorage,\r\n TableQueryBuilder,\r\n AthenaResult,\r\n AthenaCreateClientOptionsWithStorage,\n AthenaCreateClientOptionsWithStorageAndTypecheckedColumns,\n} from './client.js'\nexport type * from './chat/types.js'\nexport type {\n AthenaDeleteDebugAst,\n AthenaFindManyDebugAst,\r\n AthenaInsertDebugAst,\r\n AthenaQueryDebugAst,\r\n AthenaRawQueryDebugAst,\r\n AthenaRpcBuilderStateAst,\r\n AthenaRpcDebugAst,\r\n AthenaSelectDebugAst,\r\n AthenaSelectDebugTransport,\r\n AthenaTableBuilderStateAst,\r\n AthenaUpdateDebugAst,\r\n AthenaUpsertDebugAst,\r\n} from './query-debug-ast.ts'\r\nexport type { AthenaDbModule } from './db/module.js'\r\nexport type {\r\n AthenaEnvelope,\r\n AthenaStorageBinaryCallOptions,\r\n AthenaStorageCallOptions,\r\n AthenaStorageClientConfig,\r\n AthenaStorageErrorDetails,\r\n AthenaStorageErrorHandler,\r\n AthenaStorageErrorInput,\r\n AthenaStorageModule,\r\n CreateStorageCatalogRequest,\r\n CreateStorageUploadUrlRequest,\r\n CreateStorageUploadUrlsRequest,\r\n DeleteStorageFolderRequest,\r\n GetStorageFileUrlQuery,\r\n ListStorageFilesRequest,\r\n ManagedFileRecord,\r\n MoveStorageFolderRequest,\r\n PresignedFileUrlResponse,\r\n S3CatalogItem,\r\n S3CredentialListItem,\r\n SetStorageFileVisibilityRequest,\r\n StorageFileAccessPurpose,\r\n StorageBatchUploadUrlResponse,\r\n StorageFileMutationResponse,\r\n StorageFolderMutationResponse,\r\n StorageListFilesResponse,\r\n StorageUploadUrlResponse,\r\n UpdateStorageCatalogRequest,\n UpdateStorageFileRequest,\n} from './storage/module.js'\nexport type * from './storage/module.js'\nexport type {\n AthenaStorageEnv,\r\n AthenaStorageFileConfig,\r\n AthenaStorageFileDeleteInput,\r\n AthenaStorageFileDownloadInput,\r\n AthenaStorageFileListInput,\r\n AthenaStorageFileModule,\r\n AthenaStorageFileUploadInput,\r\n AthenaStorageFileUploadResult,\r\n AthenaStoragePathContext,\r\n AthenaStoragePrefixPath,\r\n AthenaStorageTemplateValue,\r\n AthenaStorageTemplateVars,\r\n AthenaStorageUploadedFile,\r\n AthenaStorageUploadConstraints,\r\n AthenaStorageUploadProgress,\r\n AthenaStorageUploadProgressHandler,\r\n AthenaStorageUploadSource,\r\n} from './storage/file.js'\r\nexport type {\r\n AthenaErrorInput,\r\n AthenaOperationContext,\r\n NormalizedAthenaError,\r\n UnwrapOptions,\r\n UnwrapOneOptions,\r\n RequireAffectedOptions,\r\n IntCoercionOptions,\r\n RetryConfig,\r\n RetryBackoffStrategy,\r\n} from './auxiliaries.js'\r\nexport type {\r\n AthenaModelTarget,\r\n AnyColumnBuilder,\r\n AthenaColumnBuilder,\r\n AthenaTableDef,\r\n AthenaTableSchemaBundle,\r\n ColumnRuntimeConfig,\r\n DatabaseDef,\r\n FormValuesOf,\r\n FormValuesFromColumns,\r\n InsertOf,\r\n InsertFromColumns,\r\n IntrospectionColumn,\r\n IntrospectionInspectOptions,\r\n IntrospectionRelation,\r\n IntrospectionSchema,\r\n IntrospectionSnapshot,\r\n IntrospectionTable,\r\n IntrospectionTypeKind,\r\n ModelColumnKind,\r\n ModelColumnMetadata,\r\n ModelAt,\r\n ModelDef,\r\n ModelMetadata,\r\n ModelRelationKind,\r\n ModelRelationMetadata,\r\n PostgresIntrospectionProviderOptions,\r\n RegistryDef,\r\n RowFromColumns,\r\n RowOf,\r\n SchemaDef,\r\n SchemaIntrospectionProvider,\r\n ModelFormAdapter,\r\n ModelFormDefaults,\r\n ModelFormNullishMode,\r\n ModelFormValues,\r\n TenantContext,\r\n TenantContextValue,\r\n TenantKeyMap,\r\n ToModelFormDefaultsOptions,\r\n ToModelPayloadOptions,\r\n TypedAthenaClient,\r\n TypedClientOptions,\r\n TypedClientOptionsWithTypecheckedColumns,\r\n UpdateFromColumns,\r\n UpdateOf,\r\n} from './schema/index.ts'\r\nexport type {\r\n AthenaGeneratorConfig,\r\n GeneratedArtifact,\n GeneratedArtifacts,\n GeneratorArtifactKind,\n GeneratorExperimentalFlags,\n GeneratorFilterConfig,\n GeneratorFeatureFlags,\n GeneratorInternalConfig,\n GeneratorNamingConfig,\n GeneratorOutputConfig,\n GeneratorOutputFormat,\n GeneratorOutputPreset,\n GeneratorOutputTargets,\n GeneratorProviderConfig,\n GeneratorSchemaSelection,\n GeneratorTableSelection,\n LoadGeneratorConfigOptions,\n LoadedGeneratorConfig,\n NamingStyle,\n NormalizedGeneratorFilterConfig,\n NormalizedGeneratorOutputConfig,\n NormalizedAthenaGeneratorConfig,\n RunGeneratorOptions,\n RunGeneratorResult,\n SkippedGeneratedArtifact,\n SkippedGeneratedArtifactReason,\n} from './generator/index.ts'\nexport type {\r\n AthenaAuthQueryPrimitive,\r\n AthenaAuthQueryValue,\r\n AthenaAuthCredentials,\r\n AthenaAuthCallOptions,\n AthenaAuthClientConfig,\n AthenaAuthGetUserResponse,\n AthenaAuthEndpointPath,\n AthenaAuthErrorCode,\r\n AthenaAuthErrorDetails,\r\n AthenaAuthRequestInput,\r\n AthenaAuthMethod,\r\n AthenaAuthResult,\r\n AthenaAuthBindings,\r\n AthenaAuthStatusResponse,\r\n AthenaAuthRevokeSessionRequest,\r\n AthenaAuthSessionRevokeBinding,\r\n AthenaAuthAdminUserSessionRevokeBinding,\r\n AthenaAuthResetPasswordBinding,\r\n AthenaAuthGenericInput,\r\n AthenaAuthGenericQueryInput,\r\n AthenaAuthSdkClient,\r\n AthenaAuthSocialRedirectResponse,\r\n AthenaAuthEmailChangeResponse,\r\n AthenaAuthLinkedAccount,\r\n AthenaAuthOrganization,\r\n AthenaAuthOrganizationMember,\r\n AthenaAuthOrganizationInvitation,\r\n AthenaAuthOrganizationBindings,\r\n AthenaOAuthTokenBundle,\r\n AthenaOAuthAccountTokenRequest,\r\n AthenaForgetPasswordRequest,\r\n AthenaResetPasswordRequest,\r\n AthenaVerifyEmailRequest,\r\n AthenaSendVerificationEmailRequest,\r\n AthenaChangeEmailRequest,\r\n AthenaChangePasswordRequest,\r\n AthenaUpdateUserRequest,\r\n AthenaDeleteUserRequest,\r\n AthenaDeleteUserCallbackRequest,\r\n AthenaDeleteUserResponse,\r\n AthenaAuthReactEmailProps,\r\n AthenaAuthReactEmailComponent,\r\n AthenaAuthReactEmailRenderInput,\r\n AthenaAuthReactEmailRenderOptions,\r\n AthenaAuthReactEmailConfig,\r\n AthenaAuthReactEmailEventPhase,\n AthenaAuthReactEmailRenderEvent,\n AthenaAuthEmailTemplateDefinition,\n AthenaAuthEmailTemplateReactOverrides,\n AthenaAuthEmailTemplateCreateFromDefinitionInput,\n AthenaAuthEmailTemplateUpdateFromDefinitionInput,\n AthenaAuthEmailTemplateBuilder,\n AthenaAdminEmailListQuery,\n AthenaAdminEmailListResponse,\n AthenaAdminEmailGetQuery,\n AthenaAdminEmailGetResponse,\n AthenaAdminEmailCreateRequest,\n AthenaAdminEmailUpdateRequest,\n AthenaAdminEmailUpdateResponse,\n AthenaAdminEmailDeleteRequest,\n AthenaAdminEmailFailureListQuery,\n AthenaAdminEmailFailureListResponse,\n AthenaAdminEmailFailureGetQuery,\n AthenaAdminEmailFailureGetResponse,\n AthenaAdminEmailFailureCreateRequest,\n AthenaAdminEmailFailureUpdateRequest,\n AthenaAdminEmailFailureUpdateResponse,\n AthenaAdminEmailFailureDeleteRequest,\n AthenaAdminEmailTemplateListQuery,\n AthenaAdminEmailTemplateListResponse,\n AthenaAdminEmailTemplateCreateRequest,\n AthenaAdminEmailTemplateUpdateRequest,\n AthenaAdminEmailTemplateRecord,\n AthenaAdminEmailTemplateDeleteRequest,\n AthenaAdminEmailTemplateGetQuery,\n AthenaAdminEmailTemplateGetResponse,\n AthenaAdminEmailTemplateSendRequest,\n AthenaAdminEmailTemplateSendResponse,\n AthenaAdminEmailEventTypeRecord,\n AthenaAdminEmailEventTypeListResponse,\n AthenaAuthEmailTemplateVariableBinding,\n AthenaAuthEmailTemplateAttachment,\n AthenaLinkSocialRequest,\n AthenaUnlinkAccountRequest,\n AthenaAuthSession,\n AthenaAuthSessionResponse,\n AthenaSocialSignInRequest,\n AthenaUsernameSignInRequest,\n AthenaAuthSignInResponse,\n AthenaAuthSignOutResponse,\n AthenaAuthUser,\n AthenaEmailSignInRequest,\n AthenaEmailSignUpRequest,\n AthenaAuthAdminLimits,\n} from './auth/index.ts'\nexport type {\r\n AthenaJsonPrimitive,\r\n AthenaJsonValue,\r\n AthenaJsonObject,\r\n AthenaJsonArray,\r\n AthenaConditionCastType,\r\n AthenaRpcCallOptions,\r\n AthenaRpcFilter,\r\n AthenaRpcFilterOperator,\r\n AthenaRpcOrder,\r\n AthenaRpcPayload,\r\n AthenaGatewayErrorCode,\r\n AthenaGatewayErrorDetails,\r\n AthenaGatewayConnectionOptions,\r\n AthenaGatewayConnectionResult,\r\n BackendType,\r\n BackendConfig,\r\n AthenaGatewayCallOptions,\r\n} from './gateway/types.js'\r\n"]}
|